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