diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt index 94645582f98f2d22c6f16b62e7a32141bdde5256..9840956a3dd089ae47c86804d09cc059ac5608e6 100644 --- a/devNotes/twine JS.txt +++ b/devNotes/twine JS.txt @@ -26213,11 +26213,12 @@ window.nationalityToRace = function nationalityToRace(slave) { slave.race = hashChoice(setup.raceSelector[slave.nationality] || setup.raceSelector[""]); }; -window.generateName = function generateName(nationality, race, male) { +window.generateName = function generateName(nationality, race, male, filter) { + filter = filter || _.stubTrue; /* default: allow all */ const lookup = (male ? setup.malenamePoolSelector : setup.namePoolSelector); const result = jsEither( - lookup[nationality + "." + race] || lookup[nationality] || - (male ? setup.whiteAmericanMaleNames : setup.whiteAmericanSlaveNames)); + (lookup[nationality + "." + race] || lookup[nationality] || + (male ? setup.whiteAmericanMaleNames : setup.whiteAmericanSlaveNames)).filter(filter)); /* fallback for males without specific male name sets: return female name */ if(male && !result) { return generateName(nationality, race, false); @@ -26225,11 +26226,12 @@ window.generateName = function generateName(nationality, race, male) { return result; }; -window.generateSurname = function generateSurname(nationality, race, male) { +window.generateSurname = function generateSurname(nationality, race, male, filter) { + filter = filter || _.stubTrue; /* default: allow all */ const result = jsEither( - setup.surnamePoolSelector[nationality + "." + race] || + (setup.surnamePoolSelector[nationality + "." + race] || setup.surnamePoolSelector[nationality] || - setup.whiteAmericanSlaveSurnames); + setup.whiteAmericanSlaveSurnames).filter(filter)); if(male) { /* see if we have male equivalent of that surname, and return that if so */ const maleLookup = setup.maleSurnamePoolSelector[nationality + "." + race] || setup.maleSurnamePoolSelector[nationality]; @@ -26240,13 +26242,20 @@ window.generateSurname = function generateSurname(nationality, race, male) { return result || 0; }; +window.isMaleName = function isMaleName(name, nationality, race) { + const names = setup.malenamePoolSelector[nationality + "." + race] || + setup.malenamePoolSelector[nationality] || + setup.whiteAmericanMaleNames; + return names && names.includes(name); +}; + window.nationalityToName = function nationalityToName(slave) { const V = State.variables; const male = (slave.genes === "XY"); slave.birthName = generateName(slave.nationality, slave.race, male); slave.birthSurname = generateSurname(slave.nationality, slave.race, male); - if(male && !V.allowMaleSlaveNames) { + if(male && isMaleName(slave.birthName, slave.nationality, slave.race) && !V.allowMaleSlaveNames) { slave.slaveName = generateName(slave.nationality, slave.race, false); } else { slave.slaveName = slave.birthName; diff --git a/src/js/slaveGenerationJS.tw b/src/js/slaveGenerationJS.tw index c22cf591de54302e6919ef057f0250cdcb7ced58..0ab95b96230ae332a375d7d8699ce83d59e85005 100644 --- a/src/js/slaveGenerationJS.tw +++ b/src/js/slaveGenerationJS.tw @@ -48,11 +48,12 @@ window.nationalityToRace = function nationalityToRace(slave) { slave.race = hashChoice(setup.raceSelector[slave.nationality] || setup.raceSelector[""]); }; -window.generateName = function generateName(nationality, race, male) { +window.generateName = function generateName(nationality, race, male, filter) { + filter = filter || _.stubTrue; /* default: allow all */ const lookup = (male ? setup.malenamePoolSelector : setup.namePoolSelector); const result = jsEither( - lookup[nationality + "." + race] || lookup[nationality] || - (male ? setup.whiteAmericanMaleNames : setup.whiteAmericanSlaveNames)); + (lookup[nationality + "." + race] || lookup[nationality] || + (male ? setup.whiteAmericanMaleNames : setup.whiteAmericanSlaveNames)).filter(filter)); /* fallback for males without specific male name sets: return female name */ if(male && !result) { return generateName(nationality, race, false); @@ -60,11 +61,12 @@ window.generateName = function generateName(nationality, race, male) { return result; }; -window.generateSurname = function generateSurname(nationality, race, male) { +window.generateSurname = function generateSurname(nationality, race, male, filter) { + filter = filter || _.stubTrue; /* default: allow all */ const result = jsEither( - setup.surnamePoolSelector[nationality + "." + race] || + (setup.surnamePoolSelector[nationality + "." + race] || setup.surnamePoolSelector[nationality] || - setup.whiteAmericanSlaveSurnames); + setup.whiteAmericanSlaveSurnames).filter(filter)); if(male) { /* see if we have male equivalent of that surname, and return that if so */ const maleLookup = setup.maleSurnamePoolSelector[nationality + "." + race] || setup.maleSurnamePoolSelector[nationality]; @@ -75,13 +77,20 @@ window.generateSurname = function generateSurname(nationality, race, male) { return result || 0; }; +window.isMaleName = function isMaleName(name, nationality, race) { + const names = setup.malenamePoolSelector[nationality + "." + race] || + setup.malenamePoolSelector[nationality] || + setup.whiteAmericanMaleNames; + return names && names.includes(name); +}; + window.nationalityToName = function nationalityToName(slave) { const V = State.variables; const male = (slave.genes === "XY"); slave.birthName = generateName(slave.nationality, slave.race, male); slave.birthSurname = generateSurname(slave.nationality, slave.race, male); - if(male && !V.allowMaleSlaveNames) { + if(male && isMaleName(slave.birthName, slave.nationality, slave.race) && !V.allowMaleSlaveNames) { slave.slaveName = generateName(slave.nationality, slave.race, false); } else { slave.slaveName = slave.birthName; diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index 657240a6e4bd95973c116bf780423e1421d975db..4cd9662320905d75877f28f7eb95db140463ddfb 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -1285,41 +1285,33 @@ extremely pale -5 <<widget "ParentNames">> <<set _currentSlaveNames = $slaves.map(s => s.slaveName)>> -<<set _namePool = - (setup.namePoolSelector[$args[0].nationality + "." + $args[1].race] - || setup.namePoolSelector[$args[0].nationality] - || setup.whiteAmericanSlaveNames) - .filter(sn => !_currentSlaveNames.includes(sn))>> -<<set _maxTries = 10>> -<<if _namePool.length <= 0 && setup.nationalityPoolSelector[$continent]>> - <<set _continentNationality = setup.nationalityPoolSelector[$continent].random()>> - <<for _namePool.length <= 0 && _maxTries > 5>> - <<set _namePool = - (setup.namePoolSelector[_continentNationality + "." + $args[1].race] - || setup.namePoolSelector[_continentNationality] - || [] - .filter(sn => !_currentSlaveNames.includes(sn))>> - <<set _maxTries -= 1>> +<<set $args[1].slaveName = + generateName($args[0].nationality, $args[1].race, $args[1].genes === "XY", sn => !_currentSlaveNames.includes(sn))>> +<<if !$args[1].slaveName>> + /* we ran out of names ... How? */ + <<set _maxTries = 10>> + <<for _maxTries > 0 && !$args[1].slaveName>> + <<set _continentNationality = setup.nationalityPoolSelector[$continent].random()>> + <<set $args[1].slaveName = + generateName(_continentNationality, $args[1].race, $args[1].genes === "XY", sn => !_currentSlaveNames.includes(sn))>> <</for>> <</if>> -<<for _namePool.length <= 0 && _maxTries > 0>> - <<set _namePool = Object.values(setup.namePoolSelector).random().filter(sn => !_currentSlaveNames.includes(sn))>> - <<set _maxTries -= 1>> -<</for>> -<<if _namePool.length <= 0>> - <<set _namePool = Object.values(setup.namePoolSelector).random()>> +<<if !$args[1].slaveName>> + /* give up, duplicate name is fine I guess */ + <<set $args[1].slaveName = + generateName($args[0].nationality, $args[1].race, $args[1].genes === "XY")>> <</if>> -<<set $args[1].slaveName = _namePool.random()>> -<<unset _currentSlaveNames, _namePool, _maxTries, _continentNationality>> +<<unset _currentSlaveNames, _maxTries, _continentNationality>> <</widget>> <<widget "NewChildName">> -/* thanks surname setting, for making me do this */ -<<set $args[0].birthName = - (setup.namePoolSelector[$args[0].nationality + "." + $args[0].race] - || setup.namePoolSelector[$args[0].nationality] - || setup.whiteAmericanSlaveNames).random()>> -<<set $args[0].slaveName = $args[0].birthName>> +<<set $args[0].birthName = generateName($args[0].nationality, $args[0].race, $args[0].genes === "XY")>> +<<if $args[0].genes === "XY" && !$allowMaleSlaveNames && isMaleName($args[0].birthName, $args[0].nationality, $args[0].race)>> + /* grab a female name for the slave name instead */ + <<set $args[0].slaveName = generateName($args[0].nationality, $args[0].race, false)>> +<<else>> + <<set $args[0].slaveName = $args[0].birthName>> +<</if>> <</widget>> <<widget "AgePCEffects">>