From 0e317fd10ad53caa70afa28e8895b4ea20c31332 Mon Sep 17 00:00:00 2001 From: John Riccardi Date: Wed, 22 Feb 2023 09:44:55 -0600 Subject: [PATCH] 14 Adds Shadowdark character name --- src/shadowdark/ShadowdarkCharacter.test.ts | 12 +- src/shadowdark/ShadowdarkCharacter.ts | 19 ++- src/shadowdark/data/index.ts | 5 +- src/shadowdark/data/names.json | 134 +++++++++++++++++++++ 4 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 src/shadowdark/data/names.json diff --git a/src/shadowdark/ShadowdarkCharacter.test.ts b/src/shadowdark/ShadowdarkCharacter.test.ts index 7d39508..54f429e 100644 --- a/src/shadowdark/ShadowdarkCharacter.test.ts +++ b/src/shadowdark/ShadowdarkCharacter.test.ts @@ -1,5 +1,5 @@ import ShadowdarkCharacter from './ShadowdarkCharacter' -import { Dice } from '@/dice' +import { names } from './data' describe('ShadowdarkCharacter', () => { describe('initialization', () => { @@ -147,7 +147,17 @@ describe('ShadowdarkCharacter', () => { expect(humanCharacters.every( character => character.languages.length === 2)).toBeTruthy() }) }) + + test('assigns a name based on the race', () => { + const character = new ShadowdarkCharacter() + character.generate() + + const characterRace = character.race.name.toLowerCase() + const allNames: Record = names + + expect(allNames[characterRace].includes(character.name)).toBeTruthy() }) + }) }) }) }) diff --git a/src/shadowdark/ShadowdarkCharacter.ts b/src/shadowdark/ShadowdarkCharacter.ts index 390a42c..167653e 100644 --- a/src/shadowdark/ShadowdarkCharacter.ts +++ b/src/shadowdark/ShadowdarkCharacter.ts @@ -1,6 +1,6 @@ import { Dice } from '@/dice' import { expandObjectKeys } from '@/helpers' -import { abilityModifiers, languages as allLanguages, races } from './data' +import { abilityModifiers, languages as allLanguages, races, names } from './data' class ShadowdarkCharacter { private abilities: IShadowdarkAbilities = { strength: { score: 10, modifier: 0 }, @@ -13,10 +13,10 @@ class ShadowdarkCharacter { public race: IShadowdarkRace = {} as IShadowdarkRace public languages: string[] = [] - constructor() {} + public name: string = '' public generate = () => { - this.abilities = this.generateAbilityScores() + this.generateAbilityScores() this.generateRace() } @@ -48,7 +48,7 @@ class ShadowdarkCharacter { return this.abilities.wisdom } - private generateAbilityScores = (): IShadowdarkAbilities => { + private generateAbilityScores = (): void => { const abilityScoreRolls = this.rollAbilityScores() const abilityModifiersMap = expandObjectKeys(abilityModifiers) @@ -65,7 +65,7 @@ class ShadowdarkCharacter { const [strength, dexterity, constitution, intelligence, wisdom, charisma] = abilitiesWithModifiers - return { + this.abilities = { strength, dexterity, constitution, @@ -83,6 +83,15 @@ class ShadowdarkCharacter { this.languages = languages this.race = race + this.name = this.rollName(race) + } + + private rollName = (race: IShadowdarkRace): string => { + const raceName = (race.name as string).toLowerCase() + const namesByRace: Record = names + const namesForRace = namesByRace[raceName] + + return namesForRace[Dice.roll(namesForRace.length - 1)] } private determineLanguages = (race: IShadowdarkRace): string[] => { diff --git a/src/shadowdark/data/index.ts b/src/shadowdark/data/index.ts index be5b4f1..00fad5c 100644 --- a/src/shadowdark/data/index.ts +++ b/src/shadowdark/data/index.ts @@ -1,3 +1,4 @@ -export { default as abilityModifiers } from "./abilityModifiers.json" -export { default as races } from "./races.json" +export { default as abilityModifiers } from './abilityModifiers.json' export { default as languages } from './languages.json' +export { default as names } from './names.json' +export { default as races } from "./races.json" diff --git a/src/shadowdark/data/names.json b/src/shadowdark/data/names.json new file mode 100644 index 0000000..e27e0cb --- /dev/null +++ b/src/shadowdark/data/names.json @@ -0,0 +1,134 @@ +{ + "dwarf": [ + "Hilde", + "Torbin", + "Marga", + "Bruno", + "Karina", + "Naugrim", + "Brenna", + "Darvin", + "Elga", + "Alric", + "Isolde", + "Gendry", + "Bruga", + "Junnor", + "Vidrid", + "Torson", + "Brielle", + "Ulfgar", + "Sarna", + "Grimm" + ], + "elf": [ + "Eliara", + "Ryarn", + "Sariel", + "Tirolas", + "Galira", + "Varos", + "Daeniel", + "Axidor", + "Hiralia", + "Cyrwin", + "Lothiel", + "Zaphiel", + "Nayra", + "Ithior", + "Amriel", + "Elyon", + "Jirwyn", + "Natinel", + "Fiora", + "Ruhiel" + ], + "goblin": [ + "Iggs", + "Tark", + "Nix", + "Lenk", + "Roke", + "Fitz", + "Tila", + "Riggs", + "Prim", + "Zeb", + "Finn", + "Borg", + "Yark", + "Deeg", + "Nibs", + "Brak", + "Fink", + "Rizzo", + "Squib", + "Grix" + ], + "halfling": [ + "Willow", + "Benny", + "Annie", + "Tucker", + "Marie", + "Hobb", + "Cora", + "Gordie", + "Rose", + "Ardo", + "Alma", + "Norbert", + "Jennie", + "Barvin", + "Tilly", + "Pike", + "Lydia", + "Marlow", + "Astrid", + "Jasper" + ], + "half-orc": [ + "Vara", + "Gralk", + "Ranna", + "Korv", + "Zasha", + "Hrogar", + "Klara", + "Tragan", + "Brolga", + "Drago", + "Yelena", + "Krull", + "Ulara", + "Tulk", + "Shiraal", + "Wulf", + "Ivara", + "Hirok", + "Aja", + "Zoraan" + ], + "human": [ + "Zali", + "Bram", + "Clara", + "Nattias", + "Rina", + "Denton", + "Mirena", + "Aran", + "Morgan", + "Giralt", + "Tamra", + "Oscar", + "Ishana", + "Rogar", + "Jasmin", + "Tarin", + "Yuri", + "Malchor", + "Lienna", + "Godfrey" + ] +}