diff --git a/src/js/utilJS.tw b/src/js/utilJS.tw index 399048bb9bd12040a9cf8f5bc533a7cda9932a77..234b0a2206192ca2c8069e18defc6b5b8b4454bb 100644 --- a/src/js/utilJS.tw +++ b/src/js/utilJS.tw @@ -1,5 +1,159 @@ :: UtilJS [script] +/* + * Height.mean(nationality, race, genes, age) - returns the mean height for the given combination and age in years (>=2) + * Height.mean(nationality, race, genes) - returns the mean adult height for the given combination + * Height.mean(slave) - returns the mean (expected) height for the given slave + * Height.random(nationality, race, genes, age) - returns a random height for the given combination, + * with Gaussian distribution (mean = 1, standard deviation = 0.05) around the mean height + * Height.random(nationality, race, genes) - returns a random height for the given combination of an adult, as above + * Height.random(slave) - returns a random height for the given slave, as above + * Height.forAge(height, age, genes) - returns the height adapted to the age and genes + * Height.forAge(height, slave) - returns the height adapted to the slave's age and genes + */ +window.Height = (function(){ + const xxMeanHeight = { + "American.white": 165, "American.black": 163.6, "American.latina": 158.9, "American.asian": 158.4, "American": 161.8, + "Afghan": undefined, "Algerian": 162, "Argentinian": 159.6, "Armenian": undefined, "Australian": 161.8, "Austrian": 166, + "Bangladeshi": undefined, "Belarusian": 166.8, "Belgian": 168.1, "Bolivian": 142.2, "Brazilian": 158.8, + "British": 161.9, "Burmese": undefined, "Canadian": 162.3, "Chilean": 157.2, "Chinese": 155.8, "Colombian": 158.7, + "Congolese": 157.7, "Cuban": 156, "Czech": 167.22, "Danish": 168.7, "Dominican": 156.4, "Dutch": 169, "Egyptian": 158.9, + "Emirati": 158.9, "Estonian": 165.5, "Ethiopian": undefined, "Filipina": undefined, "Finnish": 165.3, "French": 162.5, + "German": 162.8, "Ghanan": 158.5, "Greek": 165, "Guatemalan": undefined, "Haitian": undefined, "Hungarian": 164, + "Icelandic": 168, "Indian": 151.9, "Indonesian": 147, "Iranian": 157.2, "Iraqi": 155.8, "Irish": 163, "Israeli": 166, + "Italian": 162.5, "Jamaican": 160.8, "Japanese": 158, "Jordanian": undefined, "Kazakh": 159.8, "Kenyan": undefined, + "Korean": 156.15, "Lebanese": 165, "Libyan": 160.5, "Lithuanian": 167.5, "Malaysian": 154.7, "Malian": 160.4, + "Mexican": 154, "Moroccan": 158.5, "Nepalese": 150.8, "Nigerian": 163.8, "Norwegian": 157.8, "Omani": undefined, + "Pakistani": 151.9, "Peruvian": 151, "Polish": 165.1, "Portuguese": 165.1, "Puerto Rican": 158.9, "Romanian": 157, + "Russian": 164.1, "Saudi": 156.3, "Scottish": 163, "Serbian": 166.8, "Slovak": 165.6, "South African": 159, + "Spanish": 162.6, "Sudanese": undefined, "Swedish": 166.8, "Swiss": 162.5, "Tanzanian": undefined, "Thai": 159, + "Tunisian": 160, "Turkish": 161.9, "Ugandan": undefined, "Ukrainian": 164.8, "Uzbek": 159.9, "Venezuelan": 159, + "Vietnamese": 155.2, "Yemeni": undefined, "a New Zealander": 164, "Zimbabwean": undefined, + "": 162.5 // default + }; + const xyMeanHeight = { + "American.white": 178.2, "American.black": 177.4, "American.latina": 172.5, "American.asian": 172.5, "American": 176.4, + "Afghan": undefined, "Algerian": 172.2, "Argentinian": 174.46, "Armenian": undefined, "Australian": 175.6, + "Austrian": 179, "Bangladeshi": undefined, "Belarusian": 176.9, "Belgian": 178.7, "Bolivian": 160, "Brazilian": 170.7, + "British": 175.3, "Burmese": undefined, "Canadian": 175.1, "Chilean": 169.6, "Chinese": 167.1, "Colombian": 170.6, + "Congolese": 158.9, "Cuban": 168, "Czech": 180.31, "Danish": 180.4, "Dominican": 168.4, "Dutch": 181, "Egyptian": 170.3, + "Emirati": 170.3, "Estonian": 179.1, "Ethiopian": undefined, "Filipina": undefined, "Finnish": 178.9, "French": 175.6, + "German": 175.4, "Ghanan": 169.5, "Greek": 177, "Guatemalan": undefined, "Haitian": undefined, "Hungarian": 176, + "Icelandic": 181, "Indian": 164.7, "Indonesian": 158, "Iranian": 170.3, "Iraqi": 165.4, "Irish": 177, "Israeli": 177, + "Italian": 176.5, "Jamaican": 171.8, "Japanese": 172, "Jordanian": undefined, "Kazakh": 169, "Kenyan": undefined, + "Korean": 168.15, "Lebanese": 176, "Libyan": 171.3, "Lithuanian": 177.2, "Malaysian": 166.3, "Malian": 171.3, + "Mexican": 167, "Moroccan": 172.7, "Nepalese": 163, "Nigerian": 163.8, "Norwegian": 179.63, "Omani": undefined, + "Pakistani": 164.7, "Peruvian": 164, "Polish": 178.7, "Portuguese": 173.9, "Puerto Rican": 172.5, "Romanian": 172, + "Russian": 177.2, "Saudi": 168.9, "Scottish": 177.6, "Serbian": 182, "Slovak": 179.4, "South African": 168, + "Spanish": 173.1, "Sudanese": undefined, "Swedish": 181.5, "Swiss": 178.2, "Tanzanian": undefined, "Thai": 170.3, + "Tunisian": 172.3, "Turkish": 173.6, "Ugandan": undefined, "Ukrainian": 176.5, "Uzbek": 175.4, "Venezuelan": 169, + "Vietnamese": 165.7, "Yemeni": undefined, "a New Zealander": 177, "Zimbabwean": undefined, + ".white": 177.6, "": 172.5 // defaults + }; + + // Helper method - table lookup for nationality/race combinations + const nationalityMeanHeight = function(table, nationality, race, def) { + return table[nationality + "." + race] || table[nationality] || table["." + race] || table[""] || def; + }; + + // Helper method - Gaussian distributed random variable, constrained to +/-max, using Box-Muller transform + const constrainedGaussian = function(max) { + var u = 1 - Math.random(); // Subtraction to flip [0, 1) to (0, 1]. + var v = 1 - Math.random(); + return Math.clamp(Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v), -max, max); + }; + + // Helper method - apply age and genes to the adult height + const applyAge = function(height, age, genes) { + if(!_.isFinite(age) || age < 2 || age >= 20) { + return height; + } + let minHeight = 0, midHeight = 0, midAge = 15; + switch(genes) { + case 'XX': // female + case 'XXX': // Triple X syndrome female + minHeight = 85; midHeight = height * 157 / 164; midAge = 13; + break; + case 'XY': // male + case 'XXY': // Kinefelter syndrome male + case 'XYY': // XYY syndrome male + minHeight = 86; midHeight = height * 170 / 178; midAge = 15; + break; + case 'X0': case 'X': // Turner syndrome female + minHeight = 85 * 0.93; midHeight = height * 157 / 164; midAge = 13; + break; + default: + minHeight = 85.5, midHeight = height * 327 / 342, midAge = 14; + break; + } + if(age > midAge) { + // end of puberty to 20 + return interpolate(midAge, midHeight, 20, height, age); + } else { + // 2 to end of puberty + return interpolate(2, minHeight, midAge, midHeight, age); + } + }; + + const _meanHeight = function(nationality, race, genes, age) { + if(_.isObject(nationality)) { + // We got called with a single slave as the argument + return _meanHeight(nationality.nationality, nationality.race, nationality.genes, nationality.physicalAge + nationality.birthWeek / 52.0); + } + let result = 0; + switch(genes) { + case 'XX': // female + result = nationalityMeanHeight(xxMeanHeight, nationality, race); + break; + case 'XY': // male + result = nationalityMeanHeight(xyMeanHeight, nationality, race); + break; + // special cases. Extra SHOX genes on X and Y chromosomes make for larger people + case 'X0': case 'X': // Turner syndrome female + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 0.93; + break; + case 'XXX': // Triple X syndrome female + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 1.03; + break; + case 'XXY': // Kinefelter syndrome male + result = nationalityMeanHeight(xyMeanHeight, nationality, race) * 1.03; + break; + case 'XYY': // XYY syndrome male + result = nationalityMeanHeight(xyMeanHeight, nationality, race) * 1.04; + break; + case 'Y': case 'Y0': case 'YY': case 'YYY': + console.log("Height.mean(): non-viable genes " + genes); + break; + default: + console.log("Height.mean(): unknown genes " + genes + ", returning mean between XX and XY"); + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 0.5 + + nationalityMeanHeight(xyMeanHeight, nationality, race) * 0.5; + break; + } + return applyAge(result, age, genes); + }; + + const _randomHeight = function(nationality, race, genes, age) { + const mean = _meanHeight(nationality, race, genes, age); + return mean * (1 + constrainedGaussian(3) * 0.05); + }; + + const _forAge = function(height, age, genes) { + if(_.isObject(age)) { + // We got called with a slave as a second argument + return applyAge(height, age.physicalAge + age.birthWeek / 52.0, age.genes); + } else { + return applyAge(height, age, genes); + } + }; + + return { + mean: _meanHeight, + random: _randomHeight, + forAge: _forAge, + }; +})(); + if(!Array.prototype.findIndex) { Array.prototype.findIndex = function(predicate) { if (this == null) { diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw index 5e53eca05bf3ed48c7c8c296769d08d14cad6c5e..c025870da34988b8d0ffda6756db68de9567fd6c 100644 --- a/src/uncategorized/generateXXSlave.tw +++ b/src/uncategorized/generateXXSlave.tw @@ -143,22 +143,6 @@ <<set $activeSlave.trust = random(-45,-25)>> /% Begin height replacement section. %/ -/% Vanilla settings yield an average height of 162.5 cm, which is not representative for the world as a whole. %/ -<<if random(1,2) == 1>> - <<set $activeSlave.height = random(150,170)>> -<<else>> - <<set $activeSlave.height = random(140,190)>> -<</if>> - -/% Set height-based effects before adjusting height for nationality. %/ -<<if $activeSlave.height >= 170>> - <<set $activeSlave.hips = either(-1, 0, 0, 1, 1, 2, 2)>> - <<set $activeSlave.shoulders = either(-1, -1, 0, 0, 0, 1)>> -<<else>> - <<set $activeSlave.hips = either(-1, 0, 0, 0, 1, 1, 2)>> - <<set $activeSlave.shoulders = either(-2, -1, -1, 0, 0, 1)>> -<</if>> - /% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/ <<if $fixedNationality == 0>> <<set $activeSlave.nationality = $nationalities.random()>> @@ -193,178 +177,15 @@ <<NationalityToName $activeSlave>> <<NationalityToAccent $activeSlave>> -<<set $seed = 162.5>> - -<<switch $activeSlave.nationality>> -<<case "American">> - <<if $activeSlave.race is "white">> - <<set $seed = 165>> - <<elseif $activeSlave.race is "black">> - <<set $seed = 163.6>> - <<elseif $activeSlave.race is "latina">> - <<set $seed = 158.9>> - <<elseif $activeSlave.race is "asian">> - <<set $seed = 158.4>> - <<else>> - <<set $seed = 161.8>> - <</if>> -<<case "Afghan">> -<<case "Argentinian">> - <<set $seed = 159.6>> -<<case "Armenian">> -<<case "Australian">> - <<set $seed = 161.8>> -<<case "Austrian">> - <<set $seed = 166>> -<<case "Belarusian">> - <<set $seed = 166.8>> -<<case "Belgian">> -<<case "Bolivian">> - <<set $seed = 142.2>> -<<case "Brazilian">> - <<set $seed = 158.8>> -<<case "British">> - <<set $seed = 161.9>> -<<case "Canadian">> - <<set $seed = 162.3>> -<<case "Chilean">> - <<set $seed = 157.2>> -<<case "Chinese">> - <<set $seed = 155.8>> -<<case "Colombian">> - <<set $seed = 158.7>> -<<case "Congolese">> - <<set $seed = 157.7>> -<<case "Cuban">> - <<set $seed = 156>> -<<case "Czech">> - <<set $seed = 167.22>> -<<case "Danish">> - <<set $seed = 168.7>> -<<case "Dominican">> - <<set $seed = 156.4>> -<<case "Dutch">> - <<set $seed = 169>> -<<case "Emirati">> - <<set $seed = 156.4>> -<<case "Egyptian">> - <<set $seed = 158.9>> -<<case "Estonian">> -<<case "Ethiopian">> -<<case "Finnish">> - <<set $seed = 165.3>> -<<case "French">> - <<set $seed = 162.5>> -<<case "German">> - <<set $seed = 162.8>> -<<case "Ghanan">> - <<set $seed = 158.5>> -<<case "Greek">> - <<set $seed = 165>> -<<case "Guatemalan">> -<<case "Haitian">> -<<case "Hungarian">> - <<set $seed = 176>> -<<case "Icelandic">> -<<case "Indian">> - <<set $seed = 151.9>> -<<case "Indonesian">> -<<case "Iranian">> - <<set $seed = 157.2>> -<<case "Iraqi">> - <<set $seed = 155.8>> -<<case "Irish">> - <<set $seed = 163>> -<<case "Israeli">> - <<set $seed = 166>> -<<case "Italian">> -<<case "Jamaican">> - <<set $seed = 160.8>> -<<case "Japanese">> - <<set $seed = 158>> -<<case "Jordanian">> -<<case "Kazakh">> -<<case "Kenyan">> -<<case "Korean">> - <<if either(1,2,3) == 3>> - <<set $seed = 154.9>> - <<else>> - <<set $seed = 157.4>> - <</if>> -<<case "Lebanese">> -<<case "Libyan">> -<<case "Lithuanian">> - <<set $seed = 167.5>> -<<case "Malaysian">> - <<set $seed = 154.7>> -<<case "Malian">> - <<set $seed = 160.4>> -<<case "Mexican">> - <<set $seed = 154>> -<<case "Moroccan">> -<<case "Nepalese">> -<<case "Nigerian">> - <<set $seed = 163.8>> -<<case "Norwegian">> - <<set $seed = 157.8>> -<<case "Omani">> -<<case "Pakistani">> - /% Default to India's figures. %/ - <<set $seed = 151.9>> -<<case "Peruvian">> - <<set $seed = 151>> -<<case "Polish">> - <<set $seed = 165.1>> -<<case "Portuguese">> - <<set $seed = 165.1>> -<<case "Puerto Rican">> - /% Use average for U.S. Hispanics. %/ - <<set $seed = 158.9>> -<<case "Romanian">> - <<set $seed = 157>> -<<case "Russian">> - <<set $seed = 164.1>> -<<case "Saudi">> - <<set $seed = 156.3>> -<<case "Scottish">> - <<set $seed = 163>> -<<case "Serbian">> - <<set $seed = 166.8>> -<<case "Slovak">> - <<set $seed = 165.6>> -<<case "Spanish">> - <<set $seed = 162.6>> -<<case "Sudanese">> -<<case "Swedish">> - <<set $seed = 166.8>> -<<case "Swiss">> -<<case "Tanzanian">> -<<case "Thai">> -<<case "Tunisian">> -<<case "Turkish">> - <<set $seed = 161.9>> -<<case "Ugandan">> -<<case "Ukrainian">> -<<case "Uzbek">> -<<case "Venezuelan">> -<<case "Vietnamese">> - <<set $seed = 155.2>> -<<case "Yemeni">> -<<case "a New Zealander">> - <<set $seed = 164>> -<<case "Zimbabwean">> -<<default>> -<</switch>> +<<set $activeSlave.height = Math.round(Height.random($activeSlave))>> -/% Include adjustment factor for age. %/ -<<if $activeSlave.physicalAge <= 13>> - <<set $seed = interpolate(2,85,13,$seed * 157/164.0,$activeSlave.physicalAge)>> -<<elseif $activeSlave.physicalAge < 20>> - <<set $seed = interpolate(13,$seed * 157/164.0,20,$seed,$activeSlave.physicalAge)>> +<<if $activeSlave.height >= Height.mean($activeSlave) * 170/162.5>> + <<set $activeSlave.hips = either(-1, 0, 0, 1, 1, 2, 2)>> + <<set $activeSlave.shoulders = either(-1, -1, 0, 0, 0, 1)>> +<<else>> + <<set $activeSlave.hips = either(-1, 0, 0, 0, 1, 1, 2)>> + <<set $activeSlave.shoulders = either(-2, -1, -1, 0, 0, 1)>> <</if>> - -/% Adjust height and convert from decimal number to integer. %/ -<<set $activeSlave.height = Math.round($activeSlave.height * $seed / 162.5)>> /% End height replacement section. %/ <<set $activeSlave.weight = random(-100,180)>> diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw index 2ef07c6b03e459a56aca3ff723bad7b82956e429..ab47c17ede047fb44deb863044434e71f76837d9 100644 --- a/src/uncategorized/generateXYSlave.tw +++ b/src/uncategorized/generateXYSlave.tw @@ -129,32 +129,6 @@ <<set $activeSlave.trust = random(-45,-25)>> /% Begin height replacement section. %/ -/% Vanilla settings yield an average height of 172.5 cm, which is not representative for the world as a whole. %/ -<<if random(1,2) == 1>> - <<set $activeSlave.height = random(160,180)>> -<<else>> - <<set $activeSlave.height = random(150,200)>> -<</if>> - -/% Set height-based effects before adjusting height for nationality. %/ -<<if $activeSlave.physicalAge <= 13>> - <<if $activeSlave.height > 170>> - <<set $activeSlave.hips = either(-2, -1, -1, 0, 1)>> - <<set $activeSlave.shoulders = either(-1, -1, 0, 0, 0, 1)>> - <<else>> - <<set $activeSlave.hips = either(-2, -2, -1, -1, 0)>> - <<set $activeSlave.shoulders = either(-2, -1, -1, 0, 0, 1)>> - <</if>> -<<else>> - <<if $activeSlave.height >= 170>> - <<set $activeSlave.hips = either(-2, -1, -1, 0, 1)>> - <<set $activeSlave.shoulders = either(-1, 0, 1, 1, 2, 2)>> - <<else>> - <<set $activeSlave.hips = either(-2, -2, -1, -1, 0)>> - <<set $activeSlave.shoulders = either(-1, 0, 0, 1, 1, 2)>> - <</if>> -<</if>> - <<if ($activeSlave.physicalAge > random(0,100))>> <<set $activeSlave.eyes = -1>> <<if random(0,100) > 90>> @@ -197,181 +171,24 @@ <<NationalityToName $activeSlave>> <<NationalityToAccent $activeSlave>> -<<set $seed = 172.5>> -<<if $activeSlave.race == "white">> - <<set $seed = 177.6>>/% White people use European average if no country-specific figure available. %/ -<</if>> - -<<switch $activeSlave.nationality>> -<<case "American">> - <<if $activeSlave.race == "white">> - <<set $seed = 178.2>> - <<elseif $activeSlave.race == "black">> - <<set $seed = 177.4>> - <<elseif ($activeSlave.race == "latina") or ($activeSlave.race == "asian")>> - /% Averages are 172.4 and 172.3 which are close enough to default. %/ +<<set $activeSlave.height = Math.round(Height.random($activeSlave))>> +<<if $activeSlave.physicalAge <= 13>> + <<if $activeSlave.height > Height.mean($activeSlave) * 170/172.5>> + <<set $activeSlave.hips = either(-2, -1, -1, 0, 1)>> + <<set $activeSlave.shoulders = either(-1, -1, 0, 0, 0, 1)>> <<else>> - <<set $seed = 176.4>> + <<set $activeSlave.hips = either(-2, -2, -1, -1, 0)>> + <<set $activeSlave.shoulders = either(-2, -1, -1, 0, 0, 1)>> <</if>> -<<case "Afghan">> -<<case "Argentinian">> - <<set $seed = 174.46>> -<<case "Armenian">> -<<case "Australian">> - <<set $seed = 175.6>> -<<case "Austrian">> - <<set $seed = 179>> -<<case "Belarusian">> - <<set $seed = 176.9>> -<<case "Belgian">> - <<set $seed = 178.7>> -<<case "Bolivian">> - <<set $seed = 160.0>> -<<case "Brazilian">> - <<set $seed = 170.7>> -<<case "British">> - <<set $seed = 175.3>> -<<case "Canadian">> - <<set $seed = 175.1>> -<<case "Chilean">> - <<set $seed = 169.6>> -<<case "Chinese">> - <<set $seed = 167.1>> -<<case "Colombian">> - <<set $seed = 170.6>> -<<case "Congolese">> - <<set $seed = 158.9>> -<<case "Cuban">> - <<set $seed = 168>> -<<case "Czech">> - <<set $seed = 180.31>> -<<case "Danish">> - <<set $seed = 180.4>> -<<case "Dominican">> - <<set $seed = 168.4>> -<<case "Dutch">> - <<set $seed = 181>> -<<case "Emirati">> -<<case "Egyptian">> - <<set $seed = 170.3>> -<<case "Estonian">> - <<set $seed = 179.1>> -<<case "Ethiopian">> -<<case "Finnish">> - <<set $seed = 178.9>> -<<case "French">> - <<set $seed = 175.6>> -<<case "German">> - <<set $seed = 175.4>> -<<case "Ghanan">> - <<set $seed = 169.5>> -<<case "Greek">> - <<set $seed = 177>> -<<case "Guatemalan">> -<<case "Haitian">> -<<case "Hungarian">> - <<set $seed = 176>> -<<case "Icelandic">> -<<case "Indian">> - <<set $seed = 164.7>> -<<case "Indonesian">> -<<case "Iranian">> - <<set $seed = 170.3>> -<<case "Iraqi">> - <<set $seed = 165.4>> -<<case "Irish">> - <<set $seed = 177>> -<<case "Israeli">> - <<set $seed = 177>> -<<case "Italian">> - <<set $seed = 176.5>> -<<case "Jamaican">> - <<set $seed = 171.8>> -<<case "Japanese">> - <<set $seed = 172>> -<<case "Jordanian">> -<<case "Kazakh">> -<<case "Kenyan">> -<<case "Korean">> - <<if either(1,2,3) == 3>> - <<set $seed = 165.6>> +<<else>> + <<if $activeSlave.height >= Height.mean($activeSlave) * 170/172.5>> + <<set $activeSlave.hips = either(-2, -1, -1, 0, 1)>> + <<set $activeSlave.shoulders = either(-1, 0, 1, 1, 2, 2)>> <<else>> - <<set $seed = 170.7>> + <<set $activeSlave.hips = either(-2, -2, -1, -1, 0)>> + <<set $activeSlave.shoulders = either(-1, 0, 0, 1, 1, 2)>> <</if>> -<<case "Lebanese">> -<<case "Libyan">> -<<case "Lithuanian">> - <<set $seed = 177.2>> -<<case "Malaysian">> - <<set $seed = 166.3>> -<<case "Malian">> - <<set $seed = 171.3>> -<<case "Mexican">> - <<set $seed = 167>> -<<case "Moroccan">> -<<case "Nepalese">> -<<case "Nigerian">> - <<set $seed = 163.8>> -<<case "Norwegian">> - <<set $seed = 179.63>> -<<case "Omani">> -<<case "Pakistani">> - /% Default to India's figures. %/ - <<set $seed = 164.7>> -<<case "Peruvian">> - <<set $seed = 164>> -<<case "Polish">> - <<set $seed = 178.7>> -<<case "Portuguese">> - <<set $seed = 173.9>> -<<case "Puerto Rican">> - /% Average for U.S. Hispanics == 172.4. No adjustment necessary. %/ -<<case "Romanian">> - <<set $seed = 172>> -<<case "Russian">> - <<set $seed = 177.2>> -<<case "Saudi">> - <<set $seed = 168.9>> -<<case "Scottish">> - <<set $seed = 177.6>> -<<case "Serbian">> - <<set $seed = 182>> -<<case "Slovak">> - <<set $seed = 179.4>> -<<case "Spanish">> - <<set $seed = 173.1>> -<<case "Sudanese">> -<<case "Swedish">> - <<set $seed = 181.5>> -<<case "Swiss">> - <<set $seed = 178.2>> -<<case "Tanzanian">> -<<case "Thai">> -<<case "Tunisian">> -<<case "Turkish">> - <<set $seed = 173.6>> -<<case "Ugandan">> -<<case "Ukrainian">> -<<case "Uzbek">> -<<case "Venezuelan">> -<<case "Vietnamese">> - <<set $seed = 165.7>> -<<case "Yemeni">> -<<case "a New Zealander">> - <<set $seed = 177>> -<<case "Zimbabwean">> -<<default>> -<</switch>> - -/% Include adjustment factor for age. %/ -<<if $activeSlave.physicalAge <= 15>> - <<set $seed = interpolate(2,86,15,$seed * 170/178.0,$activeSlave.physicalAge)>> -<<elseif $activeSlave.physicalAge < 20>> - <<set $seed = interpolate(15,$seed * 170.0/178.0,20,$seed,$activeSlave.physicalAge)>> <</if>> - -/% Adjust height and convert from decimal number to integer. %/ -<<set $activeSlave.height = Math.round($activeSlave.height * $seed / 172.5)>> /% End height replacement section. %/ <<set $activeSlave.weight = random(-100, 180)>>