19899 lines
648 KiB
JavaScript
19899 lines
648 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __commonJS = (cb, mod) => function __require() {
|
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
};
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
// file that has been converted to a CommonJS file using a Babel-
|
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
mod
|
|
));
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
|
|
// node_modules/fantasy-name-generator/dist/util/names.js
|
|
var require_names = __commonJS({
|
|
"node_modules/fantasy-name-generator/dist/util/names.js"(exports) {
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.names = {
|
|
vileAndCrude: {
|
|
small: [
|
|
"ach",
|
|
"adz",
|
|
"ak",
|
|
"ark",
|
|
"az",
|
|
"balg",
|
|
"bilg",
|
|
"blid",
|
|
"blig",
|
|
"blok",
|
|
"blot",
|
|
"bolg",
|
|
"bot",
|
|
"bug",
|
|
"burk",
|
|
"dokh",
|
|
"drik",
|
|
"driz",
|
|
"duf",
|
|
"flug",
|
|
"ga",
|
|
"gad",
|
|
"gag",
|
|
"gah",
|
|
"gak",
|
|
"gar",
|
|
"gat",
|
|
"gaz",
|
|
"ghag",
|
|
"ghak",
|
|
"git",
|
|
"glag",
|
|
"glak",
|
|
"glat",
|
|
"glig",
|
|
"gliz",
|
|
"glok",
|
|
"gnat",
|
|
"gog",
|
|
"grak",
|
|
"grat",
|
|
"guk",
|
|
"hig",
|
|
"irk",
|
|
"kak",
|
|
"khad",
|
|
"krig",
|
|
"lag",
|
|
"lak",
|
|
"lig",
|
|
"likk",
|
|
"loz",
|
|
"luk",
|
|
"mak",
|
|
"maz",
|
|
"miz",
|
|
"mub",
|
|
"nad",
|
|
"nag",
|
|
"naz",
|
|
"nig",
|
|
"nikk",
|
|
"nogg",
|
|
"nok",
|
|
"nukk",
|
|
"rag",
|
|
"rak",
|
|
"rat",
|
|
"rok",
|
|
"shrig",
|
|
"shuk",
|
|
"skrag",
|
|
"skug",
|
|
"slai",
|
|
"slig",
|
|
"slog",
|
|
"sna",
|
|
"snag",
|
|
"snark",
|
|
"snat",
|
|
"snig",
|
|
"snik",
|
|
"snit",
|
|
"sog",
|
|
"spik",
|
|
"stogg",
|
|
"tog",
|
|
"urf",
|
|
"vark",
|
|
"yad",
|
|
"yagg",
|
|
"yak",
|
|
"yark",
|
|
"yarp",
|
|
"yig",
|
|
"yip",
|
|
"zat",
|
|
"zib",
|
|
"zit",
|
|
"ziz"
|
|
],
|
|
medium: [
|
|
"ag",
|
|
"aug",
|
|
"bad",
|
|
"bag",
|
|
"bakh",
|
|
"bash",
|
|
"baz",
|
|
"blag",
|
|
"brag",
|
|
"brog",
|
|
"bruz",
|
|
"dag",
|
|
"dakk",
|
|
"darg",
|
|
"dob",
|
|
"dog",
|
|
"drab",
|
|
"dug",
|
|
"dur",
|
|
"gash",
|
|
"ghaz",
|
|
"glakh",
|
|
"glaz",
|
|
"glob",
|
|
"glol",
|
|
"gluf",
|
|
"glur",
|
|
"gnarl",
|
|
"gnash",
|
|
"gnub",
|
|
"gob",
|
|
"gokh",
|
|
"gol",
|
|
"golk",
|
|
"gor",
|
|
"grakh",
|
|
"grash",
|
|
"grath",
|
|
"graz",
|
|
"grot",
|
|
"grub",
|
|
"grud",
|
|
"gud",
|
|
"gut",
|
|
"hag",
|
|
"hakk",
|
|
"hrat",
|
|
"hrog",
|
|
"hrug",
|
|
"khag",
|
|
"khar",
|
|
"krag",
|
|
"krud",
|
|
"lakh",
|
|
"lash",
|
|
"lob",
|
|
"lub",
|
|
"lud",
|
|
"luf",
|
|
"luk",
|
|
"molk",
|
|
"muk",
|
|
"muz",
|
|
"nar",
|
|
"ogg",
|
|
"olg",
|
|
"rag",
|
|
"rash",
|
|
"rogg",
|
|
"rorg",
|
|
"rot",
|
|
"rud",
|
|
"ruft",
|
|
"rug",
|
|
"rut",
|
|
"shad",
|
|
"shag",
|
|
"shak",
|
|
"shaz",
|
|
"shog",
|
|
"skar",
|
|
"skulg",
|
|
"slur",
|
|
"snar",
|
|
"snorl",
|
|
"snub",
|
|
"snurr",
|
|
"sod",
|
|
"stulg",
|
|
"thak",
|
|
"trog",
|
|
"ug",
|
|
"umsh",
|
|
"ung",
|
|
"uth",
|
|
"yakh",
|
|
"yash",
|
|
"yob",
|
|
"zahk",
|
|
"zog"
|
|
],
|
|
large: [
|
|
"argh",
|
|
"barsh",
|
|
"bog",
|
|
"burz",
|
|
"dof",
|
|
"drok",
|
|
"drub",
|
|
"drug",
|
|
"dub",
|
|
"dug",
|
|
"dul",
|
|
"dursh",
|
|
"dush",
|
|
"duz",
|
|
"faug",
|
|
"fug",
|
|
"ghakh",
|
|
"ghar",
|
|
"ghash",
|
|
"ghol",
|
|
"ghor",
|
|
"ghukk",
|
|
"ghul",
|
|
"glub",
|
|
"glud",
|
|
"glug",
|
|
"gluz",
|
|
"gom",
|
|
"grad",
|
|
"grash",
|
|
"grob",
|
|
"grogg",
|
|
"grok",
|
|
"grol",
|
|
"gru",
|
|
"gruf",
|
|
"gruk",
|
|
"grul",
|
|
"grum",
|
|
"grumf",
|
|
"grut",
|
|
"gruz",
|
|
"guhl",
|
|
"gulv",
|
|
"hai",
|
|
"hrung",
|
|
"hur",
|
|
"hurg",
|
|
"kai",
|
|
"klob",
|
|
"krod",
|
|
"kug",
|
|
"kulk",
|
|
"kur",
|
|
"lorg",
|
|
"lug",
|
|
"lukh",
|
|
"lum",
|
|
"lurz",
|
|
"lush",
|
|
"luz",
|
|
"makh",
|
|
"maug",
|
|
"molg",
|
|
"mud",
|
|
"mug",
|
|
"mul",
|
|
"murk",
|
|
"muzd",
|
|
"nakh",
|
|
"narg",
|
|
"obb",
|
|
"rolb",
|
|
"rukh",
|
|
"ruz",
|
|
"sharg",
|
|
"shruf",
|
|
"shud",
|
|
"shug",
|
|
"shur",
|
|
"shuz",
|
|
"slub",
|
|
"slud",
|
|
"slug",
|
|
"snad",
|
|
"snog",
|
|
"thrag",
|
|
"thulk",
|
|
"thurk",
|
|
"trug",
|
|
"ulg",
|
|
"ur",
|
|
"urd",
|
|
"urgh",
|
|
"urkh",
|
|
"uz",
|
|
"yug",
|
|
"yur",
|
|
"zud",
|
|
"zug"
|
|
]
|
|
},
|
|
primitive: {
|
|
names: [
|
|
"ahg",
|
|
"baod",
|
|
"beegh",
|
|
"bohr",
|
|
"bul",
|
|
"buli",
|
|
"burh",
|
|
"buri",
|
|
"chah",
|
|
"dhak",
|
|
"digri",
|
|
"dum",
|
|
"eghi",
|
|
"ehm",
|
|
"faogh",
|
|
"feehm",
|
|
"ghad",
|
|
"ghah",
|
|
"gham",
|
|
"ghan",
|
|
"ghat",
|
|
"ghaw",
|
|
"ghee",
|
|
"ghish",
|
|
"ghug",
|
|
"giree",
|
|
"gonkh",
|
|
"goun",
|
|
"goush",
|
|
"guh",
|
|
"gunri",
|
|
"hah",
|
|
"hani",
|
|
"haogh",
|
|
"hatoo",
|
|
"heghi",
|
|
"heh",
|
|
"hoo",
|
|
"houm",
|
|
"hree",
|
|
"ig",
|
|
"kham",
|
|
"khan",
|
|
"khaz",
|
|
"khee",
|
|
"khem",
|
|
"khuri",
|
|
"logh",
|
|
"lugh",
|
|
"maoh",
|
|
"meh",
|
|
"mogh",
|
|
"mouh",
|
|
"mugh",
|
|
"naoh",
|
|
"naroo",
|
|
"nham",
|
|
"nuh",
|
|
"ob",
|
|
"oli",
|
|
"orf",
|
|
"ough",
|
|
"ouh",
|
|
"peh",
|
|
"pogh",
|
|
"pugh",
|
|
"puh",
|
|
"quagi",
|
|
"rahoo",
|
|
"rhoo",
|
|
"rifoo",
|
|
"ronkh",
|
|
"rouk",
|
|
"saom",
|
|
"saori",
|
|
"shehi",
|
|
"shlo",
|
|
"shom",
|
|
"shour",
|
|
"shul",
|
|
"snaoh",
|
|
"suhi",
|
|
"suth",
|
|
"teb",
|
|
"thom",
|
|
"toudh",
|
|
"tregh",
|
|
"tuhli",
|
|
"ub",
|
|
"urush",
|
|
"ush",
|
|
"vuh",
|
|
"wah",
|
|
"wuh",
|
|
"yaum",
|
|
"yauth",
|
|
"yeeh",
|
|
"yih",
|
|
"yuh",
|
|
"zham"
|
|
],
|
|
suffixes: ["doh", "rei", "mih", "fah", "soh", "lah", "tih", "daoh"]
|
|
},
|
|
doughty: {
|
|
syllables: [
|
|
"bal",
|
|
"durn",
|
|
"na",
|
|
"bord",
|
|
"from",
|
|
"nor",
|
|
"born",
|
|
"fror",
|
|
"nord",
|
|
"brim",
|
|
"fuld",
|
|
"orm",
|
|
"brod",
|
|
"fund",
|
|
"skand",
|
|
"brokk",
|
|
"gim",
|
|
"skond",
|
|
"brom",
|
|
"glo",
|
|
"storn",
|
|
"bru",
|
|
"gond",
|
|
"strom",
|
|
"bur",
|
|
"gord",
|
|
"stur",
|
|
"burl",
|
|
"gorm",
|
|
"sturl",
|
|
"da",
|
|
"grad",
|
|
"sund",
|
|
"dal",
|
|
"grim",
|
|
"thor",
|
|
"dolg",
|
|
"grod",
|
|
"thorn",
|
|
"dor",
|
|
"grom",
|
|
"thra",
|
|
"dorm",
|
|
"guld",
|
|
"thro",
|
|
"dral",
|
|
"gund",
|
|
"throl",
|
|
"drim",
|
|
"gur",
|
|
"thror",
|
|
"drom",
|
|
"hord",
|
|
"thru",
|
|
"dur",
|
|
"horn",
|
|
"thrur",
|
|
"durm",
|
|
"hra",
|
|
"thund"
|
|
],
|
|
maleSuffixes: [
|
|
"bor",
|
|
"din",
|
|
"in",
|
|
"in",
|
|
"in",
|
|
"ir",
|
|
"li",
|
|
"li",
|
|
"lin",
|
|
"nir",
|
|
"or",
|
|
"ri",
|
|
"ri",
|
|
"rin",
|
|
"rok",
|
|
"ror",
|
|
"rur",
|
|
"vi",
|
|
"vir",
|
|
"vor"
|
|
],
|
|
femaleSuffixes: [
|
|
"bis",
|
|
"da",
|
|
"dis",
|
|
"dis",
|
|
"dis",
|
|
"dis",
|
|
"ga",
|
|
"hild",
|
|
"is",
|
|
"is",
|
|
"lif",
|
|
"lind",
|
|
"lis",
|
|
"na",
|
|
"nis",
|
|
"ris",
|
|
"rith",
|
|
"run",
|
|
"run",
|
|
"vis"
|
|
]
|
|
},
|
|
homely: {
|
|
syllables: [
|
|
"ad",
|
|
"blanc",
|
|
"falc",
|
|
"mil",
|
|
"adel",
|
|
"boff",
|
|
"ferd",
|
|
"mung",
|
|
"adr",
|
|
"bomb",
|
|
"frob",
|
|
"od",
|
|
"ail",
|
|
"bram",
|
|
"fulb",
|
|
"oth",
|
|
"alb",
|
|
"bung",
|
|
"gam",
|
|
"sab",
|
|
"alm",
|
|
"droc",
|
|
"hald",
|
|
"sam",
|
|
"amb",
|
|
"drog",
|
|
"ham",
|
|
"seg",
|
|
"band",
|
|
"durl",
|
|
"hasc",
|
|
"serl",
|
|
"bard",
|
|
"emm",
|
|
"hod",
|
|
"tob",
|
|
"ben",
|
|
"erd",
|
|
"hug",
|
|
"wan",
|
|
"biff",
|
|
"ern",
|
|
"iv",
|
|
"wig",
|
|
"bild",
|
|
"ever",
|
|
"mark",
|
|
"wyd"
|
|
],
|
|
maleSuffixes: [
|
|
"ald",
|
|
"ard",
|
|
"ert",
|
|
"fast",
|
|
"o",
|
|
"o",
|
|
"o",
|
|
"o",
|
|
"o",
|
|
"old",
|
|
"win",
|
|
"wise"
|
|
],
|
|
femaleSuffixes: [
|
|
"a",
|
|
"a",
|
|
"a",
|
|
"a",
|
|
"a",
|
|
"ia",
|
|
"ia",
|
|
"ice",
|
|
"ily",
|
|
"ina",
|
|
"wina",
|
|
"wisa"
|
|
]
|
|
},
|
|
familyName: {
|
|
english: [
|
|
"Adshead",
|
|
"Akers",
|
|
"Antell",
|
|
"Applegarth",
|
|
"Babb",
|
|
"Babbs",
|
|
"Baffin",
|
|
"Bagg",
|
|
"Baggett",
|
|
"Bagnall",
|
|
"Baldey",
|
|
"Bamber",
|
|
"Bark",
|
|
"Barling",
|
|
"Barnstable",
|
|
"Barraclough",
|
|
"Bastable",
|
|
"Bastin",
|
|
"Bather",
|
|
"Batkin",
|
|
"Batt",
|
|
"Bazley",
|
|
"Bebb",
|
|
"Beddall",
|
|
"Beeby",
|
|
"Beecroft",
|
|
"Beedell",
|
|
"Bellis",
|
|
"Belsey",
|
|
"Berridge",
|
|
"Besley",
|
|
"Bibby",
|
|
"Bickle",
|
|
"Biddle",
|
|
"Biddulph",
|
|
"Bigg",
|
|
"Binks",
|
|
"Binns",
|
|
"Bisp",
|
|
"Biss",
|
|
"Blenk",
|
|
"Blenkin",
|
|
"Boam",
|
|
"Bobo",
|
|
"Boddington",
|
|
"Boffey",
|
|
"Bonger",
|
|
"Bonney",
|
|
"Bonser",
|
|
"Borrett",
|
|
"Bossey",
|
|
"Botterill",
|
|
"Botting",
|
|
"Bottom",
|
|
"Bottomley",
|
|
"Botwright",
|
|
"Bowser",
|
|
"Bracher",
|
|
"Brasnett",
|
|
"Brayley",
|
|
"Breary",
|
|
"Brickwood",
|
|
"Brindley",
|
|
"Broadfoot",
|
|
"Broadribb",
|
|
"Brocksopp",
|
|
"Broster",
|
|
"Buckmaster",
|
|
"Budge",
|
|
"Buffard",
|
|
"Bugg",
|
|
"Buggy",
|
|
"Bulger",
|
|
"Bulman",
|
|
"Bunce",
|
|
"Bunt",
|
|
"Burrow",
|
|
"Bushby",
|
|
"Buss",
|
|
"Cade",
|
|
"Cadwaller",
|
|
"Cantrill",
|
|
"Cardno",
|
|
"Catlow",
|
|
"Cattermole",
|
|
"Chaffe",
|
|
"Chaffer",
|
|
"Chard",
|
|
"Chettle",
|
|
"Chilcott",
|
|
"Chitty",
|
|
"Chivers",
|
|
"Chubb",
|
|
"Chugg",
|
|
"Clewes",
|
|
"Coaker",
|
|
"Cobden",
|
|
"Cobley",
|
|
"Coggan",
|
|
"Coggins",
|
|
"Collop",
|
|
"Coney",
|
|
"Coote",
|
|
"Copp",
|
|
"Coppard",
|
|
"Cornock",
|
|
"Cossey",
|
|
"Cottle",
|
|
"Coultip",
|
|
"Crang",
|
|
"Crimp",
|
|
"Croom",
|
|
"Crowles",
|
|
"Cubitt",
|
|
"Cullimore",
|
|
"Cuss",
|
|
"Custance",
|
|
"Cuthbert",
|
|
"Dabbin",
|
|
"Dabbing",
|
|
"Dabbs",
|
|
"Dagg",
|
|
"Dainty",
|
|
"Deeley",
|
|
"Derrick",
|
|
"Dibb",
|
|
"Dibble",
|
|
"Diccox",
|
|
"Diggins",
|
|
"Diggle",
|
|
"Diggles",
|
|
"Digweed",
|
|
"Dimmock",
|
|
"Dinsdale",
|
|
"Dipple",
|
|
"Dobbie",
|
|
"Dobby",
|
|
"Doggett",
|
|
"Dorey",
|
|
"Drabble",
|
|
"Draycott",
|
|
"Dring",
|
|
"Drudge",
|
|
"Duffield",
|
|
"Dufty",
|
|
"Duggan",
|
|
"Duggleby",
|
|
"Dumbrell",
|
|
"Dunkley",
|
|
"Eatwell",
|
|
"Eggins",
|
|
"Entwistle",
|
|
"Erlam",
|
|
"Etchells",
|
|
"Fairclough",
|
|
"Felgate",
|
|
"Fensome",
|
|
"Fenton",
|
|
"Fidge",
|
|
"Fidoe",
|
|
"Figg",
|
|
"Filer",
|
|
"Fincham",
|
|
"Firkins",
|
|
"Flann",
|
|
"Flanner",
|
|
"Flippance",
|
|
"Flook",
|
|
"Flunder",
|
|
"Followes",
|
|
"Fooks",
|
|
"Fremlin",
|
|
"Frisby",
|
|
"Frogley",
|
|
"Frohock",
|
|
"Froome",
|
|
"Frow",
|
|
"Fuggle",
|
|
"Furse",
|
|
"Furze",
|
|
"Gabb",
|
|
"Gaffey",
|
|
"Gagg",
|
|
"Gander",
|
|
"Garbutt",
|
|
"Garlick",
|
|
"Garn",
|
|
"Gazard",
|
|
"Gedge",
|
|
"Giblett",
|
|
"Giddy",
|
|
"Gigg",
|
|
"Gilliat",
|
|
"Gimble",
|
|
"Gimson",
|
|
"Ginger",
|
|
"Gipps",
|
|
"Girdler",
|
|
"Gissing",
|
|
"Gleave",
|
|
"Goggin",
|
|
"Gollogly",
|
|
"Gomm",
|
|
"Goodier",
|
|
"Gook",
|
|
"Gorringe",
|
|
"Gorwyn",
|
|
"Gosden",
|
|
"Gribble",
|
|
"Grigg",
|
|
"Griggs",
|
|
"Grill",
|
|
"Grimble",
|
|
"Grimes",
|
|
"Grimshaw",
|
|
"Grist",
|
|
"Grubb",
|
|
"Guckeen",
|
|
"Guckian",
|
|
"Guild",
|
|
"Gull",
|
|
"Gully",
|
|
"Gumbold",
|
|
"Gummer",
|
|
"Gummidge",
|
|
"Gurden",
|
|
"Haffenden",
|
|
"Hales",
|
|
"Halse",
|
|
"Harpham",
|
|
"Hartle",
|
|
"Hatch",
|
|
"Hayhurst",
|
|
"Hearle",
|
|
"Henley",
|
|
"Henwood",
|
|
"Heppell",
|
|
"Herrick",
|
|
"Herring",
|
|
"Hesketh",
|
|
"Hext",
|
|
"Hicken",
|
|
"Hickmott",
|
|
"Higman",
|
|
"Hinchcliffe",
|
|
"Hindmarsh",
|
|
"Hobley",
|
|
"Hoddy",
|
|
"Hogben",
|
|
"Holdom",
|
|
"Hollick",
|
|
"Holtom",
|
|
"Honeysett",
|
|
"Hook",
|
|
"Hopley",
|
|
"Hopps",
|
|
"Horrocks",
|
|
"Horsfall",
|
|
"Horwood",
|
|
"Hotten",
|
|
"Housely",
|
|
"Howie",
|
|
"Huff",
|
|
"Huffam",
|
|
"Hutton",
|
|
"Huxtable",
|
|
"Icke",
|
|
"Idden",
|
|
"Inskip",
|
|
"Iveson",
|
|
"Izzard",
|
|
"Jaggs",
|
|
"Jellis",
|
|
"Jepson",
|
|
"Jesty",
|
|
"Keel",
|
|
"Keetley",
|
|
"Kerkin",
|
|
"Kerslake",
|
|
"Kettley",
|
|
"Killick",
|
|
"Kinch",
|
|
"Knaggs",
|
|
"Kneebone",
|
|
"Knopp",
|
|
"Knott",
|
|
"Lagden",
|
|
"Laslett",
|
|
"Laverick",
|
|
"Leaper",
|
|
"Leggett",
|
|
"Liddane",
|
|
"Liddy",
|
|
"Liggan",
|
|
"Lithgoe",
|
|
"Lobb",
|
|
"Lodder",
|
|
"Looby",
|
|
"Loody",
|
|
"Lubbock",
|
|
"Luff",
|
|
"Lugard",
|
|
"Lugg",
|
|
"Lumsden",
|
|
"Lyle",
|
|
"Mabb",
|
|
"Mabbitt",
|
|
"Mabbot",
|
|
"Mabbs",
|
|
"Mabbutt",
|
|
"Maffey",
|
|
"Mallam",
|
|
"Mangold",
|
|
"Mapp",
|
|
"Mappin",
|
|
"Marfell",
|
|
"Matthams",
|
|
"Maunder",
|
|
"Maxted",
|
|
"Mayo",
|
|
"Meech",
|
|
"Meeson",
|
|
"Meggison",
|
|
"Meggitt",
|
|
"Meggs",
|
|
"Mellings",
|
|
"Merrikin",
|
|
"Metherell",
|
|
"Mew",
|
|
"Miggles",
|
|
"Miggs",
|
|
"Milsom",
|
|
"Milson",
|
|
"Minchin",
|
|
"Minns",
|
|
"Mobbs",
|
|
"Moberly",
|
|
"Mockler",
|
|
"Mogford",
|
|
"Mogg",
|
|
"Moggs",
|
|
"Morkam",
|
|
"Morphett",
|
|
"Mossman",
|
|
"Mossop",
|
|
"Mottershead",
|
|
"Moulds",
|
|
"Muddle",
|
|
"Muddock",
|
|
"Mudge",
|
|
"Mullock",
|
|
"Murch",
|
|
"Murfin",
|
|
"Murfitt",
|
|
"Musson",
|
|
"Mustill",
|
|
"Mutter",
|
|
"Mutton",
|
|
"Nance",
|
|
"Napper",
|
|
"Neep",
|
|
"Negus",
|
|
"Netherway",
|
|
"Newitt",
|
|
"Niblett",
|
|
"Nickless",
|
|
"Noad",
|
|
"Nobbs",
|
|
"Noblet",
|
|
"Nosworthy",
|
|
"Nottage",
|
|
"Nutt",
|
|
"Offen",
|
|
"Oram",
|
|
"Orcutt",
|
|
"Ord",
|
|
"Orpe",
|
|
"Paddock",
|
|
"Paddon",
|
|
"Pannell",
|
|
"Parham",
|
|
"Pavey",
|
|
"Peay",
|
|
"Peever",
|
|
"Pegg",
|
|
"Pegge",
|
|
"Pegler",
|
|
"Pegrum",
|
|
"Pelly",
|
|
"Pelter",
|
|
"Pendle",
|
|
"Petch",
|
|
"Petcher",
|
|
"Petchey",
|
|
"Pettipher",
|
|
"Philp",
|
|
"Phippen",
|
|
"Phippin",
|
|
"Pickersgill",
|
|
"Pickley",
|
|
"Pickwell",
|
|
"Pidduck",
|
|
"Pigg",
|
|
"Pilkington",
|
|
"Pimblett",
|
|
"Pingree",
|
|
"Pinch",
|
|
"Pinn",
|
|
"Pither",
|
|
"Pochin",
|
|
"Poggs",
|
|
"Polkinghorne",
|
|
"Pomeroy",
|
|
"Pomfret",
|
|
"Postlethwaite",
|
|
"Potticary",
|
|
"Poxon",
|
|
"Pring",
|
|
"Pringle",
|
|
"Prisk",
|
|
"Proudfoot",
|
|
"Puddicombe",
|
|
"Pudding",
|
|
"Puddy",
|
|
"Pugsley",
|
|
"Purslove",
|
|
"Pym",
|
|
"Quaife",
|
|
"Quain",
|
|
"Quenby",
|
|
"Quibell",
|
|
"Quigg",
|
|
"Raddle",
|
|
"Ranby",
|
|
"Rapkins",
|
|
"Ratter",
|
|
"Reakes",
|
|
"Reeson",
|
|
"Riddle",
|
|
"Rix",
|
|
"Roddis",
|
|
"Rosser",
|
|
"Ruddle",
|
|
"Ruffle",
|
|
"Rugg",
|
|
"Rumming",
|
|
"Rump",
|
|
"Sadd",
|
|
"Samways",
|
|
"Sankey",
|
|
"Scantlebury",
|
|
"Scoones",
|
|
"Scouse",
|
|
"Scragg",
|
|
"Scrimgeour",
|
|
"Scroggs",
|
|
"Scruby",
|
|
"Scutt",
|
|
"Sefton",
|
|
"Selth",
|
|
"Semmens",
|
|
"Seward",
|
|
"Shalloo",
|
|
"Sharples",
|
|
"Siggers",
|
|
"Sirett",
|
|
"Skeels",
|
|
"Skerrett",
|
|
"Slee",
|
|
"Sluggett",
|
|
"Smedley",
|
|
"Snoddy",
|
|
"Snuggs",
|
|
"Sparrow",
|
|
"Sparrowhawke",
|
|
"Spink",
|
|
"Spinks",
|
|
"Spriggs",
|
|
"Springett",
|
|
"Sproat",
|
|
"Sprunt",
|
|
"Spurle",
|
|
"Spurrett",
|
|
"Spurrier",
|
|
"Squance",
|
|
"Squarey",
|
|
"Squibb",
|
|
"Squirrel",
|
|
"Staines",
|
|
"Steggal",
|
|
"Stelfox",
|
|
"Stirk",
|
|
"Stith",
|
|
"Strag",
|
|
"Straw",
|
|
"Strutt",
|
|
"Stubbins",
|
|
"Stuppies",
|
|
"Suggett",
|
|
"Swaffer",
|
|
"Swaffield",
|
|
"Swarbrick",
|
|
"Symes",
|
|
"Tabor",
|
|
"Tagg",
|
|
"Tapping",
|
|
"Tarr",
|
|
"Tassell",
|
|
"Teale",
|
|
"Thew",
|
|
"Thick",
|
|
"Thornber",
|
|
"Thwaites",
|
|
"Tibbins",
|
|
"Tibbits",
|
|
"Tibbles",
|
|
"Tibbotts",
|
|
"Tink",
|
|
"Tippell",
|
|
"Tipping",
|
|
"Tippins",
|
|
"Tippling",
|
|
"Tipton",
|
|
"Tisser",
|
|
"Tittmuss",
|
|
"Tobitt",
|
|
"Tonks",
|
|
"Topping",
|
|
"Towse",
|
|
"Toye",
|
|
"Tozer",
|
|
"Trafford",
|
|
"Treasure",
|
|
"Tremlett",
|
|
"Trett",
|
|
"Trible",
|
|
"Tricker",
|
|
"Tripe",
|
|
"Trippe",
|
|
"Tripper",
|
|
"Trist",
|
|
"Troake",
|
|
"Trotter",
|
|
"Trouncer",
|
|
"Trumble",
|
|
"Tudge",
|
|
"Tuffin",
|
|
"Tufley",
|
|
"Tulk",
|
|
"Tully",
|
|
"Tumman",
|
|
"Tunks",
|
|
"Tunnah",
|
|
"Tunnicliffe",
|
|
"Turnock",
|
|
"Tween",
|
|
"Tyrer",
|
|
"Unsworth",
|
|
"Uttley",
|
|
"Varney",
|
|
"Vooght",
|
|
"Wackrill",
|
|
"Waddilove",
|
|
"Waddilow",
|
|
"Walthew",
|
|
"Waltho",
|
|
"Walwin",
|
|
"Wanless",
|
|
"Wann",
|
|
"Waple",
|
|
"Waring",
|
|
"Warrilow",
|
|
"Welburn",
|
|
"Wenden",
|
|
"Werrett",
|
|
"Wescott",
|
|
"Whinnett",
|
|
"Whiskard",
|
|
"Whisker",
|
|
"Whitefoot",
|
|
"Whitlow",
|
|
"Wibberley",
|
|
"Widdicombe",
|
|
"Widdows",
|
|
"Widdup",
|
|
"Wigg",
|
|
"Wigley",
|
|
"Wilberforce",
|
|
"Wilmer",
|
|
"Wintle",
|
|
"Witherden",
|
|
"Witney",
|
|
"Witter",
|
|
"Wolnoth",
|
|
"Woodhead",
|
|
"Wookey",
|
|
"Woolland",
|
|
"Woombill",
|
|
"Worrel",
|
|
"Worsley",
|
|
"Wortley",
|
|
"Wragg",
|
|
"Wrixon",
|
|
"Yeandle",
|
|
"Yeend",
|
|
"Yemm",
|
|
"Yould"
|
|
],
|
|
scottish: [
|
|
"Aiken",
|
|
"Aitken",
|
|
"Baikie",
|
|
"Baillie",
|
|
"Bainbridge",
|
|
"Baird",
|
|
"Bairnsfeather",
|
|
"Balios",
|
|
"Balnaves",
|
|
"Barbour",
|
|
"Barclay",
|
|
"Barrie",
|
|
"Beattie",
|
|
"Beilby",
|
|
"Bell",
|
|
"Bellenden",
|
|
"Berwick",
|
|
"Blackie",
|
|
"Blackwood",
|
|
"Blaikie",
|
|
"Blair",
|
|
"Bogue",
|
|
"Boyce",
|
|
"Braid",
|
|
"Brechin",
|
|
"Brisbane",
|
|
"Brough",
|
|
"Brougham",
|
|
"Brown",
|
|
"Brownlee",
|
|
"Brymner",
|
|
"Cairns",
|
|
"Calderwood",
|
|
"Candlish",
|
|
"Cardus",
|
|
"Cargill",
|
|
"Caven",
|
|
"Christison",
|
|
"Clyde",
|
|
"Cochran",
|
|
"Cochrane",
|
|
"Cockburn",
|
|
"Colomb",
|
|
"Crockett",
|
|
"Cronin",
|
|
"Cruden",
|
|
"Cunningham",
|
|
"Cushny",
|
|
"Dalziel",
|
|
"Deems",
|
|
"Dempster",
|
|
"Dinwiddie",
|
|
"Doohan",
|
|
"Doone",
|
|
"Dunbar",
|
|
"Dundas",
|
|
"Dundee",
|
|
"Dunn",
|
|
"Dunning",
|
|
"Eccles",
|
|
"Eckford",
|
|
"Edmonstone",
|
|
"Elder",
|
|
"Fairbairn",
|
|
"Falconer",
|
|
"Fenwick",
|
|
"Ferrier",
|
|
"Gairdner",
|
|
"Galloway",
|
|
"Galt",
|
|
"Geddes",
|
|
"Geikie",
|
|
"Glass",
|
|
"Glendon",
|
|
"Graham",
|
|
"Gregory",
|
|
"Guthrie",
|
|
"Haig",
|
|
"Halkett",
|
|
"Herdman",
|
|
"Hogg",
|
|
"Imey",
|
|
"Inchbald",
|
|
"Inglis",
|
|
"Irvine",
|
|
"Ivory",
|
|
"Jebb",
|
|
"Kerr",
|
|
"Kircaldy",
|
|
"Kirk",
|
|
"Kirkbride",
|
|
"Laird",
|
|
"Laughlin",
|
|
"Lawson",
|
|
"Legge",
|
|
"Lillie",
|
|
"Lipton",
|
|
"Lockhart",
|
|
"Lorimer",
|
|
"Lyall",
|
|
"Lyte",
|
|
"Masson",
|
|
"Melrose",
|
|
"Mill",
|
|
"Miller",
|
|
"Milligan",
|
|
"Milner",
|
|
"Moffat",
|
|
"Mollison",
|
|
"Moncrief",
|
|
"Montrose",
|
|
"Motherwell",
|
|
"Muir",
|
|
"Muirhead",
|
|
"Murray",
|
|
"Nairn",
|
|
"Naysmith",
|
|
"Nesbit",
|
|
"Nisbet",
|
|
"No\xEBl",
|
|
"Orchardson",
|
|
"Pasley",
|
|
"Paterson",
|
|
"Pender",
|
|
"Preston",
|
|
"Primrose",
|
|
"Pringle",
|
|
"Quiller",
|
|
"Raeburn",
|
|
"Ransay",
|
|
"Redpath",
|
|
"Renfrew",
|
|
"Rennie",
|
|
"Renwick",
|
|
"Sanderson",
|
|
"Semphill",
|
|
"Smiles",
|
|
"Smollett",
|
|
"Smybert",
|
|
"Spenlove",
|
|
"Sterling",
|
|
"Stirling",
|
|
"Strang",
|
|
"Strange",
|
|
"Strangeways",
|
|
"Tait",
|
|
"Tannahill",
|
|
"Tassie",
|
|
"Thom",
|
|
"Tolmie",
|
|
"Urquhart",
|
|
"Wardlaw",
|
|
"Wedderburn",
|
|
"Whearty",
|
|
"Wilkie",
|
|
"Wiseheart",
|
|
"Wishart",
|
|
"Yarrow"
|
|
]
|
|
},
|
|
fairAndNoble: {
|
|
elfPrefixes: [
|
|
"an",
|
|
"im",
|
|
"ar",
|
|
"in",
|
|
"cal",
|
|
"ir",
|
|
"car",
|
|
"ist",
|
|
"cel",
|
|
"lar",
|
|
"cir",
|
|
"lir",
|
|
"clar",
|
|
"lor",
|
|
"el",
|
|
"mar",
|
|
"elb",
|
|
"mel",
|
|
"er",
|
|
"mer",
|
|
"erl",
|
|
"mir",
|
|
"est",
|
|
"nim",
|
|
"far",
|
|
"nin",
|
|
"fin",
|
|
"nir",
|
|
"gal",
|
|
"ral",
|
|
"gan",
|
|
"ran",
|
|
"gar",
|
|
"rel",
|
|
"gel",
|
|
"ril",
|
|
"gil",
|
|
"rin",
|
|
"ilm",
|
|
"rim"
|
|
],
|
|
alternativeElfPrefixes: [
|
|
"aeg",
|
|
"lith",
|
|
"ael",
|
|
"maeg",
|
|
"aer",
|
|
"mind",
|
|
"aes",
|
|
"mith",
|
|
"aeth",
|
|
"nith",
|
|
"bel",
|
|
"rael",
|
|
"ber",
|
|
"rind",
|
|
"cael",
|
|
"saer",
|
|
"caer",
|
|
"sar",
|
|
"cris",
|
|
"seld",
|
|
"ear",
|
|
"ser",
|
|
"elth",
|
|
"sil",
|
|
"eol",
|
|
"silm",
|
|
"faer",
|
|
"sind",
|
|
"fean",
|
|
"thael",
|
|
"find",
|
|
"thaer",
|
|
"ith",
|
|
"thal",
|
|
"laeg",
|
|
"thel",
|
|
"lend",
|
|
"ther",
|
|
"lind",
|
|
"thir"
|
|
],
|
|
middle: [
|
|
"ad",
|
|
"al",
|
|
"am",
|
|
"an",
|
|
"ar",
|
|
"as",
|
|
"eb",
|
|
"ed",
|
|
"el",
|
|
"em",
|
|
"en",
|
|
"er",
|
|
"es",
|
|
"ev",
|
|
"il",
|
|
"in",
|
|
"ir",
|
|
"ol",
|
|
"thal",
|
|
"thon"
|
|
],
|
|
maleSuffixes: [
|
|
"ad",
|
|
"dan",
|
|
"del",
|
|
"dil",
|
|
"dir",
|
|
"fal",
|
|
"ion",
|
|
"ion",
|
|
"lad",
|
|
"las",
|
|
"lin",
|
|
"nar",
|
|
"or",
|
|
"orn",
|
|
"ras",
|
|
"rior",
|
|
"rod",
|
|
"rond",
|
|
"ros",
|
|
"thir"
|
|
],
|
|
femaleSuffixes: [
|
|
"edel",
|
|
"el",
|
|
"eth",
|
|
"ian",
|
|
"iel",
|
|
"iel",
|
|
"ien",
|
|
"loth",
|
|
"mir",
|
|
"rial",
|
|
"rian",
|
|
"riel",
|
|
"riel",
|
|
"rien",
|
|
"ril",
|
|
"ro\xEBl",
|
|
"sil",
|
|
"w\xEB",
|
|
"wen",
|
|
"wen"
|
|
]
|
|
},
|
|
fairy: {
|
|
prefixes: [
|
|
"dex",
|
|
"gliss",
|
|
"tink",
|
|
"flax",
|
|
"goss",
|
|
"tiss",
|
|
"flim",
|
|
"hex",
|
|
"trill",
|
|
"fliss",
|
|
"liss",
|
|
"trist",
|
|
"flix",
|
|
"min",
|
|
"twill",
|
|
"foss",
|
|
"misk",
|
|
"twiss",
|
|
"frisk",
|
|
"raff",
|
|
"twisp",
|
|
"friss",
|
|
"ress",
|
|
"twix",
|
|
"gess",
|
|
"riff",
|
|
"weft",
|
|
"glan",
|
|
"rill",
|
|
"wesk",
|
|
"glax",
|
|
"saff",
|
|
"winn",
|
|
"glim",
|
|
"shim",
|
|
"wisp"
|
|
],
|
|
maleSuffixes: [
|
|
"aldo",
|
|
"allo",
|
|
"amo",
|
|
"ando",
|
|
"aroll",
|
|
"aron",
|
|
"asto",
|
|
"endo",
|
|
"eroll",
|
|
"eron",
|
|
"esto",
|
|
"ondo"
|
|
],
|
|
femaleSuffixes: [
|
|
"afer",
|
|
"amer",
|
|
"anel",
|
|
"arel",
|
|
"asti",
|
|
"efer",
|
|
"enti",
|
|
"erel",
|
|
"ifer",
|
|
"imer",
|
|
"inel",
|
|
"irel"
|
|
]
|
|
},
|
|
alternateFairy: {
|
|
prefixes: [
|
|
"bris",
|
|
"iphil",
|
|
"opal",
|
|
"cryl",
|
|
"ispel",
|
|
"oris",
|
|
"elsi",
|
|
"istle",
|
|
"orif",
|
|
"ember",
|
|
"jat",
|
|
"peri",
|
|
"esk",
|
|
"jost",
|
|
"sarm",
|
|
"feris",
|
|
"jus",
|
|
"sprin",
|
|
"frimi",
|
|
"lirra",
|
|
"stith",
|
|
"gan",
|
|
"mali",
|
|
"tansi",
|
|
"glink",
|
|
"mink",
|
|
"tirra",
|
|
"hal",
|
|
"mirra",
|
|
"trump",
|
|
"hel",
|
|
"mistle",
|
|
"whis",
|
|
"hist",
|
|
"ninka",
|
|
"zando"
|
|
],
|
|
maleSuffixes: [
|
|
"bik",
|
|
"brix",
|
|
"frell",
|
|
"fret",
|
|
"kin",
|
|
"mist",
|
|
"mit",
|
|
"rix",
|
|
"tross",
|
|
"twik",
|
|
"win",
|
|
"zisk"
|
|
],
|
|
femaleSuffixes: [
|
|
"dee",
|
|
"kiss",
|
|
"la",
|
|
"liss",
|
|
"mee",
|
|
"niss",
|
|
"nyx",
|
|
"ree",
|
|
"riss",
|
|
"sa",
|
|
"tiss",
|
|
"ynx"
|
|
]
|
|
},
|
|
elegantEvil: {
|
|
prefixesDarkElves: [
|
|
"bal",
|
|
"myr",
|
|
"ber",
|
|
"ne",
|
|
"char",
|
|
"nel",
|
|
"de",
|
|
"nil",
|
|
"div",
|
|
"no",
|
|
"dri",
|
|
"nyl",
|
|
"dul",
|
|
"rel",
|
|
"eil",
|
|
"rha",
|
|
"ek",
|
|
"ru",
|
|
"im",
|
|
"sab",
|
|
"ins",
|
|
"sin",
|
|
"ist",
|
|
"sul",
|
|
"jeg",
|
|
"sus",
|
|
"jer",
|
|
"tel",
|
|
"jys",
|
|
"tul",
|
|
"lil",
|
|
"ver",
|
|
"mar",
|
|
"vil",
|
|
"mer",
|
|
"vir",
|
|
"mez",
|
|
"vril",
|
|
"mor",
|
|
"yas"
|
|
],
|
|
prefixesAlternateDarkElves: [
|
|
"bur",
|
|
"olg",
|
|
"chor",
|
|
"on",
|
|
"col",
|
|
"or",
|
|
"dol",
|
|
"org",
|
|
"dor",
|
|
"oth",
|
|
"drom",
|
|
"pan",
|
|
"dur",
|
|
"pel",
|
|
"en",
|
|
"por",
|
|
"er",
|
|
"sek",
|
|
"gon",
|
|
"sol",
|
|
"gul",
|
|
"sun",
|
|
"jend",
|
|
"ten",
|
|
"kil",
|
|
"thal",
|
|
"lul",
|
|
"tor",
|
|
"mab",
|
|
"torm",
|
|
"maz",
|
|
"vek",
|
|
"mol",
|
|
"vol",
|
|
"nor",
|
|
"vor",
|
|
"noth",
|
|
"yel",
|
|
"ol",
|
|
"yol"
|
|
],
|
|
middle: [
|
|
"dyl",
|
|
"el",
|
|
"en",
|
|
"er",
|
|
"id",
|
|
"il",
|
|
"is",
|
|
"lav",
|
|
"len",
|
|
"lev",
|
|
"lin",
|
|
"liv",
|
|
"pel",
|
|
"pir",
|
|
"ra",
|
|
"ral",
|
|
"ril",
|
|
"rin",
|
|
"sin",
|
|
"syl"
|
|
],
|
|
maleSuffixes: [
|
|
"ald",
|
|
"eld",
|
|
"id",
|
|
"ild",
|
|
"ird",
|
|
"lim",
|
|
"naz",
|
|
"nid",
|
|
"nil",
|
|
"nim",
|
|
"red",
|
|
"rid",
|
|
"rim",
|
|
"riv",
|
|
"ul",
|
|
"uld",
|
|
"vid",
|
|
"vim",
|
|
"vir",
|
|
"viz"
|
|
],
|
|
femaleSuffixes: [
|
|
"bra",
|
|
"dra",
|
|
"dril",
|
|
"ene",
|
|
"hel",
|
|
"ia",
|
|
"il",
|
|
"iln",
|
|
"ira",
|
|
"istra",
|
|
"ith",
|
|
"iza",
|
|
"lin",
|
|
"na",
|
|
"ra",
|
|
"rin",
|
|
"sil",
|
|
"tra",
|
|
"vra",
|
|
"vril"
|
|
]
|
|
},
|
|
malevolent: {
|
|
prefixes: [
|
|
"aag",
|
|
"karg",
|
|
"ulthu",
|
|
"alur",
|
|
"khark",
|
|
"urz",
|
|
"arak",
|
|
"krau",
|
|
"uti",
|
|
"az",
|
|
"kriv",
|
|
"uznid",
|
|
"azik",
|
|
"kuaz",
|
|
"virn",
|
|
"bral",
|
|
"kudu",
|
|
"vlaaj",
|
|
"braz",
|
|
"luri",
|
|
"vlag",
|
|
"bruh",
|
|
"mulk",
|
|
"vlash",
|
|
"draan",
|
|
"nau",
|
|
"vluk",
|
|
"drulg",
|
|
"nid",
|
|
"vluzak",
|
|
"guz",
|
|
"ninj",
|
|
"vraz",
|
|
"haug",
|
|
"nul",
|
|
"vulk",
|
|
"idru",
|
|
"nym",
|
|
"xau",
|
|
"jhaal",
|
|
"ranag",
|
|
"xid",
|
|
"jid",
|
|
"rilthu",
|
|
"xul",
|
|
"jiu",
|
|
"ruk",
|
|
"xuraj",
|
|
"jur",
|
|
"rulk",
|
|
"zauv",
|
|
"jurg",
|
|
"ruz",
|
|
"zug",
|
|
"jurz",
|
|
"saag",
|
|
"zuldu",
|
|
"kaaz",
|
|
"skaur",
|
|
"zuv"
|
|
],
|
|
maleSuffixes: [
|
|
"arag",
|
|
"bru",
|
|
"drul",
|
|
"inu",
|
|
"lank",
|
|
"lun",
|
|
"lurr",
|
|
"lurug",
|
|
"nal",
|
|
"rul",
|
|
"ruzuk",
|
|
"salk",
|
|
"sul",
|
|
"suruk",
|
|
"ull",
|
|
"undak",
|
|
"uvik",
|
|
"xulg",
|
|
"zu",
|
|
"zuk"
|
|
],
|
|
femaleSuffixes: [
|
|
"anil",
|
|
"bau",
|
|
"diu",
|
|
"dusla",
|
|
"giu",
|
|
"ija",
|
|
"izil",
|
|
"jiul",
|
|
"lihyl",
|
|
"lin",
|
|
"lyrr",
|
|
"nalu",
|
|
"rhyl",
|
|
"rula",
|
|
"skiu",
|
|
"sula",
|
|
"ulla",
|
|
"xhiu",
|
|
"zihyl",
|
|
"ziu"
|
|
]
|
|
},
|
|
draconic: {
|
|
prefixes: [
|
|
"abra",
|
|
"har",
|
|
"phrixu",
|
|
"adastra",
|
|
"helio",
|
|
"porphyro",
|
|
"adra",
|
|
"huro",
|
|
"pyra",
|
|
"anca",
|
|
"iul",
|
|
"rhada",
|
|
"andra",
|
|
"jalan",
|
|
"rhe",
|
|
"arag",
|
|
"jarzem",
|
|
"rhodo",
|
|
"archo",
|
|
"jazra",
|
|
"rau",
|
|
"atra",
|
|
"jurga",
|
|
"sar",
|
|
"bar",
|
|
"keruxa",
|
|
"sarcu",
|
|
"bara",
|
|
"kralka",
|
|
"sarda",
|
|
"beru",
|
|
"lazulo",
|
|
"scarva",
|
|
"bhakri",
|
|
"majuri",
|
|
"sidereo",
|
|
"bia",
|
|
"malacho",
|
|
"skhia",
|
|
"bra",
|
|
"mar",
|
|
"sulchru",
|
|
"brado",
|
|
"marmora",
|
|
"tchalcedo",
|
|
"brima",
|
|
"melkar",
|
|
"tchazar",
|
|
"cadra",
|
|
"orgra",
|
|
"trocho",
|
|
"chro",
|
|
"ouro",
|
|
"vra",
|
|
"chryso",
|
|
"perido",
|
|
"zalar",
|
|
"glau",
|
|
"phoro",
|
|
"zerul"
|
|
],
|
|
suffixes: [
|
|
"bazius",
|
|
"boros",
|
|
"bradax",
|
|
"calchax",
|
|
"cordax",
|
|
"lagon",
|
|
"malax",
|
|
"mandros",
|
|
"manthys",
|
|
"mordax",
|
|
"nadral",
|
|
"nalux",
|
|
"neriax",
|
|
"phylax",
|
|
"vorax",
|
|
"vorung",
|
|
"xenor",
|
|
"zuthrax",
|
|
"zzebrax",
|
|
"zzemal"
|
|
]
|
|
},
|
|
infernal: {
|
|
softs: [
|
|
"alu",
|
|
"alz",
|
|
"avu",
|
|
"azaz",
|
|
"baph",
|
|
"baz",
|
|
"cha",
|
|
"fraz",
|
|
"garl",
|
|
"garu",
|
|
"gla",
|
|
"hra",
|
|
"mal",
|
|
"nahu",
|
|
"nal",
|
|
"nasu",
|
|
"paz",
|
|
"raz",
|
|
"tha",
|
|
"thalu",
|
|
"bre",
|
|
"dre",
|
|
"gel",
|
|
"gle",
|
|
"gre",
|
|
"hez",
|
|
"rez",
|
|
"rezu",
|
|
"tze",
|
|
"gzi",
|
|
"hriz",
|
|
"hzi",
|
|
"idrau",
|
|
"itha",
|
|
"ixu",
|
|
"lilu",
|
|
"riz",
|
|
"yil",
|
|
"dromu",
|
|
"gro",
|
|
"lol",
|
|
"moz",
|
|
"olth",
|
|
"oxu",
|
|
"sco",
|
|
"tho",
|
|
"bu",
|
|
"bul",
|
|
"buz",
|
|
"chru",
|
|
"dru",
|
|
"ghu",
|
|
"gura",
|
|
"guz",
|
|
"hruz",
|
|
"huz",
|
|
"kul",
|
|
"lurhz",
|
|
"muz",
|
|
"ru",
|
|
"shu",
|
|
"ssu",
|
|
"szul",
|
|
"thu",
|
|
"ulchru",
|
|
"utu",
|
|
"vul",
|
|
"zu",
|
|
"zul",
|
|
"baal",
|
|
"ghaa",
|
|
"kraa",
|
|
"phaal",
|
|
"raal",
|
|
"saa",
|
|
"bial",
|
|
"oazo",
|
|
"soaz",
|
|
"ruaz",
|
|
"gya",
|
|
"yaa",
|
|
"bael",
|
|
"nee",
|
|
"ziel",
|
|
"yee",
|
|
"aiaz",
|
|
"shai",
|
|
"reoz",
|
|
"duoi",
|
|
"drau",
|
|
"ghau",
|
|
"glau",
|
|
"mau",
|
|
"sau",
|
|
"tzau",
|
|
"iuz",
|
|
"juu",
|
|
"rhuu",
|
|
"vuul",
|
|
"zuu"
|
|
],
|
|
dulls: [
|
|
"agh",
|
|
"alg",
|
|
"barg",
|
|
"chag",
|
|
"ghad",
|
|
"glab",
|
|
"grag",
|
|
"hrag",
|
|
"kag",
|
|
"kwarg",
|
|
"mag",
|
|
"nalb",
|
|
"sag",
|
|
"tharg",
|
|
"brelg",
|
|
"dergh",
|
|
"dregh",
|
|
"drelb",
|
|
"felg",
|
|
"heg",
|
|
"kleg",
|
|
"igg",
|
|
"rigg",
|
|
"blog",
|
|
"drog",
|
|
"grolb",
|
|
"kolg",
|
|
"krolg",
|
|
"lolg",
|
|
"mog",
|
|
"morg",
|
|
"nog",
|
|
"obb",
|
|
"ogg",
|
|
"olb",
|
|
"rogg",
|
|
"strog",
|
|
"thog",
|
|
"trob",
|
|
"tzolg",
|
|
"vogt",
|
|
"bub",
|
|
"bulg",
|
|
"druj",
|
|
"durg",
|
|
"frub",
|
|
"fulg",
|
|
"gub",
|
|
"hrud",
|
|
"hurg",
|
|
"jub",
|
|
"julb",
|
|
"nud",
|
|
"nug",
|
|
"nulb",
|
|
"rung",
|
|
"shub",
|
|
"stug",
|
|
"sug",
|
|
"szug",
|
|
"trulg",
|
|
"ulb",
|
|
"urb",
|
|
"vub",
|
|
"vulb",
|
|
"xub",
|
|
"zub",
|
|
"zug",
|
|
"zugt",
|
|
"aab",
|
|
"aag",
|
|
"glaag",
|
|
"haag",
|
|
"naag",
|
|
"raag",
|
|
"boaj",
|
|
"moab",
|
|
"uag",
|
|
"leegh",
|
|
"yeb",
|
|
"yeeg",
|
|
"aig",
|
|
"yibb",
|
|
"iog",
|
|
"droog",
|
|
"nyog",
|
|
"aug",
|
|
"baug",
|
|
"daurg",
|
|
"draug",
|
|
"gaub",
|
|
"laug",
|
|
"maug",
|
|
"naug",
|
|
"raug",
|
|
"saug",
|
|
"thaug",
|
|
"iub",
|
|
"iug",
|
|
"ruug"
|
|
],
|
|
sharps: [
|
|
"ach",
|
|
"akk",
|
|
"ash",
|
|
"azt",
|
|
"bahor",
|
|
"bar",
|
|
"bas",
|
|
"brax",
|
|
"charn",
|
|
"dak",
|
|
"hrax",
|
|
"lach",
|
|
"lazt",
|
|
"mat",
|
|
"nam",
|
|
"nazt",
|
|
"ralk",
|
|
"rhast",
|
|
"sark",
|
|
"slarv",
|
|
"tash",
|
|
"thak",
|
|
"thalur",
|
|
"thalk",
|
|
"vach",
|
|
"vap",
|
|
"dek",
|
|
"ech",
|
|
"fesh",
|
|
"gek",
|
|
"hrek",
|
|
"lech",
|
|
"met",
|
|
"ner",
|
|
"ter",
|
|
"blik",
|
|
"gith",
|
|
"igm",
|
|
"inax",
|
|
"irsch",
|
|
"kir",
|
|
"lis",
|
|
"lisk",
|
|
"lith",
|
|
"nilv",
|
|
"nirr",
|
|
"tlizit",
|
|
"bor",
|
|
"chon",
|
|
"goch",
|
|
"gor",
|
|
"goth",
|
|
"hoth",
|
|
"khor",
|
|
"kos",
|
|
"loch",
|
|
"lok",
|
|
"loth",
|
|
"moch",
|
|
"moth",
|
|
"noc",
|
|
"och",
|
|
"oth",
|
|
"rolk",
|
|
"roth",
|
|
"sot",
|
|
"soth",
|
|
"vrok",
|
|
"dun",
|
|
"gur",
|
|
"hun",
|
|
"luth",
|
|
"muth",
|
|
"nur",
|
|
"rutt",
|
|
"sut",
|
|
"sutt",
|
|
"szut",
|
|
"tur",
|
|
"urt",
|
|
"utuk",
|
|
"uzt",
|
|
"krych",
|
|
"nyth",
|
|
"slyth",
|
|
"gaan",
|
|
"xaas",
|
|
"boak",
|
|
"ruaak",
|
|
"yalm",
|
|
"haerx",
|
|
"iex",
|
|
"draum",
|
|
"gaur",
|
|
"glaur",
|
|
"rauk",
|
|
"saur",
|
|
"duum",
|
|
"nuur",
|
|
"ruun"
|
|
]
|
|
},
|
|
empyreal: {
|
|
prefixes: [
|
|
"adan",
|
|
"asan",
|
|
"jasan",
|
|
"palant",
|
|
"sarnat",
|
|
"valmar",
|
|
"adrast",
|
|
"asarn",
|
|
"jasarm",
|
|
"palor",
|
|
"solar",
|
|
"valnar",
|
|
"alant",
|
|
"astar",
|
|
"javral",
|
|
"raman",
|
|
"talan",
|
|
"valnor",
|
|
"amad",
|
|
"atar",
|
|
"kalad",
|
|
"ranal",
|
|
"talar",
|
|
"valon",
|
|
"aman",
|
|
"atlan",
|
|
"kalar",
|
|
"ranar",
|
|
"talas",
|
|
"valor",
|
|
"amar",
|
|
"avar",
|
|
"kalas",
|
|
"rasan",
|
|
"talon",
|
|
"vanar",
|
|
"amars",
|
|
"avlant",
|
|
"kalast",
|
|
"ravan",
|
|
"taran",
|
|
"varal",
|
|
"amart",
|
|
"avral",
|
|
"kasal",
|
|
"samar",
|
|
"taval",
|
|
"varam",
|
|
"ansam",
|
|
"jalan",
|
|
"katarn",
|
|
"saran",
|
|
"valant",
|
|
"varan",
|
|
"arad",
|
|
"jalkar",
|
|
"kaval",
|
|
"sarat",
|
|
"valar",
|
|
"varat",
|
|
"aram",
|
|
"jaran",
|
|
"klaron",
|
|
"sardan",
|
|
"valdor",
|
|
"vardar",
|
|
"aran",
|
|
"jasal",
|
|
"palad",
|
|
"sardar",
|
|
"valkar",
|
|
"voltar"
|
|
],
|
|
maleSuffixes: [
|
|
"al",
|
|
"an",
|
|
"ar",
|
|
"as",
|
|
"at",
|
|
"ath",
|
|
"ath",
|
|
"ath",
|
|
"anth",
|
|
"athal",
|
|
"athar",
|
|
"athas"
|
|
],
|
|
femaleSuffixes: [
|
|
"el",
|
|
"en",
|
|
"er",
|
|
"es",
|
|
"et",
|
|
"eth",
|
|
"eth",
|
|
"eth",
|
|
"enth",
|
|
"eleth",
|
|
"ereth",
|
|
"eseth"
|
|
],
|
|
titles: [
|
|
"ar-",
|
|
"sar-",
|
|
"tar-",
|
|
"var-",
|
|
"jal-",
|
|
"kal-",
|
|
"pal-",
|
|
"ral-",
|
|
"tal-"
|
|
]
|
|
},
|
|
human: {
|
|
one: [
|
|
"Aind",
|
|
"Ainn",
|
|
"Airk",
|
|
"Aitze",
|
|
"Ald",
|
|
"Ance",
|
|
"Anxe",
|
|
"Ard",
|
|
"Ashf",
|
|
"Aulg",
|
|
"Aun",
|
|
"Aure",
|
|
"Authe",
|
|
"Baelt",
|
|
"Bakh",
|
|
"Bal",
|
|
"Balt",
|
|
"Balthe",
|
|
"Barg",
|
|
"Barll",
|
|
"Bauce",
|
|
"Baysc",
|
|
"Beek",
|
|
"Beele",
|
|
"Berl",
|
|
"Bersch",
|
|
"Beyn",
|
|
"Bhozt",
|
|
"Birme",
|
|
"Birr",
|
|
"Bjanc",
|
|
"Blaen",
|
|
"Blize",
|
|
"Blouch",
|
|
"Blurk",
|
|
"Blynze",
|
|
"Bokk",
|
|
"Borl",
|
|
"Borse",
|
|
"Brahl",
|
|
"Brakk",
|
|
"Bralk",
|
|
"Brang",
|
|
"Brann",
|
|
"Branth",
|
|
"Brem",
|
|
"Bress",
|
|
"Breun",
|
|
"Briint",
|
|
"Brill",
|
|
"Brize",
|
|
"Brod",
|
|
"Broik",
|
|
"Brolt",
|
|
"Bront",
|
|
"Broozh",
|
|
"Brosck",
|
|
"Broud",
|
|
"Brud",
|
|
"Brule",
|
|
"Brun",
|
|
"Bulse",
|
|
"Bunth",
|
|
"Byar",
|
|
"Byst",
|
|
"Caer",
|
|
"Cail",
|
|
"Canth",
|
|
"Carn",
|
|
"Cayrl",
|
|
"Ceyt",
|
|
"Chaeng",
|
|
"Chail",
|
|
"Chaith",
|
|
"Chal",
|
|
"Chalm",
|
|
"Charg",
|
|
"Charn",
|
|
"Chave",
|
|
"Chayle",
|
|
"Chaze",
|
|
"Cheal",
|
|
"Cheev",
|
|
"Chel",
|
|
"Chern",
|
|
"Cherze",
|
|
"Chezl",
|
|
"Chilk",
|
|
"Chlenk",
|
|
"Choalg",
|
|
"Choje",
|
|
"Chor",
|
|
"Chorl",
|
|
"Chorsk",
|
|
"Chounce",
|
|
"Chraq",
|
|
"Chrarr",
|
|
"Chrem",
|
|
"Chrent",
|
|
"Chriyb",
|
|
"Chroad",
|
|
"Chud",
|
|
"Chuz",
|
|
"Claed",
|
|
"Clart",
|
|
"Clesh",
|
|
"Cloup",
|
|
"Clour",
|
|
"Clowr",
|
|
"Coll",
|
|
"Corb",
|
|
"Corje",
|
|
"Corm",
|
|
"Corme",
|
|
"Crade",
|
|
"Creeg",
|
|
"Croold",
|
|
"Croyn",
|
|
"Cthon",
|
|
"Cush",
|
|
"Daalx",
|
|
"Dahr",
|
|
"Daig",
|
|
"Dal",
|
|
"Darm",
|
|
"Darsh",
|
|
"Darze",
|
|
"Dashf",
|
|
"Dask",
|
|
"Datz",
|
|
"Daug",
|
|
"Dawl",
|
|
"Deelth",
|
|
"Deerch",
|
|
"Derd",
|
|
"Derle",
|
|
"Dest",
|
|
"Deuth",
|
|
"Dex",
|
|
"Dhaant",
|
|
"Dherl",
|
|
"Dhoul",
|
|
"Dhuul",
|
|
"Dhuur",
|
|
"Dinz",
|
|
"Dlak",
|
|
"Dlask",
|
|
"Dlir",
|
|
"Doag",
|
|
"Dolc",
|
|
"Dorse",
|
|
"Dralg",
|
|
"Dram",
|
|
"Dran",
|
|
"Drance",
|
|
"Drath",
|
|
"Drax",
|
|
"Draygg",
|
|
"Dreact",
|
|
"Dreed",
|
|
"Dreeg",
|
|
"Dreen",
|
|
"Dreev",
|
|
"Drelm",
|
|
"Drelth",
|
|
"Drerle",
|
|
"Drewm",
|
|
"Drilm",
|
|
"Drinn",
|
|
"Drism",
|
|
"Drissth",
|
|
"Drix",
|
|
"Droale",
|
|
"Drojj",
|
|
"Drom",
|
|
"Droxe",
|
|
"Droy",
|
|
"Drun",
|
|
"Drust",
|
|
"Druuth",
|
|
"Dryle",
|
|
"Drynn",
|
|
"Drythe",
|
|
"Dvarch",
|
|
"Dwesk",
|
|
"Dzairn",
|
|
"Dzij",
|
|
"Dzym",
|
|
"Eeb",
|
|
"Eenthe",
|
|
"Elb",
|
|
"Emp",
|
|
"Ence",
|
|
"Ench",
|
|
"Eng",
|
|
"Enz",
|
|
"Ept",
|
|
"Erd",
|
|
"Esk",
|
|
"Faig",
|
|
"Falthe",
|
|
"Fanch",
|
|
"Faoth",
|
|
"Fard",
|
|
"Faum",
|
|
"Faz",
|
|
"Feant",
|
|
"Feej",
|
|
"Felg",
|
|
"Fernsh",
|
|
"Fesk",
|
|
"Fess",
|
|
"Feth",
|
|
"Fimth",
|
|
"Fize",
|
|
"Flast",
|
|
"Flatch",
|
|
"Flayre",
|
|
"Flerd",
|
|
"Flersh",
|
|
"Flisp",
|
|
"Florn",
|
|
"Fompt",
|
|
"Fousk",
|
|
"Fraine",
|
|
"Frakk",
|
|
"Fralg",
|
|
"Frast",
|
|
"Fregg",
|
|
"Frem",
|
|
"Fresk",
|
|
"Fretch",
|
|
"Frex",
|
|
"Frike",
|
|
"Frile",
|
|
"Frism",
|
|
"Frold",
|
|
"Frone",
|
|
"Fronx",
|
|
"Frook",
|
|
"Frool",
|
|
"Froy",
|
|
"Frush",
|
|
"Fryx",
|
|
"Fulm",
|
|
"Fyahn",
|
|
"Fyast",
|
|
"Fyorb",
|
|
"Fzek",
|
|
"Fzron",
|
|
"Gair",
|
|
"Galthz",
|
|
"Gand",
|
|
"Gane",
|
|
"Gann",
|
|
"Gart",
|
|
"Gath",
|
|
"Gault",
|
|
"Gawle",
|
|
"Gax",
|
|
"Genze",
|
|
"Gerd",
|
|
"Gez",
|
|
"Gharl",
|
|
"Ghea",
|
|
"Ghenz",
|
|
"Ghorl",
|
|
"Ghorx",
|
|
"Gilft",
|
|
"Gilm",
|
|
"Gire",
|
|
"Glaar",
|
|
"Glain",
|
|
"Glarch",
|
|
"Glaux",
|
|
"Gleeth",
|
|
"Gleev",
|
|
"Gleft",
|
|
"Glekke",
|
|
"Glem",
|
|
"Glice",
|
|
"Glip",
|
|
"Glish",
|
|
"Glith",
|
|
"Gloard",
|
|
"Gloob",
|
|
"Gloorsh",
|
|
"Glosk",
|
|
"Glund",
|
|
"Glyre",
|
|
"Glyth",
|
|
"Gnarre",
|
|
"Golm",
|
|
"Gond",
|
|
"Gorm",
|
|
"Gosp",
|
|
"Goste",
|
|
"Graal",
|
|
"Grall",
|
|
"Greel",
|
|
"Greeld",
|
|
"Greelp",
|
|
"Grend",
|
|
"Grilf",
|
|
"Grimp",
|
|
"Groad",
|
|
"Grond",
|
|
"Groolsh",
|
|
"Gruon",
|
|
"Grux",
|
|
"Gthuu",
|
|
"Gurze",
|
|
"Gwisp",
|
|
"Gwith",
|
|
"Gwosk",
|
|
"Gyorr",
|
|
"Gyz",
|
|
"Haag",
|
|
"Haar",
|
|
"Haask",
|
|
"Hade",
|
|
"Hadj",
|
|
"Halk",
|
|
"Halm",
|
|
"Hane",
|
|
"Harb",
|
|
"Harch",
|
|
"Harg",
|
|
"Harx",
|
|
"Hauke",
|
|
"Haux",
|
|
"Hawlx",
|
|
"Hax",
|
|
"Heerf",
|
|
"Hersh",
|
|
"Hetz",
|
|
"Hezz",
|
|
"Hisk",
|
|
"Hize",
|
|
"Hjorr",
|
|
"Hlare",
|
|
"Hlor",
|
|
"Hoag",
|
|
"Hob",
|
|
"Horl",
|
|
"Horm",
|
|
"Hosh",
|
|
"Hraak",
|
|
"Hrailk",
|
|
"Hreen",
|
|
"Hrine",
|
|
"Hroon",
|
|
"Hrume",
|
|
"Hruse",
|
|
"Huxx",
|
|
"Hythe",
|
|
"Ingg",
|
|
"Jaarge",
|
|
"Jad",
|
|
"Jaerth",
|
|
"Jaig",
|
|
"Jairn",
|
|
"Jal",
|
|
"Jalth",
|
|
"Jance",
|
|
"Jand",
|
|
"Jant",
|
|
"Janx",
|
|
"Jard",
|
|
"Jark",
|
|
"Jarn",
|
|
"Jask",
|
|
"Jath",
|
|
"Jauce",
|
|
"Jaus",
|
|
"Jauth",
|
|
"Jaze",
|
|
"Jeel",
|
|
"Jekk",
|
|
"Jend",
|
|
"Jenx",
|
|
"Jerd",
|
|
"Jern",
|
|
"Jexx",
|
|
"Jhang",
|
|
"Jhaulk",
|
|
"Jhor",
|
|
"Jhure",
|
|
"Jinch",
|
|
"Jind",
|
|
"Jinz",
|
|
"Jirle",
|
|
"Joorm",
|
|
"Jorm",
|
|
"Jorn",
|
|
"Jrond",
|
|
"Jurze",
|
|
"Jusk",
|
|
"Juzz",
|
|
"Jyfe",
|
|
"Jyin",
|
|
"Kaerr",
|
|
"Kaid",
|
|
"Kal",
|
|
"Kamn",
|
|
"Kand",
|
|
"Kang",
|
|
"Kank",
|
|
"Karn",
|
|
"Karth",
|
|
"Karze",
|
|
"Kaune",
|
|
"Kedj",
|
|
"Keek",
|
|
"Keig",
|
|
"Kell",
|
|
"Kelph",
|
|
"Kerce",
|
|
"Kerm",
|
|
"Kerst",
|
|
"Kesp",
|
|
"Keth",
|
|
"Kez",
|
|
"Khaiz",
|
|
"Khal",
|
|
"Khand",
|
|
"Kharb",
|
|
"Kharsp",
|
|
"Khern",
|
|
"Khif",
|
|
"Khond",
|
|
"Kh\xF4r",
|
|
"Khorst",
|
|
"Khrev",
|
|
"Kinch",
|
|
"Kish",
|
|
"Kiv",
|
|
"Kjeld",
|
|
"Klaff",
|
|
"Klaz",
|
|
"Kleed",
|
|
"Kloob",
|
|
"Kloohn",
|
|
"Klyne",
|
|
"Kmool",
|
|
"Knaar",
|
|
"Knut",
|
|
"Kolff",
|
|
"Kolg",
|
|
"Konv",
|
|
"Koss",
|
|
"Koul",
|
|
"Krake",
|
|
"Krall",
|
|
"Kranj",
|
|
"Krax",
|
|
"Kreel",
|
|
"Krej",
|
|
"Kremp",
|
|
"Krey",
|
|
"Krile",
|
|
"Krinch",
|
|
"Kroff",
|
|
"Kroll",
|
|
"Krompf",
|
|
"Kuest",
|
|
"Kull",
|
|
"Kulm",
|
|
"Kuon",
|
|
"Kuum",
|
|
"Kvon",
|
|
"Kwask",
|
|
"Kwaz",
|
|
"Kyre",
|
|
"Lach",
|
|
"Laev",
|
|
"Lan",
|
|
"Lantz",
|
|
"Larnste",
|
|
"Lartz",
|
|
"Laur",
|
|
"Lawrg",
|
|
"Layje",
|
|
"Leet",
|
|
"Lenx",
|
|
"Leth",
|
|
"Liln",
|
|
"Liss",
|
|
"Lod",
|
|
"Loec",
|
|
"Lonn",
|
|
"Loord",
|
|
"Loosk",
|
|
"Lound",
|
|
"Luhr",
|
|
"Lumbb",
|
|
"Lurs",
|
|
"Lyrr",
|
|
"Lysk",
|
|
"Maarth",
|
|
"Maec",
|
|
"Maelv",
|
|
"Magh",
|
|
"Mald",
|
|
"Mant",
|
|
"Manth",
|
|
"Mantz",
|
|
"Marb",
|
|
"Mard",
|
|
"Mayxe",
|
|
"Meand",
|
|
"Meeth",
|
|
"Melg",
|
|
"Meln",
|
|
"Merrt",
|
|
"Merzh",
|
|
"Mesp",
|
|
"Mirsp",
|
|
"Mirx",
|
|
"Miskt",
|
|
"Ml\xF6",
|
|
"Mointh",
|
|
"Mool",
|
|
"Moork",
|
|
"Moorthe",
|
|
"Mord",
|
|
"Morl",
|
|
"Moskt",
|
|
"Mox",
|
|
"Mulse",
|
|
"Murlk",
|
|
"Murste",
|
|
"Myrrhne",
|
|
"Naall",
|
|
"Naar",
|
|
"Naaz",
|
|
"Naer",
|
|
"Naik",
|
|
"Naine",
|
|
"Nairx",
|
|
"Nalm",
|
|
"Nanx",
|
|
"Naois",
|
|
"Naphk",
|
|
"Nar",
|
|
"Narct",
|
|
"Narrm",
|
|
"Naulk",
|
|
"Naxx",
|
|
"Naze",
|
|
"Nelq",
|
|
"Nem",
|
|
"Nemn",
|
|
"Nerrz",
|
|
"Ngal",
|
|
"Nime",
|
|
"Nirft",
|
|
"Nisp",
|
|
"Nithe",
|
|
"Noerth",
|
|
"Nolgh",
|
|
"Nool",
|
|
"Noom",
|
|
"Norb",
|
|
"Norle",
|
|
"Noth",
|
|
"Nraeve",
|
|
"Nulth",
|
|
"Nurb",
|
|
"Nuss",
|
|
"Nyalg",
|
|
"Nyalk",
|
|
"Nym",
|
|
"Nynx",
|
|
"Olth",
|
|
"Omm",
|
|
"Omn",
|
|
"Ooon",
|
|
"Ord",
|
|
"Orld",
|
|
"Ornce",
|
|
"Oth",
|
|
"Ounde",
|
|
"Ourne",
|
|
"Paaz",
|
|
"Palch",
|
|
"Parn",
|
|
"Parth",
|
|
"Parzt",
|
|
"Path",
|
|
"Pelk",
|
|
"Pell",
|
|
"Pesm",
|
|
"Phad",
|
|
"Phairn",
|
|
"Phant",
|
|
"Phlarn",
|
|
"Phong",
|
|
"Photz",
|
|
"Phral",
|
|
"Phul",
|
|
"Pirz",
|
|
"Pjanth",
|
|
"Plange",
|
|
"Plaz",
|
|
"Plegg",
|
|
"Plind",
|
|
"Plomb",
|
|
"Plorze",
|
|
"Plumf",
|
|
"Pluun",
|
|
"Pnidd",
|
|
"Poile",
|
|
"Pome",
|
|
"Pould",
|
|
"Praige",
|
|
"Presk",
|
|
"Prike",
|
|
"Prokk",
|
|
"Prook",
|
|
"Prya",
|
|
"Pryle",
|
|
"Prynne",
|
|
"Psarn",
|
|
"Ptenx",
|
|
"Pulge",
|
|
"Pume",
|
|
"Quaan",
|
|
"Quaar",
|
|
"Quagh",
|
|
"Quaild",
|
|
"Quaisth",
|
|
"Qual",
|
|
"Qualt",
|
|
"Quanst",
|
|
"Quanz",
|
|
"Quaoph",
|
|
"Quarl",
|
|
"Quast",
|
|
"Quech",
|
|
"Qued",
|
|
"Quelg",
|
|
"Quelm",
|
|
"Querk",
|
|
"Quigg",
|
|
"Quilg",
|
|
"Quol",
|
|
"Quonj",
|
|
"Quool",
|
|
"Quorze",
|
|
"Quune",
|
|
"Quynd",
|
|
"Raask",
|
|
"Rahm",
|
|
"Raine",
|
|
"Raisth",
|
|
"Ralce",
|
|
"Rald",
|
|
"Rast",
|
|
"Raunt",
|
|
"Raupt",
|
|
"Rax",
|
|
"Raxt",
|
|
"Rayche",
|
|
"Raz",
|
|
"Reelce",
|
|
"Reendt",
|
|
"Relth",
|
|
"Relz",
|
|
"Rez",
|
|
"Rhath",
|
|
"Rhaze",
|
|
"Rhiss",
|
|
"Rhom",
|
|
"Rhorn",
|
|
"Rhyll",
|
|
"Rifk",
|
|
"Rilm",
|
|
"Rilx",
|
|
"Rimsk",
|
|
"Rimth",
|
|
"Riss",
|
|
"Rith",
|
|
"Rix",
|
|
"Rodr",
|
|
"Rodst",
|
|
"Roen",
|
|
"Rogg",
|
|
"Rolm",
|
|
"Rolx",
|
|
"Roult",
|
|
"Rull",
|
|
"Rulm",
|
|
"Rult",
|
|
"Rumche",
|
|
"Runce",
|
|
"Ruor",
|
|
"Ruusque",
|
|
"Ruz",
|
|
"Ryke",
|
|
"Rynx",
|
|
"Ryond",
|
|
"Rythe",
|
|
"Saar",
|
|
"Saech",
|
|
"Saedd",
|
|
"Sairgh",
|
|
"San",
|
|
"Sange",
|
|
"Sarg",
|
|
"Sark",
|
|
"Sarl",
|
|
"Sarn",
|
|
"Sarpt",
|
|
"Skroine",
|
|
"Scroot",
|
|
"Scrylte",
|
|
"Scryme",
|
|
"Sculp",
|
|
"Scuss",
|
|
"Scyrth",
|
|
"Sdor",
|
|
"Seelt",
|
|
"Seif",
|
|
"Sen",
|
|
"Senthe",
|
|
"Sfite",
|
|
"Shad",
|
|
"Shar",
|
|
"Sharg",
|
|
"Sharm",
|
|
"Sharn",
|
|
"Sheb",
|
|
"Sheel",
|
|
"Shenn",
|
|
"Shenx",
|
|
"Sherth",
|
|
"Shilm",
|
|
"Shind",
|
|
"Shont",
|
|
"Shren",
|
|
"Shune",
|
|
"Shurm",
|
|
"Shuuth",
|
|
"Shyang",
|
|
"Skarn",
|
|
"Skart",
|
|
"Skeen",
|
|
"Skerr",
|
|
"Skorle",
|
|
"Skraf",
|
|
"Skrafe",
|
|
"Skrib",
|
|
"Skrift",
|
|
"Skroi",
|
|
"Skyre",
|
|
"Slaar",
|
|
"Slanc",
|
|
"Slark",
|
|
"Slarm",
|
|
"Slask",
|
|
"Slaunce",
|
|
"Slaur",
|
|
"Sleer",
|
|
"Slemt",
|
|
"Slike",
|
|
"Slith",
|
|
"Sloif",
|
|
"Slorg",
|
|
"Slorn",
|
|
"Sluff",
|
|
"Slynd",
|
|
"Smeke",
|
|
"Smete",
|
|
"Smink",
|
|
"Smold",
|
|
"Snabe",
|
|
"Snard",
|
|
"Snarr",
|
|
"Sneath",
|
|
"Snurch",
|
|
"Soick",
|
|
"Solm",
|
|
"Sool",
|
|
"Soorve",
|
|
"Sorl",
|
|
"Sorm",
|
|
"Sorn",
|
|
"Sosz",
|
|
"Sounx",
|
|
"Sparll",
|
|
"Splynd",
|
|
"Sprake",
|
|
"Squalj",
|
|
"Sran",
|
|
"Srend",
|
|
"Sroon",
|
|
"Stalb",
|
|
"Starl",
|
|
"Stelk",
|
|
"Strangg",
|
|
"Strix",
|
|
"Strom",
|
|
"Strowl",
|
|
"Stuhr",
|
|
"Styche",
|
|
"Styre",
|
|
"Suntz",
|
|
"Suule",
|
|
"Suusht",
|
|
"Svinse",
|
|
"Swaerk",
|
|
"Swyst",
|
|
"Syle",
|
|
"Syoll",
|
|
"Taede",
|
|
"Tael",
|
|
"Tak",
|
|
"Tal",
|
|
"Tanj",
|
|
"Targ",
|
|
"Targh",
|
|
"Tark",
|
|
"Tarl",
|
|
"Tath",
|
|
"Taus",
|
|
"Tavv",
|
|
"Taze",
|
|
"Tchel",
|
|
"Tcherm",
|
|
"Tchoum",
|
|
"Tebs",
|
|
"Teelk",
|
|
"Teern",
|
|
"Teirn",
|
|
"Telg",
|
|
"Telk",
|
|
"Terb",
|
|
"Terre",
|
|
"Tez",
|
|
"Thaad",
|
|
"Thaarn",
|
|
"Thad",
|
|
"Thaed",
|
|
"Tham",
|
|
"Thand",
|
|
"Thang",
|
|
"Thapp",
|
|
"Thard",
|
|
"Thark",
|
|
"Thask",
|
|
"Thaugh",
|
|
"Thaum",
|
|
"Thaurn",
|
|
"Thawn",
|
|
"Thax",
|
|
"Theed",
|
|
"Thesk",
|
|
"Thevv",
|
|
"Theyz",
|
|
"Thirrf",
|
|
"Tholk",
|
|
"Thorm",
|
|
"Thosk",
|
|
"Thoure",
|
|
"Thrak",
|
|
"Thralf",
|
|
"Thrand",
|
|
"Thrasp",
|
|
"Thrawl",
|
|
"Thrawn",
|
|
"Thrax",
|
|
"Thrilce",
|
|
"Thrizz",
|
|
"Throck",
|
|
"Thromb",
|
|
"Throsp",
|
|
"Thull",
|
|
"Thuu",
|
|
"Tl\xF6n",
|
|
"Toal",
|
|
"Tog",
|
|
"Tol",
|
|
"Tolg",
|
|
"Tolm",
|
|
"Tooz",
|
|
"Torb",
|
|
"Torje",
|
|
"Torm",
|
|
"Torr",
|
|
"Torsk",
|
|
"Torth",
|
|
"Trahl",
|
|
"Treel",
|
|
"Treesk",
|
|
"Trell",
|
|
"Trem",
|
|
"Treys",
|
|
"Trild",
|
|
"Trilse",
|
|
"Trinx",
|
|
"Trojj",
|
|
"Tronf",
|
|
"Trost",
|
|
"Troyne",
|
|
"Trulm",
|
|
"Tsai",
|
|
"Tsang",
|
|
"Tselm",
|
|
"Tsleg",
|
|
"Tspoy",
|
|
"Tsrome",
|
|
"Tthann",
|
|
"Tull",
|
|
"Tvash",
|
|
"Twez",
|
|
"Twillx",
|
|
"Tyae",
|
|
"Tyfe",
|
|
"Tyog",
|
|
"Tzank",
|
|
"Tzoy",
|
|
"Ulm",
|
|
"Urst",
|
|
"Vaar",
|
|
"Vaersl",
|
|
"Vaist",
|
|
"Valg",
|
|
"Valtch",
|
|
"Vand",
|
|
"Vansh",
|
|
"Var",
|
|
"Vard",
|
|
"Varl",
|
|
"Vask",
|
|
"Vass",
|
|
"Vath",
|
|
"Vaulx",
|
|
"Vaus",
|
|
"Vaxx",
|
|
"Vayze",
|
|
"Veb",
|
|
"Veed",
|
|
"Veeth",
|
|
"Vegg",
|
|
"Vek",
|
|
"Velb",
|
|
"Venk",
|
|
"Venth",
|
|
"Verle",
|
|
"Vesp",
|
|
"Veth",
|
|
"Vilt",
|
|
"Vipt",
|
|
"Virl",
|
|
"Virx",
|
|
"Visk",
|
|
"Viss",
|
|
"Vist",
|
|
"Vith",
|
|
"Vlack",
|
|
"Vlax",
|
|
"Vleft",
|
|
"Vloongh",
|
|
"Vohm",
|
|
"Volg",
|
|
"Vool",
|
|
"Voon",
|
|
"Voor",
|
|
"Vor",
|
|
"Vorg",
|
|
"Vorl",
|
|
"Vorque",
|
|
"Vorse",
|
|
"Vort",
|
|
"Vrahk",
|
|
"Vrain",
|
|
"Vramp",
|
|
"Vreng",
|
|
"Vrilx",
|
|
"Vrosk",
|
|
"Vroyce",
|
|
"Vuul",
|
|
"Wertz",
|
|
"Wheld",
|
|
"Whimk",
|
|
"Whirx",
|
|
"Whoord",
|
|
"Wix",
|
|
"Woise",
|
|
"Wome",
|
|
"Woorn",
|
|
"Worrb",
|
|
"Wrahz",
|
|
"Wraime",
|
|
"Wrax",
|
|
"Wrhye",
|
|
"Wrold",
|
|
"Wrost",
|
|
"Wurlp",
|
|
"Wyast",
|
|
"Wye",
|
|
"Wynv",
|
|
"Wyrn",
|
|
"Xaayr",
|
|
"Xaen",
|
|
"Xaif",
|
|
"Xain",
|
|
"Xalm",
|
|
"Xan",
|
|
"Xarle",
|
|
"Xas",
|
|
"Xau",
|
|
"Xean",
|
|
"Xelb",
|
|
"Xenve",
|
|
"Xerth",
|
|
"Xill",
|
|
"Xin",
|
|
"Xinsce",
|
|
"Xis",
|
|
"Xive",
|
|
"Xix",
|
|
"Xord",
|
|
"Xoth",
|
|
"Xush",
|
|
"Xyle",
|
|
"Xysc",
|
|
"Yad",
|
|
"Yagre",
|
|
"Yaim",
|
|
"Yand",
|
|
"Yarl",
|
|
"Yauce",
|
|
"Yeb",
|
|
"Yeerk",
|
|
"Yend",
|
|
"Yenj",
|
|
"Yest",
|
|
"Yhalm",
|
|
"Yhe",
|
|
"Yhem",
|
|
"Yifth",
|
|
"Yilb",
|
|
"Yivv",
|
|
"Yoort",
|
|
"Yoth",
|
|
"Yrr",
|
|
"Yund",
|
|
"Yush",
|
|
"Yuun",
|
|
"Zaar",
|
|
"Zahn",
|
|
"Zaidh",
|
|
"Zaift",
|
|
"Zaile",
|
|
"Zaive",
|
|
"Zand",
|
|
"Zanq",
|
|
"Zao",
|
|
"Zaon",
|
|
"Zaoth",
|
|
"Zar",
|
|
"Zash",
|
|
"Zeft",
|
|
"Zeige",
|
|
"Zek",
|
|
"Zell",
|
|
"Zelm",
|
|
"Zelth",
|
|
"Zend",
|
|
"Zha",
|
|
"Zhash",
|
|
"Zhayce",
|
|
"Zherl",
|
|
"Zhirth",
|
|
"Zhool",
|
|
"Zhorm",
|
|
"Zhuul",
|
|
"Zil",
|
|
"Zilge",
|
|
"Zinn",
|
|
"Zixt",
|
|
"Zlante",
|
|
"Zlaque",
|
|
"Zlar",
|
|
"Zold",
|
|
"Zook",
|
|
"Zool",
|
|
"Zoor",
|
|
"Zor",
|
|
"Zorl",
|
|
"Zorn",
|
|
"Zoth",
|
|
"Zoul",
|
|
"Zreethe",
|
|
"Zull",
|
|
"Zusque",
|
|
"Zwerl",
|
|
"Zynx",
|
|
"Zyx"
|
|
],
|
|
two: [
|
|
"Aahdret",
|
|
"Aarlen",
|
|
"Aasren",
|
|
"Aastrasl",
|
|
"Aban",
|
|
"Abbith",
|
|
"Ablif",
|
|
"Aboas",
|
|
"Abrance",
|
|
"Abrax",
|
|
"Abryn",
|
|
"Abyok",
|
|
"Acear",
|
|
"Acfyst",
|
|
"Achekk",
|
|
"Achelse",
|
|
"Achlarg",
|
|
"Achren",
|
|
"Achriss",
|
|
"Ackvold",
|
|
"Acram",
|
|
"Acu",
|
|
"Adaon",
|
|
"Addanc",
|
|
"Adeil",
|
|
"Adire",
|
|
"Adlay",
|
|
"Adlen",
|
|
"Adlon",
|
|
"Admel",
|
|
"Adoin",
|
|
"Adon",
|
|
"Adrek",
|
|
"Adreln",
|
|
"Adrich",
|
|
"Adrilc",
|
|
"Adurthe",
|
|
"Aduush",
|
|
"Aealim",
|
|
"Aeddan",
|
|
"Aedha",
|
|
"Aedir",
|
|
"Aedlynx",
|
|
"Aeiran",
|
|
"Aelis",
|
|
"Aelma",
|
|
"Aemon",
|
|
"Aenet",
|
|
"Aenthu",
|
|
"Aeprox",
|
|
"Aeren",
|
|
"Aerind",
|
|
"Aerkoon",
|
|
"Aerkour",
|
|
"Aerlithe",
|
|
"Aeron",
|
|
"Aeryle",
|
|
"Aethlyr",
|
|
"Aethon",
|
|
"Afenk",
|
|
"Affraig",
|
|
"Afraaj",
|
|
"Agburz",
|
|
"Ageen",
|
|
"Aghil",
|
|
"Aghill",
|
|
"Aglin",
|
|
"Agroth",
|
|
"Agwyn",
|
|
"Agyorl",
|
|
"Ahmr\xE9",
|
|
"Aia",
|
|
"Aiaia",
|
|
"Aibmab",
|
|
"Aidajn",
|
|
"Aiden",
|
|
"Aidon",
|
|
"Aigol",
|
|
"Ailcaer",
|
|
"Aink\xE9",
|
|
"Ainzu",
|
|
"Airmid",
|
|
"Aislinn",
|
|
"Aislithe",
|
|
"Aiza",
|
|
"Aizan",
|
|
"Ajaak",
|
|
"Ajnaic",
|
|
"Akaal",
|
|
"Akar",
|
|
"Akem",
|
|
"Akhtar",
|
|
"Akif",
|
|
"Akii",
|
|
"Akir",
|
|
"Aklo",
|
|
"Akon",
|
|
"Akoorb",
|
|
"Akrain",
|
|
"Akshooth",
|
|
"Akthrain",
|
|
"Akvar",
|
|
"Alao",
|
|
"Alarre",
|
|
"Albaize",
|
|
"Albin",
|
|
"Albrif",
|
|
"Aldende",
|
|
"Aldlor",
|
|
"Aldlum",
|
|
"Aldon",
|
|
"Aldor",
|
|
"Aldreb",
|
|
"Aldred",
|
|
"Aldren",
|
|
"Aldryn",
|
|
"Aldtas",
|
|
"Alenthe",
|
|
"Alfan",
|
|
"Algus",
|
|
"Alif",
|
|
"Aling",
|
|
"Aljic",
|
|
"Aljric",
|
|
"Allaire",
|
|
"Allar",
|
|
"Almaer",
|
|
"Almeir",
|
|
"Almen",
|
|
"Alodd",
|
|
"Alsob",
|
|
"Altin",
|
|
"Altur",
|
|
"Alver",
|
|
"Alya",
|
|
"Amact",
|
|
"Amair",
|
|
"Ambard",
|
|
"Ambeln",
|
|
"Ambril",
|
|
"Ameste",
|
|
"Amfik",
|
|
"Amkir",
|
|
"Ammdar",
|
|
"Ammek",
|
|
"Amoyl",
|
|
"Amphoth",
|
|
"Amrath",
|
|
"Amren",
|
|
"Amyrg",
|
|
"Amzar",
|
|
"Anach",
|
|
"Anar",
|
|
"Anaz",
|
|
"Ancharl",
|
|
"Anclaar",
|
|
"Anctash",
|
|
"Andell",
|
|
"Andjez",
|
|
"Andon",
|
|
"Andore",
|
|
"Andorh",
|
|
"Andrad",
|
|
"Andreth",
|
|
"Androlg",
|
|
"Andrys",
|
|
"Andval",
|
|
"Anghra",
|
|
"Anglame",
|
|
"Angleem",
|
|
"Anglock",
|
|
"Anglor",
|
|
"Angmor",
|
|
"Angtai",
|
|
"Anhlaw",
|
|
"Anigg",
|
|
"Anin",
|
|
"Anjak",
|
|
"Anjos",
|
|
"Anken",
|
|
"Ansher",
|
|
"Ansoj",
|
|
"Anson",
|
|
"Antar",
|
|
"Antarn",
|
|
"Anthor",
|
|
"Antrim",
|
|
"Antriq",
|
|
"Antrisp",
|
|
"Anvar",
|
|
"Anvyen",
|
|
"Anxrin",
|
|
"Anzire",
|
|
"Aopharz",
|
|
"Aophim",
|
|
"Aquill",
|
|
"Ara",
|
|
"Araar",
|
|
"Aradh",
|
|
"Arak",
|
|
"Aran",
|
|
"Araste",
|
|
"Araz",
|
|
"Arbal",
|
|
"Archam",
|
|
"Archech",
|
|
"Archite",
|
|
"Arcus",
|
|
"Ardann",
|
|
"Ardesh",
|
|
"Ardlen",
|
|
"Ardoth",
|
|
"Ardune",
|
|
"Ardwar",
|
|
"Ardwil",
|
|
"Ardwile",
|
|
"Areest",
|
|
"Arell",
|
|
"Argin",
|
|
"Argorm",
|
|
"Argrath",
|
|
"Arhnaal",
|
|
"Aribe",
|
|
"Arick",
|
|
"Arjhag",
|
|
"Arkal",
|
|
"Arkharn",
|
|
"Arklow",
|
|
"Arkrog",
|
|
"Arlan",
|
|
"Arlbeth",
|
|
"Arldon",
|
|
"Arlya",
|
|
"Armast",
|
|
"Armorn",
|
|
"Armyze",
|
|
"Arna",
|
|
"Arnhor",
|
|
"Arnid",
|
|
"Arnlor",
|
|
"Arnrost",
|
|
"Aroinz",
|
|
"Arrah",
|
|
"Arrhod",
|
|
"Arshel",
|
|
"Artheen",
|
|
"Arthex",
|
|
"Artor",
|
|
"Artus",
|
|
"Arun",
|
|
"Arvel",
|
|
"Arvilk",
|
|
"Arvol",
|
|
"Arvox",
|
|
"Arweld",
|
|
"Aryem",
|
|
"Aryft",
|
|
"Aryon",
|
|
"Aryph",
|
|
"Aryus",
|
|
"Arzang",
|
|
"Arzi",
|
|
"Asberl",
|
|
"Ascelle",
|
|
"Aschar",
|
|
"Aschka",
|
|
"Asco",
|
|
"\xC4s\xEB",
|
|
"Asgar",
|
|
"Asgorn",
|
|
"Ashan",
|
|
"Ashane",
|
|
"Ashbarl",
|
|
"Ashed",
|
|
"Ashild",
|
|
"Ashlann",
|
|
"Ashnyn",
|
|
"Ashord",
|
|
"Ashtah",
|
|
"Ashur",
|
|
"Askar",
|
|
"Aspand",
|
|
"Asrai",
|
|
"Astei",
|
|
"Astem",
|
|
"Astha",
|
|
"Astran",
|
|
"Astrin",
|
|
"Atang",
|
|
"Atar",
|
|
"Atdeel",
|
|
"Ateng",
|
|
"Athald",
|
|
"Athar",
|
|
"Athcroj",
|
|
"Athlas",
|
|
"Athlos",
|
|
"Athmar",
|
|
"Athquom",
|
|
"Atlampt",
|
|
"Atlank",
|
|
"Atmaas",
|
|
"Atmeh",
|
|
"Atmog",
|
|
"Atox",
|
|
"Atraaf",
|
|
"Atrend",
|
|
"Atsal",
|
|
"Attor",
|
|
"Atyar",
|
|
"Atyre",
|
|
"Auchstyr",
|
|
"Auchur",
|
|
"Aucir",
|
|
"Audric",
|
|
"Aundan",
|
|
"Aunxar",
|
|
"Aurawn",
|
|
"Aureth",
|
|
"Auxid",
|
|
"Avane",
|
|
"Avarr",
|
|
"Averq",
|
|
"Avoon",
|
|
"Avorn",
|
|
"Awndale",
|
|
"Axaane",
|
|
"Axos",
|
|
"Aya",
|
|
"Aydras",
|
|
"Ayen",
|
|
"Ayin",
|
|
"Ayir",
|
|
"Ayla",
|
|
"Aylmer",
|
|
"Ayrish",
|
|
"Ayshun",
|
|
"Ayshung",
|
|
"Azal",
|
|
"Azash",
|
|
"Azeal",
|
|
"Azen",
|
|
"Azgoth",
|
|
"Azhrarn",
|
|
"Azlon",
|
|
"Azlyn",
|
|
"Azmael",
|
|
"Azorn",
|
|
"Azoth",
|
|
"Azra",
|
|
"Azraq",
|
|
"Azrean",
|
|
"Azreck",
|
|
"Azter",
|
|
"Azzay",
|
|
"Babdar",
|
|
"Baccruz",
|
|
"Baelil",
|
|
"Bahar",
|
|
"Baiar",
|
|
"Baiern",
|
|
"Baikaen",
|
|
"Baiposk",
|
|
"Bakan",
|
|
"Bakra",
|
|
"Balain",
|
|
"Balaz",
|
|
"Baldhur",
|
|
"Baldrim",
|
|
"Balgurr",
|
|
"Balkar",
|
|
"Balok",
|
|
"Balour",
|
|
"Banek",
|
|
"Banffoge",
|
|
"Bannheld",
|
|
"Bannor",
|
|
"Baraell",
|
|
"Bardel",
|
|
"Barduy",
|
|
"Baren",
|
|
"Barim",
|
|
"Barind",
|
|
"Barldsy",
|
|
"Barlom",
|
|
"Barlon",
|
|
"Barltan",
|
|
"Barnar",
|
|
"Barood",
|
|
"Baros",
|
|
"Barrenc",
|
|
"Barrin",
|
|
"Bartain",
|
|
"Basfric",
|
|
"Basim",
|
|
"Basmol",
|
|
"Bassinth",
|
|
"Bassto",
|
|
"Bastarre",
|
|
"Batrosque",
|
|
"Bayven",
|
|
"Bayzell",
|
|
"Bazan",
|
|
"Bazit",
|
|
"Beclaan",
|
|
"Bedane",
|
|
"Bedese",
|
|
"Beejlam",
|
|
"Begnus",
|
|
"Belan",
|
|
"Belaz",
|
|
"Belcoir",
|
|
"Beleth",
|
|
"Belgaun",
|
|
"Belic",
|
|
"Beljan",
|
|
"Bellin",
|
|
"Bellom",
|
|
"Belmul",
|
|
"Belnarth",
|
|
"Belor",
|
|
"Belorn",
|
|
"Belot",
|
|
"Belrain",
|
|
"Belstos",
|
|
"Belthan",
|
|
"Belthis",
|
|
"Belwilg",
|
|
"Bengol",
|
|
"B\xEBol",
|
|
"Beolj",
|
|
"Beras",
|
|
"Berclad",
|
|
"Bercol",
|
|
"Berik",
|
|
"Berild",
|
|
"Berim",
|
|
"Berith",
|
|
"Berlyne",
|
|
"Berrec",
|
|
"Bersem",
|
|
"Bershar",
|
|
"Bertrenk",
|
|
"Berzik",
|
|
"Bethmel",
|
|
"Beyash",
|
|
"Beyus",
|
|
"Bezgrael",
|
|
"Bezpar",
|
|
"Bhoorva",
|
|
"Biferb",
|
|
"Biilar",
|
|
"Bildesh",
|
|
"Billosh",
|
|
"Bilmar",
|
|
"Bindle",
|
|
"Biraad",
|
|
"Birain",
|
|
"Bireln",
|
|
"Birta",
|
|
"Bisel",
|
|
"Bjanni",
|
|
"Blauthike",
|
|
"Bleran",
|
|
"Bleskran",
|
|
"Blonjerg",
|
|
"Blorvind",
|
|
"Blunyc",
|
|
"Bodvar",
|
|
"Bo\xEBd",
|
|
"Boggrah",
|
|
"Bolaoz",
|
|
"Bolthorn",
|
|
"Borale",
|
|
"Boren",
|
|
"Borgald",
|
|
"Borin",
|
|
"Borlaith",
|
|
"Borlas",
|
|
"Borlid",
|
|
"Borlo",
|
|
"Borngah",
|
|
"Borzer",
|
|
"Boshan",
|
|
"Bothar",
|
|
"Botro",
|
|
"Bouphar",
|
|
"Bowjen",
|
|
"Boyarl",
|
|
"Braagen",
|
|
"Bracca",
|
|
"Braeklarn",
|
|
"Bragen",
|
|
"Brahan",
|
|
"Brakkon",
|
|
"Brala",
|
|
"Brali",
|
|
"Brallu",
|
|
"Bralma",
|
|
"Brandar",
|
|
"Brandec",
|
|
"Brangwej",
|
|
"Branthu",
|
|
"Brantys",
|
|
"Branvaol",
|
|
"Branzan",
|
|
"Brascand",
|
|
"Brasslin",
|
|
"Braxen",
|
|
"Braxtor",
|
|
"Brealij",
|
|
"Bredhal",
|
|
"Breedast",
|
|
"Bregem",
|
|
"Brehen",
|
|
"Breitsoj",
|
|
"Brelkrov",
|
|
"Brenen",
|
|
"Brenlan",
|
|
"Brestej",
|
|
"Brethil",
|
|
"Bretta",
|
|
"Brevlyn",
|
|
"Brevta",
|
|
"Brielle",
|
|
"Brindax",
|
|
"Brindence",
|
|
"Brintu",
|
|
"Brinys",
|
|
"Brislyn",
|
|
"Brithael",
|
|
"Brithric",
|
|
"Brobal",
|
|
"Brohnin",
|
|
"Brona",
|
|
"Broosin",
|
|
"Broxus",
|
|
"Brufod",
|
|
"Brundelx",
|
|
"Bryapka",
|
|
"Brynit",
|
|
"Buckrald",
|
|
"Bulvet",
|
|
"Burcan",
|
|
"Burrgaut",
|
|
"Bwermolc",
|
|
"Byeloor",
|
|
"Bylys",
|
|
"Byrkast",
|
|
"Byzar",
|
|
"Cadairn",
|
|
"Caddax",
|
|
"Cadel",
|
|
"Cadfrel",
|
|
"Cadrach",
|
|
"Cadreth",
|
|
"Caecyn",
|
|
"Caedfer",
|
|
"Caelis",
|
|
"Caerron",
|
|
"Caillean",
|
|
"Caiphul",
|
|
"Cairon",
|
|
"Caldel",
|
|
"Calensch",
|
|
"Calkdaev",
|
|
"Calmic",
|
|
"Calnor",
|
|
"Calunn",
|
|
"Calyz",
|
|
"Calzan",
|
|
"Camain",
|
|
"Cambree",
|
|
"Camdlon",
|
|
"Camsar",
|
|
"Candla",
|
|
"Candrak",
|
|
"Canelb",
|
|
"Cangmor",
|
|
"Canthar",
|
|
"Cantrasc",
|
|
"Caopha",
|
|
"Caostri",
|
|
"Caranth",
|
|
"Carbrod",
|
|
"Cardelv",
|
|
"Carfheen",
|
|
"Carlasc",
|
|
"Carlinx",
|
|
"Carnax",
|
|
"Carnly",
|
|
"Carnool",
|
|
"Caroin",
|
|
"Carquel",
|
|
"Carthis",
|
|
"Caskeil",
|
|
"Castlon",
|
|
"Cathlaid",
|
|
"Caveesm",
|
|
"Cavorn",
|
|
"Cavosse",
|
|
"Cavris",
|
|
"Caynarv",
|
|
"Cayrin",
|
|
"Cazberr",
|
|
"Cazyach",
|
|
"Cedrim",
|
|
"Cedrisk",
|
|
"Ceilerse",
|
|
"Celbarb",
|
|
"Cemtruo",
|
|
"Cenyth",
|
|
"Ceraik",
|
|
"Cercyon",
|
|
"Cerdun",
|
|
"Cerlint",
|
|
"Cermor",
|
|
"Cernon",
|
|
"Cerra",
|
|
"Cessair",
|
|
"Cevir",
|
|
"Ceylinn",
|
|
"Chadan",
|
|
"Chadlor",
|
|
"Chadzik",
|
|
"Chaemor",
|
|
"Chagor",
|
|
"Chalar",
|
|
"Challem",
|
|
"Challeth",
|
|
"Chalvir",
|
|
"Chambarr",
|
|
"Changtsai",
|
|
"Chanoth",
|
|
"Chanti",
|
|
"Cha\xF6l",
|
|
"Charatze",
|
|
"Charnyx",
|
|
"Charresh",
|
|
"Charyd",
|
|
"Chaska",
|
|
"Chaulet",
|
|
"Chavir",
|
|
"Chayim",
|
|
"Chazane",
|
|
"Chazgel",
|
|
"Cheldor",
|
|
"Chelim",
|
|
"Chelprey",
|
|
"Chelshrike",
|
|
"Chendil",
|
|
"Chenean",
|
|
"Chenoa",
|
|
"Cherla",
|
|
"Chessene",
|
|
"Chevonde",
|
|
"Chezil",
|
|
"Chial",
|
|
"Chian",
|
|
"Chigran",
|
|
"Chimu",
|
|
"Chimzil",
|
|
"Chirril",
|
|
"Chirthiz",
|
|
"Chitrind",
|
|
"Chlangi",
|
|
"Chlodig",
|
|
"Chlorild",
|
|
"Chordash",
|
|
"Chorrin",
|
|
"Chrezel",
|
|
"Chungaez",
|
|
"Chunjan",
|
|
"Chyvil",
|
|
"Cidran",
|
|
"Cilmar",
|
|
"Cinctraic",
|
|
"Ciraf",
|
|
"Cirkin",
|
|
"Cirnak",
|
|
"Cista",
|
|
"Civar",
|
|
"Ciwan",
|
|
"Clafaug",
|
|
"Clarinn",
|
|
"Cleedis",
|
|
"Clendlim",
|
|
"Clenvred",
|
|
"Cligra",
|
|
"Cloosag",
|
|
"Cloralt",
|
|
"Co\xE4x",
|
|
"Cobord",
|
|
"Cobrynth",
|
|
"Coddry",
|
|
"Cogarn",
|
|
"Coimarn",
|
|
"Colgrim",
|
|
"Colyss",
|
|
"Comnlan",
|
|
"Conjerb",
|
|
"Conjin",
|
|
"Coram",
|
|
"Corbrod",
|
|
"Cordin",
|
|
"Corem",
|
|
"Coreme",
|
|
"Corill",
|
|
"Corince",
|
|
"Cormast",
|
|
"Corrysm",
|
|
"Corsolle",
|
|
"Couran",
|
|
"Coyzan",
|
|
"Cramog",
|
|
"Craxan",
|
|
"Craydarth",
|
|
"Craye",
|
|
"Creidah",
|
|
"Crennex",
|
|
"Crestarl",
|
|
"Crestry",
|
|
"Creydai",
|
|
"Crezel",
|
|
"Crilayth",
|
|
"Crixbine",
|
|
"Crochell",
|
|
"Crolas",
|
|
"Cromough",
|
|
"Croquarne",
|
|
"Cuddry",
|
|
"Cuhaid",
|
|
"Cullyn",
|
|
"Curik",
|
|
"Curin",
|
|
"Curlask",
|
|
"Cusheal",
|
|
"Cusheth",
|
|
"Cuttray",
|
|
"Cyanril",
|
|
"Cydace",
|
|
"Cylenn",
|
|
"Cynquil",
|
|
"Cyrand",
|
|
"Cyrib",
|
|
"Cyrvemth",
|
|
"Czarai",
|
|
"Dabthan",
|
|
"Dacil",
|
|
"Daeglev",
|
|
"Daelden",
|
|
"Dafor",
|
|
"Daghand",
|
|
"Dagharz",
|
|
"Dagir",
|
|
"Dahiil",
|
|
"Daikoon",
|
|
"Dailenn",
|
|
"Dakul",
|
|
"Dakvon",
|
|
"Dalain",
|
|
"Dalanc",
|
|
"Dalcraw",
|
|
"Dalga",
|
|
"Dalgirth",
|
|
"Dalith",
|
|
"Dalman",
|
|
"Dalraev",
|
|
"Dalsar",
|
|
"Dalvai",
|
|
"Dalvoc",
|
|
"Dalwyn",
|
|
"Damaal",
|
|
"Damar",
|
|
"Damesk",
|
|
"Damrir",
|
|
"Danchel",
|
|
"Dandar",
|
|
"Dandroan",
|
|
"Danfis",
|
|
"Dangrim",
|
|
"Dankin",
|
|
"Dantlee",
|
|
"Daotar",
|
|
"Daphrin",
|
|
"Daplurn",
|
|
"Dara",
|
|
"Darach",
|
|
"Darake",
|
|
"Daran",
|
|
"Darax",
|
|
"Darbeel",
|
|
"Darcer",
|
|
"Darga",
|
|
"Darglin",
|
|
"Darinth",
|
|
"Darjek",
|
|
"Darjii",
|
|
"Darlist",
|
|
"Darlith",
|
|
"Darmont",
|
|
"Darmore",
|
|
"Darnath",
|
|
"Darnein",
|
|
"Darnime",
|
|
"Daron",
|
|
"Darool",
|
|
"Darsid",
|
|
"Darsiiv",
|
|
"Darsin",
|
|
"Darvane",
|
|
"Darven",
|
|
"Darzed",
|
|
"Darzha",
|
|
"Dashgu",
|
|
"Dasig",
|
|
"Dastor",
|
|
"Dastryn",
|
|
"Daugas",
|
|
"Daulaz",
|
|
"Davar",
|
|
"Daveld",
|
|
"Davix",
|
|
"Davlit",
|
|
"Davras",
|
|
"Davrou",
|
|
"Davrune",
|
|
"Dawfoke",
|
|
"Daxon",
|
|
"Dayko",
|
|
"Daysase",
|
|
"Daytar",
|
|
"Deaclynd",
|
|
"Debfin",
|
|
"Dechru",
|
|
"Deenos",
|
|
"Delaur",
|
|
"Delcold",
|
|
"Deldrak",
|
|
"Deleea",
|
|
"Delente",
|
|
"Delgath",
|
|
"Delgaun",
|
|
"Delmar",
|
|
"Delna",
|
|
"Delrean",
|
|
"Delser",
|
|
"Demgris",
|
|
"Deneth",
|
|
"Dengar",
|
|
"Denlorn",
|
|
"Derdain",
|
|
"Derfel",
|
|
"Dergast",
|
|
"Derild",
|
|
"Derlin",
|
|
"Derlor",
|
|
"Deroh",
|
|
"Deron",
|
|
"Derroll",
|
|
"Dersarre",
|
|
"Derthark",
|
|
"Devolt",
|
|
"Devreed",
|
|
"Dhakos",
|
|
"Dhornen",
|
|
"Dhoumene",
|
|
"Dhranak",
|
|
"Dhyana",
|
|
"Dialn",
|
|
"Dibdrek",
|
|
"Dilfar",
|
|
"Dilgid",
|
|
"Dilquay",
|
|
"Dilvak",
|
|
"Dinoor",
|
|
"Diorne",
|
|
"Diran",
|
|
"Dirim",
|
|
"Dirkalt",
|
|
"Dirmalk",
|
|
"Dirrach",
|
|
"Dirrahk",
|
|
"Dirvus",
|
|
"Distar",
|
|
"Disten",
|
|
"Distran",
|
|
"Ditrenth",
|
|
"Divos",
|
|
"Djarmon",
|
|
"Djehla",
|
|
"Djelha",
|
|
"Djira",
|
|
"Djola",
|
|
"Dolljan",
|
|
"Dolthar",
|
|
"Dolvith",
|
|
"Domede",
|
|
"Domen",
|
|
"Domin",
|
|
"Domnux",
|
|
"Domon",
|
|
"Domvit",
|
|
"Domwren",
|
|
"Donet",
|
|
"Donlaze",
|
|
"Doran",
|
|
"Dorath",
|
|
"Dorgand",
|
|
"Dorgath",
|
|
"Dorhar",
|
|
"Dorin",
|
|
"Dornath",
|
|
"Dornbain",
|
|
"Dorok",
|
|
"Dorsan",
|
|
"Dorspaich",
|
|
"Dortoom",
|
|
"Dorvai",
|
|
"Dostaan",
|
|
"Doussa",
|
|
"Dowflox",
|
|
"Dozrig",
|
|
"Dozthuk",
|
|
"Drabsnar",
|
|
"Dradoi",
|
|
"Dradus",
|
|
"Draegra",
|
|
"Drakhor",
|
|
"Drakhri",
|
|
"Drakirn",
|
|
"Drakkan",
|
|
"Dralar",
|
|
"Dramah",
|
|
"Dramfer",
|
|
"Draogat",
|
|
"Drassonne",
|
|
"Drauphor",
|
|
"Draven",
|
|
"Draxok",
|
|
"Drayley",
|
|
"Drayven",
|
|
"Drazvec",
|
|
"Drebyss",
|
|
"Dreezhan",
|
|
"Drefest",
|
|
"Dreggol",
|
|
"Dreintor",
|
|
"Drellefe",
|
|
"Drenfust",
|
|
"Drengar",
|
|
"Drethlec",
|
|
"Drevark",
|
|
"Dreynel",
|
|
"Drezael",
|
|
"Drezaem",
|
|
"Drilant",
|
|
"Drimmis",
|
|
"Drinda",
|
|
"Dringle",
|
|
"Drion",
|
|
"Drissa",
|
|
"Dristirk",
|
|
"Drocolg",
|
|
"Drogan",
|
|
"Drohulse",
|
|
"Droilfin",
|
|
"Drokoag",
|
|
"Dronasp",
|
|
"Druchor",
|
|
"Drunal",
|
|
"Drusilf",
|
|
"Dryduos",
|
|
"Duarn",
|
|
"Duergan",
|
|
"Dulith",
|
|
"Dulkarn",
|
|
"Dulkast",
|
|
"Dunry",
|
|
"Durnik",
|
|
"Durzin",
|
|
"Duskim",
|
|
"Duubown",
|
|
"Dvorast",
|
|
"Dwendlim",
|
|
"Dwyvach",
|
|
"Dygard",
|
|
"Dylenx",
|
|
"Dymnash",
|
|
"Dynqua",
|
|
"Dynroth",
|
|
"Dyoni",
|
|
"Dyshim",
|
|
"Dyskrahn",
|
|
"Dytheus",
|
|
"Dyvim",
|
|
"Dyzant",
|
|
"Dzoraug",
|
|
"Easval",
|
|
"Ebane",
|
|
"Ebur",
|
|
"Echael",
|
|
"Echross",
|
|
"Eclane",
|
|
"Edcyl",
|
|
"Eddar",
|
|
"Eddax",
|
|
"Eddor",
|
|
"Edeth",
|
|
"Edhil",
|
|
"Edrun",
|
|
"Eduu",
|
|
"Eehatt",
|
|
"Eelek",
|
|
"Eelgren",
|
|
"Eerban",
|
|
"Eglarth",
|
|
"Egron",
|
|
"Ehilm",
|
|
"Ehlmat",
|
|
"Ehlreth",
|
|
"Eidon",
|
|
"Eidrinn",
|
|
"Eilif",
|
|
"Einar",
|
|
"Eirecht",
|
|
"Eithn\xE9",
|
|
"Ejence",
|
|
"Ekvarl",
|
|
"Elaen",
|
|
"Eland",
|
|
"Elath",
|
|
"Eldin",
|
|
"Eldix",
|
|
"Eldrab",
|
|
"Eldron",
|
|
"Eldru",
|
|
"Elek",
|
|
"Elem",
|
|
"Elfreth",
|
|
"Elgroth",
|
|
"Elkin",
|
|
"Elkleth",
|
|
"Ellern",
|
|
"Ellrass",
|
|
"Elmral",
|
|
"Elnume",
|
|
"Elod",
|
|
"Elran",
|
|
"Elriph",
|
|
"Elu",
|
|
"Elvrit",
|
|
"Elyx",
|
|
"Elzast",
|
|
"Emal",
|
|
"Emberle",
|
|
"Emdel",
|
|
"Emerl",
|
|
"Emgar",
|
|
"Emton",
|
|
"Enban",
|
|
"Encarth",
|
|
"Endrade",
|
|
"Endril",
|
|
"Enferth",
|
|
"Englin",
|
|
"Enkim",
|
|
"Ennek",
|
|
"Enris",
|
|
"Enrost",
|
|
"Enskel",
|
|
"Ensorn",
|
|
"Envess",
|
|
"Enzhai",
|
|
"Ephelt",
|
|
"Ephraj",
|
|
"Ephti",
|
|
"Ephyre",
|
|
"Eppent",
|
|
"Eppin",
|
|
"Erbmaj",
|
|
"Erdlan",
|
|
"Ergar",
|
|
"Ergoth",
|
|
"Ergron",
|
|
"Erhil",
|
|
"Erijn",
|
|
"Ermon",
|
|
"Ermor",
|
|
"Eron",
|
|
"Errain",
|
|
"Errone",
|
|
"Erson",
|
|
"Erwat",
|
|
"Erxab",
|
|
"Escande",
|
|
"Esceft",
|
|
"Esdrix",
|
|
"Esghar",
|
|
"Eshrik",
|
|
"Eshuur",
|
|
"Eskarn",
|
|
"Eslyn",
|
|
"Esris",
|
|
"Essa",
|
|
"Estrag",
|
|
"Estorl",
|
|
"Estrif",
|
|
"Esyfe",
|
|
"Ethrene",
|
|
"Euross",
|
|
"Evelj",
|
|
"Evinth",
|
|
"Evith",
|
|
"Evorn",
|
|
"Evska",
|
|
"Ewlon",
|
|
"Eyphra",
|
|
"Eythor",
|
|
"Ezail",
|
|
"Ezmi",
|
|
"Ezri",
|
|
"Fabolde",
|
|
"Fadar",
|
|
"Faendyre",
|
|
"Faesten",
|
|
"Faffle",
|
|
"Fafnalg",
|
|
"Faiorg",
|
|
"Falbin",
|
|
"Falcarn",
|
|
"Falgar",
|
|
"Falhehn",
|
|
"Fali",
|
|
"Falldrijn",
|
|
"Falsfeen",
|
|
"Falslen",
|
|
"Falume",
|
|
"Fanchel",
|
|
"Faran",
|
|
"Fardoth",
|
|
"Fardron",
|
|
"Farglid",
|
|
"Farhaude",
|
|
"Farleit",
|
|
"Farli",
|
|
"Farmolj",
|
|
"Farnek",
|
|
"Farngold",
|
|
"Farngor",
|
|
"Faroon",
|
|
"Farosh",
|
|
"Farrain",
|
|
"Farscall",
|
|
"Farsun",
|
|
"Farunst",
|
|
"Farzdoy",
|
|
"Fasthes",
|
|
"Fautell",
|
|
"Favuld",
|
|
"Favvaz",
|
|
"Fayel",
|
|
"Faygrenn",
|
|
"Faylaol",
|
|
"Faylynn",
|
|
"Fayol",
|
|
"Fazhal",
|
|
"Fazzur",
|
|
"Feeming",
|
|
"Feikry",
|
|
"Feirrex",
|
|
"Felinx",
|
|
"Felnar",
|
|
"Felor",
|
|
"Felstar",
|
|
"Felthund",
|
|
"Felvrand",
|
|
"Femigg",
|
|
"Fendahl",
|
|
"Fendrabe",
|
|
"Fenew",
|
|
"Fenic",
|
|
"Fenist",
|
|
"Fenleith",
|
|
"Fennus",
|
|
"Fenrald",
|
|
"Fenzil",
|
|
"Feorth",
|
|
"Ferman",
|
|
"Fermern",
|
|
"Fernath",
|
|
"Ferndel",
|
|
"Fernhol",
|
|
"Fernool",
|
|
"Fernosk",
|
|
"Ferram",
|
|
"Ferthel",
|
|
"Fervigg",
|
|
"Ferwend",
|
|
"Fesru",
|
|
"Fethlan",
|
|
"Feyan",
|
|
"Feyern",
|
|
"Fhorat",
|
|
"Fiantz",
|
|
"Fictyr",
|
|
"Figgin",
|
|
"Fiiya",
|
|
"Filtarg",
|
|
"Fingril",
|
|
"Finstar",
|
|
"Firca",
|
|
"Firga",
|
|
"Firin",
|
|
"Firon",
|
|
"Fiskroll",
|
|
"Fissworx",
|
|
"Flauleck",
|
|
"Flayna",
|
|
"Flestrin",
|
|
"Fletchen",
|
|
"Flikir",
|
|
"Flingrel",
|
|
"Flitan",
|
|
"Flixis",
|
|
"Foarad",
|
|
"Fodusk",
|
|
"Fogrin",
|
|
"Fohdon",
|
|
"Folstin",
|
|
"Fomkrin",
|
|
"Fontand",
|
|
"Foozan",
|
|
"Foragh",
|
|
"Forang",
|
|
"Foraujh",
|
|
"Forbulse",
|
|
"Foren",
|
|
"Forjisk",
|
|
"Formki",
|
|
"Fornoar",
|
|
"Foros",
|
|
"Forroosk",
|
|
"Forstine",
|
|
"Fortrelce",
|
|
"Forvael",
|
|
"Fozgiel",
|
|
"Frama",
|
|
"Franaard",
|
|
"Frannon",
|
|
"Frashtol",
|
|
"Frayja",
|
|
"Freasand",
|
|
"Fremmoun",
|
|
"Frillox",
|
|
"Friston",
|
|
"Frixeen",
|
|
"Frolin",
|
|
"Frondir",
|
|
"Fronost",
|
|
"Fronubb",
|
|
"Froscele",
|
|
"Frowal",
|
|
"Fruwasp",
|
|
"Ftoomi",
|
|
"Fulshin",
|
|
"Fulume",
|
|
"Fumpsil",
|
|
"Furtloft",
|
|
"Fusraul",
|
|
"Fylin",
|
|
"Fylssa",
|
|
"Fyojhkor",
|
|
"Fy\xF6nn",
|
|
"Fyza",
|
|
"Gaatel",
|
|
"Gadan",
|
|
"Gadoc",
|
|
"Gadra",
|
|
"Gadri",
|
|
"Gaenlea",
|
|
"Gaerlind",
|
|
"Gaerris",
|
|
"Gafael",
|
|
"Gaisherl",
|
|
"Gajiste",
|
|
"Gakaal",
|
|
"Galaart",
|
|
"Galach",
|
|
"Galaij",
|
|
"Galan",
|
|
"Galbaaz",
|
|
"Galchan",
|
|
"Galdoir",
|
|
"Galenx",
|
|
"Galind",
|
|
"Gallarg",
|
|
"Gallasp",
|
|
"Galmad",
|
|
"Galron",
|
|
"Galsdor",
|
|
"Galvrix",
|
|
"Gambrax",
|
|
"Gamitz",
|
|
"Gamkya",
|
|
"Ganaek",
|
|
"Gandril",
|
|
"Ganerth",
|
|
"Ganerve",
|
|
"Ganix",
|
|
"Gankor",
|
|
"Ganock",
|
|
"Gareck",
|
|
"Gareld",
|
|
"Garhaft",
|
|
"Garlan",
|
|
"Garol",
|
|
"Garon",
|
|
"Garos",
|
|
"Garpast",
|
|
"Garras",
|
|
"Garron",
|
|
"Garstrang",
|
|
"Garstrith",
|
|
"Garthag",
|
|
"Garthaun",
|
|
"Garven",
|
|
"Gathen",
|
|
"Gaunmar",
|
|
"Gaurbal",
|
|
"Gavrok",
|
|
"Gawend",
|
|
"Gaxtor",
|
|
"Gazwylg",
|
|
"Gearna",
|
|
"Geaxa",
|
|
"Gebrence",
|
|
"Gebrow",
|
|
"Gechart",
|
|
"Gechrak",
|
|
"Gedreth",
|
|
"Geerharg",
|
|
"Gehed",
|
|
"Gelan",
|
|
"Gelann",
|
|
"Geldol",
|
|
"Gelwik",
|
|
"Gemal",
|
|
"Gemelf",
|
|
"Genglar",
|
|
"Gerant",
|
|
"Gerin",
|
|
"Gerlant",
|
|
"Geroind",
|
|
"Gerreint",
|
|
"Gerren",
|
|
"Gesin",
|
|
"Gethen",
|
|
"Gezdrey",
|
|
"Ghaachev",
|
|
"Gharlane",
|
|
"Ghatar",
|
|
"Ghatha",
|
|
"Ghellence",
|
|
"Gherent",
|
|
"Gherlan",
|
|
"Ghirra",
|
|
"Ghomnir",
|
|
"Ghralence",
|
|
"Giaj",
|
|
"Gilboch",
|
|
"Gildor",
|
|
"Gildren",
|
|
"Gildrift",
|
|
"Gilflin",
|
|
"Gilir",
|
|
"Gilith",
|
|
"Gillyn",
|
|
"Gilmir",
|
|
"Gilmirst",
|
|
"Gilnar",
|
|
"Gilorn",
|
|
"Gilos",
|
|
"Gilva",
|
|
"Gilvar",
|
|
"Gimeld",
|
|
"Gimlej",
|
|
"Gimnel",
|
|
"Ginnen",
|
|
"Ginorsh",
|
|
"Girbeaux",
|
|
"Girin",
|
|
"Girzan",
|
|
"Gisgin",
|
|
"Githeld",
|
|
"Githew",
|
|
"Gitlan",
|
|
"Gitril",
|
|
"Gittos",
|
|
"Gizralle",
|
|
"Glaeloth",
|
|
"Glaernex",
|
|
"Glaraum",
|
|
"Glasdray",
|
|
"Glasquel",
|
|
"Glaury",
|
|
"Glayant",
|
|
"Gleada",
|
|
"Glebur",
|
|
"Glethlot",
|
|
"Gleyden",
|
|
"Glianth",
|
|
"Glidnimm",
|
|
"Glimanthe",
|
|
"Glirice",
|
|
"Glirrish",
|
|
"Gloisur",
|
|
"Glowan",
|
|
"Glufjyn",
|
|
"Glyngal",
|
|
"Glynzel",
|
|
"Glystraine",
|
|
"Gnasthor",
|
|
"Gnasthra",
|
|
"Gnivlah",
|
|
"Gnohesk",
|
|
"Gnorri",
|
|
"Gnospret",
|
|
"Gobar",
|
|
"Goklod",
|
|
"Golluer",
|
|
"Gomar",
|
|
"Gondrift",
|
|
"Gonjal",
|
|
"Gorad",
|
|
"Gorgost",
|
|
"Gorin",
|
|
"Gorinssk",
|
|
"Gorklu",
|
|
"Gorlis",
|
|
"Gormane",
|
|
"Gornik",
|
|
"Gorshay",
|
|
"Goryon",
|
|
"Gossparl",
|
|
"Gothel",
|
|
"Grachar",
|
|
"Graequil",
|
|
"Graghan",
|
|
"Grahault",
|
|
"Grainim",
|
|
"Granik",
|
|
"Granlon",
|
|
"Gravec",
|
|
"Greavdal",
|
|
"Greelar",
|
|
"Greethrin",
|
|
"Greforn",
|
|
"Grehuse",
|
|
"Grekith",
|
|
"Gremdahl",
|
|
"Grendax",
|
|
"Grennath",
|
|
"Grenslae",
|
|
"Grenvin",
|
|
"Greorle",
|
|
"Grevam",
|
|
"Greyfell",
|
|
"Griam",
|
|
"Grian",
|
|
"Griea",
|
|
"Griffix",
|
|
"Grifnid",
|
|
"Grindan",
|
|
"Grishulf",
|
|
"Gristis",
|
|
"Griswald",
|
|
"Grittu",
|
|
"Grivalx",
|
|
"Gro\xE4xx",
|
|
"Grombul",
|
|
"Grondar",
|
|
"Grortam",
|
|
"Grulbest",
|
|
"Grussex",
|
|
"Grydon",
|
|
"Gryemox",
|
|
"Grykar",
|
|
"Grypha",
|
|
"Guhan",
|
|
"Guhlnor",
|
|
"Gulla",
|
|
"Gulzund",
|
|
"Gunshird",
|
|
"Gunthal",
|
|
"Gunthar",
|
|
"Gunzhur",
|
|
"Gurdam",
|
|
"Gurjan",
|
|
"Gustay",
|
|
"Guthril",
|
|
"Gwacyn",
|
|
"Gwaihir",
|
|
"Gweddyn",
|
|
"Gweien",
|
|
"Gwenca",
|
|
"Gwendald",
|
|
"Gwepfrath",
|
|
"Gwesder",
|
|
"Gwildor",
|
|
"Gwithra",
|
|
"Gwomyr",
|
|
"Gwyran",
|
|
"Gwythinst",
|
|
"Gy\xE1n",
|
|
"Gylrath",
|
|
"Gy\xF3rb",
|
|
"Gyriss",
|
|
"Gyrlaen",
|
|
"Gyrlath",
|
|
"Gysankh",
|
|
"Gyseyt",
|
|
"Gystral",
|
|
"Haakrim",
|
|
"Haarstrin",
|
|
"Habmarl",
|
|
"Hadan",
|
|
"Hadar",
|
|
"Hadarg",
|
|
"Hado",
|
|
"Hadrim",
|
|
"Hadron",
|
|
"Haestan",
|
|
"Haefgan",
|
|
"Hafthir",
|
|
"Hagith",
|
|
"Hagra",
|
|
"Haidelth",
|
|
"Haijiss",
|
|
"Hainen",
|
|
"Hakhoim",
|
|
"Haklar",
|
|
"Haklor",
|
|
"Hakpard",
|
|
"Hala",
|
|
"Halbex",
|
|
"Halborn",
|
|
"Haldor",
|
|
"Haloth",
|
|
"Halperle",
|
|
"Halsan",
|
|
"Hal\xFBt",
|
|
"Halvner",
|
|
"Hamba",
|
|
"Hamisk",
|
|
"Hanastre",
|
|
"Handra",
|
|
"Hanil",
|
|
"Hanierth",
|
|
"Hanith",
|
|
"Hantar",
|
|
"Hanthryn",
|
|
"Hapvar",
|
|
"Haral",
|
|
"Harave",
|
|
"Harchyl",
|
|
"Harfare",
|
|
"Hargan",
|
|
"Harnir",
|
|
"Harntil",
|
|
"Harnyrse",
|
|
"Harpann",
|
|
"Harran",
|
|
"Harrelm",
|
|
"Harstar",
|
|
"Hartaz",
|
|
"Harthan",
|
|
"Harthex",
|
|
"Harthran",
|
|
"Hartrond",
|
|
"Harvas",
|
|
"Harvel",
|
|
"Harzelle",
|
|
"Haspid",
|
|
"Hasrick",
|
|
"Hatchiss",
|
|
"Hatrasd",
|
|
"Havin",
|
|
"Havrel",
|
|
"Hawklin",
|
|
"Hawkram",
|
|
"Hawkran",
|
|
"Hawkreld",
|
|
"Hawleet",
|
|
"Hawljin",
|
|
"Hawtran",
|
|
"Haxas",
|
|
"Hazgarl",
|
|
"Hazkar",
|
|
"Hazrond",
|
|
"Hazvelc",
|
|
"Hazyrg",
|
|
"Hazzal",
|
|
"Hearroj",
|
|
"Hedin",
|
|
"Heenarg",
|
|
"Heengul",
|
|
"Hefpyre",
|
|
"Heinvroh",
|
|
"Helaz",
|
|
"Heldix",
|
|
"Helflitz",
|
|
"Helir",
|
|
"Helsdal",
|
|
"Helsur",
|
|
"Helvem",
|
|
"Hembra",
|
|
"Heram",
|
|
"Herisk",
|
|
"Herndre",
|
|
"Herrul",
|
|
"Herthose",
|
|
"Herym",
|
|
"Herzick",
|
|
"Hespek",
|
|
"Hesrel",
|
|
"Hessun",
|
|
"Hetcroft",
|
|
"Hethar",
|
|
"Hethra",
|
|
"Heurhyl",
|
|
"Hexil",
|
|
"Hezron",
|
|
"Heztor",
|
|
"Hibriss",
|
|
"Hienn",
|
|
"Hiffelk",
|
|
"Hifforn",
|
|
"Hifryn",
|
|
"Hildred",
|
|
"Hilix",
|
|
"Hiljin",
|
|
"Hilxin",
|
|
"Himlon",
|
|
"Himon",
|
|
"Himvli",
|
|
"Hinthan",
|
|
"Hinzay",
|
|
"Hireal",
|
|
"Hirrean",
|
|
"Hisrilf",
|
|
"Hisvran",
|
|
"Hizar",
|
|
"Hizron",
|
|
"Hjalmar",
|
|
"Hjeldin",
|
|
"Hjordrik",
|
|
"Hlyrmis",
|
|
"Hobtalg",
|
|
"Hoesgald",
|
|
"Holay",
|
|
"Holgar",
|
|
"Hollox",
|
|
"Holthan",
|
|
"Homli",
|
|
"Honturg",
|
|
"Hophand",
|
|
"Hoprig",
|
|
"Horan",
|
|
"Horglin",
|
|
"Horjak",
|
|
"Horlask",
|
|
"Hormatz",
|
|
"Horond",
|
|
"Horros",
|
|
"Horthoon",
|
|
"Horzak",
|
|
"Hotath",
|
|
"Hothcog",
|
|
"Hothcol",
|
|
"Hrasha",
|
|
"Hrasquer",
|
|
"Hrelar",
|
|
"Hresheuth",
|
|
"Hrinspire",
|
|
"Hroleur",
|
|
"Hr\xF6nir",
|
|
"Hrossa",
|
|
"Hrostar",
|
|
"Hsaptren",
|
|
"Humbuss",
|
|
"Humquor",
|
|
"Hunard",
|
|
"Hundar",
|
|
"Hurcad",
|
|
"Hurgal",
|
|
"Hurnod",
|
|
"Hurrisk",
|
|
"Hursin",
|
|
"Hurvin",
|
|
"Hurym",
|
|
"Hussuln",
|
|
"Huusim",
|
|
"Hyarante",
|
|
"Hyfryn",
|
|
"Hylar",
|
|
"Hyssome",
|
|
"Hyxley",
|
|
"Hyzail",
|
|
"Hyzen",
|
|
"Ibchol",
|
|
"Ibizt",
|
|
"Ibrolg",
|
|
"Ica",
|
|
"Ictar",
|
|
"Iduun",
|
|
"Ighai",
|
|
"Ignale",
|
|
"Ignire",
|
|
"Igraa",
|
|
"Igresk",
|
|
"Iijind",
|
|
"Iithkin",
|
|
"Ijeng",
|
|
"Ikalss",
|
|
"Ikeen",
|
|
"Ikkrish",
|
|
"Ikl\xE9y",
|
|
"Ildel",
|
|
"Ildelft",
|
|
"Ildin",
|
|
"Ildis",
|
|
"Ildnarr",
|
|
"Illa",
|
|
"Illyis",
|
|
"Ilnim",
|
|
"Ilruhn",
|
|
"Ilsuor",
|
|
"Ilthoss",
|
|
"Iltrilt",
|
|
"Iltrogh",
|
|
"Ilva",
|
|
"Ilvar",
|
|
"Ilxar",
|
|
"Ilyag",
|
|
"Imcanx",
|
|
"Imcolg",
|
|
"Imdiv",
|
|
"Imhas",
|
|
"Immak",
|
|
"Immoyr",
|
|
"Imnarl",
|
|
"Impag",
|
|
"Imrib",
|
|
"Imrift",
|
|
"Imtsith",
|
|
"Indlech",
|
|
"Indloth",
|
|
"Indlut",
|
|
"Indred",
|
|
"Ingarh",
|
|
"Ingelk",
|
|
"Ingen",
|
|
"Inghar",
|
|
"Ingolm",
|
|
"Ingrald",
|
|
"Inilv",
|
|
"Inis",
|
|
"Innluu",
|
|
"Inoke",
|
|
"Inslar",
|
|
"Iom",
|
|
"Ipshoom",
|
|
"Iraiz",
|
|
"Iras",
|
|
"Irauld",
|
|
"Iraunt",
|
|
"Irbry",
|
|
"Irchel",
|
|
"Irex",
|
|
"Irglas",
|
|
"Irlen",
|
|
"Irough",
|
|
"Irrash",
|
|
"Irrax",
|
|
"Irsai",
|
|
"Iruste",
|
|
"Irwick",
|
|
"Irxeath",
|
|
"Isbard",
|
|
"Ishan",
|
|
"Ishenx",
|
|
"Ishgan",
|
|
"Ishkar",
|
|
"Ishlak",
|
|
"Ishshan",
|
|
"Ishya",
|
|
"Islarch",
|
|
"Ismlok",
|
|
"Isorn",
|
|
"Isphek",
|
|
"Issa",
|
|
"Isstan",
|
|
"Itaaq",
|
|
"Ithend",
|
|
"Ithkaar",
|
|
"Ithome",
|
|
"Ivaade",
|
|
"Ivaire",
|
|
"Ivind",
|
|
"Ivool",
|
|
"Ivorn",
|
|
"Ivral",
|
|
"Ivran",
|
|
"Ivrax",
|
|
"Ivyd",
|
|
"Ivyod",
|
|
"Ixan",
|
|
"Ixaq",
|
|
"Ixor",
|
|
"Iygin",
|
|
"Izinth",
|
|
"Izleng",
|
|
"Izmisk",
|
|
"Iztra",
|
|
"Izvire",
|
|
"Jaadis",
|
|
"Jaagix",
|
|
"Jaalmez",
|
|
"Jaalon",
|
|
"Jaaluth",
|
|
"Jablant",
|
|
"Jacor",
|
|
"Jadir",
|
|
"Jado",
|
|
"Jadoorm",
|
|
"Jaedan",
|
|
"Jaelyss",
|
|
"Jagan",
|
|
"Jaggol",
|
|
"Jagrid",
|
|
"Jahir",
|
|
"Jahrgrim",
|
|
"Jaidu",
|
|
"Jaldeer",
|
|
"Jalmid",
|
|
"Jalom",
|
|
"Jama",
|
|
"Janam",
|
|
"Janan",
|
|
"Jandix",
|
|
"Janlay",
|
|
"Jano",
|
|
"Janrass",
|
|
"Jantust",
|
|
"Janu",
|
|
"Japloon",
|
|
"Jarad",
|
|
"Jarilz",
|
|
"Jariz",
|
|
"Jarlew",
|
|
"Jarlith",
|
|
"Jarngor",
|
|
"Jarra",
|
|
"Jartak",
|
|
"Jartusk",
|
|
"Jarveen",
|
|
"Jarvil",
|
|
"Jarvix",
|
|
"Jarzad",
|
|
"Jasir",
|
|
"Jasphar",
|
|
"Jaswen",
|
|
"Jaussig",
|
|
"Jautan",
|
|
"Javen",
|
|
"Javert",
|
|
"Javrik",
|
|
"Javtir",
|
|
"Jaxal",
|
|
"Jaxel",
|
|
"Jaylence",
|
|
"Jazanne",
|
|
"Jazraal",
|
|
"Jazrel",
|
|
"Jazrode",
|
|
"Jebhart",
|
|
"Jedra",
|
|
"Jeeldor",
|
|
"Jeelteg",
|
|
"Jehzehr",
|
|
"Jelthar",
|
|
"Jekkar",
|
|
"Jelantru",
|
|
"Jelday",
|
|
"Jeldor",
|
|
"Jelym",
|
|
"Jenbow",
|
|
"Jendarr",
|
|
"Jenkisk",
|
|
"Jerdys",
|
|
"Jerec",
|
|
"Jerel",
|
|
"Jerim",
|
|
"Jessel",
|
|
"Jetashe",
|
|
"Jethrik",
|
|
"Jeven",
|
|
"Jevist",
|
|
"Jezreel",
|
|
"Jezzar",
|
|
"Jezzra",
|
|
"Jhebdaeg",
|
|
"Jheexadh",
|
|
"Jheluth",
|
|
"Jherrox",
|
|
"Jhinarr",
|
|
"Jhinith",
|
|
"Jhorin",
|
|
"Jhourlann",
|
|
"Jhumpoust",
|
|
"Jhuvar",
|
|
"Jiaf",
|
|
"Jianc",
|
|
"Jiglak",
|
|
"Jihalg",
|
|
"Jilsa",
|
|
"Jiltarn",
|
|
"Jinnow",
|
|
"Jintlorn",
|
|
"Jinvik",
|
|
"Jiral",
|
|
"Jirnon",
|
|
"Jirnost",
|
|
"Jisa",
|
|
"Jithrast",
|
|
"Jixile",
|
|
"Joamorsk",
|
|
"Jobel",
|
|
"Jolrant",
|
|
"Jolsir",
|
|
"Jomec",
|
|
"Jomsut",
|
|
"Jondar",
|
|
"Jooskan",
|
|
"Jorad",
|
|
"Jorael",
|
|
"Joram",
|
|
"Joran",
|
|
"Jorel",
|
|
"Jornic",
|
|
"Joron",
|
|
"Jorvim",
|
|
"Joskyl",
|
|
"Jossak",
|
|
"Jostib",
|
|
"Jothal",
|
|
"Jovaine",
|
|
"Joysair",
|
|
"Jugeen",
|
|
"Juldrake",
|
|
"Julix",
|
|
"Julphra",
|
|
"Jultus",
|
|
"Jungro",
|
|
"Junnar",
|
|
"Jurin",
|
|
"Jurinn",
|
|
"Jurret",
|
|
"Jushdak",
|
|
"Justix",
|
|
"Juthcot",
|
|
"Juxpire",
|
|
"Jynyx",
|
|
"Jyvlex",
|
|
"Kaanpell",
|
|
"Kadjix",
|
|
"Kaerjeld",
|
|
"Kaggoth",
|
|
"Kagolm",
|
|
"Kahlan",
|
|
"Kahmahr",
|
|
"Kaiya",
|
|
"Kaklo",
|
|
"Kaldrak",
|
|
"Kalduk",
|
|
"Kalen",
|
|
"Kaliss",
|
|
"Kallak",
|
|
"Kalshai",
|
|
"Kalthen",
|
|
"Kalvek",
|
|
"Kalvran",
|
|
"Kalxin",
|
|
"Kaman",
|
|
"Kamlant",
|
|
"Kamon",
|
|
"Kander",
|
|
"Kangmir",
|
|
"Kangmor",
|
|
"Kanliin",
|
|
"Kanpo",
|
|
"Kantar",
|
|
"Kanthrix",
|
|
"Kantran",
|
|
"Kanven",
|
|
"Kaplull",
|
|
"Karchad",
|
|
"Karchen",
|
|
"Karchoy",
|
|
"Karcist",
|
|
"Karect",
|
|
"Kareeb",
|
|
"Kargon",
|
|
"Karjin",
|
|
"Karjus",
|
|
"Karkrust",
|
|
"Karnek",
|
|
"Karrax",
|
|
"Karrim",
|
|
"Karsa",
|
|
"Karstall",
|
|
"Kartol",
|
|
"Kasel",
|
|
"Kashir",
|
|
"Kashtuul",
|
|
"Kaspim",
|
|
"Kaspin",
|
|
"Kassar",
|
|
"Katan",
|
|
"Kathak",
|
|
"Kathar",
|
|
"Kathasp",
|
|
"Kathor",
|
|
"Kattelg",
|
|
"Kattra",
|
|
"Kaukris",
|
|
"Kavar",
|
|
"Kavarl",
|
|
"Kavath",
|
|
"Kavis",
|
|
"Kavor",
|
|
"Kayesp",
|
|
"Kayris",
|
|
"Kazarn",
|
|
"Keanca",
|
|
"Kedern",
|
|
"Keerlin",
|
|
"Keermeth",
|
|
"Kegryn",
|
|
"Keigtril",
|
|
"Kekkan",
|
|
"Kelar",
|
|
"Keldar",
|
|
"Kelgus",
|
|
"Kelkor",
|
|
"Kelmar",
|
|
"Kelner",
|
|
"Kelrac",
|
|
"Kelshiir",
|
|
"Kelver",
|
|
"Kelvon",
|
|
"Kelvyath",
|
|
"Kember",
|
|
"Kembriss",
|
|
"Kemoy",
|
|
"Kenshlin",
|
|
"Keraan",
|
|
"Kerdal",
|
|
"Kered",
|
|
"Kerrol",
|
|
"Kersenct",
|
|
"Keru",
|
|
"Kerzard",
|
|
"Kesdric",
|
|
"Kesnahr",
|
|
"Kespeth",
|
|
"Kesrack",
|
|
"Kesrick",
|
|
"Kethdjal",
|
|
"Kethrak",
|
|
"Kevlad",
|
|
"Kexy",
|
|
"Kezven",
|
|
"Khadar",
|
|
"Khadys",
|
|
"Khalart",
|
|
"Khaldan",
|
|
"Khalir",
|
|
"Kheverl",
|
|
"Khondru",
|
|
"Khordov",
|
|
"Khrissa",
|
|
"Khrithra",
|
|
"Khrosa",
|
|
"Khudrax",
|
|
"Khugweb",
|
|
"Kian",
|
|
"Kibbath",
|
|
"Kibha",
|
|
"Kidash",
|
|
"Kiirmu",
|
|
"Kijmin",
|
|
"Kikrasht",
|
|
"Kilas",
|
|
"Kilat",
|
|
"Kilgand",
|
|
"Kilisp",
|
|
"Kilmin",
|
|
"Kimda",
|
|
"Kinduhr",
|
|
"Kinorm",
|
|
"Kinzroft",
|
|
"Kipplob",
|
|
"Kirdon",
|
|
"Kirklen",
|
|
"Kiroum",
|
|
"Kirrax",
|
|
"Kirun",
|
|
"Kirskar",
|
|
"Kirzav",
|
|
"Kisarld",
|
|
"Kishin",
|
|
"Kismer",
|
|
"Kismerle",
|
|
"Kisprimn",
|
|
"Kiston",
|
|
"Kisvord",
|
|
"Kithert",
|
|
"Kithorsk",
|
|
"Kithund",
|
|
"Kithvor",
|
|
"Kivan",
|
|
"Kivooz",
|
|
"Kivoum",
|
|
"Kixime",
|
|
"Kizmay",
|
|
"Kjeldor",
|
|
"Kjindar",
|
|
"Koabon",
|
|
"Kofoum",
|
|
"Koino",
|
|
"Kolbect",
|
|
"Kolchash",
|
|
"Kolduk",
|
|
"Kolthya",
|
|
"Kolvram",
|
|
"Konvain",
|
|
"Korak",
|
|
"Korban",
|
|
"Kordale",
|
|
"Koren",
|
|
"Koreth",
|
|
"Korghil",
|
|
"Korix",
|
|
"Korlisk",
|
|
"Kornor",
|
|
"Kornud",
|
|
"Korok",
|
|
"Korrik",
|
|
"Korsal",
|
|
"Korseng",
|
|
"Kortael",
|
|
"Kortenj",
|
|
"Korthoon",
|
|
"Koruk",
|
|
"Korusk",
|
|
"Korvar",
|
|
"Kosjourn",
|
|
"Kothar",
|
|
"Koxir",
|
|
"Kozzir",
|
|
"Kraatin",
|
|
"Krallorn",
|
|
"Krana",
|
|
"Krangar",
|
|
"Kranorn",
|
|
"Krantheer",
|
|
"Krantor",
|
|
"Kredhal",
|
|
"Kregnux",
|
|
"Krelgar",
|
|
"Krentomzh",
|
|
"Kressen",
|
|
"Krexnahr",
|
|
"Krillon",
|
|
"Krissenq",
|
|
"Kro\xEBld",
|
|
"Krotald",
|
|
"Krotar",
|
|
"Krotem",
|
|
"Kruchaen",
|
|
"Krynerl",
|
|
"Kugar",
|
|
"Kuldrah",
|
|
"Kulik",
|
|
"Kulleest",
|
|
"Kulxel",
|
|
"Kunatht",
|
|
"Kurdghar",
|
|
"Kurgnar",
|
|
"Kuruz",
|
|
"Kurvos",
|
|
"Kushish",
|
|
"Kydra",
|
|
"Kyladz",
|
|
"Kylcrum",
|
|
"Kylix",
|
|
"Kyllam",
|
|
"Kymen",
|
|
"Kyrake",
|
|
"Kyrmo",
|
|
"Kyrsha",
|
|
"Kyshi",
|
|
"Kysho",
|
|
"Laabrun",
|
|
"Laarskim",
|
|
"Laconde",
|
|
"La\xEBl",
|
|
"Lagu",
|
|
"Lailaske",
|
|
"Laithare",
|
|
"Lakis",
|
|
"Lalan",
|
|
"Lalit",
|
|
"Lalun",
|
|
"Lampor",
|
|
"Lanaar",
|
|
"Landish",
|
|
"Landreth",
|
|
"Langbar",
|
|
"Lanreex",
|
|
"Lanscitt",
|
|
"Lanteld",
|
|
"Lantis",
|
|
"Lantos",
|
|
"Lanvilt",
|
|
"Lanycth",
|
|
"Lanzee",
|
|
"Lanzept",
|
|
"Larbrun",
|
|
"Laresm",
|
|
"Larid",
|
|
"Larind",
|
|
"Larkrosp",
|
|
"Lasquor",
|
|
"Lathir",
|
|
"Lathmarc",
|
|
"Latra",
|
|
"Laudrin",
|
|
"Laxar",
|
|
"Laydor",
|
|
"Layek",
|
|
"Lazelle",
|
|
"Ledmai",
|
|
"Leela",
|
|
"Leena",
|
|
"Leerank",
|
|
"Leesclar",
|
|
"Leggwyt",
|
|
"Leghast",
|
|
"Lehun",
|
|
"Leistorn",
|
|
"Lembarl",
|
|
"Lemgaar",
|
|
"Lemtarn",
|
|
"Lendra",
|
|
"Lensith",
|
|
"Lenzeel",
|
|
"Lephais",
|
|
"Lephern",
|
|
"Leqquan",
|
|
"Lerdeln",
|
|
"Lerlya",
|
|
"Lermest",
|
|
"Lerquint",
|
|
"Lestin",
|
|
"Letek",
|
|
"Lexan",
|
|
"Lextraa",
|
|
"Leystorne",
|
|
"Lherache",
|
|
"Lhusark",
|
|
"Liance",
|
|
"Libourne",
|
|
"Lidrill",
|
|
"Lilir",
|
|
"Lilnid",
|
|
"Liltar",
|
|
"Limdal",
|
|
"Limhoth",
|
|
"Limka",
|
|
"Limson",
|
|
"Lindarl",
|
|
"Lindlorn",
|
|
"Linlaith",
|
|
"Linmer",
|
|
"Linor",
|
|
"Linspar",
|
|
"Lintan",
|
|
"Lintra",
|
|
"Liosse",
|
|
"Liphrodd",
|
|
"Lirram",
|
|
"Lishran",
|
|
"Liskeel",
|
|
"Lissar",
|
|
"Lisstar",
|
|
"Lisstra",
|
|
"Liston",
|
|
"Lisvorn",
|
|
"Litheem",
|
|
"Lithrad",
|
|
"Littwyst",
|
|
"Lixelle",
|
|
"Lixeth",
|
|
"Lixter",
|
|
"Lizki",
|
|
"Lobror",
|
|
"Logas",
|
|
"Lohmi",
|
|
"Loiarl",
|
|
"Loomar",
|
|
"Loorin",
|
|
"Loorzig",
|
|
"Loraem",
|
|
"Loral",
|
|
"Lorbis",
|
|
"Lorrhin",
|
|
"Lorrin",
|
|
"Lorvra",
|
|
"Lothilv",
|
|
"Louwend",
|
|
"Lovoz",
|
|
"Loxzor",
|
|
"Luast",
|
|
"Lubist",
|
|
"Lucenne",
|
|
"Lufraut",
|
|
"Lumas",
|
|
"Lumfa",
|
|
"Lunzar",
|
|
"Lurand",
|
|
"Lurash",
|
|
"Lurin",
|
|
"Luscan",
|
|
"Lutril",
|
|
"Luzfel",
|
|
"Lyanec",
|
|
"Lye\xFCm",
|
|
"Lylix",
|
|
"Lyra",
|
|
"Lyrin",
|
|
"Lyron",
|
|
"Maaga",
|
|
"Macra",
|
|
"Macrad",
|
|
"Maefon",
|
|
"Maegwin",
|
|
"Maerraent",
|
|
"Magalph",
|
|
"Maghan",
|
|
"Maglone",
|
|
"Magmarl",
|
|
"Magnyck",
|
|
"Mahhri",
|
|
"Mahrik",
|
|
"Maidah",
|
|
"Maidak",
|
|
"Mairish",
|
|
"Maisa",
|
|
"Maisan",
|
|
"Majan",
|
|
"Makamb",
|
|
"Makisp",
|
|
"Malak",
|
|
"Malasc",
|
|
"Malber",
|
|
"Malboe",
|
|
"Malda",
|
|
"Maldock",
|
|
"Malfar",
|
|
"Malgrah",
|
|
"Malheme",
|
|
"Malinsp",
|
|
"Malkorf",
|
|
"Malnurb",
|
|
"Malthen",
|
|
"Maltheus",
|
|
"Malthgri",
|
|
"Malthor",
|
|
"Malvisp",
|
|
"Malwer",
|
|
"Malzh\xE9",
|
|
"Mandrask",
|
|
"Manggrim",
|
|
"Mankril",
|
|
"Manthi",
|
|
"Manton",
|
|
"Ma\xF6l",
|
|
"Mapyn",
|
|
"Marack",
|
|
"Maraide",
|
|
"Marasp",
|
|
"Marath",
|
|
"Marax",
|
|
"Marclaw",
|
|
"Marcoorg",
|
|
"Mardhrene",
|
|
"Mardix",
|
|
"Mardur",
|
|
"Mareft",
|
|
"Marhalk",
|
|
"Marhart",
|
|
"Marjaan",
|
|
"Markryn",
|
|
"Marlath",
|
|
"Marlock",
|
|
"Marnec",
|
|
"Maroosh",
|
|
"Marost",
|
|
"Marrek",
|
|
"Marrhal",
|
|
"Marrhan",
|
|
"Marril",
|
|
"Marslin",
|
|
"Marslai",
|
|
"Martheel",
|
|
"Marul",
|
|
"Marvold",
|
|
"Marwhool",
|
|
"Mascrox",
|
|
"Maskrulp",
|
|
"Masplern",
|
|
"Masply",
|
|
"Masquoor",
|
|
"Masryn",
|
|
"Massac",
|
|
"Mastram",
|
|
"Mastrith",
|
|
"Mastruse",
|
|
"Mathgi",
|
|
"Mathlin",
|
|
"Mattraw",
|
|
"Matzin",
|
|
"Maularn",
|
|
"Maundrib",
|
|
"Maurdax",
|
|
"Maustere",
|
|
"Mavasce",
|
|
"Mavic",
|
|
"Mavkert",
|
|
"Mavour",
|
|
"Maxil",
|
|
"Mayern",
|
|
"Maylern",
|
|
"Maylin",
|
|
"Mayrime",
|
|
"Mazzyott",
|
|
"Medarm",
|
|
"Meder",
|
|
"Medist",
|
|
"Meeratz",
|
|
"Meffroa",
|
|
"Mefron",
|
|
"Meglos",
|
|
"Megwen",
|
|
"Mejea",
|
|
"Mekosp",
|
|
"Melaunce",
|
|
"Meldresc",
|
|
"Meleas",
|
|
"Melib",
|
|
"Melisk",
|
|
"Meljarn",
|
|
"Melkur",
|
|
"Melleg",
|
|
"Mellore",
|
|
"Melnayl",
|
|
"Melnyth",
|
|
"Melshiv",
|
|
"Melslem",
|
|
"Melviig",
|
|
"Mendra",
|
|
"Mengisp",
|
|
"Menksoor",
|
|
"Menna",
|
|
"Mephyr",
|
|
"Merdim",
|
|
"Merewn",
|
|
"Merkal",
|
|
"Merkan",
|
|
"Merley",
|
|
"Mermold",
|
|
"Mermoth",
|
|
"Merngar",
|
|
"Merophe",
|
|
"Merresh",
|
|
"Merrest",
|
|
"Merrost",
|
|
"Merryn",
|
|
"Mershun",
|
|
"Mersic",
|
|
"Mersna",
|
|
"Merssan",
|
|
"Merthyr",
|
|
"Merweld",
|
|
"Mesrah",
|
|
"Mesrawn",
|
|
"Mestorl",
|
|
"Mestrin",
|
|
"Methnos",
|
|
"Metrosq",
|
|
"Mevid",
|
|
"Mezard",
|
|
"Mhoran",
|
|
"Mhordaal",
|
|
"Mhovair",
|
|
"Mhurdaal",
|
|
"Mhyrrail",
|
|
"Mianth",
|
|
"Mibris",
|
|
"Micrum",
|
|
"Mida",
|
|
"Midor",
|
|
"Mifrax",
|
|
"Migglin",
|
|
"Mijar",
|
|
"Mijhyk",
|
|
"Mikird",
|
|
"Mileern",
|
|
"Milzrik",
|
|
"Mimur",
|
|
"Minom",
|
|
"Minvra",
|
|
"Minyal",
|
|
"Miraad",
|
|
"Mirach",
|
|
"Mircheld",
|
|
"Mirdain",
|
|
"Mirdij",
|
|
"Mirdole",
|
|
"Mireth",
|
|
"Mirglish",
|
|
"Mirhaz",
|
|
"Mirikke",
|
|
"Mirja",
|
|
"Mirjanth",
|
|
"Mirjenx",
|
|
"Mirkaise",
|
|
"Mirkin",
|
|
"Mirla",
|
|
"Mirrash",
|
|
"Mirrin",
|
|
"Mirrym",
|
|
"Mirtrax",
|
|
"Miryash",
|
|
"Mishaar",
|
|
"Mishim",
|
|
"Miskin",
|
|
"Miskul",
|
|
"Misrach",
|
|
"Miszlar",
|
|
"Mithbrin",
|
|
"Mithlerb",
|
|
"Mitrel",
|
|
"Mivarch",
|
|
"Mivrid",
|
|
"Miwarl",
|
|
"Mixtry",
|
|
"Mizarl",
|
|
"Mizma",
|
|
"Mizrab",
|
|
"Mlenjas",
|
|
"Mlocber",
|
|
"Mlodach",
|
|
"Moda",
|
|
"Mogorn",
|
|
"Moirulse",
|
|
"Molez",
|
|
"Mollith",
|
|
"Molnyx",
|
|
"Molrin",
|
|
"Molvigg",
|
|
"Molvind",
|
|
"Mommur",
|
|
"Monmar",
|
|
"Moondar",
|
|
"Mooneld",
|
|
"Moorith",
|
|
"Moorlow",
|
|
"Moormish",
|
|
"Moran",
|
|
"Morax",
|
|
"Morcal",
|
|
"Morchiss",
|
|
"Mordak",
|
|
"Mordlaw",
|
|
"Mordoc",
|
|
"Mordyle",
|
|
"Moreth",
|
|
"Morgath",
|
|
"Morgleeg",
|
|
"Morglin",
|
|
"Morgmar",
|
|
"Morgrim",
|
|
"Morhain",
|
|
"Morix",
|
|
"Morktar",
|
|
"Morla",
|
|
"Morlig",
|
|
"Morlosc",
|
|
"Mornith",
|
|
"Morrhan",
|
|
"Morsklon",
|
|
"Morssen",
|
|
"Mortan",
|
|
"Morthyld",
|
|
"Morvaen",
|
|
"Moryak",
|
|
"Moshaol",
|
|
"Mosyerl",
|
|
"Moyank",
|
|
"Mozoorb",
|
|
"Mrossard",
|
|
"Mubfusc",
|
|
"Mubur",
|
|
"Mudanc",
|
|
"Mudaz",
|
|
"Muhlenk",
|
|
"Muilt",
|
|
"Mungin",
|
|
"Munin",
|
|
"Murgaist",
|
|
"Murhsan",
|
|
"Mustile",
|
|
"Muuthas",
|
|
"Mygon",
|
|
"Myndax",
|
|
"Myrii",
|
|
"Myrnar",
|
|
"Myronce",
|
|
"Myrrim",
|
|
"Myrvarth",
|
|
"Myrya",
|
|
"Mysind",
|
|
"Mysmak",
|
|
"Naadem",
|
|
"Naadra",
|
|
"Naafa",
|
|
"Naalvad",
|
|
"Naasjerth",
|
|
"Nabdoor",
|
|
"Nabol",
|
|
"Nadar",
|
|
"Nadhil",
|
|
"Nadin",
|
|
"Nagai",
|
|
"Naghir",
|
|
"Nagist",
|
|
"Nagvar",
|
|
"Nahar",
|
|
"Nahoul",
|
|
"Naia",
|
|
"Naidel",
|
|
"Naidis",
|
|
"Naidule",
|
|
"Naidusk",
|
|
"Naion",
|
|
"Naisnim",
|
|
"Naithool",
|
|
"Nakrea",
|
|
"Nalbis",
|
|
"Naldecc",
|
|
"Nalkleth",
|
|
"Nalray",
|
|
"Namail",
|
|
"Namat",
|
|
"Namoin",
|
|
"Namvert",
|
|
"Nandrulg",
|
|
"Namphruk",
|
|
"Nantarth",
|
|
"Na\xF6k",
|
|
"Napolx",
|
|
"Naras",
|
|
"Nardalg",
|
|
"Naren",
|
|
"Narev",
|
|
"Nargath",
|
|
"Narjath",
|
|
"Narkrisst",
|
|
"Naron",
|
|
"Narqui",
|
|
"Narsok",
|
|
"Narthold",
|
|
"Nartolth",
|
|
"Narvi",
|
|
"Narvik",
|
|
"Nasank",
|
|
"Nasir",
|
|
"Natchai",
|
|
"Natchren",
|
|
"Natein",
|
|
"Nathlim",
|
|
"Nathor",
|
|
"Nathraq",
|
|
"Nautcheb",
|
|
"Navai",
|
|
"Navairnz",
|
|
"Navar",
|
|
"Navesm",
|
|
"Nazaarl",
|
|
"Ndola",
|
|
"Nebcherl",
|
|
"Nebron",
|
|
"Nectesce",
|
|
"Neelrix",
|
|
"Neepmire",
|
|
"Nefhorn",
|
|
"Negert",
|
|
"Negort",
|
|
"Nelat",
|
|
"Nelbron",
|
|
"Nelesck",
|
|
"Nelynn",
|
|
"Nemstere",
|
|
"Nemweal",
|
|
"Nenaire",
|
|
"Nengret",
|
|
"Nephard",
|
|
"Nephog",
|
|
"Neri",
|
|
"Nerish",
|
|
"Neruus",
|
|
"Nerveer",
|
|
"Nesbin",
|
|
"Neshkem",
|
|
"Nesser",
|
|
"Nestra",
|
|
"Nesvan",
|
|
"Nethelb",
|
|
"Netskra",
|
|
"Nevlyn",
|
|
"Newhar",
|
|
"Nexoz",
|
|
"Nextar",
|
|
"Nexxar",
|
|
"Neywode",
|
|
"Nezuel",
|
|
"Nezzdak",
|
|
"Niand",
|
|
"Nibine",
|
|
"Nibor",
|
|
"Niconde",
|
|
"Nictroi",
|
|
"Nida",
|
|
"Nifeld",
|
|
"Nigil",
|
|
"Nigr\xE4l",
|
|
"Nijim",
|
|
"Nijis",
|
|
"Nikusp",
|
|
"Nilgorm",
|
|
"Nilnoi",
|
|
"Nimbol",
|
|
"Nimir",
|
|
"Nimon",
|
|
"Nimrede",
|
|
"Nindiss",
|
|
"Nireal",
|
|
"Nirel",
|
|
"Nirhain",
|
|
"Nirhath",
|
|
"Nirloge",
|
|
"Nirnir",
|
|
"Nisherj",
|
|
"Nishla",
|
|
"Nishmir",
|
|
"Nishran",
|
|
"Nissac",
|
|
"Nissal",
|
|
"Nithilt",
|
|
"Nithlom",
|
|
"Nitra",
|
|
"Nivenk",
|
|
"Nivgrom",
|
|
"Nixin",
|
|
"Nizoon",
|
|
"Nizten",
|
|
"Nogaarn",
|
|
"Nokelm",
|
|
"Nolfig",
|
|
"Noloq",
|
|
"Nolthar",
|
|
"Noorlim",
|
|
"Norahl",
|
|
"Nordell",
|
|
"Nordran",
|
|
"Norfroib",
|
|
"Norin",
|
|
"Noroj",
|
|
"Norstoj",
|
|
"Novvulse",
|
|
"Noxit",
|
|
"Nrial",
|
|
"Nuad",
|
|
"Nubweft",
|
|
"Nuendo",
|
|
"Nuhar",
|
|
"Nulka",
|
|
"Nulvilch",
|
|
"Nummag",
|
|
"Nurgan",
|
|
"Nurrzek",
|
|
"Nuscolg",
|
|
"Nushla",
|
|
"Nuuzsal",
|
|
"Nuxile",
|
|
"Nuzain",
|
|
"Nyankra",
|
|
"Nyassaed",
|
|
"Nybron",
|
|
"Nyconth",
|
|
"Nydaur",
|
|
"Nyeon",
|
|
"Nylray",
|
|
"Nynaeve",
|
|
"Nyra",
|
|
"Nyren",
|
|
"Nysra",
|
|
"Oaffleg",
|
|
"Oakine",
|
|
"Oalilse",
|
|
"Oalyn",
|
|
"Oarine",
|
|
"Obron",
|
|
"Obtin",
|
|
"Ocarg",
|
|
"Oedjert",
|
|
"Oeglath",
|
|
"Oejos",
|
|
"Oenu",
|
|
"Oerusk",
|
|
"Oggran",
|
|
"Ogmarx",
|
|
"Ogstlang",
|
|
"Ohmir",
|
|
"Ohmoul",
|
|
"Ohrool",
|
|
"Ohwhon",
|
|
"Ohya",
|
|
"Olanc",
|
|
"Olbrod",
|
|
"Olcind",
|
|
"Oldaar",
|
|
"Oldac",
|
|
"Oleird",
|
|
"Olesk",
|
|
"Olgeerd",
|
|
"Olisch",
|
|
"Olix",
|
|
"Olney",
|
|
"Olthang",
|
|
"Oluode",
|
|
"Olvoor",
|
|
"Omag",
|
|
"Omazd",
|
|
"Ombaast",
|
|
"Omdret",
|
|
"Omfelx",
|
|
"Omkraum",
|
|
"Omoq",
|
|
"Omron",
|
|
"Onchorl",
|
|
"Ondar",
|
|
"Onilsh",
|
|
"Oninsp",
|
|
"Onolk",
|
|
"Onvrix",
|
|
"Oonglax",
|
|
"Ooxaith",
|
|
"Opaor",
|
|
"Opchel",
|
|
"Opild",
|
|
"Opmar",
|
|
"Opult",
|
|
"Oqueln",
|
|
"Orasch",
|
|
"Orayl",
|
|
"Orbern",
|
|
"Orbohst",
|
|
"Orbweft",
|
|
"Ordol",
|
|
"Orgoch",
|
|
"Orgrool",
|
|
"Orhomb",
|
|
"Orinde",
|
|
"Orisse",
|
|
"Orix",
|
|
"Orjasp",
|
|
"Orkuuz",
|
|
"Orli",
|
|
"Orlim",
|
|
"Ormdrad",
|
|
"Ormerd",
|
|
"Ormuuz",
|
|
"Ornault",
|
|
"Ornith",
|
|
"Oroon",
|
|
"Orpax",
|
|
"Orrisk",
|
|
"Orsind",
|
|
"Orskog",
|
|
"Ortain",
|
|
"Orthmar",
|
|
"Ortholt",
|
|
"Orthroy",
|
|
"Ortkuz",
|
|
"Orvulse",
|
|
"Orwelt",
|
|
"Orxlorn",
|
|
"Osgleft",
|
|
"Oshraal",
|
|
"Osphel",
|
|
"Ospin",
|
|
"Osresp",
|
|
"Ossiz",
|
|
"Ossvule",
|
|
"Osthandl",
|
|
"Othast",
|
|
"Ottlan",
|
|
"Ovaile",
|
|
"Ovar",
|
|
"Owal",
|
|
"Owelft",
|
|
"Owlin",
|
|
"Ouxroul",
|
|
"Oxdren",
|
|
"Oxiv",
|
|
"Oxoor",
|
|
"Ozur",
|
|
"Padath",
|
|
"Palaor",
|
|
"Palew",
|
|
"Palifte",
|
|
"Palvem",
|
|
"Palzac",
|
|
"Pamar",
|
|
"Paminsk",
|
|
"Panarre",
|
|
"Pancraf",
|
|
"Pandak",
|
|
"Pandire",
|
|
"Paneesh",
|
|
"Pangaz",
|
|
"Paono",
|
|
"Paraerg",
|
|
"Parbha",
|
|
"Pargask",
|
|
"Pargus",
|
|
"Parmist",
|
|
"Parnon",
|
|
"Paroul",
|
|
"Parrsath",
|
|
"Paslaive",
|
|
"Paxilp",
|
|
"Pazot",
|
|
"Peaflod",
|
|
"Pelas",
|
|
"Pelase",
|
|
"Pelcourj",
|
|
"Pellin",
|
|
"Pelnos",
|
|
"Pelvest",
|
|
"Pemnarsc",
|
|
"Pendoir",
|
|
"Pendra",
|
|
"Pengarth",
|
|
"Pengron",
|
|
"Peraule",
|
|
"Percaal",
|
|
"Perdin",
|
|
"Perdis",
|
|
"Perisk",
|
|
"Perlask",
|
|
"Perral",
|
|
"Perreld",
|
|
"Perrinx",
|
|
"Perthald",
|
|
"Perzec",
|
|
"Pevel",
|
|
"Pexul",
|
|
"Pezloch",
|
|
"Phaithor",
|
|
"Phaleg",
|
|
"Phanstern",
|
|
"Phaovonce",
|
|
"Pharan",
|
|
"Phargon",
|
|
"Pharvis",
|
|
"Phatuum",
|
|
"Phayra",
|
|
"Phenquor",
|
|
"Phesjan",
|
|
"Phinerc",
|
|
"Phinna",
|
|
"Phinra",
|
|
"Phislid",
|
|
"Phlomel",
|
|
"Pholgon",
|
|
"Phondath",
|
|
"Phynynx",
|
|
"Phyzent",
|
|
"Pidnubb",
|
|
"Pilark",
|
|
"Pilkarn",
|
|
"Pirkrod",
|
|
"Pittheus",
|
|
"Planget",
|
|
"Plitkin",
|
|
"Pluroign",
|
|
"Pnakord",
|
|
"Poddle",
|
|
"Pohlon",
|
|
"Pohnoor",
|
|
"Poroon",
|
|
"Porsthil",
|
|
"Portlusce",
|
|
"Praamon",
|
|
"Praarin",
|
|
"Prabaar",
|
|
"Pravdile",
|
|
"Pressar",
|
|
"Presta",
|
|
"Pretil",
|
|
"Prilsorn",
|
|
"Pritantte",
|
|
"Pritjan",
|
|
"Prollel",
|
|
"Proter",
|
|
"Prothoon",
|
|
"Psattor",
|
|
"Psirrim",
|
|
"Pteron",
|
|
"Pulaaz",
|
|
"Pulisk",
|
|
"Pumish",
|
|
"Purrdiste",
|
|
"Puuhilsk",
|
|
"Puvas",
|
|
"Pyalvar",
|
|
"Pyra",
|
|
"Pyrafe",
|
|
"Pyreyn",
|
|
"Pyrjus",
|
|
"Pyular",
|
|
"Pyzzim",
|
|
"Qraatin",
|
|
"Quaestrin",
|
|
"Quagel",
|
|
"Quagrith",
|
|
"Qua\xEFve",
|
|
"Quaman",
|
|
"Quamrith",
|
|
"Quanar",
|
|
"Quanthon",
|
|
"Quantra",
|
|
"Quanvire",
|
|
"Quardan",
|
|
"Quargom",
|
|
"Quarnos",
|
|
"Quarouth",
|
|
"Quasha",
|
|
"Queageth",
|
|
"Quedrech",
|
|
"Queeden",
|
|
"Queeyat",
|
|
"Quekal",
|
|
"Quelade",
|
|
"Queldrim",
|
|
"Quelges",
|
|
"Quelneth",
|
|
"Quelthar",
|
|
"Quembras",
|
|
"Quenna",
|
|
"Querkez",
|
|
"Querlo",
|
|
"Queryl",
|
|
"Quesan",
|
|
"Quesparl",
|
|
"Quesrol",
|
|
"Quevros",
|
|
"Queygo",
|
|
"Quiddel",
|
|
"Quidre",
|
|
"Quigmoss",
|
|
"Quilmose",
|
|
"Quinaut",
|
|
"Quindle",
|
|
"Quinga",
|
|
"Quinid",
|
|
"Quintarl",
|
|
"Quirrak",
|
|
"Quirvell",
|
|
"Quisrym",
|
|
"Quizlo",
|
|
"Quolbin",
|
|
"Quondoon",
|
|
"Quuddreus",
|
|
"Quyssa",
|
|
"Raaxis",
|
|
"Raband",
|
|
"Raberm",
|
|
"Rablaen",
|
|
"Rabuur",
|
|
"Raccyx",
|
|
"Racere",
|
|
"Radalt",
|
|
"Raddel",
|
|
"Radeld",
|
|
"Ra\xEBn",
|
|
"Ra\xEBss",
|
|
"Raethel",
|
|
"Raevact",
|
|
"Rafain",
|
|
"Rafam",
|
|
"Rafarn",
|
|
"Rafmarth",
|
|
"Raftwen",
|
|
"Rafur",
|
|
"Ragdra",
|
|
"Ragen",
|
|
"Rago",
|
|
"Rahaz",
|
|
"Raina",
|
|
"Ra\xEFre",
|
|
"Raishauer",
|
|
"Raistlig",
|
|
"Raistoc",
|
|
"Rajan",
|
|
"Rajin",
|
|
"Raju",
|
|
"Rakeeg",
|
|
"Rakhan",
|
|
"Rakhaz",
|
|
"Rakheer",
|
|
"Rakkim",
|
|
"Rakspire",
|
|
"Rakthvi",
|
|
"Ralik",
|
|
"Ralir",
|
|
"Ralise",
|
|
"Ralith",
|
|
"Ralkeev",
|
|
"Ralvord",
|
|
"Ramat",
|
|
"Ramath",
|
|
"Ranax",
|
|
"Randar",
|
|
"Randor",
|
|
"Ranghen",
|
|
"Rangvair",
|
|
"Rani",
|
|
"Ranid",
|
|
"Ranousse",
|
|
"Ranthur",
|
|
"Ran\xFBk",
|
|
"Ranyem",
|
|
"Rascha",
|
|
"Rascrag",
|
|
"Raslak",
|
|
"Rasmoth",
|
|
"Rastagg",
|
|
"Rastak",
|
|
"Ratai",
|
|
"Rater",
|
|
"Rathdome",
|
|
"Rathgor",
|
|
"Rathlede",
|
|
"Rathor",
|
|
"Raudal",
|
|
"Raudell",
|
|
"Ravann",
|
|
"Ravoe",
|
|
"Ravthek",
|
|
"Raxar",
|
|
"Raxen",
|
|
"Razdan",
|
|
"Razdel",
|
|
"Razul",
|
|
"Rebesc",
|
|
"Reddom",
|
|
"Redlac",
|
|
"Redleth",
|
|
"Reeval",
|
|
"Reevast",
|
|
"Regwelf",
|
|
"Relem",
|
|
"Rellskar",
|
|
"Rellzer",
|
|
"Relmnar",
|
|
"Relmund",
|
|
"Relthar",
|
|
"Remerst",
|
|
"Remist",
|
|
"Renair",
|
|
"Rendkett",
|
|
"Rendlorn",
|
|
"Renjik",
|
|
"Renlaw",
|
|
"Renna",
|
|
"Renquil",
|
|
"Resfrith",
|
|
"Reskem",
|
|
"Resna",
|
|
"Ressif",
|
|
"Restid",
|
|
"Retheer",
|
|
"Retor",
|
|
"Retraaj",
|
|
"Reuzor",
|
|
"Revas",
|
|
"Reyga",
|
|
"Reyna",
|
|
"Rezbain",
|
|
"Rezhar",
|
|
"Rhamaine",
|
|
"Rhandain",
|
|
"Rhavee",
|
|
"Rhaxdan",
|
|
"Rhenea",
|
|
"Rheya",
|
|
"Rhila",
|
|
"Rhiorn",
|
|
"Rhobban",
|
|
"Rhodelx",
|
|
"Rhojann",
|
|
"Rhylash",
|
|
"Riaal",
|
|
"Riak",
|
|
"Ribos",
|
|
"Ridun",
|
|
"Ridya",
|
|
"Rience",
|
|
"Rifdos",
|
|
"Rifgild",
|
|
"Rigar",
|
|
"Riklak",
|
|
"Riksul",
|
|
"Rila",
|
|
"Rillif",
|
|
"Rillu",
|
|
"Rilmorn",
|
|
"Rimchoze",
|
|
"Rimnaaj",
|
|
"Rimsall",
|
|
"Ringool",
|
|
"Rinquel",
|
|
"Rinthmaw",
|
|
"Ripurth",
|
|
"Risnys",
|
|
"Ristang",
|
|
"Riswod",
|
|
"Rivalke",
|
|
"Rivarsh",
|
|
"Rivcol",
|
|
"Riveld",
|
|
"Riverle",
|
|
"Rivlin",
|
|
"Rivoold",
|
|
"Rivrook",
|
|
"Rivvid",
|
|
"Rixel",
|
|
"Rixju",
|
|
"Rizhad",
|
|
"Rizzek",
|
|
"Ro\xE4k",
|
|
"Roakey",
|
|
"Roandat",
|
|
"Robforz",
|
|
"Rocaltz",
|
|
"Rodan",
|
|
"Rodhar",
|
|
"Ro\xEBle",
|
|
"Ro\xEBll",
|
|
"Roethord",
|
|
"Rofloef",
|
|
"Rokeel",
|
|
"Rolthar",
|
|
"R\xF6lyat",
|
|
"Rontayn",
|
|
"Roolenth",
|
|
"Roqual",
|
|
"Rorkar",
|
|
"Rothar",
|
|
"Roujat",
|
|
"Roweal",
|
|
"Roxhaast",
|
|
"Royanse",
|
|
"Royskyar",
|
|
"Rubarj",
|
|
"Rubiss",
|
|
"Rudrisk",
|
|
"Ruidh",
|
|
"Rukhjan",
|
|
"Rukuz",
|
|
"Rulbowe",
|
|
"Rulmool",
|
|
"Rumael",
|
|
"Rupaic",
|
|
"Rupsey",
|
|
"Rurik",
|
|
"Rusgar",
|
|
"Rusis",
|
|
"Ruther",
|
|
"Ruusul",
|
|
"Ruvad",
|
|
"Ruwen",
|
|
"Ryalas",
|
|
"Rygarn",
|
|
"Rynell",
|
|
"Rynrys",
|
|
"Rysta",
|
|
"Sabak",
|
|
"Sabal",
|
|
"Sabfane",
|
|
"Sabhel",
|
|
"Sabon",
|
|
"Sabrok",
|
|
"Sador",
|
|
"Sadrouth",
|
|
"Saerdon",
|
|
"Saerulse",
|
|
"Safrence",
|
|
"Safrine",
|
|
"Sagard",
|
|
"Saglamne",
|
|
"Saia",
|
|
"Saihail",
|
|
"Saijax",
|
|
"Salir",
|
|
"Sallese",
|
|
"Samand",
|
|
"Samar",
|
|
"Sambrea",
|
|
"Samler",
|
|
"Sanald",
|
|
"Sanan",
|
|
"Sanar",
|
|
"Sandice",
|
|
"Sangol",
|
|
"Sankor",
|
|
"Sanpalk",
|
|
"Sanrind",
|
|
"Sanrow",
|
|
"Sansal",
|
|
"Santlor",
|
|
"Santrul",
|
|
"Saphyx",
|
|
"Sarbrid",
|
|
"Sarcyn",
|
|
"Sardrum",
|
|
"Sarel",
|
|
"Sarex",
|
|
"Sarfinn",
|
|
"Sargash",
|
|
"Sarik",
|
|
"Sarla",
|
|
"Sarlyn",
|
|
"Sarmuld",
|
|
"Sarnax",
|
|
"Sarode",
|
|
"Saroon",
|
|
"Sarthath",
|
|
"Sarthay",
|
|
"Saruul",
|
|
"Sarvan",
|
|
"Sateer",
|
|
"Sathla",
|
|
"Saudraal",
|
|
"Saugrib",
|
|
"Savak",
|
|
"Savar",
|
|
"Savaunce",
|
|
"Savay",
|
|
"Savot",
|
|
"Savryn",
|
|
"Saxar",
|
|
"Scamire",
|
|
"Scarloth",
|
|
"Scaroth",
|
|
"Scarvlin",
|
|
"Schabith",
|
|
"Scharay",
|
|
"Sclava",
|
|
"Scolath",
|
|
"Scradast",
|
|
"Scrilisp",
|
|
"Searan",
|
|
"Seckba",
|
|
"Sedrim",
|
|
"Seethenn",
|
|
"Segrold",
|
|
"Seheitt",
|
|
"Sejar",
|
|
"Selar",
|
|
"Seldar",
|
|
"Selgren",
|
|
"Selith",
|
|
"Selkind",
|
|
"Selnor",
|
|
"Selris",
|
|
"Selthen",
|
|
"Sember",
|
|
"Sembrith",
|
|
"Semer",
|
|
"Semisk",
|
|
"Sena",
|
|
"Sendrej",
|
|
"Sendure",
|
|
"Sengeld",
|
|
"Senrin",
|
|
"Senther",
|
|
"Sentix",
|
|
"Seonce",
|
|
"Sephrone",
|
|
"Seplacc",
|
|
"Seprism",
|
|
"Seraan",
|
|
"Seranth",
|
|
"Seray",
|
|
"Serdu",
|
|
"Sereste",
|
|
"Serlarc",
|
|
"Sermer",
|
|
"Seroz",
|
|
"Serrof",
|
|
"Serryx",
|
|
"Sersoom",
|
|
"Sertase",
|
|
"Seskel",
|
|
"Sethar",
|
|
"Sethchell",
|
|
"Sethjen",
|
|
"Sethran",
|
|
"Sfa\xEBl",
|
|
"Sfennec",
|
|
"Sferaj",
|
|
"Sforakh",
|
|
"Shabrum",
|
|
"Shadar",
|
|
"Shagold",
|
|
"Shahile",
|
|
"Shaifarl",
|
|
"Shalun",
|
|
"Shalvir",
|
|
"Shamad",
|
|
"Shanfa",
|
|
"Sharaq",
|
|
"Sharaz",
|
|
"Sharrak",
|
|
"Sharrel",
|
|
"Sharva",
|
|
"Sharzik",
|
|
"Shastor",
|
|
"Shathak",
|
|
"Shaxa",
|
|
"Shaydayl",
|
|
"Sheerah",
|
|
"Shembis",
|
|
"Shenesk",
|
|
"Shetrax",
|
|
"Shezael",
|
|
"Shiaf",
|
|
"Shialk",
|
|
"Shila",
|
|
"Shilex",
|
|
"Shimar",
|
|
"Shimglor",
|
|
"Shimren",
|
|
"Shintar",
|
|
"Shirak",
|
|
"Shivan",
|
|
"Shiza",
|
|
"Sholmeg",
|
|
"Shruuminth",
|
|
"Shryffin",
|
|
"Shudleet",
|
|
"Shurik",
|
|
"Shurrug",
|
|
"Shyden",
|
|
"Shylath",
|
|
"Siade",
|
|
"Sibvir",
|
|
"Sidron",
|
|
"Sierl",
|
|
"Sila",
|
|
"Silcharn",
|
|
"Sildeed",
|
|
"Silgast",
|
|
"Silgool",
|
|
"Siljenk",
|
|
"Silmat",
|
|
"Silon",
|
|
"Silphane",
|
|
"Silruum",
|
|
"Silure",
|
|
"Silvasp",
|
|
"Silvryn",
|
|
"Simbrul",
|
|
"Sindhi",
|
|
"Siol",
|
|
"Siralk",
|
|
"Sithirg",
|
|
"Sium",
|
|
"Skaaro",
|
|
"Skagra",
|
|
"Skarazk",
|
|
"Skarloch",
|
|
"Skayla",
|
|
"Skedrea",
|
|
"Skeltrin",
|
|
"Skilon",
|
|
"Skorafe",
|
|
"Skurin",
|
|
"Slanslar",
|
|
"Slanthar",
|
|
"Slarood",
|
|
"Slaskren",
|
|
"Slavgar",
|
|
"Slazor",
|
|
"Sleekla",
|
|
"Sleshkeg",
|
|
"Sleynux",
|
|
"Slijash",
|
|
"Slorac",
|
|
"Slurvaum",
|
|
"Smarag",
|
|
"Smerdis",
|
|
"Smialv",
|
|
"Snargai",
|
|
"Snayrod",
|
|
"Sneitad",
|
|
"Snurlix",
|
|
"Sobeck",
|
|
"Sodarg",
|
|
"Solael",
|
|
"Solbar",
|
|
"Soldine",
|
|
"Solis",
|
|
"Solohe",
|
|
"Solok",
|
|
"Solos",
|
|
"Soltar",
|
|
"Sombrid",
|
|
"Sophald",
|
|
"Sorak",
|
|
"Sorgas",
|
|
"Sormtor",
|
|
"Sorquoon",
|
|
"Sorren",
|
|
"Sorven",
|
|
"Sorza",
|
|
"Sotar",
|
|
"Soveh",
|
|
"Soydil",
|
|
"Spalant",
|
|
"Spandrell",
|
|
"Sparveld",
|
|
"Sperax",
|
|
"Spereld",
|
|
"Spirach",
|
|
"Splinvek",
|
|
"Sprimaine",
|
|
"Squamgreve",
|
|
"Srajsken",
|
|
"Sraknis",
|
|
"Sramine",
|
|
"Srebold",
|
|
"Sreeva",
|
|
"Srendix",
|
|
"Srennant",
|
|
"Sriddoth",
|
|
"Sroika",
|
|
"Sroweb",
|
|
"Sryxla",
|
|
"Stajesce",
|
|
"Stalfess",
|
|
"Starklyn",
|
|
"Staygus",
|
|
"Steeglorn",
|
|
"Stengos",
|
|
"Stereth",
|
|
"Steylin",
|
|
"Sthygron",
|
|
"Stielle",
|
|
"Stirgan",
|
|
"Stornrafe",
|
|
"Strakhan",
|
|
"Strakkar",
|
|
"Streggen",
|
|
"Struquil",
|
|
"Stryast",
|
|
"Strylax",
|
|
"Subreen",
|
|
"Suggner",
|
|
"Sujaim",
|
|
"Sulgra",
|
|
"Sulji",
|
|
"Sulmsy",
|
|
"Sulnseir",
|
|
"Sundoth",
|
|
"Sunjeade",
|
|
"Surast",
|
|
"Surigg",
|
|
"Surjan",
|
|
"Surpy",
|
|
"Susstark",
|
|
"Susteelk",
|
|
"Susur",
|
|
"Sutekh",
|
|
"Suukeeg",
|
|
"Suulkas",
|
|
"Suunall",
|
|
"Suvael",
|
|
"Suvrin",
|
|
"Svringal",
|
|
"Swarflig",
|
|
"Swarro",
|
|
"Swendril",
|
|
"Swiez",
|
|
"Syanor",
|
|
"Sybra",
|
|
"Sylfrix",
|
|
"Sylvine",
|
|
"Sylvyn",
|
|
"Symnar",
|
|
"Syphtar",
|
|
"Syrag",
|
|
"Syran",
|
|
"Syssahz",
|
|
"Syzaash",
|
|
"Taarna",
|
|
"Tabrind",
|
|
"Tachel",
|
|
"Tacrine",
|
|
"Tadra",
|
|
"Taedel",
|
|
"Taennyn",
|
|
"Taeral",
|
|
"Taeya",
|
|
"Tagor",
|
|
"Taher",
|
|
"Tahrjun",
|
|
"Taiwine",
|
|
"Talanth",
|
|
"Talar",
|
|
"Taldar",
|
|
"Taleeg",
|
|
"Taled",
|
|
"Talesm",
|
|
"Talgan",
|
|
"Talgraine",
|
|
"Talgyr",
|
|
"Talisk",
|
|
"Talith",
|
|
"Talor",
|
|
"Talthran",
|
|
"Talune",
|
|
"Talven",
|
|
"Talver",
|
|
"Tamar",
|
|
"Tamnuz",
|
|
"Tamone",
|
|
"Tamoorn",
|
|
"Tamriss",
|
|
"Tanchilt",
|
|
"Tandro",
|
|
"Tanha",
|
|
"Tanisk",
|
|
"Tanlin",
|
|
"Tanndo",
|
|
"Tanoor",
|
|
"Tanry",
|
|
"Tan\xFBr",
|
|
"Tanzel",
|
|
"Tanzlor",
|
|
"Taosar",
|
|
"Taoyot",
|
|
"Taran",
|
|
"Tarath",
|
|
"Tarax",
|
|
"Tarcen",
|
|
"Tareth",
|
|
"Tarik",
|
|
"Tarin",
|
|
"Tarisk",
|
|
"Tarith",
|
|
"Tarkand",
|
|
"Tarkrog",
|
|
"Tarlmar",
|
|
"Tarnor",
|
|
"Taron",
|
|
"Taroyn",
|
|
"Tarqu",
|
|
"Tarxas",
|
|
"Tasharg",
|
|
"Tashforn",
|
|
"Tashlex",
|
|
"Tashu",
|
|
"Tashuul",
|
|
"Tasrak",
|
|
"Tasselt",
|
|
"Tasvoor",
|
|
"Taulin",
|
|
"Taval",
|
|
"Tavan",
|
|
"Tavon",
|
|
"Taxlon",
|
|
"Tayerl",
|
|
"Taylin",
|
|
"Tayrsil",
|
|
"Tazen",
|
|
"Tazine",
|
|
"Tchasko",
|
|
"Tealryn",
|
|
"Teawar",
|
|
"Tebish",
|
|
"Tedra",
|
|
"Teekah",
|
|
"Teekug",
|
|
"Teerlin",
|
|
"Tefaz",
|
|
"Tefleer",
|
|
"Tegan",
|
|
"Tegglyn",
|
|
"Tegoth",
|
|
"Teiresh",
|
|
"Teirna",
|
|
"Telaer",
|
|
"Telast",
|
|
"Telcarn",
|
|
"Telett",
|
|
"Telglas",
|
|
"Telgrest",
|
|
"Telkarr",
|
|
"Tellan",
|
|
"Telnar",
|
|
"Telnoom",
|
|
"Telsar",
|
|
"Telva",
|
|
"Telzley",
|
|
"Temorg",
|
|
"Tempros",
|
|
"Tened",
|
|
"Tenelle",
|
|
"Tenjal",
|
|
"Tenlor",
|
|
"Tenna",
|
|
"Tensfar",
|
|
"Tentil",
|
|
"Teode",
|
|
"Terare",
|
|
"Terglaw",
|
|
"Tergon",
|
|
"Terlkin",
|
|
"Terlyn",
|
|
"Ternasse",
|
|
"Terragg",
|
|
"Terris",
|
|
"Tershar",
|
|
"Terslond",
|
|
"Tesin",
|
|
"Teslan",
|
|
"Tevrin",
|
|
"Teyvrilt",
|
|
"Thabou",
|
|
"Thadrum",
|
|
"Thaiduk",
|
|
"Thaki",
|
|
"Thalarn",
|
|
"Thalax",
|
|
"Thaldok",
|
|
"Thamin",
|
|
"Thandart",
|
|
"Thandrov",
|
|
"Thandusc",
|
|
"Thangor",
|
|
"Tharbad",
|
|
"Tharbolt",
|
|
"Tharij",
|
|
"Tharis",
|
|
"Tharjun",
|
|
"Tharkesh",
|
|
"Tharquist",
|
|
"Tharsna",
|
|
"Tharxac",
|
|
"Thaskam",
|
|
"Thaval",
|
|
"Thavarl",
|
|
"Thawlton",
|
|
"Thaxid",
|
|
"Thaxis",
|
|
"Thaxmool",
|
|
"Thaxnar",
|
|
"Thayvudd",
|
|
"Theandra",
|
|
"Thebek",
|
|
"Thelbor",
|
|
"Theleb",
|
|
"Thelin",
|
|
"Thelred",
|
|
"Themnon",
|
|
"Theras",
|
|
"Therbur",
|
|
"Therrak",
|
|
"Therras",
|
|
"Therrat",
|
|
"Thervoh",
|
|
"Thesi",
|
|
"Thesstor",
|
|
"Thibkern",
|
|
"Thimmoz",
|
|
"Thinhla",
|
|
"Thiob",
|
|
"Thios",
|
|
"Thirlain",
|
|
"Thirrild",
|
|
"Thomilt",
|
|
"Thondrac",
|
|
"Thorgeir",
|
|
"Thornix",
|
|
"Thorskal",
|
|
"Thorztar",
|
|
"Thorzyl",
|
|
"Thoskold",
|
|
"Thoye",
|
|
"Thranor",
|
|
"Thraxil",
|
|
"Thremek",
|
|
"Thremix",
|
|
"Thrindish",
|
|
"Thrinyr",
|
|
"Thrykar",
|
|
"Thryxeer",
|
|
"Thugar",
|
|
"Thuldudge",
|
|
"Thulsa",
|
|
"Thurdis",
|
|
"Thuvgalt",
|
|
"Thyra",
|
|
"Thyzlont",
|
|
"Tiaft",
|
|
"Tiak",
|
|
"Tian",
|
|
"Ticham",
|
|
"Tiffrod",
|
|
"Tihan",
|
|
"Tika",
|
|
"Tilal",
|
|
"Tilir",
|
|
"Timaas",
|
|
"Timak",
|
|
"Timdos",
|
|
"Tira",
|
|
"Tiralle",
|
|
"Tirhthri",
|
|
"Tirkan",
|
|
"Tirnor",
|
|
"Tirouv",
|
|
"Tirvil",
|
|
"Tislim",
|
|
"Tisreth",
|
|
"Tisseth",
|
|
"Tithesb",
|
|
"Tivaln",
|
|
"Tlembic",
|
|
"Tlichgo",
|
|
"Tlishat",
|
|
"Tobar",
|
|
"Todyc",
|
|
"Toglank",
|
|
"Tokath",
|
|
"Tokkreft",
|
|
"Tokraz",
|
|
"Tolgarm",
|
|
"Toma",
|
|
"Tonom",
|
|
"Torak",
|
|
"Torang",
|
|
"Torbelt",
|
|
"Torbold",
|
|
"Torden",
|
|
"Toreth",
|
|
"Torghai",
|
|
"Tormir",
|
|
"Torsund",
|
|
"Torthar",
|
|
"Torvin",
|
|
"Torxar",
|
|
"Toscrah",
|
|
"Tourrhok",
|
|
"Tovak",
|
|
"Tovis",
|
|
"Toxathe",
|
|
"Tozjroch",
|
|
"Traalyr",
|
|
"Traken",
|
|
"Tramorn",
|
|
"Trantain",
|
|
"Trantle",
|
|
"Trasven",
|
|
"Travech",
|
|
"Trazom",
|
|
"Tredek",
|
|
"Treeplin",
|
|
"Treffaun",
|
|
"Trefoin",
|
|
"Treizeng",
|
|
"Tremas",
|
|
"Treof",
|
|
"Treslont",
|
|
"Tressak",
|
|
"Trevarq",
|
|
"Trevul",
|
|
"Tricoj",
|
|
"Tridusk",
|
|
"Trilinn",
|
|
"Trisgil",
|
|
"Tristak",
|
|
"Trithax",
|
|
"Triveark",
|
|
"Trizdoth",
|
|
"Troiom",
|
|
"Tromest",
|
|
"Tronvel",
|
|
"Troulden",
|
|
"Trujko",
|
|
"Tsarlit",
|
|
"Tsavan",
|
|
"Tsodjan",
|
|
"Tsojwar",
|
|
"Tsorak",
|
|
"Tuane",
|
|
"Tuchror",
|
|
"Tudlech",
|
|
"Tuezinth",
|
|
"Tugan",
|
|
"Tulkas",
|
|
"Tulsoorm",
|
|
"Tuntix",
|
|
"Turan",
|
|
"Turmasc",
|
|
"Turmis",
|
|
"Turvoost",
|
|
"Turweld",
|
|
"Turzeal",
|
|
"Tuuraj",
|
|
"Tvejasp",
|
|
"Twenja",
|
|
"Twinaile",
|
|
"Twixtib",
|
|
"Tyasaj",
|
|
"Tydwyk",
|
|
"Tylark",
|
|
"Tylith",
|
|
"Tylnen",
|
|
"Tymarl",
|
|
"Tymdrak",
|
|
"Tyrbast",
|
|
"Tyrdon",
|
|
"Tyreen",
|
|
"Tyrgyre",
|
|
"Tyrinx",
|
|
"Tyrlon",
|
|
"Tyrum",
|
|
"Tzichrism",
|
|
"Tzilen",
|
|
"Tziphrin",
|
|
"Udraam",
|
|
"Ufang",
|
|
"Ufoin",
|
|
"Ulak",
|
|
"Ulfade",
|
|
"Ullfrax",
|
|
"Ulli",
|
|
"Ulmyst",
|
|
"Ulos",
|
|
"Ulphar",
|
|
"Ulsplasm",
|
|
"Umbrask",
|
|
"Umbresk",
|
|
"Umchor",
|
|
"Umleer",
|
|
"Ummice",
|
|
"Undreet",
|
|
"Unfegg",
|
|
"Ungax",
|
|
"Unstric",
|
|
"Unstrix",
|
|
"Untveld",
|
|
"Unza",
|
|
"Uqbar",
|
|
"Urdaa",
|
|
"Urdain",
|
|
"Urdal",
|
|
"Urdryce",
|
|
"Urlyn",
|
|
"Urrind",
|
|
"Urthryn",
|
|
"Urtond",
|
|
"Urwoon",
|
|
"Urzvir",
|
|
"Ushnee",
|
|
"Usquik",
|
|
"Ussart",
|
|
"Ussfaal",
|
|
"Ussit",
|
|
"Usstrilt",
|
|
"Ustar",
|
|
"Ustiln",
|
|
"Ustlin",
|
|
"Ustor",
|
|
"Ustorne",
|
|
"Ustrelm",
|
|
"Usxald",
|
|
"Uthmal",
|
|
"Uthnor",
|
|
"Uvorne",
|
|
"Uzfron",
|
|
"Uztum",
|
|
"Vacla",
|
|
"Vadein",
|
|
"Vadrelj",
|
|
"Vadri",
|
|
"Vadru",
|
|
"Vaeddyn",
|
|
"Vaelythe",
|
|
"Va\xEBrn",
|
|
"Vagar",
|
|
"Vaigthlu",
|
|
"Vaitarr",
|
|
"Valan",
|
|
"Valaz",
|
|
"Valbard",
|
|
"Valek",
|
|
"Valen",
|
|
"Valeth",
|
|
"Valgaard",
|
|
"Valgar",
|
|
"Valgarv",
|
|
"Valka",
|
|
"Valkarth",
|
|
"Valken",
|
|
"Valkesh",
|
|
"Valkis",
|
|
"Valkyr",
|
|
"Valmisce",
|
|
"Valreque",
|
|
"Valtarb",
|
|
"Valthoth",
|
|
"Valyn",
|
|
"Vamert",
|
|
"Vamfade",
|
|
"Vanache",
|
|
"Vanek",
|
|
"Vanger",
|
|
"Vannak",
|
|
"Vannyn",
|
|
"Vanra",
|
|
"Vantsled",
|
|
"Vanyar",
|
|
"Vaona",
|
|
"Varat",
|
|
"Varda",
|
|
"Vareth",
|
|
"Varga",
|
|
"Varka",
|
|
"Varlik",
|
|
"Varmon",
|
|
"Varmyr",
|
|
"Varna",
|
|
"Varnac",
|
|
"Varnar",
|
|
"Varnax",
|
|
"Varnaz",
|
|
"Varos",
|
|
"Varrow",
|
|
"Varsta",
|
|
"Vartoor",
|
|
"Vasaav",
|
|
"Vascais",
|
|
"Vasrind",
|
|
"Vathan",
|
|
"Vathar",
|
|
"Vathek",
|
|
"Vaudric",
|
|
"Vayas",
|
|
"Vaydir",
|
|
"Vayi",
|
|
"Vazar",
|
|
"Vazdo",
|
|
"Ve\xE4xe",
|
|
"Veena",
|
|
"Vegreth",
|
|
"Vekil",
|
|
"Velaunce",
|
|
"Veldan",
|
|
"Veldin",
|
|
"Velex",
|
|
"Velkind",
|
|
"Velnard",
|
|
"Velsant",
|
|
"Velsard",
|
|
"Velsin",
|
|
"Vembrex",
|
|
"Venast",
|
|
"Vendik",
|
|
"Vengkuld",
|
|
"Venklar",
|
|
"Vennec",
|
|
"Vennsor",
|
|
"Venscoth",
|
|
"Ventorl",
|
|
"Venzra",
|
|
"Veor",
|
|
"Verek",
|
|
"Verisse",
|
|
"Verla",
|
|
"Verlis",
|
|
"Vernar",
|
|
"Vernat",
|
|
"Vernil",
|
|
"Veror",
|
|
"Verren",
|
|
"Vertence",
|
|
"Vervitz",
|
|
"Verwantz",
|
|
"Verxain",
|
|
"Verzod",
|
|
"Veskin",
|
|
"Veswinch",
|
|
"Veyen",
|
|
"Vherla",
|
|
"Viaxx",
|
|
"Vibsoom",
|
|
"Vibur",
|
|
"Vilgrax",
|
|
"Vilraj",
|
|
"Vilsa",
|
|
"Vilthod",
|
|
"Viltor",
|
|
"Viltorc",
|
|
"Vingverd",
|
|
"Virainth",
|
|
"Viran",
|
|
"Virdla",
|
|
"Viscanth",
|
|
"Visharn",
|
|
"Viskrek",
|
|
"Vissir",
|
|
"Vistar",
|
|
"Vistarl",
|
|
"Vithmard",
|
|
"Viux",
|
|
"Vixa",
|
|
"Vixai",
|
|
"Vixlim",
|
|
"Vlastov",
|
|
"Vlitchek",
|
|
"Vluisc",
|
|
"Vlustra",
|
|
"Volcilde",
|
|
"Voldor",
|
|
"Volnir",
|
|
"Vomquind",
|
|
"Vonir",
|
|
"Voozale",
|
|
"Vordnaz",
|
|
"Vorgan",
|
|
"Vorplen",
|
|
"Vorrmor",
|
|
"Vorshak",
|
|
"Vortice",
|
|
"Vosklune",
|
|
"Votorn",
|
|
"Votrax",
|
|
"Voxarl",
|
|
"Vozkoog",
|
|
"Vratund",
|
|
"Vreeleth",
|
|
"Vregom",
|
|
"Vrithon",
|
|
"Vrumtuun",
|
|
"Vryxnir",
|
|
"Vuespra",
|
|
"Vuestri",
|
|
"Vulpix",
|
|
"Vuranc",
|
|
"Vurick",
|
|
"Vurog",
|
|
"Vuron",
|
|
"Vuubul",
|
|
"Vynda",
|
|
"Vyrnael",
|
|
"Vywyn",
|
|
"Vzoris",
|
|
"Wadziq",
|
|
"Waeytef",
|
|
"Wairbren",
|
|
"Walgwim",
|
|
"Wallibt",
|
|
"Walscrin",
|
|
"Wanelj",
|
|
"Wanjok",
|
|
"Wannach",
|
|
"Wanruum",
|
|
"Wanthim",
|
|
"Warbosk",
|
|
"Warell",
|
|
"Warisk",
|
|
"Warthan",
|
|
"Waryn",
|
|
"Wastur",
|
|
"Waylra",
|
|
"Waznak",
|
|
"Weardlon",
|
|
"Wedjeeg",
|
|
"Wedra",
|
|
"Weftig",
|
|
"Weftorb",
|
|
"Weitvan",
|
|
"Welfrede",
|
|
"Welmek",
|
|
"Welndar",
|
|
"Wemsin",
|
|
"Wendath",
|
|
"Weppel",
|
|
"Werclam",
|
|
"Werin",
|
|
"Weshap",
|
|
"Weskin",
|
|
"Westra",
|
|
"Wevkinz",
|
|
"Wextri",
|
|
"Whilfig",
|
|
"Whilmor",
|
|
"Wicrore",
|
|
"Wileert",
|
|
"Wilnim",
|
|
"Wilven",
|
|
"Wilzech",
|
|
"Wirreth",
|
|
"Wirzanth",
|
|
"Wistril",
|
|
"Witrix",
|
|
"Witrost",
|
|
"Wizlow",
|
|
"Wolcharn",
|
|
"Wolkoon",
|
|
"Wolnihr",
|
|
"Worlit",
|
|
"Wraxil",
|
|
"Wrybeck",
|
|
"Wryplax",
|
|
"Wryxerg",
|
|
"Wubneft",
|
|
"Wulfrit",
|
|
"Wurflense",
|
|
"Wusheig",
|
|
"Wuunal",
|
|
"Wuxorn",
|
|
"Wychnor",
|
|
"Wylvin",
|
|
"Wyndbrel",
|
|
"Wyndra",
|
|
"Wyrgon",
|
|
"Wyrsis",
|
|
"Wysholt",
|
|
"Wyvrax",
|
|
"Wyxef",
|
|
"Xadair",
|
|
"Xaedra",
|
|
"Xaelinth",
|
|
"Xaharl",
|
|
"Xaidis",
|
|
"Xaitchek",
|
|
"Xaldreth",
|
|
"Xalkhas",
|
|
"Xalla",
|
|
"Xallath",
|
|
"Xameld",
|
|
"Xanax",
|
|
"Xanbarg",
|
|
"Xandar",
|
|
"Xandrix",
|
|
"Xanille",
|
|
"Xanna",
|
|
"Xanos",
|
|
"Xanrei",
|
|
"Xanthon",
|
|
"Xarafe",
|
|
"Xarakh",
|
|
"Xarek",
|
|
"Xasim",
|
|
"Xaudrin",
|
|
"Xavest",
|
|
"Xavin",
|
|
"Xawnis",
|
|
"Xaxul",
|
|
"Xayide",
|
|
"Xeebract",
|
|
"Xeerha",
|
|
"Xejem",
|
|
"Xela",
|
|
"Xeldon",
|
|
"Xellosp",
|
|
"Xenerge",
|
|
"Xenir",
|
|
"Xephar",
|
|
"Xerra",
|
|
"Xerxisp",
|
|
"Xerys",
|
|
"Xexal",
|
|
"Xhagrim",
|
|
"Xhaibar",
|
|
"Xhomdroll",
|
|
"Xhorald",
|
|
"Xigil",
|
|
"Xion",
|
|
"Xiplin",
|
|
"Xiri",
|
|
"Xirrip",
|
|
"Xloris",
|
|
"Xoncarg",
|
|
"Xopon",
|
|
"Xoris",
|
|
"Xormeer",
|
|
"Xothun",
|
|
"Xovro",
|
|
"Xudeet",
|
|
"Xulan",
|
|
"Xundrahl",
|
|
"Xustral",
|
|
"Xy\xE1s",
|
|
"Xy\xE1st",
|
|
"Xybeuth",
|
|
"Xycort",
|
|
"Xydorn",
|
|
"Xydra",
|
|
"Xygbenth",
|
|
"Xyhaek",
|
|
"Xykrog",
|
|
"Xylance",
|
|
"Xylarz",
|
|
"Xylvorm",
|
|
"Xymoyl",
|
|
"Xytrin",
|
|
"Yaalder",
|
|
"Yaathab",
|
|
"Yadarl",
|
|
"Yaddith",
|
|
"Yadel",
|
|
"Yadreth",
|
|
"Yadurk",
|
|
"Yaglaid",
|
|
"Yagmoon",
|
|
"Yaklar",
|
|
"Yaklin",
|
|
"Yako",
|
|
"Yakthoob",
|
|
"Yammoth",
|
|
"Yamphut",
|
|
"Yandorn",
|
|
"Ya\xF6th",
|
|
"Yarat",
|
|
"Yarel",
|
|
"Yari",
|
|
"Yarin",
|
|
"Yarnis",
|
|
"Yarram",
|
|
"Yastoz",
|
|
"Yaten",
|
|
"Yatheg",
|
|
"Yavarre",
|
|
"Yavood",
|
|
"Yavroun",
|
|
"Yazlar",
|
|
"Ycore",
|
|
"Yeafosk",
|
|
"Yeifolk",
|
|
"Yeldoj",
|
|
"Yeldrai",
|
|
"Yeoft",
|
|
"Yeoun",
|
|
"Yerdeen",
|
|
"Yergal",
|
|
"Yerkel",
|
|
"Yernoold",
|
|
"Yethler",
|
|
"Yewrapt",
|
|
"Yexil",
|
|
"Yezrik",
|
|
"Yhemnis",
|
|
"Yhemog",
|
|
"Yhoudeh",
|
|
"Yiash",
|
|
"Yildiz",
|
|
"Yilkeyr",
|
|
"Yimzuuem",
|
|
"Yinaun",
|
|
"Yiod",
|
|
"Yirod",
|
|
"Yivthi",
|
|
"Ymar",
|
|
"Ymarl",
|
|
"Yodkin",
|
|
"Yojra",
|
|
"Yombris",
|
|
"Yoorzamph",
|
|
"Yoppulse",
|
|
"Yorim",
|
|
"Yorlask",
|
|
"Yorrak",
|
|
"Yoskan",
|
|
"Yosneth",
|
|
"Yothir",
|
|
"Yottoa",
|
|
"Yrdirr",
|
|
"Yrgash",
|
|
"Yrgil",
|
|
"Yrinth",
|
|
"Yrlmar",
|
|
"Yrvoor",
|
|
"Yuklat",
|
|
"Yuleng",
|
|
"Yurisp",
|
|
"Yuvib",
|
|
"Yuzan",
|
|
"Yween",
|
|
"Zaalit",
|
|
"Zabal",
|
|
"Zabil",
|
|
"Zadko",
|
|
"Zadom",
|
|
"Zadool",
|
|
"Zaelken",
|
|
"Zaery",
|
|
"Zaffar",
|
|
"Zagrosk",
|
|
"Zahur",
|
|
"Zaihra",
|
|
"Zalethe",
|
|
"Zalmic",
|
|
"Zalthen",
|
|
"Zamar",
|
|
"Zamewl",
|
|
"Zamind",
|
|
"Zamog",
|
|
"Zamray",
|
|
"Zanak",
|
|
"Zaneer",
|
|
"Zangor",
|
|
"Zanqua",
|
|
"Zantain",
|
|
"Zanthu",
|
|
"Zantir",
|
|
"Zantyen",
|
|
"Zanurb",
|
|
"Zarak",
|
|
"Zaranthe",
|
|
"Zardal",
|
|
"Zardence",
|
|
"Zardirm",
|
|
"Zardox",
|
|
"Zargoi",
|
|
"Zaric",
|
|
"Zarlon",
|
|
"Zarmarl",
|
|
"Zarouk",
|
|
"Zarphaut",
|
|
"Zarquar",
|
|
"Zarquemf",
|
|
"Zarros",
|
|
"Zarthule",
|
|
"Zastor",
|
|
"Zatarl",
|
|
"Zatheen",
|
|
"Zathras",
|
|
"Zathu",
|
|
"Zatoum",
|
|
"Zausric",
|
|
"Zavach",
|
|
"Zavak",
|
|
"Zavel",
|
|
"Zaviv",
|
|
"Zaxweer",
|
|
"Zayarn",
|
|
"Zaydrim",
|
|
"Zebor",
|
|
"Zebulse",
|
|
"Zedresk",
|
|
"Zefteel",
|
|
"Zehain",
|
|
"Zehirn",
|
|
"Zekal",
|
|
"Zeldaph",
|
|
"Zelgad",
|
|
"Zelgen",
|
|
"Zelisp",
|
|
"Zelked",
|
|
"Zelmarth",
|
|
"Zelminx",
|
|
"Zelvant",
|
|
"Zembis",
|
|
"Zendarg",
|
|
"Zentos",
|
|
"Zeraa",
|
|
"Zerai",
|
|
"Zerakl",
|
|
"Zermish",
|
|
"Zerric",
|
|
"Zervid",
|
|
"Zesdick",
|
|
"Zessain",
|
|
"Zethrel",
|
|
"Zhaizald",
|
|
"Zhakoor",
|
|
"Zhalore",
|
|
"Zhantaine",
|
|
"Zhapris",
|
|
"Zharmele",
|
|
"Zharvek",
|
|
"Zhassa",
|
|
"Zhawend",
|
|
"Zhaya",
|
|
"Zheral",
|
|
"Zhirek",
|
|
"Zhirem",
|
|
"Zhiroq",
|
|
"Zhirquis",
|
|
"Zhogri",
|
|
"Zhomrach",
|
|
"Zhoreb",
|
|
"Zhrana",
|
|
"Zigmoth",
|
|
"Zikuyth",
|
|
"Zilar",
|
|
"Zilmork",
|
|
"Zincir",
|
|
"Zindor",
|
|
"Ziorn",
|
|
"Zirin",
|
|
"Zishuun",
|
|
"Zislun",
|
|
"Zisurgh",
|
|
"Zlant\xE9",
|
|
"Zlatos",
|
|
"Zofram",
|
|
"Zoides",
|
|
"Zojan",
|
|
"Zohldrom",
|
|
"Zolfran",
|
|
"Zoltaft",
|
|
"Zomra",
|
|
"Zondar",
|
|
"Zoorkon",
|
|
"Zopine",
|
|
"Zorac",
|
|
"Zorith",
|
|
"Zorlan",
|
|
"Zorthal",
|
|
"Zosarde",
|
|
"Zrufend",
|
|
"Zugdin",
|
|
"Zugoth",
|
|
"Zuril",
|
|
"Zusdhrun",
|
|
"Zuukan",
|
|
"Zvegnaz",
|
|
"Zyjin",
|
|
"Zyla",
|
|
"Zylaax",
|
|
"Zylyn",
|
|
"Zyrel",
|
|
"Zyrelx",
|
|
"Zytan",
|
|
"Zyxim"
|
|
],
|
|
three: [
|
|
"Aathoklaa",
|
|
"Abalore",
|
|
"Abeli",
|
|
"Abreyxorn",
|
|
"Abrisen",
|
|
"Acaena",
|
|
"Acamar",
|
|
"Acarnod",
|
|
"Ackia",
|
|
"Acozer",
|
|
"Acravel",
|
|
"Actinor",
|
|
"Adalon",
|
|
"Adalrik",
|
|
"Adanac",
|
|
"Adasho",
|
|
"Adelin",
|
|
"Adelir",
|
|
"Adembal",
|
|
"Aderak",
|
|
"Aderel",
|
|
"Aderyn",
|
|
"Adhara",
|
|
"Adhirman",
|
|
"Adia",
|
|
"Adian",
|
|
"Adiol",
|
|
"Aditu",
|
|
"Adlaron",
|
|
"Admarlen",
|
|
"Adnirrin",
|
|
"Adnoren",
|
|
"Adracea",
|
|
"Adraeran",
|
|
"Adraewyth",
|
|
"Adrasta",
|
|
"Adrena",
|
|
"Adriphaas",
|
|
"Aelarim",
|
|
"Aerissa",
|
|
"Aeruin",
|
|
"Aetharyn",
|
|
"Aexien",
|
|
"Afaellan",
|
|
"Agador",
|
|
"Agaki",
|
|
"Agari",
|
|
"Agella",
|
|
"Agerquon",
|
|
"Agetan",
|
|
"Agexa",
|
|
"Aginor",
|
|
"Agior",
|
|
"Agnaska",
|
|
"Agraia",
|
|
"Agrasline",
|
|
"Agrasol",
|
|
"Agrias",
|
|
"Agristair",
|
|
"Ahina",
|
|
"Ahorra",
|
|
"Aidaron",
|
|
"Aililry",
|
|
"Ainnatic",
|
|
"Aioula",
|
|
"Aircristir",
|
|
"Aistomar",
|
|
"Ajasonde",
|
|
"Akajur",
|
|
"Akashic",
|
|
"Akasta",
|
|
"Akenchi",
|
|
"Akhrida",
|
|
"Akiina",
|
|
"Akirga",
|
|
"Akirku",
|
|
"Akritas",
|
|
"Akura",
|
|
"Akvaron",
|
|
"Alamak",
|
|
"Alanik",
|
|
"Alanyx",
|
|
"Alardan",
|
|
"Alaris",
|
|
"Alarynd",
|
|
"Alathen",
|
|
"Alatvair",
|
|
"Alaxa",
|
|
"Alaztyr",
|
|
"Albara",
|
|
"Albaral",
|
|
"Alberist",
|
|
"Alberon",
|
|
"Alceon",
|
|
"Alceor",
|
|
"Alchica",
|
|
"Aldachur",
|
|
"Aldaka",
|
|
"Aldamir",
|
|
"Aldirim",
|
|
"Aldrella",
|
|
"Aleasna",
|
|
"Aleaxa",
|
|
"Aleena",
|
|
"Aleidar",
|
|
"Alembis",
|
|
"Alera",
|
|
"Aleva",
|
|
"Alfanar",
|
|
"Alhana",
|
|
"Alidar",
|
|
"Aliet",
|
|
"Alifyan",
|
|
"Alinaeus",
|
|
"Alindra",
|
|
"Alixa",
|
|
"Aljarik",
|
|
"Alkaios",
|
|
"Allindren",
|
|
"Allomir",
|
|
"Alloran",
|
|
"Almarisc",
|
|
"Almeron",
|
|
"Almiel",
|
|
"Alnavor",
|
|
"Alshagrel",
|
|
"Altavan",
|
|
"Altorlan",
|
|
"Altria",
|
|
"Alucard",
|
|
"Alzamar",
|
|
"Alzarin",
|
|
"Amadis",
|
|
"Amadix",
|
|
"Amafer",
|
|
"Amaja",
|
|
"Amakelb",
|
|
"Amanster",
|
|
"Amaremne",
|
|
"Amarette",
|
|
"Amatin",
|
|
"Amazya",
|
|
"Ambrezul",
|
|
"Amelis",
|
|
"Amerill",
|
|
"Amether",
|
|
"Amethi",
|
|
"Amharad",
|
|
"Amilin",
|
|
"Aminak",
|
|
"Amintor",
|
|
"Amlieth",
|
|
"Amolithe",
|
|
"Amorin",
|
|
"Ampenden",
|
|
"Amramyr",
|
|
"Anandra",
|
|
"Anara",
|
|
"Anartig",
|
|
"Anashea",
|
|
"Anatsath",
|
|
"Ancelyn",
|
|
"Ancifer",
|
|
"Andaraan",
|
|
"Andistair",
|
|
"Andolan",
|
|
"Andrasha",
|
|
"Andula",
|
|
"Aneelen",
|
|
"Anfara",
|
|
"Anferas",
|
|
"Anfesef",
|
|
"Angalli",
|
|
"Angemon",
|
|
"Anghyrud",
|
|
"Anhalus",
|
|
"Anici",
|
|
"Anina",
|
|
"Ankrista",
|
|
"Annoxin",
|
|
"Anraculd",
|
|
"Anroana",
|
|
"Ansivlan",
|
|
"Ansuki",
|
|
"Antalyaar",
|
|
"Antarlest",
|
|
"Anterra",
|
|
"Antesri",
|
|
"Anthlamar",
|
|
"Antraneyk",
|
|
"Anzera",
|
|
"Apelnin",
|
|
"Aphithea",
|
|
"Apporrosh",
|
|
"Aquiel",
|
|
"Aquorren",
|
|
"Aradek",
|
|
"Aragaj",
|
|
"Araglas",
|
|
"Arajist",
|
|
"Arakbaal",
|
|
"Arakhreen",
|
|
"Arakin",
|
|
"Araldar",
|
|
"Aralik",
|
|
"Aramil",
|
|
"Aranat",
|
|
"Aranis",
|
|
"Arathorb",
|
|
"Araxis",
|
|
"Arbadrul",
|
|
"Arbalac",
|
|
"Arbalon",
|
|
"Arbitan",
|
|
"Arboran",
|
|
"Arcastor",
|
|
"Archolach",
|
|
"Ardalanx",
|
|
"Ardanos",
|
|
"Ardatha",
|
|
"Ardaxil",
|
|
"Ardelin",
|
|
"Ardilex",
|
|
"Ardiseng",
|
|
"Ardissa",
|
|
"Aregel",
|
|
"Arenith",
|
|
"Arestel",
|
|
"Arfandas",
|
|
"Argethlam",
|
|
"Arghesos",
|
|
"Argion",
|
|
"Argo\xEBl",
|
|
"Argolin",
|
|
"Arhanen",
|
|
"Ariann",
|
|
"Arianth",
|
|
"Aribeth",
|
|
"Arien",
|
|
"Arion",
|
|
"Arioth",
|
|
"Ariseph",
|
|
"Arismacht",
|
|
"Aristea",
|
|
"Arivid",
|
|
"Arkadit",
|
|
"Arkaris",
|
|
"Arkavyn",
|
|
"Arkissar",
|
|
"Arkurel",
|
|
"Arlana",
|
|
"Arleano",
|
|
"Arleost",
|
|
"Arlomma",
|
|
"Arokair",
|
|
"Arolant",
|
|
"Arozan",
|
|
"Arpiax",
|
|
"Arrashad",
|
|
"Arrelask",
|
|
"Arrenol",
|
|
"Arriam",
|
|
"Arridor",
|
|
"Arrivid",
|
|
"Arrosas",
|
|
"Arrossai",
|
|
"Arshashi",
|
|
"Arshavir",
|
|
"Artithea",
|
|
"Artlexu",
|
|
"Arura",
|
|
"Arvanor",
|
|
"Arvirask",
|
|
"Aryion",
|
|
"Arzeela",
|
|
"Ascarleth",
|
|
"Ascaveen",
|
|
"Ascomeld",
|
|
"Asgarath",
|
|
"Asherild",
|
|
"Ashikri",
|
|
"Ashilja",
|
|
"Ashnisci",
|
|
"Ashrodu",
|
|
"Asilun",
|
|
"Asius",
|
|
"Aslior",
|
|
"Asmacul",
|
|
"Asmictir",
|
|
"Aspaleed",
|
|
"Asparind",
|
|
"Asphodal",
|
|
"Aspolyme",
|
|
"Asquilla",
|
|
"Astaedi",
|
|
"Astalon",
|
|
"Aste\xE4",
|
|
"Astinus",
|
|
"Astra\xEBa",
|
|
"Asurzel",
|
|
"Atalis",
|
|
"Atazra",
|
|
"Athana",
|
|
"Atheran",
|
|
"Athermoj",
|
|
"Athina",
|
|
"Athnolan",
|
|
"Athrasomb",
|
|
"Athrilas",
|
|
"Atlavan",
|
|
"Atorin",
|
|
"Atralan",
|
|
"Atraxon",
|
|
"Atrujal",
|
|
"Attanir",
|
|
"Atticog",
|
|
"Aturin",
|
|
"Atyoto",
|
|
"Aurever",
|
|
"Aurian",
|
|
"Auridra",
|
|
"Aurina",
|
|
"Aurion",
|
|
"Auxebaz",
|
|
"Avalzaunt",
|
|
"Avandir",
|
|
"Avarath",
|
|
"Avasceen",
|
|
"Avenaar",
|
|
"Aveole",
|
|
"Averdal",
|
|
"Avereem",
|
|
"Avernide",
|
|
"Av\xE8ss\xE8d",
|
|
"Avesur",
|
|
"Avori",
|
|
"Avriax",
|
|
"Avronil",
|
|
"Awennes",
|
|
"Axanar",
|
|
"Axarun",
|
|
"Aximil",
|
|
"Ayaren",
|
|
"Ayesra",
|
|
"Azaka",
|
|
"Azakour",
|
|
"Azanakh",
|
|
"Azanor",
|
|
"Azarmax",
|
|
"Azatta",
|
|
"Azella",
|
|
"Azergal",
|
|
"Azfotha",
|
|
"Azilos",
|
|
"Azmarbi",
|
|
"Azmeren",
|
|
"Azolem",
|
|
"Azraxel",
|
|
"Azriaz",
|
|
"Azrienne",
|
|
"Aztira",
|
|
"Azuva",
|
|
"Azuzu",
|
|
"Baeglyndven",
|
|
"Bahnshiath",
|
|
"Bakailis",
|
|
"Bakiar",
|
|
"Balandix",
|
|
"Balanjik",
|
|
"Balathol",
|
|
"Balazar",
|
|
"Balderon",
|
|
"Baledor",
|
|
"Baloward",
|
|
"Baltarreg",
|
|
"Bandibras",
|
|
"Banira",
|
|
"Banjasah",
|
|
"Banjicoy",
|
|
"Banrodi",
|
|
"Bantirgen",
|
|
"Baraca",
|
|
"Barahir",
|
|
"Baramei",
|
|
"Barbardon",
|
|
"Barixid",
|
|
"Barjazan",
|
|
"Barolio",
|
|
"Barsimmern",
|
|
"Bartosca",
|
|
"Barzolo",
|
|
"Basfui",
|
|
"Basidrix",
|
|
"Baslayan",
|
|
"Basliard",
|
|
"Batiax",
|
|
"Baudefloy",
|
|
"Bayazin",
|
|
"Bayidon",
|
|
"Bazakel",
|
|
"Baziran",
|
|
"Be\xE4brae",
|
|
"Becheton",
|
|
"Bedivere",
|
|
"Behamkai",
|
|
"Belaraz",
|
|
"Belarba",
|
|
"Belathgert",
|
|
"Beldara",
|
|
"Beldaran",
|
|
"Belegern",
|
|
"Belensarl",
|
|
"Belgarath",
|
|
"Belida",
|
|
"Belimu",
|
|
"Belinzith",
|
|
"Belistra",
|
|
"Belithin",
|
|
"Bellarix",
|
|
"Bellinus",
|
|
"Belloram",
|
|
"Belmalar",
|
|
"Belmatar",
|
|
"Benalath",
|
|
"Beorilf",
|
|
"Beoshar",
|
|
"Berazan",
|
|
"Berefex",
|
|
"Berethan",
|
|
"Beriam",
|
|
"Berlemdo",
|
|
"Bermulan",
|
|
"Berterin",
|
|
"Besagren",
|
|
"Bestagar",
|
|
"Bethalus",
|
|
"Beztevil",
|
|
"Bilamarj",
|
|
"Birictzin",
|
|
"Birimi",
|
|
"Birrtezir",
|
|
"Bisuneh",
|
|
"Bithritrilb",
|
|
"Blascarro",
|
|
"Bo\xE4lod",
|
|
"Bo\xE4zye",
|
|
"Bolangi",
|
|
"Bolgodar",
|
|
"Boradrend",
|
|
"Borvazan",
|
|
"Bordvedo",
|
|
"Boridorn",
|
|
"Borivig",
|
|
"Boroqual",
|
|
"Borosov",
|
|
"Boruja",
|
|
"Breldiar",
|
|
"Breyugar",
|
|
"Brindelvix",
|
|
"Brinzindis",
|
|
"Brirelin",
|
|
"Brofothin",
|
|
"Bruyefol",
|
|
"Bundetlan",
|
|
"Burangald",
|
|
"Byjagan",
|
|
"Caadausid",
|
|
"Cadrillan",
|
|
"Cadxiel",
|
|
"Caglaree",
|
|
"Caladon",
|
|
"Caladra",
|
|
"Calandol",
|
|
"Calandra",
|
|
"Calara",
|
|
"Caldiza",
|
|
"Calial",
|
|
"Calian",
|
|
"Calibarz",
|
|
"Caliburr",
|
|
"Calimen",
|
|
"Calinor",
|
|
"Calinthor",
|
|
"Caliroon",
|
|
"Calrohir",
|
|
"Calvari",
|
|
"Calyreg",
|
|
"Camorba",
|
|
"Camrenard",
|
|
"Candelisce",
|
|
"Candralta",
|
|
"Canteril",
|
|
"Capsia",
|
|
"Caradin",
|
|
"Caraman",
|
|
"Carano",
|
|
"Carastac",
|
|
"Cardannor",
|
|
"Cardriman",
|
|
"Carejjar",
|
|
"Carenac",
|
|
"Caribros",
|
|
"Carvirras",
|
|
"Casliet",
|
|
"Cassira",
|
|
"Castivin",
|
|
"Cathloda",
|
|
"Cauluden",
|
|
"Cavrello",
|
|
"Cazago",
|
|
"Cazrogatz",
|
|
"Cedethea",
|
|
"Cedruin",
|
|
"Celasli",
|
|
"Celedrax",
|
|
"Celeldrir",
|
|
"Celenorb",
|
|
"Celephais",
|
|
"Celimbsel",
|
|
"Celissar",
|
|
"Celmiac",
|
|
"Celria",
|
|
"Cemendur",
|
|
"Ceomyr",
|
|
"Cerastes",
|
|
"Cerdotur",
|
|
"Cereden",
|
|
"Ceremeb",
|
|
"Cerindar",
|
|
"Cernaia",
|
|
"Cerrivald",
|
|
"Cerrlemere",
|
|
"Cervetar",
|
|
"Chakjalom",
|
|
"Chalberyn",
|
|
"Chandalla",
|
|
"Charizar",
|
|
"Charovis",
|
|
"Chasergha",
|
|
"Chatony",
|
|
"Chavrenard",
|
|
"Chayuleth",
|
|
"Chedynas",
|
|
"Chemedis",
|
|
"Cherinra",
|
|
"Cheshinif",
|
|
"Chesifith",
|
|
"Chexotah",
|
|
"Chiranin",
|
|
"Chirophanx",
|
|
"Chirystrad",
|
|
"Chissaera",
|
|
"Choriaal",
|
|
"Chrystara",
|
|
"Cialrak",
|
|
"Ciarna",
|
|
"Ciliath",
|
|
"Cillegra",
|
|
"Cimpelis",
|
|
"Cirial",
|
|
"Cirilar",
|
|
"Cisidor",
|
|
"Claraven",
|
|
"Clarian",
|
|
"Clymerice",
|
|
"Colperat",
|
|
"Colverslyne",
|
|
"Conridas",
|
|
"Coramur",
|
|
"Corcoran",
|
|
"Cordago",
|
|
"Corisur",
|
|
"Cormannon",
|
|
"Coromis",
|
|
"Corraemer",
|
|
"Corstanis",
|
|
"Coyasal",
|
|
"Cramorul",
|
|
"Crayeera",
|
|
"Credori",
|
|
"Cresbaral",
|
|
"Crodelan",
|
|
"Cromora",
|
|
"Crondowys",
|
|
"Cruirmox",
|
|
"Crysindlyn",
|
|
"Cthasia",
|
|
"Cubrucol",
|
|
"Curtifer",
|
|
"Cveralisk",
|
|
"Cyarium",
|
|
"Cynalis",
|
|
"Cynara",
|
|
"Cyrilla",
|
|
"Cyrissil",
|
|
"Daakrasef",
|
|
"Dabnavar",
|
|
"Dacarin",
|
|
"Dagaldsain",
|
|
"Dagorla",
|
|
"Daiavend",
|
|
"Dakkiah",
|
|
"Dakokan",
|
|
"Dalarthra",
|
|
"Dalimir",
|
|
"Dallandra",
|
|
"Dallibren",
|
|
"Dalmaxen",
|
|
"Damarel",
|
|
"Damia",
|
|
"Damisen",
|
|
"Dammarlet",
|
|
"Damria",
|
|
"Danatren",
|
|
"Danbrelaj",
|
|
"Daqualor",
|
|
"Daragard",
|
|
"Darandril",
|
|
"Darani",
|
|
"Darimpelg",
|
|
"Darioj",
|
|
"Darisimp",
|
|
"Darnien",
|
|
"Daruda",
|
|
"Darusor",
|
|
"Darvenel",
|
|
"Darvien",
|
|
"Dasanay",
|
|
"Dasyani",
|
|
"Dathanja",
|
|
"Dauro\xE4t",
|
|
"Daximyr",
|
|
"Dazaroth",
|
|
"Deglavar",
|
|
"Dekreon",
|
|
"Delalea",
|
|
"Delandim",
|
|
"Delaquoth",
|
|
"Delcardes",
|
|
"Delgadjas",
|
|
"Delgari",
|
|
"Deliard",
|
|
"Delitra",
|
|
"Delmonda",
|
|
"Delonos",
|
|
"Delsinar",
|
|
"Demels\xE0vre",
|
|
"Deminar",
|
|
"Demithea",
|
|
"Dendera",
|
|
"Denivra",
|
|
"Deowrix",
|
|
"Deralten",
|
|
"Derian",
|
|
"Derisurm",
|
|
"Derokain",
|
|
"Descelet",
|
|
"Desnema",
|
|
"Desthia",
|
|
"Destrino",
|
|
"Devabril",
|
|
"Devaia",
|
|
"Devaren",
|
|
"Deviscind",
|
|
"Devyna",
|
|
"Dezelglim",
|
|
"Dharijor",
|
|
"Diagur",
|
|
"Diamel",
|
|
"Diastul",
|
|
"Diazrax",
|
|
"Diniwirn",
|
|
"Dional",
|
|
"Diony",
|
|
"Dismarntir",
|
|
"Distana",
|
|
"Distiva",
|
|
"Diurmad",
|
|
"Divior",
|
|
"Do\xE4lva",
|
|
"Dokessin",
|
|
"Dolitan",
|
|
"Dolskior",
|
|
"Domagren",
|
|
"Domovoy",
|
|
"Doniale",
|
|
"Donivesh",
|
|
"Dorana",
|
|
"Doravin",
|
|
"Doraxa",
|
|
"Dorether",
|
|
"Dorgrian",
|
|
"Dorianth",
|
|
"Dorosard",
|
|
"Drafarna",
|
|
"Draglios",
|
|
"Dralgamor",
|
|
"Drelbaran",
|
|
"Dreleon",
|
|
"Dreower",
|
|
"Drusmirak",
|
|
"Druycalid",
|
|
"Durathor",
|
|
"Duruis",
|
|
"Dusoto",
|
|
"Duvalin",
|
|
"Dvereya",
|
|
"Dygardo",
|
|
"Eberyn",
|
|
"Ecarnis",
|
|
"Echengar",
|
|
"Echredrisk",
|
|
"Edalcor",
|
|
"Edamar",
|
|
"Edaris",
|
|
"Edeera",
|
|
"Edeiric",
|
|
"Edelan",
|
|
"Edromon",
|
|
"Eemonil",
|
|
"Eermiaw",
|
|
"Efelin",
|
|
"Efiath",
|
|
"Egarun",
|
|
"Egeanin",
|
|
"Eglashor",
|
|
"Eglathorm",
|
|
"Ehlmargis",
|
|
"Eilinud",
|
|
"Einnara",
|
|
"Ekisha",
|
|
"Elaara",
|
|
"Eladain",
|
|
"Elanja",
|
|
"Elanlir",
|
|
"Elantir",
|
|
"Elardoand",
|
|
"Elayess",
|
|
"Elbasant",
|
|
"Elbrian",
|
|
"Elcaros",
|
|
"Eldikohl",
|
|
"Eldimyr",
|
|
"Eldivren",
|
|
"Eleaseth",
|
|
"Eleniin",
|
|
"Elerasc",
|
|
"Eleril",
|
|
"Elesfar",
|
|
"Elexna",
|
|
"Elhanter",
|
|
"Elharta",
|
|
"Elhiri",
|
|
"Eliaazh",
|
|
"Elindel",
|
|
"Elion",
|
|
"Elispesh",
|
|
"Elissim",
|
|
"Elistan",
|
|
"Eljendril",
|
|
"Ellamoin",
|
|
"Ellanath",
|
|
"Ellendar",
|
|
"Ellidyr",
|
|
"Elmeric",
|
|
"Elmradra",
|
|
"Elnavor",
|
|
"Elno\xEB",
|
|
"Elorix",
|
|
"Elriseth",
|
|
"Elrodin",
|
|
"Elrowan",
|
|
"Elsandar",
|
|
"Elverus",
|
|
"Elzirtha",
|
|
"Emeresc",
|
|
"Emistar",
|
|
"Emparyn",
|
|
"Emra\xEBl",
|
|
"Enchasol",
|
|
"Endelaer",
|
|
"Endeltrad",
|
|
"Endoyarl",
|
|
"Endremen",
|
|
"Engkalat",
|
|
"Enifrax",
|
|
"Enliack",
|
|
"Ennorath",
|
|
"Eno\xEBre",
|
|
"Ensocand",
|
|
"Enzoray",
|
|
"Eolair",
|
|
"Eolglyu",
|
|
"Eomer",
|
|
"Eosin",
|
|
"Eowine",
|
|
"Eralith",
|
|
"Erbarax",
|
|
"Erdegron",
|
|
"Ere\xE4d",
|
|
"Ereboen",
|
|
"Eregin",
|
|
"Ereia",
|
|
"Ereidan",
|
|
"Ereinid",
|
|
"Eresbor",
|
|
"Ergamarl",
|
|
"Erian",
|
|
"Erihim",
|
|
"Erijin",
|
|
"Erilind",
|
|
"Erilyth",
|
|
"Erimewn",
|
|
"Eriptil",
|
|
"Erizael",
|
|
"Erjesko",
|
|
"Erkollo",
|
|
"Erlata",
|
|
"Erliskan",
|
|
"Ermentej",
|
|
"Ermiod",
|
|
"Ermizard",
|
|
"Erobor",
|
|
"Erraxam",
|
|
"Errixi",
|
|
"Ersazern",
|
|
"Erudin",
|
|
"Eruna",
|
|
"Escaloth",
|
|
"Eshorden",
|
|
"Eskedar",
|
|
"Eslenix",
|
|
"Esmeril",
|
|
"Essamor",
|
|
"Esselin",
|
|
"Estelorn",
|
|
"Estulman",
|
|
"Esyorna",
|
|
"Ethayan",
|
|
"Ethilrist",
|
|
"Ettellarn",
|
|
"Euralen",
|
|
"Eurayo",
|
|
"Evarul",
|
|
"Evedben",
|
|
"Eveltur",
|
|
"Evenor",
|
|
"Everan",
|
|
"Everard",
|
|
"Evidor",
|
|
"Evrilet",
|
|
"Ewugan",
|
|
"Exior",
|
|
"Exorric",
|
|
"Ezirith",
|
|
"Ezpirasp",
|
|
"Ezrabar",
|
|
"Fabliain",
|
|
"Faerlasdar",
|
|
"Fafmalan",
|
|
"Fahorjom",
|
|
"Falamund",
|
|
"Falazarm",
|
|
"Faldian",
|
|
"Faledra",
|
|
"Falias",
|
|
"Faliorn",
|
|
"Fallonar",
|
|
"Falmalin",
|
|
"Famaril",
|
|
"Famiryah",
|
|
"Farammil",
|
|
"Faranar",
|
|
"Farathar",
|
|
"Farazwen",
|
|
"Farendal",
|
|
"Farezar",
|
|
"Farias",
|
|
"Farinda",
|
|
"Farovlem",
|
|
"Farreflan",
|
|
"Farrian",
|
|
"Fassander",
|
|
"Fassiral",
|
|
"Fathanor",
|
|
"Fathimlas",
|
|
"Favular",
|
|
"Fayenned",
|
|
"Felacroy",
|
|
"Felectos",
|
|
"Felendos",
|
|
"Felentir",
|
|
"Felinstrod",
|
|
"Felladin",
|
|
"Fellathor",
|
|
"Fellazoor",
|
|
"Felmarus",
|
|
"Felvia",
|
|
"Fenhalut",
|
|
"Fenkkara",
|
|
"Feollan",
|
|
"Feraanty",
|
|
"Ferazhin",
|
|
"Ferdithir",
|
|
"Ferena",
|
|
"Ferescha",
|
|
"Feridmir",
|
|
"Feridoth",
|
|
"Ferilken",
|
|
"Ferkiel",
|
|
"Fermandra",
|
|
"Fermazeth",
|
|
"Ferozak",
|
|
"Ferrandry",
|
|
"Ferrinox",
|
|
"Fertimqui",
|
|
"Fesanor",
|
|
"Fesmaran",
|
|
"Fethijorn",
|
|
"Fethorval",
|
|
"Fezmirath",
|
|
"Fiaminch",
|
|
"Fiantzin",
|
|
"Fiathna",
|
|
"Fiensar",
|
|
"Fierex",
|
|
"Filigal",
|
|
"Filrena",
|
|
"Finaefin",
|
|
"Findegil",
|
|
"Finmanal",
|
|
"Finrhabar",
|
|
"Fiollix",
|
|
"Fionlex",
|
|
"Fiorag",
|
|
"Fiori",
|
|
"Fiosthan",
|
|
"Firandaal",
|
|
"Firimar",
|
|
"Firmrius",
|
|
"Fivrenesse",
|
|
"Flaco\xEB",
|
|
"Fluimorl",
|
|
"Fo\xE4shroud",
|
|
"Fomorisk",
|
|
"Fonesco",
|
|
"Fontaera",
|
|
"Forambad",
|
|
"Forizuld",
|
|
"Foront\xE9",
|
|
"Forrandir",
|
|
"Foxilkin",
|
|
"Fozdollo",
|
|
"Fraajior",
|
|
"Fragadin",
|
|
"Fre\xE4laf",
|
|
"Frinilex",
|
|
"Frosserthil",
|
|
"Frugansey",
|
|
"Fuareece",
|
|
"Fulinas",
|
|
"Fulmerack",
|
|
"Fumorak",
|
|
"Furalor",
|
|
"Fusial",
|
|
"Gadino",
|
|
"Gaffindur",
|
|
"Gaherist",
|
|
"Gaianac",
|
|
"Galassad",
|
|
"Galedrej",
|
|
"Galeeya",
|
|
"Galeia",
|
|
"Galendil",
|
|
"Galhambraj",
|
|
"Galhandvis",
|
|
"Galiel",
|
|
"Galjiu",
|
|
"Gallaia",
|
|
"Galorin",
|
|
"Galrion",
|
|
"Galthien",
|
|
"Galtyran",
|
|
"Galvaris",
|
|
"Gambrefax",
|
|
"Gamorrand",
|
|
"Ganatus",
|
|
"Ganelon",
|
|
"Ganoraz",
|
|
"Ganscion",
|
|
"Ganzadahl",
|
|
"Garagrim",
|
|
"Garalden",
|
|
"Garathgen",
|
|
"Garduil",
|
|
"Gardulkar",
|
|
"Garemo",
|
|
"Garflion",
|
|
"Garlenon",
|
|
"Garriech",
|
|
"Garziot",
|
|
"Gastenmil",
|
|
"Gatlatas",
|
|
"Gatzeiros",
|
|
"Gavendra",
|
|
"Gavilen",
|
|
"Gefandrall",
|
|
"Gelsgiath",
|
|
"Genteras",
|
|
"Gerergol",
|
|
"Gerexi",
|
|
"Geskrivus",
|
|
"Gevanarth",
|
|
"Ghiella",
|
|
"Gidyrrha",
|
|
"Gildanar",
|
|
"Gilennan",
|
|
"Gilfangron",
|
|
"Giljrian",
|
|
"Giltsanos",
|
|
"Gimika",
|
|
"Gipideur",
|
|
"Girazi",
|
|
"Giridal",
|
|
"Giridyne",
|
|
"Giriel",
|
|
"Girkirath",
|
|
"Gisorath",
|
|
"Gisriral",
|
|
"Gisselek",
|
|
"Givirtrik",
|
|
"Gizarak",
|
|
"Gizbion",
|
|
"Gizherae",
|
|
"Gledrion",
|
|
"Gleocyn",
|
|
"Gleyander",
|
|
"Gliranna",
|
|
"Glirfingril",
|
|
"Goibhniu",
|
|
"Golexar",
|
|
"Golo\xEB",
|
|
"Gonscevin",
|
|
"Gontomir",
|
|
"Goranna",
|
|
"Gorazky",
|
|
"Gordalis",
|
|
"Gorias",
|
|
"Gorion",
|
|
"Goronwy",
|
|
"Goronyr",
|
|
"Gorova",
|
|
"Gorthokon",
|
|
"Graginar",
|
|
"Graliath",
|
|
"Gredanost",
|
|
"Griarnix",
|
|
"Griotam",
|
|
"Grissejan",
|
|
"Grolliax",
|
|
"Gualat",
|
|
"Guilmarn",
|
|
"Gulifrith",
|
|
"Gurnarok",
|
|
"Gwyrion",
|
|
"Gydrian",
|
|
"Gymnivus",
|
|
"Gyrelyest",
|
|
"Hacoulede",
|
|
"Hadowrak",
|
|
"Hafranel",
|
|
"Haielva",
|
|
"Haijannod",
|
|
"Hajandin",
|
|
"Hakatri",
|
|
"Halibarn",
|
|
"Halios",
|
|
"Haliwyn",
|
|
"Halveron",
|
|
"Halvia",
|
|
"Hamadar",
|
|
"Hamancen",
|
|
"Hamavand",
|
|
"Hanamere",
|
|
"Haneran",
|
|
"Hanorayn",
|
|
"Hanrassu",
|
|
"Hantaira",
|
|
"Haplana",
|
|
"Haprissa",
|
|
"Harana",
|
|
"Harandash",
|
|
"Harezek",
|
|
"Hargranar",
|
|
"Harigran",
|
|
"Harnahad",
|
|
"Harobel",
|
|
"Harondar",
|
|
"Harromarl",
|
|
"Harsinna",
|
|
"Hartien",
|
|
"Hartazan",
|
|
"Hasalgar",
|
|
"Hasprion",
|
|
"Hathlizu",
|
|
"Hathvoril",
|
|
"Hautilim",
|
|
"Hautulin",
|
|
"Hauxpomel",
|
|
"Haxmaraun",
|
|
"Haxmaspar",
|
|
"Haxmered",
|
|
"Hazalet",
|
|
"Hazazel",
|
|
"Hazharat",
|
|
"Haziran",
|
|
"Hedrapake",
|
|
"Heereos",
|
|
"Hekeren",
|
|
"Helbathil",
|
|
"Helobaine",
|
|
"Helphegad",
|
|
"Helziatz",
|
|
"Hemgarel",
|
|
"Henalur",
|
|
"Herecharn",
|
|
"Heriganj",
|
|
"Heriol",
|
|
"Hessevet",
|
|
"Hethica",
|
|
"Heuleanar",
|
|
"Hexavren",
|
|
"Hexelin",
|
|
"Hiabaid",
|
|
"Hiassveil",
|
|
"Hifridil",
|
|
"Higlaia",
|
|
"Hilio",
|
|
"Himurlem",
|
|
"Hintyrit",
|
|
"Hirodrix",
|
|
"Hizirin",
|
|
"Hokry\xE4hn",
|
|
"Holmarun",
|
|
"Horbajir",
|
|
"Horlabo",
|
|
"Hralfecca",
|
|
"Hrioncet",
|
|
"Hulterna",
|
|
"Hurja\xEBl",
|
|
"Huvatal",
|
|
"Hyaliptar",
|
|
"Hyarantar",
|
|
"Hydrestin",
|
|
"Hylamet",
|
|
"Hylarel",
|
|
"Hylissa",
|
|
"Hyphorond",
|
|
"Hyraskel",
|
|
"Hyrkhalla",
|
|
"Hyzaspes",
|
|
"Iahaun",
|
|
"Iarlen",
|
|
"Iasho",
|
|
"Ibekon",
|
|
"Ibgali",
|
|
"Ibrana",
|
|
"Ibriax",
|
|
"Ibriole",
|
|
"Icanaar",
|
|
"Icavra",
|
|
"Icera",
|
|
"Ichandrik",
|
|
"Ichindar",
|
|
"Idarlan",
|
|
"Iffalon",
|
|
"Igjaru",
|
|
"Ijevthla",
|
|
"Ikarin",
|
|
"Ikirkar",
|
|
"Ilabrem",
|
|
"Ilairam",
|
|
"Ilarnin",
|
|
"Ildezir",
|
|
"Ilenfal",
|
|
"Ilfangir",
|
|
"Ilfinir",
|
|
"Ilgaeldar",
|
|
"Ilikir",
|
|
"Ilimvair",
|
|
"Ilkern\xE9",
|
|
"Ilkyarzim",
|
|
"Illana",
|
|
"Illara",
|
|
"Illiarn",
|
|
"Illsuin",
|
|
"Illuanc",
|
|
"Illurdan",
|
|
"Ilkaroque",
|
|
"Ilnitelg",
|
|
"Ilrehjan",
|
|
"Ilumaar",
|
|
"Ilvelisk",
|
|
"Imaia",
|
|
"Imajin",
|
|
"Imashla",
|
|
"Imaydra",
|
|
"Imedet",
|
|
"Imikeer",
|
|
"Imilxime",
|
|
"Imisard",
|
|
"Immelanx",
|
|
"Immoreth",
|
|
"Immornam",
|
|
"Imnatris",
|
|
"Imrahran",
|
|
"Imravog",
|
|
"Imrazixt",
|
|
"Imzia",
|
|
"Inayiss",
|
|
"Indreju",
|
|
"Ingrenux",
|
|
"Inhectin",
|
|
"Inidar",
|
|
"Inifael",
|
|
"Inifox",
|
|
"Ininay",
|
|
"Inisdex",
|
|
"Inisfail",
|
|
"Inkiljist",
|
|
"Inkotai",
|
|
"Inno\xE4k",
|
|
"Inora",
|
|
"Insallasc",
|
|
"Intaphka",
|
|
"Inzellene",
|
|
"Ioga",
|
|
"Iolan",
|
|
"Iombar",
|
|
"Iosaz",
|
|
"Iosdil",
|
|
"Iperi",
|
|
"Iphara",
|
|
"Ipholar",
|
|
"Ipolok",
|
|
"Iptasor",
|
|
"Irankar",
|
|
"Irathar",
|
|
"Ireneemp",
|
|
"Irial",
|
|
"Irian",
|
|
"Iriboth",
|
|
"Iriga",
|
|
"Irmaskor",
|
|
"Irmistib",
|
|
"Irphilin",
|
|
"Irriosce",
|
|
"Irshirkur",
|
|
"Isaelsu",
|
|
"Isamar",
|
|
"Isarma",
|
|
"Isbexa",
|
|
"Isencal",
|
|
"Isgremnir",
|
|
"Ishmira",
|
|
"Ishnitra",
|
|
"Isiki",
|
|
"Iskarrine",
|
|
"Iskimi",
|
|
"Iskiret",
|
|
"Isodrost",
|
|
"Isotu",
|
|
"Isromant",
|
|
"Isrotha",
|
|
"Issakra",
|
|
"Issanthal",
|
|
"Issevex",
|
|
"Issimrak",
|
|
"Istengrem",
|
|
"Istensanth",
|
|
"Isthentild",
|
|
"Istheol",
|
|
"Isthgiol",
|
|
"Istidom",
|
|
"Istijed",
|
|
"Istroval",
|
|
"Isuxnen",
|
|
"Itharna",
|
|
"Ithelus",
|
|
"Ithimryr",
|
|
"Ithineg",
|
|
"Ithober",
|
|
"Iventhax",
|
|
"Ivrishel",
|
|
"Iwranda",
|
|
"Ixambel",
|
|
"Ixanthis",
|
|
"Ixarine",
|
|
"Ixcavar",
|
|
"Ixium",
|
|
"Iyenna",
|
|
"Iyiskek",
|
|
"Izpiizzi",
|
|
"Jabarla",
|
|
"Jablomeed",
|
|
"Jaelmura",
|
|
"Jafila",
|
|
"Jagadis",
|
|
"Jagaroch",
|
|
"Jahaurin",
|
|
"Jakalar",
|
|
"Jakarhul",
|
|
"Jakendar",
|
|
"Jakharral",
|
|
"Jakronib",
|
|
"Jalaran",
|
|
"Jalatha",
|
|
"Jaleana",
|
|
"Jaligar",
|
|
"Jalisharn",
|
|
"Jalnio",
|
|
"Jalvochin",
|
|
"Jance\xE4",
|
|
"Jandagar",
|
|
"Jandenor",
|
|
"Janien",
|
|
"Janniel",
|
|
"Jaralor",
|
|
"Jarantin",
|
|
"Jaratryne",
|
|
"Jardilan",
|
|
"Jarien",
|
|
"Jarioth",
|
|
"Jaronris",
|
|
"Jascelat",
|
|
"Jascenant",
|
|
"Jaslani",
|
|
"Jassolind",
|
|
"Jatherfar",
|
|
"Jathlabra",
|
|
"Jathzoril",
|
|
"Jaukulmar",
|
|
"Jaurelin",
|
|
"Javennae",
|
|
"Javrezac",
|
|
"Jazaeron",
|
|
"Jejaneel",
|
|
"Jeleeya",
|
|
"Jelerish",
|
|
"Jelgrion",
|
|
"Jemadar",
|
|
"Jemkoleng",
|
|
"Jeoric",
|
|
"Jeoster",
|
|
"Jeprana",
|
|
"Jertezan",
|
|
"Jervida",
|
|
"Jessabra",
|
|
"Jevalor",
|
|
"Jevedic",
|
|
"Jevorin",
|
|
"Jevrian",
|
|
"Jhessala",
|
|
"Jhinilak",
|
|
"Jianthi",
|
|
"Jidesa",
|
|
"Jifrusni",
|
|
"Jijinjic",
|
|
"Jilarna",
|
|
"Jilitha",
|
|
"Jillaro",
|
|
"Jingaran",
|
|
"Jiriselk",
|
|
"Jiruik",
|
|
"Jivessla",
|
|
"Jivizet",
|
|
"Jixannil",
|
|
"Jizuret",
|
|
"Jo\xE4sra",
|
|
"Joplezno",
|
|
"Jorian",
|
|
"Joriel",
|
|
"Jorodrin",
|
|
"Josafyre",
|
|
"Jothaugan",
|
|
"Jothera",
|
|
"Jozranal",
|
|
"Jranahaz",
|
|
"Juarin",
|
|
"Jumeon",
|
|
"Juramanx",
|
|
"Jussondrel",
|
|
"Juxeccan",
|
|
"Juzawik",
|
|
"Kacinzen",
|
|
"Kadishir",
|
|
"Kahora",
|
|
"Kairaku",
|
|
"Kajabor",
|
|
"Kajua",
|
|
"Kalandrin",
|
|
"Kaledath",
|
|
"Kalvaro",
|
|
"Kamisu",
|
|
"Kamundam",
|
|
"Kandonak",
|
|
"Kandorin",
|
|
"Kapasin",
|
|
"Kara\xEBl",
|
|
"Karamis",
|
|
"Karanchir",
|
|
"Kardarkar",
|
|
"Kardotha",
|
|
"Karela",
|
|
"Karezthame",
|
|
"Karimeg",
|
|
"Karogan",
|
|
"Kasiran",
|
|
"Kasluna",
|
|
"Kastana",
|
|
"Kastau\xEBt",
|
|
"Kasthukras",
|
|
"Kathanal",
|
|
"Katryzaj",
|
|
"Katumar",
|
|
"Kazellor",
|
|
"Kazu\xF6n",
|
|
"Kedrinal",
|
|
"Kelemon",
|
|
"Kelmerveld",
|
|
"Kelraiog",
|
|
"Kelvixa",
|
|
"Kemmergen",
|
|
"Kerannix",
|
|
"Kerason",
|
|
"Kerasun",
|
|
"Kerendul",
|
|
"Kerfina",
|
|
"Kernamald",
|
|
"Keroona",
|
|
"Kerrekril",
|
|
"Kerrihaude",
|
|
"Kestramel",
|
|
"Kexranea",
|
|
"Khadera",
|
|
"Khalid\xFBr",
|
|
"Kharisden",
|
|
"Khelaret",
|
|
"Khorenym",
|
|
"Khosilin",
|
|
"Khuraram",
|
|
"Khurkula",
|
|
"Kiarak",
|
|
"Kiaskek",
|
|
"Kifadli",
|
|
"Kinbulser",
|
|
"Kinjeon",
|
|
"Kintarna",
|
|
"Kioxug",
|
|
"Kireoj",
|
|
"Kirias",
|
|
"Kiriok",
|
|
"Kirithul",
|
|
"Kirrevi",
|
|
"Kiuspou",
|
|
"Kizarlon",
|
|
"Klandisar",
|
|
"Klirundon",
|
|
"Kodoki",
|
|
"Korachon",
|
|
"Korasal",
|
|
"Kortien",
|
|
"Korvaron",
|
|
"Kotajad",
|
|
"Kothenai",
|
|
"Kovaia",
|
|
"Kozanga",
|
|
"Krasgalad",
|
|
"Krienna",
|
|
"Krisilal",
|
|
"Krytelgaz",
|
|
"Kuiju",
|
|
"Kydomor",
|
|
"Kylara",
|
|
"Kylinsra",
|
|
"Kymelin",
|
|
"Kymorel",
|
|
"Kyrembra",
|
|
"Kyvaran",
|
|
"Kyveler",
|
|
"Laaraban",
|
|
"Lacoumox",
|
|
"Lacrion",
|
|
"Ladamur",
|
|
"Ladestro",
|
|
"Laesina",
|
|
"Lafera",
|
|
"Lagaram",
|
|
"Lagova",
|
|
"Lahanolt",
|
|
"Laklanot",
|
|
"Lalaia",
|
|
"Lalthilan",
|
|
"Lamidris",
|
|
"Lamifer",
|
|
"Lamizjax",
|
|
"Lampralur",
|
|
"Lamrella",
|
|
"Lanisor",
|
|
"Lanival",
|
|
"Lanstre\xE4",
|
|
"Lantakrel",
|
|
"Lantamar",
|
|
"Lanumel",
|
|
"Lappeleme",
|
|
"Laprimal",
|
|
"Larana",
|
|
"Laranel",
|
|
"Larilect",
|
|
"Larion",
|
|
"Larquinip",
|
|
"Lascynthis",
|
|
"Lasirusk",
|
|
"Lataffin",
|
|
"Lattremond",
|
|
"Lazadon",
|
|
"Ledmial",
|
|
"Legaaruksh",
|
|
"Lelatha",
|
|
"Leledish",
|
|
"Lendela",
|
|
"Lendoweer",
|
|
"Leodaan",
|
|
"Leojith",
|
|
"Leoptrin",
|
|
"Leptenar",
|
|
"Leptredin",
|
|
"Leranorb",
|
|
"Lessefren",
|
|
"Lethrian",
|
|
"Levasim",
|
|
"Lhyrrhana",
|
|
"Liamar",
|
|
"Liambra",
|
|
"Liammeck",
|
|
"Lianairn",
|
|
"Liansra",
|
|
"Lianvrin",
|
|
"Liarxa",
|
|
"Liavec",
|
|
"Liembra",
|
|
"Lilasta",
|
|
"Lilkauki",
|
|
"Lilthia",
|
|
"Limbria",
|
|
"Linargan",
|
|
"Linnaker",
|
|
"Lionus",
|
|
"Liossoor",
|
|
"Liquemar",
|
|
"Liroitzin",
|
|
"Lisimbra",
|
|
"Lissara",
|
|
"Lissflorel",
|
|
"Lithuir",
|
|
"Lithyulin",
|
|
"Litoefer",
|
|
"Liydala",
|
|
"Lizenna",
|
|
"Lizinra",
|
|
"Llanaanu",
|
|
"Lo\xEBra",
|
|
"Logano",
|
|
"Lorana",
|
|
"Lorenvra",
|
|
"Loriant",
|
|
"Lozeneth",
|
|
"Luciet",
|
|
"Lucimer",
|
|
"Lunzia",
|
|
"Lurepusc",
|
|
"Luspilkir",
|
|
"Luthirring",
|
|
"Luuranoth",
|
|
"Lydalay",
|
|
"Lymandal",
|
|
"Lynaya",
|
|
"Lyndr\xE9",
|
|
"Lynxias",
|
|
"Lypilla",
|
|
"Lyraloss",
|
|
"Lyrian",
|
|
"Lyrossa",
|
|
"Lyrozi",
|
|
"Lythian",
|
|
"Lythratole",
|
|
"Lyzeary",
|
|
"Maalkeyan",
|
|
"Maceon",
|
|
"Madaluur",
|
|
"Madiglim",
|
|
"Madora",
|
|
"Maerleetlas",
|
|
"Maeronyx",
|
|
"Mafranic",
|
|
"Magezatt",
|
|
"Magithel",
|
|
"Maglethom",
|
|
"Magylin",
|
|
"Mahelas",
|
|
"Majaelith",
|
|
"Makana",
|
|
"Mala\xEBsse",
|
|
"Malaioc",
|
|
"Malambard",
|
|
"Malandor",
|
|
"Malasire",
|
|
"Malasquor",
|
|
"Malavok",
|
|
"Malbrosac",
|
|
"Maldagon",
|
|
"Malechan",
|
|
"Malestrin",
|
|
"Malgadarn",
|
|
"Malhantis",
|
|
"Malhemar",
|
|
"Malidryth",
|
|
"Malifrin",
|
|
"Malisken",
|
|
"Mallaran",
|
|
"Maloroc",
|
|
"Malsanon",
|
|
"Mamvier",
|
|
"Mandrezool",
|
|
"Manjalem",
|
|
"Mannanon",
|
|
"Mantragan",
|
|
"Ma\xF6ndat",
|
|
"Mapiran",
|
|
"Mardieth",
|
|
"Maridan",
|
|
"Maridisp",
|
|
"Marindro",
|
|
"Marinus",
|
|
"Marivik",
|
|
"Marliok",
|
|
"Marmaranx",
|
|
"Marmeron",
|
|
"Marniel",
|
|
"Marreldix",
|
|
"Marsarok",
|
|
"Marsineh",
|
|
"Martanzix",
|
|
"Maruis",
|
|
"Mashalla",
|
|
"Masira",
|
|
"Massoran",
|
|
"Mathannil",
|
|
"Matzirik",
|
|
"Maunestin",
|
|
"Mavira",
|
|
"Maxander",
|
|
"Maxtibel",
|
|
"Mazegus",
|
|
"Mazesra",
|
|
"Mazian",
|
|
"Mazivel",
|
|
"Medarinn",
|
|
"Medrahar",
|
|
"Medvergaal",
|
|
"Mehalet",
|
|
"Mejarlan",
|
|
"Mekeesha",
|
|
"Melamnir",
|
|
"Melapis",
|
|
"Melasdar",
|
|
"Melikkhaz",
|
|
"Meliune",
|
|
"Melliorn",
|
|
"Melorond",
|
|
"Memisaire",
|
|
"Menalor",
|
|
"Mendobarl",
|
|
"Menelvaour",
|
|
"Meodas",
|
|
"Meraleph",
|
|
"Merama",
|
|
"Meramel",
|
|
"Meranshu",
|
|
"Meraudax",
|
|
"Meriag",
|
|
"Meridyn",
|
|
"Meriel",
|
|
"Merilec",
|
|
"Merinar",
|
|
"Merinard",
|
|
"Merivran",
|
|
"Merkalo",
|
|
"Merlience",
|
|
"Merresil",
|
|
"Merscianthe",
|
|
"Mertamet",
|
|
"Mesegrim",
|
|
"Metrofa",
|
|
"Mevedet",
|
|
"Mewreddan",
|
|
"Mezedan",
|
|
"Mezerel",
|
|
"Mezlehet",
|
|
"Mezlethil",
|
|
"Mezrian",
|
|
"Mezrenain",
|
|
"Mezvorax",
|
|
"Mialdere",
|
|
"Mialorn",
|
|
"Midela",
|
|
"Mierah",
|
|
"Mikramil",
|
|
"Milicseth",
|
|
"Minaxa",
|
|
"Minrioth",
|
|
"Miranei",
|
|
"Mirantilb",
|
|
"Mirelith",
|
|
"Mirenta",
|
|
"Miriel",
|
|
"Mirieth",
|
|
"Mirintha",
|
|
"Mirion",
|
|
"Mirreschade",
|
|
"Mirrsomi",
|
|
"Misella",
|
|
"Misiplum",
|
|
"Misirim",
|
|
"Mithelos",
|
|
"Mo\xE4lroc",
|
|
"Mobrias",
|
|
"Moieddin",
|
|
"Moisiane",
|
|
"Molhanni",
|
|
"Mondestin",
|
|
"Moramin",
|
|
"Morannel",
|
|
"Morilimth",
|
|
"Morleved",
|
|
"Mormindar",
|
|
"Morofar",
|
|
"Morozam",
|
|
"Morrixan",
|
|
"Mosbelo",
|
|
"Movellan",
|
|
"Moxfiel",
|
|
"Mrankali",
|
|
"Mredisu",
|
|
"Mujeket",
|
|
"Mulciner",
|
|
"Mumivor",
|
|
"Murbahir",
|
|
"Murias",
|
|
"Murinja",
|
|
"Mustesra",
|
|
"Mylbdenir",
|
|
"Mylenost",
|
|
"Myllara",
|
|
"Myloryx",
|
|
"Myractus",
|
|
"Myrmelesc",
|
|
"Myrrhismir",
|
|
"Myrstica",
|
|
"Myruken",
|
|
"Myvior",
|
|
"Naadien",
|
|
"Nabronyb",
|
|
"Na\xEBska",
|
|
"Nagarax",
|
|
"Naiagard",
|
|
"Najikim",
|
|
"Nambolar",
|
|
"Namezlith",
|
|
"Namien",
|
|
"Nappolanc",
|
|
"Naramant",
|
|
"Naranlob",
|
|
"Naraven",
|
|
"Narecan",
|
|
"Naretha",
|
|
"Narfalax",
|
|
"Narimas",
|
|
"Narisdaat",
|
|
"Narissa",
|
|
"Narotham",
|
|
"Narothun",
|
|
"Narrabhar",
|
|
"Narseldax",
|
|
"Nasmerul",
|
|
"Nateera",
|
|
"Nathogan",
|
|
"Natrifer",
|
|
"Nauthzegam",
|
|
"Naveiruz",
|
|
"Navislorn",
|
|
"Navithesk",
|
|
"Nefaroyn",
|
|
"Negula",
|
|
"Nelibar",
|
|
"Nelphina",
|
|
"Nelthenti",
|
|
"Nelveren",
|
|
"Nemarhaz",
|
|
"Nemisen",
|
|
"Nereitra",
|
|
"Nerevaunt",
|
|
"Nerian",
|
|
"Nerida",
|
|
"Neryonid",
|
|
"Netharna",
|
|
"Netho\xEBl",
|
|
"Neveena",
|
|
"Nexian",
|
|
"Nexlio",
|
|
"Niascynth",
|
|
"Nidoran",
|
|
"Nienra",
|
|
"Niggollo",
|
|
"Nilchauntif",
|
|
"Nilmio",
|
|
"Nimandest",
|
|
"Nimfiralth",
|
|
"Nimiax",
|
|
"Ninozain",
|
|
"Niomakh",
|
|
"Nisamon",
|
|
"Nisaqua",
|
|
"Nissafen",
|
|
"Nitharna",
|
|
"Nithikin",
|
|
"Nitoda",
|
|
"Nivilan",
|
|
"Nizamar",
|
|
"Nizared",
|
|
"Noldiruth",
|
|
"Nolteera",
|
|
"Nooranda",
|
|
"Norian",
|
|
"Norvandrel",
|
|
"Noumander",
|
|
"Novrima",
|
|
"Noxalwan",
|
|
"Nuanvi",
|
|
"Nuarban",
|
|
"Nujriha",
|
|
"Nulagdi",
|
|
"Nuskuron",
|
|
"Nyrana",
|
|
"Nysorat",
|
|
"Obatzi",
|
|
"Obelnid",
|
|
"Ocmias",
|
|
"Odimos",
|
|
"Offenalke",
|
|
"Ogola",
|
|
"Ohranjat",
|
|
"Ojavi",
|
|
"Ojilinx",
|
|
"Okalder",
|
|
"Okpala",
|
|
"Oktavisp",
|
|
"Olamar",
|
|
"Olbenos",
|
|
"Oldarane",
|
|
"Oldrinben",
|
|
"Olican",
|
|
"Ollascet",
|
|
"Olnefkin",
|
|
"Olondin",
|
|
"Olonthos",
|
|
"Oloru",
|
|
"Oloxem",
|
|
"Olybris",
|
|
"Omaldras",
|
|
"Omaphel",
|
|
"Omarna",
|
|
"Omarthis",
|
|
"Omberdal",
|
|
"Ombriand",
|
|
"Ommarisk",
|
|
"Omosdur",
|
|
"Omziec",
|
|
"Onaldrus",
|
|
"Oneira",
|
|
"Onfivlen",
|
|
"Oniack",
|
|
"Onjedrit",
|
|
"Onoxim",
|
|
"Oolevran",
|
|
"Oomia",
|
|
"Oorandehle",
|
|
"Oquilda",
|
|
"Oradrad",
|
|
"Orbasdron",
|
|
"Orbeleez",
|
|
"Orbitan",
|
|
"Orchellor",
|
|
"Orebus",
|
|
"Oremex",
|
|
"Orenai",
|
|
"Orennem",
|
|
"Oridyr",
|
|
"Oriob",
|
|
"Oristkel",
|
|
"Orithreyn",
|
|
"Orivaen",
|
|
"Orlantsu",
|
|
"Orliend",
|
|
"Orlopem",
|
|
"Orluan",
|
|
"Ormadzel",
|
|
"Ormarit",
|
|
"Ormion",
|
|
"Ornulaa",
|
|
"Orodel",
|
|
"Oromrath",
|
|
"Orovar",
|
|
"Orovune",
|
|
"Orpirrhis",
|
|
"Orreminsk",
|
|
"Ortazan",
|
|
"Osgoran",
|
|
"Oskana",
|
|
"Osmoril",
|
|
"Osoyrir",
|
|
"Ossfenness",
|
|
"Otargol",
|
|
"Othaldon",
|
|
"Otralinx",
|
|
"Oujanglor",
|
|
"Ouraia",
|
|
"Ovarasc",
|
|
"Ovelleau",
|
|
"Oveselm",
|
|
"Ovranoj",
|
|
"Ovrenor",
|
|
"Oxavar",
|
|
"Oxavart",
|
|
"Oxru\xEBl",
|
|
"Ozatris",
|
|
"Ozgethern",
|
|
"Ozmirall",
|
|
"Ozringol",
|
|
"Palabell",
|
|
"Palarna",
|
|
"Palegain",
|
|
"Palidral",
|
|
"Palimbrust",
|
|
"Palinor",
|
|
"Panafig",
|
|
"Pandaxes",
|
|
"Pandelee",
|
|
"Pandeleur",
|
|
"Paomelna",
|
|
"Pardyereyk",
|
|
"Pargascir",
|
|
"Parlion",
|
|
"Paskorran",
|
|
"Pastengral",
|
|
"Pavadahl",
|
|
"Pavandor",
|
|
"Paxijanc",
|
|
"Paxilla",
|
|
"Pazaleeb",
|
|
"Peladon",
|
|
"Peledor",
|
|
"Pelendur",
|
|
"Peleod",
|
|
"Pelezef",
|
|
"Peliast",
|
|
"Pelizon",
|
|
"Pellingale",
|
|
"Pelmercest",
|
|
"Pelmergol",
|
|
"Pelsiffra",
|
|
"Penengvik",
|
|
"Peradal",
|
|
"Peraga",
|
|
"Perendan",
|
|
"Perendor",
|
|
"Peridor",
|
|
"Peripril",
|
|
"Perisgrim",
|
|
"Peristaad",
|
|
"Perligon",
|
|
"Pernian",
|
|
"Perridex",
|
|
"Persimmid",
|
|
"Perushka",
|
|
"Peslivar",
|
|
"Petreban",
|
|
"Phaidonaz",
|
|
"Phaneon",
|
|
"Pharethyn",
|
|
"Phariol",
|
|
"Pharnioth",
|
|
"Phascalon",
|
|
"Phesian",
|
|
"Phiarusk",
|
|
"Philizim",
|
|
"Phiniak",
|
|
"Phiressa",
|
|
"Phoosrotex",
|
|
"Phoseter",
|
|
"Phramberzond",
|
|
"Phranzulet",
|
|
"Piapiar",
|
|
"Pievalp",
|
|
"Pillia",
|
|
"Pioma",
|
|
"Pirigal",
|
|
"Pirilaud",
|
|
"Pirinweal",
|
|
"Piritosk",
|
|
"Pis\xE7ion",
|
|
"Pishior",
|
|
"Pithibryl",
|
|
"Piynameer",
|
|
"Plamias",
|
|
"Plenchiel",
|
|
"Poinellay",
|
|
"Poinembet",
|
|
"Polassar",
|
|
"Polorrum",
|
|
"Porodo",
|
|
"Porsenna",
|
|
"Potadu",
|
|
"Priligrel",
|
|
"Progneti",
|
|
"Ptamriad",
|
|
"Ptelian",
|
|
"Pteraphon",
|
|
"Pulsavra",
|
|
"Pyrenda",
|
|
"Pyrtolosc",
|
|
"Pytholtus",
|
|
"Pytrigon",
|
|
"Quaeleon",
|
|
"Quagrana",
|
|
"Qualbian",
|
|
"Qualhassan",
|
|
"Quana\xF6ck",
|
|
"Quandiel",
|
|
"Queegani",
|
|
"Quenteri",
|
|
"Quentezard",
|
|
"Queoddry",
|
|
"Queridra",
|
|
"Quero\xEB",
|
|
"Quersemel",
|
|
"Quilium",
|
|
"Quilverex",
|
|
"Quinibus",
|
|
"Quisifrix",
|
|
"Quolatha",
|
|
"Quolessip",
|
|
"Quoran\xFBl",
|
|
"Quyzacorm",
|
|
"Raascia",
|
|
"Racassar",
|
|
"Rackafel",
|
|
"Radasman",
|
|
"Radelon",
|
|
"Radula",
|
|
"Raiveral",
|
|
"Rajiten",
|
|
"Rajurno",
|
|
"Rakmyrral",
|
|
"Rakshilan",
|
|
"Ralanzur",
|
|
"Ralisimp",
|
|
"Ralmanor",
|
|
"Ralystra",
|
|
"Ramura",
|
|
"Ranessin",
|
|
"Ranicroy",
|
|
"Ranifice",
|
|
"Ranomar",
|
|
"Rasaleth",
|
|
"Rashemba",
|
|
"Rassdolim",
|
|
"Rasseglin",
|
|
"Rassfydel",
|
|
"Rastilon",
|
|
"Ravathene",
|
|
"Ravenor",
|
|
"Raverail",
|
|
"Ravimo",
|
|
"Raxia",
|
|
"Razamor",
|
|
"Raziel",
|
|
"Re\xE4nkal",
|
|
"Reepifer",
|
|
"Regalorj",
|
|
"Regimir",
|
|
"Reldorin",
|
|
"Releza",
|
|
"Relikin",
|
|
"Relion",
|
|
"Rellevirk",
|
|
"Relliapt",
|
|
"Relundar",
|
|
"Rendeptir",
|
|
"Renzelath",
|
|
"Reonin",
|
|
"Requiek",
|
|
"Rescorance",
|
|
"Resmenalse",
|
|
"Retalkin",
|
|
"Rethia",
|
|
"Revenal",
|
|
"Rezmyra",
|
|
"Rhakotis",
|
|
"Rhendalin",
|
|
"Rhiacind",
|
|
"Rhimaya",
|
|
"Rhimeren",
|
|
"Rhisala",
|
|
"Rhomiscele",
|
|
"Rhydolin",
|
|
"Rhy\xF6lar",
|
|
"Riasine",
|
|
"Riatar",
|
|
"Riatha",
|
|
"Rickata",
|
|
"Rigisil",
|
|
"Rigonav",
|
|
"Riimara",
|
|
"Rilatha",
|
|
"Rilidtai",
|
|
"Rilmara",
|
|
"Rilmorban",
|
|
"Rinxfantir",
|
|
"Riodan",
|
|
"Riolarn",
|
|
"Riolba",
|
|
"Riscintell",
|
|
"Risgana",
|
|
"Risia",
|
|
"Risrinam",
|
|
"Rithotarl",
|
|
"Rixian",
|
|
"Rizifire",
|
|
"Rocapeste",
|
|
"Rodifel",
|
|
"Rodion",
|
|
"Ro\xEBnen",
|
|
"Rokefyre",
|
|
"Romela",
|
|
"Romenom",
|
|
"Rondolla",
|
|
"Rophelon",
|
|
"Rophendir",
|
|
"Rosmarlind",
|
|
"Rou\xE4dth",
|
|
"Rovlerac",
|
|
"Rozeeldin",
|
|
"Rugiel",
|
|
"Ruhria",
|
|
"Rumilan",
|
|
"Runian",
|
|
"Rusaadi",
|
|
"Rusalmna",
|
|
"Rusitholk",
|
|
"Ruvasarn",
|
|
"Ruvatro",
|
|
"Ry\xF6zile",
|
|
"Rynian",
|
|
"Rynristas",
|
|
"Rynyris",
|
|
"Ryxarro",
|
|
"Sabrazsa",
|
|
"Sabriel",
|
|
"Sabtimon",
|
|
"Sadabel",
|
|
"Sadeera",
|
|
"Sadonel",
|
|
"Safarrinx",
|
|
"Saffinka",
|
|
"Sagamir",
|
|
"Saguil",
|
|
"Sa\xEFnda",
|
|
"Sajaerix",
|
|
"Salaarus",
|
|
"Salathir",
|
|
"Salclias",
|
|
"Salina",
|
|
"Salinen",
|
|
"Salioct",
|
|
"Salitlan",
|
|
"Salmorin",
|
|
"Salrissa",
|
|
"Samalend",
|
|
"Samerlan",
|
|
"Sancial",
|
|
"Sannsara",
|
|
"Sanorye",
|
|
"Sanpellin",
|
|
"Sanseran",
|
|
"Sanzhara",
|
|
"Saqavar",
|
|
"Sarandere",
|
|
"Saraxa",
|
|
"Sardanak",
|
|
"Sarendril",
|
|
"Sargadal",
|
|
"Sariya",
|
|
"Sarkinos",
|
|
"Sarkozan",
|
|
"Sarlian",
|
|
"Sarmasar",
|
|
"Saro\xEB",
|
|
"Sarozak",
|
|
"Sarrier",
|
|
"Sarrofo",
|
|
"Sarsicaul",
|
|
"Sartenna",
|
|
"Sarupha",
|
|
"Saschalon",
|
|
"Sathlatta",
|
|
"Satrothan",
|
|
"Sav\xEAma",
|
|
"Savretos",
|
|
"Savria",
|
|
"Scathanar",
|
|
"Scesefna",
|
|
"Sebandune",
|
|
"Selamvra",
|
|
"Selestor",
|
|
"Selial",
|
|
"Selidro",
|
|
"Selior",
|
|
"Selmiar",
|
|
"Selnara",
|
|
"Selnia",
|
|
"Selsabar",
|
|
"Selverel",
|
|
"Semarsen",
|
|
"Semdalice",
|
|
"Semmagel",
|
|
"Semurquan",
|
|
"Sendara",
|
|
"Senoster",
|
|
"Seorra",
|
|
"Sepiroth",
|
|
"Seprenal",
|
|
"Sepria",
|
|
"Serakel",
|
|
"Serambast",
|
|
"Seramir",
|
|
"Serefic",
|
|
"Serrios",
|
|
"Sertumen",
|
|
"Servelen",
|
|
"Serydran",
|
|
"Seskandal",
|
|
"Sevandir",
|
|
"Sevandor",
|
|
"Severique",
|
|
"Severlesk",
|
|
"Sevlasn\xE9",
|
|
"Seytarin",
|
|
"Sfaeriqua",
|
|
"Sferalan",
|
|
"Sferio",
|
|
"Shaikala",
|
|
"Shalimed",
|
|
"Shameera",
|
|
"Shanatherl",
|
|
"Shanderzoth",
|
|
"Sharajsha",
|
|
"Sharbremil",
|
|
"Shardovan",
|
|
"Sharretal",
|
|
"Shaxe\xE4n",
|
|
"Shehallem",
|
|
"Shekkazad",
|
|
"Sherethis",
|
|
"Sherina",
|
|
"Sherotha",
|
|
"Shevrian",
|
|
"Shibema",
|
|
"Shiennith",
|
|
"Shildakor",
|
|
"Shimjian",
|
|
"Sholgonda",
|
|
"Shragonach",
|
|
"Shrymaroyne",
|
|
"Shurakai",
|
|
"Shushila",
|
|
"Sialtaan",
|
|
"Sianar",
|
|
"Siandar",
|
|
"Siandor",
|
|
"Siannem",
|
|
"Sidanzar",
|
|
"Siendred",
|
|
"Sientij",
|
|
"Sientrib",
|
|
"Siflana",
|
|
"Sigilla",
|
|
"Sildengold",
|
|
"Silifer",
|
|
"Silistel",
|
|
"Silivis",
|
|
"Silmriel",
|
|
"Silvarak",
|
|
"Silvronom",
|
|
"Simara",
|
|
"Simblio",
|
|
"Simirling",
|
|
"Simisthir",
|
|
"Simrana",
|
|
"Simusha",
|
|
"Sindaract",
|
|
"Sindiris",
|
|
"Sindiroq",
|
|
"Sinhadak",
|
|
"Sinira",
|
|
"Sinoprin",
|
|
"Siortlen",
|
|
"Sioshorl",
|
|
"Sirelu",
|
|
"Sirenel",
|
|
"Sirgamesc",
|
|
"Sirifrix",
|
|
"Sirinar",
|
|
"Sisimar",
|
|
"Sisimbra",
|
|
"Siugorn",
|
|
"Sjalara",
|
|
"Skalidra",
|
|
"Skelalack",
|
|
"Skelogha",
|
|
"Skelother",
|
|
"Skesira",
|
|
"Slanarra",
|
|
"Slanria",
|
|
"Slenlior",
|
|
"Slevindralsk",
|
|
"Slyrmegnel",
|
|
"Sofrego",
|
|
"Sofurin",
|
|
"Soleddin",
|
|
"Solfellan",
|
|
"Soliroq",
|
|
"Solliot",
|
|
"Solmerip",
|
|
"Soltharan",
|
|
"Somagar",
|
|
"Sondaardrel",
|
|
"Sondrelen",
|
|
"Soomerak",
|
|
"Soquallin",
|
|
"Sorasta",
|
|
"Sormian",
|
|
"Sozmerold",
|
|
"Srandelix",
|
|
"Sravoorin",
|
|
"Steraval",
|
|
"Sthinalel",
|
|
"Stiaver",
|
|
"Stivernach",
|
|
"Sudevim",
|
|
"Sufranar",
|
|
"Suilim",
|
|
"Sujorgni",
|
|
"Sukratak",
|
|
"Sulathaag",
|
|
"Sulethri",
|
|
"Suliane",
|
|
"Sulien",
|
|
"Sulimo",
|
|
"Sulkanar",
|
|
"Sulkari",
|
|
"Sulron\xE9",
|
|
"Surmaris",
|
|
"Suruay",
|
|
"Suzamil",
|
|
"Svialdan",
|
|
"Swangoren",
|
|
"Sweiborla",
|
|
"Sylvetane",
|
|
"Symaril",
|
|
"Syriolg",
|
|
"Syzirept",
|
|
"Szivistri",
|
|
"Taalivex",
|
|
"Tabusaad",
|
|
"Tadasli",
|
|
"Tafashic",
|
|
"Tainbara",
|
|
"Taladere",
|
|
"Talareme",
|
|
"Talarin",
|
|
"Talertus",
|
|
"Talien",
|
|
"Taliess",
|
|
"Talieux",
|
|
"Talion",
|
|
"Talislance",
|
|
"Talmora",
|
|
"Taloxar",
|
|
"Taloxi",
|
|
"Talunon",
|
|
"Tamavold",
|
|
"Tamias",
|
|
"Tamioj",
|
|
"Tamlivran",
|
|
"Tamnithir",
|
|
"Tanafin",
|
|
"Tanakord",
|
|
"Tanier",
|
|
"Tanjalas",
|
|
"Tanjara",
|
|
"Tanseral",
|
|
"Tanviu",
|
|
"Tarakus",
|
|
"Taramag",
|
|
"Taramos",
|
|
"Tardelin",
|
|
"Tariaj",
|
|
"Tarkenthos",
|
|
"Tarmesorn",
|
|
"Tarmioc",
|
|
"Taroya",
|
|
"Tasardy",
|
|
"Taslhiot",
|
|
"Tassafert",
|
|
"Tassiran",
|
|
"Taumonar",
|
|
"Taveli",
|
|
"Tavista",
|
|
"Tayaren",
|
|
"Te\xE4nyn",
|
|
"Tegana",
|
|
"Tegleron",
|
|
"Teirajan",
|
|
"Teirishir",
|
|
"Telarna",
|
|
"Telcyra",
|
|
"Teldrua",
|
|
"Telegris",
|
|
"Telendys",
|
|
"Teleura",
|
|
"Telnarzim",
|
|
"Temeris",
|
|
"Temeslin",
|
|
"Temmosus",
|
|
"Temontel",
|
|
"Tenadas",
|
|
"Tenidrist",
|
|
"Teotsir",
|
|
"Terasiln",
|
|
"Terejoen",
|
|
"Terena",
|
|
"Terquaelen",
|
|
"Terrenus",
|
|
"Terthelej",
|
|
"Terthyrkrim",
|
|
"Terva\xEBn",
|
|
"Tesmarrak",
|
|
"Tevala",
|
|
"Tezarim",
|
|
"Thadarin",
|
|
"Thalafer",
|
|
"Thalaras",
|
|
"Thalira",
|
|
"Thalladyle",
|
|
"Thameera",
|
|
"Thamiel",
|
|
"Thanalar",
|
|
"Tharamoon",
|
|
"Tharnia",
|
|
"Tharomyl",
|
|
"Tharoval",
|
|
"Thellikkin",
|
|
"Thelodin",
|
|
"Thereski",
|
|
"Thieras",
|
|
"Thieryn",
|
|
"Thirindon",
|
|
"Thithrama",
|
|
"Thitrivar",
|
|
"Thixagen",
|
|
"Thlenedern",
|
|
"Thlunarna",
|
|
"Thoorana",
|
|
"Thrabanquo",
|
|
"Thumithar",
|
|
"Thurmatoth",
|
|
"Thuuvanar",
|
|
"Tiabrell",
|
|
"Tiachul",
|
|
"Tianan",
|
|
"Tiaosut",
|
|
"Tiaxa",
|
|
"Tiazan",
|
|
"Tiefkol",
|
|
"Tifulgar",
|
|
"Tigrana",
|
|
"Tirages",
|
|
"Tiregam",
|
|
"Tirelev",
|
|
"Tirion",
|
|
"Tirlimist",
|
|
"Tirrasthu",
|
|
"Tissawane",
|
|
"Titia",
|
|
"Tivadul",
|
|
"Tiveran",
|
|
"Tivriex",
|
|
"Tiyagar",
|
|
"Tizvian",
|
|
"Tolarim",
|
|
"Tolarmej",
|
|
"Tolenka",
|
|
"Tolibell",
|
|
"Toramus",
|
|
"Torbera",
|
|
"Torgassin",
|
|
"Torlion",
|
|
"Tormitran",
|
|
"Toro\xE4sh",
|
|
"Toroman",
|
|
"Torquenyx",
|
|
"Torresind",
|
|
"Torsamant",
|
|
"Torzundus",
|
|
"Tothirnal",
|
|
"Tralien",
|
|
"Tralquien",
|
|
"Traviod",
|
|
"Tredestin",
|
|
"Trellium",
|
|
"Trenaevis",
|
|
"Trilajo",
|
|
"Trinezhan",
|
|
"Triolus",
|
|
"Trisdestrin",
|
|
"Troviawn",
|
|
"Trydaron",
|
|
"Trysadon",
|
|
"Tsacramal",
|
|
"Tsalkoril",
|
|
"Tuilleth",
|
|
"Tulio",
|
|
"Tuniger",
|
|
"Turmalin",
|
|
"Turobel",
|
|
"Turvesin",
|
|
"Twanalor",
|
|
"Twillessin",
|
|
"Tylastreen",
|
|
"Tyldora",
|
|
"Tylenea",
|
|
"Tyradin",
|
|
"Tyrathis",
|
|
"Tyrtyra",
|
|
"Tzaroli",
|
|
"Ualosk",
|
|
"Ubdakon",
|
|
"Udanax",
|
|
"Udanib",
|
|
"Udefoin",
|
|
"Udrahart",
|
|
"Udria",
|
|
"Ufanort",
|
|
"Ufial",
|
|
"Ugivor",
|
|
"Uilda",
|
|
"Uilric",
|
|
"Uixet",
|
|
"Ukinorn",
|
|
"Ulanthas",
|
|
"Ulember",
|
|
"Ulendal",
|
|
"Ullifan",
|
|
"Ulnavell",
|
|
"Ulnaxdra",
|
|
"Ulrepin",
|
|
"Ulro\xEBnce",
|
|
"Umaspin",
|
|
"Umbraheed",
|
|
"Umbrina",
|
|
"Umerac",
|
|
"Umeri",
|
|
"Umikrel",
|
|
"Umistal",
|
|
"Undalryn",
|
|
"Unedrinj",
|
|
"Unkalisk",
|
|
"Unstoffel",
|
|
"Ura\xF6r",
|
|
"Urghazkoy",
|
|
"Urhankren",
|
|
"Urimnor",
|
|
"Urjalum",
|
|
"Urjaya",
|
|
"Urmalgis",
|
|
"Urrelor",
|
|
"Urzunift",
|
|
"Uscrumine",
|
|
"Usegar",
|
|
"Ushamtar",
|
|
"Usigul",
|
|
"Uskanast",
|
|
"Ussala",
|
|
"Ussolec",
|
|
"Ustaleaugh",
|
|
"Uthudain",
|
|
"Utorel",
|
|
"Uveena",
|
|
"Uxavis",
|
|
"Uxinor",
|
|
"Uxuvi",
|
|
"Uzileth",
|
|
"Uziprost",
|
|
"Uzirin",
|
|
"Uzisloj",
|
|
"Vacru\xEBx",
|
|
"Vakrissa",
|
|
"Valabar",
|
|
"Valadan",
|
|
"Valagarth",
|
|
"Valandrib",
|
|
"Valarend",
|
|
"Valarom",
|
|
"Valaxis",
|
|
"Valdera",
|
|
"Valfoxel",
|
|
"Valina",
|
|
"Valion",
|
|
"Valistes",
|
|
"Vallia",
|
|
"Valmerac",
|
|
"Valphanar",
|
|
"Valserna",
|
|
"Valterla",
|
|
"Valthom\xE9",
|
|
"Vanamon",
|
|
"Vanara",
|
|
"Vanathil",
|
|
"Vandelex",
|
|
"Vanegrin",
|
|
"Vangrahzmid",
|
|
"Vantarad",
|
|
"Varamanx",
|
|
"Varamid",
|
|
"Varamis",
|
|
"Varcantis",
|
|
"Varchimas",
|
|
"Varkellit",
|
|
"Varlandel",
|
|
"Varra\xEBl",
|
|
"Varrakel",
|
|
"Vashlion",
|
|
"Vasmarro",
|
|
"Vaudirek",
|
|
"Vayemis",
|
|
"Vedaraf",
|
|
"Veezpro\xE4",
|
|
"Velaila",
|
|
"Velanac",
|
|
"Velija",
|
|
"Velina",
|
|
"Velior",
|
|
"Velissa",
|
|
"Velozma",
|
|
"Velvermeld",
|
|
"Vendramyr",
|
|
"Veneska",
|
|
"Venithros",
|
|
"Venmarenc",
|
|
"Vercazlyde",
|
|
"Vereedra",
|
|
"Verenice",
|
|
"Vereska",
|
|
"Verethest",
|
|
"Verissrad",
|
|
"Verolant",
|
|
"Verowa",
|
|
"Vervadesce",
|
|
"Ververine",
|
|
"Veslomere",
|
|
"Vetrengarr",
|
|
"Vettemis",
|
|
"Vhiallon",
|
|
"Viastin",
|
|
"Viastra",
|
|
"Videla",
|
|
"Videssos",
|
|
"Viero",
|
|
"Vilirast",
|
|
"Vilrokin",
|
|
"Vilscelyn",
|
|
"Viomer",
|
|
"Virandisp",
|
|
"Virenar",
|
|
"Virensa",
|
|
"Virjauruk",
|
|
"Virosanne",
|
|
"Virthuren",
|
|
"Vismarun",
|
|
"Visperime",
|
|
"Vixuad",
|
|
"Vixu\xEBl",
|
|
"Vizina",
|
|
"Vladilesk",
|
|
"Vlarobaal",
|
|
"Voiop\xEB",
|
|
"Vojeera",
|
|
"Voldisterre",
|
|
"Volkazen",
|
|
"Volmaran",
|
|
"Voluru",
|
|
"Vonidar",
|
|
"Voozcoreme",
|
|
"Voranor",
|
|
"Vorchazel",
|
|
"Vorelgin",
|
|
"Vorien",
|
|
"Vornica",
|
|
"Vornovas",
|
|
"Vorquemand",
|
|
"Vorunir",
|
|
"Vorvadoss",
|
|
"Vosmerrel",
|
|
"Vossari",
|
|
"Vozmarald",
|
|
"Vrepimus",
|
|
"Vrilestamn",
|
|
"Vristamor",
|
|
"Vu\xEBthar",
|
|
"Walspinore",
|
|
"Wandalar",
|
|
"Wanestka",
|
|
"Wantorak",
|
|
"Wardlanof",
|
|
"Warlwier",
|
|
"Warrigel",
|
|
"Wascramin",
|
|
"Wasmo\xEBt",
|
|
"Watreyan",
|
|
"Wazerac",
|
|
"Wedonal",
|
|
"Welmerel",
|
|
"Wendower",
|
|
"Werrelet",
|
|
"Werscunok",
|
|
"Weverin",
|
|
"Wexavin",
|
|
"Whallifrond",
|
|
"Whearius",
|
|
"Whibmistle",
|
|
"Wianna",
|
|
"Wicardod",
|
|
"Widzoonaev",
|
|
"Wignaja",
|
|
"Wiinecot",
|
|
"Winian",
|
|
"Wodhrian",
|
|
"Woringel",
|
|
"Woxethoon",
|
|
"Wrodlian",
|
|
"Wurzemand",
|
|
"Wyliath",
|
|
"Xadamos",
|
|
"Xadogar",
|
|
"Xaisuruk",
|
|
"Xalorof",
|
|
"Xanafel",
|
|
"Xanalver",
|
|
"Xanbiah",
|
|
"Xania",
|
|
"Xantenmec",
|
|
"Xanxia",
|
|
"Xaraata",
|
|
"Xargusull",
|
|
"Xarthia",
|
|
"Xeelafarl",
|
|
"Xeelona",
|
|
"Xegessem",
|
|
"Xelica",
|
|
"Xemeret",
|
|
"Xemindar",
|
|
"Xenia",
|
|
"Xeralisk",
|
|
"Xerdelisse",
|
|
"Xerechron",
|
|
"Xhalsadan",
|
|
"Xhanazlet",
|
|
"Xhodrovan",
|
|
"Xibalba",
|
|
"Xiifrani",
|
|
"Ximahlto",
|
|
"Ximakran",
|
|
"Ximodi",
|
|
"Xirian",
|
|
"Xirijasp",
|
|
"Xo\xE4non",
|
|
"Xomdiral",
|
|
"Xorandor",
|
|
"Xoryalan",
|
|
"Xyaria",
|
|
"Yaimondar",
|
|
"Yakovar",
|
|
"Yakthodah",
|
|
"Yalduvar",
|
|
"Yaliath",
|
|
"Yallarna",
|
|
"Yallorind",
|
|
"Yalveron",
|
|
"Yamala",
|
|
"Yamindra",
|
|
"Yandelar",
|
|
"Yandrahla",
|
|
"Yaralet",
|
|
"Yarial",
|
|
"Yarillo",
|
|
"Yarzolept",
|
|
"Yashengzeb",
|
|
"Yathagault",
|
|
"Yathoric",
|
|
"Yathorlak",
|
|
"Ybalil",
|
|
"Ybranar",
|
|
"Yeltranal",
|
|
"Yelu\xF6z",
|
|
"Yemanthal",
|
|
"Yemboloth",
|
|
"Yerdien",
|
|
"Yesgolod",
|
|
"Yevjarel",
|
|
"Yfremoon",
|
|
"Ygristan",
|
|
"Yhantu\xF6r",
|
|
"Yldejaste",
|
|
"Ymarisce",
|
|
"Ymbria",
|
|
"Yncaarim",
|
|
"Yohonough",
|
|
"Yonraloth",
|
|
"Yoplossa",
|
|
"Yoredan",
|
|
"Yormexoon",
|
|
"Yranthis",
|
|
"Yratos",
|
|
"Yrcanos",
|
|
"Yronthol",
|
|
"Yrwelos",
|
|
"Yryloth",
|
|
"Ythlyra",
|
|
"Ythribond",
|
|
"Yurnada",
|
|
"Yusperal",
|
|
"Yuzigral",
|
|
"Zaamontel",
|
|
"Zadamun",
|
|
"Zadipan",
|
|
"Zadrowane",
|
|
"Zagrenxa",
|
|
"Zaharbif",
|
|
"Zajrenja",
|
|
"Zakiwya",
|
|
"Zalagi",
|
|
"Zalanath",
|
|
"Zalazar",
|
|
"Zalberek",
|
|
"Zalremy",
|
|
"Zamberel",
|
|
"Zamblezur",
|
|
"Zamora",
|
|
"Zamordax",
|
|
"Zamorla",
|
|
"Zanatir",
|
|
"Zanestra",
|
|
"Zangabal",
|
|
"Zanindil",
|
|
"Zanreynad",
|
|
"Zantifer",
|
|
"Zanzinel",
|
|
"Zaraana",
|
|
"Zaranave",
|
|
"Zaranax",
|
|
"Zarfhaano",
|
|
"Zarimarth",
|
|
"Zathmandar",
|
|
"Zayzazi",
|
|
"Zazamanc",
|
|
"Zazumel",
|
|
"Zazwinoon",
|
|
"Zebalan",
|
|
"Zefaeran",
|
|
"Zefrondus",
|
|
"Zelemorn",
|
|
"Zelgadis",
|
|
"Zellinet",
|
|
"Zelmarine",
|
|
"Zelprothon",
|
|
"Zemanthel",
|
|
"Zemirtol",
|
|
"Zenaxa",
|
|
"Zenilyeth",
|
|
"Zenithral",
|
|
"Zenorsha",
|
|
"Zentrigar",
|
|
"Zeosard",
|
|
"Zephiron",
|
|
"Zequiel",
|
|
"Zeranoj",
|
|
"Zhelavon",
|
|
"Zhemaeta",
|
|
"Ziacalt",
|
|
"Zifidin",
|
|
"Zilkorlaz",
|
|
"Ziraldra",
|
|
"Zirdarbis",
|
|
"Zirzihin",
|
|
"Zo\xE4lmar",
|
|
"Zo\xE4ndrik",
|
|
"Zo\xE4var",
|
|
"Zochiad",
|
|
"Zodolin",
|
|
"Zoltaren",
|
|
"Zominor",
|
|
"Zoramus",
|
|
"Zoranji",
|
|
"Zorashad",
|
|
"Zorayas",
|
|
"Zorestrel",
|
|
"Zorewyr",
|
|
"Zoroma",
|
|
"Zoromesh",
|
|
"Zosmindo",
|
|
"Zotaquaan",
|
|
"Zotheera",
|
|
"Zozminod",
|
|
"Zubvuysa",
|
|
"Zulaeram",
|
|
"Zulpirek",
|
|
"Zurenkin",
|
|
"Zurliban",
|
|
"Zydaraf",
|
|
"Zylarthen",
|
|
"Zyramythe",
|
|
"Zytavirk"
|
|
],
|
|
more: [
|
|
"Abadapnyr",
|
|
"Abrethendar",
|
|
"Acrasian",
|
|
"Adario",
|
|
"Adieseth",
|
|
"Adilikor",
|
|
"Adinalar",
|
|
"Adriaxa",
|
|
"Afelanidd",
|
|
"Aforvalon",
|
|
"Agiora",
|
|
"Agreliwin",
|
|
"Aguidran",
|
|
"Aguilla",
|
|
"Aikikia",
|
|
"Akitarka",
|
|
"Alanahetra",
|
|
"Alarion",
|
|
"Alartia",
|
|
"Alarurigu",
|
|
"Alcidio",
|
|
"Aldarian",
|
|
"Alelakon",
|
|
"Aleshmara",
|
|
"Aletorim",
|
|
"Aleuworust",
|
|
"Alianala",
|
|
"Alicindra",
|
|
"Allessanya",
|
|
"Alorassanz",
|
|
"Amafeyan",
|
|
"Amathenar",
|
|
"Amdaramast",
|
|
"Amiria",
|
|
"Amriffien",
|
|
"Anaumiantis",
|
|
"Anelofar",
|
|
"Angetenar",
|
|
"Angurvidel",
|
|
"Animeldio",
|
|
"Anixido",
|
|
"Ankitarla",
|
|
"Ansamanthion",
|
|
"Ansimantar",
|
|
"Anspiladri",
|
|
"Antillia",
|
|
"Aphiana",
|
|
"Aptolcater",
|
|
"Aptrinuptium",
|
|
"Aquilia",
|
|
"Aradlum\xE9",
|
|
"Araledek",
|
|
"Aramanzom",
|
|
"Aramestor",
|
|
"Arania",
|
|
"Arazederu",
|
|
"Arazynxa",
|
|
"Ardzefurith",
|
|
"Arezia",
|
|
"Arhilian",
|
|
"Arianroth",
|
|
"Ariaria",
|
|
"Ariaxoc",
|
|
"Arismaspia",
|
|
"Ariyava",
|
|
"Armalisrah",
|
|
"Aroxian",
|
|
"Arrolian",
|
|
"Arsevalin",
|
|
"Artalien",
|
|
"Aruzustin",
|
|
"Arzangiran",
|
|
"Asalirin",
|
|
"Asarlia",
|
|
"Asicia",
|
|
"Aslambarash",
|
|
"Aslerion",
|
|
"Asthania",
|
|
"Asuricorm",
|
|
"Atarana",
|
|
"Athiana",
|
|
"Athlebasia",
|
|
"Athoriel",
|
|
"Atiaran",
|
|
"Aulurien",
|
|
"Avalenar",
|
|
"Avanimmerl",
|
|
"Avelembai",
|
|
"Aviathar",
|
|
"Axajaxas",
|
|
"Azeledim",
|
|
"Azgelazgus",
|
|
"Aziria",
|
|
"Barosathlom",
|
|
"Barylophar",
|
|
"Bazkalia",
|
|
"Beledira",
|
|
"Belintraia",
|
|
"Belrablion",
|
|
"Borosiyan",
|
|
"Bradullio",
|
|
"Brodalcaflar",
|
|
"Cajarrida",
|
|
"Calane\xFCs",
|
|
"Calasapia",
|
|
"Caldiloran",
|
|
"Caleria",
|
|
"Calgalcandar",
|
|
"Calidundarios",
|
|
"Calliwelleran",
|
|
"Calmamelis",
|
|
"Caratrothis",
|
|
"Carthazian",
|
|
"Casrinian",
|
|
"Cassrimello",
|
|
"Cauditrice\xE4",
|
|
"Cerelama",
|
|
"Chaestebalon",
|
|
"Chalirio",
|
|
"Cha\xF6lthanesh",
|
|
"Chisirion",
|
|
"Cinariyan",
|
|
"Cinnarath",
|
|
"Cirthavion",
|
|
"Co\xE4berul",
|
|
"Co\xEBxitaq",
|
|
"Coranco\xE4n",
|
|
"Coreliad",
|
|
"Corrilisan",
|
|
"Cossario",
|
|
"Crotimian",
|
|
"Cuidurjau",
|
|
"Cymoria",
|
|
"Dajuvius",
|
|
"Dakrolidur",
|
|
"Dameraxia",
|
|
"Daraviel",
|
|
"Daraztheon",
|
|
"Darsimala",
|
|
"Darsurion",
|
|
"Dassalpian",
|
|
"Daxxihidil",
|
|
"Delrinian",
|
|
"Demasaran",
|
|
"Demeriolet",
|
|
"Devaloka",
|
|
"Diamerune",
|
|
"Dicadoran",
|
|
"Didoria",
|
|
"Dinrudromon",
|
|
"Dirinnia",
|
|
"Dolohies",
|
|
"Dophinrian",
|
|
"Dornatentorl",
|
|
"Drevixibrind",
|
|
"Drexorvion",
|
|
"Duralica",
|
|
"Dyskilian",
|
|
"E\xE4lisen",
|
|
"E\xE4tinor",
|
|
"Ebriany",
|
|
"Eclaramon",
|
|
"Efarion",
|
|
"Efiranlas",
|
|
"Egajia",
|
|
"Eglaharant",
|
|
"Eglantarask",
|
|
"Elantargin",
|
|
"Elarial",
|
|
"Eleglorross",
|
|
"Elianna",
|
|
"Elisdriel",
|
|
"Elivint\xE9",
|
|
"Ellyria",
|
|
"Elorta\xF6l",
|
|
"Eltaria",
|
|
"Elverion",
|
|
"Elysia",
|
|
"Emelesis",
|
|
"Emelsyna",
|
|
"Enstarlamyn",
|
|
"Entalaroth",
|
|
"Epimissia",
|
|
"Erejitha",
|
|
"Eremiess",
|
|
"Erengazor",
|
|
"Erigia",
|
|
"Erivalda",
|
|
"Escalinian",
|
|
"Escamorid",
|
|
"Eschurioz",
|
|
"Esmerashard",
|
|
"Esnaramik",
|
|
"Etheriasa",
|
|
"Etianor",
|
|
"Etybrinel",
|
|
"Ezaltarem",
|
|
"Ezellohar",
|
|
"Faedulias",
|
|
"Falastien",
|
|
"Falerio",
|
|
"Falyrias",
|
|
"Farsemnithal",
|
|
"Favaijeness",
|
|
"Felarica",
|
|
"Felmarien",
|
|
"Feresilmar",
|
|
"Fiarazio",
|
|
"Fiespegar",
|
|
"Fimalemuen",
|
|
"Finactias",
|
|
"Fiormezath",
|
|
"Firvintilis",
|
|
"Flamorriwisp",
|
|
"Flaxifyglar",
|
|
"Fo\xE4zekov",
|
|
"Folsalino",
|
|
"Frixalissa",
|
|
"Fusafandra",
|
|
"Fuvusarooz",
|
|
"Gaflorinos",
|
|
"Galathanax",
|
|
"Galdviara",
|
|
"Galirrhyalen",
|
|
"Gambrimanthus",
|
|
"Ganthelios",
|
|
"Ganvarathimyr",
|
|
"Garlinian",
|
|
"Gauribanon",
|
|
"Gazaforen",
|
|
"Geluru\xEBm",
|
|
"Gemaleon",
|
|
"Ghondaliom",
|
|
"Giavicel",
|
|
"Gikishika",
|
|
"Gorvonia",
|
|
"Halremsolath",
|
|
"Hanciara",
|
|
"Harfelengol",
|
|
"Hatuina",
|
|
"Hazrathsimoon",
|
|
"Hazrinivra",
|
|
"Herazibrax",
|
|
"Hiabezur",
|
|
"Hidolebni",
|
|
"Hipalonin",
|
|
"Hizzlechaltezeme",
|
|
"Hlantremi\xEBr",
|
|
"Hovancomi",
|
|
"Hurania",
|
|
"Hyfe\xE4ntio",
|
|
"Ibaletri",
|
|
"Idriella",
|
|
"Ierendi",
|
|
"Igadiax",
|
|
"Iglithebem",
|
|
"Ilanayom",
|
|
"Ilerida",
|
|
"Ilirsiya",
|
|
"Ilizio",
|
|
"Illemestri",
|
|
"Ilminaris",
|
|
"Impelia",
|
|
"Inikia",
|
|
"Inthe\xE4nereon",
|
|
"Ionellza",
|
|
"Iongua",
|
|
"Iophroster",
|
|
"Iptameela",
|
|
"Irgasia",
|
|
"Iskarnia",
|
|
"Iuzator",
|
|
"Ixiosyne",
|
|
"Izmirodon",
|
|
"Jachoriax",
|
|
"Jakanuin",
|
|
"Jalanochlan",
|
|
"Jaleduin",
|
|
"Jandrebliash",
|
|
"Jaralectan",
|
|
"Jarchesmadis",
|
|
"Javethiel",
|
|
"Jelanjaztor",
|
|
"Jemalkhiri",
|
|
"Jemarixtesen",
|
|
"Jirchesmiod",
|
|
"Juaxmanar",
|
|
"Jurelisma",
|
|
"Kadarion",
|
|
"Kagilia",
|
|
"Kalenizin",
|
|
"Kalienlod",
|
|
"Kalpalanin",
|
|
"Kandathama",
|
|
"Kanthamio",
|
|
"Karania",
|
|
"Kardamordax",
|
|
"Karethezam",
|
|
"Karisempatur",
|
|
"Karriasal",
|
|
"Karthassily",
|
|
"Kastrevelda",
|
|
"Katanmaral",
|
|
"Kemeroxel",
|
|
"Keolotrest",
|
|
"Keremelar",
|
|
"Kerisiar",
|
|
"Khalatulajax",
|
|
"Khrysarlion",
|
|
"Kikianik",
|
|
"Kiralizur",
|
|
"Kishidega",
|
|
"Koquilgion",
|
|
"Kryslaria",
|
|
"Lalarian",
|
|
"Lamamelis",
|
|
"Lamdiraka",
|
|
"Lamirila",
|
|
"Lamotridac",
|
|
"Lantessorax",
|
|
"Larasajan",
|
|
"Laschiantria",
|
|
"Lauaxeta",
|
|
"Laziarlan",
|
|
"Lemesprie",
|
|
"Leoniax",
|
|
"Lepeduin",
|
|
"Lialasia",
|
|
"Liquilioss",
|
|
"Lirrissia",
|
|
"Locrama\xEBl",
|
|
"Ludurafet",
|
|
"Luithiole",
|
|
"Lyzalian",
|
|
"Lyzeoldir",
|
|
"Maheriel",
|
|
"Majezre\xE4l",
|
|
"Malabderas",
|
|
"Malantiggar",
|
|
"Malasteon",
|
|
"Malevila",
|
|
"Malyremeth",
|
|
"Manariasc",
|
|
"Maranduax",
|
|
"Marassumar",
|
|
"Maresedin",
|
|
"Marillia",
|
|
"Marzaranax",
|
|
"Mathranislom",
|
|
"Maudrosnia",
|
|
"Mayulisas",
|
|
"Medricaeldo",
|
|
"Meliabrak",
|
|
"Meliadoul",
|
|
"Melidium",
|
|
"Meliofard",
|
|
"Melismond\xE9",
|
|
"Melkandoro",
|
|
"Melozathel",
|
|
"Melusinnia",
|
|
"Mereniax",
|
|
"Meresinapt",
|
|
"Mermiculex",
|
|
"Metebelvis",
|
|
"Mianjira",
|
|
"Milinderra",
|
|
"Mirelassar",
|
|
"Mirianis",
|
|
"Mirtagarkarit",
|
|
"Mo\xE4thyalond",
|
|
"Momelsia",
|
|
"Morasina",
|
|
"Morciana",
|
|
"Moriliem",
|
|
"Morilioth",
|
|
"Muathazaglimid",
|
|
"Mylakhrion",
|
|
"Myrraxion",
|
|
"Myrristica",
|
|
"Naburios",
|
|
"Nanieroj",
|
|
"Narasia",
|
|
"Narjiona",
|
|
"Narragazkara",
|
|
"Narzelduin",
|
|
"Nemmaridus",
|
|
"Nempifermal",
|
|
"Nerovius",
|
|
"Nevalrimyr",
|
|
"Nevinlemnus",
|
|
"Nichoriam",
|
|
"Nimrathelet",
|
|
"Nissebaral",
|
|
"Niziliom",
|
|
"Nohbirrian",
|
|
"Octramadus",
|
|
"Ohirial",
|
|
"Okarbia",
|
|
"Okpralio",
|
|
"Olemerrin",
|
|
"Oloscendivarn",
|
|
"Onnurian",
|
|
"Opacalia",
|
|
"Orathiris",
|
|
"Orbicritis",
|
|
"Orialex",
|
|
"Oriastus",
|
|
"Orissanat",
|
|
"Ormallivir",
|
|
"Ormeria",
|
|
"Orrizia",
|
|
"Orroptio",
|
|
"Orthaxifer",
|
|
"Orviliach",
|
|
"Otolvian",
|
|
"Pactinasa",
|
|
"Palzyriax",
|
|
"Panaxcrador",
|
|
"Panthioleed",
|
|
"Paolalian",
|
|
"Pelemurto",
|
|
"Pelluxia",
|
|
"Pemelojurg",
|
|
"Pemulinaan",
|
|
"Perjauruan",
|
|
"Phayzelobion",
|
|
"Phomechelian",
|
|
"Phorissital",
|
|
"Piartamisk",
|
|
"Pirou\xEBtta",
|
|
"Pluzemelar",
|
|
"Pomivarno\xEBn",
|
|
"Pyrvinrian",
|
|
"Quanamelis",
|
|
"Quarlusian",
|
|
"Quelidia",
|
|
"Quelizantor",
|
|
"Querrulian",
|
|
"Quetradendith",
|
|
"Rajanthesina",
|
|
"Rakanamet",
|
|
"Ramantasset",
|
|
"Ranasceleb",
|
|
"Rasanathan",
|
|
"Rathelemen",
|
|
"Ravannifer",
|
|
"Reondoresin",
|
|
"Rhazazarak",
|
|
"Rhiadirask",
|
|
"Roxifalcor",
|
|
"Rozalro\xE4th",
|
|
"Ru\xE4lia",
|
|
"Rudliptalin",
|
|
"Rufomella",
|
|
"Rulinian",
|
|
"Runevara",
|
|
"Ruzultrejest",
|
|
"Rylissilin",
|
|
"Saboorakel",
|
|
"Sadonakai",
|
|
"Saegdondakhar",
|
|
"Salletifian",
|
|
"Sandurion",
|
|
"Sanoreya",
|
|
"Sapelintir",
|
|
"Sarantimar",
|
|
"Sarathia",
|
|
"Sarpemethe\xE4n",
|
|
"Sarrabhluil",
|
|
"Sartenia",
|
|
"Saterbia",
|
|
"Scarliherin",
|
|
"Scoramant\xE9",
|
|
"Semnegarius",
|
|
"Serejarand",
|
|
"Seremnaria",
|
|
"Seriastis",
|
|
"Serilia",
|
|
"Seriona",
|
|
"Shadarabar",
|
|
"Sharadjelamir",
|
|
"Sharajamar",
|
|
"Shelarinisse",
|
|
"Shelmorian",
|
|
"Sireelia",
|
|
"Sirezvia",
|
|
"Siriena",
|
|
"Sirulia",
|
|
"Sorolonex",
|
|
"Soromyrium",
|
|
"Sorosilmar",
|
|
"Sphallurian",
|
|
"Sreltaneema",
|
|
"Sulparia",
|
|
"Suularaba",
|
|
"Sylixia",
|
|
"Tallosia",
|
|
"Tamarien",
|
|
"Tapromethyna",
|
|
"Tarachien",
|
|
"Taralian",
|
|
"Tarsmiria",
|
|
"Tasambekeer",
|
|
"Tayenias",
|
|
"Telaswiral",
|
|
"Telaznemor",
|
|
"Temilion",
|
|
"Teniliak",
|
|
"Tercyrian",
|
|
"Thetalia",
|
|
"Thorosiaz",
|
|
"Tiaskelu",
|
|
"Tifalius",
|
|
"Tinzlactiash",
|
|
"Tiriala",
|
|
"Tirunriyek",
|
|
"Tivamtemar",
|
|
"Toraxoran",
|
|
"Torellian",
|
|
"Tormosian",
|
|
"Trystaria",
|
|
"Tsaliveren",
|
|
"Tsardatsira",
|
|
"Tuivoreth",
|
|
"Ugalius",
|
|
"Uguesilar",
|
|
"Uirugan",
|
|
"Ulakrugir",
|
|
"Ulkarien",
|
|
"Ullibunda",
|
|
"Ultharnarath",
|
|
"Umasdalen",
|
|
"Umicia",
|
|
"Unaramand",
|
|
"Unlasnulkai",
|
|
"Unorrehod",
|
|
"Unuvia",
|
|
"Upalumo",
|
|
"Ura\xF6sin",
|
|
"Uttosembuluz",
|
|
"Uxulinak",
|
|
"Valarindio",
|
|
"Valarion",
|
|
"Valaronai",
|
|
"Valeauviej",
|
|
"Varcassian",
|
|
"Veladamar",
|
|
"Velorian",
|
|
"Venzafurome",
|
|
"Vercerenos",
|
|
"Veridia",
|
|
"Vialora",
|
|
"Vilcarien",
|
|
"Vimbrodelthion",
|
|
"Vincarian",
|
|
"Virunia",
|
|
"Vistramisorn",
|
|
"Vreniriab",
|
|
"Vruthalidrom",
|
|
"Vyjeremanx",
|
|
"Vyrania",
|
|
"Werzamerand",
|
|
"Wiernamal",
|
|
"Wrosceltiar",
|
|
"Wyjezinelb",
|
|
"Xacuahatl",
|
|
"Xaeximinar",
|
|
"Xalaibisad",
|
|
"Xalisuri",
|
|
"Xaralien",
|
|
"Xaralyna",
|
|
"Xarilia",
|
|
"Xasseldasene",
|
|
"Xavanimar",
|
|
"Xemelenos",
|
|
"Xilvemzarad",
|
|
"Xiomriest",
|
|
"Xorlanterond",
|
|
"Xorosia",
|
|
"Yamidala",
|
|
"Yamovelhas",
|
|
"Yannavalka",
|
|
"Yarbithresin",
|
|
"Yarmidrian",
|
|
"Yavilana",
|
|
"Yazarrahaj",
|
|
"Yetlioro",
|
|
"Yormanien",
|
|
"Yssarion",
|
|
"Yzaniva",
|
|
"Zabarianx",
|
|
"Zaharsian",
|
|
"Zalrevliaf",
|
|
"Zanzarathool",
|
|
"Zatakruan",
|
|
"Zaulizanir",
|
|
"Zavalliar",
|
|
"Zavalniax",
|
|
"Zekundaloth",
|
|
"Zekundemar",
|
|
"Zelissinfra",
|
|
"Zelobindio",
|
|
"Ziandela",
|
|
"Zicarecem",
|
|
"Zimenaechu",
|
|
"Zofelliara",
|
|
"Zoramatoth",
|
|
"Zulaaria",
|
|
"Zuralion",
|
|
"Zuruxeno",
|
|
"Zuzusilmar",
|
|
"Zwimolio",
|
|
"Zwy\xE4clemon",
|
|
"Zyrissalantisar"
|
|
]
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/lodash.capitalize/index.js
|
|
var require_lodash = __commonJS({
|
|
"node_modules/lodash.capitalize/index.js"(exports, module2) {
|
|
var INFINITY = 1 / 0;
|
|
var symbolTag = "[object Symbol]";
|
|
var rsAstralRange = "\\ud800-\\udfff";
|
|
var rsComboMarksRange = "\\u0300-\\u036f\\ufe20-\\ufe23";
|
|
var rsComboSymbolsRange = "\\u20d0-\\u20f0";
|
|
var rsVarRange = "\\ufe0e\\ufe0f";
|
|
var rsAstral = "[" + rsAstralRange + "]";
|
|
var rsCombo = "[" + rsComboMarksRange + rsComboSymbolsRange + "]";
|
|
var rsFitz = "\\ud83c[\\udffb-\\udfff]";
|
|
var rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")";
|
|
var rsNonAstral = "[^" + rsAstralRange + "]";
|
|
var rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}";
|
|
var rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]";
|
|
var rsZWJ = "\\u200d";
|
|
var reOptMod = rsModifier + "?";
|
|
var rsOptVar = "[" + rsVarRange + "]?";
|
|
var rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*";
|
|
var rsSeq = rsOptVar + reOptMod + rsOptJoin;
|
|
var rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
|
|
var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
|
|
var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + "]");
|
|
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
|
|
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
|
var root = freeGlobal || freeSelf || Function("return this")();
|
|
function asciiToArray(string) {
|
|
return string.split("");
|
|
}
|
|
function hasUnicode(string) {
|
|
return reHasUnicode.test(string);
|
|
}
|
|
function stringToArray(string) {
|
|
return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
|
|
}
|
|
function unicodeToArray(string) {
|
|
return string.match(reUnicode) || [];
|
|
}
|
|
var objectProto = Object.prototype;
|
|
var objectToString = objectProto.toString;
|
|
var Symbol2 = root.Symbol;
|
|
var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
|
|
var symbolToString = symbolProto ? symbolProto.toString : void 0;
|
|
function baseSlice(array, start, end) {
|
|
var index = -1, length = array.length;
|
|
if (start < 0) {
|
|
start = -start > length ? 0 : length + start;
|
|
}
|
|
end = end > length ? length : end;
|
|
if (end < 0) {
|
|
end += length;
|
|
}
|
|
length = start > end ? 0 : end - start >>> 0;
|
|
start >>>= 0;
|
|
var result = Array(length);
|
|
while (++index < length) {
|
|
result[index] = array[index + start];
|
|
}
|
|
return result;
|
|
}
|
|
function baseToString(value) {
|
|
if (typeof value == "string") {
|
|
return value;
|
|
}
|
|
if (isSymbol(value)) {
|
|
return symbolToString ? symbolToString.call(value) : "";
|
|
}
|
|
var result = value + "";
|
|
return result == "0" && 1 / value == -INFINITY ? "-0" : result;
|
|
}
|
|
function castSlice(array, start, end) {
|
|
var length = array.length;
|
|
end = end === void 0 ? length : end;
|
|
return !start && end >= length ? array : baseSlice(array, start, end);
|
|
}
|
|
function createCaseFirst(methodName) {
|
|
return function(string) {
|
|
string = toString(string);
|
|
var strSymbols = hasUnicode(string) ? stringToArray(string) : void 0;
|
|
var chr = strSymbols ? strSymbols[0] : string.charAt(0);
|
|
var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
|
|
return chr[methodName]() + trailing;
|
|
};
|
|
}
|
|
function isObjectLike(value) {
|
|
return !!value && typeof value == "object";
|
|
}
|
|
function isSymbol(value) {
|
|
return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag;
|
|
}
|
|
function toString(value) {
|
|
return value == null ? "" : baseToString(value);
|
|
}
|
|
function capitalize(string) {
|
|
return upperFirst(toString(string).toLowerCase());
|
|
}
|
|
var upperFirst = createCaseFirst("toUpperCase");
|
|
module2.exports = capitalize;
|
|
}
|
|
});
|
|
|
|
// node_modules/lodash.sample/index.js
|
|
var require_lodash2 = __commonJS({
|
|
"node_modules/lodash.sample/index.js"(exports, module2) {
|
|
var MAX_SAFE_INTEGER = 9007199254740991;
|
|
var argsTag = "[object Arguments]";
|
|
var funcTag = "[object Function]";
|
|
var genTag = "[object GeneratorFunction]";
|
|
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
|
function arrayMap(array, iteratee) {
|
|
var index = -1, length = array ? array.length : 0, result = Array(length);
|
|
while (++index < length) {
|
|
result[index] = iteratee(array[index], index, array);
|
|
}
|
|
return result;
|
|
}
|
|
function baseTimes(n, iteratee) {
|
|
var index = -1, result = Array(n);
|
|
while (++index < n) {
|
|
result[index] = iteratee(index);
|
|
}
|
|
return result;
|
|
}
|
|
function baseValues(object, props) {
|
|
return arrayMap(props, function(key) {
|
|
return object[key];
|
|
});
|
|
}
|
|
function overArg(func, transform) {
|
|
return function(arg) {
|
|
return func(transform(arg));
|
|
};
|
|
}
|
|
var objectProto = Object.prototype;
|
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
var objectToString = objectProto.toString;
|
|
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
|
var nativeFloor = Math.floor;
|
|
var nativeKeys = overArg(Object.keys, Object);
|
|
var nativeRandom = Math.random;
|
|
function arrayLikeKeys(value, inherited) {
|
|
var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];
|
|
var length = result.length, skipIndexes = !!length;
|
|
for (var key in value) {
|
|
if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == "length" || isIndex(key, length)))) {
|
|
result.push(key);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function baseKeys(object) {
|
|
if (!isPrototype(object)) {
|
|
return nativeKeys(object);
|
|
}
|
|
var result = [];
|
|
for (var key in Object(object)) {
|
|
if (hasOwnProperty.call(object, key) && key != "constructor") {
|
|
result.push(key);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function baseRandom(lower, upper) {
|
|
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
|
|
}
|
|
function isIndex(value, length) {
|
|
length = length == null ? MAX_SAFE_INTEGER : length;
|
|
return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
|
|
}
|
|
function isPrototype(value) {
|
|
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
|
|
return value === proto;
|
|
}
|
|
function sample(collection) {
|
|
var array = isArrayLike(collection) ? collection : values(collection), length = array.length;
|
|
return length > 0 ? array[baseRandom(0, length - 1)] : void 0;
|
|
}
|
|
function isArguments(value) {
|
|
return isArrayLikeObject(value) && hasOwnProperty.call(value, "callee") && (!propertyIsEnumerable.call(value, "callee") || objectToString.call(value) == argsTag);
|
|
}
|
|
var isArray = Array.isArray;
|
|
function isArrayLike(value) {
|
|
return value != null && isLength(value.length) && !isFunction(value);
|
|
}
|
|
function isArrayLikeObject(value) {
|
|
return isObjectLike(value) && isArrayLike(value);
|
|
}
|
|
function isFunction(value) {
|
|
var tag = isObject(value) ? objectToString.call(value) : "";
|
|
return tag == funcTag || tag == genTag;
|
|
}
|
|
function isLength(value) {
|
|
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
|
}
|
|
function isObject(value) {
|
|
var type = typeof value;
|
|
return !!value && (type == "object" || type == "function");
|
|
}
|
|
function isObjectLike(value) {
|
|
return !!value && typeof value == "object";
|
|
}
|
|
function keys(object) {
|
|
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
|
}
|
|
function values(object) {
|
|
return object ? baseValues(object, keys(object)) : [];
|
|
}
|
|
module2.exports = sample;
|
|
}
|
|
});
|
|
|
|
// node_modules/lodash.endswith/index.js
|
|
var require_lodash3 = __commonJS({
|
|
"node_modules/lodash.endswith/index.js"(exports, module2) {
|
|
var INFINITY = 1 / 0;
|
|
var MAX_INTEGER = 17976931348623157e292;
|
|
var NAN = 0 / 0;
|
|
var symbolTag = "[object Symbol]";
|
|
var reTrim = /^\s+|\s+$/g;
|
|
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
|
var reIsBinary = /^0b[01]+$/i;
|
|
var reIsOctal = /^0o[0-7]+$/i;
|
|
var freeParseInt = parseInt;
|
|
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
|
|
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
|
var root = freeGlobal || freeSelf || Function("return this")();
|
|
var objectProto = Object.prototype;
|
|
var objectToString = objectProto.toString;
|
|
var Symbol2 = root.Symbol;
|
|
var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
|
|
var symbolToString = symbolProto ? symbolProto.toString : void 0;
|
|
function baseClamp(number, lower, upper) {
|
|
if (number === number) {
|
|
if (upper !== void 0) {
|
|
number = number <= upper ? number : upper;
|
|
}
|
|
if (lower !== void 0) {
|
|
number = number >= lower ? number : lower;
|
|
}
|
|
}
|
|
return number;
|
|
}
|
|
function baseToString(value) {
|
|
if (typeof value == "string") {
|
|
return value;
|
|
}
|
|
if (isSymbol(value)) {
|
|
return symbolToString ? symbolToString.call(value) : "";
|
|
}
|
|
var result = value + "";
|
|
return result == "0" && 1 / value == -INFINITY ? "-0" : result;
|
|
}
|
|
function isObject(value) {
|
|
var type = typeof value;
|
|
return !!value && (type == "object" || type == "function");
|
|
}
|
|
function isObjectLike(value) {
|
|
return !!value && typeof value == "object";
|
|
}
|
|
function isSymbol(value) {
|
|
return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag;
|
|
}
|
|
function toFinite(value) {
|
|
if (!value) {
|
|
return value === 0 ? value : 0;
|
|
}
|
|
value = toNumber(value);
|
|
if (value === INFINITY || value === -INFINITY) {
|
|
var sign = value < 0 ? -1 : 1;
|
|
return sign * MAX_INTEGER;
|
|
}
|
|
return value === value ? value : 0;
|
|
}
|
|
function toInteger(value) {
|
|
var result = toFinite(value), remainder = result % 1;
|
|
return result === result ? remainder ? result - remainder : result : 0;
|
|
}
|
|
function toNumber(value) {
|
|
if (typeof value == "number") {
|
|
return value;
|
|
}
|
|
if (isSymbol(value)) {
|
|
return NAN;
|
|
}
|
|
if (isObject(value)) {
|
|
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
|
|
value = isObject(other) ? other + "" : other;
|
|
}
|
|
if (typeof value != "string") {
|
|
return value === 0 ? value : +value;
|
|
}
|
|
value = value.replace(reTrim, "");
|
|
var isBinary = reIsBinary.test(value);
|
|
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
|
|
}
|
|
function toString(value) {
|
|
return value == null ? "" : baseToString(value);
|
|
}
|
|
function endsWith(string, target, position) {
|
|
string = toString(string);
|
|
target = baseToString(target);
|
|
var length = string.length;
|
|
position = position === void 0 ? length : baseClamp(toInteger(position), 0, length);
|
|
var end = position;
|
|
position -= target.length;
|
|
return position >= 0 && string.slice(position, end) == target;
|
|
}
|
|
module2.exports = endsWith;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-name-generator/dist/util/speciesGenerator.js
|
|
var require_speciesGenerator = __commonJS({
|
|
"node_modules/fantasy-name-generator/dist/util/speciesGenerator.js"(exports) {
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var names_1 = require_names();
|
|
var capitalize = require_lodash();
|
|
var sample = require_lodash2();
|
|
var endsWith = require_lodash3();
|
|
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))]);
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-name-generator/dist/util/nameGenerator.js
|
|
var require_nameGenerator = __commonJS({
|
|
"node_modules/fantasy-name-generator/dist/util/nameGenerator.js"(exports) {
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var speciesGenerator_1 = require_speciesGenerator();
|
|
var racesWithGender = [
|
|
"cavePerson",
|
|
"dwarf",
|
|
"halfling",
|
|
"gnome",
|
|
"elf",
|
|
"highelf",
|
|
"fairy",
|
|
"highfairy",
|
|
"darkelf",
|
|
"drow",
|
|
"halfdemon",
|
|
"dragon",
|
|
"angel"
|
|
];
|
|
var otherRaces = ["demon", "human", "goblin", "ogre", "orc"];
|
|
exports.allRaces = {
|
|
otherRaces,
|
|
racesWithGender,
|
|
sorted: function() {
|
|
return racesWithGender.concat(otherRaces).sort();
|
|
}
|
|
};
|
|
exports.generateName = function(race, options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
var gender = options.gender, allowMultipleNames = options.allowMultipleNames;
|
|
if (racesWithGender.includes(race) && gender !== void 0) {
|
|
switch (race) {
|
|
case "angel":
|
|
return speciesGenerator_1.angel(gender);
|
|
case "cavePerson":
|
|
return speciesGenerator_1.cavePerson(gender);
|
|
case "darkelf":
|
|
return speciesGenerator_1.darkelf(gender);
|
|
case "dragon":
|
|
return speciesGenerator_1.dragon(gender);
|
|
case "drow":
|
|
return speciesGenerator_1.drow(gender);
|
|
case "dwarf":
|
|
return speciesGenerator_1.dwarf(gender);
|
|
case "elf":
|
|
return speciesGenerator_1.elf(gender);
|
|
case "fairy":
|
|
return speciesGenerator_1.fairy(gender);
|
|
case "gnome":
|
|
return speciesGenerator_1.gnome(gender);
|
|
case "halfdemon":
|
|
return speciesGenerator_1.halfdemon(gender);
|
|
case "halfling":
|
|
return speciesGenerator_1.halfling(gender);
|
|
case "highelf":
|
|
return speciesGenerator_1.highelf(gender);
|
|
case "highfairy":
|
|
return speciesGenerator_1.highfairy(gender);
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
switch (race) {
|
|
case "demon":
|
|
return speciesGenerator_1.demon();
|
|
case "goblin":
|
|
return speciesGenerator_1.goblin();
|
|
case "human":
|
|
return speciesGenerator_1.human(allowMultipleNames);
|
|
case "ogre":
|
|
return speciesGenerator_1.ogre();
|
|
case "orc":
|
|
return speciesGenerator_1.orc();
|
|
default:
|
|
break;
|
|
}
|
|
return new Error("Must provide a gender!");
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-name-generator/dist/index.js
|
|
var require_dist = __commonJS({
|
|
"node_modules/fantasy-name-generator/dist/index.js"(exports) {
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var nameGenerator_1 = require_nameGenerator();
|
|
exports.allRaces = nameGenerator_1.allRaces;
|
|
exports.nameByRace = nameGenerator_1.generateName;
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/alea.js
|
|
var require_alea = __commonJS({
|
|
"node_modules/seedrandom/lib/alea.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function Alea(seed) {
|
|
var me = this, mash = Mash();
|
|
me.next = function() {
|
|
var t = 2091639 * me.s0 + me.c * 23283064365386963e-26;
|
|
me.s0 = me.s1;
|
|
me.s1 = me.s2;
|
|
return me.s2 = t - (me.c = t | 0);
|
|
};
|
|
me.c = 1;
|
|
me.s0 = mash(" ");
|
|
me.s1 = mash(" ");
|
|
me.s2 = mash(" ");
|
|
me.s0 -= mash(seed);
|
|
if (me.s0 < 0) {
|
|
me.s0 += 1;
|
|
}
|
|
me.s1 -= mash(seed);
|
|
if (me.s1 < 0) {
|
|
me.s1 += 1;
|
|
}
|
|
me.s2 -= mash(seed);
|
|
if (me.s2 < 0) {
|
|
me.s2 += 1;
|
|
}
|
|
mash = null;
|
|
}
|
|
function copy(f, t) {
|
|
t.c = f.c;
|
|
t.s0 = f.s0;
|
|
t.s1 = f.s1;
|
|
t.s2 = f.s2;
|
|
return t;
|
|
}
|
|
function impl(seed, opts) {
|
|
var xg = new Alea(seed), state = opts && opts.state, prng = xg.next;
|
|
prng.int32 = function() {
|
|
return xg.next() * 4294967296 | 0;
|
|
};
|
|
prng.double = function() {
|
|
return prng() + (prng() * 2097152 | 0) * 11102230246251565e-32;
|
|
};
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (typeof state == "object")
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
function Mash() {
|
|
var n = 4022871197;
|
|
var mash = function(data) {
|
|
data = String(data);
|
|
for (var i = 0; i < data.length; i++) {
|
|
n += data.charCodeAt(i);
|
|
var h = 0.02519603282416938 * n;
|
|
n = h >>> 0;
|
|
h -= n;
|
|
h *= n;
|
|
n = h >>> 0;
|
|
h -= n;
|
|
n += h * 4294967296;
|
|
}
|
|
return (n >>> 0) * 23283064365386963e-26;
|
|
};
|
|
return mash;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.alea = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/xor128.js
|
|
var require_xor128 = __commonJS({
|
|
"node_modules/seedrandom/lib/xor128.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function XorGen(seed) {
|
|
var me = this, strseed = "";
|
|
me.x = 0;
|
|
me.y = 0;
|
|
me.z = 0;
|
|
me.w = 0;
|
|
me.next = function() {
|
|
var t = me.x ^ me.x << 11;
|
|
me.x = me.y;
|
|
me.y = me.z;
|
|
me.z = me.w;
|
|
return me.w ^= me.w >>> 19 ^ t ^ t >>> 8;
|
|
};
|
|
if (seed === (seed | 0)) {
|
|
me.x = seed;
|
|
} else {
|
|
strseed += seed;
|
|
}
|
|
for (var k = 0; k < strseed.length + 64; k++) {
|
|
me.x ^= strseed.charCodeAt(k) | 0;
|
|
me.next();
|
|
}
|
|
}
|
|
function copy(f, t) {
|
|
t.x = f.x;
|
|
t.y = f.y;
|
|
t.z = f.z;
|
|
t.w = f.w;
|
|
return t;
|
|
}
|
|
function impl(seed, opts) {
|
|
var xg = new XorGen(seed), state = opts && opts.state, prng = function() {
|
|
return (xg.next() >>> 0) / 4294967296;
|
|
};
|
|
prng.double = function() {
|
|
do {
|
|
var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21);
|
|
} while (result === 0);
|
|
return result;
|
|
};
|
|
prng.int32 = xg.next;
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (typeof state == "object")
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.xor128 = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/xorwow.js
|
|
var require_xorwow = __commonJS({
|
|
"node_modules/seedrandom/lib/xorwow.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function XorGen(seed) {
|
|
var me = this, strseed = "";
|
|
me.next = function() {
|
|
var t = me.x ^ me.x >>> 2;
|
|
me.x = me.y;
|
|
me.y = me.z;
|
|
me.z = me.w;
|
|
me.w = me.v;
|
|
return (me.d = me.d + 362437 | 0) + (me.v = me.v ^ me.v << 4 ^ (t ^ t << 1)) | 0;
|
|
};
|
|
me.x = 0;
|
|
me.y = 0;
|
|
me.z = 0;
|
|
me.w = 0;
|
|
me.v = 0;
|
|
if (seed === (seed | 0)) {
|
|
me.x = seed;
|
|
} else {
|
|
strseed += seed;
|
|
}
|
|
for (var k = 0; k < strseed.length + 64; k++) {
|
|
me.x ^= strseed.charCodeAt(k) | 0;
|
|
if (k == strseed.length) {
|
|
me.d = me.x << 10 ^ me.x >>> 4;
|
|
}
|
|
me.next();
|
|
}
|
|
}
|
|
function copy(f, t) {
|
|
t.x = f.x;
|
|
t.y = f.y;
|
|
t.z = f.z;
|
|
t.w = f.w;
|
|
t.v = f.v;
|
|
t.d = f.d;
|
|
return t;
|
|
}
|
|
function impl(seed, opts) {
|
|
var xg = new XorGen(seed), state = opts && opts.state, prng = function() {
|
|
return (xg.next() >>> 0) / 4294967296;
|
|
};
|
|
prng.double = function() {
|
|
do {
|
|
var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21);
|
|
} while (result === 0);
|
|
return result;
|
|
};
|
|
prng.int32 = xg.next;
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (typeof state == "object")
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.xorwow = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/xorshift7.js
|
|
var require_xorshift7 = __commonJS({
|
|
"node_modules/seedrandom/lib/xorshift7.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function XorGen(seed) {
|
|
var me = this;
|
|
me.next = function() {
|
|
var X = me.x, i = me.i, t, v, w;
|
|
t = X[i];
|
|
t ^= t >>> 7;
|
|
v = t ^ t << 24;
|
|
t = X[i + 1 & 7];
|
|
v ^= t ^ t >>> 10;
|
|
t = X[i + 3 & 7];
|
|
v ^= t ^ t >>> 3;
|
|
t = X[i + 4 & 7];
|
|
v ^= t ^ t << 7;
|
|
t = X[i + 7 & 7];
|
|
t = t ^ t << 13;
|
|
v ^= t ^ t << 9;
|
|
X[i] = v;
|
|
me.i = i + 1 & 7;
|
|
return v;
|
|
};
|
|
function init(me2, seed2) {
|
|
var j, w, X = [];
|
|
if (seed2 === (seed2 | 0)) {
|
|
w = X[0] = seed2;
|
|
} else {
|
|
seed2 = "" + seed2;
|
|
for (j = 0; j < seed2.length; ++j) {
|
|
X[j & 7] = X[j & 7] << 15 ^ seed2.charCodeAt(j) + X[j + 1 & 7] << 13;
|
|
}
|
|
}
|
|
while (X.length < 8)
|
|
X.push(0);
|
|
for (j = 0; j < 8 && X[j] === 0; ++j)
|
|
;
|
|
if (j == 8)
|
|
w = X[7] = -1;
|
|
else
|
|
w = X[j];
|
|
me2.x = X;
|
|
me2.i = 0;
|
|
for (j = 256; j > 0; --j) {
|
|
me2.next();
|
|
}
|
|
}
|
|
init(me, seed);
|
|
}
|
|
function copy(f, t) {
|
|
t.x = f.x.slice();
|
|
t.i = f.i;
|
|
return t;
|
|
}
|
|
function impl(seed, opts) {
|
|
if (seed == null)
|
|
seed = +new Date();
|
|
var xg = new XorGen(seed), state = opts && opts.state, prng = function() {
|
|
return (xg.next() >>> 0) / 4294967296;
|
|
};
|
|
prng.double = function() {
|
|
do {
|
|
var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21);
|
|
} while (result === 0);
|
|
return result;
|
|
};
|
|
prng.int32 = xg.next;
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (state.x)
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.xorshift7 = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/xor4096.js
|
|
var require_xor4096 = __commonJS({
|
|
"node_modules/seedrandom/lib/xor4096.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function XorGen(seed) {
|
|
var me = this;
|
|
me.next = function() {
|
|
var w = me.w, X = me.X, i = me.i, t, v;
|
|
me.w = w = w + 1640531527 | 0;
|
|
v = X[i + 34 & 127];
|
|
t = X[i = i + 1 & 127];
|
|
v ^= v << 13;
|
|
t ^= t << 17;
|
|
v ^= v >>> 15;
|
|
t ^= t >>> 12;
|
|
v = X[i] = v ^ t;
|
|
me.i = i;
|
|
return v + (w ^ w >>> 16) | 0;
|
|
};
|
|
function init(me2, seed2) {
|
|
var t, v, i, j, w, X = [], limit = 128;
|
|
if (seed2 === (seed2 | 0)) {
|
|
v = seed2;
|
|
seed2 = null;
|
|
} else {
|
|
seed2 = seed2 + "\0";
|
|
v = 0;
|
|
limit = Math.max(limit, seed2.length);
|
|
}
|
|
for (i = 0, j = -32; j < limit; ++j) {
|
|
if (seed2)
|
|
v ^= seed2.charCodeAt((j + 32) % seed2.length);
|
|
if (j === 0)
|
|
w = v;
|
|
v ^= v << 10;
|
|
v ^= v >>> 15;
|
|
v ^= v << 4;
|
|
v ^= v >>> 13;
|
|
if (j >= 0) {
|
|
w = w + 1640531527 | 0;
|
|
t = X[j & 127] ^= v + w;
|
|
i = 0 == t ? i + 1 : 0;
|
|
}
|
|
}
|
|
if (i >= 128) {
|
|
X[(seed2 && seed2.length || 0) & 127] = -1;
|
|
}
|
|
i = 127;
|
|
for (j = 4 * 128; j > 0; --j) {
|
|
v = X[i + 34 & 127];
|
|
t = X[i = i + 1 & 127];
|
|
v ^= v << 13;
|
|
t ^= t << 17;
|
|
v ^= v >>> 15;
|
|
t ^= t >>> 12;
|
|
X[i] = v ^ t;
|
|
}
|
|
me2.w = w;
|
|
me2.X = X;
|
|
me2.i = i;
|
|
}
|
|
init(me, seed);
|
|
}
|
|
function copy(f, t) {
|
|
t.i = f.i;
|
|
t.w = f.w;
|
|
t.X = f.X.slice();
|
|
return t;
|
|
}
|
|
;
|
|
function impl(seed, opts) {
|
|
if (seed == null)
|
|
seed = +new Date();
|
|
var xg = new XorGen(seed), state = opts && opts.state, prng = function() {
|
|
return (xg.next() >>> 0) / 4294967296;
|
|
};
|
|
prng.double = function() {
|
|
do {
|
|
var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21);
|
|
} while (result === 0);
|
|
return result;
|
|
};
|
|
prng.int32 = xg.next;
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (state.X)
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.xor4096 = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
// window object or global
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/lib/tychei.js
|
|
var require_tychei = __commonJS({
|
|
"node_modules/seedrandom/lib/tychei.js"(exports, module2) {
|
|
(function(global2, module3, define2) {
|
|
function XorGen(seed) {
|
|
var me = this, strseed = "";
|
|
me.next = function() {
|
|
var b = me.b, c = me.c, d = me.d, a = me.a;
|
|
b = b << 25 ^ b >>> 7 ^ c;
|
|
c = c - d | 0;
|
|
d = d << 24 ^ d >>> 8 ^ a;
|
|
a = a - b | 0;
|
|
me.b = b = b << 20 ^ b >>> 12 ^ c;
|
|
me.c = c = c - d | 0;
|
|
me.d = d << 16 ^ c >>> 16 ^ a;
|
|
return me.a = a - b | 0;
|
|
};
|
|
me.a = 0;
|
|
me.b = 0;
|
|
me.c = 2654435769 | 0;
|
|
me.d = 1367130551;
|
|
if (seed === Math.floor(seed)) {
|
|
me.a = seed / 4294967296 | 0;
|
|
me.b = seed | 0;
|
|
} else {
|
|
strseed += seed;
|
|
}
|
|
for (var k = 0; k < strseed.length + 20; k++) {
|
|
me.b ^= strseed.charCodeAt(k) | 0;
|
|
me.next();
|
|
}
|
|
}
|
|
function copy(f, t) {
|
|
t.a = f.a;
|
|
t.b = f.b;
|
|
t.c = f.c;
|
|
t.d = f.d;
|
|
return t;
|
|
}
|
|
;
|
|
function impl(seed, opts) {
|
|
var xg = new XorGen(seed), state = opts && opts.state, prng = function() {
|
|
return (xg.next() >>> 0) / 4294967296;
|
|
};
|
|
prng.double = function() {
|
|
do {
|
|
var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21);
|
|
} while (result === 0);
|
|
return result;
|
|
};
|
|
prng.int32 = xg.next;
|
|
prng.quick = prng;
|
|
if (state) {
|
|
if (typeof state == "object")
|
|
copy(state, xg);
|
|
prng.state = function() {
|
|
return copy(xg, {});
|
|
};
|
|
}
|
|
return prng;
|
|
}
|
|
if (module3 && module3.exports) {
|
|
module3.exports = impl;
|
|
} else if (define2 && define2.amd) {
|
|
define2(function() {
|
|
return impl;
|
|
});
|
|
} else {
|
|
this.tychei = impl;
|
|
}
|
|
})(
|
|
exports,
|
|
typeof module2 == "object" && module2,
|
|
// present in node.js
|
|
typeof define == "function" && define
|
|
// present with an AMD loader
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/seedrandom.js
|
|
var require_seedrandom = __commonJS({
|
|
"node_modules/seedrandom/seedrandom.js"(exports, module2) {
|
|
(function(global2, pool, math) {
|
|
var width = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto;
|
|
function seedrandom(seed, options, callback) {
|
|
var key = [];
|
|
options = options == true ? { entropy: true } : options || {};
|
|
var shortseed = mixkey(flatten(
|
|
options.entropy ? [seed, tostring(pool)] : seed == null ? autoseed() : seed,
|
|
3
|
|
), key);
|
|
var arc4 = new ARC4(key);
|
|
var prng = function() {
|
|
var n = arc4.g(chunks), d = startdenom, x = 0;
|
|
while (n < significance) {
|
|
n = (n + x) * width;
|
|
d *= width;
|
|
x = arc4.g(1);
|
|
}
|
|
while (n >= overflow) {
|
|
n /= 2;
|
|
d /= 2;
|
|
x >>>= 1;
|
|
}
|
|
return (n + x) / d;
|
|
};
|
|
prng.int32 = function() {
|
|
return arc4.g(4) | 0;
|
|
};
|
|
prng.quick = function() {
|
|
return arc4.g(4) / 4294967296;
|
|
};
|
|
prng.double = prng;
|
|
mixkey(tostring(arc4.S), pool);
|
|
return (options.pass || callback || function(prng2, seed2, is_math_call, state) {
|
|
if (state) {
|
|
if (state.S) {
|
|
copy(state, arc4);
|
|
}
|
|
prng2.state = function() {
|
|
return copy(arc4, {});
|
|
};
|
|
}
|
|
if (is_math_call) {
|
|
math[rngname] = prng2;
|
|
return seed2;
|
|
} else
|
|
return prng2;
|
|
})(
|
|
prng,
|
|
shortseed,
|
|
"global" in options ? options.global : this == math,
|
|
options.state
|
|
);
|
|
}
|
|
function ARC4(key) {
|
|
var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];
|
|
if (!keylen) {
|
|
key = [keylen++];
|
|
}
|
|
while (i < width) {
|
|
s[i] = i++;
|
|
}
|
|
for (i = 0; i < width; i++) {
|
|
s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];
|
|
s[j] = t;
|
|
}
|
|
(me.g = function(count) {
|
|
var t2, r = 0, i2 = me.i, j2 = me.j, s2 = me.S;
|
|
while (count--) {
|
|
t2 = s2[i2 = mask & i2 + 1];
|
|
r = r * width + s2[mask & (s2[i2] = s2[j2 = mask & j2 + t2]) + (s2[j2] = t2)];
|
|
}
|
|
me.i = i2;
|
|
me.j = j2;
|
|
return r;
|
|
})(width);
|
|
}
|
|
function copy(f, t) {
|
|
t.i = f.i;
|
|
t.j = f.j;
|
|
t.S = f.S.slice();
|
|
return t;
|
|
}
|
|
;
|
|
function flatten(obj, depth) {
|
|
var result = [], typ = typeof obj, prop;
|
|
if (depth && typ == "object") {
|
|
for (prop in obj) {
|
|
try {
|
|
result.push(flatten(obj[prop], depth - 1));
|
|
} catch (e) {
|
|
}
|
|
}
|
|
}
|
|
return result.length ? result : typ == "string" ? obj : obj + "\0";
|
|
}
|
|
function mixkey(seed, key) {
|
|
var stringseed = seed + "", smear, j = 0;
|
|
while (j < stringseed.length) {
|
|
key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);
|
|
}
|
|
return tostring(key);
|
|
}
|
|
function autoseed() {
|
|
try {
|
|
var out;
|
|
if (nodecrypto && (out = nodecrypto.randomBytes)) {
|
|
out = out(width);
|
|
} else {
|
|
out = new Uint8Array(width);
|
|
(global2.crypto || global2.msCrypto).getRandomValues(out);
|
|
}
|
|
return tostring(out);
|
|
} catch (e) {
|
|
var browser = global2.navigator, plugins = browser && browser.plugins;
|
|
return [+new Date(), global2, plugins, global2.screen, tostring(pool)];
|
|
}
|
|
}
|
|
function tostring(a) {
|
|
return String.fromCharCode.apply(0, a);
|
|
}
|
|
mixkey(math.random(), pool);
|
|
if (typeof module2 == "object" && module2.exports) {
|
|
module2.exports = seedrandom;
|
|
try {
|
|
nodecrypto = require("crypto");
|
|
} catch (ex) {
|
|
}
|
|
} else if (typeof define == "function" && define.amd) {
|
|
define(function() {
|
|
return seedrandom;
|
|
});
|
|
} else {
|
|
math["seed" + rngname] = seedrandom;
|
|
}
|
|
})(
|
|
// global: `self` in browsers (including strict mode and web workers),
|
|
// otherwise `this` in Node and other environments
|
|
typeof self !== "undefined" ? self : exports,
|
|
[],
|
|
// pool: entropy pool starts empty
|
|
Math
|
|
// math: package containing random, pow, and seedrandom
|
|
);
|
|
}
|
|
});
|
|
|
|
// node_modules/seedrandom/index.js
|
|
var require_seedrandom2 = __commonJS({
|
|
"node_modules/seedrandom/index.js"(exports, module2) {
|
|
var alea = require_alea();
|
|
var xor128 = require_xor128();
|
|
var xorwow = require_xorwow();
|
|
var xorshift7 = require_xorshift7();
|
|
var xor4096 = require_xor4096();
|
|
var tychei = require_tychei();
|
|
var sr = require_seedrandom();
|
|
sr.alea = alea;
|
|
sr.xor128 = xor128;
|
|
sr.xorwow = xorwow;
|
|
sr.xorshift7 = xorshift7;
|
|
sr.xor4096 = xor4096;
|
|
sr.tychei = tychei;
|
|
module2.exports = sr;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/utils/index.js
|
|
var require_utils = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/utils/index.js"(exports) {
|
|
"use strict";
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var seedrandom_1 = __importDefault(require_seedrandom2());
|
|
var RandomFunction = Math.random;
|
|
exports.pick = function(array) {
|
|
return exports.pickMany(array, 1)[0];
|
|
};
|
|
exports.pickMany = function(array, count) {
|
|
if (count === void 0) {
|
|
count = 1;
|
|
}
|
|
var arrayCopy = Array.from(array);
|
|
var pickedValues = [];
|
|
for (var i = 0; i < count; i++) {
|
|
var pickedIndex = exports.rand(0, arrayCopy.length - 1);
|
|
pickedValues.push(arrayCopy[pickedIndex]);
|
|
arrayCopy.splice(pickedIndex, 1);
|
|
}
|
|
return pickedValues;
|
|
};
|
|
exports.randomRace = function() {
|
|
};
|
|
exports.randomGender = function() {
|
|
return exports.pick(["male", "female"]);
|
|
};
|
|
exports.parseTemplate = function(string, content) {
|
|
if (content === void 0) {
|
|
content = {};
|
|
}
|
|
var regex = /{(.+?)}/gm;
|
|
var matches = string.match(regex);
|
|
var linkedPlaceholderIndexes = {};
|
|
if (matches) {
|
|
matches.forEach(function(match) {
|
|
var linkedPlaceholderMatches = /{(.+?)::(.+?)}/gm.exec(match);
|
|
if (linkedPlaceholderMatches) {
|
|
var rawLinkToken = linkedPlaceholderMatches[1];
|
|
if (linkedPlaceholderIndexes[rawLinkToken] != null) {
|
|
var replacement = linkedPlaceholderMatches[2].split("/")[linkedPlaceholderIndexes[rawLinkToken]];
|
|
string = string.replace(match, replacement);
|
|
} else {
|
|
var allPlaceholderChunks = linkedPlaceholderMatches[2].split("/");
|
|
var newIndex = exports.rand(0, allPlaceholderChunks.length - 1);
|
|
var replacement = allPlaceholderChunks[newIndex];
|
|
linkedPlaceholderIndexes[rawLinkToken] = newIndex;
|
|
string = string.replace(match, replacement);
|
|
}
|
|
}
|
|
});
|
|
matches.forEach(function(match) {
|
|
if (match.charAt(1) === "$") {
|
|
var replacementVarName = match.substring(2, match.length - 1);
|
|
string = string.replace(match, content[replacementVarName]);
|
|
} else {
|
|
var replacement = exports.pick(match.substring(1).substring(0, match.length - 2).split("/"));
|
|
string = string.replace(match, replacement);
|
|
}
|
|
});
|
|
}
|
|
return string;
|
|
};
|
|
exports.rand = function(min, max) {
|
|
min = parseInt(min);
|
|
max = parseInt(max);
|
|
return Math.floor(RandomFunction() * (max - min + 1)) + min;
|
|
};
|
|
exports.forCount = function(number, func) {
|
|
for (var i = 0; i < number; i++) {
|
|
func();
|
|
}
|
|
};
|
|
exports.titleCase = function(string) {
|
|
return string.replace(/_/g, " ").replace(/\w\S*/g, function(txt) {
|
|
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
|
|
});
|
|
};
|
|
exports.firstCharacterUppercase = function(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
};
|
|
exports.formatRace = function(race) {
|
|
switch (race) {
|
|
case "halfOrc":
|
|
return "Half-Orc";
|
|
case "halfElf":
|
|
return "Half-Elf";
|
|
default:
|
|
return exports.titleCase(race);
|
|
}
|
|
};
|
|
exports.generateUUID = function() {
|
|
var d = new Date().getTime();
|
|
if (typeof performance !== "undefined" && typeof performance.now === "function") {
|
|
d += performance.now();
|
|
}
|
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
var r = (d + Math.random() * 16) % 16 | 0;
|
|
d = Math.floor(d / 16);
|
|
return (c === "x" ? r : r & 3 | 8).toString(16);
|
|
});
|
|
};
|
|
exports.withSeed = function(seed, callback) {
|
|
var isFirstPass = exports.FantasyContentGeneratorSeed == null;
|
|
exports.FantasyContentGeneratorSeed = seed;
|
|
RandomFunction = seedrandom_1.default(exports.FantasyContentGeneratorSeed);
|
|
var returnValue = callback();
|
|
if (isFirstPass) {
|
|
exports.FantasyContentGeneratorSeed = null;
|
|
RandomFunction = Math.random;
|
|
}
|
|
return returnValue;
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/loots/loots.json
|
|
var require_loots = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/loots/loots.json"(exports, module2) {
|
|
module2.exports = {
|
|
loot_source: [
|
|
"Humanoid (Wild)"
|
|
],
|
|
loot_per_loot_source: {
|
|
"Humanoid (Civilised)": [
|
|
"sack containing {2/3/4} rations",
|
|
"{green/blue/red} glass bottle of {cheap/expensive/luxurious} {Dwarven/Elvish} {alcohol/wine/ale}"
|
|
],
|
|
"Humanoid (Wild)": [
|
|
"a {worn/damaged/rough/primitive} {cloth/woollen} bag of bones.",
|
|
"a waterskin {half-filled/fully filled} with {water/stale water/dirty water}.",
|
|
"{rotting/spoiled} meat wrapped in {leaves/parchment/ragged cloth/stained cloth/torn animal hide}.",
|
|
"{damaged/broken} manacles.",
|
|
"a {glass/stone} bottle of strong, harsh alcohol.",
|
|
"a small empty cage made of wood.",
|
|
"{2/3/4} corked glass bottles.",
|
|
"a small jar, holding {5/6/7} fireflies.",
|
|
"a {worn/damaged/rough/primitive} bag full of leaves & stems of an unknown plant.",
|
|
"a dagger. It is stained with {blood/old blood/dirt/something unknown}.",
|
|
"{8/9/10/12/15} arrows tied up with crude string.",
|
|
"a necklace made from {string/pewter chain/silver chain/rough string}.",
|
|
"a necklace made from {string/pewter chain/silver chain/rough string}. There is a pendant attached. The pendant is made from {jade/ebony/glass/lead/iron/copper/bronze}. It depicts the image of {Sirrion/Reorx/Chislev/Zivilyn/Lunitari/Takhisis/Sargonnas/Chemosh/Zeboim/Hiddukel}",
|
|
"a small, {worn/damaged/rough/primitive/weathered/stained} bag of jewellery. Inside is a small collection of rings, necklaces, several earrings and a brooch.",
|
|
"a crude animal cage. Inside there are {2/3} live {rats/mice/bats/squirrels}.",
|
|
"a crude animal cage. Inside there is a live {rat/mouse/bat/squirrel}.",
|
|
"a book. It is badly water damaged, and it's pages cannot be read.",
|
|
"several severed fingers, wrapped in bloody {cloth/fabric}. The fingers appear to be {Dwarven/Elvish/Orcish/Human}.",
|
|
"a small animal skull, floating in a glass jar filled with {salt water/oil}.",
|
|
"the skull of an {Elf/Dwarf/Orc/Gnoll/Tiefling/Human}. It is partially covered in a dark stain.",
|
|
"a small, {stone/wooden} box. It is empty. On the lid, there is a carving of {an eye/a sword/the sun/the moon/a religious symbol}.",
|
|
"a small bag, containing what appears to be a crude {dice game/card game/collection of figurines}. ",
|
|
"a sack of torn up clothing.",
|
|
"a length of rope, measuring {20/30/40}ft in total.",
|
|
"a length of {primitive/badly wound/crusty, stained} rope, measuring {20/30/40}ft in total.",
|
|
"{2/3/4} jars of oil tied together with {rough/fraying} twine. The jars are secured with {bronze/copper/iron} lids.",
|
|
"a collected set of {2/3} ornate, sharpened daggers. They appear to be made from {a hard, black wood/glass/granite}.",
|
|
"a small set of {iron/bronze/copper} rods, instruments. Many of the pieces are {bent out of shape/badly rusted/cracked}. With some cleaning and repair, they could work as a set of Thieves Tools.",
|
|
"a stack of stained, water damaged parchments. Many of the sheets appear to have {Dwarvish/Elvish/Goblin/Draconic/Abyssal} script on them. With care, {15/17/19/20} of the parchments can be salvaged.",
|
|
"a rusty, {copper/iron}, oil lamp. It leaks, and appears to be {Dwarvish/Elvish/Human} made. With some repair, it could be made fully functional.",
|
|
"a badly tarnished crowbar. The flattened end is covered in a dark {red/black} stain.",
|
|
"a silver hand mirror. It is badly {cracked/tarnished}.",
|
|
"{2/3}lbs of salted meat, wrapped in {cloth/parchment}.",
|
|
"a {glass/stone} jar of acid. The jar's lid is badly fitting, and the acid bubbles and froths as it moves. A {skull/symbol of fire/warning written in Dwarvish} is etched onto the side of the jar.",
|
|
"a small, crude chest. It is filled with {apples/partially rotten apples/cooked meats/skulls/empty glass vials}. The chest {has a broken hinge/appears to be badly burnt}.",
|
|
"{3/4} vials of basic Poison in a scuffed leather pouch. ",
|
|
"a bedroll. It is covered in a large, dark stain, but is in otherwise good condition.",
|
|
"a bedroll. It has several gashes down its length, but could be repaired.",
|
|
"{3/4} pots and pans of various sizes, tied together with {crude/rough} rope.",
|
|
"a note written in {Draconic/Abysmal/Ocrish} script. Some deciphering will show that is appears to be list of commands, focusing on {stealing livestock/ransacking a local settlement/attacking travellers for their wares}.",
|
|
"an unholy symbol of {Cyric/Talos/Umberlee}. It is covered in dried blood, and stings when a good creature touches it.",
|
|
"a badly {water damaged/burned/torn} spellbook. Though mostly unintelligible, some deciphering shows the book {belongs/belonged} to a {wizard/witch} specialising in {Conjuration/Divination/Transmutation}.",
|
|
"crude fishing supplies, including a box of maggots, several {rusty/bent} hooks and a {10/12/15}ft length of wire.",
|
|
"a set of clothes, appearing {Dwarvish/Elvish/Human/Halfling} in size and design. They appear {partially burnt/wet and ragged}, and have a large, black stain on the chest.",
|
|
"a corked vial of cloudy, {crimson/charcoal/green/teal} coloured liquid. The vial is wrapped in {cloth/fabric} inside a leather pouch. The leather pouch has a {skull/symbol of Bhaal/symbol of Kelemvor/symbol of Myrkul} etched onto it. Investigation will reveal the liquid to be a dosage of {Assassin\u2019s blood/Crawler mucus/Drow poison/Essence of ether/Malice/Pale tincture/Serpent venom}. ",
|
|
"{2/3} torches, tied together with rope.",
|
|
"a large {stone/bronze/iron} jar with a fastened lid, which is then secured even further with tightly would twine. Inside the jar is a live {tarantula/rat/snake/giant millipede}.",
|
|
"a crudely fashioned hunting trap. It is made of {blackened/gnarled} wood and jagged {iron/steel} {hooks/spikes}. It could be used to trap small creatures, such as boar or deer.",
|
|
"a set of badly maintained scientific instruments, including a compass, measuring rods, quills and ink. With some repair, they could form a Cartographer's toolkit.",
|
|
"the skull of a {Dwarf/Elf/Human/Tiefling/Halfling}. It has been cleaned and bleached white, and has a large, drilled hole in the centre of the crown. {Symbols of Bhaal/Symbols of Cyric/Symbols of Talos/Several Abysmal symbols/Several Draconic symbols} are crudely carved into the temples."
|
|
],
|
|
Beast: [
|
|
"broken {fangs/claws/talons}"
|
|
],
|
|
Undead: [
|
|
"pieces of rotting flesh",
|
|
"damaged {amour/weapons/ammunition}"
|
|
]
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/loots/index.js
|
|
var require_loots2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/loots/index.js"(exports) {
|
|
"use strict";
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var loots_json_1 = __importDefault(require_loots());
|
|
exports.generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var source = props.source, seed = props.seed, quantity = props.quantity;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
quantity = quantity || 1;
|
|
return Utils.withSeed(seed, function() {
|
|
source = source || Utils.pick(loots_json_1.default.loot_source);
|
|
var lootItems = Utils.pickMany(loots_json_1.default.loot_per_loot_source[source], quantity).map(function(l) {
|
|
return Utils.parseTemplate(l);
|
|
});
|
|
return {
|
|
seed,
|
|
source,
|
|
lootItems,
|
|
quantity,
|
|
formattedData: {
|
|
lootItems,
|
|
quantity,
|
|
label: source + " #" + seed.substring(0, 8)
|
|
}
|
|
};
|
|
});
|
|
};
|
|
var functions = {
|
|
generate: exports.generate
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/magic_items/magic_items.json
|
|
var require_magic_items = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/magic_items/magic_items.json"(exports, module2) {
|
|
module2.exports = {
|
|
types: ["weapon"],
|
|
power_levels: ["minor", "lesser", "greater", "supreme"],
|
|
schools_of_magic: [
|
|
"abjuration",
|
|
"conjuration",
|
|
"divination",
|
|
"enchantment",
|
|
"evocation",
|
|
"illusion",
|
|
"necromancy",
|
|
"transmutation"
|
|
],
|
|
item_effects_per_level: {
|
|
minor: "{0/0/1}",
|
|
lesser: "{0/0/1/1}",
|
|
greater: "{1}",
|
|
supreme: "{1/1/1/1}"
|
|
},
|
|
school_weapon_effects_per_level: {
|
|
conjuration: {
|
|
minor: [
|
|
"This weapon has {2/3} charges. While holding this weapon, the wielder can expend a charge to cast {Acid Splash/Poison Spray/Produce Flame} as though they were 1st level. The charges are regained at dawn."
|
|
],
|
|
lesser: [
|
|
"This weapon has {2/3/4} charges. While holding this weapon, the wielder can expend a charge to cast {Acid Splash/Poison Spray/Produce Flame} as though they were 5th level. The charges are regained at dawn.",
|
|
"On a successful attack, the target must make a DC 14 CON save. On a failure, the targets mouth and stomach is suddenly filled with monstrous {slugs/worms/beetles/insects/maggots}, and they begin to vomit and cough uncontrollably. The target can take no action other than movement for 1d4 turns.",
|
|
"On a successful attack, magical {vines/tentacles/ropes} erupt from the weapon, wrapping themselves around the limbs and joints of the targets. The target must make a DC 13 DEX save. On a failure, for 2d4 turns the target's max speed is reduced to 10 ft per turn and they have disadvantage on attack rolls."
|
|
],
|
|
greater: [
|
|
"This weapon has {3/4} charges. While holding this weapon, the wielder can expend a charge to cast {Acid Splash/Poison Spray/Produce Flame} as though they were 11th level. The charges are regained at dawn.",
|
|
"On a successful attack, the target must make a DC 12 WIS save. On a failure, the target blinks out of existence, and reappears 2d12 feet away. Direction of teleportation is determined by rolling 1d8. If the target reappears inside solid matter, their body replaces the matter. However, the target can become stuck in this manner (for example, reappearing with their leg inside a boulder)."
|
|
],
|
|
supreme: [
|
|
"This weapon has 4 charges. While holding this weapon, the wielder can expend a charge to cast {Acid Splash/Poison Spray/Produce Flame} as though they were 17th level. The charges are regained at dawn.",
|
|
"This weapon has 2 charges. The wielder can expend a charge to load the blade with a crackling, screeching heat, and the steel becomes a shade of {maroon/violet}. The wielder can use the weapon to carve into space itself, creating a freestanding portal in the air. This portal acts as if created by the spell Arcane Gate. There can only ever be 2 portals present - if a 3rd is opened, the 1st closes. The charges are regained at dawn.",
|
|
"Once per day, the wielder of this weapon can speak the ancient words and make a sacrifice of blood in order to unleash the weapons power. Lose 2d4 HP, and cast the spell Hunger of Hadar.",
|
|
"This weapon has 1 charge. On a successful attack, the wielder can expend a charge to displace the essence of the target. The target must make a DC 18 WIS save. On a failure, the target is transported to the {Feywild/Shadowfell} plane. The charge is regained at dawn."
|
|
]
|
|
},
|
|
enchantment: {
|
|
minor: [
|
|
"This weapon has {2/3} charges. While holding this weapon, the wielder can expend a charge to cast Vicious Mockery as though they were 1st level. The charges are regained at dawn."
|
|
],
|
|
lesser: [
|
|
"This weapon has {2/3} charges. While holding this weapon, the wielder can expend a charge to cast Vicious Mockery as though they were 5th level. The charges are regained at dawn.",
|
|
"On a successful attack, target must make a DC 14 WIS save. On a failure, their mind is clouded with terrifying visions. They have disadvantage on all attack rolls for {2/3}d4 rounds.",
|
|
"On a successful attack, target must make a DC 14 WIS save. On a failure, their thoughts are swamped with intense emotions of fear, panic and sorrow. They are unable to make hostile or aggressive actions for 1d6 rounds."
|
|
],
|
|
greater: [
|
|
"This weapon has {2/3} charges. While holding this weapon, the wielder can expend a charge to cast Vicious Mockery as though they were 11th level. The charges are regained at dawn.",
|
|
"On a successful attack, targets must make a DC 16 WIS save. On a failure, the target becomes Paralyzed for {2/3}d4 rounds.",
|
|
"This weapon has {2/3} charges. On a successful attack, the wielder can expend a charge to swamp the target\u2019s mind with thoughts of jealousy and anger. On the target\u2019s next turn, they must try and attack an ally, to the reasonable best of the target\u2019s ability. The charges are regained at dawn."
|
|
],
|
|
supreme: [
|
|
"This weapon has {2/3} charges. While holding this weapon, the wielder can expend a charge to cast Vicious Mockery as though they were 17th level. The charges are regained at dawn.",
|
|
"This weapon has {2/3} charges. On a successful attack, the wielder can expend a charge to cast Confusion at 4th level. The spells point of origin is the target. If allies are inside the sphere, the wielder can choose to make them exempt from the effect. The charges are regained at dawn."
|
|
]
|
|
},
|
|
evocation: {
|
|
minor: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast {Eldritch Blast/Fire Bolt/Frostbite} as though they were 1st level. The charges are regained at dawn."
|
|
],
|
|
lesser: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast {Eldritch Blast/Fire Bolt/Frostbite} as though they were 5th level. The charges are regained at dawn.",
|
|
"On a successful attack, embers and flames erupt from the target at the point where the weapon made contact. Target takes an additional {2/3}d4 of Fire damage.",
|
|
"Twice a day, you can thrust the weapon into the ground beneath you, sending out magical shockwaves. This has the effect of casting Thunderwave at 1st level"
|
|
],
|
|
greater: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast {Eldritch Blast/Fire Bolt/Frostbite} as though they were 11th level. The charges are regained at dawn.",
|
|
"The blade of this weapon crackles with {electrical/magical/eldritch} energy. When swung in front of a group of creatures, {X::2/3/4} of the creatures are struck with bolts of energy. Each affected creature takes 3d4 Lightning damage, and becomes Paralyzed for 2 rounds."
|
|
],
|
|
supreme: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast {Eldritch Blast/Fire Bolt/Frostbite} as though they were 17th level. The charges are regained at dawn."
|
|
]
|
|
},
|
|
illusion: {
|
|
minor: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Minor Illusion as though they were 1st level. The charges are regained at dawn."
|
|
],
|
|
lesser: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Minor Illusion as though they were 5th level. The charges are regained at dawn.",
|
|
"On a successful attack, embers and flames erupt from the target at the point where the weapon made contact. Target takes an additional {2/3}d4 of Fire damage."
|
|
],
|
|
greater: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Minor Illusion as though they were 11th level. The charges are regained at dawn.",
|
|
"On a successful attack, the target must make a DC 16 WIS save. On a failure, they see lifelike bugs and insects pouring out of the wound inflicted by the attack, and become frightened for 1d8 turns. The source of the fear is the weapon itself."
|
|
],
|
|
supreme: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Minor Illusion as though they were 17th level. The charges are regained at dawn.",
|
|
"Once a day, the wielder can lightly touch another creature with this weapon. That target creature, along with all of its grear, becomes invisible for {15/30/40/60} minutes."
|
|
]
|
|
},
|
|
necromancy: {
|
|
minor: [
|
|
"On a successful attack, target must make a DC 12 CON save or take an extra {1d2/1d3} of {Necrotic/Chill} damage. This effect occurs once per day.",
|
|
"On a successful attack, target must make a DC 12 CON save. On a failure, the target's youth is sapped, stiffening their joints and aging their skin. It has has disadvantage on all DEX saves for 1 minute."
|
|
],
|
|
lesser: [
|
|
"On a successful attack, target must make a DC 14 CON save or take an extra {1d6/2d4} {Necrotic/Chill} damage. This effect occurs once per day.",
|
|
"On a successful attack, target must make a DC {14/15/16} CON save or gain 1 point of Exhaustion.",
|
|
"On a successful attack, target must make a DC {14/15} CON save or lose {2/1d4} HP, and the attacker gains that much HP.",
|
|
"On a successful attack, {sickly/black/dark} energy strikes all creatures of the wielders choosing in a {20/25/30}ft radius. All targets must make a DC {14/15} CON saving throw. Any failures become Deaf for {2d4} turns."
|
|
],
|
|
greater: [
|
|
"On a successful attack, target must make a DC 16 CON save or take an extra {2/3}d{6/8} {Necrotic/Chill} damage. This effect occurs once per day.",
|
|
"On a successful attack, {sickly/black/dark} energy strikes all creatures of the wielders choosing in a {15/20/25}ft radius. All targets must make a DC {15/16} CON saving throw. Any failures become Blind for {2d4} turns.",
|
|
"On a successful attack, {sickly/black/dark} energy {strikes/slams into/seeks out/rushes into} all targets of the wielders choosing in a {20/25/30}ft radius. All targets must make a DC 16 CON saving throw. Any failures take {2/3}d4 Necrotic damage.",
|
|
"While wielding this weapon, the holder can cast Inflict Wounds at base level {2/3} times/day.",
|
|
"This weapon has {3/4} charges. On a successful attack, the wielder can expend a charge to sap the life energy from the target to regain health. The number of Hit Points restored is equal to the damage inflicted by the weapon. The charges are regained at dawn."
|
|
],
|
|
supreme: [
|
|
"On a successful attack, target must make a DC 18 CON save or take an extra {3/4}d{10/12} {Necrotic/Chill} damage. This effect occurs once per day.",
|
|
"If a creature is killed with this weapon, they are raised as undead in 1d10 turns. The raised creature acts as if raised by the Create Undead spell cast at base level",
|
|
"This weapon has 1 charge. On a successful attack, the wielder can expend a charge to send oily black roots digging through the targets body into their skull. The target must make a DC 14 CON save. On a failure, they become permanently {Blind/Deaf}.",
|
|
"While wielding this weapon, the holder can cast {Blight/Contagion} at base level {once/twice} per day.",
|
|
"Whenever a creature looks at this weapon, they must make a DC {14/15/16} WIS save. On a failure, the creature becomes Frightened for 2d4 turns. The creature re-try the saving throw after these turns. A success renders the creature immune to the effect for 24 hours"
|
|
]
|
|
},
|
|
transmutation: {
|
|
minor: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Thorn Whip as though they were 1st level. The charges are regained at dawn."
|
|
],
|
|
lesser: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Thorn Whip as though they were 5th level. The charges are regained at dawn."
|
|
],
|
|
greater: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Thorn Whip as though they were 11th level. The charges are regained at dawn.",
|
|
"This weapon has {2/3} charges. On a successful attack, the wielder can expend a charge to trigger the effect. The target must make a DC 15 {WIS/CON} save or be transmuted into {wood/stone/rock/clay} for {1/2/3}d4 minutes. While transmuted, the target has the Petrified condition. The charges are regained at dawn."
|
|
],
|
|
supreme: [
|
|
"This weapon has {2/3} charges. The wielder can expend a charge to cast Thorn Whip as though they were 17th level. The charges are regained at dawn.",
|
|
"On a successful attack, the target must make a DC 18 WIS check. On a failure, the creature feels stinging, ice cold energy coursing through their veins. The creature becomes Petrified",
|
|
"This weapon has 2 charges. While holding this weapon, the wielder can expend a charge to cast the spell Gaseous Form on themselves or an ally. The charges are regained at dawn."
|
|
]
|
|
}
|
|
},
|
|
tagline_owned_words: ["Bane", "Curse", "Luck", "Hope", "Wrath", "Pain"],
|
|
tagline_templates: ["{$owner_first_name_possessive} {$tagline_owned_word}"]
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/genericData.json
|
|
var require_genericData = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/genericData.json"(exports, module2) {
|
|
module2.exports = {
|
|
weapon: [
|
|
"Club",
|
|
"Dagger",
|
|
"Greatclub",
|
|
"Handaxe",
|
|
"Javelin",
|
|
"Light Hammer",
|
|
"Mace",
|
|
"Quarterstaff",
|
|
"Sickle",
|
|
"Spear",
|
|
"Battleaxe",
|
|
"Flail",
|
|
"Glaive",
|
|
"Greataxe",
|
|
"Greatsword",
|
|
"Halberd",
|
|
"Lance",
|
|
"Longsword",
|
|
"Maul",
|
|
"Morningstar",
|
|
"Pike",
|
|
"Rapier",
|
|
"Scimitar",
|
|
"Shortsword",
|
|
"Trident",
|
|
"War Pick",
|
|
"Warhammer",
|
|
"Whip"
|
|
],
|
|
armour: ["Shield", "Helmet", "Chestplate", "Greaves", "Gloves", "Gauntlet"],
|
|
commonItem: [
|
|
"Abacus",
|
|
"Barrel",
|
|
"Basket",
|
|
"Bell",
|
|
"Book",
|
|
"Bottle",
|
|
"Bucket",
|
|
"Candle",
|
|
"Chain",
|
|
"Chest",
|
|
"Crowbar",
|
|
"Flask",
|
|
"Hammer",
|
|
"Hourglass",
|
|
"Jug",
|
|
"Ladder",
|
|
"Lamp",
|
|
"Lantern",
|
|
"Lock",
|
|
"Mirror",
|
|
"Pot",
|
|
"Potion",
|
|
"Quiver",
|
|
"Ram",
|
|
"Rope",
|
|
"Shovel",
|
|
"Soap",
|
|
"Spyglass",
|
|
"Torch",
|
|
"Vial",
|
|
"Whetstone"
|
|
],
|
|
nounPhysicalAdjectives: [
|
|
"creaky",
|
|
"shiny",
|
|
"spikey",
|
|
"hard",
|
|
"soft",
|
|
"wet",
|
|
"leaky",
|
|
"rusty",
|
|
"sparkling"
|
|
],
|
|
coloursAdjective: [
|
|
"red",
|
|
"orange",
|
|
"yellow",
|
|
"green",
|
|
"blue",
|
|
"indigo",
|
|
"violet",
|
|
"purple",
|
|
"pink",
|
|
"beige",
|
|
"brown",
|
|
"grey",
|
|
"black",
|
|
"white",
|
|
"silver",
|
|
"golden"
|
|
],
|
|
sizeAdjectives: [
|
|
"big",
|
|
"large",
|
|
"giant",
|
|
"colossal",
|
|
"enormous",
|
|
"huge",
|
|
"small",
|
|
"short",
|
|
"tiny",
|
|
"little"
|
|
],
|
|
positiveAdjective: [
|
|
"exceptional",
|
|
"great",
|
|
"high quality",
|
|
"quality",
|
|
"wonderful",
|
|
"delicious",
|
|
"tremendous",
|
|
"exceptional"
|
|
],
|
|
animalSingular: [
|
|
"Ape",
|
|
"Badger",
|
|
"Bat",
|
|
"Bear",
|
|
"Bison",
|
|
"Boar",
|
|
"Camel",
|
|
"Cat",
|
|
"Cheetah",
|
|
"Crocodile",
|
|
"Dog",
|
|
"Donkey",
|
|
"Eagle",
|
|
"Elephant",
|
|
"Hawk",
|
|
"Horse",
|
|
"Hyena",
|
|
"Leopard",
|
|
"Lion",
|
|
"Lizard",
|
|
"Monkey",
|
|
"Mule",
|
|
"Octopus",
|
|
"Octopus",
|
|
"Owl",
|
|
"Pony",
|
|
"Pony",
|
|
"Rat",
|
|
"Raven",
|
|
"Rhinoceros",
|
|
"Shark",
|
|
"Snake",
|
|
"Squid",
|
|
"Tiger",
|
|
"Toad",
|
|
"Weasel",
|
|
"Whale",
|
|
"Wolf",
|
|
"Wolverine"
|
|
]
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/names/names.json
|
|
var require_names2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/names/names.json"(exports, module2) {
|
|
module2.exports = {
|
|
dragonborn: {
|
|
male: [
|
|
"Arjhan",
|
|
"Balasar",
|
|
"Bharash",
|
|
"Donaar",
|
|
"Ghesh",
|
|
"Heskan",
|
|
"Kriv",
|
|
"Medrash",
|
|
"Mehen",
|
|
"Nadarr",
|
|
"Pandjed",
|
|
"Patrin",
|
|
"Rhogar",
|
|
"Shamash",
|
|
"Shedinn",
|
|
"Tarhun",
|
|
"Torinn"
|
|
],
|
|
female: [
|
|
"Akra",
|
|
"Biri",
|
|
"Daar",
|
|
"Farideh",
|
|
"Harann",
|
|
"Havilar",
|
|
"Jheri",
|
|
"Kava",
|
|
"Korinn",
|
|
"Mishann",
|
|
"Nala",
|
|
"Perra",
|
|
"Raiann",
|
|
"Sora",
|
|
"Surina",
|
|
"Thava",
|
|
"Uadjit"
|
|
],
|
|
last: [
|
|
"Clethtinthiallor",
|
|
"Daardendrian",
|
|
"Delmirev",
|
|
"Drachedandion",
|
|
"Fenkenkabradon",
|
|
"Kepeshkmolik",
|
|
"Kerrhylon",
|
|
"Kimbatuul",
|
|
"Linxakasendalor",
|
|
"Myastan",
|
|
"Nemmonis",
|
|
"Norixius",
|
|
"Ophinshtalajiir",
|
|
"Prexijandilin",
|
|
"Shestendeliath",
|
|
"Turnuroth",
|
|
"Verthisathurgiesh",
|
|
"Yarjerit"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
dwarf: {
|
|
male: [
|
|
"Adrik",
|
|
"Alberich",
|
|
"Baern",
|
|
"Barendd",
|
|
"Brottor",
|
|
"Bruenor",
|
|
"Dain",
|
|
"Darrak",
|
|
"Delg",
|
|
"Eberk",
|
|
"Einkil",
|
|
"Fargrim",
|
|
"Flint",
|
|
"Gardain",
|
|
"Harbek",
|
|
"Kildrak",
|
|
"Morgran",
|
|
"Orsik",
|
|
"Oskar",
|
|
"Rangrim",
|
|
"Rurik",
|
|
"Taklinn",
|
|
"Thoradin",
|
|
"Thorin",
|
|
"Tordek",
|
|
"Traubon",
|
|
"Travok",
|
|
"Ulfgar",
|
|
"Veit",
|
|
"Vondal"
|
|
],
|
|
female: [
|
|
"Amber",
|
|
"Artin",
|
|
"Audhild",
|
|
"Bardryn",
|
|
"Dagnal",
|
|
"Diesa",
|
|
"Eldeth",
|
|
"Falkrunn",
|
|
"Finellen",
|
|
"Gunnloda",
|
|
"Gurdis",
|
|
"Helja",
|
|
"Hlin",
|
|
"Kathra",
|
|
"Kristryd",
|
|
"Ilde",
|
|
"Liftrasa",
|
|
"Mardred",
|
|
"Riswynn",
|
|
"Sannl",
|
|
"Torbera",
|
|
"Torgga",
|
|
"Vistra"
|
|
],
|
|
last: [
|
|
"Balderk",
|
|
"Battlehammer",
|
|
"Brawnanvil",
|
|
"Dankil",
|
|
"Fireforge",
|
|
"Frostbeard",
|
|
"Gorunn",
|
|
"Holderhek",
|
|
"Ironfist",
|
|
"Loderr",
|
|
"Lutgehr",
|
|
"Rumnaheim",
|
|
"Strakeln",
|
|
"Torunn",
|
|
"Ungart"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
elf: {
|
|
male: [
|
|
"Adran",
|
|
"Aelar",
|
|
"Aramil",
|
|
"Arannis",
|
|
"Aust",
|
|
"Beiro",
|
|
"Berrian",
|
|
"Carric",
|
|
"Enialis",
|
|
"Erdan",
|
|
"Erevan",
|
|
"Galinndan",
|
|
"Hadarai",
|
|
"Heian",
|
|
"Himo",
|
|
"Immeral",
|
|
"Ivellios",
|
|
"Laucian",
|
|
"Mindartis",
|
|
"Paelias",
|
|
"Peren",
|
|
"Quarion",
|
|
"Riardon",
|
|
"Rolen",
|
|
"Soveliss",
|
|
"Thamior",
|
|
"Tharivol",
|
|
"Theren",
|
|
"Varis"
|
|
],
|
|
female: [
|
|
"Adrie",
|
|
"Althaea",
|
|
"Anastrianna",
|
|
"Andraste",
|
|
"Antinua",
|
|
"Bethrynna",
|
|
"Birel",
|
|
"Caelynn",
|
|
"Drusilia",
|
|
"Enna",
|
|
"Felosial",
|
|
"Ielenia",
|
|
"Jelenneth",
|
|
"Keyleth",
|
|
"Leshanna",
|
|
"Lia",
|
|
"Meriele",
|
|
"Mialee",
|
|
"Naivara",
|
|
"Quelenna",
|
|
"Quillathe",
|
|
"Sariel",
|
|
"Shanairra",
|
|
"Shava",
|
|
"Silaqui",
|
|
"Theirastra",
|
|
"Thia",
|
|
"Vadania",
|
|
"Valanthe",
|
|
"Xanaphia"
|
|
],
|
|
last: [
|
|
"Amakiir",
|
|
"Amastacia",
|
|
"Galanodel",
|
|
"Holimion",
|
|
"Ilphelkiir",
|
|
"Liadon",
|
|
"Meliamne",
|
|
"Na\xEFlo",
|
|
"Siannodel",
|
|
"Xiloscient"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
gnome: {
|
|
male: [
|
|
"Alston",
|
|
"Alvyn",
|
|
"Boddynock",
|
|
"Brocc",
|
|
"Burgell",
|
|
"Dimble",
|
|
"Eldon",
|
|
"Erky",
|
|
"Fonkin",
|
|
"Frug",
|
|
"Gerbo",
|
|
"Gimble",
|
|
"Glim",
|
|
"Jebeddo",
|
|
"Kellen",
|
|
"Namfoodle",
|
|
"Orryn",
|
|
"Roondar",
|
|
"Seebo",
|
|
"Sindri",
|
|
"Warryn",
|
|
"Wrenn",
|
|
"Zook"
|
|
],
|
|
female: [
|
|
"Bimpnottin",
|
|
"Breena",
|
|
"Caramip",
|
|
"Carlin",
|
|
"Donella",
|
|
"Duvamil",
|
|
"Ella",
|
|
"Ellyjobell",
|
|
"Ellywick",
|
|
"Lilli",
|
|
"Loopmottin",
|
|
"Lorilla",
|
|
"Mardnab",
|
|
"Nissa",
|
|
"Nyx",
|
|
"Oda",
|
|
"Orla",
|
|
"Roywyn",
|
|
"Shamil",
|
|
"Tana",
|
|
"Waywocket",
|
|
"Zanna"
|
|
],
|
|
last: [
|
|
"Beren",
|
|
"Daergel",
|
|
"Folkor",
|
|
"Garrick",
|
|
"Nackle",
|
|
"Nikkle",
|
|
"Murnig",
|
|
"Ningel",
|
|
"Raulnor",
|
|
"Scheppen",
|
|
"Timbers",
|
|
"Turen"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
halfElf: {
|
|
templates: [
|
|
"{$humanFirst} {$humanLast}",
|
|
"{$elfFirst} {$elfLast}",
|
|
"{$humanFirst} {$elfLast}",
|
|
"{$elfFirst} {$humanLast}"
|
|
]
|
|
},
|
|
halfOrc: {
|
|
male: [
|
|
"Dench",
|
|
"Feng",
|
|
"Gell",
|
|
"Henk",
|
|
"Holg",
|
|
"Imsh",
|
|
"Keth",
|
|
"Krusk",
|
|
"Mhurren",
|
|
"Ront",
|
|
"Shump",
|
|
"Thokk"
|
|
],
|
|
female: [
|
|
"Baggi",
|
|
"Emen",
|
|
"Engong",
|
|
"Kansif",
|
|
"Myev",
|
|
"Neega",
|
|
"Ovak",
|
|
"Ownka",
|
|
"Shautha",
|
|
"Sutha",
|
|
"Vola",
|
|
"Volen",
|
|
"Yevelda"
|
|
],
|
|
templates: [
|
|
"{$humanFirst} {$humanLast}",
|
|
"{$humanFirst}",
|
|
"{$orcFirst} {$humanLast}",
|
|
"{$orcFirst}"
|
|
]
|
|
},
|
|
halfling: {
|
|
male: [
|
|
"Alton",
|
|
"Ander",
|
|
"Cade",
|
|
"Corrin",
|
|
"Eldon",
|
|
"Errich",
|
|
"Finnan",
|
|
"Garret",
|
|
"Lindal",
|
|
"Lyle",
|
|
"Merric",
|
|
"Milo",
|
|
"Osborn",
|
|
"Perrin",
|
|
"Reed",
|
|
"Roscoe",
|
|
"Wellby"
|
|
],
|
|
female: [
|
|
"Andry",
|
|
"Bree",
|
|
"Callie",
|
|
"Cora",
|
|
"Euphemia",
|
|
"Jillian",
|
|
"Kithri",
|
|
"Lavinia",
|
|
"Lidda",
|
|
"Merla",
|
|
"Nedda",
|
|
"Paela",
|
|
"Portia",
|
|
"Seraphina",
|
|
"Shaena",
|
|
"Trym",
|
|
"Vani",
|
|
"Verna"
|
|
],
|
|
last: [
|
|
"Brushgather",
|
|
"Goodbarrel",
|
|
"Greenbottle",
|
|
"High-hill",
|
|
"Hilltopple",
|
|
"Leagallow",
|
|
"Tealeaf",
|
|
"Thorngage",
|
|
"Tosscobble",
|
|
"Underbough"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
human: {
|
|
male: [
|
|
"Aseir",
|
|
"Bardeid",
|
|
"Haseid",
|
|
"Khemed",
|
|
"Mehmen",
|
|
"Sudeiman",
|
|
"Zasheir",
|
|
"Darvin",
|
|
"Dorn",
|
|
"Evendur",
|
|
"Gorstag",
|
|
"Grim",
|
|
"Helm",
|
|
"Malark",
|
|
"Morn",
|
|
"Randal",
|
|
"Stedd",
|
|
"Bor",
|
|
"Fodel",
|
|
"Glar",
|
|
"Grigor",
|
|
"Igan",
|
|
"Ivor",
|
|
"Kosef",
|
|
"Mival",
|
|
"Orel",
|
|
"Pavel",
|
|
"Sergor",
|
|
"Blath",
|
|
"Bran",
|
|
"Frath",
|
|
"Geth",
|
|
"Lander",
|
|
"Luth",
|
|
"Malcer",
|
|
"Stor",
|
|
"Taman",
|
|
"Urth",
|
|
"Aoth",
|
|
"Bareris",
|
|
"Ehput-Ki",
|
|
"Kethoth",
|
|
"Mumed",
|
|
"Ramas",
|
|
"So-Kehur",
|
|
"Thazar-De",
|
|
"Urhur",
|
|
"Borivik",
|
|
"Faurgar",
|
|
"Jandar",
|
|
"Kanithar",
|
|
"Madislak",
|
|
"Ralmevik",
|
|
"Shaumar",
|
|
"Vladislak",
|
|
"An",
|
|
"Chen",
|
|
"Chi",
|
|
"Fai",
|
|
"Jiang",
|
|
"Jun",
|
|
"Lian",
|
|
"Long",
|
|
"Meng",
|
|
"On",
|
|
"Shan",
|
|
"Shui",
|
|
"Wen",
|
|
"Anton",
|
|
"Diero",
|
|
"Marcon",
|
|
"Pieron",
|
|
"Rimardo",
|
|
"Romero",
|
|
"Salazar",
|
|
"Umbero"
|
|
],
|
|
female: [
|
|
"Atala",
|
|
"Ceidil",
|
|
"Hama",
|
|
"Jasmal",
|
|
"Meilil",
|
|
"Seipora",
|
|
"Yasheira",
|
|
"Zasheida",
|
|
"Arveene",
|
|
"Esvele",
|
|
"Jhessail",
|
|
"Kerri",
|
|
"Lureene",
|
|
"Miri",
|
|
"Rowan",
|
|
"Shandri",
|
|
"Tessele",
|
|
"Alethra",
|
|
"Kara",
|
|
"Katernin",
|
|
"Mara",
|
|
"Natali",
|
|
"Olma",
|
|
"Tana",
|
|
"Zora",
|
|
"Ander",
|
|
"Amafrey",
|
|
"Betha",
|
|
"Cefrey",
|
|
"Kethra",
|
|
"Mara",
|
|
"Olga",
|
|
"Silifrey",
|
|
"Westra",
|
|
"Arizima",
|
|
"Chathi",
|
|
"Nephis",
|
|
"Nulara",
|
|
"Murithi",
|
|
"Sefris",
|
|
"Thola",
|
|
"Umara",
|
|
"Zolis",
|
|
"Fyevarra",
|
|
"Hulmarra",
|
|
"Immith",
|
|
"Imzel",
|
|
"Navarra",
|
|
"Shevarra",
|
|
"Tammith",
|
|
"Yuldra",
|
|
"Bai",
|
|
"Chao",
|
|
"Jia",
|
|
"Lei",
|
|
"Mei",
|
|
"Qiao",
|
|
"Shui",
|
|
"Tai",
|
|
"Balama",
|
|
"Dona",
|
|
"Faila",
|
|
"Jalana",
|
|
"Luisa",
|
|
"Marta",
|
|
"Quara",
|
|
"Selise",
|
|
"Vonda"
|
|
],
|
|
last: [
|
|
"Basha",
|
|
"Dumein",
|
|
"Jassan",
|
|
"Khalid",
|
|
"Mostana",
|
|
"Pashar",
|
|
"Rein",
|
|
"Amblecrown",
|
|
"Buckman",
|
|
"Dundragon",
|
|
"Evenwood",
|
|
"Greycastle",
|
|
"Tallstag",
|
|
"Bersk",
|
|
"Chernin",
|
|
"Dotsk",
|
|
"Kulenov",
|
|
"Marsk",
|
|
"Nemetsk",
|
|
"Shemov",
|
|
"Starag",
|
|
"Brightwood",
|
|
"Helder",
|
|
"Hornraven",
|
|
"Lackman",
|
|
"Stormwind",
|
|
"Windrivver",
|
|
"Ankhalab",
|
|
"Anskuld",
|
|
"Fezim",
|
|
"Hahpet",
|
|
"Nathandem",
|
|
"Sepret",
|
|
"Uuthrakt",
|
|
"Chergoba",
|
|
"Dyernina",
|
|
"Iltazyara",
|
|
"Murnyethara",
|
|
"Stayanoga",
|
|
"Ulmokina",
|
|
"Chien",
|
|
"Huang",
|
|
"Kao",
|
|
"Kung",
|
|
"Lao",
|
|
"Ling",
|
|
"Mei",
|
|
"Pin",
|
|
"Shin",
|
|
"Sum",
|
|
"Tan",
|
|
"Wan",
|
|
"Agosto",
|
|
"Astorio",
|
|
"Calabra",
|
|
"Domine",
|
|
"Falone",
|
|
"Marivaldi",
|
|
"Pisacar",
|
|
"Ramondo"
|
|
],
|
|
templates: ["{$first} {$last}"]
|
|
},
|
|
tiefling: {
|
|
male: [
|
|
"Akmenos",
|
|
"Amnon",
|
|
"Barakas",
|
|
"Damakos",
|
|
"Ekemon",
|
|
"Lados",
|
|
"Kairon",
|
|
"Leucis",
|
|
"Melech",
|
|
"Mordai",
|
|
"Morthos",
|
|
"Pelaios",
|
|
"Skamos",
|
|
"Therai",
|
|
"Thycius",
|
|
"Urmenos",
|
|
"Damrakas",
|
|
"Erthor",
|
|
"Kylyre",
|
|
"Ralreus",
|
|
"Malerias",
|
|
"Rolthor",
|
|
"Arxikas",
|
|
"Kyichar",
|
|
"Urcis",
|
|
"Ekdos",
|
|
"Zarvir",
|
|
"Malevenom",
|
|
"Kaus",
|
|
"Horrut"
|
|
],
|
|
female: [
|
|
"Aranxus",
|
|
"Zhermos",
|
|
"Amrius",
|
|
"Valros",
|
|
"Zerdos",
|
|
"Casira",
|
|
"Zarcis",
|
|
"Kosakas",
|
|
"Dharxus",
|
|
"Guelyre",
|
|
"Arkvir",
|
|
"Aririssa",
|
|
"Seiriseis",
|
|
"Iniza",
|
|
"Natlyvia",
|
|
"Orimaia",
|
|
"Aragrea",
|
|
"Veltari",
|
|
"Afuphis",
|
|
"Yamaia",
|
|
"Dimcria",
|
|
"Zegoria",
|
|
"Yalies",
|
|
"Naxori",
|
|
"Ariaphi"
|
|
],
|
|
templates: [
|
|
"{$humanFirst} {$humanLast}",
|
|
"{$humanFirst}",
|
|
"{$tieflingFirst} {$humanLast}",
|
|
"{$tieflingFirst}"
|
|
]
|
|
},
|
|
aelfir: {
|
|
verb_ing: [
|
|
"Singing",
|
|
"Dancing",
|
|
"Creaking",
|
|
"Leaping",
|
|
"Crying",
|
|
"Choking",
|
|
"Quivering",
|
|
"Whispering",
|
|
"Smiling",
|
|
"Glancing",
|
|
"Stealing",
|
|
"Thirsting",
|
|
"Hungering",
|
|
"Screaming",
|
|
"Pleading",
|
|
"Challenging",
|
|
"Begging",
|
|
"Wanting",
|
|
"Calling",
|
|
"Beckoning",
|
|
"Helping",
|
|
"Believing",
|
|
"Growing",
|
|
"Offering",
|
|
"Leading",
|
|
"Reaching"
|
|
],
|
|
verb_present: [
|
|
"Sing",
|
|
"Dance",
|
|
"Creak",
|
|
"Leap",
|
|
"Cry",
|
|
"Choke",
|
|
"Quiver",
|
|
"Whisper",
|
|
"Smile",
|
|
"Glance",
|
|
"Steal",
|
|
"Thirst",
|
|
"Hunger",
|
|
"Scream",
|
|
"Plead",
|
|
"Challenge",
|
|
"Beg",
|
|
"Want",
|
|
"Call",
|
|
"Beckon",
|
|
"Help",
|
|
"Believe",
|
|
"Grow",
|
|
"Offer",
|
|
"Reach"
|
|
],
|
|
adverb: [
|
|
"Gracefully",
|
|
"Youthfully",
|
|
"Quietly",
|
|
"Plainly",
|
|
"Deliberately",
|
|
"Forcefully",
|
|
"Accidentally",
|
|
"Begrudgingly",
|
|
"Majestically",
|
|
"Abruptly",
|
|
"Beautifully",
|
|
"Delicately",
|
|
"Delightfully",
|
|
"Firmly",
|
|
"Lightly",
|
|
"Truthfully",
|
|
"Quickly",
|
|
"Wearily",
|
|
"Willfully"
|
|
],
|
|
adjective: [
|
|
"{Gold/Silver/Silver-Touched/Ruby/Gem-Wrought/Emerald}",
|
|
"{Broken/Torn/Ruined}",
|
|
"{Ornate/Delicate/Fragile/Tender}",
|
|
"Rhetorical",
|
|
"Pompous",
|
|
"{Plain/Dull}",
|
|
"{Stark/Bold}",
|
|
"{Floral/Flowered}",
|
|
"{Shallow/Superficial}",
|
|
"{Frozen/Cold}",
|
|
"{Bright/Brilliant/Vivid/Iridescent}"
|
|
],
|
|
preposition: [
|
|
"To",
|
|
"With",
|
|
"From",
|
|
"On"
|
|
],
|
|
preposition_spatial: [
|
|
"Beside",
|
|
"Beneath",
|
|
"Amidst",
|
|
"Between",
|
|
"Toward",
|
|
"Within",
|
|
"Beyond",
|
|
"Amongst"
|
|
],
|
|
thing: [
|
|
"{Heart/Mind/Soul/Hand}",
|
|
"{Star/Starlight}",
|
|
"River",
|
|
"Scar",
|
|
"{Mist/Rain}",
|
|
"{Sun/Moon/Earth}",
|
|
"{Sunset/Sunrise}",
|
|
"Moonlight",
|
|
"{Crystal/Diamond/Sapphire}",
|
|
"{Flame/Fire/Ember}",
|
|
"{Orchid/Dandelion/Sunflower/Rose/Tulip}"
|
|
],
|
|
passive_emotion: [
|
|
"Arrogance",
|
|
"Hatred",
|
|
"Delight",
|
|
"Cruelty",
|
|
"Joy",
|
|
"Lust",
|
|
"Respect",
|
|
"Love",
|
|
"Hope",
|
|
"Worry",
|
|
"Anger",
|
|
"Sorrow",
|
|
"Ignorance",
|
|
"Pride"
|
|
],
|
|
templates: [
|
|
"{$verb_ing}-{$preposition}-{$thing}s",
|
|
"{$thing}-{$preposition}-{$thing2}",
|
|
"{$adverb}-{$verb_ing}-{$thing}",
|
|
"{$adverb}-{$verb_ing}-{$thing}s",
|
|
"{$adjective}-{$thing}-{$verb_ing}",
|
|
"{$passive_emotion}-{$preposition}-{$thing}s",
|
|
"{$adjective}-{$passive_emotion}-{$verb_ing}",
|
|
"{$adjective}-{$adjective2}-{$passive_emotion}",
|
|
"{$adjective}-{$thing}-{$verb_ing}",
|
|
"{$thing}-{$verb_present}-{$verb_ing}",
|
|
"{$thing}-{$verb_present}s-{$adverb}",
|
|
"{$adjective}-{$thing}-{$verb_ing}",
|
|
"{$thing2}-{$thing}-{$verb_ing}",
|
|
"{$thing}s-{$verb_present}-{$adverb}",
|
|
"{$thing}-{$verb_present}s-{$adverb}",
|
|
"{$thing}-{$verb_present}s-{$preposition_spatial}",
|
|
"{$preposition}-{$verb_ing}-{$thing}s",
|
|
"{$preposition_spatial}-{$verb_ing}-{$thing}s"
|
|
]
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/names/index.js
|
|
var require_names3 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/names/index.js"(exports) {
|
|
"use strict";
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var names_json_1 = __importDefault(require_names2());
|
|
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) {
|
|
case "dragonborn":
|
|
case "dwarf":
|
|
case "elf":
|
|
case "gnome":
|
|
case "halfling":
|
|
case "human":
|
|
return Utils.parseTemplate(template, {
|
|
first: Utils.pick(names_json_1.default[race][gender]),
|
|
last: Utils.pick(names_json_1.default[race].last)
|
|
});
|
|
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])
|
|
});
|
|
case "aelfir":
|
|
var _a = Utils.pickMany(names_json_1.default.aelfir.adjective, 2), adjective = _a[0], adjective2 = _a[1];
|
|
var _b = Utils.pickMany(names_json_1.default.aelfir.thing, 2), thing = _b[0], thing2 = _b[1];
|
|
var _c = Utils.pickMany(names_json_1.default.aelfir.passive_emotion, 2), passive_emotion = _c[0], passive_emotion2 = _c[1];
|
|
return Utils.parseTemplate(template, {
|
|
verb_ing: Utils.parseTemplate(Utils.pick(names_json_1.default.aelfir.verb_ing)),
|
|
verb_present: Utils.parseTemplate(Utils.pick(names_json_1.default.aelfir.verb_present)),
|
|
adverb: Utils.parseTemplate(Utils.pick(names_json_1.default.aelfir.adverb)),
|
|
adjective: Utils.parseTemplate(adjective),
|
|
adjective2: Utils.parseTemplate(adjective2),
|
|
preposition: Utils.parseTemplate(Utils.pick(names_json_1.default.aelfir.preposition)),
|
|
preposition_spatial: Utils.parseTemplate(Utils.pick(names_json_1.default.aelfir.preposition_spatial)),
|
|
passive_emotion: Utils.parseTemplate(passive_emotion),
|
|
passive_emotion2: Utils.parseTemplate(passive_emotion2),
|
|
thing: Utils.parseTemplate(thing),
|
|
thing2: Utils.parseTemplate(thing2)
|
|
});
|
|
}
|
|
};
|
|
exports.generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var race = props.race, gender = props.gender, seed = props.seed;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
return Utils.withSeed(seed, function() {
|
|
race = race ? race : Utils.pick(Object.keys(names_json_1.default));
|
|
gender = gender ? gender : Utils.randomGender();
|
|
var name = generateName(race, gender);
|
|
var _a = name.split(" "), firstName = _a[0], lastName = _a[1];
|
|
return {
|
|
seed,
|
|
name,
|
|
race,
|
|
gender,
|
|
firstName,
|
|
lastName,
|
|
formattedData: {
|
|
name,
|
|
race: Utils.formatRace(race),
|
|
gender: Utils.titleCase(gender),
|
|
firstName: firstName ? Utils.titleCase(firstName) : void 0,
|
|
lastName: lastName ? Utils.titleCase(lastName) : void 0
|
|
}
|
|
};
|
|
});
|
|
};
|
|
var functions = {
|
|
generate: exports.generate
|
|
};
|
|
Object.keys(names_json_1.default).forEach(function(race) {
|
|
functions[race] = function(props) {
|
|
props.race = race;
|
|
return exports.generate(props);
|
|
};
|
|
});
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/magic_items/index.js
|
|
var require_magic_items2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/magic_items/index.js"(exports) {
|
|
"use strict";
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var magic_items_json_1 = __importDefault(require_magic_items());
|
|
var genericData_json_1 = __importDefault(require_genericData());
|
|
var names_1 = __importDefault(require_names3());
|
|
var _type = function() {
|
|
return Utils.pick(magic_items_json_1.default.types);
|
|
};
|
|
var _powerLevel = function() {
|
|
return Utils.pick(magic_items_json_1.default.power_levels);
|
|
};
|
|
var _schoolOfMagic = function(type) {
|
|
if (type === "weapon") {
|
|
return Utils.pick(Object.keys(magic_items_json_1.default.school_weapon_effects_per_level));
|
|
}
|
|
return Utils.pick(magic_items_json_1.default.schools_of_magic);
|
|
};
|
|
var _effects = function(schoolOfMagic, powerLevel) {
|
|
var effectsCount = Utils.parseTemplate(magic_items_json_1.default.item_effects_per_level[powerLevel]);
|
|
return Utils.pickMany(magic_items_json_1.default.school_weapon_effects_per_level[schoolOfMagic][powerLevel], parseInt(effectsCount)).map(Utils.parseTemplate);
|
|
};
|
|
var _tagline = function(formattedData) {
|
|
var taglineTemplate = Utils.pick(magic_items_json_1.default.tagline_templates);
|
|
var generationContent = {};
|
|
if (taglineTemplate.includes("tagline_owned_word")) {
|
|
generationContent.tagline_owned_word = Utils.pick(magic_items_json_1.default.tagline_owned_words);
|
|
}
|
|
if (taglineTemplate.includes("owner_first_name_possessive")) {
|
|
var ownerFirstName = formattedData.owner.split(" ")[0];
|
|
generationContent.owner_first_name_possessive = ownerFirstName.substr(-1) === "s" ? ownerFirstName + "'" : ownerFirstName + "'s";
|
|
}
|
|
return Utils.parseTemplate(taglineTemplate, generationContent);
|
|
};
|
|
var generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var seed = props.seed, type = props.type, powerLevel = props.powerLevel, schoolOfMagic = props.schoolOfMagic, effects = props.effects, subtype = props.subtype;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
return Utils.withSeed(seed, function() {
|
|
type = type ? type : _type();
|
|
powerLevel = powerLevel ? powerLevel : _powerLevel();
|
|
schoolOfMagic = schoolOfMagic ? schoolOfMagic : _schoolOfMagic(type);
|
|
effects = effects ? effects : _effects(schoolOfMagic, powerLevel);
|
|
subtype = subtype ? subtype : Utils.pick(genericData_json_1.default[type]);
|
|
var formattedData = {};
|
|
switch (powerLevel) {
|
|
case "greater":
|
|
case "supreme":
|
|
formattedData.owner = names_1.default.generate().name;
|
|
formattedData.tagline = _tagline(formattedData);
|
|
break;
|
|
}
|
|
formattedData.title = subtype + " of " + Utils.titleCase(powerLevel) + " " + Utils.titleCase(schoolOfMagic);
|
|
return {
|
|
seed,
|
|
type,
|
|
subtype,
|
|
powerLevel,
|
|
schoolOfMagic,
|
|
effects,
|
|
formattedData
|
|
};
|
|
});
|
|
};
|
|
var functions = {
|
|
generate
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/npcs/npcs.json
|
|
var require_npcs = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/npcs/npcs.json"(exports, module2) {
|
|
module2.exports = {
|
|
traits: [
|
|
"My eyes are very piercing, and bright {blue/green}.",
|
|
"My voice is {raspy/croaky/harsh} from years of {smoking/drinking}.",
|
|
"My hands are unusually {small/large}.",
|
|
"My feet are very {small/big}.",
|
|
"My eyebrows are very {bushy/thin/wide/short}.",
|
|
"My hair is an unusual colour for my race.",
|
|
"My {left/right} leg is false. I lost it {in battle/hunting the undead/fighting an evil mage/in an accident}.",
|
|
"My clothes are usually {very scruffy/very well kept}.",
|
|
"My sense of balance is terrible - I'm always {tripping over/bumping into things/falling over}.",
|
|
"My sense of {smell/taste/hearing/sight} is {strangely terrible/uncannily brilliant}.",
|
|
"My eyes are an unusual colour for my race.",
|
|
"My nose is very {wide/narrow}.",
|
|
"I lost my {left/right} eye {protecting my family/in a bar brawl/hunting a great beast}.",
|
|
"I have an unusually {big/small} nose.",
|
|
"I have {thick, shaggy/soft, full} hair.",
|
|
"I am unusually {tall/short} for my race.",
|
|
"I am very {slender/stout}.",
|
|
"I have a very {loud/quiet} voice.",
|
|
"I have a {bad/mild} limp in my {left/right} leg from years serving {in the military/as a guard for nobility}.",
|
|
"I have lots of freckles.",
|
|
"I have a nervous twitch in my {legs/hands}.",
|
|
"I talk too much when I get nervous.",
|
|
"I am very {quick/slow} to anger.",
|
|
"I am prone to illness, and always seem to have a {cough/cold/sickness}.",
|
|
"I'm very clumsy.",
|
|
"I am germaphobic.",
|
|
"I am meticulous and precise in all respects.",
|
|
"I am deaf in my {left/right} ear.",
|
|
"I get flashes of pain in my {left arm/right arm/left shoulder/right shoulder} from an old {dagger/arrow/sword} wound there.",
|
|
"I have no sense of humour.",
|
|
"I {never/always} remember a face.",
|
|
"I {never/always} remember a name.",
|
|
"I am scarred on my {chest/back} from an attempt on my life when I was a child.",
|
|
"I have an unusually {deep/high} voice.",
|
|
"I get nervous around members of the opposite sex.",
|
|
"I am known to complain {often/all the time/constantly}.",
|
|
"I am known for my {total lack of/lax sense of/high standards of/over-the-top} personal grooming and hygiene.",
|
|
"I am noticeably {skinny/overweight}.",
|
|
"I am confident and outgoing, thanks to my {natural good looks/natural self-confidence/ability to speak well to others}.",
|
|
"I am noticeably weary of strangers, since {the attack on my friend/the death of a loved one/strong religious beliefs/hidden hatred of other races}.",
|
|
"I have a small tattoo on my {neck/back/shoulder/forearm/knee} relating to {the deity I worship/a friend I lost/a family member I lost/my past I don't want to forget}.",
|
|
"I have a scar on my {left hand/right hand/left leg/right leg/stomach} from {when I was a reckless child/an attempted mugging/a bet gone wrong/an accident at my profession}.",
|
|
"I am deathly afraid of {spiders/snakes/insects/worms}.",
|
|
"I get {too cold/too hot} very easily.",
|
|
"I {X::love/hate} {confrontation/competition}, and {X::will often provoke people for fun/will do almost anything to get out of a fight or argument}.",
|
|
"I have a crooked nose. It was broken when {I was a child, getting into fights/I was attacked in the street/I had an accident}.",
|
|
"I am {slightly/very/extremely} unfit, and am often {out of breath/struggling with muscle cramp/dizzy and lightheaded}.",
|
|
"I am overly {stern/strict/hard on people}.",
|
|
"I am {very/extremely/somewhat/really} excitable, and often get myself in trouble with my {relentless/boundless/endless} enthusiasm.",
|
|
"I slouch {when I walk/when I sit/at all times}.",
|
|
"I crack my knuckles {all the time/when I'm nervous}.",
|
|
"I have a {mild/slight/bad/severe} lisp.",
|
|
"I am {very/extremely} impatient.",
|
|
"I {crack my knuckles/click my tongue/fidget/itch my face} when I'm nervous.",
|
|
"I am blind in my {right/left} eye.",
|
|
"I lost my {right/left} {arm/leg} in an accident.",
|
|
"I get bored and distracted very easily.",
|
|
"I have a very short temper.",
|
|
"I am very bossy."
|
|
],
|
|
desires: [
|
|
"I want revenge against my {X::brother/sister} for murdering our {mother/father} for {X::his/her} own financial gain.",
|
|
"All I desire is a home to live in and a family to care for.",
|
|
"I want justice for the crimes committed against my {clan/tribe/family/friends}.",
|
|
"I want clear my name of false wrongdoings - I didn't {murder the noble/steal the treasure/attack the guards/attack my friend}!",
|
|
"All I want is enough money to pay off my debts.",
|
|
"I want to prove myself, and escape the shadow of my {brother/sister/brothers/sisters/siblings}.",
|
|
"I want to prove myself in combat, so I'm going to {win a tournament/beat the local champion/join an adventuring party}.",
|
|
"I want to go on adventures, because {it's what my father did/it's what my mother did/I'm bored of my mundane profession}.",
|
|
"I want to study magic and become a grand wizard.",
|
|
"I want to find an ancient {sword/shield/suit of armour/gem/cloak/ring} that I was told of as a child.",
|
|
"I want to discover more about my ancestors.",
|
|
"I want to find my lost {brother/sister}.",
|
|
"I want to open my own {inn/blacksmiths/armoury/tavern/stable}.",
|
|
"I want to escape my past as a {thief/criminal/burglar/gang member}.",
|
|
"I want to save my friends from {slavery/prison}.",
|
|
"I want to prove myself to the person I love, by {winning a race/beating a rival in combat/convincing their family I am worthy}.",
|
|
"I want to provide for my family, but I cannot find work. Therefore, I'm planning to {rob a wealthy merchant/steal an aristocrats jewellery}.",
|
|
"I want to escape the bonds of my secret enslavement to a {warlock/witch/demon/Shadowfell being}.",
|
|
"I want to master a musical instrument.",
|
|
"I want to be taken more seriously by the guild of my profession...even if it means playing dirty.",
|
|
"I want to become a Cleric, so I can {heal the sick, like my family before me/heal my dying family member}.",
|
|
"I want to be free of my nagging spouse...whatever it takes.",
|
|
"I want to get my own back on my superior at work, who humiliates and belittles me about my {physical appearance/race/family/tribe/clan}.",
|
|
"I want to disappear from the law - I'm on the run for a crime I {didn't commit/did commit}.",
|
|
"I want to become a master of the {sword/axe/dagger} - my dream is to become a {knight/great warrior/hunter}.",
|
|
"I want to be free of my Warlock Patron.",
|
|
"I want to murder the {duke/mayor/baron} for burning down my village.",
|
|
"I want to travel and see the world, but I can't because {of my commitment to my family/I'm being drafted into the military/I'm scared of danger/I'm too weak}.",
|
|
"I want to find true love.",
|
|
"I want to prove to my family that I can be strong and independent.",
|
|
"I want to see my {brother/sister} succeed.",
|
|
"I want to find my {father/brother} - he left when I was a child to be a {monk/cleric/priest/missionary} and I don't know where he is.",
|
|
"I want to prove myself a great hunter, and claim the head of the local monster that's been {eating livestock/abducting farmers/murdering children/razing buildings}.",
|
|
"I want to seek mentor ship to control my latent Sorcerous powers.",
|
|
`I want to find my {sister/mother} - she left a letter saying she had to {"settle an old score"/"do one last job"/"make things right"} and I haven't seen her since.`,
|
|
"I just want to run away from all of my responsibilities."
|
|
]
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/npcs/index.js
|
|
var require_npcs2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/npcs/index.js"(exports) {
|
|
"use strict";
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var names_1 = __importDefault(require_names3());
|
|
var names_json_1 = __importDefault(require_names2());
|
|
var npcs_json_1 = __importDefault(require_npcs());
|
|
var RelationshipKeyWords = [
|
|
"mother",
|
|
"father",
|
|
"son",
|
|
"daughter",
|
|
"brother",
|
|
"sister"
|
|
];
|
|
var generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var seed = props.seed, race = props.race, gender = props.gender, _a = props.shouldGenerateRelations, shouldGenerateRelations = _a === void 0 ? true : _a;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
return Utils.withSeed(seed, function() {
|
|
race = race ? race : Utils.pick(Object.keys(names_json_1.default));
|
|
gender = gender ? gender : Utils.randomGender();
|
|
var nameObject = names_1.default.generate({ race, gender });
|
|
var traits = Utils.pickMany(npcs_json_1.default.traits, 2).map(Utils.parseTemplate);
|
|
var desires = Utils.pickMany(npcs_json_1.default.desires, 1).map(Utils.parseTemplate);
|
|
var relations = [];
|
|
if (shouldGenerateRelations) {
|
|
relations = generateRelationships({
|
|
originalNpcNameObject: nameObject,
|
|
race,
|
|
desires,
|
|
seed
|
|
});
|
|
}
|
|
return {
|
|
seed,
|
|
nameObject,
|
|
gender,
|
|
race,
|
|
traits,
|
|
desires,
|
|
formattedData: {
|
|
name: nameObject.name,
|
|
firstName: nameObject.firstName,
|
|
lastName: nameObject.lastName,
|
|
gender: Utils.titleCase(gender),
|
|
race: Utils.formatRace(race),
|
|
traits,
|
|
desires,
|
|
relations
|
|
},
|
|
relations
|
|
};
|
|
});
|
|
};
|
|
var generateRelationships = function(_a) {
|
|
var originalNpcNameObject = _a.originalNpcNameObject, race = _a.race, desires = _a.desires, seed = _a.seed;
|
|
var relationTitles = getRelationTitlesFromDesires(desires);
|
|
return relationTitles.map(function(relationTitle) {
|
|
switch (relationTitle) {
|
|
case "father":
|
|
case "mother":
|
|
case "brother":
|
|
case "sister":
|
|
case "son":
|
|
case "daughter":
|
|
return {
|
|
relationTitle,
|
|
npc: generateFamilyMember({
|
|
originalNpcNameObject,
|
|
race,
|
|
relationTitle,
|
|
seed: relationTitle + "-" + seed
|
|
})
|
|
};
|
|
}
|
|
});
|
|
};
|
|
var getRelationTitlesFromDesires = function(desires) {
|
|
var concatonatedDesires = desires.join(":");
|
|
return RelationshipKeyWords.filter(function(relationKeyword) {
|
|
return concatonatedDesires.includes(" " + relationKeyword);
|
|
});
|
|
};
|
|
var generateFamilyMember = function(_a) {
|
|
var originalNpcNameObject = _a.originalNpcNameObject, race = _a.race, relationTitle = _a.relationTitle, seed = _a.seed;
|
|
var gender = null;
|
|
switch (relationTitle) {
|
|
case "father":
|
|
case "brother":
|
|
case "son":
|
|
gender = "male";
|
|
break;
|
|
case "mother":
|
|
case "sister":
|
|
case "daughter":
|
|
gender = "female";
|
|
break;
|
|
}
|
|
var generatedRelation = generate({
|
|
race,
|
|
gender,
|
|
shouldGenerateRelations: false,
|
|
seed
|
|
});
|
|
if (originalNpcNameObject.formattedData.lastName != null && generatedRelation.formattedData.lastName != null) {
|
|
generatedRelation.nameObject.name = generatedRelation.nameObject.name.replace(generatedRelation.formattedData.lastName, originalNpcNameObject.formattedData.lastName);
|
|
generatedRelation.nameObject.lastName = originalNpcNameObject.lastName;
|
|
generatedRelation.formattedData.name = generatedRelation.formattedData.name.replace(generatedRelation.formattedData.lastName, originalNpcNameObject.formattedData.lastName);
|
|
generatedRelation.formattedData.lastName = originalNpcNameObject.lastName;
|
|
}
|
|
return generatedRelation;
|
|
};
|
|
var generateTrait = function() {
|
|
return Utils.parseTemplate(Utils.pick(npcs_json_1.default.traits));
|
|
};
|
|
var generateDesire = function() {
|
|
return Utils.parseTemplate(Utils.pick(npcs_json_1.default.desires));
|
|
};
|
|
var functions = {
|
|
generate,
|
|
trait: generateTrait,
|
|
desire: generateDesire
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/settlements/settlements.json
|
|
var require_settlements = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/settlements/settlements.json"(exports, module2) {
|
|
module2.exports = {
|
|
types: {
|
|
thorp: {
|
|
minPop: 5,
|
|
maxPop: 20,
|
|
natural_landmark_count: "0-1",
|
|
establishments: 1
|
|
},
|
|
hamlet: {
|
|
minPop: 20,
|
|
maxPop: 80,
|
|
natural_landmark_count: "0-1",
|
|
establishments: 1
|
|
},
|
|
village: {
|
|
minPop: 80,
|
|
maxPop: 400,
|
|
natural_landmark_count: "0-1",
|
|
establishments: 1
|
|
},
|
|
small_town: {
|
|
minPop: 400,
|
|
maxPop: 900,
|
|
natural_landmark_count: "0-2",
|
|
establishments: 1
|
|
},
|
|
medium_town: {
|
|
minPop: 900,
|
|
maxPop: 2e3,
|
|
natural_landmark_count: "0-2",
|
|
establishments: 1
|
|
},
|
|
large_town: {
|
|
minPop: 2e3,
|
|
maxPop: 5e3,
|
|
natural_landmark_count: "0-3",
|
|
establishments: 1
|
|
},
|
|
small_city: {
|
|
minPop: 5e3,
|
|
maxPop: 1e4,
|
|
natural_landmark_count: "0-4",
|
|
establishments: 1
|
|
},
|
|
medium_city: {
|
|
minPop: 1e4,
|
|
maxPop: 2e4,
|
|
natural_landmark_count: "0-4",
|
|
establishments: 1
|
|
},
|
|
large_city: {
|
|
minPop: 2e4,
|
|
maxPop: 5e4,
|
|
natural_landmark_count: "1-4",
|
|
establishments: 1
|
|
},
|
|
great_city: {
|
|
minPop: 5e4,
|
|
maxPop: 1e5,
|
|
natural_landmark_count: "2-5",
|
|
establishments: 1
|
|
},
|
|
metropolis: {
|
|
minPop: 1e5,
|
|
maxPop: -10050,
|
|
natural_landmark_count: "3-6",
|
|
establishments: 1
|
|
}
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/establishments/establishments.json
|
|
var require_establishments = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/establishments/establishments.json"(exports, module2) {
|
|
module2.exports = {
|
|
establishments: [
|
|
"general_store",
|
|
"stable",
|
|
"inn",
|
|
"tavern",
|
|
"armoursmith",
|
|
"weaponsmith",
|
|
"leatherworker",
|
|
"tanner",
|
|
"bakery"
|
|
],
|
|
establishmentVocationsRequired: ["owner", "manager"],
|
|
establishmentVocationsOptional: ["assistant", "apprentice"],
|
|
establishmentVocationsOptionalPerType: {
|
|
general_store: ["cleaner"],
|
|
stable: ["stable hand", "farrier"],
|
|
inn: ["landlord", "bar tender", "glass collector"],
|
|
tavern: ["landlord", "bar tender", "glass collector"]
|
|
},
|
|
establishmentSecrets: [
|
|
"Built on an ancient {Dwarven/Elven/Dragonborn/Orcish} burial ground.",
|
|
"Built with money stolen from {a local religious institution/a local government}.",
|
|
"No one knows where the owner came from.",
|
|
"There are secret {chambers/tunnels/caverns} under the foundations.",
|
|
"The walls are hollow, for unknown reasons.",
|
|
"Runes of unknown origin are carved into several pieces of furniture.",
|
|
"A {magical/mysterious/terrifying} portal to the {Infernal Plane/6th Plane of the Abyss/7th Hell} exists in a {hollow space/cave/cavern} below the foundations.",
|
|
"This establishment is harbouring a {war/political} refugee in the {attic/loft/basement/cellar}.",
|
|
"This establishment is harbouring a criminal, as the criminal showed kindness to the owner.",
|
|
"{Some/Many/All} of the regular patrons are {mimics/lycanthropes/vampires}.",
|
|
"The owner is {selling/peddling} illegal {magical ingredients/potions/magical scrolls} to their patrons.",
|
|
"The owner never ages. Patrons who come to learn this keep their mouths shut, as they get discounted prices in return.",
|
|
"The owner is secretly a {werewolf/demon/mimic/doppelganger} who just wants a quiet life."
|
|
],
|
|
establishmentNameSetA: [
|
|
"The {$anyItem}",
|
|
"The {$nounPhysicalAdjective} {$anyItem}",
|
|
"The {$sizeAdjective} {$anyItem}",
|
|
"The {$colourAdjective} {$anyItem}",
|
|
"The {$nounPhysicalAdjective} {$animal}",
|
|
"The {$sizeAdjective} {$animal}",
|
|
"The {$colourAdjective} {$animal}",
|
|
"{$ownersLastName}'s {$positiveAdjective} {Market/Emporium/Bazaar/Outlet/Store/Boutique}",
|
|
"{$ownersLastName}'s",
|
|
"{$lastNameA} & {$lastNameB}'s"
|
|
],
|
|
establishmentGeneralLookAndAppearances: [
|
|
"is spacious, with a tall ceiling.",
|
|
"is big, with wide rooms and tall walls.",
|
|
"is cramped, with a low ceiling.",
|
|
"is small, nestled in between 2 larger buildings.",
|
|
"is open and bright, with large windows and a high ceiling.",
|
|
'looks old and {worn/"well used"}.',
|
|
'looks "well used", but carefully maintained.',
|
|
"is exceptionally clean and tidy.",
|
|
'is very messy, but not particularly "dirty".',
|
|
"is grotty, and gives off a shady atmosphere.",
|
|
"looks brand new, with little obvious wear and tear."
|
|
],
|
|
establishmentBuiltFrom: [
|
|
"It is {built/constructed} from {oak/spruce/stone blocks/stone bricks/rough stone blocks/hewn stone blocks/clay bricks} with a {shallow/tall/wide} {slate/thatched/shingle tiled} roof, and the floor is made of {flagstones/old flagstones/wooden floorboards/sturdy wooden floorboards/cobblestones/worn, chipped bricks}."
|
|
],
|
|
establishmentEnteringAndPatrons: {
|
|
i: [
|
|
"As you {step into/walk into/enter} the building,",
|
|
"As you {step/walk/enter} through the door,",
|
|
"As you set foot on the threshold",
|
|
"{Entering/Stepping into} the building,"
|
|
],
|
|
ii: [
|
|
"you see there are {some/several/one or two/a few} other patrons present. They {look at/regard/eye/notice} you briefly before ignoring you.",
|
|
"{some/several/one or two/a few} of the patrons {look at/regard/eye/spot check/scan} you {cautiously/suspiciously/curiously}, before {turning away/turning back to their business/ignoring you/going about their business}."
|
|
]
|
|
},
|
|
establishmentDescriptionsInn: [
|
|
"the {floor/bar} is sticky, and covered in stains",
|
|
"most of the furniture seems {very battered, like it's seen better days/quite new, and in good condition}",
|
|
"a huge {sword/axe/breastplate/shield} hangs on a wooden plate above the bar",
|
|
"a huge, roaring fire is situated on the far wall",
|
|
"the smell of {various/strong} {ales/ciders/wines/spirits} wafts across the room, coming from the {basement/cellar/back door}",
|
|
"{large/small} {ornate/delicate/sturdy looking} lanterns adorn most of the {walls/pillars/walls and pillars}",
|
|
"the windows are covered with simple wooden shutters"
|
|
],
|
|
establishmentDescriptionsGeneralStore: [
|
|
"all manner of items are scattered across the counter",
|
|
"there are overflowing {boxes/chests/barrels} in all corners of the room - each labelled with {Dwarven runes/Elven script/an unknown language}",
|
|
"the sounds of animals {squarking/barking/meowing} can be heard coming from the store room",
|
|
"a small {copper/iron/bronze} bell above the door {chimes/rings/sounds} when the door opens and closes",
|
|
"posters of various {foods/vegetables} and {items/farming equipment} are nailed to the walls, with faded prices in large, bold letters",
|
|
"a {sweeping brush is/mop and bucket are} leaning against the {counter/far wall}"
|
|
],
|
|
establishmentDescriptionsArmoursmith: [
|
|
"you {notice/eye} a large {iron/steel/bronze} anvil in the {nearest/far} corner",
|
|
"a selection of {tools/hammers} are hanging from a rack near the furnace",
|
|
"you realise there is a {thick/thin} coating of {dust/soot/coal dust} coats everything",
|
|
"a roaring furnace is situated in the centre of the room",
|
|
"a large {family crest/religious symbol/military insignia}, made of wrought iron, hangs on the {north/west/east/south} wall"
|
|
],
|
|
establishmentDescriptionsStable: ["horses", "more horses"],
|
|
establishmentDescriptionsDefault: [
|
|
"a {barking/meowing/squarking} noise can be heard from a back room somewhere",
|
|
"a large chandelier hangs in the centre of the room"
|
|
]
|
|
};
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/establishments/index.js
|
|
var require_establishments2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/establishments/index.js"(exports) {
|
|
"use strict";
|
|
var __spreadArrays = exports && exports.__spreadArrays || function() {
|
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++)
|
|
s += arguments[i].length;
|
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
r[k] = a[j];
|
|
return r;
|
|
};
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var establishments_json_1 = __importDefault(require_establishments());
|
|
var genericData_json_1 = __importDefault(require_genericData());
|
|
var npcs_1 = __importDefault(require_npcs2());
|
|
var _establishmentSecret = function() {
|
|
return Utils.parseTemplate(Utils.pick(establishments_json_1.default.establishmentSecrets));
|
|
};
|
|
var getNpcStoreFrontNames = function(npcs) {
|
|
var names = npcs.map(function(npc) {
|
|
return npc.formattedData.lastName ? npc.formattedData.lastName : npc.formattedData.firstName;
|
|
});
|
|
return names;
|
|
};
|
|
var _establishmentName = function(type, npcs) {
|
|
var _establishmentNameSetA = function(npcs2) {
|
|
var npcStoreFrontNames = Utils.pickMany(getNpcStoreFrontNames(npcs2), 2);
|
|
var anyItemPool = __spreadArrays(genericData_json_1.default.weapon, genericData_json_1.default.armour, genericData_json_1.default.commonItem);
|
|
return Utils.parseTemplate(Utils.pick(establishments_json_1.default.establishmentNameSetA), {
|
|
anyItem: Utils.pick(anyItemPool),
|
|
animal: Utils.pick(genericData_json_1.default.animalSingular),
|
|
sizeAdjective: Utils.pick(genericData_json_1.default.sizeAdjectives),
|
|
colourAdjective: Utils.pick(genericData_json_1.default.coloursAdjective),
|
|
nounPhysicalAdjective: Utils.pick(genericData_json_1.default.nounPhysicalAdjectives),
|
|
positiveAdjective: Utils.pick(genericData_json_1.default.positiveAdjective),
|
|
ownersLastName: npcStoreFrontNames[0],
|
|
lastNameA: npcStoreFrontNames[0],
|
|
lastNameB: npcStoreFrontNames[1]
|
|
});
|
|
};
|
|
switch (type) {
|
|
case "general_store":
|
|
case "inn":
|
|
case "tavern":
|
|
case "armorsmith":
|
|
case "weaponsmith":
|
|
case "stable":
|
|
case "carpenter":
|
|
case "leatherworker":
|
|
case "tanner":
|
|
case "cobbler":
|
|
default:
|
|
return _establishmentNameSetA(npcs);
|
|
}
|
|
};
|
|
var _npcs = function(seed, establishmentType) {
|
|
var poolOfOptionalVocationTypes = __spreadArrays(establishments_json_1.default.establishmentVocationsOptional, establishments_json_1.default.establishmentVocationsOptionalPerType[establishmentType] || []);
|
|
var workerVocations = __spreadArrays([
|
|
Utils.pick(establishments_json_1.default.establishmentVocationsRequired)
|
|
], Utils.pickMany(poolOfOptionalVocationTypes, Utils.rand(1, 2)));
|
|
return workerVocations.map(function(vocation, index) {
|
|
var npc = npcs_1.default.generate({
|
|
seed: "" + seed + vocation + index
|
|
});
|
|
npc.vocation = vocation;
|
|
npc.formattedData.vocation = Utils.titleCase(vocation);
|
|
return npc;
|
|
});
|
|
};
|
|
var _establishmentType = function() {
|
|
return Utils.pick(establishments_json_1.default.establishments);
|
|
};
|
|
var _description = function(type) {
|
|
var lookAndAppearance = "This establishment " + Utils.pick(establishments_json_1.default.establishmentGeneralLookAndAppearances);
|
|
var builtFrom = Utils.pick(establishments_json_1.default.establishmentBuiltFrom);
|
|
var enteringAndPatrons = Utils.pick(establishments_json_1.default.establishmentEnteringAndPatrons.i) + " " + Utils.pick(establishments_json_1.default.establishmentEnteringAndPatrons.ii);
|
|
var establishmentSpecificLines = [];
|
|
switch (type) {
|
|
case "inn":
|
|
case "tavern":
|
|
establishmentSpecificLines = Utils.pickMany(establishments_json_1.default.establishmentDescriptionsInn, 2);
|
|
break;
|
|
case "armoursmith":
|
|
case "weaponsmith":
|
|
establishmentSpecificLines = Utils.pickMany(establishments_json_1.default.establishmentDescriptionsArmoursmith, 2);
|
|
break;
|
|
default:
|
|
establishmentSpecificLines = Utils.pickMany(establishments_json_1.default.establishmentDescriptionsDefault, 2);
|
|
break;
|
|
}
|
|
var typeSpecificLine = establishmentSpecificLines[0] + ", and " + establishmentSpecificLines[1] + ".";
|
|
return Utils.parseTemplate(lookAndAppearance + " " + builtFrom + " " + enteringAndPatrons + " " + Utils.firstCharacterUppercase(typeSpecificLine));
|
|
};
|
|
exports.generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var type = props.type, seed = props.seed;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
return Utils.withSeed(seed, function() {
|
|
type = type ? type : _establishmentType();
|
|
var npcs = _npcs(seed, type);
|
|
var name = _establishmentName(type, npcs);
|
|
var secret = _establishmentSecret();
|
|
var description = _description(type);
|
|
return {
|
|
seed,
|
|
name,
|
|
type,
|
|
secret,
|
|
npcs,
|
|
description,
|
|
formattedData: {
|
|
name: Utils.titleCase(name),
|
|
type: Utils.titleCase(type),
|
|
secret,
|
|
npcs,
|
|
description
|
|
}
|
|
};
|
|
});
|
|
};
|
|
var functions = {
|
|
generate: exports.generate
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/settlements/index.js
|
|
var require_settlements2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/settlements/index.js"(exports) {
|
|
"use strict";
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var settlements_json_1 = __importDefault(require_settlements());
|
|
var establishments_1 = __importDefault(require_establishments2());
|
|
var settlementType = function() {
|
|
return Utils.pick(Object.keys(settlements_json_1.default.types));
|
|
};
|
|
var _population = function(settlementType2) {
|
|
var population = Utils.rand(settlements_json_1.default.types[settlementType2].minPop, settlements_json_1.default.types[settlementType2].maxPop);
|
|
return population.toLocaleString();
|
|
};
|
|
exports.generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var type = props.type, seed = props.seed;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
return Utils.withSeed(seed, function() {
|
|
type = type ? type : settlementType();
|
|
return {
|
|
seed,
|
|
type,
|
|
population: _population(type),
|
|
establishments: [
|
|
establishments_1.default.generate({ seed: seed + "-1" }),
|
|
establishments_1.default.generate({ seed: seed + "-2" }),
|
|
establishments_1.default.generate({ seed: seed + "-3" })
|
|
]
|
|
};
|
|
});
|
|
};
|
|
var functions = {
|
|
generate: exports.generate
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/interfaces.js
|
|
var require_interfaces = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/interfaces.js"(exports) {
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var eStoryhookBanks;
|
|
(function(eStoryhookBanks2) {
|
|
eStoryhookBanks2["NPC_ACTS"] = "NPC_ACTS";
|
|
eStoryhookBanks2["PC_RELATED"] = "PC_RELATED";
|
|
eStoryhookBanks2["LOCATION_BASED_URBAN"] = "LOCATION_BASED_URBAN";
|
|
eStoryhookBanks2["LOCATION_BASED_WILDERNESS"] = "LOCATION_BASED_WILDERNESS";
|
|
})(eStoryhookBanks = exports.eStoryhookBanks || (exports.eStoryhookBanks = {}));
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/storyhooks/npc_acts.json
|
|
var require_npc_acts = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/storyhooks/npc_acts.json"(exports, module2) {
|
|
module2.exports = [
|
|
"An NPC takes a {disliking/liking} to {a PC/another NPC}",
|
|
"An NPC is caught palming a weapon by the PCs",
|
|
"An NPC shuffles nervously and suspiciously",
|
|
"An NPC becomes {fearful/angry/scared/terrified}",
|
|
"An NPC {insults/threatens} {a PC/another NPC}"
|
|
];
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/storyhooks/pc_related.json
|
|
var require_pc_related = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/storyhooks/pc_related.json"(exports, module2) {
|
|
module2.exports = [
|
|
"An NPC takes a {disliking/liking} to {a PC/another NPC}",
|
|
"An NPC is caught palming a weapon by the PCs",
|
|
"An NPC shuffles nervously and suspiciously",
|
|
"An NPC becomes {fearful/angry/scared/terrified}",
|
|
"An NPC {insults/threatens} {a PC/another NPC}"
|
|
];
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/storyhooks/location_based_urban.json
|
|
var require_location_based_urban = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/storyhooks/location_based_urban.json"(exports, module2) {
|
|
module2.exports = [
|
|
"A PC notices a shadowy figure",
|
|
"A {brawl/fight} breaks out in a nearby tavern",
|
|
"A {hostile/agressive/mysterious} faction the PCs know have developed a prescence in this town"
|
|
];
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/storyhooks/location_based_wilderness.json
|
|
var require_location_based_wilderness = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/storyhooks/location_based_wilderness.json"(exports, module2) {
|
|
module2.exports = ["A PC notices a a huge plume of smoke to the {North/South/East/West}"];
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/storyhooks/index.js
|
|
var require_storyhooks = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/storyhooks/index.js"(exports) {
|
|
"use strict";
|
|
var __assign = exports && exports.__assign || function() {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s)
|
|
if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (Object.hasOwnProperty.call(mod, k))
|
|
result[k] = mod[k];
|
|
}
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Utils = __importStar(require_utils());
|
|
var interfaces_1 = require_interfaces();
|
|
var npc_acts_json_1 = __importDefault(require_npc_acts());
|
|
var pc_related_json_1 = __importDefault(require_pc_related());
|
|
var location_based_urban_json_1 = __importDefault(require_location_based_urban());
|
|
var location_based_wilderness_json_1 = __importDefault(require_location_based_wilderness());
|
|
var generate = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
var seed = props.seed, storyhookBank = props.storyhookBank;
|
|
seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID();
|
|
storyhookBank = storyhookBank || Utils.pick(Object.values(interfaces_1.eStoryhookBanks));
|
|
var actualStorybank;
|
|
switch (storyhookBank) {
|
|
case interfaces_1.eStoryhookBanks.NPC_ACTS:
|
|
actualStorybank = npc_acts_json_1.default;
|
|
break;
|
|
case interfaces_1.eStoryhookBanks.PC_RELATED:
|
|
actualStorybank = pc_related_json_1.default;
|
|
break;
|
|
case interfaces_1.eStoryhookBanks.LOCATION_BASED_URBAN:
|
|
actualStorybank = location_based_urban_json_1.default;
|
|
break;
|
|
case interfaces_1.eStoryhookBanks.LOCATION_BASED_WILDERNESS:
|
|
actualStorybank = location_based_wilderness_json_1.default;
|
|
break;
|
|
}
|
|
return Utils.withSeed(seed, function() {
|
|
return {
|
|
seed,
|
|
storyhook: Utils.parseTemplate(Utils.pick(actualStorybank)),
|
|
storyhookBank
|
|
};
|
|
});
|
|
};
|
|
var npcActs = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
return generate(__assign(__assign({}, props), { storyhookBank: interfaces_1.eStoryhookBanks.NPC_ACTS }));
|
|
};
|
|
var pcRelated = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
return generate(__assign(__assign({}, props), { storyhookBank: interfaces_1.eStoryhookBanks.PC_RELATED }));
|
|
};
|
|
var locationBasedUrban = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
return generate(__assign(__assign({}, props), { storyhookBank: interfaces_1.eStoryhookBanks.LOCATION_BASED_URBAN }));
|
|
};
|
|
var locationBasedWilderness = function(props) {
|
|
if (props === void 0) {
|
|
props = {};
|
|
}
|
|
return generate(__assign(__assign({}, props), { storyhookBank: interfaces_1.eStoryhookBanks.LOCATION_BASED_WILDERNESS }));
|
|
};
|
|
var functions = {
|
|
generate,
|
|
npcActs,
|
|
pcRelated,
|
|
locationBasedUrban,
|
|
locationBasedWilderness
|
|
};
|
|
exports.default = functions;
|
|
}
|
|
});
|
|
|
|
// node_modules/fantasy-content-generator/dist/index.js
|
|
var require_dist2 = __commonJS({
|
|
"node_modules/fantasy-content-generator/dist/index.js"(exports) {
|
|
"use strict";
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var loots_1 = __importDefault(require_loots2());
|
|
exports.Loots = loots_1.default;
|
|
var magic_items_1 = __importDefault(require_magic_items2());
|
|
exports.MagicItems = magic_items_1.default;
|
|
var names_1 = __importDefault(require_names3());
|
|
exports.Names = names_1.default;
|
|
var npcs_1 = __importDefault(require_npcs2());
|
|
exports.NPCs = npcs_1.default;
|
|
var settlements_1 = __importDefault(require_settlements2());
|
|
exports.Settlements = settlements_1.default;
|
|
var establishments_1 = __importDefault(require_establishments2());
|
|
exports.Establishments = establishments_1.default;
|
|
var storyhooks_1 = __importDefault(require_storyhooks());
|
|
exports.Storyhooks = storyhooks_1.default;
|
|
}
|
|
});
|
|
|
|
// main.ts
|
|
var main_exports = {};
|
|
__export(main_exports, {
|
|
default: () => FantasyPlugin
|
|
});
|
|
module.exports = __toCommonJS(main_exports);
|
|
|
|
// editor/GeneratorModal.ts
|
|
var import_obsidian = require("obsidian");
|
|
var import_fantasy_name_generator = __toESM(require_dist());
|
|
|
|
// lists/humanFamilyNames.ts
|
|
var familyNameList = [
|
|
"Adshead",
|
|
"Akers",
|
|
"Antell",
|
|
"Applegarth",
|
|
"Babb",
|
|
"Babbs",
|
|
"Baffin",
|
|
"Bagg",
|
|
"Baggett",
|
|
"Bagnall",
|
|
"Baldey",
|
|
"Bamber",
|
|
"Bark",
|
|
"Barling",
|
|
"Barnstable",
|
|
"Barraclough",
|
|
"Bastable",
|
|
"Bastin",
|
|
"Bather",
|
|
"Batkin",
|
|
"Batt",
|
|
"Bazley",
|
|
"Bebb",
|
|
"Beddall",
|
|
"Beeby",
|
|
"Beecroft",
|
|
"Beedell",
|
|
"Bellis",
|
|
"Belsey",
|
|
"Berridge",
|
|
"Besley",
|
|
"Bibby",
|
|
"Bickle",
|
|
"Biddle",
|
|
"Biddulph",
|
|
"Bigg",
|
|
"Binks",
|
|
"Binns",
|
|
"Bisp",
|
|
"Biss",
|
|
"Blenk",
|
|
"Blenkin",
|
|
"Boam",
|
|
"Bobo",
|
|
"Boddington",
|
|
"Boffey",
|
|
"Bonger",
|
|
"Bonney",
|
|
"Bonser",
|
|
"Borrett",
|
|
"Bossey",
|
|
"Botterill",
|
|
"Botting",
|
|
"Bottom",
|
|
"Bottomley",
|
|
"Botwright",
|
|
"Bowser",
|
|
"Bracher",
|
|
"Brasnett",
|
|
"Brayley",
|
|
"Breary",
|
|
"Brickwood",
|
|
"Brindley",
|
|
"Broadfoot",
|
|
"Broadribb",
|
|
"Brocksopp",
|
|
"Broster",
|
|
"Buckmaster",
|
|
"Budge",
|
|
"Buffard",
|
|
"Bugg",
|
|
"Buggy",
|
|
"Bulger",
|
|
"Bulman",
|
|
"Bunce",
|
|
"Bunt",
|
|
"Burrow",
|
|
"Bushby",
|
|
"Buss",
|
|
"Cade",
|
|
"Cadwaller",
|
|
"Cantrill",
|
|
"Cardno",
|
|
"Catlow",
|
|
"Cattermole",
|
|
"Chaffe",
|
|
"Chaffer",
|
|
"Chard",
|
|
"Chettle",
|
|
"Chilcott",
|
|
"Chitty",
|
|
"Chivers",
|
|
"Chubb",
|
|
"Chugg",
|
|
"Clewes",
|
|
"Coaker",
|
|
"Cobden",
|
|
"Cobley",
|
|
"Coggan",
|
|
"Coggins",
|
|
"Collop",
|
|
"Coney",
|
|
"Coote",
|
|
"Copp",
|
|
"Coppard",
|
|
"Cornock",
|
|
"Cossey",
|
|
"Cottle",
|
|
"Coultip",
|
|
"Crang",
|
|
"Crimp",
|
|
"Croom",
|
|
"Crowles",
|
|
"Cubitt",
|
|
"Cullimore",
|
|
"Cuss",
|
|
"Custance",
|
|
"Cuthbert",
|
|
"Dabbin",
|
|
"Dabbing",
|
|
"Dabbs",
|
|
"Dagg",
|
|
"Dainty",
|
|
"Deeley",
|
|
"Derrick",
|
|
"Dibb",
|
|
"Dibble",
|
|
"Diccox",
|
|
"Diggins",
|
|
"Diggle",
|
|
"Diggles",
|
|
"Digweed",
|
|
"Dimmock",
|
|
"Dinsdale",
|
|
"Dipple",
|
|
"Dobbie",
|
|
"Dobby",
|
|
"Doggett",
|
|
"Dorey",
|
|
"Drabble",
|
|
"Draycott",
|
|
"Dring",
|
|
"Drudge",
|
|
"Duffield",
|
|
"Dufty",
|
|
"Duggan",
|
|
"Duggleby",
|
|
"Dumbrell",
|
|
"Dunkley",
|
|
"Eatwell",
|
|
"Eggins",
|
|
"Entwistle",
|
|
"Erlam",
|
|
"Etchells",
|
|
"Fairclough",
|
|
"Felgate",
|
|
"Fensome",
|
|
"Fenton",
|
|
"Fidge",
|
|
"Fidoe",
|
|
"Figg",
|
|
"Filer",
|
|
"Fincham",
|
|
"Firkins",
|
|
"Flann",
|
|
"Flanner",
|
|
"Flippance",
|
|
"Flook",
|
|
"Flunder",
|
|
"Followes",
|
|
"Fooks",
|
|
"Fremlin",
|
|
"Frisby",
|
|
"Frogley",
|
|
"Frohock",
|
|
"Froome",
|
|
"Frow",
|
|
"Fuggle",
|
|
"Furse",
|
|
"Furze",
|
|
"Gabb",
|
|
"Gaffey",
|
|
"Gagg",
|
|
"Gander",
|
|
"Garbutt",
|
|
"Garlick",
|
|
"Garn",
|
|
"Gazard",
|
|
"Gedge",
|
|
"Giblett",
|
|
"Giddy",
|
|
"Gigg",
|
|
"Gilliat",
|
|
"Gimble",
|
|
"Gimson",
|
|
"Ginger",
|
|
"Gipps",
|
|
"Girdler",
|
|
"Gissing",
|
|
"Gleave",
|
|
"Goggin",
|
|
"Gollogly",
|
|
"Gomm",
|
|
"Goodier",
|
|
"Gook",
|
|
"Gorringe",
|
|
"Gorwyn",
|
|
"Gosden",
|
|
"Gribble",
|
|
"Grigg",
|
|
"Griggs",
|
|
"Grill",
|
|
"Grimble",
|
|
"Grimes",
|
|
"Grimshaw",
|
|
"Grist",
|
|
"Grubb",
|
|
"Guckeen",
|
|
"Guckian",
|
|
"Guild",
|
|
"Gull",
|
|
"Gully",
|
|
"Gumbold",
|
|
"Gummer",
|
|
"Gummidge",
|
|
"Gurden",
|
|
"Haffenden",
|
|
"Hales",
|
|
"Halse",
|
|
"Harpham",
|
|
"Hartle",
|
|
"Hatch",
|
|
"Hayhurst",
|
|
"Hearle",
|
|
"Henley",
|
|
"Henwood",
|
|
"Heppell",
|
|
"Herrick",
|
|
"Herring",
|
|
"Hesketh",
|
|
"Hext",
|
|
"Hicken",
|
|
"Hickmott",
|
|
"Higman",
|
|
"Hinchcliffe",
|
|
"Hindmarsh",
|
|
"Hobley",
|
|
"Hoddy",
|
|
"Hogben",
|
|
"Holdom",
|
|
"Hollick",
|
|
"Holtom",
|
|
"Honeysett",
|
|
"Hook",
|
|
"Hopley",
|
|
"Hopps",
|
|
"Horrocks",
|
|
"Horsfall",
|
|
"Horwood",
|
|
"Hotten",
|
|
"Housely",
|
|
"Howie",
|
|
"Huff",
|
|
"Huffam",
|
|
"Hutton",
|
|
"Huxtable",
|
|
"Icke",
|
|
"Idden",
|
|
"Inskip",
|
|
"Iveson",
|
|
"Izzard",
|
|
"Jaggs",
|
|
"Jellis",
|
|
"Jepson",
|
|
"Jesty",
|
|
"Keel",
|
|
"Keetley",
|
|
"Kerkin",
|
|
"Kerslake",
|
|
"Kettley",
|
|
"Killick",
|
|
"Kinch",
|
|
"Knaggs",
|
|
"Kneebone",
|
|
"Knopp",
|
|
"Knott",
|
|
"Lagden",
|
|
"Laslett",
|
|
"Laverick",
|
|
"Leaper",
|
|
"Leggett",
|
|
"Liddane",
|
|
"Liddy",
|
|
"Liggan",
|
|
"Lithgoe",
|
|
"Lobb",
|
|
"Lodder",
|
|
"Looby",
|
|
"Loody",
|
|
"Lubbock",
|
|
"Luff",
|
|
"Lugard",
|
|
"Lugg",
|
|
"Lumsden",
|
|
"Lyle",
|
|
"Mabb",
|
|
"Mabbitt",
|
|
"Mabbot",
|
|
"Mabbs",
|
|
"Mabbutt",
|
|
"Maffey",
|
|
"Mallam",
|
|
"Mangold",
|
|
"Mapp",
|
|
"Mappin",
|
|
"Marfell",
|
|
"Matthams",
|
|
"Maunder",
|
|
"Maxted",
|
|
"Mayo",
|
|
"Meech",
|
|
"Meeson",
|
|
"Meggison",
|
|
"Meggitt",
|
|
"Meggs",
|
|
"Mellings",
|
|
"Merrikin",
|
|
"Metherell",
|
|
"Mew",
|
|
"Miggles",
|
|
"Miggs",
|
|
"Milsom",
|
|
"Milson",
|
|
"Minchin",
|
|
"Minns",
|
|
"Mobbs",
|
|
"Moberly",
|
|
"Mockler",
|
|
"Mogford",
|
|
"Mogg",
|
|
"Moggs",
|
|
"Morkam",
|
|
"Morphett",
|
|
"Mossman",
|
|
"Mossop",
|
|
"Mottershead",
|
|
"Moulds",
|
|
"Muddle",
|
|
"Muddock",
|
|
"Mudge",
|
|
"Mullock",
|
|
"Murch",
|
|
"Murfin",
|
|
"Murfitt",
|
|
"Musson",
|
|
"Mustill",
|
|
"Mutter",
|
|
"Mutton",
|
|
"Nance",
|
|
"Napper",
|
|
"Neep",
|
|
"Negus",
|
|
"Netherway",
|
|
"Newitt",
|
|
"Niblett",
|
|
"Nickless",
|
|
"Noad",
|
|
"Nobbs",
|
|
"Noblet",
|
|
"Nosworthy",
|
|
"Nottage",
|
|
"Nutt",
|
|
"Offen",
|
|
"Oram",
|
|
"Orcutt",
|
|
"Ord",
|
|
"Orpe",
|
|
"Paddock",
|
|
"Paddon",
|
|
"Pannell",
|
|
"Parham",
|
|
"Pavey",
|
|
"Peay",
|
|
"Peever",
|
|
"Pegg",
|
|
"Pegge",
|
|
"Pegler",
|
|
"Pegrum",
|
|
"Pelly",
|
|
"Pelter",
|
|
"Pendle",
|
|
"Petch",
|
|
"Petcher",
|
|
"Petchey",
|
|
"Pettipher",
|
|
"Philp",
|
|
"Phippen",
|
|
"Phippin",
|
|
"Pickersgill",
|
|
"Pickley",
|
|
"Pickwell",
|
|
"Pidduck",
|
|
"Pigg",
|
|
"Pilkington",
|
|
"Pimblett",
|
|
"Pingree",
|
|
"Pinch",
|
|
"Pinn",
|
|
"Pither",
|
|
"Pochin",
|
|
"Poggs",
|
|
"Polkinghorne",
|
|
"Pomeroy",
|
|
"Pomfret",
|
|
"Postlethwaite",
|
|
"Potticary",
|
|
"Poxon",
|
|
"Pring",
|
|
"Pringle",
|
|
"Prisk",
|
|
"Proudfoot",
|
|
"Puddicombe",
|
|
"Pudding",
|
|
"Puddy",
|
|
"Pugsley",
|
|
"Purslove",
|
|
"Pym",
|
|
"Quaife",
|
|
"Quain",
|
|
"Quenby",
|
|
"Quibell",
|
|
"Quigg",
|
|
"Raddle",
|
|
"Ranby",
|
|
"Rapkins",
|
|
"Ratter",
|
|
"Reakes",
|
|
"Reeson",
|
|
"Riddle",
|
|
"Rix",
|
|
"Roddis",
|
|
"Rosser",
|
|
"Ruddle",
|
|
"Ruffle",
|
|
"Rugg",
|
|
"Rumming",
|
|
"Rump",
|
|
"Sadd",
|
|
"Samways",
|
|
"Sankey",
|
|
"Scantlebury",
|
|
"Scoones",
|
|
"Scouse",
|
|
"Scragg",
|
|
"Scrimgeour",
|
|
"Scroggs",
|
|
"Scruby",
|
|
"Scutt",
|
|
"Sefton",
|
|
"Selth",
|
|
"Semmens",
|
|
"Seward",
|
|
"Shalloo",
|
|
"Sharples",
|
|
"Siggers",
|
|
"Sirett",
|
|
"Skeels",
|
|
"Skerrett",
|
|
"Slee",
|
|
"Sluggett",
|
|
"Smedley",
|
|
"Snoddy",
|
|
"Snuggs",
|
|
"Sparrow",
|
|
"Sparrowhawke",
|
|
"Spink",
|
|
"Spinks",
|
|
"Spriggs",
|
|
"Springett",
|
|
"Sproat",
|
|
"Sprunt",
|
|
"Spurle",
|
|
"Spurrett",
|
|
"Spurrier",
|
|
"Squance",
|
|
"Squarey",
|
|
"Squibb",
|
|
"Squirrel",
|
|
"Staines",
|
|
"Steggal",
|
|
"Stelfox",
|
|
"Stirk",
|
|
"Stith",
|
|
"Strag",
|
|
"Straw",
|
|
"Strutt",
|
|
"Stubbins",
|
|
"Stuppies",
|
|
"Suggett",
|
|
"Swaffer",
|
|
"Swaffield",
|
|
"Swarbrick",
|
|
"Symes",
|
|
"Tabor",
|
|
"Tagg",
|
|
"Tapping",
|
|
"Tarr",
|
|
"Tassell",
|
|
"Teale",
|
|
"Thew",
|
|
"Thick",
|
|
"Thornber",
|
|
"Thwaites",
|
|
"Tibbins",
|
|
"Tibbits",
|
|
"Tibbles",
|
|
"Tibbotts",
|
|
"Tink",
|
|
"Tippell",
|
|
"Tipping",
|
|
"Tippins",
|
|
"Tippling",
|
|
"Tipton",
|
|
"Tisser",
|
|
"Tittmuss",
|
|
"Tobitt",
|
|
"Tonks",
|
|
"Topping",
|
|
"Towse",
|
|
"Toye",
|
|
"Tozer",
|
|
"Trafford",
|
|
"Treasure",
|
|
"Tremlett",
|
|
"Trett",
|
|
"Trible",
|
|
"Tricker",
|
|
"Tripe",
|
|
"Trippe",
|
|
"Tripper",
|
|
"Trist",
|
|
"Troake",
|
|
"Trotter",
|
|
"Trouncer",
|
|
"Trumble",
|
|
"Tudge",
|
|
"Tuffin",
|
|
"Tufley",
|
|
"Tulk",
|
|
"Tully",
|
|
"Tumman",
|
|
"Tunks",
|
|
"Tunnah",
|
|
"Tunnicliffe",
|
|
"Turnock",
|
|
"Tween",
|
|
"Tyrer",
|
|
"Unsworth",
|
|
"Uttley",
|
|
"Varney",
|
|
"Vooght",
|
|
"Wackrill",
|
|
"Waddilove",
|
|
"Waddilow",
|
|
"Walthew",
|
|
"Waltho",
|
|
"Walwin",
|
|
"Wanless",
|
|
"Wann",
|
|
"Waple",
|
|
"Waring",
|
|
"Warrilow",
|
|
"Welburn",
|
|
"Wenden",
|
|
"Werrett",
|
|
"Wescott",
|
|
"Whinnett",
|
|
"Whiskard",
|
|
"Whisker",
|
|
"Whitefoot",
|
|
"Whitlow",
|
|
"Wibberley",
|
|
"Widdicombe",
|
|
"Widdows",
|
|
"Widdup",
|
|
"Wigg",
|
|
"Wigley",
|
|
"Wilberforce",
|
|
"Wilmer",
|
|
"Wintle",
|
|
"Witherden",
|
|
"Witney",
|
|
"Witter",
|
|
"Wolnoth",
|
|
"Woodhead",
|
|
"Wookey",
|
|
"Woolland",
|
|
"Woombill",
|
|
"Worrel",
|
|
"Worsley",
|
|
"Wortley",
|
|
"Wragg",
|
|
"Wrixon",
|
|
"Yeandle",
|
|
"Yeend",
|
|
"Yemm",
|
|
"Yould",
|
|
"Aiken",
|
|
"Aitken",
|
|
"Baikie",
|
|
"Baillie",
|
|
"Bainbridge",
|
|
"Baird",
|
|
"Bairnsfeather",
|
|
"Balios",
|
|
"Balnaves",
|
|
"Barbour",
|
|
"Barclay",
|
|
"Barrie",
|
|
"Beattie",
|
|
"Beilby",
|
|
"Bell",
|
|
"Bellenden",
|
|
"Berwick",
|
|
"Blackie",
|
|
"Blackwood",
|
|
"Blaikie",
|
|
"Blair",
|
|
"Bogue",
|
|
"Boyce",
|
|
"Braid",
|
|
"Brechin",
|
|
"Brisbane",
|
|
"Brough",
|
|
"Brougham",
|
|
"Brown",
|
|
"Brownlee",
|
|
"Brymner",
|
|
"Cairns",
|
|
"Calderwood",
|
|
"Candlish",
|
|
"Cardus",
|
|
"Cargill",
|
|
"Caven",
|
|
"Christison",
|
|
"Clyde",
|
|
"Cochran",
|
|
"Cochrane",
|
|
"Cockburn",
|
|
"Colomb",
|
|
"Crockett",
|
|
"Cronin",
|
|
"Cruden",
|
|
"Cunningham",
|
|
"Cushny",
|
|
"Dalziel",
|
|
"Deems",
|
|
"Dempster",
|
|
"Dinwiddie",
|
|
"Doohan",
|
|
"Doone",
|
|
"Dunbar",
|
|
"Dundas",
|
|
"Dundee",
|
|
"Dunn",
|
|
"Dunning",
|
|
"Eccles",
|
|
"Eckford",
|
|
"Edmonstone",
|
|
"Elder",
|
|
"Fairbairn",
|
|
"Falconer",
|
|
"Fenwick",
|
|
"Ferrier",
|
|
"Gairdner",
|
|
"Galloway",
|
|
"Galt",
|
|
"Geddes",
|
|
"Geikie",
|
|
"Glass",
|
|
"Glendon",
|
|
"Graham",
|
|
"Gregory",
|
|
"Guthrie",
|
|
"Haig",
|
|
"Halkett",
|
|
"Herdman",
|
|
"Hogg",
|
|
"Imey",
|
|
"Inchbald",
|
|
"Inglis",
|
|
"Irvine",
|
|
"Ivory",
|
|
"Jebb",
|
|
"Kerr",
|
|
"Kircaldy",
|
|
"Kirk",
|
|
"Kirkbride",
|
|
"Laird",
|
|
"Laughlin",
|
|
"Lawson",
|
|
"Legge",
|
|
"Lillie",
|
|
"Lipton",
|
|
"Lockhart",
|
|
"Lorimer",
|
|
"Lyall",
|
|
"Lyte",
|
|
"Masson",
|
|
"Melrose",
|
|
"Mill",
|
|
"Miller",
|
|
"Milligan",
|
|
"Milner",
|
|
"Moffat",
|
|
"Mollison",
|
|
"Moncrief",
|
|
"Montrose",
|
|
"Motherwell",
|
|
"Muir",
|
|
"Muirhead",
|
|
"Murray",
|
|
"Nairn",
|
|
"Naysmith",
|
|
"Nesbit",
|
|
"Nisbet",
|
|
"No\xEBl",
|
|
"Orchardson",
|
|
"Pasley",
|
|
"Paterson",
|
|
"Pender",
|
|
"Preston",
|
|
"Primrose",
|
|
"Pringle",
|
|
"Quiller",
|
|
"Raeburn",
|
|
"Ransay",
|
|
"Redpath",
|
|
"Renfrew",
|
|
"Rennie",
|
|
"Renwick",
|
|
"Sanderson",
|
|
"Semphill",
|
|
"Smiles",
|
|
"Smollett",
|
|
"Smybert",
|
|
"Spenlove",
|
|
"Sterling",
|
|
"Stirling",
|
|
"Strang",
|
|
"Strange",
|
|
"Strangeways",
|
|
"Tait",
|
|
"Tannahill",
|
|
"Tassie",
|
|
"Thom",
|
|
"Tolmie",
|
|
"Urquhart",
|
|
"Wardlaw",
|
|
"Wedderburn",
|
|
"Whearty",
|
|
"Wilkie",
|
|
"Wiseheart",
|
|
"Wishart",
|
|
"Yarrow"
|
|
];
|
|
|
|
// generators/ship.ts
|
|
var adjectives = ["Mighty", "Grand", "Brave", "Fearless", "Majestic", "Mighty", "Powerful", "Glorious", "Magnificent", "Majestic"];
|
|
var nouns = ["Wind", "Wave", "Storm", "Thunder", "Sea", "Ocean", "Voyager", "Adventurer", "Explorer", "Navigator"];
|
|
var prefixes = [
|
|
"AE",
|
|
"AFS",
|
|
"AHT",
|
|
"AHTS",
|
|
"AO",
|
|
"AE",
|
|
"AFS",
|
|
"AHT",
|
|
"AHTS",
|
|
"AO",
|
|
"AOG",
|
|
"AOR",
|
|
"AOT",
|
|
"ASDS",
|
|
"ATB",
|
|
"CRV",
|
|
"C/F",
|
|
"CS",
|
|
"DB",
|
|
"DEPV",
|
|
"DLB",
|
|
"DCV",
|
|
"DSV",
|
|
"DV",
|
|
"ERRV",
|
|
"EV",
|
|
"FPSO",
|
|
"FPV",
|
|
"FPV",
|
|
"FT",
|
|
"FV",
|
|
"GTS",
|
|
"HLV",
|
|
"HMT",
|
|
"HMHS",
|
|
"HSC",
|
|
"HSF",
|
|
"HTV",
|
|
"IRV",
|
|
"ITB",
|
|
"LB",
|
|
"LNG",
|
|
"LPG",
|
|
"MF",
|
|
"MFV",
|
|
"MS",
|
|
"MSV",
|
|
"MSY",
|
|
"MT",
|
|
"MTS",
|
|
"MV",
|
|
"MY",
|
|
"NB",
|
|
"NRV",
|
|
"NS",
|
|
"OSV",
|
|
"PS",
|
|
"PSV",
|
|
"QSMV",
|
|
"QTEV",
|
|
"RMS",
|
|
"RNLB",
|
|
"RRS",
|
|
"RV",
|
|
"RSV",
|
|
"SB",
|
|
"SL",
|
|
"SS",
|
|
"SSCV",
|
|
"SSS",
|
|
"SSV",
|
|
"ST",
|
|
"STS",
|
|
"STV",
|
|
"SV",
|
|
"SY",
|
|
"TB",
|
|
"TIV",
|
|
"TEV",
|
|
"TRSS",
|
|
"TS",
|
|
"TRS",
|
|
"TSMV",
|
|
"TSS",
|
|
"TST",
|
|
"TT",
|
|
"TV",
|
|
"ULCC",
|
|
"VLCC",
|
|
"YD",
|
|
"YT",
|
|
"YMT",
|
|
"YTB",
|
|
"YTL",
|
|
"YTM",
|
|
"YW",
|
|
"YWN",
|
|
"YOS"
|
|
];
|
|
var vowels = ["a", "e", "i", "o", "u"];
|
|
var syllables = [
|
|
"an",
|
|
"ar",
|
|
"ast",
|
|
"at",
|
|
"cal",
|
|
"chi",
|
|
"cy",
|
|
"dan",
|
|
"eir",
|
|
"ba",
|
|
"th",
|
|
"tho",
|
|
"tri",
|
|
"tr",
|
|
"el",
|
|
"end",
|
|
"ent",
|
|
"est",
|
|
"ian",
|
|
"ic",
|
|
"il",
|
|
"in",
|
|
"ir",
|
|
"it",
|
|
"kil",
|
|
"kor",
|
|
"ler",
|
|
"lor",
|
|
"man",
|
|
"mar",
|
|
"mei",
|
|
"mon",
|
|
"ner",
|
|
"or",
|
|
"ore",
|
|
"rak",
|
|
"ri",
|
|
"ris",
|
|
"ry",
|
|
"se",
|
|
"ser",
|
|
"tor",
|
|
"tos",
|
|
"um",
|
|
"ys",
|
|
"zor",
|
|
"ka",
|
|
"ra",
|
|
"go",
|
|
"shi",
|
|
"ma",
|
|
"to",
|
|
"zo",
|
|
"ro",
|
|
"lo"
|
|
];
|
|
function generateShipName() {
|
|
const adjective = randomItemFromArray(adjectives);
|
|
const prefix = randomItemFromArray(prefixes);
|
|
const noun = randomItemFromArray(nouns);
|
|
let generatedName = "";
|
|
const numSyllables = Math.floor(Math.random() * 2) + 2;
|
|
for (let i = 0; i < numSyllables; i++) {
|
|
const syllableIndex = Math.floor(Math.random() * syllables.length);
|
|
generatedName += syllables[syllableIndex];
|
|
if (i < numSyllables - 1) {
|
|
const vowelIndex = Math.floor(Math.random() * vowels.length);
|
|
generatedName += vowels[vowelIndex];
|
|
}
|
|
}
|
|
generatedName = capitalizeFirstLetter(generatedName);
|
|
return Math.random() < 0.5 ? `${adjective} ${noun} of ${generatedName}` : `${prefix} ${adjective} ${generatedName}`;
|
|
}
|
|
function randomItemFromArray(array) {
|
|
const randomIndex = Math.floor(Math.random() * array.length);
|
|
return array[randomIndex];
|
|
}
|
|
function capitalizeFirstLetter(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
}
|
|
|
|
// generators/religions.ts
|
|
function generatorReligions() {
|
|
const names1 = ["A", "Ar", "Al", "B", "Br", "Bl", "C", "Cr", "Cl", "D", "Dl", "Dr", "E", "Er", "El", "F", "Fl", "G", "Gl", "Gr", "H", "I", "Il", "J", "K", "Kl", "Kr", "L", "M", "N", "O", "Or", "Ol", "P", "Pl", "Ph", "Pr", "R", "S", "Sl", "Str", "T", "Tr", "U", "Ur", "Ul", "V", "Vr", "W", "Wr", "X", "Z"];
|
|
const names2 = ["a", "e", "i", "o", "u", "y"];
|
|
const names3 = ["b", "br", "bl", "c", "cr", "cl", "d", "dl", "dr", "f", "fl", "g", "gl", "gr", "h", "j", "k", "kl", "kr", "l", "m", "n", "p", "pl", "ph", "pr", "r", "s", "sl", "str", "t", "tr", "v", "vr", "w", "wr", "x", "z", "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "z", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""];
|
|
const names4 = ["a", "e", "i", "o", "u", "", "", "", "", ""];
|
|
const names5 = ["cism", "do", "fis", "gar", "hin", "khi", "kyo", "lly", "ndo", "ng", "ni", "nis", "nity", "ns", "phy", "qir", "rity", "sha", "shi", "sm", "sni", "sy", "thos", "thy", "tism", "to", "ty", "was", "zen", "zor"];
|
|
const names6 = ["Healers", "Wanders", "Children", "Angels", "Chosen Ones", "Oracles", "Paragons", "Band", "Church", "Communion", "Congregation", "Creed", "Cult", "Faith", "Followers", "Gathering", "Order", "Sect"];
|
|
const names7 = ["of Ancestral Spirits", "of the Holy Light", "of Answers", "of Atonement", "of Awe", "of Balance", "of Brothers", "of Clarity", "of Cooperation", "of Darkness", "of Dawn", "of Defiance", "of Devotion", "of Dragons", "of Dreams", "of Dusk", "of Eternal Doom", "of Eternal Rain", "of Eventuality", "of Fire", "of Fortune", "of Gold", "of Harmony", "of Honor", "of Hope", "of Humanity", "of Illumination", "of Insight", "of Iron", "of Kinship", "of Light", "of Luck", "of Men", "of Nature", "of New Hope", "of Order", "of Origins", "of Our Origins", "of Parellels", "of Perfection", "of Piety", "of Purity", "of Radiance", "of Redemption", "of Reparations", "of Revelations", "of Sacrifice", "of Secrets", "of Shadows", "of Silence", "of Silver", "of Steel", "of Symmetry", "of Sympathy", "of Tranquility", "of Truth", "of Twilight", "of Unity", "of Valor", "of Virtue", "of Visions", "of Water", "of Whispers", "of Women", "of World Balance", "of our New Lord", "of the Accord", "of the All Seeing Eye", "of the Alpha", "of the Ancestors", "of the Apocalypse", "of the Attuned", "of the Aurora", "of the Black Bear", "of the Black Hand", "of the Black Sign", "of the Burning Crown", "of the Celestials", "of the Chosen", "of the Clean", "of the Comet", "of the Conqueror", "of the Crown", "of the Damned", "of the Divine", "of the Dragon", "of the Eight Divines", "of the Eight Gods", "of the Elements", "of the Emperor", "of the End", "of the Enigma", "of the Enlightened", "of the Eye", "of the False Prophet", "of the Five Divines", "of the Five Gods", "of the Flaming Sword", "of the Four Divines", "of the Four Gods", "of the Free", "of the Glorious One", "of the Illuminated", "of the Innocent", "of the King", "of the Light", "of the Martyr", "of the Messiah", "of the Mind", "of the Moon", "of the Mutants", "of the New Order", "of the Night", "of the Nine Divines", "of the Nine Gods", "of the Obscure", "of the Omega", "of the One", "of the One God", "of the Oracle", "of the Paragon", "of the Paragons", "of the Prodigy", "of the Prophecy", "of the Prophet", "of the Rapture", "of the Red Dog", "of the Sacrifice", "of the Sacrificed", "of the Serpent", "of the Seven Divines", "of the Seven Gods", "of the Sinless", "of the Six Divines", "of the Six Gods", "of the Son", "of the Soothsayer", "of the Spirits", "of the Stars", "of the Studied", "of the Sun", "of the Three Divines", "of the Three Gods", "of the Titans", "of the True Emperor", "of the True King", "of the True Prophet", "of the Two Divines", "of the Two Gods", "of the United", "of the Unsullied", "of the Virgin", "of the White Sign", "of the White Wolf", "of the Wilds", "of the World"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
let names;
|
|
const generateComponent = () => {
|
|
const rnd0 = Math.floor(Math.random() * names1.length);
|
|
const rnd1 = Math.floor(Math.random() * names2.length);
|
|
const rnd2 = Math.floor(Math.random() * names3.length);
|
|
let rnd3 = Math.floor(Math.random() * names4.length);
|
|
if (rnd2 < 57) {
|
|
while (rnd3 > 4) {
|
|
rnd3 = Math.floor(Math.random() * names4.length);
|
|
}
|
|
}
|
|
const rnd4 = Math.floor(Math.random() * names5.length);
|
|
return names1[rnd0] + names2[rnd1] + names3[rnd2] + names4[rnd3] + names5[rnd4];
|
|
};
|
|
if (i < 3) {
|
|
names = generateComponent();
|
|
} else if (i < 7) {
|
|
const rnd0 = Math.floor(Math.random() * names6.length);
|
|
const rnd1 = Math.floor(Math.random() * names7.length);
|
|
names = names6[rnd0] + " " + names7[rnd1];
|
|
} else {
|
|
const rnd5 = Math.floor(Math.random() * names6.length);
|
|
names = names6[rnd5] + " of " + generateComponent();
|
|
}
|
|
return names;
|
|
}
|
|
|
|
// generators/airship.ts
|
|
function generatorAirships() {
|
|
const nm1 = ["Ace", "Aetherwing", "Agamemnon", "Apollo", "Arcadia", "Atlas", "Azrael", "Benediction", "Blackjack", "Bliss", "Calypso", "Ceres", "Charity", "Cloudsong", "Curio", "Curiosity", "Dawn", "Dominus", "Duchess Emily", "Elysium", "Epoch", "Glee", "Grace", "Hailstone", "Helios", "Heritage", "Honor", "Horizon", "Invincible", "Joy", "Jupiter", "Justice", "Lady Liberty", "Luminus", "Memento", "Mercy", "Nemo", "Neptune", "Nightmare", "Olympus", "Orbit", "Pandora", "Patience", "Prometheus", "Proximus", "Rara Avis", "Red Rose", "Saturn", "Scarlet", "Star Gazer", "Starlight", "Stormlight", "Summersong", "Sweetwater", "The Albatross", "The Allure", "The Amaranth", "The Ambassador", "The Andromeda", "The Animus", "The Anomaly", "The Artifact", "The Aspect", "The Aura", "The Aurora", "The Azure", "The Babylon", "The Baron", "The Bastion", "The Behemoth", "The Borealis", "The Buccaneer", "The Cardinal", "The Clemency", "The Climax", "The Condor", "The Conundrum", "The Courtesy", "The Crown", "The Crusader", "The Dauntless", "The Daydream", "The Decadence", "The Delight", "The Destiny", "The Dragonfly", "The Dreadnaught", "The Duchess", "The Duke", "The Eagle", "The Eclipse", "The Ecstasy", "The Endeavor", "The Endurance", "The Enigma", "The Enterprise", "The Equinox", "The Euphoria", "The Excelsior", "The Falcon", "The Felicity", "The Figment", "The Freebird", "The Frigate", "The Galaxy", "The Genius", "The Gryphon", "The Halcyon", "The Happening", "The Harlot", "The Harmony", "The Heirloom", "The Herald", "The Heritage", "The Hummingbird", "The Icarus", "The Indulgence", "The Intrepid", "The Javelin", "The Jubilation", "The Jubilee", "The Juggernaut", "The Legacy", "The Leviathan", "The Lullaby", "The Macaw", "The Maiden", "The Majesty", "The Masquerade", "The Mayflower", "The Miracle", "The Mirth", "The Nautilus", "The Nemesis", "The Night Lady", "The Nightingale", "The Nightwish", "The Nirvana", "The Obelisk", "The Odyssey", "The Oracle", "The Orion", "The Outlook", "The Parable", "The Paradox", "The Paragon", "The Pathfinder", "The Pegasus", "The Pelican", "The Phantasm", "The Phenomenon", "The Phoenix", "The Pinnacle", "The Pioneer", "The Prism", "The Prodigy", "The Prosperity", "The Providence", "The Renegade", "The Repose", "The Reticence", "The Reticent", "The Revelation", "The Revenant", "The Riddle", "The Rose Blossom", "The Sanctity", "The Saturninity", "The Sentinel", "The Serenity", "The Skyshadow", "The Skywarden", "The Solitude", "The Solstice", "The Spectacle", "The Spire", "The Stormherald", "The Summit", "The Sunbird", "The Surge", "The Tempest", "The Titan", "The Tribute", "The Triumph", "The Utopia", "The Valhalla", "The Valiant", "The Valkyrie", "The Vestige", "The Vision", "The Warden", "The Wayfarer", "The Zephyr", "The Zodiac", "Tranquillity", "Triton", "Wanderlust", "Wishmaster", "Zenith", "Zion"];
|
|
const nm2 = ["Adventurous", "Agile", "Ample", "Anchored", "Ancient", "Angelic", "Angry", "Antique", "Arctic", "Austere", "Azure", "Bare", "Barren", "Beloved", "Big", "Bitter", "Black", "Blank", "Blind", "Blond", "Blushing", "Bold", "Brave", "Bright", "Brilliant", "Bronze", "Brown", "Burly", "Canine", "Capital", "Cold", "Crafty", "Crazy", "Crimson", "Crooked", "Crown", "Curvy", "Dapper", "Daring", "Darling", "Dazzling", "Dear", "Defiant", "Delayed", "Devoted", "Diligent", "Discrete", "Distant", "Eager", "Ebon", "Elder", "Elegant", "Emerald", "Enchanted", "Enlightened", "Euphoric", "Exalted", "Faithful", "False", "Fancy", "Fantastic", "Fearless", "Feisty", "Feline", "First", "Forsaken", "Gentle", "Giant", "Glass", "Glorious", "Golden", "Graceful", "Grand", "Great", "Grim", "Happy", "Heavy", "High", "Hollow", "Honest", "Humble", "Humming", "Husky", "Idle", "Infamous", "Intrepid", "Ivory", "Jagged", "Last", "Little", "Lone", "Lonely", "Lost", "Loyal", "Lucky", "Majestic", "Merry", "Nimble", "Odd", "Old", "Pale", "Plump", "Precious", "Prime", "Pure", "Quiet", "Rapid", "Red", "Round", "Royal", "Scented", "Serene", "Silent", "Silver", "Skinny", "Slim", "Soft", "Striped", "Swift", "Tender", "Tiny", "Vibrant", "Violet", "Warm", "White", "Wicked"];
|
|
const nm3 = ["Allure", "Ambassador", "Ambience", "Amity", "Apex", "Aspect", "Aura", "Aurora", "Baron", "Baroness", "Bastion", "Behemoth", "Bolt", "Bounty", "Buccaneer", "Bullet", "Bulwark", "Cardinal", "Champion", "Charity", "Citadel", "Clemency", "Climax", "Cloud", "Concord", "Condor", "Countess", "Crown", "Crusader", "Crux", "Dame", "Dawn", "Daydream", "Delight", "Destiny", "Dominion", "Dragonfly", "Dream", "Duchess", "Duke", "Eagle", "Eclipse", "Emissary", "Endeavor", "Enigma", "Enterprise", "Envoy", "Falcon", "Felicity", "Fortress", "Fortune", "Frigate", "Genesis", "Grace", "Gryphon", "Harmony", "Heirloom", "Herald", "Heritage", "Homage", "Honor", "Horizon", "Hummingbird", "Javelin", "Jewel", "Joy", "Justice", "Lady", "Legacy", "Lord", "Maiden", "Majesty", "Marvel", "Matron", "Mercy", "Miracle", "Mirage", "Mistress", "Monarch", "Monument", "Muse", "Needle", "Nemesis", "Nightingale", "Obelisk", "Odyssey", "Omen", "Oracle", "Parable", "Paradox", "Paragon", "Parapet", "Pegasus", "Phantasm", "Phenomenon", "Phoenix", "Pinnacle", "Pioneer", "Prestige", "Princess", "Prodigy", "Prophecy", "Quest", "Relic", "Renegade", "Revenant", "Riddle", "Sentinel", "Sentry", "Serenity", "Shade", "Shadow", "Shroud", "Solstice", "Spectacle", "Specter", "Summit", "Surge", "Tempest", "Titan", "Tribute", "Triumph", "Unity", "Valkyrie", "Vertex", "Vestige", "Vision", "Voyage", "Warden", "Wish", "Zenith", "Zodiac"];
|
|
const prefixes2 = [
|
|
"AE",
|
|
"AFS",
|
|
"AHT",
|
|
"AHTS",
|
|
"AO",
|
|
"AE",
|
|
"AFS",
|
|
"AHT",
|
|
"AHTS",
|
|
"AO",
|
|
"AOG",
|
|
"AOR",
|
|
"AOT",
|
|
"ASDS",
|
|
"ATB",
|
|
"CRV",
|
|
"C/F",
|
|
"CS",
|
|
"DB",
|
|
"DEPV",
|
|
"DLB",
|
|
"DCV",
|
|
"DSV",
|
|
"DV",
|
|
"ERRV",
|
|
"EV",
|
|
"FPSO",
|
|
"FPV",
|
|
"FPV",
|
|
"FT",
|
|
"FV",
|
|
"GTS",
|
|
"HLV",
|
|
"HMT",
|
|
"HMHS",
|
|
"HSC",
|
|
"HSF",
|
|
"HTV",
|
|
"IRV",
|
|
"ITB",
|
|
"LB",
|
|
"LNG",
|
|
"LPG",
|
|
"MF",
|
|
"MFV",
|
|
"MS",
|
|
"MSV",
|
|
"MSY",
|
|
"MT",
|
|
"MTS",
|
|
"MV",
|
|
"MY",
|
|
"NB",
|
|
"NRV",
|
|
"NS",
|
|
"OSV",
|
|
"PS",
|
|
"PSV",
|
|
"QSMV",
|
|
"QTEV",
|
|
"RMS",
|
|
"RNLB",
|
|
"RRS",
|
|
"RV",
|
|
"RSV",
|
|
"SB",
|
|
"SL",
|
|
"SS",
|
|
"SSCV",
|
|
"SSS",
|
|
"SSV",
|
|
"ST",
|
|
"STS",
|
|
"STV",
|
|
"SV",
|
|
"SY",
|
|
"TB",
|
|
"TIV",
|
|
"TEV",
|
|
"TRSS",
|
|
"TS",
|
|
"TRS",
|
|
"TSMV",
|
|
"TSS",
|
|
"TST",
|
|
"TT",
|
|
"TV",
|
|
"ULCC",
|
|
"VLCC",
|
|
"YD",
|
|
"YT",
|
|
"YMT",
|
|
"YTB",
|
|
"YTL",
|
|
"YTM",
|
|
"YW",
|
|
"YWN",
|
|
"YOS"
|
|
];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (i < 5) {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
names = nm1[rnd];
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm2.length);
|
|
const rnd2 = Math.floor(Math.random() * nm3.length);
|
|
names = nm2[rnd] + " " + nm3[rnd2];
|
|
}
|
|
return randomItemFromArray2(prefixes2) + " " + names;
|
|
}
|
|
}
|
|
function randomItemFromArray2(array) {
|
|
const randomIndex = Math.floor(Math.random() * array.length);
|
|
return array[randomIndex];
|
|
}
|
|
|
|
// generators/drink.ts
|
|
function generatorDrinks(settings) {
|
|
const adjectives2 = settings.adj;
|
|
const nouns2 = settings.nouns;
|
|
let adjectivetotal = "";
|
|
const numAdjectives = Math.random() < 0.5 ? 1 : 2;
|
|
for (let i = 0; i < numAdjectives; i++) {
|
|
const randomAdjective = adjectives2[Math.floor(Math.random() * adjectives2.length)];
|
|
adjectivetotal += randomAdjective + " ";
|
|
}
|
|
const randomNoun = nouns2[Math.floor(Math.random() * nouns2.length)];
|
|
return `${adjectivetotal} ${randomNoun}`;
|
|
}
|
|
|
|
// generators/groups.ts
|
|
function generatorGroups(settings) {
|
|
const adjectives2 = settings.adj;
|
|
const nouns2 = settings.nouns;
|
|
const nounsPlural = settings.nounsP;
|
|
const groupTypes = settings.groupTypes;
|
|
const singleDescriptors = settings.singleDescriptors;
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (i < 4) {
|
|
const rnd0 = Math.floor(Math.random() * adjectives2.length);
|
|
const rnd1 = Math.floor(Math.random() * nouns2.length);
|
|
const rnd2 = Math.floor(Math.random() * groupTypes.length);
|
|
names = "The " + adjectives2[rnd0] + " " + nouns2[rnd1] + " " + groupTypes[rnd2];
|
|
} else if (i < 8) {
|
|
const rnd0 = Math.floor(Math.random() * adjectives2.length);
|
|
const rnd1 = Math.floor(Math.random() * nounsPlural.length);
|
|
names = "The " + adjectives2[rnd0] + " " + nounsPlural[rnd1];
|
|
} else {
|
|
const rnd0 = Math.floor(Math.random() * singleDescriptors.length);
|
|
names = "The " + singleDescriptors[rnd0];
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
|
|
// generators/animalGroups.ts
|
|
function generatorAnimal_groups() {
|
|
const nm1 = ["Aerie", "Amalgamation", "Army", "Arrangement", "Array", "Ascension", "Association", "Audience", "Babbling", "Band", "Barrage", "Bask", "Batch", "Battalion", "Battery", "Bazaar", "Bevy", "Bilge", "Blathering", "Bloat", "Body", "Brigade", "Brood", "Bunch", "Bundle", "Burrow", "Business", "Calling", "Caravan", "Cast", "Chain", "Chattering", "Clan", "Clearing", "Clique", "Clot", "Cloud", "Clowder", "Club", "Clump", "Cluster", "Clutch", "Coalition", "Collection", "Colony", "Column", "Community", "Company", "Conclave", "Concourse", "Confab", "Conflux", "Congerie", "Conjuring", "Congregation", "Congress", "Conspiracy", "Corps", "Coterie", "Coupling", "Covey", "Creche", "Crowd", "Crush", "Deluge", "Den", "Deposit", "Descent", "Design", "Detail", "Display", "Dominion", "Draft", "Drift", "Drove", "Enterprise", "Exaltation", "Exhibition", "Faction", "Fair", "Fall", "Family", "Flight", "Flock", "Flood", "Following", "Force", "Form", "Formation", "Fusion", "Gaggle", "Game", "Gang", "Gathering", "Generation", "Gibbering", "Gloom", "Grapple", "Grasp", "Haunt", "Haze", "Heap", "Herd", "Hive", "Horde", "Host", "House", "Hurtle", "Jam", "Kindle", "Knot", "Laze", "Lead", "League", "Legion", "Line", "Lineup", "Litter", "Loll", "Lot", "Lounge", "Mass", "Meet", "Meeting", "Melding", "Menage", "Menagerie", "Merger", "Merging", "Mob", "Monopoly", "Movement", "Muffle", "Multitude", "Murder", "Muster", "Nebula", "Nest", "Network", "Nursery", "Order", "Outfit", "Pack", "Pandemonium", "Parade", "Parish", "Party", "Pedigree", "Plunge", "Posse", "Prattling", "Press", "Pride", "Progeny", "Pursuit", "Quash", "Rabble", "Raft", "Regiment", "Relish", "Ring", "Rise", "Rookery", "Run", "Sanctuary", "School", "Scion", "Score", "Scourge", "Screech", "Siege", "Sequence", "Set", "Shoal", "Shock", "Show", "Shower", "Shroud", "Sleuth", "Slide", "Smothering", "Soar", "Society", "Squad", "Squelch", "Storm", "Suite", "Swarm", "Swoop", "Syndicate", "System", "Team", "Throng", "Tribe", "Trip", "Troop", "Troubling", "Troupe", "Tumble", "Tumult", "Turnout", "Twaddling", "Twiddling", "Union", "Unit", "Venture", "Venue", "Volley", "Waddle", "Wake", "Walk", "Wallow", "Wedge", "Welter", "Wing", "Wreck"];
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const names = nm1[rnd];
|
|
nm1.splice(rnd, 1);
|
|
return names;
|
|
}
|
|
|
|
// generators/metal.ts
|
|
function generatorMetals() {
|
|
const suffixes = ["sium", "cium", "lium", "rium", "trium", "tium", "nese", "nium", "sten", "nor", "tine", "ntine", "rhil", "thil", "nyx", "dian", "ium", "ese", "alt", "um", "ian", "il", "ine", "yx", "ite"];
|
|
const syllables2 = ["zor", "lyn", "kae", "vel", "dris", "ris", "lin", "mal", "zet", "ver", "cor", "ron", "ten", "tan", "del", "per"];
|
|
let name = "";
|
|
const suffix = suffixes[Math.floor(Math.random() * suffixes.length)];
|
|
const syllablesCount = Math.floor(Math.random() * 2) + 1;
|
|
for (let i = 0; i < syllablesCount; i++) {
|
|
name += syllables2[Math.floor(Math.random() * syllables2.length)];
|
|
}
|
|
return name[0].toUpperCase() + name.slice(1) + suffix;
|
|
}
|
|
|
|
// generators/magicalTrees.ts
|
|
function generatorMagical_trees() {
|
|
const nm1 = ["Abyss", "Aching", "Angel", "Angel's", "Anxious", "Aquatic", "Arching", "Aromatic", "Assassin", "Banshee", "Barbed", "Bitter", "Black", "Bleak", "Blight", "Blister", "Blood", "Blue", "Bone", "Boomerang", "Bouncing", "Bright", "Bronze", "Candy", "Cave", "Chilling", "Cliff", "Cold", "Corrupt", "Corrupted", "Corrupting", "Coughing", "Crawling", "Creeping", "Dancing", "Dawn", "Deadly", "Death's", "Delicious", "Demon", "Demon's", "Devil's", "Dim", "Dire", "Dragon", "Drifting", "Drowsy", "Dusk", "Dwarf", "Eagle", "Fake", "Fanged", "Fatigue", "Fear", "Fearful", "Fever", "Fire", "Fjord", "Flying", "Fragrant", "Frozen", "Funeral", "Funky", "Ghost", "Giant", "Glacier", "Glowing", "Golden", "Grand", "Grave", "Gray", "Green", "Grim", "Grumpy", "Hammer", "Happy", "Harmless", "Hate", "Hidden", "Hollow", "Horned", "Hot", "Hovering", "Humble", "Ice", "Imperial", "Infecting", "Invisible", "Island", "Itching", "Jealous", "Jester", "Joyful", "King's", "Lethal", "Life's", "Lion", "Love", "Lunar", "Mage's", "Majestic", "Mammoth", "Marsh", "Mercy's", "Mimic", "Mock", "Mocking", "Monk's", "Moon", "Mound", "Mountain", "Nasty", "Naughty", "Nervous", "Noxious", "Ocean", "Orange", "Ordinary", "Perfumed", "Pest", "Phantom", "Pink", "Piranha", "Pixy", "Plague", "Pleasant", "Poisonous", "Prancing", "Putrid", "Pygmy", "Queen's", "Quiet", "Rare", "Rash", "Raven", "Red", "Regal", "Restoration", "River", "Rotten", "Royal", "Sad", "Salty", "Sanguine", "Savage", "Scented", "Screaming", "Sentient", "Serpent", "Shadow", "Shield", "Shocking", "Shrine", "Shy", "Silver", "Skeletal", "Skulking", "Sleeping", "Sleepy", "Smelly", "Smooth", "Sneeze", "Sneezing", "Solar", "Sore", "Sour", "Spicy", "Spiky", "Spirit", "Spitfire", "Stink", "Stinking", "Sugar", "Sun", "Sunny", "Swamp", "Sweet", "Tall", "Tangle", "Tangled", "Taunting", "Tickle", "Toxic", "Twilight", "Twisted", "Urban", "Venomous", "Vision", "Volcano", "Walking", "Warm", "Weeping", "Whisper", "White", "Whomping", "Wicked", "Wild", "Wisdom", "Wolf", "Yellow"];
|
|
const nm2 = ["Acacia", "Alder", "Ash", "Aspen", "Azalea", "Balsa", "Bamboo", "Baobab", "Bayonet", "Beech", "Birch", "Box", "Buckeye", "Buckthorn", "Bunya", "Bush", "Cassava", "Catalpa", "Cedar", "Conifer", "Cycad", "Cypress", "Elder", "Elm", "Eucalyptus", "Fir", "Hawthorn", "Hazel", "Hemlock", "Hickory", "Holly", "Hornbeam", "Juniper", "Larch", "Leaf", "Locust", "Magnolia", "Mahogany", "Mangrove", "Maple", "Medlar", "Milkbark", "Oak", "Oleander", "Palm", "Palmetto", "Persimmon", "Pine", "Poplar", "Privet", "Rhododendron", "Rowan", "Sequoia", "Spruce", "Strongbark", "Sumac", "Sycamore", "Tree", "Viburnum", "Willow", "Wood", "Yew", "Yucca"];
|
|
const nm3 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "ea", "ei", "eo", "ae", "ai", "ia", "io", "ua", "aa", "ee", "oo", "ou", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""];
|
|
const nm4 = ["b", "c", "d", "f", "g", "h", "k", "l", "m", "n", "p", "r", "s", "t", "v", "w", "x", "y", "z", "bl", "br", "ch", "chr", "cl", "cr", "dl", "dr", "fl", "fr", "fy", "gl", "gr", "kl", "kn", "kr", "ph", "phr", "pl", "pr", "sc", "sh", "shr", "sl", "sm", "sn", "sp", "sr", "str", "th", "thr", "tr", "vl"];
|
|
const nm5 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "ea", "ei", "eo", "ae", "ai", "ia", "io", "ua", "aa", "ee", "oo", "ou"];
|
|
const nm6 = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z", "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z", "bb", "bd", "bg", "bl", "br", "bs", "cc", "ch", "chr", "cl", "cr", "dd", "df", "dg", "dl", "dr", "ds", "dt", "fd", "ff", "fg", "fl", "fm", "fn", "fp", "fr", "fy", "gd", "gg", "ght", "gl", "gr", "gth", "hh", "hl", "hm", "hn", "hs", "ht", "kd", "kk", "kl", "km", "kn", "kr", "lb", "ld", "lf", "lg", "lk", "ll", "lm", "ln", "lp", "ls", "lt", "ly", "mb", "md", "mf", "mk", "ml", "mm", "mn", "mp", "ms", "my", "nc", "nd", "nf", "ng", "nk", "nl", "nm", "nn", "np", "ns", "nt", "ny", "ph", "phr", "pl", "pp", "pr", "ql", "qr", "qs", "rc", "rd", "rf", "rg", "rh", "rk", "rl", "rm", "rn", "rp", "rr", "rs", "rsh", "rt", "rth", "rw", "sb", "sc", "sd", "sf", "sg", "sh", "shr", "sk", "sl", "sm", "sn", "sp", "sr", "ss", "st", "str", "sw", "sy", "th", "thr", "tr", "tt", "vl", "zh", "zl", "zr", "zz"];
|
|
const nm7 = ["ab", "ac", "acca", "acia", "alea", "an", "ander", "ant", "any", "ar", "arch", "ark", "ava", "eaf", "eam", "eech", "en", "er", "ess", "et", "etto", "ew", "eye", "ifer", "immon", "ine", "iper", "irch", "ock", "olia", "on", "onet", "ood", "ore", "orn", "ory", "ove", "ow", "uce", "um", "us"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (i < 6) {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + " " + nm2[rnd2];
|
|
} else if (i < 8) {
|
|
const rnd = Math.floor(Math.random() * nm3.length);
|
|
const rnd2 = Math.floor(Math.random() * nm4.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
names = nm3[rnd] + nm4[rnd2] + nm7[rnd3];
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm3.length);
|
|
const rnd2 = Math.floor(Math.random() * nm4.length);
|
|
let rnd3 = Math.floor(Math.random() * nm5.length);
|
|
if (rnd > 9) {
|
|
while (rnd3 > 9) {
|
|
rnd3 = Math.floor(Math.random() * nm5.length);
|
|
}
|
|
}
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm7.length);
|
|
names = nm3[rnd] + nm4[rnd2] + nm5[rnd3] + nm6[rnd4] + nm7[rnd5];
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
|
|
// lists/elvenFamilyNames.ts
|
|
var elfFamilyNames = ["Aelasar", "Aeravansel", "Alaenree", "Alenuath", "Aluianti", "Amaratharr", "Anuaer", "Ashgrove", "Aunglor", "Berilan", "Braegen", "Brightwing", "Camusiil", "Chamaranthe", "Craulnober", "Dhorinshyl", "Dracoseir", "Duskmere", "Ela\xE9yadar", "Elond", "Erladden", "Evanara", "Eyriendor", "Felinaun", "Floshin", "Goldenleaf", "Haell", "Haevaul", "Iazymnal", "Ildacer", "Iliathorr", "Irian", "Iydril", "Kelpor\u2019ral", "Kraok", "Larethian", "Le\u2019Quella", "Loceath", "Melruth", "Mistrivvin", "Moondown", "Moonsnow", "Mrhulaedir", "Narlbeth", "Nhachashaal", "Nightwing", "Nightmeadow", "Nolbrae", "Oakwood", "Ongluth", "Ortaur\xE9", "Presrae", "Raryndur", "Rhothomir", "Rivvikyn", "Selmer", "Shaeremae", "Shaurlanglar", "Siltral", "Silverspear", "Soryn", "Starglance", "Stilmyst", "Sultaasar", "Symbaern", "Tanagathor", "Tassarion", "Thea", "Tornglara", "Trueshot", "Ulondarr", "Vispasial", "Windstar", "Yhendorn", "Aelorothi", "Agayous", "Alantar", "Alerothi", "Aluviirsaan", "Amarthen", "Argentaamn", "Audark", "Autumnfire", "Bharaclaiev", "Briarbosk", "Caersaelk", "Cathdeiryn", "Clatharla", "Crystalembers", "Dlardrageth", "Dree", "Duthjuth", "Elassidil", "Eluarshee", "Eroth", "Eveningfall", "Faerondaerl", "Fellmirr", "Fynnasla", "Gourael", "Haerlgent", "Halavanthlarr", "Ibryiil", "Ildroun", "Ilnatar", "Irithyl", "Jaglene", "Keove", "Laelithar", "Laughingwater", "Lharithlyn", "Lightshiver", "Meirityn", "Mistwinter", "Moonflower", "Moonweather", "Nacnar", "Neirdre", "Nha\xE9slal", "Nihmedu", "Nimesin", "Nyamtharsar", "Olortynnal", "Orama", "Oumryn", "Q'Naepp,", "Reithel", "Rhuidhen", "Runemaster", "Selorn", "Shaethe", "Shraiee", "Silverbow", "Sinaran", "Srinshee", "Starglow", "Straeth", "Summerstars", "Talandren", "Tarnruth", "Taurntyrith", "Tlanbourn", "Tornglara", "Tsornyl", "Ulongyr", "Vyshaan", "Windwalker", "Yraueme", "Aendryr", "Agrivar", "Alavara", "Alluth", "Amalith", "Ammath", "Arren", "Auglamyr", "Bellas", "Bhephel", "Brightcloak", "Calaudra", "Ceretlan", "Cormyth", "Dahast", "Doedance", "Duirsar", "Ealoeth", "Elian", "Ereuvyn", "Erlshade", "Everlove", "Faerondarl", "Fenmarel", "Gildenguard", "Greencloak", "Haladar", "Hlarr", "Ilbaereth", "Iliathor", "Immeril", "Irithyl", "Kadelaryn", "Kevanarial", "Laralytha", "Leafbower", "Lhoril", "Maendellyn", "M'Haaren", "Mithalvarin", "Moonglade", "Morningdove", "Naelgrath", "Nelnueve", "Nharimlur", "Ni\u2019Tessine", "Nlossae", "Nyntynel", "Olyrnn", "Orbryn", "Phenthae", "Rachiilstar", "Revven", "Rhyllgallohyr", "Sarsantyr", "Shadowmantle", "Shalandalan", "Shyr", "Silverhand", "Slenderbow", "Starnar", "Starym", "Strongbow", "Sunweaver", "Talesspur", "Tarsap", "Tellynnan", "Tohrthaal", "Torthtan", "Tyrneladhelu", "Vandiir", "Waelvor", "Xantrani", "Yridnae", "Aerasum\xE9", "Ahmaquissar", "Alastrarra", "Aloevan", "Amarallis", "Amrallatha", "Ash", "Auglathla", "Berethryl", "Blackhelm", "Brightsong", "Calauth", "Chaadren", "Coudoarluth", "Dawnhorn", "Donnathlascen", "Durothil", "Echorn", "Ellarian", "Erkowe", "Estelda", "Evioro", "Falanae", "Fflannidan", "Goadulphyn", "Gwaelon", "Hawksong", "Hyshaanth", "Ilbenalu", "Iliathor", "Ipyllasc", "Ithruen", "Kelerandri", "Korianthil", "Larenthanil", "Leafsigil", "Llundlar", "Maerdrym", "Miritar", "Moonbow", "Moonglamaer", "Mornmist", "Narlbeth", "Never", "Nightstar", "Nierde", "Nlossae", "Oakstaff", "Omberdawn", "Orbryn", "Pholont", "Raedrimn", "Rhaevaern", "Rivleam", "Selakiir", "Shadowwater", "Sharrith", "Sicafei", "Silveroak", "Spellstalker", "Starbrow", "Stillhawk", "Suldusk", "Swordstar", "Tamlyranth", "Tarsis", "Teshurr", "Toralynnsyr", "Toryvhallen", "Uirthur", "Veverell", "Whitethistle", "Yeschant", "Yundraer"];
|
|
|
|
// lists/dwarvenFamilyNames.ts
|
|
var dwarfFamilyNames = ["Aranore", "Balderk", "Battlehammer", "Bigtoe", "Bloodkith", "Bofdarm", "Brawnanvil", "Brazzik", "Broodfist", "Burrowfound", "Caebrek", "Daerdahk", "Dankil", "Daraln", "Deepdelver", "Durthane", "Eversharp", "FaHack", "Fire-forge", "Foamtankard", "Frostbeard", "Glanhig", "Goblinbane", "Goldfinder", "Gorunn", "Graybeard", "Hammerstone", "Helcral", "Holderhek", "Ironfist", "Loderr", "Lutgehr", "Morigak", "Orcfoe", "Rakankrak", "Ruby-Eye", "Rumnaheim", "Silveraxe", "Silverstone", "Steelfist", "Stoutale", "Strakeln", "Strongheart", "Thrahak", "Torevir", "Torunn", "Trollbleeder", "Trueanvil", "Trueblood", "Ungart"];
|
|
|
|
// editor/GeneratorModal.ts
|
|
var FCG = __toESM(require_dist2());
|
|
|
|
// generators/city.ts
|
|
function generateCityName(settings) {
|
|
const prefixes2 = settings.prefixArray;
|
|
const suffixes = settings.suffixArray;
|
|
const syllables2 = [
|
|
"ab",
|
|
"ac",
|
|
"ad",
|
|
"al",
|
|
"an",
|
|
"ap",
|
|
"ar",
|
|
"as",
|
|
"at",
|
|
"au",
|
|
"ba",
|
|
"be",
|
|
"bi",
|
|
"bo",
|
|
"bu",
|
|
"ca",
|
|
"ce",
|
|
"ci",
|
|
"co",
|
|
"cu",
|
|
"da",
|
|
"de",
|
|
"di",
|
|
"do",
|
|
"du",
|
|
"ea",
|
|
"eb",
|
|
"ec",
|
|
"ed",
|
|
"el",
|
|
"em",
|
|
"en",
|
|
"er",
|
|
"es",
|
|
"et",
|
|
"eu",
|
|
"fa",
|
|
"fe",
|
|
"fi",
|
|
"fo",
|
|
"fu",
|
|
"ga",
|
|
"ge",
|
|
"gi",
|
|
"go",
|
|
"gu",
|
|
"ha",
|
|
"he",
|
|
"hi",
|
|
"ho",
|
|
"hu",
|
|
"ia",
|
|
"ib",
|
|
"ic",
|
|
"id",
|
|
"ie",
|
|
"if",
|
|
"ig",
|
|
"il",
|
|
"im",
|
|
"in",
|
|
"io",
|
|
"ip",
|
|
"ir",
|
|
"is",
|
|
"it",
|
|
"iu",
|
|
"ja",
|
|
"je",
|
|
"ji",
|
|
"jo",
|
|
"ju",
|
|
"ka",
|
|
"ke",
|
|
"ki",
|
|
"ko",
|
|
"ku",
|
|
"la",
|
|
"le",
|
|
"li",
|
|
"lo",
|
|
"lu",
|
|
"ma",
|
|
"me",
|
|
"mi",
|
|
"mo",
|
|
"mu",
|
|
"na",
|
|
"ne",
|
|
"ni",
|
|
"no",
|
|
"nu",
|
|
"oa",
|
|
"ob",
|
|
"oc",
|
|
"od",
|
|
"oe",
|
|
"of",
|
|
"og",
|
|
"oi",
|
|
"oj",
|
|
"ok",
|
|
"ol",
|
|
"om",
|
|
"on",
|
|
"oo",
|
|
"op",
|
|
"or",
|
|
"os",
|
|
"ot",
|
|
"ou",
|
|
"ov",
|
|
"ow",
|
|
"ox",
|
|
"oz",
|
|
"pa",
|
|
"pe",
|
|
"pi",
|
|
"po",
|
|
"pu",
|
|
"qa",
|
|
"qe",
|
|
"qi",
|
|
"qo",
|
|
"qu",
|
|
"ra",
|
|
"re",
|
|
"ri",
|
|
"ro",
|
|
"ru",
|
|
"sa",
|
|
"se",
|
|
"si",
|
|
"so",
|
|
"su",
|
|
"ta",
|
|
"te",
|
|
"ti",
|
|
"to",
|
|
"tu",
|
|
"wa",
|
|
"we",
|
|
"wi",
|
|
"wo",
|
|
"wu",
|
|
"xa",
|
|
"xe",
|
|
"xi",
|
|
"xo",
|
|
"xu",
|
|
"ya",
|
|
"ye",
|
|
"yi",
|
|
"yo",
|
|
"yu",
|
|
"za",
|
|
"ze",
|
|
"zi",
|
|
"zo"
|
|
];
|
|
let prefix = prefixes2[Math.floor(Math.random() * prefixes2.length)];
|
|
const suffix = suffixes[Math.floor(Math.random() * suffixes.length)];
|
|
let generatedName = "";
|
|
const numSyllables = Math.floor(Math.random() * 2) + 2;
|
|
for (let i = 0; i < numSyllables; i++) {
|
|
const syllableIndex = Math.floor(Math.random() * syllables2.length);
|
|
generatedName += syllables2[syllableIndex];
|
|
}
|
|
generatedName = capitalizeFirstLetter2(generatedName);
|
|
prefix = capitalizeFirstLetter2(prefix);
|
|
return numSyllables > 3 ? `${prefix} ${generatedName}` : `${generatedName}${suffix}`;
|
|
}
|
|
function capitalizeFirstLetter2(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
}
|
|
|
|
// generators/loot.ts
|
|
function generateLoot(enableCurrency, currencyFrequency, currencyTypes, lootTable) {
|
|
const { adj, items } = lootTable;
|
|
const itemAmount = Math.floor(Math.random() * 5) + 1;
|
|
let loot = "";
|
|
for (let index = 0; index < itemAmount; index++) {
|
|
const randomAdjective = adj[Math.floor(Math.random() * adj.length)];
|
|
const amount = generateRareHighNumber(50, 0.1);
|
|
const randomNoun = getRandomElement(items);
|
|
const article = /^[aeiou]/i.test(randomAdjective) ? "an" : "a";
|
|
const plural = (randomNoun == null ? void 0 : randomNoun.endsWith("s")) ? `${randomNoun}'` : `${randomNoun}s`;
|
|
loot += `${amount > 1 ? `${amount} ${randomAdjective} ${plural}` : `${article} ${randomAdjective} ${randomNoun}`}, `;
|
|
}
|
|
if (enableCurrency) {
|
|
const shouldGenCurrency = Math.random() * 100;
|
|
const currencyLoot = currencyTypes.map((element) => {
|
|
const randomCurrencyAmount = generateRareHighNumberByRarity(element.rarity);
|
|
return randomCurrencyAmount > 0 ? `${randomCurrencyAmount} ${element.name}, ` : "";
|
|
}).join("");
|
|
if (shouldGenCurrency < currencyFrequency) {
|
|
loot += currencyLoot;
|
|
}
|
|
}
|
|
return loot.slice(0, -2);
|
|
}
|
|
function generateRareHighNumber(maxNumber, rarityFactor) {
|
|
const randomNumber = Math.random();
|
|
const rarity = randomNumber < rarityFactor ? rarityFactor : rarityFactor / 10;
|
|
return Math.floor(Math.random() * maxNumber * rarity);
|
|
}
|
|
function generateRareHighNumberByRarity(rarity) {
|
|
const rarityFactors = { common: 0.7, uncommon: 0.5, rare: 0.2, rarest: 0.02 };
|
|
const maxNumbers = { common: 300, uncommon: 150, rare: 30, rarest: 10 };
|
|
const randomNumber = Math.random();
|
|
if (randomNumber > rarityFactors[rarity] || rarityFactors[rarity] === void 0) {
|
|
return 0;
|
|
}
|
|
return Math.floor(Math.random() * maxNumbers[rarity]);
|
|
}
|
|
function getRandomElement(arr) {
|
|
const totalWeight = arr.reduce((acc, cur) => acc + cur.weight, 0);
|
|
let randomWeight = Math.random() * totalWeight;
|
|
for (const { item, weight } of arr) {
|
|
if (randomWeight < weight) {
|
|
return item;
|
|
}
|
|
randomWeight -= weight;
|
|
}
|
|
return void 0;
|
|
}
|
|
|
|
// generators/inn.ts
|
|
function generateInn(settings) {
|
|
const prefixes2 = settings.prefixes;
|
|
const innType = settings.innType;
|
|
const nouns2 = settings.nouns;
|
|
const descriptions = settings.desc;
|
|
const rumor = settings.rumors;
|
|
const prefixIndex = Math.floor(Math.random() * prefixes2.length);
|
|
const innTypeIndex = Math.floor(Math.random() * innType.length);
|
|
const nounIndex = Math.floor(Math.random() * nouns2.length);
|
|
const descriptionIndex = Math.floor(Math.random() * descriptions.length);
|
|
const rumorsIndexes = generateUniqueNumbers(0, rumor.length);
|
|
return {
|
|
name: prefixes2[prefixIndex] + " " + nouns2[nounIndex] + " " + innType[innTypeIndex],
|
|
description: descriptions[descriptionIndex],
|
|
rumors: [rumor[rumorsIndexes[0]], rumor[rumorsIndexes[1]], rumor[rumorsIndexes[2]]]
|
|
};
|
|
}
|
|
function generateUniqueNumbers(min, max) {
|
|
const numbers = [];
|
|
while (numbers.length < 3) {
|
|
const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
|
|
if (!numbers.includes(randomNumber)) {
|
|
numbers.push(randomNumber);
|
|
}
|
|
}
|
|
return numbers;
|
|
}
|
|
|
|
// lists/catfolkFamilyNames.ts
|
|
var catfolkFamilyNames = ["Whiskers", "Furrybrow", "Copperskin", "Windpaw", "Meowise", "Pouncival", "Buttons", "Smallshanks", "Sharpclaw", "Boxbane", "Onepaw", "Lastmouth", "Risenrage", "Freehunt", "Blackclaw", "Graveancestor", "Twinscar", "Burnedclaw", "Notchedfury", "Saltsea", "Bloodedthunder", "Nightmarepaw", "Blessedeye", "Blessedriver", "Risenfang", "Eternalmoon", "Falsehunt", "Twinfang", "Ebonclaw", "Nightforest", "Freemaw", "Firstmoon", "Twilightthunder", "Dawnhunt", "Dawnclaw", "Brokenwhisper", "Lastmoon", "Ebonfoot", "Lightningfang", "Twilightfury", "Nightblade", "Blacksea", "Bronzeclaw", "Cruelfury", "Bloodedhunt", "Cruelforest", "Brokendagger", "Blackeye", "Blackrage", "Oneash", "Brightmaw", "Bronzeriver", "Nightforest", "Blackpaw", "Freeclaw", "Brokenthunder", "Freemoon", "Burnedblade", "Grayrock", "Twilightpaw", "Moltenclaw", "Halffury", "Angrymoon", "Halfrage", "Graymountain", "Blessedear", "Freetooth", "Farbrothers", "Silentmoon", "Demonclaw", "Firstclaw", "Notchedlightning", "Eternalfang", "Fallingfury", "Lightningthunder", "Firstforest", "Risentail", "Bronzeisland", "Burnedskull", "Halfclaw", "Twilightboulder", "Falsehunt", "Cruelfang", "Nighteye", "Grayrock", "Halffang", "Silentash", "Bloodedhunter", "Lastrage", "Stalkingtail", "Nightmareblade", "Eternalhunter", "Twilightpaw", "Fallingthunder", "Savagefang", "Twinstorm", "Brokenhunt", "Blessedhunter", "Hellmountain", "Swifteye", "Twilightrock", "Blackrage", "Lightningthunder", "Gravemouth", "Twinhunt", "Brokenghost", "Eternalrock"];
|
|
|
|
// lists/ratfolkFamilyNames.ts
|
|
var ratfolkFamilyNames = ["Squeaktail", "Snifferpaw", "Nibblermuzzle", "Gnawclaw", "Whiskerteeth", "Slitherbristle", "Greasetail", "Tailnip", "Gritfur", "Scurrywhisker", "Fuzzymane", "Ratcheek", "Ratfang", "Clawsharp", "Cheesetail", "Furcheek", "Scurrilfang", "Scurryfur", "Fuzzytongue", "Ratgrit", "Ratnip", "Clawsharpen", "Cheesebristle", "Furfang", "Scurriltongue", "Scurrygrit", "Fuzzyfur", "Ratcheek", "Ratmane", "Clawteeth", "Cheesefur", "Furfang", "Scurrilwhisker", "Scurrynip", "Fuzzygrit", "Rattail", "Ratmuzzle", "Clawslither", "Cheesegrit", "Furmane", "Scurrilbristle", "Scurrytail", "Greasetail", "Rattongue", "Ratteeth", "Clawwhisker", "Cheesebristle", "Furmuzzle", "Scurrilgrit", "Scurrymane", "Greasemane", "Ratwhisker", "Ratbristle", "Clawslither", "Cheesemane", "Furnip", "Scurrilnip", "Scurrycheek", "Greasetongue", "Ratbristle", "Ratgrit", "Clawslither", "Cheesenip", "Furteeth", "Scurrilcheek", "Scurryfang", "Greasemuzzle", "Ratcheek", "Ratteeth", "Clawfur", "Cheesefang", "Furtail", "Scurrilmane", "Scurrybristle", "Greasetail", "Rattail", "Ratwhisker", "Clawslither", "Cheesetail", "Furbristle", "Scurrilgrit", "Scurrytail", "Greasetongue", "Rattongue", "Ratmane", "Clawteeth", "Cheesefur", "Furfang", "Scurrilwhisker", "Scurrynip", "Fuzzygrit", "Rattail", "Ratmuzzle", "Clawslither", "Cheesebristle", "Furfang", "Scurriltongue", "Scurrygrit", "Fuzzyfur", "Ratcheek", "Ratmane", "Clawteeth", "Cheesefur", "Furfang", "Scurrilwhisker", "Scurrynip", "Fuzzygrit", "Rattail", "Ratmuzzle", "Clawslither", "Cheesebristle", "Furfang", "Scurriltongue", "Scurrygrit", "Fuzzyfur", "Ratcheek", "Ratmane", "Clawteeth", "Cheesemuzzle", "Furtongue", "Scurrilnip", "Scurrycheek", "Greasetongue", "Ratbristle", "Ratgrit", "Clawslither", "Cheesemane", "Furnip", "Scurrilnip", "Scurryfang", "Greasemuzzle", "Ratwhisker", "Ratbristle", "Clawslither", "Cheesenip", "Furteeth", "Scurrilcheek", "Scurrybristle", "Greasetail", "Rattail", "Ratwhisker", "Clawslither", "Cheesetail", "Furbristle", "Scurrilgrit", "Scurrytail", "Greasetongue", "Rattongue", "Ratmane", "Clawteeth", "Cheesefang", "Furtail", "Scurrilmane", "Scurrybristle", "Greasemane", "Ratcheek", "Ratfang", "Clawsharp", "Cheesetail", "Furcheek", "Scurrilfang", "Scurryfur", "Fuzzytongue", "Ratgrit", "Ratnip", "Clawsharpen", "Cheesebristle", "Furfang", "Scurriltongue", "Scurrygrit", "Fuzzyfur", "Ratmane", "Clawslither", "Cheesemuzzle", "Furtongue", "Scurrilnip", "Scurrycheek", "Greasetongue", "Ratbristle", "Ratgrit", "Clawslither", "Cheesemane", "Furnip", "Scurrilnip", "Scurryfang", "Greasemuzzle", "Ratwhisker", "Ratbristle", "Clawslither", "Cheesenip", "Furteeth", "Scurrilcheek", "Scurrybristle", "Greasetail", "Rattail", "Ratwhisker", "Clawslither", "Cheesetail", "Furbristle", "Scurrilgrit", "Scurrytail", "Greasetongue", "Rattongue", "Ratmane", "Clawteeth", "Cheesefang", "Furtail", "Scurrilmane", "Scurrybristle", "Greasemane", "Ratcheek", "Ratfang", "Clawsharp", "Cheesetail", "Furcheek", "Scurrilfang", "Scurryfur", "Fuzzytongue", "Ratgrit", "Ratnip", "Clawsharpen"];
|
|
|
|
// lists/tianFamilyName.ts
|
|
var tianFamilyNames = ["Abe", "Adachi", "Adyaa", "Ahn", "Ai", "Ajartambun", "Akagi", "Akamine", "Aki", "Akiyama", "Al-attas", "Al-aydrus", "Al-kaf", "Al-qadri", "Altangerel", "Altankhuyag", "Altans\xFCkh", "Altantsetseg", "Am", "Amano", "Amari", "Amarjargal", "Amarsaikhan", "Amarsanaa", "Amart\xFCvshin", "Amaya", "Amgalan", "Amgalanbaatar", "An", "An", "Ando", "Ang", "Ang", "Anh", "Ankhbayar", "Anno", "Anzai", "Ao", "Aoki", "Aoyama", "Arai", "Arakaki", "Arakawa", "Araki", "Arata", "Araya", "Arima", "Arita", "Ariunbold", "Asa", "Asai", "Asano", "Asato", "Asd", "Ashikaga", "Assegaf", "Au", "Avirmed", "Ayuurzana", "Ayuush", "Azuma", "Ba", "Baasan", "Baasandorj", "Baasanjav", "Baasankh\xFC\xFC", "Baasans\xFCren", "Baatar", "Baatarkh\xFC\xFC", "Baba", "Babo", "Bach", "Badam", "Badarch", "Bae", "Baek", "Bai", "Baik", "Bak", "Baldan", "Baljinnyam", "Ban", "Ban", "Bando", "Bang", "Bangun", "Banh", "Banzragch", "Bao", "Barus", "Bat", "Bat-erdene", "Bat-ochir", "Bataa", "Batbaatar", "Batbayar", "Batbileg", "Batbold", "Batchuluun", "Batdelger", "Batdorj", "Baterdene", "Batjargal", "Batkhuyag", "Batkh\xFC\xFC", "Batm\xF6nkh", "Batnasan", "Batochir", "Batsaikhan", "Batsuuri", "Bats\xFCkh", "Battogtokh", "Battsengel", "Battsetseg", "Battulga", "Batt\xF6m\xF6r", "Batt\xF6r", "Batzorig", "Bayanjargal", "Bayanm\xF6nkh", "Bayar", "Bayaraa", "Bayarjargal", "Bayarkh\xFC\xFC", "Bayarmaa", "Bayarmagnai", "Bayarsaikhan", "Bayasgalan", "Bazar", "Bazarragchaa", "Be", "Benjerang", "Beras", "Bi", "Bich", "Binh", "Bo", "Bold", "Boldbaatar", "Bolormaa", "Bong", "Boo", "Bou", "Bu", "Bui", "Bukit", "Bun", "Bun", "Byamba", "Byambaa", "Byambadorj", "Byambajav", "Byambas\xFCren", "Byambatsogt", "Byun", "B\xE1i", "Ca", "Cam", "Cam", "Cao", "Capah", "Cen", "Cha", "Chae", "Chai", "Chai", "Chang", "Chang", "Chap", "Chau", "Chay", "Che", "Chea", "Chee", "Cheong", "Chew", "Chhay", "Chi", "Chi", "Chi", "Chia", "Chian", "Chiba", "Chim", "Chimed", "Chimeddorj", "Chin", "Chin", "Chinbat", "Chinen", "Chino", "Chinzorig", "Cho", "Choe", "Choi", "Chon", "Chong", "Choung", "Choung", "Chu", "Chu", "Chuluun", "Chuluunbaatar", "Chuluunbat", "Chum", "Chun", "Chung", "Chung", "Ch\xE1ng", "Ch\xE9n", "Ch\xE9ng", "Ciu", "Co", "Con", "Cong", "Cong", "Cu", "Cu", "Cui", "Cung", "Cuong", "Cu\u012B", "C\xE0i", "C\xE1o", "Da", "Dagva", "Dagvadorj", "Dai", "Dam", "Damanik", "Damba", "Damdin", "Damdindorj", "Damdins\xFCren", "Dan", "Dang", "Danh", "Dao", "Dash", "Dashdavaa", "Dashdondog", "Dashdorj", "Dashnyam", "Dashtseren", "Dashzeveg", "Date", "Dau", "Davaa", "Davaadorj", "Davaajav", "Davaanyam", "Davaasambuu", "Davaas\xFCren", "Demberel", "Diep", "Dieu", "Dinh", "Do", "Do", "Doan", "Doi", "Dolgor", "Dolgors\xFCren", "Domen", "Dong", "Dorj", "Dorjgotov", "Dorjpalam", "Dorjs\xFCren", "Du", "Duc", "Dulams\xFCren", "Dung", "Duong", "Duy", "Du\xE0n", "D\xE0i", "D\xE8ng", "D\xF9", "D\xFCgers\xFCren", "D\u012Bng", "D\u01D2ng", "Eguchi", "Endo", "Enebish", "Enkhbaatar", "Enkhbat", "Enkhbayar", "Enkhbold", "Enkhjargal", "Enkhsaikhan", "Enkhtaivan", "Enkhtsetseg", "Enkhtuyaa", "Enkht\xF6r", "Enkht\xFCvshin", "Enomoto", "Erdene", "Erdenebaatar", "Erdenebat", "Erdenebayar", "Erdenebileg", "Erdenechimeg", "Erdenechuluun", "Erdenetsogt", "Erkhembayar", "Eto", "Eu", "Fam", "Fu", "Fujii", "Fujikawa", "Fujimori", "Fujimoto", "Fujimura", "Fujino", "Fujioka", "Fujita", "Fujiwara", "Fukuda", "Fukuhara", "Fukui", "Fukumoto", "Fukunaga", "Fukushima", "Funai", "Fung", "Furukawa", "Furuta", "Furutani", "Furuya", "Fuse", "F\xE0n", "F\xE9ng", "F\xF9", "F\u0101ng", "Ga", "Galbadrakh", "Ganbaatar", "Ganbat", "Ganbold", "Ganchimeg", "Gang", "Gankhuyag", "Gans\xFCkh", "Gantulga", "Gant\xF6m\xF6r", "Ganzorig", "Garamata", "Gia", "Giang", "Gima", "Ginting", "Go", "Goda", "Goe", "Gombo", "Gombojav", "Gombos\xFCren", "Gonchig", "Goo", "Goto", "Goya", "Gurupatih", "Gurusinga", "Gu\u014D", "G\xF9", "G\u0101o", "G\u014Dng", "Ha", "Ha", "Ha", "Hada", "Haga", "Hagiwara", "Hahm", "Hai", "Ham", "Hamada", "Hamamoto", "Hamasaki", "Han", "Han", "Handa", "Hang", "Hano", "Hara", "Harada", "Hase", "Hasegawa", "Hashimoto", "Hata", "Hatanaka", "Hattori", "Hayakawa", "Hayashi", "Hayashida", "Hem", "Heng", "Heo", "Heo", "Her", "Hi", "Hien", "Hieu", "Higa", "Higashi", "Higuchi", "Hino", "Hirabayashi", "Hirai", "Hirano", "Hiraoka", "Hirata", "Hirayama", "Hironaka", "Hirose", "Hirota", "Hiu", "Ho", "Ho", "Ho", "Hoa", "Hoai", "Hoan", "Hoang", "Hoga", "Hokama", "Hon", "Honda", "Hong", "Hong", "Hora", "Hori", "Horie", "Horiuchi", "Hoshino", "Hua", "Huh", "Hung", "Huong", "Hur", "Huu", "Huy", "Huyen", "Huynh", "Hu\xE1ng", "Hwang", "Hyun", "H\xE1n", "H\xE8", "H\xE9", "H\xF3u", "H\xFA", "H\u01CEo", "Ichikawa", "Ida", "Ide", "Igarashi", "Ige", "Iha", "Iida", "Ike", "Ikeda", "Ikehara", "Im", "Imada", "Imai", "Imamura", "In", "In", "Inaba", "Inh", "Inouye", "Isa", "Iseri", "Ishibashi", "Ishida", "Ishihara", "Ishii", "Ishikawa", "Ishimoto", "Isobe", "Ito", "Itoh", "Iwai", "Iwamoto", "Iwasaki", "Iwata", "Izumi", "Jadamba", "Jadibata", "Jambal", "Jambaldorj", "Jamsran", "Janchiv", "Jang", "Jap", "Jargal", "Jargalsaikhan", "Jawak", "Jee", "Jeon", "Jeong", "Jie", "Jigjid", "Jin", "Jin", "Jiu", "Ji\u0101ng", "Ji\u0101ng", "Ji\u01CE", "Ji\u01CEng", "Jo", "Joh", "Jon", "Jong", "Jong", "Ju", "Juba", "Jue", "Jun", "Jung", "Jung", "J\u012Bn", "Kaba", "Kaban", "Kacinambun", "Kaciribu", "Kagawa", "Kai", "Kajiwara", "Kam", "Kamei", "Kamiya", "Kanai", "Kanda", "Kaneko", "Kanemoto", "Kaneshiro", "Kang", "Kanno", "Kano", "Karo-karo", "Kasai", "Kase", "Kataoka", "Katayama", "Kato", "Kawabata", "Kawaguchi", "Kawahara", "Kawai", "Kawakami", "Kawamoto", "Kawamura", "Kawano", "Kawasaki", "Kawashima", "Kawata", "Kaya", "Kee", "Keliat", "Kemit", "Keng", "Keo", "Ketaren", "Khac", "Khaltar", "Khanh", "Khatanbaatar", "Khong", "Khong", "Kh\xFCrelbaatar", "Ki", "Kibe", "Kida", "Kido", "Kieu", "Kikuchi", "Kil", "Kim", "Kim", "Kimoto", "Kimura", "Kinoshita", "Kishi", "Kishimoto", "Kita", "Kitagawa", "Kitamura", "Kiyabu", "Ko", "Ko", "Kobashigawa", "Kobayashi", "Kobe", "Koda", "Kodama", "Koga", "Koike", "Koizumi", "Kojima", "Komatsu", "Kon", "Kon", "Konda", "Kondo", "Kong", "Kong", "Konishi", "Konno", "Kono", "Konya", "Koo", "Kook", "Kou", "Koyama", "Koyanagi", "Ku", "Ku", "Ku", "Kuba", "Kubo", "Kubota", "Kudo", "Kuk", "Kumagai", "Kuno", "Kuramoto", "Kurata", "Kure", "Kurihara", "Kuroda", "Kurokawa", "Kuse", "Kusumoto", "Kuwahara", "Kwak", "Kwan", "Kwock", "Kwok", "Kwon", "Kye", "K\u0101ng", "K\u01D2ng", "La", "Lai", "Lai", "Laksa", "Lam", "Lan", "Lang", "Le", "Lee", "Lee", "Leng", "Li", "Li", "Liau", "Lieu", "Lim", "Lim", "Linh", "Liong", "Liu", "Li\xE1ng", "Li\xFA", "Lkhagva", "Lkhagvadorj", "Lkhagvajav", "Lkhagvas\xFCren", "Lkhams\xFCren", "Lo", "Lo", "Lon", "Long", "Long", "Lu", "Lu", "Luc", "Luong", "Luu", "Luvsan", "Luvsandorj", "Lu\xF3", "Ly", "L\xE0i", "L\xED", "L\xEDn", "L\xF3ng", "L\xF9", "L\xFA", "L\u01D0", "L\u01DA", "Ma", "Ma", "Ma", "Ma", "Machi", "Machida", "Mae", "Maeda", "Maekawa", "Mai", "Maita", "Maki", "Makino", "Manh", "Manik", "Mano", "Mano", "Mao", "Marga", "Maruyama", "Masaki", "Mase", "Masuda", "Matsubara", "Matsuda", "Matsui", "Matsumoto", "Matsumura", "Matsunaga", "Matsuno", "Matsuo", "Matsuoka", "Matsushima", "Matsushita", "Matsuura", "Matsuyama", "Matsuzaki", "Mayeda", "Meas", "Men", "Mendbayar", "Meo", "Mihara", "Mikami", "Miki", "Min", "Minami", "Minamoto", "Minh", "Minh", "Mino", "Mita", "Miura", "Miya", "Miyagawa", "Miyahara", "Miyahira", "Miyake", "Miyamoto", "Miyasaki", "Miyasato", "Miyashiro", "Miyashita", "Miyata", "Miyazaki", "Miyoshi", "Mizuno", "Mochizuki", "Mok", "Mong", "Moon", "Mori", "Morikawa", "Morimoto", "Morine", "Morino", "Morioka", "Morishige", "Morishita", "Morita", "Moriyama", "Mukai", "Mun", "Munte", "Mura", "Murai", "Murakami", "Muramoto", "Muranaka", "Murano", "Muraoka", "Murata", "Murayama", "Muto", "My", "Myagmar", "Myagmarjav", "Myagmars\xFCren", "Myung", "M\xE1o", "M\xE8ng", "M\xF6nkhbaatar", "M\xF6nkhbat", "M\xF6nkhbayar", "M\xF6nkhjargal", "M\xF6nkhtsetseg", "M\u01CE", "Na", "Nagai", "Nagamine", "Nagano", "Nagao", "Nagasawa", "Nagata", "Nahm", "Naidan", "Naito", "Nakada", "Nakagawa", "Nakahara", "Nam", "Nam", "Namohaji", "Namsrai", "Naranbaatar", "Narangerel", "Narantsetseg", "Narantuyaa", "Narmandakh", "Natsag", "Natsagdorj", "Nerg\xFCi", "Ng", "Ng", "Ngan", "Nghiem", "Ngo", "Ngoc", "Ngu", "Nguen", "Ngueyn", "Ngui", "Nguye", "Nguyen", "Ngyen", "Ngyuen", "Nhan", "Nhat", "Nhoc", "Nhok", "Nhu", "Ninh", "No", "Noh", "Nong", "Norov", "Nu", "Nuth", "Nyamaa", "Nyamdavaa", "Nyamdorj", "Nyamjav", "Nyams\xFCren", "O", "Oan", "Ochir", "Ochirbat", "Odgerel", "Oh", "Oidov", "Ok", "Om", "Om", "Ong", "Otgon", "Otgonbaatar", "Otgonbayar", "Otgonjargal", "Ou", "Ouk", "Oum", "Oyuunchimeg", "Oyuuntsetseg", "Pae", "Paek", "Pai", "Paik", "Pak", "Pan", "Pang", "Pe", "Pen", "Penggarun", "Perangin-angin", "Perbesi", "Pha", "Pham", "Phan", "Phan", "Phang", "Phang", "Phi", "Phiong", "Pho", "Phong", "Phu", "Phu", "Phuc", "Phung", "Phung", "Phuoc", "Phuong", "Pin", "Pincawan", "Pinem", "Pong", "Prak", "Prom", "Pu", "Pui", "Puk", "Puntsag", "Purba", "Purev", "Pyon", "Pyun", "P\xE9ng", "P\xFCrevdorj", "P\xFCrevjav", "P\xFCrevs\xFCren", "P\u0101n", "Qi\xE1n", "Qi\xE1o", "Qi\u016B", "Quach", "Quan", "Quang", "Quoc", "Quon", "Quy", "Quynh", "Q\xEDn", "Ra", "Ragchaa", "Ree", "Reeh", "Rentsendorj", "Rhee", "Rho", "Rim", "Ro", "Roe", "Roh", "Ros", "Ryu", "R\xE9n", "Sa", "Saetern", "Saeteurn", "Sambuu", "Samdan", "Samudra", "Sandag", "Sanjaa", "Sao", "Sar", "Saragih", "Sayavong", "Sebayang", "Sek", "Sekali", "Sem", "Sembiring", "Seo", "Seragih", "Shagdar", "Shagdars\xFCren", "Sharav", "Sheen", "Shihab", "Shim", "Shin", "Shon", "Sh\xE0o", "Sh\xE8ng", "Sh\xED", "Sh\u011Bn", "Sh\u01D0", "Siau", "Sim", "Sin", "Sinaga", "Singarimbun", "Sinubulan", "Sinuhaji", "Sinukaban", "Sinulingga", "Sinurat", "Sinuraya", "Sinusinga", "Sitepu", "So", "Sodnom", "Soh", "Sohn", "Sok", "Sok", "Som", "Son", "Son", "Song", "Song", "Srey", "Su", "Sugihen", "Suh", "Suk", "Suka", "Sukatendel", "Sum", "Sumyaa", "Sun", "Sun", "Sung", "Sung", "Sur", "Surbakti", "S\xF2ng", "S\xFCkhbaatar", "S\xFCkhbat", "S\u016B", "S\u016Bn", "Ta", "Taing", "Tak", "Tam", "Tan", "Tan", "Tang", "Tang", "Tanjung", "Tao", "Tarigan", "Tat", "Tea", "Terbish", "Thach", "Thach", "Thai", "Thai", "Than", "Thang", "Thang", "Thanh", "Thao", "The", "Then", "Thi", "Thian", "Thien", "Thieu", "Thong", "Thu", "Thung", "Thuong", "Thuy", "Tien", "Tieu", "Tim", "Tio", "Ti\xE1n", "To", "To", "Togtokh", "Toh", "Ton", "Tong", "Touch", "Tra", "Tram", "Tran", "Trang", "Tri", "Trieu", "Trinh", "Trong", "Trung", "Truong", "Tsedev", "Tsegmid", "Tsend", "Tsend-ayuush", "Tsends\xFCren", "Tseren", "Tserendorj", "Tserennadmid", "Tsetsegmaa", "Tseveen", "Tsogbadrakh", "Tsogtbaatar", "Tsogtsaikhan", "Tsolmon", "Tsui", "Tu", "Tuan", "Tumangger", "Tun", "Tung", "Tungalag", "Tuong", "Tuyet", "T\xE1n", "T\xE1ng", "T\xF6m\xF6r", "T\xF6m\xF6rbaatar", "T\xFCmenjargal", "T\xFCvshinjargal", "T\u0101ng", "Uc", "Ulambayar", "Ulunjandi", "Um", "Um", "Un", "Uranchimeg", "Urtnasan", "Uuganbayar", "Uwir", "Van", "Vi", "Viet", "Vinh", "Vo", "Vu", "Vuong", "Vy", "Wang", "Whang", "Won", "Woo", "Wu", "W\xE0n", "W\xE1ng", "W\xE8i", "W\xE9n", "W\xFA", "W\u0101ng", "W\u01D4", "Xi\xE0", "Xi\xE8", "Xi\xF3ng", "Xi\u0101o", "Xuan", "Xu\u0113", "X\xFA", "X\u01D4", "Yadams\xFCren", "Yang", "Ye", "Yee", "Yen", "Yeo", "Yi", "Yin", "Yoh", "Yon", "Yondon", "Yong", "Yoo", "Yoon", "You", "Youn", "Yu", "Yum", "Yun", "Yu\xE1n", "Y\xE1n", "Y\xE1ng", "Y\xE1o", "Y\xE8", "Y\xEC", "Y\xFA", "Y\xFA", "Y\u01D0n", "Zh\xE0o", "Zh\xE8ng", "Zh\u0101ng", "Zh\u0101ng", "Zh\u014Dng", "Zh\u014Du", "Zh\u016B", "Zorigt", "Zorigtbaatar", "Zundui", "Z\u0113ng", "Z\u014Du", "\xF6lziibayar"];
|
|
|
|
// lists/titleLastNames.ts
|
|
var titleLastNames = ["Clamps", "Blackbeard", "Tombhand", "Steelmaw", "Shardheart", "Crimsonfang", "Gloombringer", "Ravager", "Ironfist", "Necrowalker", "Thunderfury", "Ravenclaw", "Shadowreaper", "Frostbreath", "Wolfsbane", "Deathgrip", "Bloodweaver", "Dangersense", "Frostweaver", "Chillblade", "Doombringer", "Wraithstalker", "Warchant", "Doomcaller", "Starfall", "Huntlord", "Howler", "Steelclaw", "Darkclaw", "Shadowbane", "Greylung", "Ashlord", "Doomwing", "Shadowfang", "Brownwing", "Desolation", "Glaivemaster", "Soulblade", "Frostcaller", "Nightwalker", "Nightcaller", "Wraithlord", "Eye-Stabber", "Leg-Eater", "Doomshadow", "Soulcrusher", "Frostbringer", "Soulweaver", "Gloomhand", "Doomstalker", "Bonecrusher", "Stonefist", "Lithclaw", "Gloomstalker", "Wretchedspawn", "Ironclaw", "Doomlord", "Wolfcaller", "Deathlord", "Dragonbreath", "Stormcaller", "Wolfheart", "Ironheart", "Shadowheart", "Bloodfang", "Bloodclaw", "Bloodwing", "Bloodlord", "Gloomwing", "Shadowhide", "Bloodbringer", "Stoneheart", "Ironhide", "Shadowfury", "Bloodfist", "Doomhide", "Bloodbinder", "Bloodwalker", "Steelheart", "Steelhide", "Steelbinder", "Steelwing", "Steelfury", "Steelfist", "Steelbreath", "Steelbringer", "Doomfist", "Frostheart", "Frosthide", "Frostfist", "Frostbinder", "Gloombinder", "Gloomfist", "Gloomheart", "Gloomhide", "Gloomwing", "Gloombreath", "Fatespinner", "Battlebond", "Doombringer", "Shadowbreath", "Wraithbinder", "Wargripper", "Wolfbinder", "Wolfbreath", "Wolfhide", "Wolfheart", "Wolfwing", "Wolffury", "Wolfbringer", "Wolfstalker", "Beastcaller", "Dragonscale", "Earthshaker", "Firespitter", "Windrider", "Warbringer", "Ravagestorm", "Chaoscaller", "Blightbringer", "Doomcall", "Frostfire", "Ironfang", "Shadowfury", "Steelfire", "Wolfstorm", "Bloodfire", "Gloomfury", "Wargorger", "Wolfclaw", "Deathclaw", "Doomfang", "Ironfire", "Shadowclaw", "Steeltusk", "Wolfbinder", "Wolfclaw", "Wolfheart", "Wolfhide", "Wolfwing", "Woldfury", "Wolfstalker", "Beastcaller", "Dragonscale", "Earthshaker", "Firespitter", "Windrider", "Warbringer", "Ravagestorm", "Chaoscaller", "Blightbringer", "Doomcall", "Frostfire", "Ironfang", "Shadowfury", "Steelfire", "Wolfstorm", "Bloodfire", "Gloomfury", "Wargorger", "Wolfclaw", "Deathclaw", "Doomfang", "Ironfire", "Shadowclaw", "Steeltusk", "Wolfbinder", "Wolfclaw", "Wolfheart", "Wolfhide", "Wolfwing", "Woldfury", "Wolfstalker", "Beastcaller", "Dragonscale", "Earthshaker", "Firespitter", "Windrider", "Warbringer", "Ravagestorm", "Chaoscaller", "Blightbringer", "Doomcall", "Frostfire", "Ironfang", "Shadowfury", "Steelfire", "Wolfstorm", "Bloodfire", "Gloomfury", "Wargorger", "Wordsmith", "Tinkertotem", "Doomtamer", "Shadowborn", "Ravagerider", "Direcaller", "Laststander", "Warsworn", "Steelreaper", "Furybringer", "Doomweaver", "Frostweld", "Shadowweaver", "Wolfweaver", "Bloodweaver", "Gloomweaver", "Ironweaver", "Steelweaver", "Stormrider", "Battlelord", "Gloomlord", "Ironlord", "Shadowlord", "Steellord", "Wolflord", "Doomrider", "Gloomrider", "Shadowrider", "Steelrider", "Wolfrider", "Doomslayer", "Gloomslayer", "Shadowslayer", "Steelslayer", "Wolfslayer", "Battlebrand", "Gloombrand", "Ironbrand", "Shadowbrand", "Steelbrand", "Wolfbrand", "Doomspark", "Gloomspark", "Shadowspark", "Steelspark", "Wolfspark", "Tinkerweaver", "Arcanesworn", "Arcanefist", "Arcaneblade", "Spellweaver", "Spellcaster", "Spellsinger", "Spellbreaker", "Spelllord", "Spellrider", "Spellfury", "Spellbinder", "Spellbreath", "Spellwing", "Spellhunter", "Spellfire", "Spellbringer", "Spellstalker", "Spellmaster", "Spellheart", "Spellhide", "Spellclaw", "Spellfang", "Spellweaver", "Spellcaller", "Spellshadow", "Spelldoom", "Spellfrost", "Spellgloom", "Arcanesmith", "Spellweld", "Spellforge", "Spellcrusher", "Spellbane", "Spelldread", "Spellwielder", "Spellbond", "Spellpower", "Spellblood", "Spellblade", "Spellshard", "Spellwrath", "Spelltitan", "Spellbreaker", "Spellfury", "Arcanedoom", "Bookworth", "Tomekeeper", "Arcaneforge", "Spellweaver", "Spellsword", "Spellbinder", "Smithfang", "Warlord", "Soulcrusher", "Doomcaller", "Warbringer", "Stonefist", "Shadowheart", "Craftmaker", "Spellspinner", "Warlord", "Soulcrusher", "Doomcaller", "Warbringer", "Stonefist", "Shadowheart", "Craftmaker", "Spellspinner", "Glaivemaster", "Ironhide", "Steelwing", "Bloodfang", "Wolfbreath", "Wolfheart", "Doomstalker", "Shadowfury", "Wolfbinder", "Frostbringer", "Gloomweaver."];
|
|
|
|
// generators/Pathfinder/pathfinderName.ts
|
|
var pathfinderRaceMap = [
|
|
{ race: "aasimars", generator: generateAasimars },
|
|
{ race: "catfolk", generator: generateCatfolk },
|
|
{ race: "fetchlings", generator: generateFetchlings },
|
|
{ race: "halfelf", generator: generateHalfElf },
|
|
{ race: "halforc", generator: generateHalfOrc },
|
|
{ race: "hobgoblin", generator: generateHobgoblin },
|
|
{ race: "ifrits", generator: generateIfrits },
|
|
{ race: "kobalds", generator: generateKobalds },
|
|
{ race: "oreads", generator: generateOreads },
|
|
{ race: "ratfolk", generator: generateRatfolk },
|
|
{ race: "sylphs", generator: generateSylphs },
|
|
{ race: "tengu", generator: generateTengu },
|
|
{ race: "tians", generator: generateTians },
|
|
{ race: "tiefling", generator: generateTiefling },
|
|
{ race: "undines", generator: generateUndines }
|
|
];
|
|
function randomItemFromArray3(array) {
|
|
const randomIndex = Math.floor(Math.random() * array.length);
|
|
return array[randomIndex];
|
|
}
|
|
function capitalizeFirstLetter3(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
}
|
|
function generatePathfinderName(race, gender, familyName) {
|
|
let name = "";
|
|
pathfinderRaceMap.forEach((e) => {
|
|
if (e.race === race) {
|
|
if (gender === "male") {
|
|
name = e.generator(0, familyName);
|
|
} else {
|
|
name = e.generator(1, familyName);
|
|
}
|
|
}
|
|
});
|
|
return name;
|
|
}
|
|
function generateAasimars(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "b", "c", "cr", "d", "gr", "k", "kr", "l", "m", "n", "p", "s", "t", "w", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "y", "ai", "au", "ie", "ia", "ea"];
|
|
const nm3 = ["b", "b", "d", "d", "dr", "g", "g", "gr", "gn", "k", "k", "kw", "kr", "l", "l", "lw", "lr", "lm", "ln", "lg", "lt", "m", "m", "mr", "ml", "mw", "n", "n", "nr", "nl", "ng", "nv", "nw", "r", "r", "rl", "rw", "rg", "rn", "t", "t"];
|
|
const nm4 = ["l", "m", "n", "n", "n", "nt", "r"];
|
|
const nm5 = ["", "", "", "", "b", "br", "d", "dr", "h", "l", "m", "n", "p", "ph", "r", "rh", "v", "vh", "w"];
|
|
const nm6 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "oe", "ou", "ua", "ea", "ia"];
|
|
const nm7 = ["d", "d", "dr", "dy", "gr", "j", "j", "l", "l", "ll", "lt", "ld", "lm", "ln", "ldr", "ls", "m", "m", "mr", "mk", "ml", "n", "n", "ndr", "nd", "nk", "ng", "nd", "ny", "nm", "p", "p", "pr", "r", "r", "rk", "rl", "s", "s", "v", "v", "y", "y", "z", "z"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "h", "l", "n", "r"];
|
|
const nm9 = ["", "", "", "", "b", "br", "d", "dr", "h", "k", "kr", "l", "m", "n", "p", "r", "s", "t", "v", "w", "z"];
|
|
const nm10 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "y"];
|
|
const nm11 = ["b", "d", "g", "gr", "h", "k", "kr", "km", "l", "ll", "lr", "ls", "lg", "ldr", "lm", "lw", "m", "mr", "ml", "n", "nm", "ng", "nv", "nk", "p", "pr", "r", "rl", "rg", "rv", "rw", "s", "v", "z"];
|
|
const nm12 = ["", "", "", "l", "m", "n", "r"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let nameLast = "";
|
|
let names = "";
|
|
const rnd10 = Math.floor(Math.random() * nm9.length);
|
|
const rnd11 = Math.floor(Math.random() * nm10.length);
|
|
const rnd12 = Math.floor(Math.random() * nm12.length);
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
if (i % 2 === 0) {
|
|
const rnd15 = Math.floor(Math.random() * nm11.length);
|
|
const rnd16 = Math.floor(Math.random() * nm10.length);
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm11[rnd15] + nm10[rnd16] + nm12[rnd12] : "";
|
|
} else {
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm12[rnd12] : "";
|
|
}
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 6) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5] + " " + nameLast;
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 7) {
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5] + " " + nameLast;
|
|
}
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
function generateCatfolk(type, genLastName) {
|
|
const nm1 = ["br", "c", "cr", "dr", "f", "g", "gr", "j", "k", "kr", "m", "n", "p", "pr", "q", "qr", "r", "t", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "y", "y", "ou", "au", "ei"];
|
|
const nm3 = ["c", "cc", "cd", "cb", "g", "gg", "gt", "gb", "gd", "k", "kk", "kh", "kt", "mb", "mk", "mq", "nq", "nk", "ng", "q", "qh", "r", "rr", "rq", "rk", "th", "w"];
|
|
const nm4 = ["", "m", "n", "r", "s", "th"];
|
|
const nm5 = ["", "", "", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "v", "z"];
|
|
const nm6 = ["a", "e", "i", "o", "u"];
|
|
const nm7 = ["f", "ff", "l", "ly", "lh", "ls", "lr", "lm", "ln", "m", "my", "mh", "n", "ny", "nh", "ph", "phr", "r", "rr", "ry", "rh", "sy", "sh", "sr", "sl", "th", "ty", "y"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "h", "s"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 6) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 7) {
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5];
|
|
}
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(catfolkFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateFetchlings(type, genLastName) {
|
|
const nm1 = ["", "", "", "br", "dr", "gr", "j", "m", "n", "q", "qr", "r", "s", "tr", "x", "y", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u"];
|
|
const nm3 = ["c", "d", "g", "h", "j", "k", "l", "m", "n", "r", "s", "t", "v", "z"];
|
|
const nm4 = ["", "", "", "c", "h", "l", "m", "n", "r", "t", "x"];
|
|
const nm5 = ["c", "f", "g", "h", "l", "m", "n", "q", "r", "s", "t", "th", "v", "y", "z"];
|
|
const nm7 = ["c", "fz", "fn", "g", "gv", "gn", "gz", "h", "hn", "hv", "hz", "l", "lv", "lr", "ls", "lz", "m", "mr", "mv", "mz", "nv", "nz", "nr", "r", "rr", "rs", "rz", "rh", "rv", "sc", "sh", "sr", "sv", "th", "thr", "tv", "tn"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "", "", "", "h", "l", "m", "n", "s", "x"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 6) {
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm7[rnd6] + nm2[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (rnd < 3) {
|
|
while (rnd5 < 3) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(familyNameList)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateHalfElf(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "b", "c", "d", "g", "h", "j", "jh", "k", "kh", "kr", "l", "m", "n", "p", "q", "r", "s", "t", "tr", "v", "vr", "z", "zr"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "y", "y", "y", "ai", "ae", "ia", "ue", "ie", "ui"];
|
|
const nm3 = ["d", "d", "d", "dr", "dl", "dw", "g", "g", "g", "gr", "gl", "gg", "gw", "l", "l", "l", "l", "ld", "lv", "lgr", "lbr", "lc", "ldr", "lg", "lgg", "lr", "lt", "lth", "m", "m", "m", "mr", "ml", "n", "n", "n", "nc", "nn", "nr", "nd", "ngr", "nv", "nvr", "r", "r", "r", "rc", "rg", "rr", "rth", "rv", "rvr", "rl", "rd", "rdr", "rgr", "rw", "s", "s", "s", "sh", "sl", "sr", "ss", "st", "str", "svr", "t", "t", "t", "th", "tt", "tr"];
|
|
const nm4 = ["", "", "", "c", "h", "k", "l", "n", "nn", "r", "s"];
|
|
const nm5 = ["", "", "", "", "c", "ch", "d", "j", "k", "kr", "l", "m", "n", "r", "s", "sh", "t", "thr", "th", "tr", "v", "vr", "vh", "z", "zr", "zh"];
|
|
const nm6 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "ia", "au", "ie", "ua", "oi", "ou", "ae"];
|
|
const nm7 = ["b", "b", "br", "cl", "cr", "d", "d", "gs", "gl", "gn", "gm", "gsh", "l", "l", "l", "lm", "lr", "lsr", "ltr", "ly", "lly", "ld", "ll", "lsb", "lv", "m", "m", "m", "my", "mr", "n", "n", "n", "nd", "nr", "nw", "nn", "ns", "nv", "ny", "pt", "pr", "r", "r", "r", "r", "rg", "rr", "rl", "rv", "ry", "s", "s", "s", "ss", "sy", "str", "sw", "thr", "tr", "th", "y", "y", "y"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "h", "l", "n", "s", "ss", "th"];
|
|
const nm9 = ["", "", "", "", "b", "bl", "cl", "d", "dr", "f", "fl", "fr", "g", "gl", "gr", "h", "j", "k", "kl", "kr", "l", "m", "n", "p", "pr", "s", "sl", "sk", "st", "t", "tr", "wr", "y", "z"];
|
|
const nm10 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "aa", "io", "ei", "iu", "ai", "ea", "ee"];
|
|
const nm11 = ["d", "d", "d", "dr", "dw", "gr", "gw", "gn", "g", "g", "gg", "h", "h", "h", "j", "j", "j", "k", "k", "k", "kr", "kl", "km", "kn", "l", "l", "ll", "l", "lr", "lg", "ld", "ldr", "lmr", "ly", "m", "mg", "mr", "m", "m", "m", "n", "n", "n", "nn", "n", "nr", "ng", "ngr", "ndr", "nd", "nsh", "ntr", "r", "r", "r", "r", "rr", "rd", "rdr", "rg", "rgr", "rl", "rm", "rt", "s", "s", "s", "sdr", "sgr", "sg", "sh", "ssr", "t", "tr", "t", "t", "th", "v", "v", "vr", "vl", "w", "xh", "xt", "y", "yh", "zm"];
|
|
const nm12 = ["", "", "", "", "", "", "", "ht", "l", "m", "n", "nd", "nn", "r", "rks", "rt", "s", "th", "w", "ys"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
let nameLast;
|
|
let rnd10 = Math.floor(Math.random() * nm9.length);
|
|
const rnd11 = Math.floor(Math.random() * nm10.length);
|
|
let rnd12 = Math.floor(Math.random() * nm12.length);
|
|
if (i % 3 === 0 && i % 2 != 0) {
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm12[rnd12] : "";
|
|
} else if (i % 2 === 0) {
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
const rnd15 = Math.floor(Math.random() * nm11.length);
|
|
const rnd16 = Math.floor(Math.random() * nm10.length);
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm11[rnd15] + nm10[rnd16] + nm12[rnd12] : "";
|
|
} else {
|
|
while (rnd10 < 4) {
|
|
rnd10 = Math.floor(Math.random() * nm9.length);
|
|
}
|
|
while (rnd12 < 7) {
|
|
rnd12 = Math.floor(Math.random() * nm12.length);
|
|
}
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm12[rnd12] : "";
|
|
}
|
|
if (type === 1) {
|
|
let rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 3) {
|
|
while (rnd < 4) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
names = nm5[rnd] + nm6[rnd2] + nm8[rnd5] + " " + nameLast;
|
|
} else if (i < 6) {
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5] + " " + nameLast;
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 3) {
|
|
while (rnd < 5) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
while (rnd5 < 3) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5] + " " + nameLast;
|
|
} else if (i < 7) {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5] + " " + nameLast;
|
|
}
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
function generateHalfOrc(type, genLastName) {
|
|
const nm1 = ["", "", "", "b", "br", "c", "cr", "d", "dr", "g", "gr", "h", "hr", "k", "m", "n", "p", "t", "th", "ts", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "a", "o", "o", "aa", "au", "oa", "ia", "ai", "uu"];
|
|
const nm3 = ["br", "b", "d", "dh", "dr", "dz", "g", "gr", "gd", "gh", "k", "kh", "kt", "kd", "kr", "lgr", "ltr", "ldr", "lr", "lkr", "nd", "ng", "ngr", "ndr", "nv", "r", "rv", "rg", "rdr", "st", "sd", "str", "tr", "v", "zr", "zz", "zv", "zvr"];
|
|
const nm4 = ["", "", "", "ch", "d", "g", "k", "l", "lm", "n", "r", "rg", "rm", "rv", "s", "sk", "t", "x", "zhg"];
|
|
const nm5 = ["", "", "", "", "", "b", "br", "c", "d", "dr", "g", "h", "k", "m", "n", "r", "rz", "s", "sh", "str", "t", "v", "w", "z"];
|
|
const nm6 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "a", "o", "o", "ay", "ou", "ai", "uo"];
|
|
const nm7 = ["b", "br", "bl", "c", "cl", "cr", "d", "dl", "dr", "g", "gh", "gr", "gl", "hg", "hk", "hr", "jk", "l", "ljk", "ll", "ln", "lr", "lt", "m", "mr", "mg", "ml", "n", "ng", "nl", "nc", "r", "rg", "rl", "rd", "s", "sl", "sr", "t", "tt", "tr", "v", "vr", "z", "zr"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "h", "n", "sh", "th", "x"];
|
|
const nm9 = ["", "", "", "", "", "b", "c", "d", "g", "gn", "h", "j", "k", "m", "n", "r", "s", "sh", "t", "th", "v", "w", "z"];
|
|
const nm10 = ["a", "e", "i", "o", "u"];
|
|
const nm11 = ["b", "br", "d", "dr", "dk", "g", "gr", "gh", "gl", "k", "kr", "l", "lk", "lgr", "ln", "lr", "lr", "m", "mk", "n", "nr", "nk", "nd", "ndr", "ng", "rg", "rv", "rk", "r", "rr", "rsh", "shk", "st", "sk", "sr", "sv", "svr", "tsk", "tk", "tr", "v", "xl", "xn", "z", "zr", "zk"];
|
|
const nm12 = ["", "", "", "", "", "ch", "d", "k", "ld", "lm", "m", "n", "r", "shky", "tsky", "v", "x", "z"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
let nameLast;
|
|
let rnd10 = Math.floor(Math.random() * nm9.length);
|
|
const rnd11 = Math.floor(Math.random() * nm10.length);
|
|
let rnd12 = Math.floor(Math.random() * nm12.length);
|
|
if (i % 3 === 0 && i % 2 != 0) {
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
const rnd15 = Math.floor(Math.random() * nm11.length);
|
|
const rnd16 = Math.floor(Math.random() * nm10.length);
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm11[rnd15] + nm10[rnd16] + nm12[rnd12] : "";
|
|
} else if (i % 2 === 0) {
|
|
while (rnd10 < 5) {
|
|
rnd10 = Math.floor(Math.random() * nm9.length);
|
|
}
|
|
while (rnd12 < 5) {
|
|
rnd12 = Math.floor(Math.random() * nm12.length);
|
|
}
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm12[rnd12] : "";
|
|
} else {
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
nameLast = genLastName ? nm9[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm12[rnd12] : "";
|
|
}
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 8) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5] + " " + nameLast;
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 5) {
|
|
while (rnd < 3) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
while (rnd5 < 3) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5] + " " + nameLast;
|
|
} else if (i < 9) {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5] + " " + nameLast;
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5] + " " + nameLast;
|
|
}
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
function generateHobgoblin(type, genLastName) {
|
|
const nm1 = ["", "", "", "b", "d", "dr", "f", "g", "gr", "h", "k", "kr", "m", "n", "p", "pr", "r", "s", "t", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u"];
|
|
const nm3 = ["d", "dr", "gl", "gr", "gt", "gh", "kr", "kt", "kh", "kl", "l", "lgr", "lt", "ld", "ldr", "lg", "lb", "lbr", "ll", "r", "rg", "rd", "rt", "rdr", "rgr", "rk", "rl", "th", "tt", "tr", "thr", "vl", "vr", "vt"];
|
|
const nm4 = ["", "d", "g", "k", "m", "n", "ng", "r", "t"];
|
|
const nm5 = ["", "", "", "", "b", "c", "d", "f", "h", "k", "m", "n", "ph", "r", "s", "t", "v", "w", "z"];
|
|
const nm7 = ["cl", "cn", "cm", "cd", "f", "ff", "fn", "fm", "fl", "kl", "kr", "kn", "km", "kd", "kt", "ks", "l", "lz", "ln", "lm", "ld", "lg", "m", "mz", "ms", "mr", "md", "mg", "mk", "n", "ns", "nd", "nr", "ng", "ns", "nk", "r", "rm", "rg", "rn", "rd", "rk", "s", "sm", "st", "ss", "sz", "sm", "sn", "sd", "sg", "th", "tr", "tn", "tz", "ts", "yd", "yn", "yg", "yk", "yr", "yz"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "f", "h", "l", "m", "n", "s", "t"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 8) {
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm7[rnd6] + nm2[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (rnd < 3) {
|
|
while (rnd5 === 0) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(titleLastNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateIfrits(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "b", "d", "g", "j", "k", "m", "n", "r", "t", "v", "z"];
|
|
const nm2 = ["a", "e", "i", "u"];
|
|
const nm3 = ["c", "f", "g", "j", "k", "l", "m", "n", "q", "r", "v"];
|
|
const nm4 = ["", "", "", "d", "g", "h", "j", "l", "m", "n", "q", "t"];
|
|
const nm5 = ["", "", "", "c", "f", "g", "h", "l", "m", "n", "q", "s", "w", "z"];
|
|
const nm7 = ["d", "dw", "dr", "h", "l", "lr", "ly", "m", "ml", "mr", "n", "nr", "nl", "q", "qh", "qr", "r", "rh", "ry", "rl", "t", "ty", "th", "tw", "tr", "w", "y"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "h", "n", "s"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 8) {
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm7[rnd6] + nm2[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(familyNameList)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateKobalds(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "br", "cr", "dr", "d", "dh", "g", "gh", "gr", "j", "k", "m", "n", "q", "qr", "r", "rh", "v", "vr", "vh", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "i", "o", "a", "i", "o", "aa", "ea", "oo", "ee"];
|
|
const nm3 = ["d", "dd", "dr", "dz", "dh", "gn", "gm", "gr", "gz", "gh", "k", "kk", "kn", "kz", "km", "kr", "l", "lz", "ll", "lr", "ld", "ln", "m", "mk", "mz", "n", "nz", "nr", "pm", "pz", "pr", "r", "rl", "rn", "rm", "rg", "rk", "rd", "rz", "rr", "t", "tr", "tz", "x", "zh", "z", "zz", "zr", "zk"];
|
|
const nm4 = ["", "", "", "", "", "b", "d", "g", "k", "l", "ld", "lk", "lp", "n", "nk", "p", "rk", "s", "sk", "x"];
|
|
const nm5 = ["", "", "", "", "d", "f", "g", "h", "l", "m", "n", "p", "r", "s", "t", "v", "z"];
|
|
const nm7 = ["d", "dk", "dr", "gr", "gl", "g", "h", "hr", "k", "kr", "kkr", "ks", "l", "lr", "lk", "ls", "r", "rk", "rs", "rg", "rl", "s", "ss", "sr", "sk", "sg", "sgr", "skr", "ssr", "tr", "th", "thr", "z", "zr", "zk", "zn", "zl"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "h", "k", "l", "n", "m", "r", "s"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 8) {
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm5[rnd] + nm2[rnd2] + nm7[rnd3] + nm2[rnd4] + nm7[rnd6] + nm2[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 3) {
|
|
while (rnd < 5) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
while (rnd5 < 5) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5];
|
|
} else if (i < 7) {
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5];
|
|
}
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(titleLastNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateOreads(type, genLastName) {
|
|
const nm1 = ["", "", "", "b", "d", "g", "j", "l", "m", "n", "p", "r", "s", "t", "v"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "o", "u", "y"];
|
|
const nm3 = ["d", "dd", "f", "fd", "ft", "hd", "hn", "hv", "l", "ll", "ln", "lm", "ld", "lv", "lt", "lth", "lm", "m", "md", "mt", "mh", "mv", "n", "nd", "nt", "nv", "nh", "nn", "nm", "nh", "nr", "r", "rt", "rh", "rn", "rm", "rl", "rv", "rr", "rd", "th", "tr", "thr", "v", "vh", "vr"];
|
|
const nm4 = ["", "m", "n", "r", "s", "t"];
|
|
const nm5 = ["", "", "", "b", "bh", "d", "dh", "gh", "h", "l", "m", "n", "p", "r", "rh", "s", "sh", "t", "th", "v", "w"];
|
|
const nm6 = ["a", "e", "i", "o", "u", "a", "i", "e"];
|
|
const nm7 = ["c", "ch", "d", "dh", "f", "ff", "fh", "fth", "h", "hn", "hv", "hl", "hs", "l", "lh", "ln", "lm", "ls", "lsh", "m", "mn", "mm", "mh", "my", "n", "nn", "nh", "ny", "ns", "nth", "nf", "r", "ry", "rh", "rs", "rsh", "rth", "s", "sh", "sth", "sht", "sn", "sm", "sy", "sl", "t", "th", "ty", "thy", "y"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
if (i < 5) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 5) {
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5];
|
|
}
|
|
}
|
|
let elvishHumanTitleFamilyNames = familyNameList.concat(elfFamilyNames);
|
|
elvishHumanTitleFamilyNames = elvishHumanTitleFamilyNames.concat(titleLastNames);
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(elvishHumanTitleFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateRatfolk(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "", "", "b", "br", "c", "cr", "ch", "d", "dr", "dj", "g", "gr", "gn", "gl", "j", "k", "kr", "kv", "kn", "m", "n", "p", "pr", "r", "s", "st", "sr", "skr", "sc", "scr", "sk", "t", "tr", "v", "vr", "z", "zr"];
|
|
const nm2 = ["a", "e", "i", "o", "a", "e", "i"];
|
|
const nm3 = ["cc", "cd", "cr", "gg", "gr", "gk", "gv", "gd", "kk", "kr", "kv", "kz", "m", "mm", "md", "mk", "mv", "mz", "n", "nn", "nd", "nv", "nk", "ng", "nz", "rr", "r", "rk", "rv", "rz", "rc", "rg", "rd", "vv", "v", "vd", "vk", "vz"];
|
|
const nm4 = ["c", "g", "c", "g", "hl", "hz", "hk", "hn", "hc", "k", "m", "n", "q", "r", "s", "t", "z", "k", "m", "n", "q", "r", "s", "t", "z"];
|
|
const nm5 = ["b", "bh", "c", "ch", "dh", "f", "fr", "fh", "gh", "j", "k", "m", "n", "nh", "p", "r", "s", "sh", "t", "th", "v", "vh", "z", "zh"];
|
|
const nm6 = ["a", "e", "i", "o", "u", "e", "e", "e", "i", "i", "i"];
|
|
const nm7 = ["b", "bb", "c", "cc", "f", "ff", "g", "gg", "j", "k", "kk", "l", "ll", "m", "mm", "n", "nn", "p", "pp", "r", "rr", "s", "ss", "t", "tt", "z", "zz"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "ch", "f", "hm", "hl", "ks", "l", "m", "n", "r", "s", "sh", "t", "th", "tch", "x"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
let rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 5) {
|
|
while (rnd5 < 8) {
|
|
rnd5 = Math.floor(Math.random() * nm8.length);
|
|
}
|
|
names = nm5[rnd] + nm6[rnd2] + nm8[rnd5];
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 5) {
|
|
while (rnd < 7) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5];
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
}
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(ratfolkFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateSylphs(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "c", "d", "f", "g", "h", "j", "l", "m", "n", "s", "v", "w", "z"];
|
|
const nm2 = ["a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "aa", "uu", "ii"];
|
|
const nm3 = ["d", "f", "g", "j", "k", "l", "m", "n", "s", "v", "w", "z"];
|
|
const nm4 = ["d", "l", "m", "n", "sh"];
|
|
const nm5 = ["", "", "", "", "", "d", "f", "h", "k", "l", "m", "n", "r", "s", "t", "v", "w", "z"];
|
|
const nm6 = ["a", "e", "i", "a", "e", "i", "a", "e", "i", "a", "e", "i", "a", "e", "i", "a", "a", "a", "ee", "aa"];
|
|
const nm7 = ["d", "f", "ff", "h", "l", "ll", "m", "mm", "n", "nn", "s", "ss", "v", "y", "w"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "h", "m", "n", "sh"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
if (i < 5) {
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7];
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
}
|
|
let elvishHumanTitleFamilyNames = familyNameList.concat(elfFamilyNames);
|
|
elvishHumanTitleFamilyNames = elvishHumanTitleFamilyNames.concat(titleLastNames);
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(elvishHumanTitleFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateTengu(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "b", "ch", "gr", "j", "k", "kr", "p", "pr", "q", "qr", "r", "s", "t", "tr", "tch", "x", "v", "z"];
|
|
const nm2 = ["a", "e", "o", "u", "a", "e", "o", "u", "a", "e", "o", "u", "a", "e", "o", "u", "i", "i", "a", "e", "o", "u", "au", "ai", "oi", "ou"];
|
|
const nm3 = ["ch", "j", "k", "kk", "l", "ll", "m", "n", "nn", "p", "pp", "q", "r", "rr", "s", "t", "v", "y", "x", "z", "zz"];
|
|
const nm4 = ["", "", "", "", "", "", "", "", "", "", "ck", "gh", "k", "l", "n", "r"];
|
|
const nm5 = ["", "", "", "", "", "ch", "d", "g", "gh", "k", "kh", "m", "n", "p", "q", "r", "s", "sh", "t", "th", "v", "z", "zh"];
|
|
const nm6 = ["a", "e", "o", "u", "a", "e", "o", "u", "a", "e", "o", "u", "a", "e", "o", "u", "i", "i", "a", "e", "o", "u", "ai", "io", "ee", "ae"];
|
|
const nm7 = ["b", "ch", "g", "j", "k", "ky", "lk", "l", "ll", "ly", "m", "mk", "nk", "ny", "p", "py", "r", "rr", "rk", "s", "t", "ty", "tch", "v", "vy", "z", "zz"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "k", "l", "n", "r"];
|
|
const nm9 = ["", "", "", "", "", "b", "ch", "d", "g", "j", "k", "kr", "m", "n", "p", "pr", "q", "r", "s", "t", "tch", "v", "z"];
|
|
const nm10 = ["a", "e", "i", "o", "u", "a", "o", "e", "a", "o", "e", "u"];
|
|
const nm11 = ["ch", "g", "j", "k", "kk", "ky", "l", "ll", "m", "n", "ng", "nk", "p", "pp", "q", "r", "rr", "s", "t", "tch", "v", "y", "z", "zz"];
|
|
const nm12 = ["", "", "ck", "k", "l", "n", "r", "t"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let lastName = "";
|
|
let names;
|
|
const rnd8 = Math.floor(Math.random() * nm9.length);
|
|
const rnd9 = Math.floor(Math.random() * nm10.length);
|
|
const rnd10 = Math.floor(Math.random() * nm11.length);
|
|
const rnd11 = Math.floor(Math.random() * nm10.length);
|
|
const rnd12 = Math.floor(Math.random() * nm12.length);
|
|
lastName = genLastName ? nm9[rnd8] + nm10[rnd9] + nm11[rnd10] + nm10[rnd11] + nm12[rnd12] : "";
|
|
if (type === 1) {
|
|
let rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
let rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 3) {
|
|
while (rnd < 5) {
|
|
rnd = Math.floor(Math.random() * nm5.length);
|
|
}
|
|
while (rnd5 < 10) {
|
|
rnd5 = Math.floor(Math.random() * nm8.length);
|
|
}
|
|
names = nm5[rnd] + nm6[rnd2] + nm8[rnd5] + " " + lastName;
|
|
} else if (i < 7) {
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5] + " " + lastName;
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5] + " " + lastName;
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
let rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 3) {
|
|
while (rnd < 5) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
while (rnd5 < 10) {
|
|
rnd5 = Math.floor(Math.random() * nm4.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5] + " " + lastName;
|
|
} else if (i < 7) {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5] + " " + lastName;
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5] + " " + lastName;
|
|
}
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
function generateTians(type, genLastName) {
|
|
const nm1 = ["", "", "", "b", "c", "ch", "d", "g", "h", "kh", "l", "m", "ng", "nh", "ph", "q", "s", "th", "t", "tr", "v", "x"];
|
|
const nm2 = ["a", "ai", "ao", "i", "ia", "ie", "ieu", "o", "oa", "oai", "u", "ua", "ue", "ui", "uo", "uu"];
|
|
const nm3 = ["", "c", "n", "ng", "nh", "t", "y"];
|
|
const nm4 = ["", "", "", "b", "c", "ch", "d", "g", "h", "hy", "k", "kh", "l", "m", "n", "ng", "nh", "ph", "q", "s", "t", "th", "tr", "v", "x", "y"];
|
|
const nm5 = ["a", "ai", "ao", "au", "e", "h", "i", "ia", "ie", "ieu", "iu", "o", "oa", "u", "ua", "ue", "uo"];
|
|
const nm6 = ["", "", "", "c", "ch", "m", "n", "ng", "nh", "p", "t", "y"];
|
|
const nm7 = ["b", "c", "ch", "d", "g", "h", "k", "kh", "l", "m", "ng", "nh", "nz", "ph", "q", "s", "t", "th", "tr", "v"];
|
|
const nm8 = ["a", "ai", "ao", "au", "i", "ia", "ie", "ieu", "o", "oa", "oi", "oo", "ou", "u", "ua", "ue", "ui", "uo", "uu", "uy", "uye"];
|
|
const nm9 = ["", "", "c", "ch", "m", "n", "ng", "nh", "p", "y"];
|
|
const nm10 = ["b", "ch", "chh", "d", "h", "kh", "k", "kr", "l", "m", "n", "ph", "p", "pr", "r", "s", "sr", "th", "v"];
|
|
const nm11 = ["oeu", "ou", "ea", "ei", "ia", "ao", "au", "ai", "uo", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm12 = ["b", "ch", "d", "h", "k", "kb", "kd", "kh", "kng", "kr", "ks", "ksm", "ktr", "l", "m", "mb", "ml", "mn", "mph", "mr", "n", "nch", "ngh", "ngs", "nkr", "nl", "nm", "nn", "nr", "ns", "nth", "ntr", "nv", "ny", "p", "ph", "r", "rk", "ry", "s", "sm", "sn", "t", "td", "th", "tt", "v", "y"];
|
|
const nm13 = ["k", "l", "m", "n", "ng", "nn", "p", "r", "s", "th", "y"];
|
|
const nm14 = ["b", "ch", "d", "j", "k", "kr", "l", "m", "n", "ph", "p", "r", "s", "sr", "t", "th", "v"];
|
|
const nm15 = ["b", "ch", "d", "k", "kd", "kh", "kkl", "kr", "kry", "ksm", "l", "ll", "lth", "m", "mb", "md", "mj", "mp", "mph", "mr", "n", "nch", "nd", "ngs", "nkr", "nl", "nm", "nn", "nnl", "nt", "nth", "ntr", "nv", "ny", "p", "ph", "r", "rk", "rph", "rsd", "rt", "rv", "ry", "s", "sm", "sn", "sn", "t", "td", "th", "tr", "tt", "v", "vy", "w", "y", "yh", "ym", "yn", "yp"];
|
|
const nm16 = ["ch", "k", "kry", "l", "lly", "ly", "m", "mphy", "n", "ng", "nn", "nny", "ny", "ry", "s", "ss", "th", "vy", "y"];
|
|
const nm17 = ["b", "ch", "chh", "d", "h", "j", "k", "kh", "khl", "l", "m", "nh", "n", "p", "ph", "r", "s", "t", "th", "v", "y"];
|
|
const nm18 = ["a", "aa", "ae", "ao", "e", "ea", "eo", "i", "ia", "ie", "o", "oe", "ou", "u", "uo"];
|
|
const nm19 = ["ch", "k", "l", "m", "n", "ng", "r", "rn", "s", "t", "th", "v", "y"];
|
|
const nm20 = ["b", "by", "ch", "d", "g", "h", "hy", "j", "k", "kw", "ky", "m", "my", "n", "p", "py", "s", "sh", "t", "w", "y"];
|
|
const nm21 = ["a", "ae", "am", "an", "ang", "e", "ee", "ejun", "eo", "eon", "eong", "eung", "i", "ihu", "ihun", "in", "injae", "injun", "o", "ochun", "ohyon", "on", "ong", "onghyon", "ongmin", "onjun", "onu", "oo", "oon", "oung", "u", "uck", "uk", "ul", "un", "ung", "unghyon", "unho", "unso", "unyong", "uwon"];
|
|
const nm22 = ["bok", "bong", "cheol", "chol", "chuk", "chul", "dae", "eun", "gi", "gu", "gun", "gyu", "hae", "han", "hee", "heon", "ho", "hoo", "hoon", "hu", "hui", "hun", "hwa", "hwan", "hyeon", "hyok", "hyon", "hyuk", "hyun", "il", "ja", "jae", "jin", "jo", "joon", "jun", "jung", "ki", "kyu", "kyung", "min", "mo", "mun", "nam", "sam", "sang", "seo", "seok", "seon", "seong", "shik", "sik", "song", "soo", "sook", "su", "sun", "sung", "tae", "u", "won", "woo", "wook", "woong", "yeol", "yeon", "yeong", "yol", "yong", "yoon", "young", "yul"];
|
|
const nm23 = ["b", "ch", "d", "g", "gr", "h", "hy", "j", "k", "ky", "l", "m", "my", "n", "r", "ry", "s", "sh", "t", "w", "y"];
|
|
const nm24 = ["a", "ae", "am", "an", "ang", "ara", "e", "ee", "eh", "eo", "eon", "eong", "eul", "eum", "eun", "eung", "i", "ihye", "ihyon", "im", "imin", "in", "inji", "inso", "it", "iyeon", "iyong", "iyun", "o", "ohyon", "on", "ong", "oo", "ook", "oon", "oung", "oyon", "oyun", "u", "ubin", "uk", "un", "ung", "unji", "unso"];
|
|
const nm25 = ["ae", "ah", "ahn", "bi", "bin", "bon", "byul", "chae", "dong", "eum", "eun", "gyo", "gyong", "gyung", "ha", "hae", "hee", "ho", "hui", "hwa", "hyang", "hye", "hyo", "hyun", "hyung", "in", "ja", "jeong", "ji", "jin", "jong", "joo", "joong", "ju", "jung", "kyeong", "kyung", "min", "na", "neul", "ok", "ra", "rae", "rang", "ri", "rim", "rin", "ryung", "seo", "seon", "shil", "so", "song", "soo", "sook", "soon", "su", "suk", "sun", "u", "un", "won", "woo", "woon", "yeon", "yon", "yong", "yoon", "young", "yun", "yung"];
|
|
const nm26 = ["Ae", "Ah", "An", "Ch'a", "Ch'ae", "Ch'ang", "Ch'o", "Ch'oe", "Ch'on", "Ch'u", "Cha", "Chang", "Changgok", "Che", "Chegal", "Chi", "Chin", "Cho", "Chom", "Chon", "Chong", "Chu", "Chun", "Chung", "Chup", "Chwa", "Eoh", "Ha", "Hae", "Hak", "Ham", "Han", "Ho", "Hong", "Hu", "Hung", "Hwa", "Hwan", "Hwang", "Hwangbo", "Hyon", "Hyong", "Im", "In", "Ka", "Kae", "Kal", "Kam", "Kan", "Kang", "Kangjon", "Ki", "Kil", "Kim", "Ko", "Kok", "Kong", "Ku", "Kuk", "Kum", "Kun", "Kung", "Kwak", "Kwok", "Kwon", "Kye", "Kyo", "Kyon", "Kyong", "Ma", "Mae", "Maeng", "Man", "Mangjol", "Mi", "Min", "Mo", "Mok", "Muk", "Mun", "Myo", "Myong", "Na", "Nae", "Nam", "Namgung", "Nan", "Nang", "No", "Noe", "Nu", "Ogum", "Oh", "Ok", "Om", "On", "Ong", "P'aeng", "P'an", "P'i", "P'il", "P'o", "P'ung", "P'yo", "P'yon", "P'yong", "Pae", "Paek", "Pak", "Pan", "Pang", "Pi", "Pin", "Ping", "Pok", "Pom", "Pong", "Pu", "Pyon", "Ra", "Ran", "Rang", "Ri", "Rim", "Ro", "Roe", "Ru", "Ryang", "Ryo", "Ryom", "Ryon", "Ryong", "Ryu", "Ryuk", "Sa", "Sagong", "Sam", "Sang", "Si", "Sim", "Sin", "Sip", "So", "Sobong", "Sok", "Sol", "Somun", "Son", "Song", "Sonu", "Sop", "Su", "Sun", "Sung", "T'ae", "T'ak", "T'an", "Tae", "Tam", "Tan", "Tang", "To", "Tokko", "Ton", "Tong", "Tongbang", "Tu", "Uh", "Um", "Un", "Wang", "Wi", "Won", "Wu", "Ya", "Yang", "Ye", "Yi", "Yo", "Yom", "Yon", "Yong", "Yop", "Yu", "Yuk", "Yun"];
|
|
const nm27 = ["", "", "", "b", "c", "ch", "d", "dh", "g", "gh", "h", "j", "k", "kh", "l", "m", "n", "q", "s", "sh", "t", "th", "ts", "x", "y", "z", "zh"];
|
|
const nm28 = ["aie", "aa", "ei", "aiu", "ua", "uu", "eio", "oi", "ai", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm29 = ["b", "cch", "ch", "d", "dk", "dy", "g", "gh", "ght", "gm", "gs", "j", "k", "kh", "khg", "khj", "kt", "l", "lb", "lch", "ld", "lg", "lgh", "lj", "lt", "lz", "m", "mb", "ml", "n", "nb", "ndj", "ng", "ngg", "ngs", "nksh", "nt", "nz", "q", "r", "rch", "rd", "rg", "rgh", "rk", "rkh", "rt", "s", "sg", "sh", "sl", "t", "tb", "tg", "tl", "ts", "y", "z", "zb", "zh"];
|
|
const nm30 = ["", "", "", "d", "g", "gh", "gt", "l", "ld", "m", "n", "nt", "r", "t", "y"];
|
|
const nm31 = ["", "", "", "b", "ch", "c", "d", "dh", "g", "gh", "h", "j", "k", "kh", "l", "m", "n", "s", "sh", "t", "th", "ts", "y", "z", "zh"];
|
|
const nm32 = ["aa", "ui", "ei", "oa", "ui", "ai", "uu", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm33 = ["b", "ch", "d", "dts", "dv", "g", "gch", "gh", "gm", "gtb", "j", "k", "kh", "khg", "khts", "l", "lj", "lm", "lt", "m", "mb", "n", "nb", "nch", "ng", "nkhh", "nkht", "nkhts", "nts", "nts", "nz", "q", "r", "rb", "rd", "rdz", "rg", "rgh", "rm", "rt", "rz", "s", "t", "ts", "tts", "y", "z"];
|
|
const nm34 = ["", "", "", "d", "g", "gh", "l", "m", "n", "r", "sh"];
|
|
const nm35 = ["a", "ba", "bai", "be", "bo", "bu", "chi", "da", "dai", "ei", "fu", "ga", "ge", "gi", "go", "ha", "hei", "hi", "ho", "hyo", "i", "ie", "jo", "ju", "ka", "ke", "kei", "ki", "ko", "ku", "kyu", "ma", "mi", "mo", "mu", "na", "nao", "ni", "no", "o", "ri", "ro", "ryo", "ryu", "sa", "se", "sei", "shi", "sho", "shu", "so", "su", "ta", "te", "tei", "to", "tsu", "u", "wa", "ya", "yo", "yu"];
|
|
const nm36 = ["bumi", "buro", "buru", "chemon", "chi", "chiro", "chiyo", "chizo", "dayu", "deki", "do", "fu", "fumi", "gobei", "goro", "hari", "haru", "hide", "hiko", "hira", "hiro", "hisa", "hito", "ji", "jio", "jiro", "juro", "kado", "kan", "kao", "karu", "kazu", "kei", "ki", "kichi", "kin", "kio", "kira", "ko", "koto", "kuchu", "kudo", "kumi", "kuni", "kusai", "kushi", "kusho", "kuzo", "mane", "maro", "masu", "matsu", "mei", "miaki", "michi", "mio", "mitsu", "mon", "mori", "moru", "moto", "mune", "nabu", "naga", "nari", "nji", "njiro", "nkei", "nko", "nobu", "nori", "noru", "noto", "noye", "npaku", "nshiro", "ntaro", "nzo", "rata", "rei", "ro", "roji", "roshi", "ru", "sada", "sake", "saku", "sami", "samu", "sashi", "sato", "seki", "setsu", "shashi", "shi", "shige", "shiko", "shiro", "sho", "shushu", "soshi", "su", "suke", "suki", "ta", "tada", "taka", "tane", "tari", "taro", "taru", "toki", "toku", "tomo", "tora", "toshi", "tsu", "tsugu", "tsumi", "tsuna", "tsune", "tsuta", "tsuyo", "tzumi", "wane", "yaki", "yasu", "yori", "yoshi", "yuki", "zane", "zo", "zuka", "zuki", "zuko", "zuma", "zumi", "zumo", "zushi"];
|
|
const nm37 = ["a", "ai", "ba", "be", "chi", "e", "ei", "fu", "ge", "ha", "hai", "hi", "ho", "i", "jo", "ka", "kae", "ki", "ko", "ku", "ma", "mae", "me", "mi", "mo", "mu", "na", "nao", "ni", "no", "o", "rai", "rei", "ri", "ro", "ru", "sa", "sai", "se", "shi", "su", "ta", "te", "to", "tsu", "u", "wa", "ya", "yae", "yo", "yu"];
|
|
const nm38 = ["bari", "chi", "chiha", "chiho", "chiko", "cho", "deko", "doka", "fumi", "fuyu", "gino", "gusa", "haru", "hiro", "ho", "hoko", "homi", "hori", "jiko", "ka", "kage", "kako", "kami", "kane", "kari", "karu", "kaze", "ki", "kichi", "kiko", "kina", "kio", "kira", "ko", "koto", "kuko", "kuma", "kuro", "kyo", "maki", "mako", "mari", "maya", "meka", "meko", "mi", "miho", "mika", "miki", "miko", "mina", "miri", "miya", "mugi", "na", "nae", "nai", "nako", "nami", "natsu", "neka", "neko", "niko", "no", "noka", "nomi", "noue", "nu", "nuko", "nuye", "nuyo", "ra", "rako", "rante", "rari", "rea", "ri", "rika", "riko", "rime", "rimi", "rino", "risa", "risu", "rize", "ro", "roe", "roko", "romi", "roshi", "ru", "rui", "ruka", "ruko", "rumi", "sa", "sae", "sahi", "saji", "saki", "sako", "sami", "samu", "sano", "sato", "se", "shi", "shiko", "shiyo", "soko", "sono", "suka", "suki", "sumi", "suzu", "taba", "tako", "taru", "to", "tomi", "tomo", "tose", "toshi", "tsu", "tsue", "tsuka", "tsuko", "tsumi", "tsune", "tsuyo", "yaka", "yako", "yame", "yano", "yeko", "yo", "yu", "yuka", "yuki", "yuko", "yume", "yumi", "yuri", "zami", "zu", "zue", "zuki", "zuko", "zumi", "zuru", "zusa"];
|
|
const nm39 = ["a", "aka", "ama", "ao", "ara", "asa", "ashi", "azu", "chi", "e", "fu", "fuji", "fuku", "furu", "go", "ha", "hagi", "hama", "hara", "hata", "haya", "hi", "hira", "hiro", "ho", "i", "ichi", "iga", "ike", "ima", "ina", "ise", "ishi", "iwa", "ka", "kaga", "kane", "kawa", "ki", "kishi", "kita", "ko", "koya", "ku", "kura", "kuri", "kuro", "kusu", "ma", "mae", "masu", "matsu", "mi", "mika", "miya", "mo", "mori", "mu", "mura", "na", "naga", "naka", "ni", "nishi", "no", "nomu", "nona", "o", "oga", "oka", "oku", "osa", "sa", "saka", "saku", "sawa", "saza", "se", "shi", "shiba", "shima", "shimi", "shimo", "shino", "so", "su", "suga", "sugi", "sumi", "ta", "taba", "tachi", "taga", "taha", "taka", "tama", "tana", "tani", "te", "tera", "to", "toku", "tsu", "u", "ue", "uye", "wa", "waka", "wata", "ya", "yama", "yoko", "yoshi"];
|
|
const nm40 = ["ba", "bara", "bashi", "bata", "be", "bota", "chi", "chida", "da", "dama", "gai", "gamine", "gano", "gashi", "gata", "gawa", "gi", "guchi", "hara", "hira", "hita", "jima", "jino", "kada", "kaga", "kai", "kaki", "kama", "kami", "kawa", "ki", "kino", "kuchi", "kuda", "kui", "ma", "mada", "magai", "mano", "mari", "matsu", "maya", "mei", "mine", "miya", "mori", "moto", "mura", "naga", "nagi", "nai", "naka", "name", "nda", "ndo", "neko", "nishi", "nno", "no", "ra", "rada", "rai", "rano", "rashi", "rata", "raya", "ri", "rine", "rino", "rita", "roda", "rose", "rota", "ruta", "ruya", "sai", "saki", "sano", "sato", "sawa", "se", "shi", "shida", "shigawa", "shige", "shima", "shino", "shiro", "shita", "suda", "ta", "tani", "to", "tori", "tsuda", "tsuno", "wa", "wano", "wara", "wata", "ya", "yabu", "yake", "yama", "yashi", "yata", "yeda", "yoshi", "zaki", "zuki", "zuma", "zumi"];
|
|
const nm41 = ["b", "ch", "d", "f", "g", "h", "j", "k", "l", "m", "p", "q", "r", "sh", "s", "t", "ts", "w", "x", "y", "z", "zh"];
|
|
const nm42 = ["ai", "uo", "ao", "eu", "ia", "ua", "uo", "ei", "ui", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm43 = ["ch", "d", "g", "h", "j", "k", "l", "m", "n", "nch", "nf", "ng", "ngb", "ngf", "ngg", "ngh", "ngk", "ngl", "ngm", "ngp", "ngq", "ngsh", "ngw", "ngx", "ngzh", "nh", "nj", "nl", "nm", "nsh", "ny", "nz", "q", "r", "sh", "t", "w", "x", "y", "z", "zh"];
|
|
const nm44 = ["", "", "", "n", "ng"];
|
|
const nm45 = ["b", "ch", "c", "d", "f", "g", "h", "j", "k", "kw", "l", "m", "n", "p", "q", "r", "sh", "s", "t", "w", "x", "y", "zh", "z"];
|
|
const nm46 = ["ao", "ua", "ai", "ui", "ia", "ei", "ue", "iu", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm47 = ["b", "c", "ch", "d", "f", "h", "hw", "j", "k", "l", "m", "n", "nd", "nf", "ng", "ngch", "ngg", "ngh", "ngj", "ngl", "ngm", "ngt", "ngx", "ngy", "ngzh", "nh", "nl", "nm", "nq", "nr", "nt", "nx", "ny", "nzh", "q", "r", "sh", "t", "w", "x", "y", "zh"];
|
|
const nm48 = ["b", "c", "ch", "d", "f", "g", "h", "hs", "hw", "j", "k", "kh", "kw", "l", "m", "n", "p", "q", "r", "s", "sh", "sz", "t", "ts", "w", "x", "y", "zh", "z"];
|
|
const nm49 = ["ai", "ao", "au", "ee", "ea", "eo", "eu", "ia", "iao", "ie", "io", "ua", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm50 = ["b", "c", "d", "dj", "dw", "g", "h", "j", "kr", "k", "p", "r", "s", "sl", "t", "tr", "w", "y"];
|
|
const nm51 = ["ua", "ia", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm52 = ["b", "d", "dd", "dw", "g", "h", "hy", "j", "k", "l", "m", "mb", "md", "n", "nd", "ndr", "ngk", "nn", "nt", "o", "r", "rj", "rm", "rn", "rt", "rw", "ry", "s", "sk", "sn", "t", "tr", "v", "w", "y"];
|
|
const nm53 = ["", "", "", "h", "n", "ng", "r", "s", "t"];
|
|
const nm54 = ["b", "c", "d", "dw", "f", "gl", "h", "k", "l", "m", "n", "p", "r", "s", "sh", "sr", "tr", "v", "w", "y"];
|
|
const nm55 = ["ia", "eo", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u"];
|
|
const nm56 = ["c", "d", "dy", "g", "h", "hy", "k", "l", "m", "nn", "nt", "nd", "ng", "nn", "nt", "r", "rj", "rl", "rm", "rt", "s", "sk", "st", "t", "th", "tn", "tr", "v", "w", "y"];
|
|
const nm57 = ["", "", "", "h", "n", "r"];
|
|
const i = Math.floor(Math.random() * 14);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
if (i < 2) {
|
|
const rnd = Math.floor(Math.random() * nm4.length);
|
|
const rnd2 = Math.floor(Math.random() * nm5.length);
|
|
let rnd3 = Math.floor(Math.random() * nm6.length);
|
|
if (rnd < 3) {
|
|
while (rnd3 < 3) {
|
|
rnd3 = Math.floor(Math.random() * nm6.length);
|
|
}
|
|
}
|
|
const rnd4 = Math.floor(Math.random() * nm7.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
const rnd6 = Math.floor(Math.random() * nm9.length);
|
|
names = nm7[rnd4] + nm8[rnd5] + nm9[rnd6] + " " + nm4[rnd] + nm5[rnd2] + nm6[rnd3];
|
|
} else if (i < 4) {
|
|
const rnd = Math.floor(Math.random() * nm14.length);
|
|
const rnd2 = Math.floor(Math.random() * nm11.length);
|
|
const rnd3 = Math.floor(Math.random() * nm15.length);
|
|
const rnd4 = Math.floor(Math.random() * nm11.length);
|
|
const rnd5 = Math.floor(Math.random() * nm16.length);
|
|
const rnd6 = Math.floor(Math.random() * nm17.length);
|
|
const rnd7 = Math.floor(Math.random() * nm18.length);
|
|
const rnd8 = Math.floor(Math.random() * nm19.length);
|
|
names = nm17[rnd6] + nm18[rnd7] + nm19[rnd8] + " " + nm14[rnd] + nm11[rnd2] + nm15[rnd3] + nm11[rnd4] + nm16[rnd5];
|
|
} else if (i < 6) {
|
|
const rnd = Math.floor(Math.random() * nm23.length);
|
|
const rnd2 = Math.floor(Math.random() * nm24.length);
|
|
const rnd3 = Math.floor(Math.random() * nm25.length);
|
|
const rnd4 = Math.floor(Math.random() * nm26.length);
|
|
names = nm26[rnd4] + " " + nm23[rnd] + nm24[rnd2] + " " + nm25[rnd3];
|
|
} else if (i < 8) {
|
|
const rnd = Math.floor(Math.random() * nm31.length);
|
|
const rnd2 = Math.floor(Math.random() * nm32.length);
|
|
const rnd3 = Math.floor(Math.random() * nm33.length);
|
|
const rnd4 = Math.floor(Math.random() * nm32.length);
|
|
let rnd5 = Math.floor(Math.random() * nm34.length);
|
|
if (rnd < 3) {
|
|
while (rnd5 < 3) {
|
|
rnd5 = Math.floor(Math.random() * nm34.length);
|
|
}
|
|
}
|
|
names = nm31[rnd] + nm32[rnd2] + nm33[rnd3] + nm32[rnd4] + nm34[rnd5];
|
|
} else if (i < 10) {
|
|
const rnd = Math.floor(Math.random() * nm37.length);
|
|
const rnd2 = Math.floor(Math.random() * nm38.length);
|
|
const rnd3 = Math.floor(Math.random() * nm39.length);
|
|
const rnd4 = Math.floor(Math.random() * nm40.length);
|
|
names = nm39[rnd3] + nm40[rnd4] + " " + nm37[rnd] + nm38[rnd2];
|
|
} else if (i < 12) {
|
|
const rnd = Math.floor(Math.random() * nm45.length);
|
|
const rnd2 = Math.floor(Math.random() * nm46.length);
|
|
const rnd3 = Math.floor(Math.random() * nm47.length);
|
|
const rnd4 = Math.floor(Math.random() * nm46.length);
|
|
const rnd5 = Math.floor(Math.random() * nm44.length);
|
|
const rnd6 = Math.floor(Math.random() * nm48.length);
|
|
const rnd7 = Math.floor(Math.random() * nm49.length);
|
|
names = nm48[rnd6] + nm49[rnd7] + " " + nm45[rnd] + nm46[rnd2] + nm47[rnd3] + nm46[rnd4] + nm44[rnd5];
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm54.length);
|
|
const rnd2 = Math.floor(Math.random() * nm55.length);
|
|
const rnd3 = Math.floor(Math.random() * nm56.length);
|
|
const rnd4 = Math.floor(Math.random() * nm55.length);
|
|
const rnd5 = Math.floor(Math.random() * nm57.length);
|
|
names = nm54[rnd] + nm55[rnd2] + nm56[rnd3] + nm55[rnd4] + nm57[rnd5];
|
|
}
|
|
} else {
|
|
if (i < 2) {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
let rnd3 = Math.floor(Math.random() * nm3.length);
|
|
if (rnd < 3) {
|
|
while (rnd3 === 0) {
|
|
rnd3 = Math.floor(Math.random() * nm3.length);
|
|
}
|
|
}
|
|
const rnd4 = Math.floor(Math.random() * nm7.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
const rnd6 = Math.floor(Math.random() * nm9.length);
|
|
names = nm7[rnd4] + nm8[rnd5] + nm9[rnd6] + " " + nm1[rnd] + nm2[rnd2] + nm3[rnd3];
|
|
} else if (i < 4) {
|
|
const rnd = Math.floor(Math.random() * nm10.length);
|
|
const rnd2 = Math.floor(Math.random() * nm11.length);
|
|
const rnd3 = Math.floor(Math.random() * nm12.length);
|
|
const rnd4 = Math.floor(Math.random() * nm11.length);
|
|
const rnd5 = Math.floor(Math.random() * nm13.length);
|
|
const rnd6 = Math.floor(Math.random() * nm17.length);
|
|
const rnd7 = Math.floor(Math.random() * nm18.length);
|
|
const rnd8 = Math.floor(Math.random() * nm19.length);
|
|
names = nm17[rnd6] + nm18[rnd7] + nm19[rnd8] + " " + nm10[rnd] + nm11[rnd2] + nm12[rnd3] + nm11[rnd4] + nm13[rnd5];
|
|
} else if (i < 6) {
|
|
const rnd = Math.floor(Math.random() * nm20.length);
|
|
const rnd2 = Math.floor(Math.random() * nm21.length);
|
|
const rnd3 = Math.floor(Math.random() * nm22.length);
|
|
const rnd4 = Math.floor(Math.random() * nm26.length);
|
|
names = nm26[rnd4] + " " + nm20[rnd] + nm21[rnd2] + " " + nm22[rnd3];
|
|
} else if (i < 8) {
|
|
const rnd = Math.floor(Math.random() * nm27.length);
|
|
const rnd2 = Math.floor(Math.random() * nm28.length);
|
|
const rnd3 = Math.floor(Math.random() * nm29.length);
|
|
const rnd4 = Math.floor(Math.random() * nm28.length);
|
|
let rnd5 = Math.floor(Math.random() * nm30.length);
|
|
if (rnd < 3) {
|
|
while (rnd5 < 3) {
|
|
rnd5 = Math.floor(Math.random() * nm30.length);
|
|
}
|
|
}
|
|
names = nm27[rnd] + nm28[rnd2] + nm29[rnd3] + nm28[rnd4] + nm30[rnd5];
|
|
} else if (i < 10) {
|
|
const rnd = Math.floor(Math.random() * nm35.length);
|
|
const rnd2 = Math.floor(Math.random() * nm36.length);
|
|
const rnd3 = Math.floor(Math.random() * nm39.length);
|
|
const rnd4 = Math.floor(Math.random() * nm40.length);
|
|
names = nm39[rnd3] + nm40[rnd4] + " " + nm35[rnd] + nm36[rnd2];
|
|
} else if (i < 12) {
|
|
const rnd = Math.floor(Math.random() * nm41.length);
|
|
const rnd2 = Math.floor(Math.random() * nm42.length);
|
|
const rnd3 = Math.floor(Math.random() * nm43.length);
|
|
const rnd4 = Math.floor(Math.random() * nm42.length);
|
|
const rnd5 = Math.floor(Math.random() * nm44.length);
|
|
const rnd6 = Math.floor(Math.random() * nm48.length);
|
|
const rnd7 = Math.floor(Math.random() * nm49.length);
|
|
names = nm48[rnd6] + nm49[rnd7] + " " + nm41[rnd] + nm42[rnd2] + nm43[rnd3] + nm42[rnd4] + nm44[rnd5];
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm50.length);
|
|
const rnd2 = Math.floor(Math.random() * nm51.length);
|
|
const rnd3 = Math.floor(Math.random() * nm52.length);
|
|
const rnd4 = Math.floor(Math.random() * nm51.length);
|
|
const rnd5 = Math.floor(Math.random() * nm53.length);
|
|
names = nm50[rnd] + nm51[rnd2] + nm52[rnd3] + nm51[rnd4] + nm53[rnd5];
|
|
}
|
|
}
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(tianFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
function generateTiefling(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "b", "cr", "d", "g", "h", "k", "kr", "m", "r", "s", "sh", "t", "v", "y", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "a", "e", "i", "o", "u", "y", "ia", "io"];
|
|
const nm3 = ["c", "cr", "cn", "d", "dr", "g", "gr", "gg", "k", "kr", "l", "ldr", "lv", "ll", "m", "nst", "nv", "nr", "r", "rn", "rd", "rk", "rrd", "rt", "rv", "s", "sr", "sk", "t", "tr", "v", "c", "d", "g", "k", "l", "m", "n", "r", "s", "t", "v"];
|
|
const nm4 = ["", "", "", "c", "k", "n", "r", "s", "t", "th"];
|
|
const nm5 = ["d", "f", "h", "k", "kh", "l", "m", "n", "r", "s", "sh", "str", "t", "th", "v", "z"];
|
|
const nm6 = ["a", "e", "i", "o", "a", "a", "e", "a", "e", "i", "o", "a", "a", "e", "a", "o", "e", "a", "o", "e", "i", "i", "ei", "ia", "ea", "ai"];
|
|
const nm7 = ["d", "dr", "f", "fr", "ff", "l", "ll", "ld", "ldr", "lr", "ln", "ls", "m", "mr", "mdr", "ms", "nd", "ndr", "nn", "n", "nz", "r", "rdr", "rr", "rs", "rz", "s", "sh", "sz", "sr", "t", "tr", "v", "vr", "y", "zs", "d", "f", "l", "m", "n", "r", "s", "t", "v", "y"];
|
|
const nm8 = ["h", "l", "n", "s", "th"];
|
|
const nm9 = ["", "", "", "", "b", "br", "d", "dr", "f", "g", "h", "l", "m", "n", "p", "r", "s", "sh", "t", "v", "z"];
|
|
const nm10 = ["a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "a", "e", "e", "i", "aa", "ae", "ia", "ea"];
|
|
const nm11 = ["b", "br", "c", "d", "dr", "fr", "g", "gg", "gr", "gv", "k", "l", "ll", "lr", "lv", "ldr", "m", "mm", "mr", "mdr", "n", "nd", "ng", "ndr", "nst", "nv", "nr", "r", "rh", "rv", "rr", "rz", "rd", "rdr", "s", "ss", "sr", "sh", "st", "t", "tr", "v", "vr", "b", "c", "d", "g", "k", "l", "m", "n", "r", "s", "t", "v"];
|
|
const nm12 = ["", "", "", "", "", "", "", "", "", "", "d", "ld", "lt", "m", "n", "nd", "r", "rd", "s", "t", "th"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let lastName = "";
|
|
let names;
|
|
const rnd8 = Math.floor(Math.random() * nm9.length);
|
|
const rnd9 = Math.floor(Math.random() * nm10.length);
|
|
const rnd10 = Math.floor(Math.random() * nm11.length);
|
|
const rnd11 = Math.floor(Math.random() * nm10.length);
|
|
const rnd12 = Math.floor(Math.random() * nm12.length);
|
|
if (i % 2 === 0) {
|
|
lastName = genLastName ? nm9[rnd8] + nm10[rnd9] + nm11[rnd10] + nm10[rnd11] + nm12[rnd12] : "";
|
|
} else {
|
|
const rnd13 = Math.floor(Math.random() * nm11.length);
|
|
const rnd14 = Math.floor(Math.random() * nm10.length);
|
|
lastName = genLastName ? nm9[rnd8] + nm10[rnd9] + nm11[rnd10] + nm10[rnd11] + nm11[rnd13] + nm10[rnd14] + nm12[rnd12] : "";
|
|
}
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 5) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5] + " " + lastName;
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5] + " " + lastName;
|
|
}
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 5) {
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5] + " " + lastName;
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5] + " " + lastName;
|
|
}
|
|
}
|
|
return names;
|
|
}
|
|
}
|
|
function generateUndines(type, genLastName) {
|
|
const nm1 = ["", "", "", "", "", "bh", "d", "dh", "g", "gh", "j", "kh", "m", "n", "r", "rh", "sh", "v", "z"];
|
|
const nm2 = ["a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "a", "e", "i", "o", "aa", "oo"];
|
|
const nm3 = ["b", "bd", "c", "cd", "d", "dd", "db", "g", "gd", "gv", "gn", "gm", "j", "k", "kb", "kd", "kn", "km", "kv", "m", "md", "mm", "mb", "n", "nn", "nb", "nd", "r", "rd", "rg", "rv", "rz", "v", "b", "c", "d", "g", "j", "k", "m", "n", "r", "v"];
|
|
const nm4 = ["d", "hz", "j", "k", "m", "n", "r", "sh", "v"];
|
|
const nm5 = ["", "", "", "b", "c", "d", "f", "h", "l", "m", "n", "p", "r", "s", "w", "z"];
|
|
const nm6 = ["a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "a", "e", "i", "u", "y", "y", "y", "ya", "aa"];
|
|
const nm7 = ["b", "bh", "d", "dz", "dh", "fd", "fn", "ff", "f", "fz", "hn", "hl", "hr", "hm", "h", "hh", "l", "lg", "ld", "lb", "lf", "ln", "m", "mm", "mn", "mr", "mf", "n", "nn", "nr", "nd", "nf", "nh", "r", "rh", "rb", "rv", "rd", "rz", "v", "vr", "b", "d", "f", "h", "l", "n", "m", "r", "v", "b", "d", "f", "h", "l", "n", "m", "r", "v"];
|
|
const nm8 = ["", "", "", "", "", "", "", "", "", "", "h", "n"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
{
|
|
let names;
|
|
if (type === 1) {
|
|
const rnd = Math.floor(Math.random() * nm5.length);
|
|
const rnd2 = Math.floor(Math.random() * nm6.length);
|
|
const rnd3 = Math.floor(Math.random() * nm7.length);
|
|
const rnd4 = Math.floor(Math.random() * nm6.length);
|
|
const rnd5 = Math.floor(Math.random() * nm8.length);
|
|
if (i < 5) {
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm8[rnd5];
|
|
} else {
|
|
const rnd6 = Math.floor(Math.random() * nm7.length);
|
|
const rnd7 = Math.floor(Math.random() * nm6.length);
|
|
names = nm5[rnd] + nm6[rnd2] + nm7[rnd3] + nm6[rnd4] + nm7[rnd6] + nm6[rnd7] + nm8[rnd5];
|
|
}
|
|
} else {
|
|
let rnd = Math.floor(Math.random() * nm1.length);
|
|
const rnd2 = Math.floor(Math.random() * nm2.length);
|
|
const rnd5 = Math.floor(Math.random() * nm4.length);
|
|
if (i < 3) {
|
|
while (rnd < 5) {
|
|
rnd = Math.floor(Math.random() * nm1.length);
|
|
}
|
|
names = nm1[rnd] + nm2[rnd2] + nm4[rnd5];
|
|
} else if (i < 7) {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm4[rnd5];
|
|
} else {
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
const rnd4 = Math.floor(Math.random() * nm2.length);
|
|
const rnd6 = Math.floor(Math.random() * nm3.length);
|
|
const rnd7 = Math.floor(Math.random() * nm2.length);
|
|
names = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm2[rnd4] + nm3[rnd6] + nm2[rnd7] + nm4[rnd5];
|
|
}
|
|
}
|
|
let elvishHumanTitleFamilyNames = familyNameList.concat(elfFamilyNames);
|
|
elvishHumanTitleFamilyNames = elvishHumanTitleFamilyNames.concat(titleLastNames);
|
|
return genLastName ? `${capitalizeFirstLetter3(names)} ${randomItemFromArray3(elvishHumanTitleFamilyNames)}` : capitalizeFirstLetter3(names);
|
|
}
|
|
}
|
|
|
|
// generators/artifact.ts
|
|
function generateMiscellaneousArtifacts() {
|
|
const nm1 = ["Absorbing", "Abundance", "Acrimony", "Affluence", "Agony", "All-Seeing", "Angels", "Annihilation", "Apathy", "Athanasia", "Bane", "Banishment", "Benediction", "Betrayal", "Binding", "Birth", "Black Magic", "Blessings", "Blights", "Blinding", "Chance", "Chaos", "Charming", "Collapse", "Contagion", "Corruption", "Courage", "Curses", "Damnation", "Darkness", "Death", "Decadence", "Decay", "Delirium", "Delusion", "Dementia", "Demons", "Depravity", "Desire", "Destiny", "Destruction", "Dismay", "Divinity", "Doom", "Downfall", "Dread", "Dreams", "Enigmas", "Enthrallment", "Eternal Health", "Eternal Slumber", "Eternity", "Evil", "Evils", "Exiles", "Faith", "Fate", "Fear", "Fertility", "Fire", "Flame", "Fortitude", "Fortuity", "Fortune", "Frost", "Futures", "Genesis", "Gluttony", "Gold", "Grace", "Greed", "Guardians", "Hatred", "Healing", "Hell", "Heroism", "Honesty", "Hunger", "Ice", "Immobilizing", "Immortality", "Immunity", "Imperviousness", "Infinity", "Invincibility", "Invisibility", "Invocation", "Judgment", "Justice", "Karma", "Knowledge", "Liberation", "Life", "Lifeblood", "Light", "Lightness", "Lightning", "Longevity", "Loyalty", "Luck", "Luminosity", "Lunacy", "Lust", "Malady", "Malediction", "Malevolence", "Malice", "Mania", "Massacres", "Mending", "Metamorphosis", "Misery", "Misfortune", "Mysteries", "Nightmares", "Oaths", "Oblivion", "Origins", "Pain", "Paradise", "Paralysis", "Passion", "Peace", "Persecution", "Pestilence", "Petrification", "Potency", "Prosperity", "Protection", "Radiance", "Rain", "Rebirth", "Remedies", "Repelling", "Resistance", "Restoration", "Resurrection", "Revival", "Riches", "Riddles", "Ruination", "Runes", "Sanctification", "Sanctity", "Scorching", "Secrets", "Seduction", "Sentience", "Serendipity", "Service", "Shadows", "Shapeshifting", "Sight", "Silence", "Sleep", "Solitude", "Souls", "Specters", "Speed", "Spellbinding", "Spells", "Spirits", "Spite", "Storms", "Strength", "Summoning", "Teleportation", "Temptation", "Time", "Torment", "Torture", "Toxin", "Transformation", "Transmutation", "Treachery", "Truth", "Valor", "Vengeance", "Venom", "Vice", "Virility", "Warding", "Wealth", "Wisdom", "Wishes", "Worship", "Youth", "the Aether", "the Cosmos", "the Creed", "the Crux", "the Dead", "the Elements", "the Gods", "the Heavens", "the Occult", "the Oracle", "the Scourge", "the Titans", "the Void"];
|
|
const nm2 = ["Absorbing", "Aethereal", "Agony", "Alchemy", "All-Seeing", "Almighty", "Anarchy", "Angel", "Anguish", "Annihilation", "Archangel", "Athanasia", "Aurora", "Azure", "Banishing", "Benediction", "Binding", "Black Magic", "Blazing", "Blight", "Blinding", "Bravery", "Burning", "Celestial", "Chaos", "Charming", "Contagion", "Corruption", "Curse", "Cursed", "Damnation", "Darkness", "Death's", "Decay", "Decimation", "Delirium", "Delusion", "Dementia", "Demon", "Demonic", "Desire's", "Destiny's", "Destruction", "Devotion", "Diabolic", "Divine", "Divinity's", "Dominance", "Domination", "Dominion", "Doom", "Dread", "Dream", "Echo", "Eclipse", "Elemental", "Enigma", "Enigmatic", "Equinox", "Eradication", "Eternal", "Eternity", "Evil", "Exile", "Exiled", "Extinction", "Faith's", "Fate's", "Finality", "Fire", "Flame", "Fortitude", "Fortune's", "Frost", "Genesis", "Gold", "Golden", "Grave", "Guardian", "Guardian's", "Hallowed", "Hatred's", "Healing", "Heavenly", "Hell's", "Hellish", "Hero", "Hero's", "Holy", "Hungering", "Ice", "Immortal", "Immunity", "Impurity", "Infernal", "Infinity", "Insanity", "Invincibility", "Invisibility", "Invisible", "Isolation", "Judging", "Judgment", "Justice", "Karma", "Kismet", "Liberty", "Life", "Life's", "Lifeblood", "Light's", "Longevity", "Lucky", "Lust's", "Malady", "Malediction", "Malevolence", "Maniacal", "Massacre", "Mending", "Metamorphosis", "Mirage", "Misery", "Misfortune", "Mystery", "Necrotic", "Nightmare", "Obedience", "Oblivion", "Obsidian", "Onyx", "Oracle", "Pandemonium", "Paradise", "Paragon", "Paralyzing", "Paramount", "Pestilence", "Petrifying", "Philosopher's", "Primal", "Prime", "Prosperous", "Purity", "Rebirth", "Resistance", "Resolution", "Restoration", "Resurrection", "Rogue", "Runed", "Sacred", "Sanctifying", "Scourge", "Seduction", "Sentient", "Seraphic", "Serenity", "Shade", "Shadow", "Shapeshifter", "Shapeshifter's", "Slumber", "Solitude's", "Soul", "Specter", "Spellbound", "Spirit", "Spiritbound", "Spite", "Storm", "Summoning", "Supremacy", "Teleportation", "Teleporting", "Temptation", "Termination", "Thaumaturgy", "Thunder", "Titan", "Torment", "Torture", "Tranquility", "Transformation", "Transmutation", "Tribute", "Triumph", "Truth", "Twilight", "Unholy", "Valor", "Valor's", "Vengeance", "Venom", "Vice", "Virility", "Virtue", "Void", "Warding", "Wisdom", "Worshop"];
|
|
const nm3 = ["Amulet", "Arch", "Ark", "Band", "Book", "Boots", "Box", "Bracelet", "Canopic Chest", "Canopic Jar", "Chest", "Cloak", "Crown", "Cube", "Cup", "Cylinder", "Disc", "Chalice", "Goblet", "Tiara", "Circlet", "Grimoire", "Door", "Elixir", "Feather", "Fleece", "Fountain", "Fruit", "Gauntlet", "Gem", "Grail", "Hand", "Hide", "Horn", "Ichor", "Inscriptions", "Instrument", "Jar", "Key", "Lamp", "Letters", "Mantle", "Mask", "Microlith", "Mirror", "Monolith", "Necklace", "Pillar", "Ring", "Robes", "Rod", "Root", "Runes", "Sandals", "Scroll", "Seal", "Shard", "Shield", "Skull", "Slab", "Staff", "Statue", "Statuette", "Stone", "Sword", "Symbols", "Tablet", "Texts", "Tome", "Urn"];
|
|
const i = Math.floor(Math.random() * 10);
|
|
let names;
|
|
const rnd3 = Math.floor(Math.random() * nm3.length);
|
|
if (i < 5) {
|
|
const rnd = Math.floor(Math.random() * nm2.length);
|
|
names = nm2[rnd] + " " + nm3[rnd3];
|
|
} else {
|
|
const rnd = Math.floor(Math.random() * nm1.length);
|
|
names = nm3[rnd3] + " of " + nm1[rnd];
|
|
}
|
|
return names;
|
|
}
|
|
|
|
// generators/dungeon.ts
|
|
function generateDungeonName(settings) {
|
|
const prefix = settings.dungeonTypes;
|
|
const adjective = settings.adjectives;
|
|
const noun = settings.nouns;
|
|
const locations = settings.locations;
|
|
const randomDesc = settings.randomDesc;
|
|
const prefixIndex = Math.floor(Math.random() * prefix.length);
|
|
const adjIndex = Math.floor(Math.random() * adjective.length);
|
|
const locIndex = Math.floor(Math.random() * locations.length);
|
|
const randomDescIndex = Math.floor(Math.random() * randomDesc.length);
|
|
const nounIndex = Math.floor(Math.random() * noun.length);
|
|
const usePrefix = Math.random() > 0.5;
|
|
let result;
|
|
if (usePrefix) {
|
|
result = {
|
|
name: `${prefix[prefixIndex]} of the ${adjective[adjIndex]} ${noun[nounIndex]}`,
|
|
description: generateDungeonDescription(locations[locIndex], prefix[prefixIndex], randomDesc[randomDescIndex])
|
|
};
|
|
} else {
|
|
result = {
|
|
name: `The ${adjective[adjIndex]} ${noun[nounIndex]}`,
|
|
description: generateDungeonDescription(locations[locIndex], prefix[prefixIndex], randomDesc[randomDescIndex])
|
|
};
|
|
}
|
|
return `${result.name}
|
|
Description: ${result.description}`;
|
|
}
|
|
function generateDungeonDescription(location, dungeonType, randomDesc) {
|
|
const templates = [
|
|
`Located in ${location}, this ${dungeonType} is known for ${randomDesc}.`,
|
|
`A ${dungeonType} that is known for ${randomDesc}.`,
|
|
`In the heart of ${location} lies this ${dungeonType}, notorious for ${randomDesc}.`,
|
|
`Deep within ${location}, the ${dungeonType} is feared for its ${randomDesc}.`,
|
|
`This ${dungeonType} located in ${location} is infamous for its ${randomDesc}.`,
|
|
`The ${dungeonType} in ${location} is a place to be reckoned with, famous for its ${randomDesc}.`
|
|
];
|
|
const templateIndex = Math.floor(Math.random() * templates.length);
|
|
return templates[templateIndex];
|
|
}
|
|
|
|
// generators/plothook.ts
|
|
function generatePlotHook() {
|
|
const antagonist = ["orcish horde", "demonic cult", "goblin mercenaries", "troll raiders", "undead army", "shapeshifting spies", "gargoyle hoard", "draconic cult", "sorcerous league", "vampire coven", "elemental scourge", "psychic assassins", "giant marauders", "fey enchantresses", "ogre raiders", "gnoll mercenaries", "infernal overlords", "undead necromancers", "fey warlords", "aquatic raiders", "vampiric coven", "ancient vampires", "golem warriors", "beholder mind-scouts", "political pressure groups", "demonic horde", "gnome infiltrators", "necromantic cults", "dwarven brigands", "half-fiend warlords", "tiefling spies", "adventurers guild", "dark gods cult", "celestial tyrants", "githyanki invaders", "halfling infiltrators", "shadow organization", "winged marauders", "lycanthrope warriors", "aquatic witches", "cult of the dragon", "ancient evils", "lich court", "political factions", "witch hunters", "elf maidens", "goblin assassins", "black order", "dragon-kings", "goblin hordes", "arcane artificers", "mountain giants", "elemental lords", "hobgoblin brigands", "undead host", "efreeti rulers", "humanoids kingdom", "cult of the wyrm", "elemental sorcerers", "ogre magi", "gnome saboteurs", "deep ones", "drow guilds", "woodland witches", "gargoyle builders", "planar hauntings", "umbral court", "cult of the smith", "earthbinders", "chaotic agents", "eldritch powers", "naga sorcerers", "underdark monsters", "githzerai agents", "assassins league", "harpy warriors", "orcish warlords", "familiars", "astral marauders", "fey lords", "alien overlords", "spider cults", "sorcerous covens", "goblin overlords", "dragonspawn", "mountain witches", "goblin witchdoctors", "ogre warbands", "aboleth sorcerers", "doppelgangers", "demonic horde", "gnoll wizards", "elemental armies", "shadow court", "dwarven bandits", "dark wizards", "necropolis", "cult of the destroyer", "fomorian bastions", "primordial forces", "insectoid slavemasters", "gnome artificers", "dwarven lords", "hive mind", "archfiends", "beast cults", "undead armies", "devilish court", "vampire lords", "arcane cabal", "mystic sorcerors", "hiveminds", "primal beasts", "archdevils", "noxious elementals", "djinni rulers"];
|
|
const location = ["forest", "mountains", "desert", "swamps", "underground", "cave", "plains", "island", "castle", "volcano", "jungle", "tundra", "tower", "river", "sea", "moor", "valley", "glacier", "mines", "ruins", "oasis", "lagoon", "beach", "mountain pass", "cliff", "grotto", "falls", "lakes", "gardens", "meadows", "swamp woods", "canyon", "lighthouse", "outskirts", "islets", "crystal caverns", "fjords", "marsh", "gully", "fen", "grove", "coral reef", "bayou", "heath", "gorge", "pond", "cliffs", "cave system", "abyss", "mountain top", "underwater city", "bog", "iceberg", "mineshaft", "abandoned city", "haunted forest", "treetops", "lava plains", "tunnels", "hidden grotto", "underground lake", "wastelands"];
|
|
const antagonistsIndex = Math.floor(Math.random() * antagonist.length);
|
|
const locationsIndex = Math.floor(Math.random() * location.length);
|
|
const promptArray = [
|
|
{ title: `The Lost ${capitalizeFirstLetter4(location[locationsIndex])} Treasure`, description: `A valuable artifact has gone missing in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is said to be guarded by ${antagonist[antagonistsIndex]}. The artifact must be retrieved before it falls into the wrong hands.` },
|
|
{ title: `The Cursed ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `A mysterious force has taken hold of the ${capitalizeFirstLetter4(location[locationsIndex])}, causing strange and dangerous happenings. It is up to the brave adventurers to find out what is causing this and put an end to it.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]} of the ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is being terrorized by a powerful ${antagonist[antagonistsIndex]}. The people of the ${capitalizeFirstLetter4(location[locationsIndex])} are in need of heroes to take on the ${antagonist[antagonistsIndex]} and restore peace to the land.` },
|
|
{ title: `The Mystery of the ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is full of secrets and mysteries. It is up to the adventurers to explore the ${capitalizeFirstLetter4(location[locationsIndex])} and uncover its hidden secrets.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Lair`, description: `The ${antagonist[antagonistsIndex]} has taken refuge in a hidden lair deep in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to find the lair and put an end to the ${antagonist[antagonistsIndex]}'s reign of terror.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Revenge`, description: `The ${antagonist[antagonistsIndex]} has returned to the ${capitalizeFirstLetter4(location[locationsIndex])} seeking revenge. The brave adventurers must face the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Last Hope`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is in dire need of help. The brave adventurers must put an end to the ${antagonist[antagonistsIndex]}'s evil plans and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The Battle for the ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `The forces of evil are gathering in the ${capitalizeFirstLetter4(location[locationsIndex])}. The brave adventurers must fight to protect the ${capitalizeFirstLetter4(location[locationsIndex])} from the ${antagonist[antagonistsIndex]} and his minions.` },
|
|
{ title: `The Search for the ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} has been lost for centuries. It is up to the adventurers to search the ${capitalizeFirstLetter4(location[locationsIndex])} and uncover its secrets.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Treasure`, description: `The ${antagonist[antagonistsIndex]} has hidden a great treasure in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to find the treasure and put an end to the ${antagonist[antagonistsIndex]}'s schemes.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Curse`, description: `The ${antagonist[antagonistsIndex]} has cursed the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to break the curse and restore peace to the ${capitalizeFirstLetter4(location[locationsIndex])}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Secret`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is full of secrets that are waiting to be discovered. It is up to the adventurers to explore the ${capitalizeFirstLetter4(location[locationsIndex])} and uncover its secrets.` },
|
|
{ title: `The Battle for the ${capitalizeFirstLetter4(location[locationsIndex])}`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is under siege by the forces of the ${antagonist[antagonistsIndex]}. The brave adventurers must fight to protect the ${capitalizeFirstLetter4(location[locationsIndex])} and put an end to the ${antagonist[antagonistsIndex]}'s reign of terror.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Scheme`, description: `The ${antagonist[antagonistsIndex]} is planning something sinister in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to stop the ${antagonist[antagonistsIndex]} before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Secret`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} holds a secret that could change the world. It is up to the adventurers to find the secret and protect it from the ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Wrath`, description: `The ${antagonist[antagonistsIndex]} is wreaking havoc in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to put an end to the ${antagonist[antagonistsIndex]}'s evil plans and restore peace to the ${capitalizeFirstLetter4(location[locationsIndex])}.` },
|
|
{ title: `The Return of the ${antagonist[antagonistsIndex]}`, description: `The ${antagonist[antagonistsIndex]} has returned to the ${capitalizeFirstLetter4(location[locationsIndex])}. The brave adventurers must face the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Demise`, description: `The ${antagonist[antagonistsIndex]} is threatening the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to put an end to the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Rescue`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is in great danger. It is up to the brave adventurers to save the ${capitalizeFirstLetter4(location[locationsIndex])} from the clutches of the ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Secret`, description: `A powerful secret lies hidden in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to find the secret and protect it from the ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Challenge`, description: `The ${antagonist[antagonistsIndex]} has issued a challenge to the adventurers. It is up to the adventurers to face the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Plan`, description: `The ${antagonist[antagonistsIndex]} is plotting something sinister in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to stop the ${antagonist[antagonistsIndex]} before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Rescue`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is in dire need of help. The brave adventurers must put an end to the ${antagonist[antagonistsIndex]}'s evil plans and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Treasure`, description: `A valuable treasure lies hidden in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to find the treasure and put an end to the ${antagonist[antagonistsIndex]}'s schemes.` },
|
|
{ title: `The Lost ${capitalizeFirstLetter4(location[locationsIndex])} Expedition`, description: `A group of adventurers have gone missing in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the brave adventurers to find the expedition and discover what happened to them.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Guardian`, description: `A powerful guardian has taken up residence in the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to find the guardian and put an end to the ${antagonist[antagonistsIndex]}'s evil plans.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Shadow`, description: `The ${antagonist[antagonistsIndex]} is casting a dark shadow over the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to put an end to the ${antagonist[antagonistsIndex]}'s reign of terror.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])}'s Fate`, description: `The fate of the ${capitalizeFirstLetter4(location[locationsIndex])} lies in the hands of the adventurers. It is up to them to save the ${capitalizeFirstLetter4(location[locationsIndex])} from the clutches of the ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Threat`, description: `The ${antagonist[antagonistsIndex]} is threatening the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to put an end to the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]}'s Ambition`, description: `The ${antagonist[antagonistsIndex]} has set his sights on the ${capitalizeFirstLetter4(location[locationsIndex])}. It is up to the adventurers to stop the ${antagonist[antagonistsIndex]} and save the ${capitalizeFirstLetter4(location[locationsIndex])} from destruction.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Mystery`, description: `Rumors of strange occurrences in the ${capitalizeFirstLetter4(location[locationsIndex])} have been spreading. People have been disappearing and strange creatures have been seen. You must investigate what is happening and put a stop to it.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Escort`, description: `You have been hired to escort a VIP to a meeting in the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must protect them from ${antagonist[antagonistsIndex]} who are trying to disrupt the meeting.` },
|
|
{ title: `The Kidnapped ${capitalizeFirstLetter4(location[locationsIndex])} Princess`, description: `The princess of the ${capitalizeFirstLetter4(location[locationsIndex])} kingdom has been kidnapped by ${antagonist[antagonistsIndex]}. You must journey to their hideout and rescue her.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Heist`, description: `You have been hired to steal a valuable item from the ${capitalizeFirstLetter4(location[locationsIndex])}. You must be stealthy and avoid detection from ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Curse`, description: `An ancient curse has been unleashed in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to break it before it is too late. ${antagonist[antagonistsIndex]} are guarding the source of the curse and must be defeated.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Artifact`, description: `A powerful artifact is hidden in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find it before ${antagonist[antagonistsIndex]} can get their hands on it.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Rescue`, description: `Your friends have been captured by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must rescue them before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to restore peace.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Revenge`, description: `You have been wronged by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must get revenge and restore your honor.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Terror`, description: `${antagonist[antagonistsIndex]} have taken over the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to stop them and restore peace.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Hunt`, description: `You have been hired to hunt down ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find them and bring them to justice.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Challenge`, description: `You have been challenged by ${antagonist[antagonistsIndex]} to a duel in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must accept the challenge and prove your worth.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Race`, description: `You have been challenged to a race by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must win the race to prove your superiority.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Danger`, description: `The ${capitalizeFirstLetter4(location[locationsIndex])} is in danger from ${antagonist[antagonistsIndex]}. You must find a way to save it before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Mysteries`, description: `Strange things are happening in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must investigate and uncover the truth behind the mysteries.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to save the day.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Invasion`, description: `${antagonist[antagonistsIndex]} have invaded the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to drive them out and restore peace.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to save the world.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Discovery`, description: `You have been hired to explore the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must fend off ${antagonist[antagonistsIndex]} and uncover ancient secrets.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to save the kingdom.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Prison`, description: `You have been hired to break someone out of a prison in the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must avoid detection from ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Rescue`, description: `You have been hired to rescue someone from the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must avoid detection from ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Treasure`, description: `A valuable treasure is hidden in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find it before ${antagonist[antagonistsIndex]} can get their hands on it.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Challenge`, description: `You have been challenged by ${antagonist[antagonistsIndex]} to a battle in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must accept the challenge and prove your worth.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to save the city.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Quest`, description: `You have been sent on a quest to the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must fend off ${antagonist[antagonistsIndex]} and discover ancient secrets.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Mission`, description: `You have been hired to complete a mission in the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must avoid detection from ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Spy`, description: `You have been hired to spy on ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find out what they are up to and report back.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Adventure`, description: `You have been hired to explore the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must fend off ${antagonist[antagonistsIndex]} and uncover ancient secrets.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Sabotage`, description: `You have been hired to sabotage a plan by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to stop them before they succeed.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to protect the innocent.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Thief`, description: `A thief has stolen something valuable from the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find them before they can escape with it.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Struggle`, description: `The people of the ${capitalizeFirstLetter4(location[locationsIndex])} are struggling against the oppression of ${antagonist[antagonistsIndex]}. You must find a way to help them and restore freedom.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to save your friends.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Escape`, description: `You have been captured by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must escape before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Challenge`, description: `You have been challenged by ${antagonist[antagonistsIndex]} to a game in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must accept the challenge and prove your worth.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Conflict`, description: `A conflict has broken out in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to stop it before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Rescue`, description: `Your friends have been taken hostage by ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must rescue them before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Retrieval`, description: `You have been hired to retrieve a valuable item from the ${capitalizeFirstLetter4(location[locationsIndex])}. You must be stealthy and avoid detection from ${antagonist[antagonistsIndex]}.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Discovery`, description: `Strange things are happening in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must investigate and uncover the truth behind them.` },
|
|
{ title: `The ${antagonist[antagonistsIndex]} Discovery`, description: `Strange things are happening in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must investigate and uncover the truth behind them.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Conspiracy`, description: `You have uncovered a conspiracy in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to stop it before it is too late.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Showdown`, description: `You must face off against ${antagonist[antagonistsIndex]} in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must defeat them in order to restore justice.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Battle`, description: `A battle has broken out in the ${capitalizeFirstLetter4(location[locationsIndex])}. You must find a way to win it and restore peace.` },
|
|
{ title: `The ${capitalizeFirstLetter4(location[locationsIndex])} Rescue`, description: `You have been hired to rescue a VIP from the ${capitalizeFirstLetter4(location[locationsIndex])}. Along the way, you must protect them from ${antagonist[antagonistsIndex]} who are trying to stop you.` }
|
|
];
|
|
const promptIndex = Math.floor(Math.random() * promptArray.length);
|
|
return `${promptArray[promptIndex].title},
|
|
${promptArray[promptIndex].description}`;
|
|
}
|
|
function capitalizeFirstLetter4(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
}
|
|
|
|
// editor/GeneratorModal.ts
|
|
var races = ["none", "none", "dungeon", "inn", "settlement", "none", "airships", "drinks", "artifacts", "loot", "metals", "magicaltrees", "ship", "none", "animalgroups", "groups", "religion", "none", "aasimars", "catfolk", "fetchlings", "halfelf", "halforc", "hobgoblin", "ifrits", "kobalds", "oreads", "ratfolk", "sylphs", "tengu", "tians", "tiefling", "undines", "angel", "cavePerson", "darkelf", "demon", "dragon", "drow", "dwarf", "elf", "fairy", "gnome", "goblin", "halfdemon", "halfling", "highelf", "highfairy", "human", "ogre", "orc", "none", "plothook"];
|
|
var racesDisplayName = ["Select a Generator to Start", "--[Settlements and Buildings]--", "Dungeons & Labryinths", "Inn's & Taverns", "Settlement", "--[Objects and Vehicles]--", "Airships", "Drinks", "Artifacts", "Loot And Treasure", "Metals", "Magical Trees", "Ship", "--[Groups and Religions]--", "Animal Groups", "Groups", "Religion", "--[Races]--", "Aasimars", "Catfolk", "Fetchlings", "Half-Elf", "Half-Orc", "Hobgoblin", "Ifrits", "Kobalds", "Oreads", "Ratfolk", "Sylphs", "Tengu", "Tians", "Tiefling", "Undines", "Angel", "Cave Person", "Dark Elf", "Demon", "Dragon", "Drow", "Dwarf", "Elf", "Fairy", "Gnome", "Goblin", "Half Demon", "Halfling", "High Elf", "High Fairy", "Human", "Ogre", "Orc", "--[Story Tools]--", "Plot & Story Hooks"];
|
|
var pathfinderFilter = ["aasimars", "catfolk", "fetchlings", "halfelf", "halforc", "hobgoblin", "ifrits", "kobalds", "oreads", "ratfolk", "sylphs", "tengu", "tians", "tiefling", "undines"];
|
|
var genSettings = {
|
|
race: "angel",
|
|
gender: "male",
|
|
multiNames: false
|
|
};
|
|
var GeneratorModal = class extends import_obsidian.Modal {
|
|
constructor(app2, onSubmit, plugin) {
|
|
super(app2);
|
|
this.onSubmit = onSubmit;
|
|
this.plugin = plugin;
|
|
}
|
|
onOpen() {
|
|
const { contentEl } = this;
|
|
const amountToGen = 1;
|
|
contentEl.createEl("h1", { text: "Lets Generate!" });
|
|
contentEl.createEl("p", { text: "Welcome to the Fantasy Content Generator! Select the Generator for the name you would like to generate below and then fill out the form." });
|
|
contentEl.createEl("h2", { text: "Select the Generator." });
|
|
const select = new import_obsidian.DropdownComponent(contentEl);
|
|
races.forEach((race, index) => {
|
|
select.addOption(race, racesDisplayName[index]);
|
|
});
|
|
const optionsDiv = contentEl.createDiv();
|
|
select.onChange((raceSelected) => {
|
|
switch (raceSelected) {
|
|
default:
|
|
this.generatorRaceSettings(optionsDiv, amountToGen, raceSelected);
|
|
break;
|
|
case "ship":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generateShipName);
|
|
break;
|
|
case "dungeon":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generateDungeonName, this.plugin.settings.dungeonSettings);
|
|
break;
|
|
case "plothook":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatePlotHook);
|
|
break;
|
|
case "religion":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorReligions);
|
|
break;
|
|
case "inn":
|
|
this.generatorInnSettings(optionsDiv, amountToGen, generateInn);
|
|
break;
|
|
case "airships":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorAirships);
|
|
break;
|
|
case "drinks":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorDrinks, this.plugin.settings.drinkSettings);
|
|
break;
|
|
case "groups":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorGroups, this.plugin.settings.groupSettings);
|
|
break;
|
|
case "animalgroups":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorAnimal_groups);
|
|
break;
|
|
case "metals":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorMetals);
|
|
break;
|
|
case "magicaltrees":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generatorMagical_trees);
|
|
break;
|
|
case "settlement":
|
|
this.generatorFCGSettlementSettings(optionsDiv, amountToGen, FCG.Settlements.generate);
|
|
break;
|
|
case "loot":
|
|
this.generatorLootSettings(optionsDiv, amountToGen, generateLoot, this.plugin.settings.enableCurrency, this.plugin.settings.currencyFrequency, this.plugin.settings.currencyTypes);
|
|
break;
|
|
case "artifacts":
|
|
this.generatorCustomSettings(optionsDiv, amountToGen, generateMiscellaneousArtifacts);
|
|
break;
|
|
case "none":
|
|
optionsDiv.innerHTML = "";
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
generatorRaceSettings(settingsdiv, genAmount, raceSelected) {
|
|
genSettings = {
|
|
race: "angel",
|
|
gender: "male",
|
|
multiNames: false
|
|
};
|
|
genSettings.race = raceSelected;
|
|
settingsdiv.empty();
|
|
settingsdiv.createEl("h3", { text: "Customise The Generation" });
|
|
new import_obsidian.Setting(settingsdiv).setName("Male or Female?").addDropdown((drop) => {
|
|
drop.addOption("male", "Male");
|
|
drop.addOption("female", "Female");
|
|
drop.onChange((value) => {
|
|
genSettings.gender = value;
|
|
});
|
|
});
|
|
new import_obsidian.Setting(settingsdiv).setName("Family Name?").addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
genSettings.multiNames = value;
|
|
});
|
|
});
|
|
let fullCopy = "";
|
|
new import_obsidian.Setting(settingsdiv).setName("Amount").setDesc("How Many Records to Generate").addText((text) => {
|
|
text.onChange((value) => genAmount = Number(value));
|
|
}).addButton((btn) => btn.setButtonText("Generate").setCta().onClick(() => {
|
|
for (let index = 0; index < genAmount; index++) {
|
|
let firstName;
|
|
let familyName = "";
|
|
let fullName = "";
|
|
if (pathfinderFilter.includes(genSettings.race)) {
|
|
fullName = generatePathfinderName(genSettings.race, genSettings.gender, genSettings.multiNames);
|
|
} else {
|
|
firstName = (0, import_fantasy_name_generator.nameByRace)(genSettings.race, { gender: genSettings.gender });
|
|
if (genSettings.multiNames === true) {
|
|
familyName = genSettings.race.includes("human") || genSettings.race.includes("dwarf") || genSettings.race.includes("elf") ? " " + this.determineLastname(genSettings.race) : " " + (0, import_fantasy_name_generator.nameByRace)(genSettings.race, { gender: genSettings.gender });
|
|
}
|
|
fullName = firstName + familyName;
|
|
}
|
|
new import_obsidian.Setting(settingsdiv).addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
if (value === true) {
|
|
fullCopy += fullName + "\n";
|
|
} else {
|
|
const fullCIndex = fullCopy.indexOf(fullName);
|
|
fullCopy = fullCIndex === -1 ? fullCopy : fullCopy.slice(0, fullCIndex) + fullCopy.slice(fullCIndex + fullName.length);
|
|
}
|
|
}).setValue(true);
|
|
}).setName(fullName);
|
|
}
|
|
})).addButton((btn) => btn.setButtonText("Copy").setCta().onClick(() => {
|
|
if (fullCopy === "") {
|
|
this.result = new Error("Nothing Was Selected to Copy.");
|
|
} else {
|
|
this.result = fullCopy;
|
|
}
|
|
this.close();
|
|
this.onSubmit(this.result);
|
|
}));
|
|
}
|
|
generatorInnSettings(settingsdiv, genAmount, generatorFunction) {
|
|
settingsdiv.empty();
|
|
settingsdiv.createEl("h3", { text: "Customise The Generation" });
|
|
genAmount = 1;
|
|
let innList = "";
|
|
new import_obsidian.Setting(settingsdiv).setName("Amount to Generate").addText((text) => {
|
|
text.onChange((value) => genAmount = Number(value));
|
|
}).addButton((btn) => btn.setButtonText("Generate").setCta().onClick(() => {
|
|
for (let index = 0; index < genAmount; index++) {
|
|
const innName = generatorFunction(this.plugin.settings.innSettings);
|
|
new import_obsidian.Setting(settingsdiv).addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
const innString = innName.name + "\nDescription: " + innName.description + "\nRumors: " + innName.rumors;
|
|
if (value === true) {
|
|
innList += innString + "\n";
|
|
} else {
|
|
const fullCIndex = innList.indexOf(innString);
|
|
innList = fullCIndex === -1 ? innList : innList.slice(0, fullCIndex) + innList.slice(fullCIndex + innString.length);
|
|
}
|
|
}).setValue(true);
|
|
}).setName(innName.name);
|
|
}
|
|
})).addButton((btn) => btn.setButtonText("Copy").setCta().onClick(() => {
|
|
if (innList === "") {
|
|
this.result = new Error("Nothing Was Selected to Copy.");
|
|
} else {
|
|
this.result = innList;
|
|
}
|
|
this.close();
|
|
this.onSubmit(this.result);
|
|
}));
|
|
}
|
|
generatorLootSettings(settingsdiv, genAmount, generatorFunction, enableCurrency, currencyFrequency, currencyTypes) {
|
|
settingsdiv.empty();
|
|
settingsdiv.createEl("h3", { text: "Customise The Generation" });
|
|
genAmount = 1;
|
|
let list = "";
|
|
new import_obsidian.Setting(settingsdiv).setName("Amount to Generate").addText((text) => {
|
|
text.onChange((value) => genAmount = Number(value));
|
|
}).addButton((btn) => btn.setButtonText("Generate").setCta().onClick(() => {
|
|
for (let index = 0; index < genAmount; index++) {
|
|
const shipName = generatorFunction(enableCurrency, currencyFrequency, currencyTypes, this.plugin.settings.lootSettings);
|
|
new import_obsidian.Setting(settingsdiv).addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
if (value === true) {
|
|
list += shipName + "\n";
|
|
} else {
|
|
const fullCIndex = list.indexOf(shipName);
|
|
list = fullCIndex === -1 ? list : list.slice(0, fullCIndex) + list.slice(fullCIndex + shipName.length);
|
|
}
|
|
}).setValue(true);
|
|
}).setName(shipName);
|
|
}
|
|
})).addButton((btn) => btn.setButtonText("Copy").setCta().onClick(() => {
|
|
if (list === "") {
|
|
this.result = new Error("Nothing Was Selected to Copy.");
|
|
} else {
|
|
this.result = list;
|
|
}
|
|
this.close();
|
|
this.onSubmit(this.result);
|
|
}));
|
|
}
|
|
generatorFCGSettlementSettings(settingsdiv, genAmount, generatorFunction) {
|
|
settingsdiv.empty();
|
|
settingsdiv.createEl("h3", { text: "Customise The Generation" });
|
|
genAmount = 1;
|
|
let list = "";
|
|
new import_obsidian.Setting(settingsdiv).setName("Amount to Generate").addText((text) => {
|
|
text.onChange((value) => genAmount = Number(value));
|
|
}).addButton((btn) => btn.setButtonText("Generate").setCta().onClick(() => {
|
|
for (let index = 0; index < genAmount; index++) {
|
|
const shipName = generatorFunction();
|
|
console.log(shipName);
|
|
const name = generateCityName(this.plugin.settings.citySettings);
|
|
const settlementString = "Name: " + name + "\nPopulation: " + shipName.population + "\nType: " + this.formatString(shipName.type);
|
|
new import_obsidian.Setting(settingsdiv).addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
if (value === true) {
|
|
list += settlementString + "\n\n";
|
|
} else {
|
|
const fullCIndex = list.indexOf(settlementString + "\n");
|
|
list = fullCIndex === -1 ? list : list.slice(0, fullCIndex) + list.slice(fullCIndex + settlementString.length);
|
|
}
|
|
}).setValue(true);
|
|
}).setName(name);
|
|
}
|
|
})).addButton((btn) => btn.setButtonText("Copy").setCta().onClick(() => {
|
|
if (list === "") {
|
|
this.result = new Error("Nothing Was Selected to Copy.");
|
|
} else {
|
|
this.result = this.formatStringList(list);
|
|
}
|
|
this.close();
|
|
this.onSubmit(this.result);
|
|
}));
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
generatorCustomSettings(settingsdiv, genAmount, generatorFunction, settings) {
|
|
settingsdiv.empty();
|
|
settingsdiv.createEl("h3", { text: "Customise The Generation" });
|
|
genAmount = 1;
|
|
let list = "";
|
|
new import_obsidian.Setting(settingsdiv).setName("Amount to Generate").addText((text) => {
|
|
text.onChange((value) => genAmount = Number(value));
|
|
}).addButton((btn) => btn.setButtonText("Generate").setCta().onClick(() => {
|
|
for (let index = 0; index < genAmount; index++) {
|
|
let shipName = "";
|
|
if (settings !== void 0) {
|
|
shipName = generatorFunction(settings);
|
|
} else {
|
|
shipName = generatorFunction();
|
|
}
|
|
new import_obsidian.Setting(settingsdiv).addToggle((toggle) => {
|
|
toggle.onChange((value) => {
|
|
if (value === true) {
|
|
list += shipName + "\n\n";
|
|
} else {
|
|
const fullCIndex = list.indexOf(shipName);
|
|
list = fullCIndex === -1 ? list : list.slice(0, fullCIndex) + list.slice(fullCIndex + shipName.length);
|
|
}
|
|
}).setValue(true);
|
|
}).setName(shipName);
|
|
}
|
|
})).addButton((btn) => btn.setButtonText("Copy").setCta().onClick(() => {
|
|
if (list === "") {
|
|
this.result = new Error("Nothing Was Selected to Copy.");
|
|
} else {
|
|
this.result = this.formatStringList(list);
|
|
}
|
|
this.close();
|
|
this.onSubmit(this.result);
|
|
}));
|
|
}
|
|
determineLastname(race) {
|
|
if (race.includes("human")) {
|
|
return this.randomItemFromArray(familyNameList);
|
|
}
|
|
if (race.includes("elf")) {
|
|
return this.randomItemFromArray(elfFamilyNames);
|
|
}
|
|
if (race.includes("dwarf")) {
|
|
return this.randomItemFromArray(dwarfFamilyNames);
|
|
}
|
|
return "The Unknown";
|
|
}
|
|
randomItemFromArray(array) {
|
|
const randomIndex = Math.floor(Math.random() * array.length);
|
|
return array[randomIndex];
|
|
}
|
|
formatStringList(input) {
|
|
return input.split("\n").filter((s) => s.trim() !== "").join("\n\n");
|
|
}
|
|
formatString(str) {
|
|
return str.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
}
|
|
onClose() {
|
|
const { contentEl } = this;
|
|
genSettings = {
|
|
race: "angel",
|
|
gender: "male",
|
|
multiNames: false
|
|
};
|
|
contentEl.empty();
|
|
}
|
|
};
|
|
|
|
// main.ts
|
|
var import_obsidian5 = require("obsidian");
|
|
|
|
// editor/InlineGenerator.ts
|
|
var import_fantasy_name_generator2 = __toESM(require_dist());
|
|
var FCG2 = __toESM(require_dist2());
|
|
var import_obsidian3 = require("obsidian");
|
|
|
|
// settings/Datatypes.ts
|
|
var fs = __toESM(require("fs"));
|
|
var import_obsidian2 = require("obsidian");
|
|
var possibleOptions = [
|
|
"TradingPost",
|
|
"ElfMale",
|
|
"ElfMaleLastname",
|
|
"ElfFemale",
|
|
"ElfFemaleLastname",
|
|
"Orc",
|
|
"OrcLastname",
|
|
"DwarfMale",
|
|
"DwarfMaleLastname",
|
|
"DwarfFemale",
|
|
"DwarfFemaleLastname",
|
|
"HumanMale",
|
|
"HumanFemale",
|
|
"HumanMaleLastname",
|
|
"HumanFemaleLastname",
|
|
"DungeonsLabryinths",
|
|
"InnsTaverns",
|
|
"Settlement",
|
|
"Airships",
|
|
"Drinks",
|
|
"Artifacts",
|
|
"LootTreasure",
|
|
"Metals",
|
|
"MagicalTrees",
|
|
"Ship",
|
|
"AnimalGroups",
|
|
"Groups",
|
|
"Religion",
|
|
"AasimarsLastname",
|
|
"CatfolkLastname",
|
|
"FetchlingsLastname",
|
|
"HalfElfLastname",
|
|
"HalfOrcLastname",
|
|
"HobgoblinLastname",
|
|
"IfritsLastname",
|
|
"KobaldsLastname",
|
|
"OreadsLastname",
|
|
"RatfolkLastname",
|
|
"SylphsLastname",
|
|
"TenguLastname",
|
|
"TiansLastname",
|
|
"TieflingLastname",
|
|
"UndinesLastname",
|
|
"AngelMaleLastname",
|
|
"AngelFemaleLastname",
|
|
"CavePersonMaleLastname",
|
|
"CavePersonFemaleLastname",
|
|
"DarkElfMaleLastname",
|
|
"DarkElfFemaleLastname",
|
|
"DemonLastname",
|
|
"DragonMaleLastname",
|
|
"DragonFemaleLastname",
|
|
"DrowMaleLastname",
|
|
"DrowFemaleLastname",
|
|
"FairyMaleLastname",
|
|
"FairyFemaleLastname",
|
|
"GnomeMaleLastname",
|
|
"GnomeFemaleLastname",
|
|
"GoblinLastname",
|
|
"HalfDemonMaleLastname",
|
|
"HalfDemonFemaleLastname",
|
|
"HalflingMaleLastname",
|
|
"HalflingFemaleLastname",
|
|
"HighElfMaleLastname",
|
|
"HighElfFemaleLastname",
|
|
"HighFairyMaleLastname",
|
|
"HighFairyFemaleLastname",
|
|
"OgreLastname",
|
|
"Aasimars",
|
|
"Catfolk",
|
|
"Fetchlings",
|
|
"HalfElf",
|
|
"HalfOrc",
|
|
"Hobgoblin",
|
|
"Ifrits",
|
|
"Kobalds",
|
|
"Oreads",
|
|
"Ratfolk",
|
|
"Sylphs",
|
|
"Tengu",
|
|
"Tians",
|
|
"Tiefling",
|
|
"Undines",
|
|
"AngelMale",
|
|
"CavePersonMale",
|
|
"DarkElfMale",
|
|
"DragonMale",
|
|
"DrowMale",
|
|
"FairyMale",
|
|
"GnomeMale",
|
|
"HalfDemonMale",
|
|
"HalflingMale",
|
|
"HighElfMale",
|
|
"HighFairyMale",
|
|
"Ogre",
|
|
"AngelFemale",
|
|
"CavePersonFemale",
|
|
"DarkElfFemale",
|
|
"Demon",
|
|
"DragonFemale",
|
|
"DrowFemale",
|
|
"FairyFemale",
|
|
"GnomeFemale",
|
|
"Goblin",
|
|
"HalfDemonFemale",
|
|
"HalflingFemale",
|
|
"HighElfFemale",
|
|
"HighFairyFemale",
|
|
"PlotStoryHooks"
|
|
];
|
|
function importJSON(path, callback) {
|
|
fs.readFile(path, "utf8", (error, data) => {
|
|
if (error) {
|
|
new import_obsidian2.Notice("Error Importing: " + error);
|
|
return;
|
|
}
|
|
const jsonData = JSON.parse(data);
|
|
new import_obsidian2.Notice("Data Successfully Imported!");
|
|
callback(jsonData);
|
|
});
|
|
}
|
|
function exportJSON(data) {
|
|
const json = JSON.stringify(data);
|
|
const blob = new Blob([json], { type: "application/json" });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement("a");
|
|
a.download = "data.json";
|
|
a.href = url;
|
|
a.click();
|
|
new import_obsidian2.Notice("Data Exporting!");
|
|
}
|
|
function weightedRandomItem(table, roll) {
|
|
const item = table.find(({ range }) => range[0] <= roll && roll <= range[1]);
|
|
return item == null ? void 0 : item.string;
|
|
}
|
|
function rollD20(modifier) {
|
|
return Math.clamp(Math.floor(Math.random() * 20 + 1) + modifier, 1, 20);
|
|
}
|
|
function rollD100(modifier) {
|
|
return Math.clamp(Math.floor(Math.random() * 100 + 1) + modifier, 1, 100);
|
|
}
|
|
|
|
// generators/tradingPost.ts
|
|
var specialtyOptions = ["Atypical Shipping Methods", "Food & Drink", "Hospitality", "Information", "Purchasing Connections", "Unscrupulous Contractors"];
|
|
var ageOptions = [
|
|
{ string: "Established", range: [4, 8] },
|
|
{ string: "Mature", range: [9, 13] },
|
|
{ string: "Old", range: [14, 17] },
|
|
{ string: "Recently Established", range: [1, 3] },
|
|
{ string: "Ancient", range: [18, 19] },
|
|
{ string: "Unknown", range: [20, 20] }
|
|
];
|
|
var conditionOptions = [
|
|
{ string: "Ramshackled", range: [1, 2] },
|
|
{ string: "Poor", range: [3, 6] },
|
|
{ string: "Fair", range: [7, 14] },
|
|
{ string: "Good", range: [15, 18] },
|
|
{ string: "Immaculate", range: [19, 20] }
|
|
];
|
|
var visitorTrafficOptions = [
|
|
{ string: "Vacant: No one is really visiting.", range: [1, 2] },
|
|
{ string: "Groups: Visitors are a rarity, though a few might be around.", range: [3, 6] },
|
|
{ string: "Crowds: It's typical to see new visitors most days.", range: [7, 14] },
|
|
{ string: "Droves: New people come in and out of this trading post.", range: [15, 18] },
|
|
{ string: "Masses: The post is swarming with faces that would not be deemed as familiar.", range: [19, 20] }
|
|
];
|
|
var sizeOptions = [
|
|
{ string: "Tiny", range: [1, 2] },
|
|
{ string: "Small", range: [3, 6] },
|
|
{ string: "Medium", range: [7, 14] },
|
|
{ string: "Large", range: [15, 18] },
|
|
{ string: "Very Large", range: [19, 20] }
|
|
];
|
|
var environmentOptions = [
|
|
{ string: "Mountainous", range: [1, 2] },
|
|
{ string: "Desert", range: [3, 4] },
|
|
{ string: "Valley", range: [5, 6] },
|
|
{ string: "Swamp", range: [7, 8] },
|
|
{ string: "Plains", range: [9, 10] },
|
|
{ string: "Coastal", range: [11, 12] },
|
|
{ string: "Forest", range: [13, 14] },
|
|
{ string: "River", range: [15, 16] },
|
|
{ string: "Tundra", range: [17, 18] },
|
|
{ string: "Underground", range: [19, 20] }
|
|
];
|
|
var residentPopulationOptions = [
|
|
{ string: "Nearly Deserted", range: [1, 2] },
|
|
{ string: "Sparse", range: [3, 6] },
|
|
{ string: "Comfortable", range: [7, 14] },
|
|
{ string: "Congested", range: [15, 18] },
|
|
{ string: "Overwhelmed", range: [19, 20] }
|
|
];
|
|
var visitorDispositionOptions = [
|
|
{ string: "Hostile", range: [1, 2] },
|
|
{ string: "Unfriendly", range: [3, 6] },
|
|
{ string: "Neutral", range: [7, 14] },
|
|
{ string: "Friendly", range: [15, 18] },
|
|
{ string: "Open", range: [19, 20] }
|
|
];
|
|
var lawEnforcementOptions = [
|
|
{ string: "None", range: [1, 2] },
|
|
{ string: "Sheriff", range: [3, 6] },
|
|
{ string: "Local Watch", range: [7, 14] },
|
|
{ string: "Well-equipped", range: [15, 18] },
|
|
{ string: "Overwhelmingly Present", range: [19, 20] }
|
|
];
|
|
var leadershipOptions = [
|
|
{ string: "No Leader", range: [1, 1] },
|
|
{ string: "Hereditary", range: [2, 4] },
|
|
{ string: "Merchant Monarch", range: [5, 7] },
|
|
{ string: "Underworld or Criminal", range: [8, 10] },
|
|
{ string: "Oligarchy", range: [11, 13] },
|
|
{ string: "Local Council", range: [14, 16] },
|
|
{ string: "Single Elected Leader", range: [17, 19] },
|
|
{ string: "Commune", range: [20, 20] }
|
|
];
|
|
var wealthOptions = [
|
|
{ string: "Destitute", range: [1, 2] },
|
|
{ string: "Impoverished", range: [3, 6] },
|
|
{ string: "Average", range: [7, 14] },
|
|
{ string: "Prosperous", range: [15, 17] },
|
|
{ string: "Wealthy", range: [18, 19] },
|
|
{ string: "Affluent", range: [20, 20] }
|
|
];
|
|
var crimeOptions = [
|
|
{ string: "Regular", range: [1, 2] },
|
|
{ string: "Common", range: [3, 6] },
|
|
{ string: "Average", range: [7, 14] },
|
|
{ string: "Uncommon", range: [15, 18] },
|
|
{ string: "Rare", range: [19, 20] }
|
|
];
|
|
var shopOptions = [
|
|
{ string: "Baker", range: [1, 4] },
|
|
{ string: "Butcher", range: [5, 8] },
|
|
{ string: "Cooper", range: [9, 12] },
|
|
{ string: "Carpenter", range: [13, 16] },
|
|
{ string: "General Store", range: [17, 24] },
|
|
{ string: "Herbalist", range: [25, 28] },
|
|
{ string: "Smithy", range: [29, 36] },
|
|
{ string: "Tailor", range: [37, 40] },
|
|
{ string: "Tanner", range: [41, 44] },
|
|
{ string: "Thatcher", range: [45, 48] },
|
|
{ string: "Wainwright", range: [49, 52] },
|
|
{ string: "Weaver", range: [53, 56] },
|
|
{ string: "Alchemist", range: [57, 59] },
|
|
{ string: "Artist", range: [60, 62] },
|
|
{ string: "Bank/Exchange", range: [63, 65] },
|
|
{ string: "Cobbler", range: [66, 68] },
|
|
{ string: "Foundry", range: [69, 71] },
|
|
{ string: "Mill", range: [72, 74] },
|
|
{ string: "Textile Production", range: [75, 77] },
|
|
{ string: "Shipwright", range: [78, 80] },
|
|
{ string: "Rare Botanicals", range: [81, 82] },
|
|
{ string: "Luxury Furnishings", range: [83, 84] },
|
|
{ string: "Rare Trade Goods", range: [85, 86] },
|
|
{ string: "Rare Drink Brewery", range: [87, 88] },
|
|
{ string: "Magic Shop-Armor", range: [89, 90] },
|
|
{ string: "Magic Shop-Books", range: [91, 92] },
|
|
{ string: "Magic Shop-Clothing", range: [93, 94] },
|
|
{ string: "Magic Shop-Jewelry", range: [95, 96] },
|
|
{ string: "Magic Shop-Weapons", range: [97, 98] },
|
|
{ string: "Magic Shop-Miscellaneous & Curiosities", range: [99, 100] }
|
|
];
|
|
var serviceOptions = [
|
|
{ string: "Barber", range: [1, 8] },
|
|
{ string: "Bathhouse", range: [9, 16] },
|
|
{ string: "Doctor/Apothercary", range: [17, 24] },
|
|
{ string: "House of Leisure (GM Discretion)", range: [25, 32] },
|
|
{ string: "Inn", range: [33, 44] },
|
|
{ string: "Club", range: [45, 52] },
|
|
{ string: "Soothsayer", range: [53, 60] },
|
|
{ string: "Stable", range: [61, 68] },
|
|
{ string: "Tavern", range: [69, 80] },
|
|
{ string: "Hired Help - Muscle", range: [81, 82] },
|
|
{ string: "Hired Help - Assassins/Thieves", range: [83, 84] },
|
|
{ string: "Hired Help - Ranged Attack Specialists", range: [85, 86] },
|
|
{ string: "Hired Help - Scribes and Clerks", range: [87, 88] },
|
|
{ string: "Hired Help - Caravans and Mounts", range: [89, 90] },
|
|
{ string: "Hired Help - Arcane Academics/Inventors", range: [91, 92] },
|
|
{ string: "Hired Help - Magic Mercs", range: [93, 94] },
|
|
{ string: "Hired Help - Religious Guidance", range: [95, 96] },
|
|
{ string: "Hired Help - Divine Specialists", range: [97, 98] },
|
|
{ string: "Hired Help - Guides and Trackers", range: [99, 100] }
|
|
];
|
|
var origins = [
|
|
"Accidental: 'the trading post came about due to an accident, such as a caravan breaking down or mistaken directions. What was set up to deal with the eventually become the trading post.'",
|
|
"Business Venture: 'The trading post was established by a wealthy entrepreneur specifically to be a trading post from the start.'",
|
|
"Crossroads: 'The trading post is at the intersection of more than one major trade route.'",
|
|
"Military Outpost: 'The trading post was built on the remnants of an old fortress or watchtower, the structures of which have long since fallen down or been repurposed by the locals.'",
|
|
"No Man's Land: 'The trading post was established as a neutral place where opposing forces could purchase wares, without encroaching on enemy territory.'",
|
|
"Native: 'The trading post was started by someone native to the area, who saw potential in trade with passersby.'",
|
|
"Overnight Stop: 'The trading post was originally a single, large house for overnight stays for weary travellers, which soon grew, along with the demand for accommodations.'",
|
|
"Wilderness Expert: 'The trading post was started when a trapper, hunter or guide set up a camp, in order to aid those passing through the area.'",
|
|
"Religious: 'The trading post was established by a religious order, as a means of supporting their ministry.'",
|
|
"River Crossing: 'The trading post was built near a major river crossing so that traders could more easily cross and barter their goods.'",
|
|
"Pilgrimage: 'The trading post was set up to serve the needs of people travelling on a pilgrimage.'",
|
|
"King's Grant: 'The trading post was established as part of a royal grant, as a means of encouraging trade and commerce in the region.'",
|
|
"Scavengers: 'The trading post was created by a group of scavengers, who had discovered a valuable resource or sought to capitalize on the needs of travellers.'",
|
|
"Fishing Group: 'The trading post was established by a Group of Fishermen, in order to support a nearby population and capitalize on the sea trade.'",
|
|
"Frontier Expansion: 'The trading post was established as part of a larger effort to expand the kingdom's frontier, and to open up new trade routes.'"
|
|
];
|
|
function generateTradingPost() {
|
|
let visitorTrafficMod = 0;
|
|
let popWealth = 0;
|
|
let sizeMod = 0;
|
|
let crimeMod = 0;
|
|
const origin = origins[Math.floor(Math.random() * origins.length)];
|
|
const specialiaty = specialtyOptions[Math.floor(Math.random() * specialtyOptions.length)];
|
|
const age = ageRoll();
|
|
visitorTrafficMod += age.mod;
|
|
const condition = conditionRoll();
|
|
popWealth += condition.mod;
|
|
const visitorTraffic = visitorTrafficRoll(visitorTrafficMod);
|
|
sizeMod += visitorTraffic.mod[0];
|
|
crimeMod += visitorTraffic.mod[1];
|
|
const postSize = weightedRandomItem(sizeOptions, rollD20(sizeMod));
|
|
const environment = weightedRandomItem(environmentOptions, rollD20(0));
|
|
const residentPop = residentPopRoll();
|
|
crimeMod += residentPop.mod;
|
|
const visitorDisposition = weightedRandomItem(visitorDispositionOptions, rollD20(0));
|
|
const lawEnforcement = lawEnforcementRoll();
|
|
crimeMod += lawEnforcement.mod;
|
|
const leadership = leadershipRoll();
|
|
const wealth = wealthRoll(popWealth);
|
|
crimeMod += wealth.mod;
|
|
const crime = weightedRandomItem(crimeOptions, rollD20(crimeMod));
|
|
const shops = shopRoll(postSize);
|
|
const services = serviceRoll(postSize);
|
|
return `Origin: ${origin}
|
|
Speciality: ${specialiaty}
|
|
Age: ${age.string}
|
|
Condition: ${condition.string}
|
|
Visitor Traffic: ${visitorTraffic.string}
|
|
Trading Post Size: ${postSize}
|
|
Environment: ${environment}
|
|
Resident Population: ${residentPop.string}
|
|
Disposition to Visitors: ${visitorDisposition}
|
|
Law Enforcement: ${lawEnforcement.string}
|
|
Leadership: ${leadership}
|
|
Wealth: ${wealth.string}
|
|
Crime: ${crime}
|
|
Shops: ${shops}
|
|
Services: ${services}`;
|
|
}
|
|
function serviceRoll(tradingPostSize) {
|
|
let shopAmount = 0;
|
|
switch (tradingPostSize) {
|
|
case "Tiny":
|
|
shopAmount = Math.floor(Math.random() * 6 + 1);
|
|
break;
|
|
case "Small":
|
|
shopAmount = Math.floor(Math.random() * 6 + 1) + 1;
|
|
break;
|
|
case "Medium":
|
|
shopAmount = Math.floor(Math.random() * 6 + 1) + 3;
|
|
break;
|
|
case "Large":
|
|
shopAmount = Math.floor(Math.random() * 6 + 1) + 5;
|
|
break;
|
|
case "Very Large":
|
|
shopAmount = Math.floor(Math.random() * 6 + 1) + 7;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
const services = [];
|
|
for (let index = 0; index < shopAmount; index++) {
|
|
const roll = weightedRandomItem(serviceOptions, rollD100(0));
|
|
let hiredHelp = "";
|
|
if (roll.includes("Hired Help")) {
|
|
const helpSize = Math.floor(Math.random() * 12 + 1);
|
|
if (helpSize <= 6) {
|
|
hiredHelp = ": An Individual Person who is hiring out their services of this type";
|
|
}
|
|
if (helpSize <= 10) {
|
|
hiredHelp = ": A Team of people who are hiring out their services of this type";
|
|
} else {
|
|
hiredHelp = ": A Guild that is organised for this type of service ";
|
|
}
|
|
}
|
|
services.push(`${roll + hiredHelp}`);
|
|
}
|
|
return generateStringWithCounts(services);
|
|
}
|
|
function shopRoll(tradingPostSize) {
|
|
let shopAmount = 0;
|
|
switch (tradingPostSize) {
|
|
case "Tiny":
|
|
shopAmount = Math.floor(Math.random() * 8 + 1) + 2;
|
|
break;
|
|
case "Small":
|
|
shopAmount = Math.floor(Math.random() * 8 + 1) + 4;
|
|
break;
|
|
case "Medium":
|
|
shopAmount = Math.floor(Math.random() * 8 + 1) + 6;
|
|
break;
|
|
case "Large":
|
|
shopAmount = Math.floor(Math.random() * 8 + 1) + 8;
|
|
break;
|
|
case "Very Large":
|
|
shopAmount = Math.floor(Math.random() * 8 + 1) + 10;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
const shops = [];
|
|
for (let index = 0; index < shopAmount; index++) {
|
|
const roll = weightedRandomItem(shopOptions, rollD100(0));
|
|
shops.push(roll);
|
|
}
|
|
console.log(shops);
|
|
return generateStringWithCounts(shops);
|
|
}
|
|
function leadershipRoll() {
|
|
const roll = weightedRandomItem(leadershipOptions, rollD20(0));
|
|
let result = roll;
|
|
leadershipOptions.forEach((element) => {
|
|
if (element.string === roll) {
|
|
if (element.string === leadershipOptions[4].string) {
|
|
const sway = Math.floor(Math.random() * 4 + 1);
|
|
switch (sway) {
|
|
case 1:
|
|
result = "Plutocracy (Merchant Group Runs the Post)";
|
|
break;
|
|
case 2:
|
|
result = "Magocracy (Mages and Magic users Run the Post)";
|
|
break;
|
|
case 3:
|
|
result = "Theocracy (Priests and Religious Orders Run the Post)";
|
|
break;
|
|
case 4:
|
|
result = "A Small unknown group Runs the Post";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return result;
|
|
}
|
|
function ageRoll() {
|
|
const roll = weightedRandomItem(ageOptions, rollD20(0));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: 0 };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: 1 };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: 2 };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: -1 };
|
|
}
|
|
if (roll === ageOptions[4].string) {
|
|
return { string: roll, mod: 3 };
|
|
}
|
|
return { string: roll, mod: 4 };
|
|
}
|
|
function wealthRoll(mod) {
|
|
const roll = weightedRandomItem(wealthOptions, rollD20(mod));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: -4 };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: -2 };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: 0 };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: -1 };
|
|
}
|
|
if (roll === ageOptions[4].string) {
|
|
return { string: roll, mod: -2 };
|
|
}
|
|
return { string: roll, mod: -4 };
|
|
}
|
|
function conditionRoll() {
|
|
const roll = weightedRandomItem(conditionOptions, rollD20(0));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: -6 };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: -3 };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: 0 };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: 3 };
|
|
}
|
|
return { string: roll, mod: 6 };
|
|
}
|
|
function visitorTrafficRoll(mod) {
|
|
const roll = weightedRandomItem(visitorTrafficOptions, rollD20(mod));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: [0, 2] };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: [1, 1] };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: [2, 0] };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: [3, -1] };
|
|
}
|
|
return { string: roll, mod: [4, -2] };
|
|
}
|
|
function residentPopRoll() {
|
|
const roll = weightedRandomItem(residentPopulationOptions, rollD20(0));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: 2 };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: 1 };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: 0 };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: -1 };
|
|
}
|
|
return { string: roll, mod: -2 };
|
|
}
|
|
function lawEnforcementRoll() {
|
|
const roll = weightedRandomItem(lawEnforcementOptions, rollD20(0));
|
|
if (roll === ageOptions[0].string) {
|
|
return { string: roll, mod: -8 };
|
|
}
|
|
if (roll === ageOptions[1].string) {
|
|
return { string: roll, mod: -4 };
|
|
}
|
|
if (roll === ageOptions[2].string) {
|
|
return { string: roll, mod: 0 };
|
|
}
|
|
if (roll === ageOptions[3].string) {
|
|
return { string: roll, mod: 4 };
|
|
}
|
|
return { string: roll, mod: 8 };
|
|
}
|
|
function generateStringWithCounts(arr) {
|
|
const counts = {};
|
|
for (const item of arr) {
|
|
counts[item] = (counts[item] || 0) + 1;
|
|
}
|
|
let result = "";
|
|
for (const item in counts) {
|
|
const count = counts[item];
|
|
const itemString = count > 1 ? `${item}s` : item;
|
|
if (result === "") {
|
|
result = `${count} ${itemString}`;
|
|
} else {
|
|
result = `${result}, ${count} ${itemString}`;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// editor/InlineGenerator.ts
|
|
var InlineGeneratorSuggester = class extends import_obsidian3.EditorSuggest {
|
|
constructor(getCompletions, plugin) {
|
|
super(app);
|
|
//An object storing all the Generator functions used by the particular selection
|
|
this.generators = {
|
|
"TradingPost": () => "Trading Post Name: " + generateCityName(this.plugin.settings.citySettings) + "\n" + generateTradingPost(),
|
|
"ElfMale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }),
|
|
"ElfMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }) + " " + elfFamilyNames[Math.floor(Math.random() * elfFamilyNames.length)],
|
|
"ElfFemale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }),
|
|
"ElfFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }) + " " + elfFamilyNames[Math.floor(Math.random() * elfFamilyNames.length)],
|
|
"Orc": () => (0, import_fantasy_name_generator2.nameByRace)("orc"),
|
|
"OrcLastname": () => (0, import_fantasy_name_generator2.nameByRace)("orc") + " " + titleLastNames[Math.floor(Math.random() * titleLastNames.length)],
|
|
"DwarfMale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }),
|
|
"DwarfMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }) + " " + dwarfFamilyNames[Math.floor(Math.random() * dwarfFamilyNames.length)],
|
|
"DwarfFemale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }),
|
|
"DwarfFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }) + " " + dwarfFamilyNames[Math.floor(Math.random() * dwarfFamilyNames.length)],
|
|
"HumanMale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }),
|
|
"HumanFemale": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }),
|
|
"HumanMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "male" }) + " " + familyNameList[Math.floor(Math.random() * familyNameList.length)],
|
|
"HumanFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("elf", { gender: "female" }) + " " + familyNameList[Math.floor(Math.random() * familyNameList.length)],
|
|
"DungeonsLabryinths": () => generateDungeonName(this.plugin.settings.dungeonSettings),
|
|
"InnsTaverns": () => {
|
|
const innInfo = generateInn(this.plugin.settings.innSettings);
|
|
return innInfo.name + "\nDescription: " + innInfo.description + "\nRumors: " + innInfo.rumors;
|
|
},
|
|
"Settlement": () => {
|
|
const CityInfo = FCG2.Settlements.generate();
|
|
const name = generateCityName(this.plugin.settings.citySettings);
|
|
return "Name: " + name + "\nPopulation: " + CityInfo.population + "\nType: " + CityInfo.type.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
},
|
|
"Airships": () => generatorAirships(),
|
|
"Drinks": () => generatorDrinks(this.plugin.settings.drinkSettings),
|
|
"Artifacts": () => generateMiscellaneousArtifacts(),
|
|
"LootTreasure": () => generateLoot(this.plugin.settings.enableCurrency, this.plugin.settings.currencyFrequency, this.plugin.settings.currencyTypes, this.plugin.settings.lootSettings),
|
|
"Metals": () => generatorMetals(),
|
|
"MagicalTrees": () => generatorMagical_trees(),
|
|
"Ship": () => generateShipName(),
|
|
"AnimalGroups": () => generatorAnimal_groups(),
|
|
"Groups": () => generatorGroups(this.plugin.settings.groupSettings),
|
|
"Religion": () => generatorReligions(),
|
|
"AasimarsLastname": () => generatePathfinderName("aasimars", "male", true),
|
|
"CatfolkLastname": () => generatePathfinderName("catfolk", "male", true),
|
|
"FetchlingsLastname": () => generatePathfinderName("fetchlings", "male", true),
|
|
"HalfElfLastname": () => generatePathfinderName("halfelf", "male", true),
|
|
"HalfOrcLastname": () => generatePathfinderName("halforc", "male", true),
|
|
"HobgoblinLastname": () => generatePathfinderName("hobgoblin", "male", true),
|
|
"IfritsLastname": () => generatePathfinderName("ifrits", "male", true),
|
|
"KobaldsLastname": () => generatePathfinderName("kobalds", "male", true),
|
|
"OreadsLastname": () => generatePathfinderName("oreads", "male", true),
|
|
"RatfolkLastname": () => generatePathfinderName("ratfolk", "male", true),
|
|
"SylphsLastname": () => generatePathfinderName("sylphs", "male", true),
|
|
"TenguLastname": () => generatePathfinderName("tengu", "male", true),
|
|
"TiansLastname": () => generatePathfinderName("tians", "male", true),
|
|
"TieflingLastname": () => generatePathfinderName("tiefling", "male", true),
|
|
"UndinesLastname": () => generatePathfinderName("undines", "male", true),
|
|
"AngelMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "male" }),
|
|
"AngelFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "female" }),
|
|
"CavePersonMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "male" }),
|
|
"CavePersonFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "female" }),
|
|
"DarkElfMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "male" }),
|
|
"DarkElfFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "female" }),
|
|
"DemonLastname": () => (0, import_fantasy_name_generator2.nameByRace)("demon") + " " + (0, import_fantasy_name_generator2.nameByRace)("demon"),
|
|
"DragonMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "male" }),
|
|
"DragonFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "female" }),
|
|
"DrowMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "male" }),
|
|
"DrowFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "female" }),
|
|
"FairyMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "male" }),
|
|
"FairyFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "female" }),
|
|
"GnomeMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("gnome", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("gnome", { gender: "male" }),
|
|
"GnomeFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("gnome", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("gnome", { gender: "female" }),
|
|
"GoblinLastname": () => (0, import_fantasy_name_generator2.nameByRace)("goblin") + " " + (0, import_fantasy_name_generator2.nameByRace)("goblin"),
|
|
"HalfDemonMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "male" }),
|
|
"HalfDemonFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "female" }),
|
|
"HalflingMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "male" }),
|
|
"HalflingFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "female" }),
|
|
"HighElfMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "male" }),
|
|
"HighElfFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "female" }),
|
|
"HighFairyMaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("highfairy", { gender: "male" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("highfairy", { gender: "male" }),
|
|
"HighFairyFemaleLastname": () => (0, import_fantasy_name_generator2.nameByRace)("highfairy", { gender: "female" }) + " " + (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "female" }),
|
|
"OgreLastname": () => (0, import_fantasy_name_generator2.nameByRace)("ogre") + " " + (0, import_fantasy_name_generator2.nameByRace)("ogre"),
|
|
"Aasimars": () => generatePathfinderName("aasimars", "male", false),
|
|
"Catfolk": () => generatePathfinderName("catfolk", "male", false),
|
|
"Fetchlings": () => generatePathfinderName("fetchlings", "male", false),
|
|
"HalfElf": () => generatePathfinderName("halfelf", "male", false),
|
|
"HalfOrc": () => generatePathfinderName("halforc", "male", false),
|
|
"Hobgoblin": () => generatePathfinderName("hobgoblin", "male", false),
|
|
"Ifrits": () => generatePathfinderName("ifrits", "male", false),
|
|
"Kobalds": () => generatePathfinderName("kobalds", "male", false),
|
|
"Oreads": () => generatePathfinderName("oreads", "male", false),
|
|
"Ratfolk": () => generatePathfinderName("ratfolk", "male", false),
|
|
"Sylphs": () => generatePathfinderName("sylphs", "male", false),
|
|
"Tengu": () => generatePathfinderName("tengu", "male", false),
|
|
"Tians": () => generatePathfinderName("tians", "male", false),
|
|
"Tiefling": () => generatePathfinderName("tiefling", "male", false),
|
|
"Undines": () => generatePathfinderName("undines", "male", false),
|
|
"AngelMale": () => (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "male" }),
|
|
"CavePersonMale": () => (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "male" }),
|
|
"DarkElfMale": () => (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "male" }),
|
|
"DragonMale": () => (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "male" }),
|
|
"DrowMale": () => (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "male" }),
|
|
"FairyMale": () => (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "male" }),
|
|
"GnomeMale": () => (0, import_fantasy_name_generator2.nameByRace)("Gnome", { gender: "male" }),
|
|
"HalfDemonMale": () => (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "male" }),
|
|
"HalflingMale": () => (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "male" }),
|
|
"HighElfMale": () => (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "male" }),
|
|
"HighFairyMale": () => (0, import_fantasy_name_generator2.nameByRace)("highfairy", { gender: "male" }),
|
|
"Ogre": () => (0, import_fantasy_name_generator2.nameByRace)("ogre"),
|
|
"AngelFemale": () => (0, import_fantasy_name_generator2.nameByRace)("angel", { gender: "female" }),
|
|
"CavePersonFemale": () => (0, import_fantasy_name_generator2.nameByRace)("cavePerson", { gender: "female" }),
|
|
"DarkElfFemale": () => (0, import_fantasy_name_generator2.nameByRace)("darkelf", { gender: "female" }),
|
|
"Demon": () => (0, import_fantasy_name_generator2.nameByRace)("demon"),
|
|
"DragonFemale": () => (0, import_fantasy_name_generator2.nameByRace)("dragon", { gender: "female" }),
|
|
"DrowFemale": () => (0, import_fantasy_name_generator2.nameByRace)("drow", { gender: "female" }),
|
|
"FairyFemale": () => (0, import_fantasy_name_generator2.nameByRace)("fairy", { gender: "female" }),
|
|
"GnomeFemale": () => (0, import_fantasy_name_generator2.nameByRace)("gnome", { gender: "female" }),
|
|
"Goblin": () => (0, import_fantasy_name_generator2.nameByRace)("goblin"),
|
|
"HalfDemonFemale": () => (0, import_fantasy_name_generator2.nameByRace)("halfdemon", { gender: "female" }),
|
|
"HalflingFemale": () => (0, import_fantasy_name_generator2.nameByRace)("halfling", { gender: "female" }),
|
|
"HighElfFemale": () => (0, import_fantasy_name_generator2.nameByRace)("highelf", { gender: "female" }),
|
|
"HighFairyFemale": () => (0, import_fantasy_name_generator2.nameByRace)("highfairy", { gender: "female" }),
|
|
"PlotStoryHooks": () => generatePlotHook()
|
|
};
|
|
this.getCompletions = getCompletions;
|
|
this.plugin = plugin;
|
|
}
|
|
onTrigger(cursor, editor) {
|
|
const callOut = this.plugin.settings.inlineCallout;
|
|
const escapedCallOut = callOut.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
const regEx = new RegExp(`${escapedCallOut}(\\S*)`);
|
|
const line = editor.getLine(cursor.line);
|
|
const match = line.slice(0, cursor.ch).match(regEx);
|
|
if (!match) {
|
|
return null;
|
|
}
|
|
const start = { line: cursor.line, ch: cursor.ch - match[1].length - callOut.length };
|
|
const end = { line: cursor.line, ch: cursor.ch };
|
|
this.startChar = start;
|
|
this.endChar = end;
|
|
return { start, end, query: match[1] };
|
|
}
|
|
getSuggestions(context) {
|
|
return this.getCompletions().filter((s) => s.toLowerCase().startsWith(context.query.toLowerCase()));
|
|
}
|
|
renderSuggestion(value, el) {
|
|
el.createEl("div", { text: value });
|
|
}
|
|
selectSuggestion(value, _evt) {
|
|
let result = "Not Implemented";
|
|
if (value in this.generators) {
|
|
result = this.generators[value]();
|
|
}
|
|
if (this.plugin.currentEditor) {
|
|
this.plugin.currentEditor.replaceRange(result.toString(), this.startChar, this.endChar);
|
|
}
|
|
}
|
|
};
|
|
|
|
// settings/DefaultSetting.ts
|
|
var DEFAULT_SETTINGS = {
|
|
enableCurrency: false,
|
|
citySettings: {
|
|
prefixArray: ["camp", "castle", "east", "edge", "ever", "great", "mount", "new", "north", "red", "rose", "south", "west"],
|
|
suffixArray: ["avon", "bank", "barrow", "bay", "beach", "bell", "borough", "berg", "bourne", "broad", "bridge", "brook", "brough", "burgh", "burn", "bury", "by", "caster", "chester", "cliffe", "combe", "cot", "cott", "cote", "cove", "croft", "crook", "dale", "den", "din", "dine", "don", "downs", "falls", "field", "fin", "flats", "ford", "fork", "gate", "grove", "ham", "harbour", "heights", "hill", "holm", "hurst", "ing", "kirk", "land", "lake", "latch", "lea", "leigh", "ley", "marsh", "mere", "minster", "mond", "ness", "park", "pilly", "point", "pond", "ridge", "river", "rock", "sett", "side", "son", "stead", "stoke", "stone", "stow", "thorpe", "ton", "tor", "town", "vale", "valley", "well", "wick", "worth", "cadia"]
|
|
},
|
|
innSettings: {
|
|
prefixes: ["The Rusty", "The Cosy", "The Grand", "The Quiet", "The Friendly", "Bashur's", "Harmony", "Harmonic", "Bald Faced", "Black", "Grey", "Silver", "White", "Blue", "Purple", "Green", "The Ugly", "The Pretty", "Ye Ol' Fighting", "The Drunk", "One", "Two", "Three", "Four", "Five", "Busta", "The Terrified"],
|
|
innType: ["Inn", "Lodge", "Tavern", "Rest", "Stop"],
|
|
nouns: ["Phoenix", "Centaur", "Dragon", "Selkie", "Griffin", "Bandersnatch", "Mermaid", "Werewolf", "Dryad", "Golem", "Bugbear", "Goblin", "Tiger", "Cat", "Warrior", "Wizard", "Drop Bear", "Bear", "Lagoon", "Bunyip", "Rat King", "King's", "Automaton", "Beach", "Reaper", "Grim", "Ogre", "Skeleton", "Ghost"],
|
|
desc: [
|
|
"located in the heart of the city, surrounded by bustling marketplaces and busy streets.",
|
|
"nestled in a peaceful and serene countryside, with picturesque views of rolling hills and sprawling fields.",
|
|
"overlooking the sea, with panoramic views of the ocean and a nearby sandy beach.",
|
|
"situated in the heart of a dense forest, surrounded by towering trees and the chirping of birds.",
|
|
"located at the foot of a grand mountain, with stunning views of the rugged peaks and snow-capped summits.",
|
|
"perched on the edge of a cliff, with breathtaking views of the valley below and the distant horizon.",
|
|
"hidden away in a remote corner of the world, surrounded by untouched nature and wildlife.",
|
|
"tucked away in a hidden valley, with tranquil meadows and a crystal-clear lake.",
|
|
"perched on the top of a hill, with magnificent views of the city and the surrounding countryside.",
|
|
"set in a bustling harbour town, with the sound of boats and seagulls in the air.",
|
|
"located in a bustling port city, surrounded by the hustle and bustle of daily life.",
|
|
"nestled in the heart of a peaceful village, surrounded by rolling hills and lush greenery.",
|
|
"overlooking the ocean, with views of the horizon and a nearby pier.",
|
|
"settled deep in the heart of a mysterious jungle, with a cacophony of tropical sounds and vibrant life.",
|
|
"positioned at the edge of a desert, with sweeping views of the sand dunes and the distant horizon.",
|
|
"hidden away in a forgotten corner of the world, surrounded by ancient ruins and mysterious artifacts.",
|
|
"tucked away in a bustling city, with the sound of music and laughter in the air.",
|
|
"perched atop a tall mountain, with sweeping views of the countryside and a majestic waterfall.",
|
|
"set in a serene lake town, with magnificent views of the shimmering lake and the surrounding mountains.",
|
|
"located in the heart of a bustling market town, with the smell of spices and exotic foods wafting in the air.",
|
|
"nestled in a quiet corner of the countryside, surrounded by rolling hills and picturesque views.",
|
|
"overlooking a river, with stunning views of the cascading rapids and the lush riverbank.",
|
|
"situated in the heart of a dense forest, with the sound of birds singing and a canopy of trees.",
|
|
"located at the foot of a majestic mountain range, with breathtaking views of the snow-capped peaks and the distant horizon.",
|
|
"hidden away in a forgotten corner of the world, surrounded by untouched nature and mysterious creatures.",
|
|
"tucked away in a peaceful valley, with tranquil meadows and a babbling brook running nearby.",
|
|
"perched atop a large hill, with sweeping views of the surrounding countryside and a nearby lake.",
|
|
"set in a bustling harbour town, with the sound of waves and seagulls in the air.",
|
|
"located in an ancient city, surrounded by vibrant culture and the bustling of daily life.",
|
|
"nestled in the heart of a peaceful village, surrounded by rolling fields and lush greenery.",
|
|
"overlooking a bustling port town, with breathtaking views of the harbor and its many boats.",
|
|
"situated deep in the heart of a mysterious swamp, with a cacophony of strange sounds and vibrant wildlife.",
|
|
"positioned at the edge of a vast desert, with magnificent views of the sand dunes and the distant horizon.",
|
|
"hidden away in a secret corner of the world, surrounded by ancient ruins and magical artifacts.",
|
|
"tucked away in a bustling market town, with the smell of exotic spices and fresh produce in the air.",
|
|
"perched atop a steep cliff, with sweeping views of the valley and a nearby waterfall.",
|
|
"set in a tranquil mountain town, with magnificent views of the snow-capped peaks and the surrounding countryside.",
|
|
"located in the heart of a bustling city, surrounded by vibrant culture and the sound of music.",
|
|
"nestled in a peaceful corner of the countryside, surrounded by rolling hills and lush greenery.",
|
|
"overlooking a calm lake, with stunning views of the shimmering water and a nearby pier.",
|
|
"situated in the heart of a dense forest, with the sound of birdsong and a canopy of trees.",
|
|
"located at the foot of a grand mountain range, with breathtaking views of the rugged peaks and distant horizon.",
|
|
"hidden away in a forgotten corner of the world, surrounded by untouched nature and mysterious creatures.",
|
|
"tucked away in a hidden valley, with tranquil meadows and a crystal-clear stream.",
|
|
"perched atop a tall hill, with sweeping views of the surrounding countryside and a nearby lake.",
|
|
"set in a quaint harbour town, with the sound of waves and seagulls in the air.",
|
|
"located in the heart of an ancient city, surrounded by vibrant culture and the bustling of daily life.",
|
|
"nestled in a peaceful corner of the countryside, surrounded by rolling hills and picturesque views.",
|
|
"overlooking a bustling port town, with breathtaking views of the harbor and its many ships.",
|
|
"situated deep in the heart of a mysterious jungle, with a cacophony of tropical sounds and vibrant wildlife.",
|
|
"positioned at the edge of a vast desert, with magnificent views of the sand dunes and distant horizon.",
|
|
"hidden away in a secret corner of the world, surrounded by ancient ruins and mysterious artifacts.",
|
|
"tucked away in a bustling market town, with the smell of spices and exotic foods wafting in the air.",
|
|
"perched atop a steep cliff, with sweeping views of the valley and a majestic waterfall.",
|
|
"set in a serene mountain town, with magnificent views of the snow-capped peaks and the surrounding countryside.",
|
|
"located in a bustling port city, surrounded by the hustle and bustle of daily life.",
|
|
"nestled in a peaceful corner of the countryside, surrounded by rolling fields and lush greenery.",
|
|
"overlooking the sea, with panoramic views of the ocean and a nearby sandy beach.",
|
|
"situated in the heart of a dense forest, with the sound of birds singing and a canopy of trees.",
|
|
"located at the foot of a majestic mountain range, with breathtaking views of the rugged peaks and the distant horizon.",
|
|
"hidden away in a forgotten corner of the world, surrounded by untouched nature and mysterious creatures.",
|
|
"tucked away in a hidden valley, with tranquil meadows and a crystal-clear lake."
|
|
],
|
|
rumors: [
|
|
"My niece told me about a fugitive found an old tomb when discovered a lake snake. And now defeated a superior foe in single combat.",
|
|
"My stepson told me about a monarchist found a magic item when discovered a vampire. And now the moon might fracture!.",
|
|
"They say that a religious emissary was seen with a drunk down near the merchant quarter and there was a lich. People heard it from a viking warrior, so it is probably just idle gossip.",
|
|
"Passers-by talk about the disappearance of someone. They mention a hidden fort said to house something truly abnormal, somewhere out by the waterfall. If asked further, people will tell you, it should be avoided at all cost. In addition a priest at a local temple asks the players to collect something from there.",
|
|
"People have heard that a disgraced executioner was seen with snake wine down near the mages guild and there was a hippogriff.",
|
|
"Believably a historical archivist was seen with a strange man from the inn down near the crafts guild and there was a soul gathering demon. People heard it from eighty-six pixies in a trench coat, so it is likely true.",
|
|
"Nailed to a tree is a small note with a warning to all about a dark park with the etchings of a dark ritual, somewhere in the catacombs. If asked further, people will tell you, people who\u2019ve seen it are not the same. In addition a local shopkeeper hushes on the players and leads them to his/her home, when asked about the place.",
|
|
"When they want to scare the children, the locals tell a story of a dragon-tamer in the mountains was seen with an escaped convict down near the crafts guild and nearby there was a dead noble.",
|
|
"Apparently the local dragon has been cursed by a witch to ceaselessly wander through the forest, spontaneously combusting. People heard it from an old Guard, so it is probably true.",
|
|
"A rumor is circulating that a strange creature lurks in the depths of the nearby forest. It is said that it draws its strength from the shadows and that it can only be seen with the help of a special amulet.",
|
|
"Rumor has it that a royal knight was seen with a strange woman down near the druid grove and there was a banshee.",
|
|
"It is said that a lost city exists in the desert, full of treasures, guarded by a powerful being. People heard it from a strange old man at the market, so it is likely true.",
|
|
"The villagers talk of a witch that lives in the nearby swamp. It is said that she can be seen during the full moon, dancing around a fire in the night sky.",
|
|
"A rather silly rumour has been circulating that a powerful wizard has opened a portal to the underworld. People heard it from a mysterious traveller, so it is probably just idle gossip.",
|
|
"People whisper that a foreign prince has been in the area. It is said that he is searching for a magical artifact that will give him untold power.",
|
|
"The bards tell a tale of a powerful warrior who has laid claim to a cursed temple in the mountains. It is said that anyone who enters risks being trapped forever.",
|
|
"Word on the street is that a strange creature lurks in the sewers. It is said to be able to control the minds of lesser creatures and even humans.",
|
|
"People whisper that a powerful mage has been seen in the area. It is said that he is searching for an ancient artifact that will grant him immortality.",
|
|
"Rumors abound of a powerful dragon that protects a hidden cave somewhere in the mountains. It is said that anyone who enters must face the dragon in battle.",
|
|
"People have heard that a group of adventurers is on a quest for a magical gem. It is said that it will grant them great power and wealth.",
|
|
"The locals tell a story of a powerful vampire who rules a castle in the mountains. It is said that anyone who enters must face the vampire in battle.",
|
|
"They say that a mysterious stranger has been seen in the area. It is said that he is searching for a magical artifact that will grant him untold power.",
|
|
"People have heard that a powerful witch has opened a portal to the underworld. It is said that anyone who enters will be cursed for eternity.",
|
|
"The bards tell a tale of a powerful wizard who has laid claim to a haunted castle in the forest. It is said that anyone who enters risks his/her life.",
|
|
"Word on the street is that a strange creature is living in the sewers. It is said to be able to manipulate the minds of lesser creatures and even humans.",
|
|
"People whisper that a powerful necromancer has been seen in the area. It is said that he is searching for a powerful artifact that will give him domination over death.",
|
|
"Rumors abound of a powerful dragon that is guarding a hidden temple in the mountains. It is said that anyone who enters must face the dragon in single combat.",
|
|
"People have heard that a group of adventurers are on a quest for a magical amulet. It is said that it will give them great power and wealth.",
|
|
"The locals tell a story of a powerful warlock who rules a castle in the forest. It is said that anyone who enters must face the warlock in single combat.",
|
|
"They say that a mysterious figure has been seen in the area. It is said that he is searching for a magical item that will grant him ultimate power.",
|
|
"People have heard that a powerful witch has opened a portal to the spirit realm. It is said that anyone who enters will be cursed for all eternity.",
|
|
"The bards tell a tale of a powerful mage who has laid claim to an ancient temple in the mountains. It is said that anyone who enters risks being trapped forever.",
|
|
"Word on the street is that a strange creature lurks in the depths of the nearby lake. It is said to be able to control the minds of lesser creatures and even humans.",
|
|
"People whisper that a powerful sorcerer has been seen in the area. It is said that he is searching for a powerful relic that will give him control over the elements.",
|
|
"Rumors abound of a powerful dragon that is guarding a hidden city in the mountains. It is said that anyone who enters must face the dragon in single combat.",
|
|
"People have heard that a group of mercenaries are on a quest for a magical sword. It is said that it will grant them great power and wealth.",
|
|
"The locals tell a story of a powerful witch who rules a castle in the forest. It is said that anyone who enters must face the witch in single combat.",
|
|
"They say that a mysterious figure has been seen in the area. It is said that he is searching for a magical artifact that will grant him total power.",
|
|
"People have heard that a powerful wizard has opened a portal to the astral plane. It is said that anyone who enters will be cursed for eternity.",
|
|
"The bards tell a tale of a powerful necromancer who has laid claim to a haunted tower in the forest. It is said that anyone who enters risks his/her life.",
|
|
"Word on the street is that a strange creature is living in the sewers. It is said to be able to manipulate the minds of lesser creatures and even humans.",
|
|
"People whisper that a powerful warlock has been seen in the area. It is said that he is searching for a powerful relic that will give him mastery over death.",
|
|
"Rumors abound of a powerful dragon that protects a hidden shrine somewhere in the mountains. It is said that anyone who enters must face the dragon in battle.",
|
|
"People have heard that a group of adventurers are on a quest for a magical staff. It is said that it will grant them great power and wealth.",
|
|
"The locals tell a story of a powerful vampire who rules a castle in the mountains. It is said that anyone who enters must face the vampire in single combat."
|
|
]
|
|
},
|
|
currencyTypes: [
|
|
{
|
|
"name": "GP",
|
|
"rarity": "rare"
|
|
},
|
|
{
|
|
"name": "CP",
|
|
"rarity": "common"
|
|
},
|
|
{
|
|
"name": "SP",
|
|
"rarity": "common"
|
|
},
|
|
{
|
|
"name": "PP",
|
|
"rarity": "rarest"
|
|
}
|
|
],
|
|
currencyFrequency: 50,
|
|
drinkSettings: {
|
|
adj: ["Almond", "Amazing", "Ancient", "Angel", "Angelic", "Apple", "Apricot", "Arctic", "Aromatic", "Autumn", "Avocado", "Balanced", "Banana", "Basil", "Bay Leaf", "Beautiful", "Beetroot", "Black", "Blue", "Blueberry", "Boiled", "Brilliant", "Brown", "Brutal", "Burning", "Calm", "Capital", "Caramel", "Catnip", "Cherry", "Cherry Blossom", "Chestnut", "Chilled", "Chilli", "Cinnamon", "Clouded", "Cloudy", "Coconut", "Cool", "Coriander", "Cosmic", "Cranberry", "Crazy", "Crimson", "Cucumber", "Demon", "Demonic", "Dire", "Eastern", "Easy", "Electric", "Elemental", "Evil", "Extreme", "Fainting", "Fallen", "Fancy", "Fantasy", "Fast", "Final", "First", "Flaming", "Flower", "Flying", "Forest", "Fresh", "Frosted", "Frozen", "Fruity", "Garlic", "Gentle", "Ginger", "Gingerroot", "Gleaming", "Glowing", "Grape", "Grapefruit", "Green", "Hazelnut", "High", "Holy", "Honest", "Honey", "Hot", "Hushed", "Icy", "Imaginary", "Incredible", "Infinite", "Innocent", "Insane", "Insanity", "Jasmine", "Kiwi", "Lavender", "Lavish", "Lemon", "Lemonade", "Lemongrass", "Lemony", "Lime", "Low", "Lucky", "Mad", "Mango", "Melon", "Mild", "Milk", "Milky", "Mint", "Minty", "Molten", "Mountain", "Mystic", "Nasty", "Nimble", "Noble", "Northern", "Noxious", "Numb", "Nutmeg", "Nutty", "Oak", "Oaken", "Oblivious", "Obvious", "Orange", "Oregano", "Palm", "Paranoid", "Passion Fruit", "Peacan", "Peanut", "Pear", "Peppermint", "Perfect", "Pineapple", "Pink", "Potato", "Precious", "Pure", "Rainbow", "Red", "River", "Rose", "Rose Petal", "Rosemary", "Rotten", "Rough", "Rude", "Rushed", "Saffron", "Salt 'n Pepper", "Salty", "Sanguine", "Savage", "Scented", "Secret", "Silent", "Smooth", "Southern", "Spearmint", "Spiced", "Spicy", "Spirit", "Spring", "Stale", "Steamy", "Sticky", "Strawberry", "Sugar", "Sugary", "Summer", "Surprised", "Sweet", "Tarragon", "Thyme", "Tiny", "Tomato", "Tropic", "Tropical", "Twisting", "Ultimate", "Unholy", "Universal", "Unlucky", "Vanilla", "Vanillabean", "Vibrant", "Warm", "Wasabi", "Watermelon", "Western", "Wet", "Whimsical", "Whipped", "White", "Wicked", "Wild", "Willow", "Winged", "Winter", "Wonderful", "Wonderous", "Yellow", "Spicy", "Fruity", "Sour", "Sweet", "Smooth", "Bitter", "Refreshing", "Amigo", "Arrow", "Ball", "Barrage", "Bear", "Blast", "Blaze", "Bliss", "Blitz", "Blizzard", "Blood", "Blossom", "Bolt", "Bomb", "Breeze", "Bruiser", "Bubble", "Bull", "Burst", "Buzzer", "Cooler", "Crash", "Critter", "Crush", "Crusher", "Crystal", "Delight", "Dog", "Double", "Drop", "Duke", "Dutchess", "Earthquake", "Eclipse", "Eight", "Enigma", "Eye", "Five", "Flash", "Fluff", "Fluffy", "Four", "Freedom", "Fury", "Giant", "Gloom", "Grog", "Heaven", "Hell", "Hopper", "Horn", "Horror", "Hound", "Howler", "Infusion", "Jam", "Joke", "Joker", "Joy", "Killer", "Kiss", "Kisses", "Knight", "Lady", "Lagoon", "Light", "Lion", "Lord", "Lotus", "Lover", "Major", "Minor", "Mix", "Monsoon", "Moonshine", "Mud", "Murder", "Nectar", "Night", "Nightfall", "Orb", "Paradise", "Paralyzer", "Parody", "Passion", "Pearl", "Pecker", "Petal", "Phantom", "Plus", "Pop", "Puff", "Punch", "Rage", "Riddle", "Roar", "Rumble", "Rush", "Score", "Scream", "Seven", "Shadow", "Shield", "Shot", "Shrub", "Silence", "Sip", "Six", "Sizzle", "Slammer", "Slap", "Slapper", "Sling", "Slingshot", "Slush", "Smash", "Smooch", "Snake", "Snowball", "Sour", "Special", "Squeeze", "Stardust", "Starlight", "Stinger", "Storm", "Striker", "Sunrise", "Sunset", "Surge", "Talon", "Teaser", "Temper", "Tempest", "Thrill", "Thriller", "Thunder", "Ticker", "Tickle", "Tonic", "Tornado", "Torrent", "Touch", "Tremor", "Twilight", "Twister", "Velour", "Velvet", "Vengeance", "Volcano", "Volley", "Wacker", "Walk", "Walker", "Wave", "Whisper", "Whistle", "Wink", "Wonder", "Zombie"],
|
|
nouns: ["Cocktail", "Smoothie", "Shake", "Juice", "Iced Tea", "Lemonade", "Soda", "Ale", "Brandy", "Tea", "Tea", "Sherry", "Brew", "Cappuchino", "Cider", "Coffee", "Cognac", "Dark Ale", "Dark Beer", "Drink", "Espresso", "Gin", "Java", "Lager", "Light Ale", "Light Beer", "Mead", "Mocha", "Red Wine", "Rum", "Sake", "Tea", "Tonic", "Vodka", "Whiskey", "White Wine", "Wine"]
|
|
},
|
|
lootSettings: {
|
|
adj: ["old", "tattered", "rotten", "shiny", "polished", "rusty", "broken", "priceless", "ancient", "precious", "shiny", "glowing", "mysterious", "ancient", "enchanted", "ornate", "magical", "powerful"],
|
|
items: [
|
|
{ item: "feather", weight: 0.8 },
|
|
{ item: "sword", weight: 0.2 },
|
|
{ item: "bow", weight: 0.2 },
|
|
{ item: "wand", weight: 0.1 },
|
|
{ item: "armor", weight: 0.2 },
|
|
{ item: "shield", weight: 0.1 },
|
|
{ item: "amulet", weight: 0.1 },
|
|
{ item: "ring", weight: 0.1 },
|
|
{ item: "book", weight: 0.2 },
|
|
{ item: "scroll", weight: 0.2 },
|
|
{ item: "potion", weight: 0.3 },
|
|
{ item: "trinket", weight: 0.3 },
|
|
{ item: "gemstone", weight: 0.2 },
|
|
{ item: "wand core", weight: 0.1 },
|
|
{ item: "tome", weight: 0.2 },
|
|
{ item: "relic", weight: 0.1 },
|
|
{ item: "spellbook", weight: 0.2 },
|
|
{ item: "grimoire", weight: 0.2 },
|
|
{ item: "tome", weight: 0.2 },
|
|
{ item: "journal", weight: 0.2 },
|
|
{ item: "ledger", weight: 0.1 },
|
|
{ item: "diary", weight: 0.1 },
|
|
{ item: "healing potion", weight: 0.2 },
|
|
{ item: "mana potion", weight: 0.2 },
|
|
{ item: "invisibility potion", weight: 0.1 },
|
|
{ item: "poison", weight: 0.1 },
|
|
{ item: "love potion", weight: 0.1 },
|
|
{ item: "strength potion", weight: 0.1 },
|
|
{ item: "speed potion", weight: 0.1 },
|
|
{ item: "water breathing potion", weight: 0.1 },
|
|
{ item: "fire resistance potion", weight: 0.1 },
|
|
{ item: "flying potion", weight: 0.1 },
|
|
{ item: "locket", weight: 0.2 },
|
|
{ item: "charm", weight: 0.3 },
|
|
{ item: "statue", weight: 0.2 },
|
|
{ item: "figurine", weight: 0.2 },
|
|
{ item: "music box", weight: 0.1 },
|
|
{ item: "dagger", weight: 0.1 },
|
|
{ item: "pen", weight: 0.1 },
|
|
{ item: "hourglass", weight: 0.1 },
|
|
{ item: "pipe", weight: 0.1 },
|
|
{ item: "goblet", weight: 0.1 },
|
|
{ item: "candle", weight: 0.2 }
|
|
]
|
|
},
|
|
groupSettings: {
|
|
adj: ["azure", "black", "blue", "brass", "bronze", "brown", "cardinal", "cobalt", "copper", "crimson", "crystal", "demon", "denim", "diamond", "ebony", "electric", "emerald", "fire", "flame", "gold", "green", "grey", "grizzly", "ice", "ivory", "jade", "onyx", "orange", "red", "royal", "ruby", "sanguine", "sapphire", "scarlet", "thunder", "violet", "white", "yellow", "", "", "", "", "", "", "", "", "", "", "", ""],
|
|
nouns: ["alien", "alligator", "angel", "badger", "banner", "bat", "bear", "blood", "blooddrop", "blossom", "boar", "bull", "bulldog", "butterfly", "chainsaw", "cobra", "coyote", "crocodile", "cross", "crow", "death", "demon", "devil", "dragon", "dragonfly", "dragontooth", "dwarf", "eagle", "elephant", "enigma", "fang", "forsaken", "ghost", "gorilla", "hand", "hog", "honey badger", "horn", "jackal", "knife", "knuckle", "leopard", "lily", "lion", "liontooth", "mamba", "mammoth", "monkey", "moth", "needle", "owl", "phantom", "pygmy", "pincer", "pistol", "rat", "raven", "ravenclaw", "razor", "reaper", "rebel", "rider", "rose", "saber", "sabortooth", "serpent", "shark", "sharkfin", "sharktooth", "skeleton", "skull", "snake", "spider", "sword", "tear", "thorn", "tiger", "toad", "troll", "undead", "viper", "vulture", "warthog", "water", "wolf", "wolverine"],
|
|
nounsP: ["aliens", "alligators", "angels", "badgers", "bats", "bears", "blooddrops", "bloods", "blossoms", "boars", "bulldogs", "bulls", "butterflies", "chainsaws", "cobras", "coyotes", "crocs", "crosses", "crows", "demons", "devils", "dragonflies", "dragons", "dwarves", "eagles", "elephants", "enigmas", "fangs", "forsaken", "ghosts", "gorillas", "growlers", "hogs", "honey badgers", "horns", "jackals", "knives", "knuckles", "leopards", "lilies", "lions", "mambas", "mammoths", "monkeys", "moths", "needles", "owls", "phantoms", "pigmies", "pillagers", "pincers", "pistols", "plunderers", "rats", "ravenclaws", "ravens", "razors", "reapers", "rebels", "riders", "roses", "sabors", "seals", "serpents", "sharkfins", "sharks", "sharkteeth", "skeletons", "skulls", "slicers", "snakes", "spiders", "swords", "takers", "tears", "thorns", "tigers", "toads", "trolls", "undead", "vipers", "vultures", "warthogs", "wolverines", "wolves"],
|
|
groupTypes: ["association", "band", "brotherhood", "clan", "company", "crew", "gang", "posse", "riders", "soldiers", "squad", "syndicate", "tribe"],
|
|
singleDescriptors: ["abandoned", "anarchists", "anonymous", "chargers", "damnation", "day walkers", "dead eyes", "destroyers", "disciples", "doom bringers", "dreamers", "liberated", "liberation front", "empty eyes", "eternals", "faceless ones", "fallen angels", "forsaken", "grim reapers", "hopeless", "hopeless ones", "hunters", "idealists", "immortals", "invincibles", "invisibles", "kings", "life takers", "loners", "men of limbo", "men of the night", "women of limbo", "women of the night", "mob", "nameless", "night stalkers", "poison ivies", "purgatory", "ravagers", "risen demons", "salvation", "shadows", "silence", "silent death", "silent footsteps", "soul stealers", "soulless ones", "united front", "unseen", "untamed", "voiceless ones", "void", "whisperers", "wild ones", "wildlings"]
|
|
},
|
|
dungeonSettings: {
|
|
dungeonTypes: ["Maze", "Crypt", "Grotto", "Dungeon", "Cavern", "Keep", "Tower", "Catacombs", "Lair", "Hideout", "Vault", "Fortress", "Bunker", "Cave", "Pit", "Bogs", "Chasms", "Ruins", "Delves", "Chambers", "Crypts", "Mine", "Cells", "Labyrinth", "Caverns", "Den", "Stronghold", "Bastion", "Dungeons", "Warrens", "Tomb", "Delve", "Chapel", "Caves", "Bastille"],
|
|
adjectives: ["Serene", "Splendid", "Fearful", "Harmonious", "Foreboding", "Unfathomable", "Imposing", "Unpleasant", "Haunted", "Rotting", "Menacing", "Decaying", "Fanciful", "Grim", "Unforgettable", "Secretive", "Stately", "Horrific", "Spooky", "Salubrious", "Hostile", "Malevolent", "Majestic", "Vast", "Glittering", "Ghastly", "Mystical", "Inviting", "Sacred", "Noxious", "Vibrant", "Wicked", "Radiant", "Tenebrous", "Sumptuous", "Shadowy", "Repugnant", "Glorious", "Mystical", "Claustrophobic", "Unwholesome", "Grand", "Dreary", "Unspeakable", "Ancient", "Peaceful", "Serene", "Warp", "Pestilent", "Ornate", "Mysterious", "Grotesque", "Cursed", "Splendid", "Idyllic", "Dingy", "Prosperous", "Stunning", "Inspiring", "Dire", "Magnificent", "Catacomblike", "Palatial", "Rotten", "Majestic", "Exotic", "Mystical", "Abundant", "Insidious", "Flourishing", "Scenic", "Miserable", "Stygian", "Sublime", "Ominous", "Cryptic", "Vibrant.", "Lush", "Luxurious", "Uninviting", "Putrescent", "Revolting", "Epic", "Stifling", "Dim", "Dismal", "Festering", "Gloomy", "Putrid", "Lurid", "Abandoned", "Terrifying", "Morbid", "Macabre", "Errie", "Hidden", "Majestic", "Fetid", "Gory", "Opulent", "Narrow", "Foul", "Dark", "Isolated", "Lavish", "Glowing", "Hallowed", "Enchanting", "Cryptlike", "Baffling", "Eerie", "Sacrilegious", "Vile", "Labyrinthine", "Miraculous", "Magical", "Spectacular", "Dangerous", "Detestable", "Restrictive", "Arcane", "Oppressive", "Rank", "Secluded", "Barbaric", "Nefarious", "Agonizing", "Monumental", "Horrendous", "Desolate", "Abhorrent", "Sinister", "Squalid", "Frightening", "Wretched", "Weird", "Direful", "Regal", "Beautiful", "Gruesome", "Grandiose", "Prosperous", "Somber"],
|
|
nouns: ["Monk", "Gremlin", "Avenger", "Werewolf", "Chimera", "Peryton", "Satyrfolk", "Cyclops", "Hunter", "Fox", "Gorgon", "Weasel", "Cockatrice", "Wyvernfolk", "Elfman", "Witch", "Siren", "Satyr", "Leopard", "Jabberwock", "Wolfman", "Assassin", "Goblinoid", "Centaurfolk", "Dryad", "Owl", "Spritefolk", "Hippogriff", "Queen", "Hawk", "Mole", "Bear", "Ranger", "Duke", "Griffin", "Champion", "Raven", "Gladiator", "Lamia", "Lammasu", "Humanoid", "Ogre", "Hobgoblin", "Knight", "Falcon", "Orcfolk", "Centaurman", "Illusionist", "Wisp", "Dragon", "Imp", "Princess", "Necromancer", "Mermaidfolk", "Lion", "Goblin", "Quetzal", "Manticore", "Wraith", "Dragonman", "Stag", "Badger", "Vampire", "Cockroach", "Gnomefolk", "Kelpie", "Centaur", "Witchfolk", "Baron", "Wolf", "Beaver", "Basilisk", "Cleric", "Mage", "Banshee", "Lady", "Dwarf", "Lord", "Succubus", "Seer", "Wizard", "Nymph", "Goblinman", "Jester", "Squirrel", "Archer", "King", "Acolyte", "Conjurer", "Count", "Mouse", "Mercenary", "Alchemist", "Mermaid", "Minotaur", "Priest", "Boar", "Rogue", "Warrior", "Harpy", "Unicorn", "Rat", "Baroness", "Thaumaturge", "Trickster", "Phoenix", "Sphinx", "Warlock", "Enchanter", "Druid", "Ratfolk", "Herald", "Impish", "Gnome", "Orc", "Minotaurman", "Eagle", "Sorcerer", "Summoner", "Elf", "Rabbit", "Snakefolk", "Ferret", "Troll", "Prince", "Mystic", "Nymphfolk", "Countess", "Duchess", "Shaman", "Spider", "Scout", "Paladin", "Goblinfolk", "Kobold", "Orcman", "Skunk", "Catfolk", "Sprite", "Wyvern", "Elffolk", "Beastman", "Wizardfolk", "Hydra"],
|
|
locations: ["an abandoned castle in a desolate wasteland", "an underground temple deep beneath the mountains", "a forgotten city in the desert", "an ancient ruin in the middle of an ocean", "a deep cave within a mountain range", "an icy glacier at the top of the world", "a dark and mysterious swamp", "a haunted graveyard in a foggy forest", "a cursed castle hidden in the clouds", "an enchanted forest within a dense jungle", "a lost pyramid in the middle of the sea", "an underground labyrinth beneath a volcano", "a forgotten island in the middle of a lake", "a mystical cave within a mountain range", "an abandoned temple in a dense jungle", "a mysterious castle within a deep valley", "an underground complex beneath a mountain", "a hidden oasis in a desert", "an ancient city in a frozen tundra", "an underground fortress in a cave", "a sunken temple beneath the sea", "an enchanted lake in a magical forest", "a forgotten ruin in the middle of a swamp", "an ancient citadel in a snowcovered mountain", "an abandoned mine in a dark forest", "a hidden valley in the middle of a desert", "a deep chasm in a haunted forest", "a strange tower in the middle of a swamp", "a mysterious island in the middle of a lake", "an underground lair in a mysterious cave", "a mystical temple in a dense jungle", "a forgotten castle in a snowcapped mountain", "a ruined city in a deep ravine", "an ancient temple in a dense forest", "a hidden fortress in a foggy valley", "a mysterious complex in a frozen tundra", "a haunted castle in a forbidden valley", "an underground chamber beneath a volcano", "an enchanted cave in a mysterious mountain", "a forgotten ruin in the middle of a lake", "a cursed forest in a mysterious valley", "an ancient crypt in a dark forest", "a lost temple beneath a frozen glacier", "a strange tower in a desolate wasteland", "an abandoned mine in a mountain range", "a hidden valley in a snowcovered mountain", "a hidden sanctuary in a dense jungle", "an underground city in a deep ravine", "a mysterious oasis in the middle of a desert", "an underground laboratory in a mysterious cave", "a strange castle in an icy tundra", "a secret laboratory in a haunted forest", "a forgotten temple in a mysterious valley", "a magical city in a hidden valley", "a cursed temple in a dense forest", "an ancient ruin in a deep ravine", "a mysterious cave in a foggy mountain", "a hidden fortress in a snowcapped mountain", "an abandoned castle in a forbidden forest", "a hidden temple in a cursed swamp", "a forgotten city in a dark cave", "an underground laboratory beneath a volcano", "an enchanted castle in a mystical forest", "a secret lair in an icy glacier", "a cursed temple in an enchanted lake", "a strange ruin in the middle of an ocean", "a lost tower beneath the sea", "a mysterious complex in a deserted island", "a haunted temple in a dense jungle", "a forgotten ruin in a mysterious valley", "an abandoned crypt in a foggy forest", "a dark and foreboding castle in a hidden valley", "an underground city beneath a snowcapped mountain", "a secret laboratory in a forbidden swamp", "an ancient ruin in a magical forest", "a mysterious tower in a deep ravine", "a cursed castle in a desert", "a lost temple in a dense jungle", "an enchanted oasis in the middle of a lake", "an underground complex in a haunted forest", "a strange city in a frozen tundra", "a hidden sanctuary in a mysterious cave", "a forgotten fortress in a foggy valley", "a cursed city in a snowcovered mountain", "an ancient temple in a forbidden valley", "a mysterious island in the middle of a sea", "a strange ruin in a magical forest", "a haunted castle in an icy glacier", "a secret laboratory in a dark forest", "a forgotten city in a deep ravine", "a cursed temple in a dense jungle", "an underground crypt beneath a volcano", "a hidden fortress in a desert", "a lost temple in a snowcovered mountain", "a mysterious oasis in a foggy valley", "an abandoned mine in a forbidden forest", "a hidden valley in an enchanted lake", "a cursed castle in a forbidden valley", "an abandoned temple in a cursed swamp", "an underground city in a dark cave", "a secret laboratory beneath a volcano", "a snowcovered mountain peak", "an underground cavern", "a hidden island", "an old castle ruin", "a deserted mine", "the ruins of an ancient city", "a labyrinth of winding tunnels", "an enchanted forest", "a deep dark cave", "a longforgotten temple", "a moonlit graveyard", "a longabandoned dungeon", "a hidden grotto", "a remote desert oasis", "a foggy jungle", "a sundrenched beach", "an isolated island in the middle of the sea", "an underground river", "a mountaintop observatory", "a ruined fortress on a cliff", "an eerie marshland", "a misty castle on a hill", "a dark and spooky cave entrance", "a narrow canyon", "a strange abandoned shack", "a mysterious cave complex", "a gloomy swamp", "a lost temple in the jungle", "an icy cavern", "a sacred burial ground", "a hidden passage within a mountain", "a magical fountain", "a bridge over an abyss", "a haunted tower", "an ancient temple beneath a volcano", "a mystical island in the sky", "a creepy castle on a remote island", "an eerie village in the fog", "a secret entrance to a hidden valley", "a cursed tomb", "an ocean cave", "a terrible underground catacomb", "a longlost temple in the desert", "a haunted house in a dark forest", "a fogshrouded castle ruins", "an enchanted garden full of secrets", "a secluded temple deep in the jungle", "a cursed lake with black water", "a strange castle inside a mountain", "a dark swamp full of creatures", "a secluded cove where an old pirate ship once sailed", "a forbidden temple in a mysterious temple", "a hidden waterfall", "an abandoned laboratory", "an enchanted castle atop a breathtaking mountain", "an underground citadel", "a hidden mine beneath a mountain", "a cursed castle", "a deep crevice leading to an ancient city", "a dead city filled with forgotten secrets", "ancient ruins of a mysterious civilization", "a dark and dangerous labyrinth", "a magical grove in the heart of a dark forest", "an old wizards tower", "an underground chamber hidden beneath a waterfall", "a strange mausoleum full of secrets", "a lonely island with a hidden temple", "a forgotten underground cemetery", "an abandoned castle on a cliff overlooking the sea", "a hidden cave leading to a lost kingdom", "an eerie canyon full of secrets", "a magical castle surrounded by a sea of sand", "a mysterious cave deep in the mountain", "an enchanted lake where no one ever goes", "a secret temple high in the clouds", "a secluded cave in a mountain valley", "an old abandoned mine in the middle of the desert", "a haunted tower on a sea cliff", "an ancient ruins hidden in a volcano", "a mysterious waterfall hidden in a jungle"],
|
|
randomDesc: ["containing the remains of historical figures", "being filled with untold secrets and mysteries", "hosting powerful and rare artifacts", "inhabited by powerful and ancient beings", "containing a powerful and mystical source of dark magic", "possessing powerful corridors connecting to other planes of existence", "sealed away by powerful magic", "covered in strange runes and symbols", "encircled by impassable mountain walls", "created by powerful technicians and scientists", "containing untold wealth and valuable treasures", "being filled with hidden passageways and rooms", "protected by powerful guardians with numerous abilities", "filled with creatures of unknown origin", "constructed out of an unknown and durable black stone", "having powerful spells and wards placed upon it", "filled with puzzles and challenges designed to test its visitors", "a forgotten sanctuary abandoned long ago", "filled with powerful and ancient artifacts lost since the dawn of time", "housing a powerful magical artifact capable of altering reality", "possessing powerful secrets and hidden lore known only to its inhabitants", "surrounded by a thick fog trapping its secrets inside", "haunted by its dark and ancient past", "overrun by creatures of the night", "containing an entrance to an alternate realm", "protected by a powerful force field preventing its secrets from escaping", "built with a watchful dragon sleeping within its walls", "guarded by powerful devils sworn to protect its secrets", "beneath a cursed lake hidden from prying eyes", "protected by powerful traps and puzzles created to inspire fear", "inhabited by powerful witches searching for their lost tomes", "being the home to powerful and ancient libraries containing wisdom and magic", "filled with forgotten architecture and sculptures never before seen by man", "containing passageways which lead to dark and sinister places", "shielded by powerful wards binding its secrets to its walls", "filled with powerful spirits left behind after a great battle", "guarded by powerful necromancers wielding curses and dark magics", "a refuge for powerful creatures exiled from their homes", "enchanted by powerful wizards granting access to hidden secrets", "containing powerful summoning circles allowing its inhabitants to call forth their allies", "protected by powerful golems protecting the dungeon from all intruders", "filled with powerful artifacts capable of altering reality", "having powerful essence imbued within its walls granting its inhabitants incredible powers", "possessing powerful guardians sworn to protect its secrets", "hidden away by powerful forces attempting to prevent its secrets from escaping", "hosting powerful and dark creatures seeking to wreak havoc on the world", "filled with powerful enchantments and magical artifacts capable of altering the fabric of reality", "possessing powerful artifacts capable of granting incredible power to those who touch them", "guarded by powerful undead sworn to keep its secrets locked away forever", "beneath the frozen mountains deep within its icy depths", "being filled with chaotic energy making it an unpredictable and dangerous place", "having powerful seals placed upon it attempting to contain its formidable power", "haunted by the spirits of those who have perished within its walls", "having powerful magical items scattered throughout its depths", "inhabited by powerful creatures capable of turning the tide of any battle", "inhabited by powerful mages capable of bending the fabric of reality", "hiding unthinkable evils and ancient secrets beneath its depths", "guarded by powerful dragons attempting to prevent its secrets from escaping", "inhabited by powerful creatures unrivaled in their ferocity", "overrun by powerful beasts seeking to consume anything in their path", "containing powerful enchantment stones capable of granting incredible powers", "filled with powerful enchantments and magical artifacts capable of altering the course of a battle", "inhabited by powerful and mysterious creatures seemingly indestructible", "guarded by powerful demi-gods sworn to protect its secrets", "filled with powerful and ancient entities seeking to test its visitors", "containing a powerful magical artifact capable of granting the user unlimited power", "hiding powerful artifacts capable of speaking to the dead", "constructed from powerful and ancient magic capable of unparalleled feats", "consumed by powerful energies seeking to overpower its visitors", "haunted by the memories of its past inhabitants", "filled with powerful and unstable magical artefacts capable of granting incredible strength", "guarded by powerful and ancient creatures sworn to keep its secrets hidden forever", "containing powerful arcane wards placed upon it to contain its secrets", "guarded by powerful giants attempting to keep its secrets locked away forever", "filled with powerful magical artifacts capable of healing harming and transforming", "devoid of natural light only illuminated by powerful magical energies", "protected by powerful elementals sworn to keep its secrets hidden", "filled with powerful spirits seeking to protect its inhabitants from harm", "filled with powerful and ancient magics able to alter the course of history", "filled with powerful demons attempting to breach its walls and steal its secrets", "possessing powerful crystals emitting an unknown and powerful energy", "filled with powerful artifacts and creatures capable of immense destruction", "inhabited by powerful and dark creatures waiting to take revenge on the world", "protected by powerful enchantments preventing its secrets from being revealed", "guarded by powerful and ancient spirits sworn to protect its secrets", "saturated with powerful energies capable of altering the reality of its inhabitants", "guarded by powerful and ancient wizards seeking to protect its secrets", "possessing powerful magical forces capable of altering the fabric of reality", "inhabited by powerful and mysterious creatures held in check by powerful forces", "shielded by powerful and ancient guardians sworn to keep its secrets hidden", "overrun by powerful and ancient monsters seeking to enslave its inhabitants", "guarded by powerful and mysterious forces seeking to protect its secrets", "inhabited by powerful and dangerous creatures threatening to unleash havoc upon the world", "inhabited by powerful beings locked in a never-ending battle of good and evil", "containing powerful artifacts capable of granting unimaginable power to those who wield them", "guarded by powerful warriors sworn to keep its secrets safe from those who would seek to use them against it", "containing powerful and dark magics capable of reshaping the world around it", "inhabited by powerful creatures of old having been forgotten by the world", "held together by powerful enchantments preventing its secrets from escaping", "designed as a powerful prison containing untold evils and creatures of darkness", "protected by powerful magical runes inscribing its secrets into the walls", "containing powerful and mysterious artifacts capable of granting wishes", "inhabited by powerful entities seeking to preserve the secrets within", "filled with powerful and dangerous creatures capable of destroying civilizations", "overrun by powerful and mysterious beings seeking to alter the balance of power", "containing powerful and ancient artifacts capable of controlling the minds of its visitors", "guarded by powerful and malevolent creatures seeking to keep its secrets hidden", "filled with powerful and mysterious energies capable of altering the course of history", "containing powerful and unpredictable magic only able to be mastered by the strongest of wills", "containing powerful and ancient secrets capable of unlocking the doors of time", "guarded by powerful and mysterious forces sworn to keep its secrets safe", "inhabited by powerful and mysterious creatures capable of altering reality", "guarded by powerful dragons seeking to keep its secrets hidden away forever", "guarded by powerful and unspeakable horrors whose secrets must never be revealed", "containing powerful and ancient artifacts capable of creating or destroying worlds", "filled with powerful and unstable magic seeking to break free from its walls", "inhabited by powerful and mysterious servants sworn to keep its secrets hidden", "protected by powerful and ancient gods seeking to keep its secrets safe", "containing powerful and hidden artifacts capable of controlling the minds of those who possess it", "shielded by powerful and magical forces sworn to protect its secrets from prying eyes", "constructed with powerful and ancient magics capable of unlocking the mysteries of the universe", "guarded by powerful and dangerous creatures sworn to keep its secrets hidden from mankind", "possessing powerful doors leading to unknown and mysterious realms", "containing powerful and strange creatures never before seen on this plane", "protected by powerful enchantments guarding its secrets from those who would seek to exploit them", "guarded by powerful and ancient dragons seeking to protect its secrets", "inhabited by powerful and dark sorcerers searching for the ultimate source of power", "guarded by powerful and ancient witches sworn to keep its secrets hidden forever", "containing powerful and dangerous magical forces threatening to consume the world", "guarded by powerful and mysterious beings capable of granting unimaginable power", "possessing powerful and ancient runes capable of granting its visitors unimaginable powers", "containing powerful and ancient creatures locked in a timeless battle", "protected by powerful and ancient magics capable of granting its visitors incredible power", "filled with powerful and strange magical artefacts capable of unleashing untold destruction", "guarded by powerful and mysterious guardians sworn to keep its secrets safe from outsiders", "containing powerful artifacts capable of manipulating the fabric of reality", "inhabited by powerful and ancient gods seeking to gather its secrets for themselves", "overrun by powerful and mysterious creatures seeking to consume the souls of its inhabitants", "inhabited by powerful and mysterious beings capable of controlling the minds of its visitors", "guarded by powerful and dark forces seeking to keep its secrets hidden away forever", "filled with powerful and magical forces capable of bending the fabric of reality", "inhabited by powerful and evil creatures seeking to wreak destruction upon the world", "inhabited by powerful and ancient spirits searching for lost knowledge", "guarded by powerful and ancient gods seeking to protect its secrets for eternity", "containing powerful and mysterious artifacts capable of altering the course of history", "filled with powerful and strange creatures capable of feats never before seen", "protected by powerful seals and wards seeking to keep its secrets hidden forever", "guarded by powerful and mysterious forces seeking to protect its secrets from outsiders", "containing powerful and forgotten magics capable of reshaping reality", "protected by powerful and ancient enchantments seeking to keep its secrets hidden forever", "containing powerful and mysterious creatures seeking to unlock the secrets of the universe", "guarded by powerful and strange creatures capable of unleashing unimaginable destruction", "inhabited by powerful and dark entities seeking to consume the souls of its inhabitants", "containing powerful and ancient secrets capable of granting its visitors unimaginable power", "containing powerful artifacts capable of granting unimaginable power to those who possess them", "filled with powerful and chaotic magic seeking to break free from its prison", "containing powerful and dark secrets capable of unlocking the doors of time", "inhabited by powerful and mysterious creatures seeking to protect its secrets", "protected by powerful and ancient forces seeking to preserve its secrets long into the future", "surrounded by powerful and ancient forces seeking to protect its secrets from the outside world", "guarded by powerful and ancient gods seeking to protect its secrets from those who seek to misuse them", "protected by powerful and strange creatures capable of granting immense power to its visitors", "inhabited by powerful and ancient spirits seeking to unlock the secrets of the universe"]
|
|
},
|
|
inlineCallout: "@"
|
|
};
|
|
|
|
// settings/SettingsTab.ts
|
|
var import_obsidian4 = require("obsidian");
|
|
var SettingTab = class extends import_obsidian4.PluginSettingTab {
|
|
constructor(app2, plugin) {
|
|
super(app2, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
convertStringToArray(string, arr) {
|
|
const array = string.split(",");
|
|
array.forEach((el) => {
|
|
arr.push(el);
|
|
});
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
createSettingsBlock(containerEl, textA, arr, type, weights) {
|
|
new import_obsidian4.Setting(containerEl).setName(type + " being used").setDesc("Click 'remove' for any item you want removed from the Array");
|
|
new import_obsidian4.Setting(containerEl).setName("New Addition:").addTextArea((text) => {
|
|
text.onChange((value) => {
|
|
textA = value;
|
|
});
|
|
}).addButton((btn) => {
|
|
btn.setCta().setButtonText("Add").onClick(async () => {
|
|
this.convertStringToArray(textA, arr);
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
});
|
|
const foldDiv = containerEl.createEl("details", { cls: "OFCGDetails" });
|
|
foldDiv.createEl("summary", { text: type, cls: "OFCGSummary" });
|
|
for (let index = 0; index < arr.length; index++) {
|
|
new import_obsidian4.Setting(foldDiv).setName(weights ? JSON.stringify(arr[index]) : arr[index]).addButton(
|
|
(btn) => btn.setCta().setButtonText("Remove").onClick(async () => {
|
|
arr.splice(index, 1);
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
})
|
|
);
|
|
}
|
|
containerEl.createEl("hr");
|
|
}
|
|
display() {
|
|
const { containerEl } = this;
|
|
containerEl.empty();
|
|
containerEl.createEl("h1", { text: "Fantasy Content Generator" });
|
|
const generalSettings = containerEl.createDiv("general");
|
|
new import_obsidian4.Setting(generalSettings).setName("Reset To Defaults").setDesc("Click if you would like to use the default settings again").addButton((btn) => {
|
|
btn.setCta().setButtonText("Reset").onClick(async () => {
|
|
this.plugin.settings = DEFAULT_SETTINGS;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
});
|
|
new import_obsidian4.Setting(generalSettings).setName("Inline Generator Callout").setDesc("Set callout character to activate the inline Generator.").addText((text) => {
|
|
text.setValue(String(this.plugin.settings.inlineCallout));
|
|
text.onChange(async (value) => {
|
|
this.plugin.settings.inlineCallout = value;
|
|
await this.plugin.saveSettings();
|
|
});
|
|
});
|
|
const currencyEl = containerEl.createDiv("currencyDiv");
|
|
new import_obsidian4.Setting(currencyEl).setHeading().setName("Currency Settings");
|
|
new import_obsidian4.Setting(currencyEl).setName("Enable Currency for Loot Generation.").setDesc("If you have Currency in your World or game consider Activating this").addToggle((toggle) => {
|
|
toggle.setValue(this.plugin.settings.enableCurrency);
|
|
toggle.onChange(async (value) => {
|
|
this.plugin.settings.enableCurrency = value;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
});
|
|
if (this.plugin.settings.enableCurrency) {
|
|
new import_obsidian4.Setting(currencyEl).setName("Occurance Rate:").setDesc("Set How Frequently Loot generates currency as a percentage of 100").addText((text) => {
|
|
text.setValue(String(this.plugin.settings.currencyFrequency));
|
|
text.onChange(async (value) => {
|
|
if (!isNaN(+value)) {
|
|
this.plugin.settings.currencyFrequency = Number(value);
|
|
await this.plugin.saveSettings();
|
|
}
|
|
});
|
|
});
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(currencyEl).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "currency",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.currencyTypes = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.currencyTypes);
|
|
});
|
|
});
|
|
}
|
|
const ctext = {
|
|
name: "",
|
|
rarity: "common"
|
|
};
|
|
new import_obsidian4.Setting(currencyEl).setName("Currency Name:").addText((text) => {
|
|
text.onChange((value) => {
|
|
ctext.name = value;
|
|
});
|
|
}).addDropdown((drop) => {
|
|
drop.addOption("common", "Common");
|
|
drop.addOption("uncommon", "Uncommon");
|
|
drop.addOption("rare", "Rare");
|
|
drop.addOption("rarest", "Rarest");
|
|
drop.onChange((value) => {
|
|
ctext.rarity = value;
|
|
});
|
|
}).addButton((btn) => {
|
|
btn.setCta().setButtonText("Add").onClick(async () => {
|
|
this.plugin.settings.currencyTypes.push(ctext);
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
});
|
|
new import_obsidian4.Setting(currencyEl).setName("Added currency").setDesc("Click Remove on a Currency you would like to Remove");
|
|
const foldDiv = currencyEl.createEl("details", { cls: "OFCGDetails" });
|
|
foldDiv.createEl("summary", { text: "Currency", cls: "OFCGSummary" });
|
|
for (let index = 0; index < this.plugin.settings.currencyTypes.length; index++) {
|
|
new import_obsidian4.Setting(foldDiv).setName(this.plugin.settings.currencyTypes[index].name).addButton(
|
|
(btn) => btn.setCta().setButtonText("Remove").onClick(async () => {
|
|
this.plugin.settings.currencyTypes.splice(index, 1);
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
})
|
|
);
|
|
}
|
|
}
|
|
currencyEl.createEl("hr");
|
|
const settlementDiv = containerEl.createDiv("settlementDiv");
|
|
new import_obsidian4.Setting(settlementDiv).setHeading().setName("Settlement Settings");
|
|
settlementDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(settlementDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "settlement",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.citySettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.citySettings);
|
|
});
|
|
});
|
|
}
|
|
const preText = "";
|
|
const sufText = "";
|
|
this.createSettingsBlock(settlementDiv, preText, this.plugin.settings.citySettings.prefixArray, "Prefixes", false);
|
|
this.createSettingsBlock(settlementDiv, sufText, this.plugin.settings.citySettings.suffixArray, "Suffixes", false);
|
|
const innDiv = containerEl.createDiv("innDiv");
|
|
new import_obsidian4.Setting(innDiv).setHeading().setName("Inn Settings");
|
|
innDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(innDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "inn",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.innSettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.innSettings);
|
|
});
|
|
});
|
|
}
|
|
const innPreText = "";
|
|
const innTypeText = "";
|
|
const innNounText = "";
|
|
const innDescText = "";
|
|
const innRumorText = "";
|
|
this.createSettingsBlock(innDiv, innPreText, this.plugin.settings.innSettings.prefixes, "Prefixes", false);
|
|
this.createSettingsBlock(innDiv, innTypeText, this.plugin.settings.innSettings.innType, "Type's", false);
|
|
this.createSettingsBlock(innDiv, innNounText, this.plugin.settings.innSettings.nouns, "Nouns", false);
|
|
this.createSettingsBlock(innDiv, innDescText, this.plugin.settings.innSettings.desc, "Description's", false);
|
|
this.createSettingsBlock(innDiv, innRumorText, this.plugin.settings.innSettings.rumors, "Rumors", false);
|
|
const drinkDiv = containerEl.createDiv("drinkDiv");
|
|
new import_obsidian4.Setting(drinkDiv).setHeading().setName("Drink Settings");
|
|
drinkDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(drinkDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "drink",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.drinkSettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.drinkSettings);
|
|
});
|
|
});
|
|
}
|
|
const drinkNounText = "";
|
|
const drinkAdjText = "";
|
|
this.createSettingsBlock(drinkDiv, drinkAdjText, this.plugin.settings.drinkSettings.adj, "Adjectives", false);
|
|
this.createSettingsBlock(drinkDiv, drinkNounText, this.plugin.settings.drinkSettings.nouns, "Nouns", false);
|
|
const lootDiv = containerEl.createDiv("lootDiv");
|
|
new import_obsidian4.Setting(lootDiv).setHeading().setName("Loot Settings");
|
|
lootDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(lootDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "loot",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.lootSettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.lootSettings);
|
|
});
|
|
});
|
|
}
|
|
const lootNounText = "";
|
|
const lootAdjText = "";
|
|
this.createSettingsBlock(lootDiv, lootAdjText, this.plugin.settings.lootSettings.adj, "Adjectives", false);
|
|
this.createSettingsBlock(lootDiv, lootNounText, this.plugin.settings.lootSettings.items, "Items", true);
|
|
const groupDiv = containerEl.createDiv("groupDiv");
|
|
new import_obsidian4.Setting(groupDiv).setHeading().setName("Group Settings");
|
|
groupDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(groupDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "group",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.groupSettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.groupSettings);
|
|
});
|
|
});
|
|
}
|
|
const groupAdjectives = "";
|
|
const groupNouns = "";
|
|
const groupNounsPlural = "";
|
|
const groupTypes = "";
|
|
const groupSingleDescriptors = "";
|
|
this.createSettingsBlock(groupDiv, groupAdjectives, this.plugin.settings.groupSettings.adj, "Adjectives", false);
|
|
this.createSettingsBlock(groupDiv, groupNouns, this.plugin.settings.groupSettings.nouns, "Nouns", false);
|
|
this.createSettingsBlock(groupDiv, groupNounsPlural, this.plugin.settings.groupSettings.nounsP, "Plural Nouns", false);
|
|
this.createSettingsBlock(groupDiv, groupTypes, this.plugin.settings.groupSettings.groupTypes, "Types", false);
|
|
this.createSettingsBlock(groupDiv, groupSingleDescriptors, this.plugin.settings.groupSettings.singleDescriptors, "Descriptors", false);
|
|
const dungDiv = containerEl.createDiv("dungDiv");
|
|
new import_obsidian4.Setting(dungDiv).setHeading().setName("Dungeon Settings");
|
|
dungDiv.createEl("br");
|
|
if (import_obsidian4.Platform.isDesktopApp) {
|
|
const importExportFile = new import_obsidian4.Setting(dungDiv).setName("Import | Export").setDesc("Import A Json File With Supported information");
|
|
const inputAppfile = createEl("input", {
|
|
attr: {
|
|
type: "file",
|
|
name: "dungeon",
|
|
accept: ".json",
|
|
multiple: false
|
|
}
|
|
});
|
|
inputAppfile.onchange = async () => {
|
|
const { files } = inputAppfile;
|
|
if (files === null || !files.length)
|
|
return;
|
|
try {
|
|
const file = files[0];
|
|
importJSON(file.path, async (data) => {
|
|
this.plugin.settings.dungeonSettings = data;
|
|
this.display();
|
|
await this.plugin.saveSettings();
|
|
});
|
|
} catch (e) {
|
|
}
|
|
};
|
|
importExportFile.addButton((b) => {
|
|
b.setButtonText("Choose Import File").setTooltip(
|
|
"Import Json File for the Generator"
|
|
).buttonEl.appendChild(inputAppfile);
|
|
b.buttonEl.addClass("FCGInput");
|
|
b.onClick(() => inputAppfile.click());
|
|
}).addButton((b) => {
|
|
b.setButtonText("Export Section To File").setCta().onClick(() => {
|
|
exportJSON(this.plugin.settings.dungeonSettings);
|
|
});
|
|
});
|
|
}
|
|
const dungAdjectives = "";
|
|
const dungNouns = "";
|
|
const dungTypes = "";
|
|
const dungLocations = "";
|
|
const dungRandomDesc = "";
|
|
this.createSettingsBlock(dungDiv, dungAdjectives, this.plugin.settings.dungeonSettings.adjectives, "Adjectives", false);
|
|
this.createSettingsBlock(dungDiv, dungNouns, this.plugin.settings.groupSettings.nouns, "Nouns", false);
|
|
this.createSettingsBlock(dungDiv, dungLocations, this.plugin.settings.dungeonSettings.locations, "Locations", false);
|
|
this.createSettingsBlock(dungDiv, dungTypes, this.plugin.settings.dungeonSettings.dungeonTypes, "Types", false);
|
|
this.createSettingsBlock(dungDiv, dungRandomDesc, this.plugin.settings.dungeonSettings.randomDesc, "Descriptors", false);
|
|
}
|
|
};
|
|
|
|
// main.ts
|
|
var FantasyPlugin = class extends import_obsidian5.Plugin {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.currentEditor = null;
|
|
}
|
|
//Function used to return the array of options for the suggester.
|
|
getOptionsForSuggest() {
|
|
return possibleOptions;
|
|
}
|
|
async onload() {
|
|
await this.loadSettings();
|
|
this.app.workspace.on("active-leaf-change", (leaf) => {
|
|
if (leaf) {
|
|
const view = leaf.view;
|
|
if (view instanceof import_obsidian5.MarkdownView) {
|
|
this.currentEditor = view.editor;
|
|
} else {
|
|
this.currentEditor = null;
|
|
}
|
|
} else {
|
|
this.currentEditor = null;
|
|
}
|
|
});
|
|
this.addCommand({
|
|
id: "open-fantasy-generator",
|
|
name: "Open Fantasy Generator",
|
|
callback: () => {
|
|
new GeneratorModal(this.app, (result) => {
|
|
const copyContent = async () => {
|
|
try {
|
|
if (result instanceof Error) {
|
|
new import_obsidian5.Notice(`${result}`);
|
|
} else {
|
|
await navigator.clipboard.writeText(result);
|
|
new import_obsidian5.Notice(`${result} was copied to the clipboard.`);
|
|
}
|
|
} catch (err) {
|
|
console.error("Failed to copy: ", err);
|
|
new import_obsidian5.Notice("Failed to copy, Check error in console.");
|
|
}
|
|
};
|
|
copyContent();
|
|
}, this).open();
|
|
}
|
|
});
|
|
this.registerEditorSuggest(new InlineGeneratorSuggester(this.getOptionsForSuggest, this));
|
|
this.addRibbonIcon("book", "Fantasy Generators", (evt) => {
|
|
new GeneratorModal(this.app, (result) => {
|
|
const copyContent = async () => {
|
|
try {
|
|
if (result instanceof Error) {
|
|
new import_obsidian5.Notice(`${result}`);
|
|
} else {
|
|
await navigator.clipboard.writeText(result);
|
|
new import_obsidian5.Notice(`${result} was copied to the clipboard.`);
|
|
}
|
|
} catch (err) {
|
|
console.error("Failed to copy: ", err);
|
|
new import_obsidian5.Notice("Failed to copy, Check error in console.");
|
|
}
|
|
};
|
|
copyContent();
|
|
}, this).open();
|
|
});
|
|
this.addSettingTab(new SettingTab(this.app, this));
|
|
console.log("loaded Fantasy Content Generator");
|
|
}
|
|
onunload() {
|
|
}
|
|
async loadSettings() {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
|
}
|
|
async saveSettings() {
|
|
await this.saveData(this.settings);
|
|
}
|
|
};
|
|
|
|
/* nosourcemap */ |