From d2191856f8e7965c07f1726db223e6c1e748fe40 Mon Sep 17 00:00:00 2001 From: Jones <Jones> Date: Tue, 16 Oct 2018 12:10:09 +0200 Subject: [PATCH] Master Update --- src/js/generateNewSlaveJS.tw | 1399 ++++++++++++++++++++++++++++++++++ 1 file changed, 1399 insertions(+) create mode 100644 src/js/generateNewSlaveJS.tw diff --git a/src/js/generateNewSlaveJS.tw b/src/js/generateNewSlaveJS.tw new file mode 100644 index 00000000000..056ca833fe7 --- /dev/null +++ b/src/js/generateNewSlaveJS.tw @@ -0,0 +1,1399 @@ +:: Generate New Slave JS [script] + +window.GenerateNewSlave = (function(){ + 'use strict'; + let V, slave; + + function GenerateNewSlave(sex) { + V = State.variables; + BaseSlave(); + slave = V.activeSlave; + + preGenCombinedStats(); + if (!sex) { + if (jsRandom(0,99) < V.seeDicks) { + GenerateXYSlave(); + } else if (V.seeDicks > 0) { + var femaleSlaveGen = 80; + if (V.arcologies[0].FSGenderFundamentalistSMR == 1 || V.arcologies[0].FSRepopulationFocusSMR == 1) { + femaleSlaveGen = 90; + } else if (V.arcologies[0].FSGenderRadicalist != "unset") { + femaleSlaveGen = 50; + } + if (jsRandom(1,100) > femaleSlaveGen && jsRandom(0,99) < V.seeDicks) { + GenerateXYSlave(); + } else { + GenerateXXSlave(); + } + } else { + GenerateXXSlave(); + } + } else if (sex == "XY") { + GenerateXYSlave(); + } else { + GenerateXXSlave(); + } + + postGenCleanup(); + }; + + function preGenCombinedStats() { + slave.ID = V.IDNumber++; + slave.weekAcquired = V.week; + slave.canRecruit = 1; + slave.devotion = jsRandom(-90,-60); + slave.trust = jsRandom(-45,-25); + slave.weight = jsRandom(-100,180); + slave.health = jsRandom(-50,50); + + WombInit(slave); + generateAge(); + generateIntelligence(); + generateCareer(); + generateNationality(); /* includes race selection */ + generateAccent(); + nationalityToName(slave); + generateRacialTraits(); + }; + + function postGenCleanup() { + generateBoobTweaks(); /* split this up for female vs. male? */ + generateSkills(); + generateDisabilities(); + generatePronouns(slave); + if (passage() == "Slave Markets" && V.slaveMarket == "corporate" && V.captureUpgradeRace != "unselected" && V.captureUpgradeRace != "none") { + slave.race = V.captureUpgradeRace; + } + }; + + function GenerateXXSlave() { + slave.ovaries = 1; + slave.pubertyXY = 0; + slave.energy = jsRandom(1,85); + /* Superfetation as rare genetic disorder 1 from 100, not active for now. + if (jsRandom(0,99) < 1) { + slave.superfetation = 1; + } + */ + + generateXXBodyProportions(); + generateVagina(); + generateXXPreferences(); + generateXXButt(); + generateXXBoobs(); + generateXXFace(); + generateXXPregAdaptation(); + generateXXVoice(); + generateXXTeeth(); + generateXXMods(); + generateXXBodyHair(); + generateXXPuberty(); + }; + + function GenerateXYSlave() { + slave.genes = "XY"; + slave.hLength = 10; + slave.prostate = 1; + slave.pubertyXX = 0; + slave.energy = jsRandom(15,90); + + generateXYBodyProportions(); + generateDick(); + generateCircumcision(); + generateXYPreferences(); /* must happen after genitalia generation */ + generateXYButt(); /* must happen after preferences */ + generateXYBoobs(); + generateXYFace(); + generateXYPregAdaptation(); + generateXYVoice(); + generateXYTeeth(); + generateXYMods(); + generateXYBodyHair(); + generateXYPuberty(); + }; + + function generateXXBodyProportions() { + slave.height = Math.round(Height.random(slave)); + if (slave.height >= Height.mean(slave) * 170/162.5) { + slave.hips = jsEither([-1, 0, 0, 1, 1, 2, 2]); + slave.shoulders = jsEither([-1, -1, 0, 0, 0, 1]); + } else { + slave.hips = jsEither([-1, 0, 0, 0, 1, 1, 2]); + slave.shoulders = jsEither([-2, -1, -1, 0, 0, 1]); + } + if (slave.physicalAge <= 11) { + slave.hips = jsEither([-2, -2, -1, -1, 0]); + } else if (slave.physicalAge <= 13) { + slave.hips = jsEither([-2, -1, -1, 0, 1]); + } + if (slave.weight < -30) { + slave.waist = jsRandom(-55,0); + } else if (slave.physicalAge < 13) { + slave.waist = jsRandom(-25,25); + } else if (slave.weight <= 30) { + slave.waist = jsRandom(-45,45); + } else if (slave.weight <= 160) { + slave.waist = jsRandom(0,55); + } else { + slave.waist = jsRandom(50,100); + } + }; + + function generateXYBodyProportions() { + slave.height = Math.round(Height.random(slave)); + if (slave.physicalAge <= 13) { + if (slave.height > Height.mean(slave) * 170/172.5) { + slave.hips = jsEither(-2, -1, -1, 0, 1); + slave.shoulders = jsEither(-1, -1, 0, 0, 0, 1); + } else { + slave.hips = jsEither(-2, -2, -1, -1, 0); + slave.shoulders = jsEither(-2, -1, -1, 0, 0, 1); + } + } else { + if (slave.height > Height.mean(slave) * 170/172.5) { + slave.hips = jsEither(-2, -1, -1, 0, 1); + slave.shoulders = jsEither(-1, 0, 1, 1, 2, 2); + } else { + slave.hips = jsEither(-2, -2, -1, -1, 0); + slave.shoulders = jsEither(-1, 0, 0, 1, 1, 2); + } + } + if (slave.physicalAge < 13) { + slave.waist = jsRandom(-15,25); + } else if (slave.weight < -30) { + slave.waist = jsRandom(-45,45); + } else if (slave.weight <= 30) { + slave.waist = jsRandom(-15,65); + } else if (slave.weight <= 160) { + slave.waist = jsRandom(5,100); + } else { + slave.waist = jsRandom(50,100); + } + }; + + function generateVagina() { + if (slave.physicalAge <= 13) { + slave.vagina = jsEither([0, 0, 0, 0, 0, 0, 0, 1]); + } else if (slave.physicalAge <= 15) { + slave.vagina = jsEither([0, 0, 0, 0, 0, 0, 1, 1]); + } else if (slave.physicalAge <= 17) { + slave.vagina = jsEither([0, 0, 0, 0, 0, 1, 1, 1]); + } else if (slave.physicalAge < 20) { + slave.vagina = jsEither([0, 1]); + } else if (slave.physicalAge > 30) { + slave.vagina = jsEither([1, 1, 1, 1, 2]); + } else { + slave.vagina = jsEither([0, 0, 1, 1, 1]); + } + + if (slave.physicalAge <= 11) { + slave.clit = jsEither([0, 0, 0, 0, 0, 0, 0, 0, 1]); + } else if (slave.physicalAge <= 13) { + slave.clit = jsEither([0, 0, 0, 0, 0, 0, 0, 1, 1]); + } else if (slave.physicalAge <= 15) { + slave.clit = jsEither([0, 0, 0, 0, 0, 0, 0, 1, 2]); + } else { + slave.clit = jsEither([0, 0, 0, 0, 0, 0, 1, 1, 2]); + } + + if (slave.physicalAge <= 11) { + slave.labia = jsEither([0, 0, 0, 0, 0, 0, 0, 1, 1]); + } else if (slave.physicalAge <= 12) { + slave.labia = jsEither([0, 0, 0, 0, 0, 0, 1, 1, 1]); + } else if (slave.physicalAge <= 13) { + slave.labia = jsEither([0, 0, 0, 0, 0, 1, 1, 1, 1]); + } else if (slave.physicalAge <= 14) { + slave.labia = jsEither([0, 0, 0, 0, 1, 1, 1, 1, 2]); + } else if (slave.physicalAge <= 15) { + slave.labia = jsEither([0, 0, 0, 1, 1, 1, 1, 2, 2]); + } else { + slave.labia = jsEither([0, 0, 0, 1, 1, 1, 1, 2, 2, 3]); + } + + if (slave.energy < random(1,80)) { + slave.vaginaLube = 0; + } else if ( slave.physicalAge > random(35,60)) { + slave.vaginaLube = 0; + } else { + slave.vaginaLube = 1; + } + slave.foreskin = jsRandom(0,4); + }; + + function generateDick() { + slave.vagina = -1; + slave.clit = 0; + slave.preg = 0; + + if (slave.physicalAge <= 13) { + slave.dick = jsEither([1, 1, 1, 1, 2, 2, 2, 3]); + if (V.seeExtreme == 1) { + slave.balls = jsEither([0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3]); + } else { + slave.balls = jsEither([1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3]); + } + slave.scrotum = slave.balls; + } else if (slave.physicalAge <= 15) { + slave.dick = jsEither([1, 1, 1, 2, 2, 2, 3]); + if (V.seeExtreme == 1) { + slave.balls = jsEither([0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4]); + } else { + slave.balls = jsEither([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4]); + } + slave.scrotum = slave.balls; + } else if (slave.physicalAge <= 17) { + slave.dick = jsEither([1, 1, 2, 2, 3, 3]); + if (V.seeExtreme == 1) { + slave.balls = jsEither([0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5]); + } else { + slave.balls = jsEither([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5]); + } + slave.scrotum = slave.balls; + } else { + slave.dick = jsEither([1, 2, 2, 2, 3, 3, 3, 4, 4, 5]); + if (V.seeExtreme == 1) { + slave.balls = jsEither([0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5]); + } else { + slave.balls = jsEither([1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5]); + } + if (slave.balls != 0) { + slave.scrotum = slave.balls + jsEither([0, 0, 1]); + } else { + slave.scrotum = 0; + } + if (jsRandom(1,100) < 3) { + slave.vasectomy = 1; + } + } + }; + + function generateCircumcision() { + /* The default rate of 50* is wildly unrepresentative, and there is extreme regional variation. */ + /* + What we want is the prevalence among newborns, since this game + happens about 20 years in the future, but we'll use this lacking + something better. + https://pophealthmetrics.biomedcentral.com/articles/10.1186/s12963-016-0073-5 + Right now we mostly just break it down by country. + It would be better to break it down by both country + and race if statistics are available. + */ + if (V.seeCircumcision == 0) { + slave.foreskin = slave.dick + jsRandom(0,1); + } else { + /* Temporarily use activeSlave.foreskin to store the chance of circumcision. */ + switch (slave.nationality) { + case "Afghan": + case "Iranian": + case "Moroccan": + case "Palestinian": + case "Sahrawi": + case "Tunisian": + slave.foreskin = 100; + break; + case "Comorian": + case "Gabonese": + case "Iraqi": + case "Jordanian": + case "Kurdish": + case "Mauritanian": + case "Nigerian": + case "Tajik": + case "Turkish": + case "Yemeni": + slave.foreskin = 99; + break; + case "Algerian": + case "Azerbaijani": + case "Liberian": + case "Maldivian": + slave.foreskin = 98; + break; + case "Djiboutian": + case "Eritrean": + case "Ivorian": + case "Libyan": + case "Saudi": + case "Uzbek": + slave.foreskin = 97; + break; + case "Nigerien": + case "Pakistani": + case "Sierra Leonean": + case "Turkmen": + case "Zairian": + slave.foreskin = 96; + break; + case "a Cook Islander": + case "Egyptian": + case "Gambian": + case "Guamanian": + case "Malagasy": + case "Nauruan": + case "Ni-Vanuatu": + case "Niuean": + case "Palauan": + case "Samoan": + case "a Solomon Islander": + case "Togolese": + case "Tongan": + case "Tuvaluan": + slave.foreskin = 95; + break; + case "Cameroonian": + case "Senegalese": + case "Somali": + slave.foreskin = 94; + break; + case "Bangladeshi": + case "Beninese": + case "Bissau-Guinean": + case "Indonesian": + case "Syrian": + slave.foreskin = 93; + break; + case "Ethiopian": + case "Filipina": + case "Ghanan": + case "Israeli": + case "Kosovan": + slave.foreskin = 92; + break; + case "Kenyan": + case "Kyrgyz": + slave.foreskin = 91; + break; + case "Burkinabé": + case "Omani": + slave.foreskin = 88; + break; + case "Equatoguinean": + slave.foreskin = 87; + break; + case "Kuwaiti": + case "Malian": + slave.foreskin = 86; + break; + case "Guinean": + slave.foreskin = 84; + break; + case "Bahraini": + slave.foreskin = 81; + break; + case "French Polynesian": + slave.foreskin = 78; + break; + case "American": + case "Qatari": + slave.foreskin = 77; + break; + case "Emirati": + slave.foreskin = 76; + break; + case "Chadian": + slave.foreskin = 74; + break; + case "Tanzanian": + slave.foreskin = 72; + break; + case "Congolese": + slave.foreskin = 70; + break; + case "Central African": + slave.foreskin = 63; + break; + case "Burundian": + case "Malaysian": + slave.foreskin = 61; + break; + case "Lebanese": + slave.foreskin = 60; + break; + case "Angolan": + slave.foreskin = 58; + break; + case "Fijian": + case "Kazakh": + slave.foreskin = 56; + break; + case "Bruneian": + case "Korean": + case "Mosotho": + /* Population-weighted average of South Korea and North Korea. */ + slave.foreskin = 52; + break; + case "New Caledonian": + slave.foreskin = 50; + break; + case "Albanian": + slave.foreskin = 48; + break; + case "Mozambican": + slave.foreskin = 47; + break; + case "South African": + slave.foreskin = 45; + break; + case "Dominican": + slave.foreskin = 43; + break; + case "Bosnian": + slave.foreskin = 42; + break; + case "Sudanese": + slave.foreskin = 39; + break; + case "Mexican": + slave.foreskin = 38; + break; + case "Macedonian": + slave.foreskin = 34; + break; + case "a New Zealander": + slave.foreskin = 33; + break; + case "Canadian": + slave.foreskin = 32; + break; + case "Scottish": + slave.foreskin = 28; + break; + case "Australian": + case "Ugandan": + slave.foreskin = 27; + break; + case "Namibian": + slave.foreskin = 26; + break; + case "South Sudanese": + slave.foreskin = 24; + break; + case "Belgian": + case "Cypriot": + case "Thai": + slave.foreskin = 23; + break; + case "Malawian": + slave.foreskin = 22; + break; + case "British": + slave.foreskin = 21; + break; + case "Puerto Rican": + slave.foreskin = 20; + break; + case "Montenegrin": + slave.foreskin = 19; + break; + case "Mauritian": + slave.foreskin = 17; + break; + case "Motswana": + case "Singaporean": + case "Surinamese": + slave.foreskin = 15; + break; + case "Chinese": + case "French": + case "Indian": + case "Jamaican": + slave.foreskin = 14; + break; + case "Bulgarian": + case "Rwandan": + case "Zambian": + slave.foreskin = 13; + break; + case "French Guianan": + case "Guyanese": + case "Russian": + slave.foreskin = 12; + break; + case "German": + slave.foreskin = 11; + break; + case "Belarusian": + case "Georgian": + case "Papua New Guinean": + slave.foreskin = 10; + break; + case "Japanese": + case "Zimbabwean": + slave.foreskin = 9; + break; + case "Slovene": + case "Sri Lankan": + case "Swazi": + case "Taiwanese": + slave.foreskin = 8; + break; + case "Catalan": + case "Haitian": + case "Spanish": + slave.foreskin = 7; + break; + case "Austrian": + case "Dutch": + case "East Timorese": + case "Swiss": + case "Trinidadian": + slave.foreskin = 6; + break; + case "Danish": + case "Greek": + case "a Liechtensteiner": + case "Swedish": + slave.foreskin = 5; + break; + case "Burmese": + case "Cambodian": + case "Mongolian": + case "Nepalese": + case "Peruvian": + case "Serbian": + slave.foreskin = 4; + break; + case "Argentinian": + case "Italian": + case "Norwegian": + slave.foreskin = 3; + break; + case "Luxembourgian": + case "Tibetan": + case "Ukrainian": + case "Vincentian": + slave.foreskin = 2; + break; + case "Andorran": + case "Barbadian": + case "Bermudian": + case "Bhutanese": + case "Brazilian": + case "Croatian": + case "Finnish": + case "Hungarian": + case "Irish": + case "Moldovan": + case "Monégasque": + case "Panamanian": + case "Portuguese": + case "Seychellois": + case "Uruguayan": + slave.foreskin = 1; + break; + case "Antiguan": + case "Armenian": + case "Bahamian": + case "Belizean": + case "Bolivian": + case "Cape Verdean": + case "Chilean": + case "Colombian": + case "Costa Rican": + case "Cuban": + case "Czech": + case "Dominiquais": + case "Ecuadorian": + case "Estonian": + case "Greenlandic": + case "Grenadian": + case "Guatemalan": + case "Honduran": + case "I-Kiribati": + case "Icelandic": + case "Kittitian": + case "Laotian": + case "Latvian": + case "Lithuanian": + case "Maltese": + case "Marshallese": + case "Micronesian": + case "Nicaraguan": + case "Paraguayan": + case "Polish": + case "Romanian": + case "Saint Lucian": + case "Salvadoran": + case "Sammarinese": + case "São Toméan": + case "Slovak": + case "Vatican": + case "Venezuelan": + case "Vietnamese": + slave.foreskin = 0; + break; + default: + /* Some overlooked country, or possibly stateless. Use global average. */ + slave.foreskin = 38; + } + /* Second pass for minorities in other countries. */ + if (slave.race == "middle eastern" && slave.foreskin < 76) { + slave.foreskin = 76; + } + if (slave.race == "semitic" && slave.foreskin < 90) { + slave.foreskin = 90; + } + /* Chance activeSlave.foreskin back to the normal meaning. */ + if (jsRandom(0,99) < slave.foreskin) { + slave.foreskin = 0; + } else { + slave.foreskin = slave.dick + jsRandom(0,1); + } + } + }; + + function generateXXPreferences() { + randomizeAttraction(slave); + slave.fetishStrength = jsRandom(0,90); + slave.fetish = jsEither(["none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "submissive", "submissive", "cumslut", "humiliation", "humiliation", "buttslut", "boobs", "pregnancy", "dom", "sadist", "masochist"]); + slave.behavioralFlaw = jsEither(["none", "none", "none", "arrogant", "bitchy", "odd", "hates men", "hates women", "hates women", "anorexic", "gluttonous", "devout", "liberated"]); + + if (slave.behavioralFlaw == "devout") { + slave.sexualFlaw = jsEither(["none", "repressed", "shamefast", "apathetic", "crude", "judgemental"]); + } else { + slave.sexualFlaw = jsEither(["none", "none", "none", "none", "hates oral", "hates anal", "hates penetration", "repressed", "idealistic", "shamefast", "apathetic", "crude", "judgemental"]); + } + if (slave.behavioralFlaw == "none" && jsRandom(1,10) == 1) { + slave.behavioralQuirk = jsEither(["confident", "cutting", "funny", "adores women", "adores men", "fitness", "insecure", "sinful", "advocate"]); + } + if (slave.sexualFlaw == "none" && jsRandom(1,10) == 1) { + slave.sexualQuirk = jsEither(["gagfuck queen", "painal queen", "strugglefuck queen", "tease", "romantic", "perverted", "caring", "unflinching", "size queen"]); + } + }; + + function generateXYPreferences() { + randomizeAttraction(slave); + slave.fetishStrength = jsRandom(0,90); + slave.fetish = jsEither(["none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "submissive", "cumslut", "humiliation", "buttslut", "buttslut", "boobs", "dom", "sadist", "masochist"]); + slave.behavioralFlaw = jsEither(["none", "none", "none", "arrogant", "bitchy", "odd", "hates men", "hates men", "hates men", "hates women", "anorexic", "gluttonous", "devout", "liberated"]); + + if (slave.behavioralFlaw == "devout") { + slave.sexualFlaw = jsEither(["none", "repressed", "shamefast", "apathetic", "crude", "judgemental"]); + } else { + slave.sexualFlaw = jsEither(["none", "none", "none", "none", "hates oral", "hates anal", "hates anal", "repressed", "idealistic", "shamefast", "apathetic", "crude", "judgemental"]); + } + if (slave.behavioralFlaw == "none" && jsRandom(1,10) == 1) { + slave.behavioralQuirk = jsEither(["confident", "cutting", "funny", "adores women", "adores men", "fitness", "insecure", "sinful", "advocate"]); + } + if (slave.sexualFlaw == "none" && jsRandom(1,10) == 1) { + slave.sexualQuirk = jsEither(["gagfuck queen", "painal queen", "strugglefuck queen", "tease", "romantic", "perverted", "caring", "unflinching", "size queen"]); + } + }; + + function generateXXButt() { + if (slave.physicalAge <= 11) { + slave.butt = jsEither([1, 1, 1, 1, 1, 1, 1]); + } else if (slave.physicalAge <= 12) { + slave.butt = jsEither([1, 1, 1, 1, 1, 2, 2]); + } else if (slave.physicalAge <= 13) { + slave.butt = jsEither([1, 1, 1, 1, 2, 2, 2]); + } else if (slave.physicalAge <= 14) { + slave.butt = jsEither([1, 1, 1, 2, 2, 2, 3]); + } else if (slave.physicalAge <= 15) { + slave.butt = jsEither([1, 1, 2, 2, 2, 2, 3]); + } else { + switch (slave.race) { + case "black": + slave.butt = jsEither([1, 2, 2, 3, 3, 4, 4]); + break; + case "indo-aryan": + case "malay": + case "pacific islander": + case "amerindian": + case "asian": + case "middle eastern": + case "semitic": + case "southern european": + slave.butt = jsEither([1, 2, 2, 3, 3]); + break; + default: + slave.butt = jsEither([1, 2, 2, 3, 3, 4]); + } + } + if (V.weightAffectsAssets != 0) { + if (slave.weight < -10 && slave.butt > 1) { + slave.butt -= 1; + } else if (slave.weight > 100 && slave.butt < 6) { + slave.butt += jsRandom(1,2); + } else if (slave.weight > 10 && slave.butt < 4) { + slave.butt += 1; + } + } + slave.anus = jsEither([0, 0, 1, 1, 2]); + slave.analArea = slave.anus + jsEither([0, 0, 0, 1]); + }; + + function generateXYButt() { + if (slave.physicalAge <= 13) { + slave.butt = jsEither([1, 1, 1, 2, 2, 3, 3, 4]); + } else { + slave.butt = jsEither([1, 1, 2, 3]); + } + if (V.weightAffectsAssets != 0) { + if (slave.weight < -10 && slave.butt > 1) { + slave.butt -= 1; + } else if (slave.weight > 100 && slave.butt < 6) { + slave.butt += jsRandom(1,2); + } else if (slave.weight > 10 && slave.butt < 4) { + slave.butt += 1; + } + } + if (slave.attrXY > 0) { + slave.anus = jsEither([0, 1, 2]); + } else { + if (slave.physicalAge <= 13) { + slave.anus = jsEither([0, 0, 0, 0, 0, 1]); + } else if (slave.physicalAge <= 15) { + slave.anus = jsEither([0, 0, 0, 0, 1, 1, 1]); + } else if (slave.physicalAge <= 17) { + slave.anus = jsEither([0, 0, 0, 1, 1, 1]); + } else { + slave.anus = jsEither([0, 0, 1, 1, 2]); + } + } + slave.analArea = slave.anus + jsEither([0, 0, 0, 1]); + }; + + function generateXXBoobs() { + if (slave.physicalAge <= 10) { + slave.boobs = 100; + } else if (slave.physicalAge == 11) { + slave.boobs = jsEither([100, 100, 150, 150, 150, 300]); + } else if (slave.physicalAge == 12) { + slave.boobs = jsEither([100, 100, 150, 150, 150, 200, 200, 300]); + } else if (slave.physicalAge == 13) { + slave.boobs = jsEither([100, 150, 200, 200, 300, 300, 300, 400]); + } else if (slave.physicalAge == 14) { + slave.boobs = jsEither([100, 150, 200, 300, 300, 300, 350, 400, 400]); + } else if (slave.physicalAge == 15) { + slave.boobs = jsEither([150, 200, 300, 300, 300, 350, 350, 350, 400, 400, 450, 450]); + } else { + switch (slave.race) { + case "black": + slave.boobs = BoobGenerator.rollBreast(150); + break; + case "white": + slave.boobs = BoobGenerator.rollBreast(50); + break; + case "asian": + slave.boobs = BoobGenerator.rollBreast(-100); + break; + default: + slave.boobs = BoobGenerator.rollBreast(0); + } + } + }; + + function generateXYBoobs() { + slave.boobs = jsEither([100, 200, 200, 300, 300, 400, 500]); + }; + + function generateXXFace() { + slave.face = jsRandom(-60,60); + if (jsRandom(0,2) == 0) { + slave.face = jsRandom(-10,10); + } + if (slave.physicalAge > 40) { + slave.face -= jsRandom(0,20); + } else if (slave.physicalAge > 35) { + slave.face -= jsRandom(0,10); + } else if (slave.physicalAge <= 20) { + slave.face += jsRandom(0,20); + } else if (slave.physicalAge <= 25) { + slave.face += jsRandom(0,10); + } + if (slave.physicalAge > 10) { + slave.faceShape = jsEither(["androgynous", "cute", "sensual", "exotic", "normal", "normal"]); + } else { + slave.faceShape = jsEither(["androgynous", "androgynous", "cute", "cute", "sensual", "exotic", "normal", "normal"]); + } + switch (slave.faceShape) { + case "sensual": + case "cute": + slave.face += jsRandom(0,20); + break; + case "exotic": + case "androgynous": + slave.face += jsRandom(-10,10); + break; + case "masculine": + slave.face += jsRandom(-10,0); + } + }; + + function generateXYFace() { + slave.face = jsRandom(-70,20); + if (jsRandom(0,2) == 0) { + slave.face = jsRandom(-40,-10); + } + if (slave.physicalAge > 40) { + slave.face -= jsRandom(0,20); + } else if (slave.physicalAge > 35) { + slave.face -= jsRandom(0,10); + } else if (slave.physicalAge <= 20) { + slave.face += jsRandom(0,20); + } else if (slave.physicalAge <= 25) { + slave.face += jsRandom(0,10); + } + if (slave.physicalAge >= 17) { + slave.faceShape = jsEither(["masculine", "masculine", "masculine", "androgynous"]); + } else if (slave.physicalAge >= 15) { + slave.faceShape = jsEither(["masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "androgynous", "sensual", "exotic", "normal"]); + } else if (slave.physicalAge >= 13) { + slave.faceShape = jsEither(["masculine", "masculine", "masculine", "androgynous", "cute", "sensual", "exotic", "normal"]); + } else if (slave.physicalAge >= 11) { + slave.faceShape = jsEither(["masculine", "androgynous", "cute", "sensual", "exotic", "normal", "normal"]); + } else { + slave.faceShape = jsEither(["androgynous", "androgynous", "cute", "cute", "sensual", "exotic", "normal", "normal"]); + } + switch (slave.faceShape) { + case "sensual": + case "cute": + slave.face += jsRandom(0,20); + break; + case "exotic": + case "androgynous": + slave.face += jsRandom(-10,10); + break; + case "masculine": + slave.face += jsRandom(-10,0); + } + }; + + function generateXXPregAdaptation() { + if (slave.physicalAge <= 6) { + slave.pregAdaptation = 5; + } else if (slave.physicalAge <= 11) { + slave.pregAdaptation = slave.physicalAge - 1; + } else if (slave.physicalAge <= 14) { + slave.pregAdaptation = 4*(slave.physicalAge - 12) + 14; + } else if (slave.physicalAge <= 15) { + slave.pregAdaptation = 28; + } else if (slave.physicalAge <= 16) { + slave.pregAdaptation = 34; + } else if (slave.physicalAge <= 17) { + slave.pregAdaptation = 42; + } else { + slave.pregAdaptation = 50; + } + }; + + function generateXYPregAdaptation() { + if (slave.physicalAge <= 6) { + slave.pregAdaptation = 5; + } else if (slave.physicalAge <= 11) { + slave.pregAdaptation = slave.physicalAge - 1; + } else if (slave.physicalAge <= 15) { + slave.pregAdaptation = 2*(slave.physicalAge - 12) + 12; + } else { + slave.pregAdaptation = 20; + } + }; + + function generateXXVoice() { + if (slave.physicalAge <= 13) { + slave.voice = jsEither([2, 2, 2, 3, 3, 3, 3, 3, 3]); + } else if (slave.physicalAge <= 16) { + slave.voice = jsEither([2, 2, 2, 2, 2, 3, 3, 3, 3]); + } else { + slave.voice = jsEither([1, 2, 2, 2, 2, 2, 2, 3, 3, 3]); + } + }; + + function generateXYVoice() { + if (slave.physicalAge <= 11) { + slave.voice = jsEither([2, 2, 2, 3, 3, 3, 3, 3, 3]); + } else if (slave.physicalAge <= 13) { + slave.voice = jsEither([1, 1, 2, 2, 2, 2, 2, 3, 3]); + } else if (slave.physicalAge <= 16) { + slave.voice = jsEither([1, 1, 1, 2, 2, 2, 2, 2, 3]); + } else { + if (slave.balls > 2) { + slave.voice = 1; + } else if (slave.balls > 0) { + slave.voice = jsEither([1, 1, 2]); + } else { + slave.voice = jsEither([1, 2, 2]); + } + } + }; + + function generateXXTeeth() { + var femaleCrookedTeethGen = slave.intelligence+slave.intelligenceImplant; + if ("American" == slave.nationality) { + femaleCrookedTeethGen += 20; + } else if (["Andorran", "Antiguan", "Argentinian", "Aruban", "Australian", "Austrian", "Bahamian", "Bahraini", "Barbadian", "Belarusian", "Belgian", "Bermudian", "Brazilian", "British", "Bruneian", "Bulgarian", "Canadian", "Catalan", "Chilean", "a Cook Islander", "Croatian", "Czech", "Cypriot", "Danish", "Dutch", "Emirati", "Estonian", "Finnish", "French", "German", "Greek", "Greenlandic", "Guamanian", "Hungarian", "Icelandic", "Irish", "Israeli", "Italian", "Japanese", "Kazakh", "Korean", "Kuwaiti", "Latvian", "a Liechtensteiner", "Lithuanian", "Luxembourgian", "Malaysian", "Maltese", "Mauritian", "Monégasque", "Montenegrin", "New Caledonian", "a New Zealander", "Niuean", "Norwegian", "Omani", "Palauan", "Panamanian", "Polish", "Portuguese", "Puerto Rican", "Qatari", "Romanian", "Russian", "Sammarinese", "Saudi", "Seychellois", "Singaporean", "Slovak", "Slovene", "Spanish", "Swedish", "Swiss", "Taiwanese", "Trinidadian", "Uruguayan", "Vatican"].includes(slave.nationality)) { + /* do nothing */ + } else { + femaleCrookedTeethGen -= 20; + } + + if (jsRandom(0, femaleCrookedTeethGen) <= 15 && slave.physicalAge >= 12) { + slave.teeth = "crooked"; + } + + if (slave.physicalAge < 6) { + slave.teeth = "baby"; + } else if (slave.physicalAge < 12) { + slave.teeth = "mixed"; + } + }; + + function generateXYTeeth() { + var maleCrookedTeethGen = slave.intelligence+slave.intelligenceImplant; + if ("American" == slave.nationality) { + maleCrookedTeethGen += 22; + } else if (["Andorran", "Antiguan", "Argentinian", "Aruban", "Australian", "Austrian", "Bahamian", "Bahraini", "Barbadian", "Belarusian", "Belgian", "Bermudian", "Brazilian", "British", "Bruneian", "Bulgarian", "Canadian", "Catalan", "Chilean", "a Cook Islander", "Croatian", "Czech", "Cypriot", "Danish", "Dutch", "Emirati", "Estonian", "Finnish", "French", "German", "Greek", "Greenlandic", "Guamanian", "Hungarian", "Icelandic", "Irish", "Israeli", "Italian", "Japanese", "Kazakh", "Korean", "Kuwaiti", "Latvian", "a Liechtensteiner", "Lithuanian", "Luxembourgian", "Malaysian", "Maltese", "Mauritian", "Monégasque", "Montenegrin", "New Caledonian", "a New Zealander", "Niuean", "Norwegian", "Omani", "Palauan", "Panamanian", "Polish", "Portuguese", "Puerto Rican", "Qatari", "Romanian", "Russian", "Sammarinese", "Saudi", "Seychellois", "Singaporean", "Slovak", "Slovene", "Spanish", "Swedish", "Swiss", "Taiwanese", "Trinidadian", "Uruguayan", "Vatican"].includes(slave.nationality)) { + /* do nothing */ + } else { + maleCrookedTeethGen -= 20; + } + + if (jsRandom(0, maleCrookedTeethGen) <= 15 && slave.physicalAge >= 12) { + slave.teeth = "crooked"; + } + + if (slave.physicalAge < 6) { + slave.teeth = "baby"; + } else if (slave.physicalAge < 12) { + slave.teeth = "mixed"; + } + }; + + function generateXXMods() { + if (passage() != "Starting Girls") { + slave.earPiercing = jsEither([0,1]); + slave.nosePiercing = jsEither([0,0,0,1]); + slave.eyebrowPiercing = jsEither([0,0,0,0,0,1]); + slave.clitPiercing = jsEither([0,0,0,0,0,1]); + slave.lipsPiercing = jsEither([0,0,0,0,0,1]); + slave.navelPiercing = jsEither([0,0,0,1]); + slave.nipplesPiercing = jsEither([0,0,0,0,1]); + } + if (slave.anus != 0 && Math.random() < 0.25) { + slave.anusTat = "bleached"; + } + }; + + function generateXYMods() { + if (passage() != "Starting Girls") { + slave.earPiercing = jsEither([0,0,0,1]); + slave.nosePiercing = jsEither([0,0,0,0,1]); + slave.eyebrowPiercing = jsEither([0,0,0,0,0,1]); + slave.clitPiercing = jsEither([0,0,0,0,0,1]); + slave.lipsPiercing = jsEither([0,0,0,0,0,1]); + slave.navelPiercing = jsEither([0,0,0,0,1]); + slave.nipplesPiercing = jsEither([0,0,0,0,1]); + } + if (slave.anus != 0 && Math.random() < 0.25) { + slave.anusTat = "bleached"; + } + }; + + function generateXXBodyHair() { + slave.pubicHColor = slave.hColor; + slave.underArmHColor = slave.hColor; + slave.pubicHStyle = jsEither(["hairless", "bald", "bald", "waxed", "waxed", "waxed", "waxed", "waxed", "waxed", "in a strip", "in a strip", "in a strip", "in a strip", "in a strip", "neat", "neat", "neat", "neat", "neat", "bushy in the front and neat in the rear", "bushy in the front and neat in the rear", "bushy in the front and neat in the rear", "bushy in the front and neat in the rear", "bushy", "bushy", "bushy", "bushy", "bushy", "very bushy", "very bushy"]); + slave.underArmHStyle = jsEither(["hairless", "bald", "bald", "waxed", "waxed", "waxed", "waxed", "shaved", "shaved", "shaved", "shaved", "shaved", "neat", "neat", "neat", "neat", "neat", "bushy", "bushy", "bushy"]); + if ((slave.pubicHStyle == "hairless" || slave.underArmHStyle == "hairless") && Math.random() > 0.4) { + slave.pubicHStyle = "hairless"; + slave.underArmHStyle = "hairless"; + } + if (slave.hColor == "blonde" && Math.random() > 0.85) { + slave.eyebrowHColor = jsEither(["brown", "brown", "brown", "brown", "black"]); + slave.override_Brow_H_Color = 1; + } else { + slave.eyebrowHColor = slave.hColor; + } + slave.eyebrowHStyle = jsEither(["bald", "shaved", "shaved", "straight", "straight", "straight", "straight", "straight", "straight", "rounded", "rounded", "rounded", "rounded", "rounded", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "slanted inwards", "slanted inwards", "slanted outwards", "slanted outwards", "high-arched", "high-arched", "high-arched", "elongated", "elongated", "elongated", "shortened", "shortened", "shortened", "curved", "curved", "curved", "curved", "curved", "curved", "curved"]); + slave.eyebrowFullness = jsEither(["pencil-thin", "pencil-thin", "thin", "thin", "thin", "threaded", "threaded", "threaded", "threaded", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "tapered", "tapered", "tapered", "tapered", "thick", "thick", "thick", "bushy", "bushy"]); + }; + + function generateXYBodyHair() { + slave.pubicHColor = slave.hColor; + slave.underArmHColor = slave.hColor; + slave.pubicHStyle = jsEither(["hairless", "bald", "bald", "waxed", "waxed", "waxed", "waxed", "waxed", "waxed", "in a strip", "in a strip", "in a strip", "neat", "neat", "neat", "neat", "neat", "neat", "bushy in the front and neat in the rear", "bushy in the front and neat in the rear", "bushy in the front and neat in the rear", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "very bushy", "very bushy"]); + slave.underArmHStyle = jsEither(["hairless", "bald", "bald", "waxed", "waxed", "waxed", "waxed", "shaved", "shaved", "shaved", "shaved", "shaved", "neat", "neat", "neat", "neat", "neat", "neat", "neat", "bushy", "bushy", "bushy", "bushy", "bushy"]); + if ((slave.pubicHStyle == "hairless" || slave.underArmHStyle == "hairless") && Math.random() > 0.4) { + slave.pubicHStyle = "hairless"; + slave.underArmHStyle = "hairless"; + } + if (slave.hColor == "blonde" && Math.random() > 0.85) { + slave.eyebrowHColor = jsEither(["brown", "brown", "brown", "brown", "black"]); + slave.override_Brow_H_Color = 1; + } else { + slave.eyebrowHColor = slave.hColor; + } + slave.eyebrowHStyle = jsEither(["bald", "shaved", "shaved", "straight", "straight", "straight", "straight", "straight", "straight", "rounded", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "slanted inwards", "slanted outwards", "high-arched", "elongated", "shortened", "curved", "curved", "curved", "curved", "curved"]); + slave.eyebrowFullness = jsEither(["pencil-thin", "thin", "thin", "threaded", "threaded", "threaded", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "tapered", "tapered", "tapered", "thick", "thick", "bushy"]); + }; + + function generateXXPuberty() { + if (slave.physicalAge >= slave.pubertyAgeXX) { + slave.pubertyXX = 1; + } else { + slave.pubertyXX = 0; + } + } + + function generateXYPuberty() { + if (slave.balls > 0) { + if (slave.physicalAge >= slave.pubertyAgeXY) { + slave.pubertyXY = 1; + } else { + slave.pubertyXY = 0; + } + } else { + slave.pubertyXY = 0; + } + }; + + function generateAge() { + if (V.activeSlaveOneTimeMaxAge > 998) { + V.activeSlaveOneTimeMaxAge = (V.pedo_mode === 1) ? 18 : 42; + } else if (V.pedo_mode === 1 && V.one_time_age_overrides_pedo_mode === 0 && V.activeSlaveOneTimeMaxAge > 18) { + V.activeSlaveOneTimeMaxAge = 18; + } + if (V.retirementAge < V.activeSlaveOneTimeMaxAge) { + V.activeSlaveOneTimeMaxAge = (V.retirementAge - 1); + } + if (V.activeSlaveOneTimeMinAge < V.minimumSlaveAge) { + V.activeSlaveOneTimeMinAge = V.minimumSlaveAge; + } else if (V.pedo_mode === 1 && V.one_time_age_overrides_pedo_mode === 0) { + V.activeSlaveOneTimeMinAge = V.minimumSlaveAge; + } + if (V.activeSlaveOneTimeMaxAge < V.activeSlaveOneTimeMinAge) { + V.activeSlaveOneTimeMaxAge = V.activeSlaveOneTimeMinAge; + } + if (V.activeSlaveOneTimeMaxAge >= 30 && V.arcologies[0].FSMaturityPreferentialist !== "unset" && V.ageAdjustOverride !== 1) { + V.activeSlaveOneTimeMaxAge += 10; + } + slave.actualAge = jsRandom(V.activeSlaveOneTimeMinAge, V.activeSlaveOneTimeMaxAge); + const secondAgeRoll = jsRandom(V.activeSlaveOneTimeMinAge, V.activeSlaveOneTimeMaxAge); + if (V.arcologies[0].FSYouthPreferentialist !== "unset" && V.arcologies[0].FSYouthPreferentialist >= jsRandom(1, 100)) { + slave.actualAge = Math.min(slave.actualAge, secondAgeRoll); + } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset" && V.arcologies[0].FSMaturityPreferentialist >= jsRandom(1, 100)) { + slave.actualAge = Math.max(slave.actualAge, secondAgeRoll); + } + if (slave.actualAge >= V.retirementAge) { + slave.actualAge = (V.retirementAge - 2); + } + V.activeSlaveOneTimeMinAge = 0; + V.activeSlaveOneTimeMaxAge = 999; + V.one_time_age_overrides_pedo_mode = 0; + V.ageAdjustOverride = 0; + slave.visualAge = slave.actualAge; + slave.physicalAge = slave.actualAge; + slave.ovaryAge = slave.actualAge; + slave.age = slave.actualAge; /*compatibility*/ + slave.pubertyAgeXX = V.fertilityAge; + slave.pubertyAgeXY = V.potencyAge; + }; + + function generateIntelligence() { + const gaussian = gaussianPair(); + slave.intelligence = Intelligence.random(); + if (V.AgePenalty == 1 && slave.actualAge <= 24) { + if (gaussian[0] < gaussian[1] + slave.intelligence/29 + (slave.actualAge - 24)/8 - 0.35) { + slave.intelligenceImplant = 15; + if (slave.intelligenceImplant > 0 && jsRandom(15,150) < slave.intelligence) { + slave.intelligenceImplant = 30; + } + } + } else { + if (gaussian[0] < gaussian[1] + slave.intelligence/29 - 0.35) { /* 40.23% chance if intelligence is 0, 99.26% chance if intelligence is 100 */ + slave.intelligenceImplant = 15; + if (slave.intelligenceImplant > 0 && jsRandom(15,150) < slave.intelligence) { + slave.intelligenceImplant = 30; + } + } + } + }; + + function generateCareer() { + if (V.AgePenalty == 1) { + if (slave.actualAge < 16) { + slave.career = setup.veryYoungCareers.random(); + } else if (slave.actualAge <= 24) { + slave.career = setup.youngCareers.random(); + } else if (slave.intelligenceImplant >= 15) { + slave.career = setup.educatedCareers.random(); + } else { + slave.career = setup.uneducatedCareers.random(); + } + } else { + if (slave.actualAge < 16) { + slave.career = setup.veryYoungCareers.random(); + } else if (slave.intelligenceImplant >= 15) { + slave.career = setup.educatedCareers.random(); + } else if (slave.actualAge <= 24) { + slave.career = setup.youngCareers.random(); + } else { + slave.career = setup.uneducatedCareers.random(); + } + } + }; + + function generateNationality() { + if (V.fixedRace == 0) { + if (V.fixedNationality == 0) { + slave.nationality = hashChoice(V.nationalities); + } else { + slave.nationality = V.fixedNationality; + V.fixedNationality = 0; + } + nationalityToRace(slave); + + if (passage() == "Corporate Market" && (V.captureUpgradeRace != "unselected") && (V.captureUpgradeRace != "none")) { + if (V.captureUpgradeRace == "mixed race") { + slave.race = "mixed race"; + } else { + const capUpgradeCheck = setup[V.captureUpgradeRace.toLowerCase().replace(/[ -]/g, '')+'Nationalities']; + const keys = Object.keys(capUpgradeCheck); + var capUpgradeNationalities = {}; + for (var i = 0; i < keys.length; i++) { + if (keys[i] in V.nationalities) { + capUpgradeNationalities[keys[i]] = capUpgradeCheck[keys[i]]; + } + } + if (Object.keys(capUpgradeNationalities).length > 0) { + slave.nationality = hashChoice(capUpgradeNationalities); + } else { + slave.nationality = hashChoice(capUpgradeCheck); + } + slave.race = V.captureUpgradeRace; + } + } + + } else { + switch (V.fixedRace) { + case "white": + slave.nationality = hashChoice(setup.whiteNationalities); + break; + case "asian": + slave.nationality = hashChoice(setup.asianNationalities); + break; + case "latina": + slave.nationality = hashChoice(setup.latinaNationalities); + break; + case "black": + slave.nationality = hashChoice(setup.blackNationalities); + break; + case "pacific islander": + slave.nationality = hashChoice(setup.pacificislanderNationalities); + break; + case "southern european": + slave.nationality = hashChoice(setup.southerneuropeanNationalities); + break; + case "amerindian": + slave.nationality = hashChoice(setup.amerindianNationalities); + break; + case "semitic": + slave.nationality = hashChoice(setup.semiticNationalities); + break; + case "middle eastern": + slave.nationality = hashChoice(setup.middleeasternNationalities); + break; + case "indo-aryan": + slave.nationality = hashChoice(setup.indoaryanNationalities); + break; + case "malay": + slave.nationality = hashChoice(setup.malayNationalities); + break; + default: + slave.nationality = hashChoice(V.nationalities); + } + slave.race = V.fixedRace; + V.fixedRace = 0; + } + }; + + function generateAccent() { + nationalityToAccent(slave); + if ((slave.intelligenceImplant >= 15 || slave.intelligence > 95) && slave.accent >= 3 && slave.intelligence > jsRandom(0,100)) { + slave.accent -= 1; + } + }; + + function generateRacialTraits() { + switch (slave.race) { + case "black": + slave.lips = jsRandom(5,30); + slave.skin = jsEither(["black", "dark brown", "brown"]); + slave.hColor = jsEither(["black", "black", "black", "brown"]); + slave.hStyle = jsEither(["neat", "crinkled"]); + break; + case "white": + slave.lips = jsRandom(5,25); + if (slave.nationality == "German") { + slave.skin = jsEither(["pale", "light", "fair"]); + slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]); + slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "red", "brown"]); + } else if (slave.nationality == "Icelandic") { + slave.skin = jsEither(["pale", "pale", "light", "fair"]); + slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]); + slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "red", "brown"]); + } else if (slave.nationality == "Irish") { + slave.skin = jsEither(["pale", "pale", "light", "fair"]); + slave.eyeColor = jsEither(["blue", "brown", "green", "green", "green"]); + slave.hColor = jsEither(["black", "blonde", "red", "red", "red", "brown"]); + } else if (slave.nationality == "Scottish") { + slave.skin = jsEither(["pale", "fair", "light", "fair"]); + slave.eyeColor = jsEither(["blue", "brown", "brown", "green", "green", "green"]); + slave.hColor = jsEither(["black", "black", "blonde", "red", "red", "red", "brown"]); + } else { + slave.skin = jsEither(["pale", "light", "fair"]); + slave.eyeColor = jsEither(["blue", "brown", "green"]); + slave.hColor = jsEither(["black", "blonde", "red", "brown"]); + } + slave.hStyle = "neat"; + break; + case "latina": + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["light olive", "brown", "dark brown", "tanned", "dark olive"]); + slave.hColor = jsEither(["black", "brown"]); + slave.hStyle = "neat"; + break; + case "indo-aryan": + case "malay": + case "pacific islander": + case "amerindian": + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["dark", "light"]); + slave.hColor = "black"; + slave.hStyle = "neat"; + break; + case "asian": + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["light olive", "dark olive", "light"]); + slave.hColor = "black"; + slave.hStyle = "neat"; + break; + case "middle eastern": + case "semitic": + case "southern european": + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["fair", "light olive", "tanned", "light"]); + slave.hColor = "black"; + slave.hStyle = "neat"; + break; + default: + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["pale", "dark", "light"]); + slave.hColor = jsEither(["black", "black", "black", "black", "brown", "brown", "blonde", "red"]); + slave.hStyle = "neat"; + } + if (slave.skin == "pale" || slave.skin == "fair") { + if (jsRandom(1,4) == 1) { + slave.markings = jsEither(["freckles", "freckles", "freckles", "heavily freckled", "beauty mark", "beauty mark", "birthmark", "birthmark"]); + } + } else if (jsRandom(1,8) == 1) { + slave.markings = jsEither(["beauty mark", "birthmark"]); + } + }; + + function generateBoobTweaks() { + if (V.weightAffectsAssets != 0) { + if (slave.weight < -10 && slave.boobs > 200) { + slave.boobs -= 100; + } else if (slave.weight > 190 && slave.boobs < 3000) { + slave.boobs += (jsRandom(3,8)*100); + } else if (slave.weight > 160 && slave.boobs < 1500) { + slave.boobs += (jsRandom(2,6)*100); + } else if (slave.weight > 130 && slave.boobs < 1500) { + slave.boobs += (jsRandom(1,4)*100); + } else if (slave.weight > 95 && slave.boobs < 1200) { + slave.boobs += (jsRandom(1,3)*100); + } else if (slave.weight > 30 && slave.boobs < 1000) { + slave.boobs += 100; + } + } + + var BoobShapeGen = []; + if (slave.boobs > 250 && slave.boobs < 800) { + BoobShapeGen.push("perky"); + BoobShapeGen.push("downward-facing"); + } + if (slave.boobs > 400 && slave.boobs < 1200) { + BoobShapeGen.push("torpedo-shaped"); + BoobShapeGen.push("wide-set"); + } + if (slave.boobs > 800 && slave.physicalAge > jsRandom(10,50)) { + BoobShapeGen.push("saggy"); + } + if (BoobShapeGen.length == 1) { + if (Math.random() < 0.5) { + slave.boobShape = jsEither(BoobShapeGen); + } + } else if (BoobShapeGen.length > 1) { + if (jsRandom(1,3) != 1) { + slave.boobShape = jsEither(BoobShapeGen); + } + } + + if (slave.boobs < 250) { + slave.nipples = jsEither(["tiny", "tiny", "tiny", "tiny", "cute", "cute", "puffy", "partially inverted"]); + } else if (slave.boobs < 500) { + slave.nipples = jsEither(["tiny", "cute", "cute", "cute", "puffy", "partially inverted"]); + } else if (slave.boobs < 1000) { + slave.nipples = jsEither(["tiny", "cute", "cute", "cute", "puffy", "puffy", "partially inverted", "inverted"]); + } else { + slave.nipples = jsEither(["cute", "puffy", "partially inverted", "inverted", "huge"]); + } + }; + + function generateSkills() { + slave.vaginalSkill = (slave.vagina == 0 ? 0 : jsRandom(0,15)); + slave.analSkill = (slave.anus == 0 ? 0 : jsRandom(0,15)); + slave.oralSkill = jsRandom(0,15); + slave.entertainSkill = jsRandom(0,15); + slave.whoreSkill = jsRandom(0,15); + }; + + function generateDisabilities() { + if (slave.physicalAge >= jsRandom(0,100)) { + slave.eyes = -1; + } + if (slave.physicalAge >= jsRandom(30,100)) { + slave.hears = -1; + } + if (V.seeExtreme == 1) { + let disList = []; + disList.push("hearNot"); + disList.push("seeNot"); + disList.push("speakNot"); + let disableCount = 0; + if (V.oneTimeDisableDisability === 0) { + while (disList.length > 0) { + let rolled = jsEither(disList); + switch (rolled) { + case "hearNot": + if ((jsRandom(1,100)-(disableCount*2)) > 90) { + slave.hears = -2; + } + disList.delete("hearNot"); + disableCount++; + break; + case "seeNot": + if ((jsRandom(1,100)-(disableCount*2)) > 90) { + slave.eyes = -2; + } + disList.delete("seeNot"); + disableCount++; + break; + case "speakNot": + if ((jsRandom(1,100)-(disableCount*2)) > 90) { + slave.voice = 0; + } + disList.delete("speakNot"); + disableCount++; + break; + } + } + } + V.oneTimeDisableDisability = 0; + } + }; + + return GenerateNewSlave; +})(); -- GitLab