UNPKG

aurinn-train-content-generator

Version:

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

156 lines (155 loc) 6.42 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var Utils = __importStar(require("../utils")); var names_1 = __importDefault(require("../names")); var names_json_1 = __importDefault(require("../names/names.json")); var npcs_json_1 = __importDefault(require("./npcs.json")); 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; // use the given seed, or one set by withSeed, or generate one 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(); // generate a name var nameObject = names_1.default.generate({ race: race, gender: gender }); // get 2 traits and 1 desire 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); // if we should generate relations, generate them var relations = []; if (shouldGenerateRelations) { relations = generateRelationships({ originalNpcNameObject: nameObject, race: race, desires: desires, seed: seed }); } // build the whole together and return it return { seed: seed, nameObject: nameObject, gender: gender, race: race, traits: traits, desires: desires, formattedData: { name: nameObject.name, firstName: nameObject.firstName, lastName: nameObject.lastName, gender: Utils.titleCase(gender), race: Utils.formatString(race), traits: traits, desires: desires, relations: relations }, 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: relationTitle, npc: generateFamilyMember({ originalNpcNameObject: originalNpcNameObject, race: race, relationTitle: 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: race, gender: gender, shouldGenerateRelations: false, seed: seed }); // if both the original NPC and the generated NPC have a surname, set the generated NPC's // surname to the original NPCs surname if (originalNpcNameObject.formattedData.lastName != null && generatedRelation.formattedData.lastName != null) { // both have a surname - normalize it 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: generate, trait: generateTrait, desire: generateDesire }; exports.default = functions;