diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt index 80cd464ea9020e74152972e8757df4bbc9973d25..7f3701b0f2663f354641df22c30765758ca6ab38 100644 --- a/devNotes/twine JS.txt +++ b/devNotes/twine JS.txt @@ -29286,50 +29286,6 @@ window.GetVignette = function GetVignette(slave) { /*:: Slave Generation JS [script]*/ -window.generateAge = function generateAge(slave) { - const V = State.variables; - - 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; -}; - window.nationalityToRace = function nationalityToRace(slave) { slave.race = hashChoice(setup.raceSelector[slave.nationality] || setup.raceSelector[""]); }; @@ -30584,163 +30540,1785 @@ window.randomizeAttraction = function randomizeAttraction(slave) { slave.attrXY = Math.clamp(slave.attrXY + jsRandom(-5, 5), 0, 100); }; -window.disabilityRoll = function disabilityRoll(slave) { - const V = State.variables; - 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; +window.BaseSlave = function BaseSlave() { + State.variables.activeSlave = { + slaveName: "blank", + slaveSurname: 0, + birthName: "blank", + birthSurname: 0, + genes: "XX", + pronoun: "she", + possessive: "her", + possessivePronoun: "hers", + objectReflexive: "herself", + object: "her", + noun: "girl", + weekAcquired: 0, + origin: 0, + career: 0, + ID: 0, + prestige: 0, + pornFeed: 0, + pornFame: 0, + pornFameSpending: 0, + pornPrestige: 0, + pornPrestigeDesc: 0, + pornFameType: "none", + pornFocus: "none", + pornTypeGeneral: 0, + pornTypeFuckdoll: 0, + pornTypeRape: 0, + pornTypePreggo: 0, + pornTypeBBW: 0, + pornTypeGainer: 0, + pornTypeStud: 0, + pornTypeLoli: 0, + pornTypeDeepThroat: 0, + pornTypeStruggleFuck: 0, + pornTypePainal: 0, + pornTypeTease: 0, + pornTypeRomantic: 0, + pornTypePervert: 0, + pornTypeCaring: 0, + pornTypeUnflinching: 0, + pornTypeSizeQueen: 0, + pornTypeNeglectful: 0, + pornTypeCumAddict: 0, + pornTypeAnalAddict: 0, + pornTypeAttentionWhore: 0, + pornTypeBreastGrowth: 0, + pornTypeAbusive: 0, + pornTypeMalicious: 0, + pornTypeSelfHating: 0, + pornTypeBreeder: 0, + pornTypeSub: 0, + pornTypeCumSlut: 0, + pornTypeAnal: 0, + pornTypeHumiliation: 0, + pornTypeBoobs: 0, + pornTypeDom: 0, + pornTypeSadist: 0, + pornTypeMasochist: 0, + pornTypePregnancy: 0, + prestigeDesc: 0, + recruiter: 0, + relation: 0, + relationTarget: 0, + relationship: 0, + relationshipTarget: 0, + rivalry: 0, + rivalryTarget: 0, + subTarget: 0, + father: 0, + mother: 0, + daughters: 0, + sisters: 0, + canRecruit: 0, + choosesOwnAssignment: 0, + assignment: "rest", + assignmentVisible: 1, + sentence: 0, + training: 0, + toyHole: "all her holes", + indenture: -1, + indentureRestrictions: 0, + birthWeek: random(0,51), + actualAge: 18, + visualAge: 18, + physicalAge: 18, + ovaryAge: 18, + ageImplant: 0, + health: 0, + minorInjury: 0, + trust: 0, + oldTrust: 0, + devotion: 0, + oldDevotion: 0, + weight: 0, + muscles: 0, + height: 170, + heightImplant: 0, + nationality: "slave", + race: "white", + origRace: "white", + markings: "none", + eyes: 1, + eyeColor: "brown", + origEye: "brown", + pupil: "circular", + sclerae: "white", + eyewear: "none", + hears: 0, + earwear: "none", + earImplant: 0, + origHColor: "brown", + hColor: "brown", + pubicHColor: "brown", + underArmHColor: "brown", + eyebrowHColor: "brown", + origSkin: "light", + skin: "light", + hLength: 60, + eyebrowFullness: "natural", + hStyle: "short", + pubicHStyle: "neat", + underArmHStyle: "neat", + eyebrowHStyle: "natural", + waist: 0, + corsetPiercing: 0, + PLimb: 0, + amp: 0, + heels:0, + voice: 2, + voiceImplant: 0, + accent: 0, + shoulders: 0, + shouldersImplant: 0, + boobs: 0, + boobsImplant: 0, + boobsImplantType: 0, + boobShape: "normal", + nipples: "cute", + nipplesPiercing: 0, + nipplesAccessory: 0, + areolae: 0, + areolaePiercing: 0, + areolaeShape: "circle", + boobsTat: 0, + lactation: 0, + lactationAdaptation: 0, + milk: 0, + cum: 0, + hips: 0, + hipsImplant: 0, + butt: 0, + buttImplant: 0, + buttImplantType: 0, + buttTat: 0, + face: 0, + faceImplant: 0, + faceShape: "normal", + lips: 15, + lipsImplant: 0, + lipsPiercing: 0, + lipsTat: 0, + teeth: "normal", + tonguePiercing: 0, + vagina: 0, + vaginaLube: 0, + vaginaPiercing: 0, + vaginaTat: 0, + preg: -1, + pregSource: 0, + pregType: 0, + pregAdaptation: 50, + superfetation: 0, + ovaImplant: 0, + broodmother: 0, + broodmotherFetuses: 0, + broodmotherOnHold: 0, + broodmotherCountDown: 0, + labor: 0, + births: 0, + cSec: 0, + bellyAccessory: "none", + labia: 0, + clit: 0, + clitPiercing: 0, + clitSetting: "vanilla", + foreskin: 0, + anus: 0, + dick: 0, + analArea: 1, + dickPiercing: 0, + dickTat: 0, + prostate: 0, + balls: 0, + scrotum: 0, + ovaries: 0, + anusPiercing: 0, + anusTat: 0, + makeup: 0, + nails: 0, + brand: 0, + brandLocation: 0, + earPiercing: 0, + nosePiercing: 0, + eyebrowPiercing: 0, + navelPiercing: 0, + shouldersTat: 0, + armsTat: 0, + legsTat: 0, + backTat: 0, + stampTat: 0, + vaginalSkill: 0, + oralSkill: 0, + analSkill: 0, + whoreSkill: 0, + entertainSkill: 0, + combatSkill: 0, + livingRules: "spare", + speechRules: "restrictive", + releaseRules: "restrictive", + relationshipRules: "restrictive", + standardPunishment: "situational", + standardReward: "situational", + useRulesAssistant: 1, + diet: "healthy", + dietCum: 0, + dietMilk: 0, + tired: 0, + hormones: 0, + drugs: "no drugs", + curatives: 0, + chem: 0, + aphrodisiacs: 0, + addict: 0, + fuckdoll: 0, + choosesOwnClothes: 0, + clothes: "no clothing", + collar: "none", + shoes: "none", + vaginalAccessory: "none", + dickAccessory: "none", + legAccessory: "none", + buttplug: "none", + buttplugAttachment: "none", + intelligence: 0, + intelligenceImplant: 0, + energy: 50, + need: 0, + attrXX: 0, + attrXY: 0, + attrKnown: 0, + fetish: "none", + fetishStrength: 70, + fetishKnown: 0, + behavioralFlaw: "none", + behavioralQuirk: "none", + sexualFlaw: "none", + sexualQuirk: "none", + oralCount: 0, + vaginalCount: 0, + analCount: 0, + mammaryCount: 0, + penetrativeCount: 0, + publicCount: 0, + pitKills: 0, + customTat: "", + customLabel: "", + customDesc: "", + customTitle: "", + customTitleLisp: "", + rudeTitle: 0, + customImage: 0, + currentRules: [], + bellyTat: 0, + induce: 0, + mpreg: 0, + inflation: 0, + inflationType: "none", + inflationMethod: 0, + milkSource: 0, + cumSource: 0, + burst: 0, + pregKnown: 0, + pregWeek: 0, + belly: 0, + bellyPreg: 0, + bellyFluid: 0, + bellyImplant: -1, + bellySag: 0, + bellySagPreg: 0, + bellyPain: 0, + cervixImplant: 0, + birthsTotal: 0, + pubertyAgeXX: 13, + pubertyAgeXY: 13, + scars: 0, + breedingMark: 0, + bodySwap: 0, + HGExclude: 0, + ballType: "human", + eggType: "human", + reservedChildren: 0, + reservedChildrenNursery: 0, + choosesOwnChastity: 0, + pregControl: "none", + readyLimbs: [], + ageAdjust: 0, + bald: 0, + origBodyOwner: "", + origBodyOwnerID: 0, + death: "", + hormoneBalance: 0, + onDiet: 0, + breastMesh: 0, + slavesFathered: 0, + PCChildrenFathered: 0, + slavesKnockedUp: 0, + PCKnockedUp: 0, + prematureBirth: 0, + premature: 0, + origSkin: "white", + vasectomy: 0, + haircuts: 0, + newGamePlus: 0, + skillHG: 0, + skillRC: 0, + skillBG: 0, + skillMD: 0, + skillDJ: 0, + skillNU: 0, + skillTE: 0, + skillAT: 0, + skillMT: 0, + skillST: 0, + skillMM: 0, + skillWA: 0, + skillS: 0, + skillE: 0, + skillW: 0, + tankBaby: 0, + inducedNCS: 0, + NCSyouthening: 0, + override_Race: 0, + override_Skin: 0, + override_Eye_Color: 0, + override_H_Color: 0, + override_Pubic_H_Color: 0, + override_Arm_H_Color: 0, + override_Brow_H_Color: 0, + missingEyes: 0, + missingArms: 0, + missingLegs: 0 + }; +}; + +window.generatePronouns = function generatePronouns(slave) { + if (slave.fuckdoll > 0) { + slave.pronoun = "it"; + slave.possessivePronoun = "its"; + slave.possessive = "its"; + slave.object = "it"; + slave.objectReflexive = "itself"; + slave.noun = "toy"; + } else if (slave.dick > 0 && slave.vagina == -1 && State.variables.diversePronouns == 1) { + slave.pronoun = "he"; + slave.possessivePronoun = "his"; + slave.possessive = "his"; + slave.object = "him"; + slave.objectReflexive = "himself"; + slave.noun = "boy"; + } else { + slave.pronoun = "she"; + slave.possessivePronoun = "hers"; + slave.possessive = "her"; + slave.object = "her"; + slave.objectReflexive = "herself"; + slave.noun = "girl"; + } +}; + +/*:: 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(); } - disList.delete("hearNot"); - disableCount++; + } 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 "seeNot": - if ((jsRandom(1,100)-(disableCount*2)) > 90) { - slave.eyes = -2; - } - disList.delete("seeNot"); - disableCount++; + case "exotic": + case "androgynous": + slave.face += jsRandom(-10,10); break; - case "speakNot": - if ((jsRandom(1,100)-(disableCount*2)) > 90) { - slave.voice = 0; - } - disList.delete("speakNot"); - disableCount++; + 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]); } } - } - V.oneTimeDisableDisability = 0; -}; + }; -window.generateNationality = function generateNationality(slave) { - const V = State.variables; + 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"; + } + }; - if (V.fixedRace == 0) { - if (V.fixedNationality == 0) { - slave.nationality = hashChoice(V.nationalities); + 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 { - slave.nationality = V.fixedNationality; - V.fixedNationality = 0; + maleCrookedTeethGen -= 20; + } + + if (jsRandom(0, maleCrookedTeethGen) <= 15 && slave.physicalAge >= 12) { + slave.teeth = "crooked"; } - nationalityToRace(slave); - if (passage() == "Corporate Market" && (V.captureUpgradeRace != "unselected") && (V.captureUpgradeRace != "none")) { - if (V.captureUpgradeRace == "mixed race") { - slave.race = "mixed race"; + 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 { - 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]]; - } + 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; } - if (Object.keys(capUpgradeNationalities).length > 0) { - slave.nationality = hashChoice(capUpgradeNationalities); + } + } 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 { - slave.nationality = hashChoice(capUpgradeCheck); + 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; } - 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; } + }; - } else { - switch (V.fixedRace) { - case "white": - slave.nationality = hashChoice(setup.whiteNationalities); + 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 "asian": - slave.nationality = hashChoice(setup.asianNationalities); + 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.nationality = hashChoice(setup.latinaNationalities); - break; - case "black": - slave.nationality = hashChoice(setup.blackNationalities); + 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": - 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); + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["dark", "light"]); + slave.hColor = "black"; + slave.hStyle = "neat"; break; - case "indo-aryan": - slave.nationality = hashChoice(setup.indoaryanNationalities); + case "asian": + slave.lips = jsRandom(5,25); + slave.skin = jsEither(["light olive", "dark olive", "light"]); + slave.hColor = "black"; + slave.hStyle = "neat"; break; - case "malay": - slave.nationality = hashChoice(setup.malayNationalities); + 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.nationality = hashChoice(V.nationalities); + 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"; } - slave.race = V.fixedRace; - V.fixedRace = 0; - } -}; - -window.generateIntelligence = function generateIntelligence(slave) { - const gaussian = gaussianPair(); - slave.intelligence = Intelligence.random(); - if (State.variables.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; + 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"]); } - } 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 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; } } - } -}; -window.generateCareer = function generateCareer(slave) { - if (State.variables.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(); + var BoobShapeGen = []; + if (slave.boobs > 250 && slave.boobs < 800) { + BoobShapeGen.push("perky"); + BoobShapeGen.push("downward-facing"); } - } 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(); + 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.career = setup.uneducatedCareers.random(); + 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; +})(); /*SecForceEX JS*/ window.SFC = function() { diff --git a/src/js/generateNewSlaveJS.tw b/src/js/generateNewSlaveJS.tw new file mode 100644 index 0000000000000000000000000000000000000000..056ca833fe772f0b7752984e005d090cfc8f99cf --- /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; +})(); diff --git a/src/js/slaveGenerationJS.tw b/src/js/slaveGenerationJS.tw index 49d8ebb991c7db82e3389fa6f547355b8e6eb8b3..4951b7b74e0a05363020ef72deff68a10e60ad8d 100644 --- a/src/js/slaveGenerationJS.tw +++ b/src/js/slaveGenerationJS.tw @@ -1,49 +1,5 @@ :: Slave Generation JS [script] -window.generateAge = function generateAge(slave) { - const V = State.variables; - - 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; -}; - window.nationalityToRace = function nationalityToRace(slave) { slave.race = hashChoice(setup.raceSelector[slave.nationality] || setup.raceSelector[""]); }; @@ -1298,160 +1254,382 @@ window.randomizeAttraction = function randomizeAttraction(slave) { slave.attrXY = Math.clamp(slave.attrXY + jsRandom(-5, 5), 0, 100); }; -window.disabilityRoll = function disabilityRoll(slave) { - const V = State.variables; - 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; +window.BaseSlave = function BaseSlave() { + State.variables.activeSlave = { + slaveName: "blank", + slaveSurname: 0, + birthName: "blank", + birthSurname: 0, + genes: "XX", + pronoun: "she", + possessive: "her", + possessivePronoun: "hers", + objectReflexive: "herself", + object: "her", + noun: "girl", + weekAcquired: 0, + origin: 0, + career: 0, + ID: 0, + prestige: 0, + pornFeed: 0, + pornFame: 0, + pornFameSpending: 0, + pornPrestige: 0, + pornPrestigeDesc: 0, + pornFameType: "none", + pornFocus: "none", + pornTypeGeneral: 0, + pornTypeFuckdoll: 0, + pornTypeRape: 0, + pornTypePreggo: 0, + pornTypeBBW: 0, + pornTypeGainer: 0, + pornTypeStud: 0, + pornTypeLoli: 0, + pornTypeDeepThroat: 0, + pornTypeStruggleFuck: 0, + pornTypePainal: 0, + pornTypeTease: 0, + pornTypeRomantic: 0, + pornTypePervert: 0, + pornTypeCaring: 0, + pornTypeUnflinching: 0, + pornTypeSizeQueen: 0, + pornTypeNeglectful: 0, + pornTypeCumAddict: 0, + pornTypeAnalAddict: 0, + pornTypeAttentionWhore: 0, + pornTypeBreastGrowth: 0, + pornTypeAbusive: 0, + pornTypeMalicious: 0, + pornTypeSelfHating: 0, + pornTypeBreeder: 0, + pornTypeSub: 0, + pornTypeCumSlut: 0, + pornTypeAnal: 0, + pornTypeHumiliation: 0, + pornTypeBoobs: 0, + pornTypeDom: 0, + pornTypeSadist: 0, + pornTypeMasochist: 0, + pornTypePregnancy: 0, + prestigeDesc: 0, + recruiter: 0, + relation: 0, + relationTarget: 0, + relationship: 0, + relationshipTarget: 0, + rivalry: 0, + rivalryTarget: 0, + subTarget: 0, + father: 0, + mother: 0, + daughters: 0, + sisters: 0, + canRecruit: 0, + choosesOwnAssignment: 0, + assignment: "rest", + assignmentVisible: 1, + sentence: 0, + training: 0, + toyHole: "all her holes", + indenture: -1, + indentureRestrictions: 0, + birthWeek: random(0,51), + actualAge: 18, + visualAge: 18, + physicalAge: 18, + ovaryAge: 18, + ageImplant: 0, + health: 0, + minorInjury: 0, + trust: 0, + oldTrust: 0, + devotion: 0, + oldDevotion: 0, + weight: 0, + muscles: 0, + height: 170, + heightImplant: 0, + nationality: "slave", + race: "white", + origRace: "white", + markings: "none", + eyes: 1, + eyeColor: "brown", + origEye: "brown", + pupil: "circular", + sclerae: "white", + eyewear: "none", + hears: 0, + earwear: "none", + earImplant: 0, + origHColor: "brown", + hColor: "brown", + pubicHColor: "brown", + underArmHColor: "brown", + eyebrowHColor: "brown", + origSkin: "light", + skin: "light", + hLength: 60, + eyebrowFullness: "natural", + hStyle: "short", + pubicHStyle: "neat", + underArmHStyle: "neat", + eyebrowHStyle: "natural", + waist: 0, + corsetPiercing: 0, + PLimb: 0, + amp: 0, + heels:0, + voice: 2, + voiceImplant: 0, + accent: 0, + shoulders: 0, + shouldersImplant: 0, + boobs: 0, + boobsImplant: 0, + boobsImplantType: 0, + boobShape: "normal", + nipples: "cute", + nipplesPiercing: 0, + nipplesAccessory: 0, + areolae: 0, + areolaePiercing: 0, + areolaeShape: "circle", + boobsTat: 0, + lactation: 0, + lactationAdaptation: 0, + milk: 0, + cum: 0, + hips: 0, + hipsImplant: 0, + butt: 0, + buttImplant: 0, + buttImplantType: 0, + buttTat: 0, + face: 0, + faceImplant: 0, + faceShape: "normal", + lips: 15, + lipsImplant: 0, + lipsPiercing: 0, + lipsTat: 0, + teeth: "normal", + tonguePiercing: 0, + vagina: 0, + vaginaLube: 0, + vaginaPiercing: 0, + vaginaTat: 0, + preg: -1, + pregSource: 0, + pregType: 0, + pregAdaptation: 50, + superfetation: 0, + ovaImplant: 0, + broodmother: 0, + broodmotherFetuses: 0, + broodmotherOnHold: 0, + broodmotherCountDown: 0, + labor: 0, + births: 0, + cSec: 0, + bellyAccessory: "none", + labia: 0, + clit: 0, + clitPiercing: 0, + clitSetting: "vanilla", + foreskin: 0, + anus: 0, + dick: 0, + analArea: 1, + dickPiercing: 0, + dickTat: 0, + prostate: 0, + balls: 0, + scrotum: 0, + ovaries: 0, + anusPiercing: 0, + anusTat: 0, + makeup: 0, + nails: 0, + brand: 0, + brandLocation: 0, + earPiercing: 0, + nosePiercing: 0, + eyebrowPiercing: 0, + navelPiercing: 0, + shouldersTat: 0, + armsTat: 0, + legsTat: 0, + backTat: 0, + stampTat: 0, + vaginalSkill: 0, + oralSkill: 0, + analSkill: 0, + whoreSkill: 0, + entertainSkill: 0, + combatSkill: 0, + livingRules: "spare", + speechRules: "restrictive", + releaseRules: "restrictive", + relationshipRules: "restrictive", + standardPunishment: "situational", + standardReward: "situational", + useRulesAssistant: 1, + diet: "healthy", + dietCum: 0, + dietMilk: 0, + tired: 0, + hormones: 0, + drugs: "no drugs", + curatives: 0, + chem: 0, + aphrodisiacs: 0, + addict: 0, + fuckdoll: 0, + choosesOwnClothes: 0, + clothes: "no clothing", + collar: "none", + shoes: "none", + vaginalAccessory: "none", + dickAccessory: "none", + legAccessory: "none", + buttplug: "none", + buttplugAttachment: "none", + intelligence: 0, + intelligenceImplant: 0, + energy: 50, + need: 0, + attrXX: 0, + attrXY: 0, + attrKnown: 0, + fetish: "none", + fetishStrength: 70, + fetishKnown: 0, + behavioralFlaw: "none", + behavioralQuirk: "none", + sexualFlaw: "none", + sexualQuirk: "none", + oralCount: 0, + vaginalCount: 0, + analCount: 0, + mammaryCount: 0, + penetrativeCount: 0, + publicCount: 0, + pitKills: 0, + customTat: "", + customLabel: "", + customDesc: "", + customTitle: "", + customTitleLisp: "", + rudeTitle: 0, + customImage: 0, + currentRules: [], + bellyTat: 0, + induce: 0, + mpreg: 0, + inflation: 0, + inflationType: "none", + inflationMethod: 0, + milkSource: 0, + cumSource: 0, + burst: 0, + pregKnown: 0, + pregWeek: 0, + belly: 0, + bellyPreg: 0, + bellyFluid: 0, + bellyImplant: -1, + bellySag: 0, + bellySagPreg: 0, + bellyPain: 0, + cervixImplant: 0, + birthsTotal: 0, + pubertyAgeXX: 13, + pubertyAgeXY: 13, + scars: 0, + breedingMark: 0, + bodySwap: 0, + HGExclude: 0, + ballType: "human", + eggType: "human", + reservedChildren: 0, + reservedChildrenNursery: 0, + choosesOwnChastity: 0, + pregControl: "none", + readyLimbs: [], + ageAdjust: 0, + bald: 0, + origBodyOwner: "", + origBodyOwnerID: 0, + death: "", + hormoneBalance: 0, + onDiet: 0, + breastMesh: 0, + slavesFathered: 0, + PCChildrenFathered: 0, + slavesKnockedUp: 0, + PCKnockedUp: 0, + prematureBirth: 0, + premature: 0, + origSkin: "white", + vasectomy: 0, + haircuts: 0, + newGamePlus: 0, + skillHG: 0, + skillRC: 0, + skillBG: 0, + skillMD: 0, + skillDJ: 0, + skillNU: 0, + skillTE: 0, + skillAT: 0, + skillMT: 0, + skillST: 0, + skillMM: 0, + skillWA: 0, + skillS: 0, + skillE: 0, + skillW: 0, + tankBaby: 0, + inducedNCS: 0, + NCSyouthening: 0, + override_Race: 0, + override_Skin: 0, + override_Eye_Color: 0, + override_H_Color: 0, + override_Pubic_H_Color: 0, + override_Arm_H_Color: 0, + override_Brow_H_Color: 0, + missingEyes: 0, + missingArms: 0, + missingLegs: 0 + }; }; -window.generateNationality = function generateNationality(slave) { - const V = State.variables; - - 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; - } -}; - -window.generateIntelligence = function generateIntelligence(slave) { - const gaussian = gaussianPair(); - slave.intelligence = Intelligence.random(); - if (State.variables.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; - } - } +window.generatePronouns = function generatePronouns(slave) { + if (slave.fuckdoll > 0) { + slave.pronoun = "it"; + slave.possessivePronoun = "its"; + slave.possessive = "its"; + slave.object = "it"; + slave.objectReflexive = "itself"; + slave.noun = "toy"; + } else if (slave.dick > 0 && slave.vagina == -1 && State.variables.diversePronouns == 1) { + slave.pronoun = "he"; + slave.possessivePronoun = "his"; + slave.possessive = "his"; + slave.object = "him"; + slave.objectReflexive = "himself"; + slave.noun = "boy"; } 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; - } - } - } -}; - -window.generateCareer = function generateCareer(slave) { - if (State.variables.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(); - } + slave.pronoun = "she"; + slave.possessivePronoun = "hers"; + slave.possessive = "her"; + slave.object = "her"; + slave.objectReflexive = "herself"; + slave.noun = "girl"; } }; diff --git a/src/uncategorized/generateNewSlave.tw b/src/uncategorized/generateNewSlave.tw index 7e5e2fd2f80615b7f4c35091bc5457d98ee61931..f77773d4deee5b90ff13d5d21f8f48481ccd7915 100644 --- a/src/uncategorized/generateNewSlave.tw +++ b/src/uncategorized/generateNewSlave.tw @@ -1,25 +1,3 @@ :: Generate New Slave [nobr] -<<if (random(0,99) < $seeDicks)>> - <<include "Generate XY Slave">> -<<elseif ($seeDicks > 0)>> - <<if ($arcologies[0].FSGenderFundamentalistSMR == 1 || $arcologies[0].FSRepopulationFocusSMR == 1)>> - <<set _femaleSlaveGen = 90>> - <<elseif ($arcologies[0].FSGenderRadicalist != "unset")>> - <<set _femaleSlaveGen = 50>> - <<else>> - <<set _femaleSlaveGen = 80>> - <</if>> - <<if (random(1,100) > _femaleSlaveGen) && (random(0,99) < $seeDicks)>> - <<include "Generate XY Slave">> - <<else>> - <<include "Generate XX Slave">> - <</if>> -<<else>> - <<include "Generate XX Slave">> -<</if>> -/* Superfetation as rare genetic disorder 1 from 100, not active for now. -<<if (random(0,99) <= 1)>> - <<set $activeSlave.superfetation = 1>> -<</if>> -*/ +<<run GenerateNewSlave()>> diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw index b84d7aad72dfaf190119ee7f28959328e8ccdd14..a9e3ec9200c3b87a2c11a5ea380dfa78697061f0 100644 --- a/src/uncategorized/generateXXSlave.tw +++ b/src/uncategorized/generateXXSlave.tw @@ -1,454 +1,3 @@ :: Generate XX Slave [nobr] -<<BaseSlave>> -/*missed variables - getting tired of this shit */ -<<set WombInit($activeSlave)>> -<<set $activeSlave.vaginaLube = 1, $activeSlave.ovaries = 1, $activeSlave.canRecruit = 1>> - -<<run generateAge($activeSlave)>> - -<<if $activeSlave.physicalAge < 6>> - <<set $activeSlave.teeth = "baby">> -<<elseif $activeSlave.physicalAge < 12>> - <<set $activeSlave.teeth = "mixed">> -<</if>> - -<<if $activeSlave.ovaries == 1>> - <<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXX>> - <<set $activeSlave.pubertyXX = 1>> - <<else>> - <<set $activeSlave.pubertyXX = 0>> - <</if>> -<<else>> - <<set $activeSlave.pubertyXX = 0>> -<</if>> -<<set $activeSlave.pubertyXY = 0>> - -<<set $activeSlave.ID = $IDNumber++>> -<<set $activeSlave.weekAcquired = $week>> - -<<run generateIntelligence($activeSlave)>> -<<run generateCareer($activeSlave)>> - -<<set $activeSlave.vaginalSkill = random(0,15)>> -<<set $activeSlave.analSkill = random(0,15)>> -<<set $activeSlave.oralSkill = random(0,15)>> -<<set $activeSlave.entertainSkill = random(0,15)>> -<<set $activeSlave.whoreSkill = random(0,15)>> - -<<set $activeSlave.energy = random(1,85)>> -<<run randomizeAttraction($activeSlave)>> -<<set $activeSlave.fetishStrength = random(0,90)>> -<<set $activeSlave.fetish = either("none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "submissive", "submissive", "cumslut", "humiliation", "humiliation", "buttslut", "boobs", "pregnancy", "dom", "sadist", "masochist")>> - -<<set $activeSlave.behavioralFlaw = either("none", "none", "none", "arrogant", "bitchy", "odd", "hates men", "hates women", "hates women", "anorexic", "gluttonous", "devout", "liberated")>> -<<if ($activeSlave.behavioralFlaw == "devout")>> - <<set $activeSlave.sexualFlaw = either("none", "repressed", "shamefast", "apathetic", "crude", "judgemental")>> -<<else>> - <<set $activeSlave.sexualFlaw = either("none", "none", "none", "none", "hates oral", "hates anal", "hates penetration", "repressed", "idealistic", "shamefast", "apathetic", "crude", "judgemental")>> -<</if>> -<<if ($activeSlave.behavioralFlaw == "none") && random(1,10) == 1>> - <<set $activeSlave.behavioralQuirk = either("confident", "cutting", "funny", "adores women", "adores men", "fitness", "insecure", "sinful", "advocate")>> -<</if>> -<<if ($activeSlave.sexualFlaw == "none") && random(1,10) == 1>> - <<set $activeSlave.sexualQuirk = either("gagfuck queen", "painal queen", "strugglefuck queen", "tease", "romantic", "perverted", "caring", "unflinching", "size queen")>> -<</if>> - -<<set $activeSlave.health = random(-50,50)>> - -<<set $activeSlave.devotion = random(-90,-60)>> -<<set $activeSlave.trust = random(-45,-25)>> - -/% Begin height replacement section. %/ -/% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/ -<<run generateNationality($activeSlave)>> /* includes race selection */ -<<run nationalityToName($activeSlave)>> -<<run nationalityToAccent($activeSlave)>> - -<<set $activeSlave.height = Math.round(Height.random($activeSlave))>> - -<<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>> -/% End height replacement section. %/ - -<<set $activeSlave.weight = random(-100,180)>> -<<if ($activeSlave.weight < -30)>> - <<set $activeSlave.waist = random(-55,0)>> -<<elseif $activeSlave.physicalAge < 13>> - <<set $activeSlave.waist = random(-25,25)>> -<<elseif ($activeSlave.weight <= 30)>> - <<set $activeSlave.waist = random(-45,45)>> -<<elseif ($activeSlave.weight <= 160)>> - <<set $activeSlave.waist = random(0,55)>> -<<else>> - <<set $activeSlave.waist = random(50,100)>> -<</if>> - -<<if ($activeSlave.physicalAge > random(0,100))>> - <<set $activeSlave.eyes = -1>> -<</if>> -<<if ($activeSlave.physicalAge > random(30,100))>> - <<set $activeSlave.hears = -1>> -<</if>> - - -<<if ($activeSlave.intelligenceImplant >= 15 || $activeSlave.intelligence > 95) && ($activeSlave.accent >= 3) && ($activeSlave.intelligence) > random(0,100)>> - <<set $activeSlave.accent -= 1>> -<</if>> - -<<set _femaleCrookedTeethGen = $activeSlave.intelligence+$activeSlave.intelligenceImplant>> -<<if "American" == $activeSlave.nationality>> - <<set _femaleCrookedTeethGen += 20>> -<<elseif ["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($activeSlave.nationality)>> -<<else>> - <<set _femaleCrookedTeethGen -= 20>> -<</if>> -<<if random(0,_femaleCrookedTeethGen) <= 15 && $activeSlave.physicalAge >= 12>> - <<set $activeSlave.teeth = "crooked">> -<</if>> - -<<switch $activeSlave.race>> -<<case "black">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3, 4, 4)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(150)>> - <<set $activeSlave.lips = random(5,30)>> - <<set $activeSlave.skin = either("black", "dark brown", "brown")>> - <<set $activeSlave.hColor = either("black", "black", "black", "brown")>> - <<set $activeSlave.hStyle = either("neat", "crinkled")>> -<<case "white">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3, 4)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(50)>> - <<set $activeSlave.lips = random(5,25)>> - <<if $activeSlave.nationality == "German">> - <<set $activeSlave.skin = either("pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "blue", "blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "blonde", "blonde", "red", "brown")>> - <<elseif $activeSlave.nationality == "Icelandic">> - <<set $activeSlave.skin = either("pale", "pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "blue", "blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "blonde", "blonde", "red", "brown")>> - <<elseif $activeSlave.nationality == "Irish">> - <<set $activeSlave.skin = either("pale", "pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "green", "green", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "red", "red", "red", "brown")>> - <<elseif $activeSlave.nationality == "Scottish">> - <<set $activeSlave.skin = either("pale", "fair", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "brown", "green", "green", "green")>> - <<set $activeSlave.hColor = either("black", "black", "blonde", "red", "red", "red", "brown")>> - <<else>> - <<set $activeSlave.skin = either("pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "red", "brown")>> - <</if>> - <<set $activeSlave.hStyle = "neat">> -<<case "latina">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3, 4)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(0)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("light olive", "brown", "dark brown", "tanned", "dark olive")>> - <<set $activeSlave.hColor = either("black", "black", "brown", "brown")>> - <<set $activeSlave.hStyle = "neat">> -<<case "indo-aryan" "malay" "pacific islander" "amerindian">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(0)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("dark", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<case "asian">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(-100)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("light olive", "dark olive", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<case "middle eastern" "semitic" "southern european">> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(0)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("fair", "light olive", "tanned", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<default>> - <<set $activeSlave.butt = either(1, 2, 2, 3, 3, 4)>> - <<set $activeSlave.boobs = BoobGenerator.rollBreast(0)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("pale", "dark", "light")>> - <<set $activeSlave.hColor = either("black", "black", "black", "black", "brown", "brown", "blonde", "red")>> - <<set $activeSlave.hStyle = "neat">> -<</switch>> -<<if ($activeSlave.skin == "pale") || ($activeSlave.skin == "fair")>> - <<if random(1,4) == 1>> - <<set $activeSlave.markings = either("freckles", "freckles", "freckles", "heavily freckled", "beauty mark", "beauty mark", "birthmark", "birthmark")>> - <</if>> -<<elseif random(1,8) == 1>> - <<set $activeSlave.markings = either("beauty mark", "birthmark")>> -<</if>> - -<<set $activeSlave.origRace = $activeSlave.race>> -<<set $activeSlave.origEye = $activeSlave.eyeColor>> -<<set $activeSlave.origHColor = $activeSlave.hColor>> -<<set $activeSlave.origSkin = $activeSlave.skin>> -<<set $activeSlave.pubicHColor = $activeSlave.hColor>> -<<set $activeSlave.pubicHStyle = either("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")>> -<<set $activeSlave.underArmHColor = $activeSlave.hColor>> -<<set $activeSlave.underArmHStyle = either("hairless", "bald", "bald", "waxed", "waxed", "waxed", "waxed", "shaved", "shaved", "shaved", "shaved", "shaved", "neat", "neat", "neat", "neat", "neat", "bushy", "bushy", "bushy")>> -<<if ($activeSlave.pubicHStyle == "hairless" || $activeSlave.underArmHStyle == "hairless") && random(1,100) > 40>> - <<set $activeSlave.pubicHStyle = "hairless", $activeSlave.underArmHStyle = "hairless">> -<</if>> -<<if ($activeSlave.hColor == "blonde" && random(1,20) > 17)>> - <<set $activeSlave.eyebrowHColor = either("brown", "brown", "brown", "brown", "black")>> - <<set $activeSlave.override_Brow_H_Color = 1>> -<<else>> - <<set $activeSlave.eyebrowHColor = $activeSlave.hColor>> -<</if>> -<<set $activeSlave.eyebrowHStyle = either("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")>> -<<set $activeSlave.eyebrowFullness = either("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")>> - -/*LM*/ -<<if ($activeSlave.physicalAge <= 10)>> - <<set $activeSlave.boobs = either(100)>> -<<elseif ($activeSlave.physicalAge == 11)>> - <<set $activeSlave.boobs = either(100, 100, 150, 150, 150, 300)>> -<<elseif ($activeSlave.physicalAge == 12)>> - <<set $activeSlave.boobs = either(100, 100, 150, 150, 150, 200, 200, 300)>> -<<elseif ($activeSlave.physicalAge == 13)>> - <<set $activeSlave.boobs = either(100, 150, 200, 200, 300, 300, 300, 400)>> -<<elseif ($activeSlave.physicalAge == 14)>> - <<set $activeSlave.boobs = either(100 ,150, 200, 300, 300, 300, 350, 400, 400)>> -<<elseif ($activeSlave.physicalAge == 15)>> - <<set $activeSlave.boobs = either(150 ,200, 300, 300, 300, 350, 350, 350, 400, 400, 450, 450)>> -<</if>> - -<<if ($activeSlave.physicalAge <= 11)>> - <<set $activeSlave.butt = either(1, 1, 1, 1, 1, 1, 1)>> -<<elseif ($activeSlave.physicalAge <= 12)>> - <<set $activeSlave.butt = either(1, 1, 1, 1, 1, 2, 2)>> -<<elseif ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.butt = either(1, 1, 1, 1, 2, 2, 2)>> -<<elseif ($activeSlave.physicalAge <= 14)>> - <<set $activeSlave.butt = either(1, 1, 1, 2, 2, 2, 3)>> -<<elseif ($activeSlave.physicalAge <= 15)>> - <<set $activeSlave.butt = either(1, 1, 2, 2, 2, 2, 3)>> -<</if>> -/*end LM*/ - -<<if ($weightAffectsAssets != 0)>> - <<if $activeSlave.weight < -10 && $activeSlave.butt > 1>> - <<set $activeSlave.butt -= 1>> - <<elseif $activeSlave.weight > 100 && $activeSlave.butt < 6>> - <<set $activeSlave.butt += random(1,2)>> - <<elseif $activeSlave.weight > 10 && $activeSlave.butt < 4>> - <<set $activeSlave.butt += 1>> - <</if>> - - <<if $activeSlave.weight < -10 && $activeSlave.boobs > 200>> - <<set $activeSlave.boobs -= 100>> - <<elseif $activeSlave.weight > 190 && $activeSlave.boobs < 3000>> - <<set $activeSlave.boobs += (random(3,8)*100)>> - <<elseif $activeSlave.weight > 160 && $activeSlave.boobs < 1500>> - <<set $activeSlave.boobs += (random(2,6)*100)>> - <<elseif $activeSlave.weight > 130 && $activeSlave.boobs < 1500>> - <<set $activeSlave.boobs += (random(1,4)*100)>> - <<elseif $activeSlave.weight > 95 && $activeSlave.boobs < 1200>> - <<set $activeSlave.boobs += (random(1,3)*100)>> - <<elseif $activeSlave.weight > 30 && $activeSlave.boobs < 1000>> - <<set $activeSlave.boobs += 100>> - <</if>> -<</if>> - -<<set _femaleBoobShapeGen = []>> -<<if $activeSlave.boobs > 250 && $activeSlave.boobs < 800>> - <<set _femaleBoobShapeGen.push("perky")>> - <<set _femaleBoobShapeGen.push("downward-facing")>> -<</if>> -<<if $activeSlave.boobs > 400 && $activeSlave.boobs < 1200>> - <<set _femaleBoobShapeGen.push("torpedo-shaped")>> - <<set _femaleBoobShapeGen.push("wide-set")>> -<</if>> -<<if $activeSlave.boobs > 800 && $activeSlave.physicalAge > random(10,50)>> - <<set _femaleBoobShapeGen.push("saggy")>> -<</if>> -<<if _femaleBoobShapeGen.length == 1>> - <<if random(1,2) != 1>> - <<set $activeSlave.boobShape = _femaleBoobShapeGen.random()>> - <</if>> -<<elseif _femaleBoobShapeGen.length > 1>> - <<if random(1,3) != 1>> - <<set $activeSlave.boobShape = _femaleBoobShapeGen.random()>> - <</if>> -<</if>> - -<<if passage() != "Starting Girls">> - <<set $activeSlave.earPiercing = either(0,1)>> - <<set $activeSlave.nosePiercing = either(0,0,0,1)>> - <<set $activeSlave.eyebrowPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.clitPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.lipsPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.navelPiercing = either(0,0,0,1)>> - <<set $activeSlave.nipplesPiercing = either(0,0,0,0,1)>> -<</if>> - -<<set $activeSlave.face = random(-60,60)>> -<<if random(0,2) == 1>><<set $activeSlave.face = random(-10,10)>><</if>> -<<if $activeSlave.physicalAge > 40>> - <<set $activeSlave.face -= random(0,20)>> -<<elseif $activeSlave.physicalAge > 35>> - <<set $activeSlave.face -= random(0,10)>> -<<elseif $activeSlave.physicalAge <= 20>> - <<set $activeSlave.face += random(0,20)>> -<<elseif $activeSlave.physicalAge <= 25>> - <<set $activeSlave.face += random(0,10)>> -<</if>> -<<if $activeSlave.physicalAge > 10>> - <<set $activeSlave.faceShape = either("androgynous", "cute", "sensual", "exotic", "normal", "normal")>> -<<else>> - <<set $activeSlave.faceShape = either("androgynous", "androgynous", "cute", "cute", "sensual", "exotic", "normal", "normal")>> -<</if>> -<<switch $activeSlave.faceShape>> -<<case "sensual" "cute">> - <<set $activeSlave.face += random(0,20)>> -<<case "exotic" "androgynous">> - <<set $activeSlave.face += random(-10,10)>> -<<case "masculine">> - <<set $activeSlave.face += random(-10,0)>> -<</switch>> - -<<if $activeSlave.boobs < 250>> - <<set $activeSlave.nipples = either("tiny", "tiny", "tiny", "tiny", "cute", "cute", "puffy", "partially inverted")>> -<<elseif $activeSlave.boobs < 500>> - <<set $activeSlave.nipples = either("tiny", "cute", "cute", "cute", "puffy", "partially inverted")>> -<<elseif $activeSlave.boobs < 1000>> - <<set $activeSlave.nipples = either("tiny", "cute", "cute", "cute", "puffy", "puffy", "partially inverted", "inverted")>> -<<else>> - <<set $activeSlave.nipples = either("cute", "puffy", "partially inverted", "inverted", "huge")>> -<</if>> - -<<set $activeSlave.vagina = either(0, 0, 1, 1, 1)>> -<<if $activeSlave.actualAge < 20>> - <<set $activeSlave.vagina = either(0, 1)>> -<</if>> -<<if $activeSlave.actualAge > 30>> - <<set $activeSlave.vagina = either(1, 1, 1, 1, 2)>> -<</if>> -<<if $activeSlave.vagina == 0>> - <<set $activeSlave.vaginalSkill = 0>> -<</if>> -<<if $activeSlave.energy < random(1,80)>> - <<set $activeSlave.vaginaLube = 0>> -<<elseif $activeSlave.physicalAge > random(35,60)>> - <<set $activeSlave.vaginaLube = 0>> -<</if>> - -<<set $activeSlave.clit = either(0, 0, 0, 0, 0, 0, 1, 1, 2)>> -<<set $activeSlave.labia = either(0, 0, 0, 1, 1, 1, 1, 2, 2, 3)>> -<<set $activeSlave.foreskin = random(0,4)>> - -<<set $activeSlave.voice = either(1, 2, 2, 2, 2, 2, 2, 3, 3, 3)>> - -<<set $activeSlave.anus = either(0, 0, 1, 1, 2)>> -<<set $activeSlave.analArea = $activeSlave.anus + either(0, 0, 0, 1)>> - -<<if $activeSlave.anus == 0>> - <<set $activeSlave.analSkill = 0>> -<<elseif random(1,4) == 1>> - <<set $activeSlave.anusTat = "bleached">> -<</if>> - -/%pedoshit%/ -<<if $activeSlave.physicalAge <= 11>> - <<set $activeSlave.hips = either(-2, -2, -1, -1, 0)>> -<<elseif $activeSlave.physicalAge <= 13>> - <<set $activeSlave.hips = either(-2, -1, -1, 0, 1)>> -<</if>> -<<if $activeSlave.physicalAge <= 13>> - <<set $activeSlave.vagina = either(0, 0, 0, 0, 0, 0, 0, 1)>> -<<elseif $activeSlave.physicalAge <= 15>> - <<set $activeSlave.vagina = either(0, 0, 0, 0, 0, 1, 1)>> -<<elseif $activeSlave.physicalAge <= 17>> - <<set $activeSlave.vagina = either(0, 0, 0, 1, 1, 1)>> -<</if>> - -<<if $activeSlave.vagina == 0>> - <<set $activeSlave.vaginalSkill = 0>> -<</if>> - -<<if ($activeSlave.physicalAge <= 11)>> - <<set $activeSlave.clit = either(0, 0, 0, 0, 0, 0, 0, 0, 1)>> -<<elseif ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.clit = either(0, 0, 0, 0, 0, 0, 0, 1, 1)>> -<<elseif ($activeSlave.physicalAge <= 15)>> - <<set $activeSlave.clit = either(0, 0, 0, 0, 0, 0, 0, 1, 2)>> -<</if>> - -<<if ($activeSlave.physicalAge <= 11)>> - <<set $activeSlave.labia = either(0, 0, 0, 0, 0, 0, 0, 1, 1)>> -<<elseif ($activeSlave.physicalAge <= 12)>> - <<set $activeSlave.labia = either(0, 0, 0, 0, 0, 0, 1, 1, 1)>> -<<elseif ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.labia = either(0, 0, 0, 0, 0, 1, 1, 1, 1)>> -<<elseif ($activeSlave.physicalAge <= 14)>> - <<set $activeSlave.labia = either(0, 0, 0, 0, 1, 1, 1, 1, 2)>> -<<elseif ($activeSlave.physicalAge <= 15)>> - <<set $activeSlave.labia = either(0, 0, 0, 1, 1, 1, 1, 2, 2)>> -<</if>> - -<<if ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.voice = either(2, 2, 2, 3, 3, 3, 3, 3, 3)>> -<<elseif ($activeSlave.physicalAge <= 16)>> - <<set $activeSlave.voice = either(2, 2, 2, 2, 2, 3, 3, 3, 3)>> -<</if>> - -<<if $activeSlave.physicalAge <= 6>> - <<set $activeSlave.pregAdaptation = 5>> -<<elseif $activeSlave.physicalAge <= 7>> - <<set $activeSlave.pregAdaptation = 6>> -<<elseif $activeSlave.physicalAge <= 8>> - <<set $activeSlave.pregAdaptation = 7>> -<<elseif $activeSlave.physicalAge <= 9>> - <<set $activeSlave.pregAdaptation = 8>> -<<elseif $activeSlave.physicalAge <= 10>> - <<set $activeSlave.pregAdaptation = 9>> -<<elseif $activeSlave.physicalAge <= 11>> - <<set $activeSlave.pregAdaptation = 10>> -<<elseif $activeSlave.physicalAge <= 12>> - <<set $activeSlave.pregAdaptation = 14>> -<<elseif $activeSlave.physicalAge <= 13>> - <<set $activeSlave.pregAdaptation = 18>> -<<elseif $activeSlave.physicalAge <= 14>> - <<set $activeSlave.pregAdaptation = 22>> -<<elseif $activeSlave.physicalAge <= 15>> - <<set $activeSlave.pregAdaptation = 28>> -<<elseif $activeSlave.physicalAge <= 16>> - <<set $activeSlave.pregAdaptation = 34>> -<<elseif $activeSlave.physicalAge <= 17>> - <<set $activeSlave.pregAdaptation = 42>> -<<else>> - <<set $activeSlave.pregAdaptation = 50>> -<</if>> - -<<if $activeSlave.fuckdoll > 0>> - <<set $activeSlave.pronoun = "it", $activeSlave.possessivePronoun = "its", $activeSlave.possessive = "its", $activeSlave.object = "it", $activeSlave.objectReflexive = "itself", $activeSlave.noun = "toy">> -<<elseif $activeSlave.dick > 0 && $activeSlave.vagina == -1 && $diversePronouns == 1>> - <<set $activeSlave.pronoun = "he", $activeSlave.possessivePronoun = "his", $activeSlave.possessive = "his", $activeSlave.object = "him", $activeSlave.objectReflexive = "himself", $activeSlave.noun = "boy">> -<<else>> - <<set $activeSlave.pronoun = "she", $activeSlave.possessivePronoun = "hers", $activeSlave.possessive = "her", $activeSlave.object = "her", $activeSlave.objectReflexive = "herself", $activeSlave.noun = "girl">> -<</if>> - -<<if passage() == "Slave Markets" && $slaveMarket == "corporate">> - <<if ($captureUpgradeRace != "unselected") && ($captureUpgradeRace != "none")>> - <<if $activeSlave.race != $captureUpgradeRace>> - <<set $slaveMarket = "corporate">> - <<goto "Slave Markets">> - <</if>> - <</if>> -<</if>> - -<<if $seeExtreme == 1>> - <<run disabilityRoll($activeSlave)>> -<</if>> +<<run GenerateNewSlave("XX")>> diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw index 8810d3fa11c183725c6c014318243b96adfa384e..c7d29889638e3c61bb6464f1a6878d7f67725ab5 100644 --- a/src/uncategorized/generateXYSlave.tw +++ b/src/uncategorized/generateXYSlave.tw @@ -1,614 +1,3 @@ :: Generate XY Slave [nobr] -<<BaseSlave>> -/% Defaults that differ from the old template %/ -<<set WombInit($activeSlave)>> -<<set $activeSlave.genes = "XY", $activeSlave.hLength = 10, $activeSlave.prostate = 1, $activeSlave.canRecruit = 1>> - -<<run generateAge($activeSlave)>> - -<<if $activeSlave.physicalAge < 6>> - <<set $activeSlave.teeth = "baby">> -<<elseif $activeSlave.physicalAge < 12>> - <<set $activeSlave.teeth = "mixed">> -<</if>> - -<<if $activeSlave.ovaries == 1>> - <<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXX>> - <<set $activeSlave.pubertyXX = 1>> - <<else>> - <<set $activeSlave.pubertyXX = 0>> - <</if>> -<<else>> - <<set $activeSlave.pubertyXX = 0>> -<</if>> - -<<set $activeSlave.ID = $IDNumber++>> -<<set $activeSlave.weekAcquired = $week>> - -<<run generateIntelligence($activeSlave)>> -<<run generateCareer($activeSlave)>> - -<<set $activeSlave.vaginalSkill = 0>> -<<set $activeSlave.analSkill = random(0,15)>> -<<set $activeSlave.oralSkill = random(0,15)>> -<<set $activeSlave.entertainSkill = random(0,15)>> -<<set $activeSlave.whoreSkill = random(0,15)>> - -<<set $activeSlave.energy = random(15,90)>> -<<run randomizeAttraction($activeSlave)>> -<<set $activeSlave.fetishStrength = random(0,90)>> -<<set $activeSlave.fetish = either("none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "submissive", "cumslut", "humiliation", "buttslut", "buttslut", "boobs", "dom", "sadist", "masochist")>> - -<<set $activeSlave.behavioralFlaw = either("none", "none", "none", "arrogant", "bitchy", "odd", "hates men", "hates men", "hates men", "hates women", "anorexic", "gluttonous", "devout", "liberated")>> -<<if ($activeSlave.behavioralFlaw == "devout")>> - <<set $activeSlave.sexualFlaw = either("none", "repressed", "shamefast", "apathetic", "crude", "judgemental")>> -<<else>> - <<set $activeSlave.sexualFlaw = either("none", "none", "none", "none", "hates oral", "hates anal", "hates anal", "repressed", "idealistic", "shamefast", "apathetic", "crude", "judgemental")>> -<</if>> -<<if ($activeSlave.behavioralFlaw == "none") && random(1,10) == 1>> - <<set $activeSlave.behavioralQuirk = either("confident", "cutting", "funny", "adores women", "adores men", "fitness", "insecure", "sinful", "advocate")>> -<</if>> -<<if ($activeSlave.sexualFlaw == "none") && random(1,10) == 1>> - <<set $activeSlave.sexualQuirk = either("gagfuck queen", "painal queen", "strugglefuck queen", "tease", "romantic", "perverted", "caring", "unflinching", "size queen")>> -<</if>> - -<<set $activeSlave.health = random(-50,50)>> - -<<set $activeSlave.devotion = random(-90,-60)>> -<<set $activeSlave.trust = random(-45,-25)>> - -<<if ($activeSlave.physicalAge > random(0,100))>> - <<set $activeSlave.eyes = -1>> -<</if>> -<<if ($activeSlave.physicalAge > random(30,100))>> - <<set $activeSlave.hears = -1>> -<</if>> - -/% Begin height replacement section. %/ -/% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/ -<<run generateNationality($activeSlave)>> /* includes race selection */ -<<run nationalityToName($activeSlave)>> -<<run nationalityToAccent($activeSlave)>> - -<<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 $activeSlave.hips = either(-2, -2, -1, -1, 0)>> - <<set $activeSlave.shoulders = either(-2, -1, -1, 0, 0, 1)>> - <</if>> -<<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 $activeSlave.hips = either(-2, -2, -1, -1, 0)>> - <<set $activeSlave.shoulders = either(-1, 0, 0, 1, 1, 2)>> - <</if>> -<</if>> -/% End height replacement section. %/ - -<<set $activeSlave.weight = random(-100, 180)>> -<<if $activeSlave.physicalAge < 13>> - <<set $activeSlave.waist = random(-15,25)>> -<<elseif ($activeSlave.weight < -30)>> - <<set $activeSlave.waist = random(-45,45)>> -<<elseif ($activeSlave.weight <= 30)>> - <<set $activeSlave.waist = random(-15,65)>> -<<elseif ($activeSlave.weight <= 160)>> - <<set $activeSlave.waist = random(5,100)>> -<<else>> - <<set $activeSlave.waist = random(50,100)>> -<</if>> - -<<if ($activeSlave.intelligenceImplant >= 15 || $activeSlave.intelligence > 95) && ($activeSlave.accent >= 3) && ($activeSlave.intelligence) > random(0,100)>> - <<set $activeSlave.accent -= 1>> -<</if>> - -<<set _maleCrookedTeethGen = $activeSlave.intelligence+$activeSlave.intelligenceImplant>> -<<if "American" == $activeSlave.nationality>> - <<set _maleCrookedTeethGen += 22>> -<<elseif ["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($activeSlave.nationality)>> -<<else>> - <<set _maleCrookedTeethGen -= 20>> -<</if>> -<<if random(0,_maleCrookedTeethGen) <= 15 && $activeSlave.physicalAge >= 12>> - <<set $activeSlave.teeth = "crooked">> -<</if>> - -<<switch $activeSlave.race>> -<<case "black">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,30)>> - <<set $activeSlave.skin = either("black", "dark brown", "brown")>> - <<set $activeSlave.hColor = either("black", "black", "black", "brown")>> - <<set $activeSlave.hStyle = either("neat", "crinkled")>> -<<case "white">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<if $activeSlave.nationality == "German">> - <<set $activeSlave.skin = either("pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "blue", "blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "blonde", "blonde", "red", "brown")>> - <<elseif $activeSlave.nationality == "Icelandic">> - <<set $activeSlave.skin = either("pale", "pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "blue", "blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "blonde", "blonde", "red", "brown")>> - <<elseif $activeSlave.nationality == "Irish">> - <<set $activeSlave.skin = either("pale", "pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "green", "green", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "red", "red", "red", "brown")>> - <<elseif $activeSlave.nationality == "Scottish">> - <<set $activeSlave.skin = either("pale", "fair", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "brown", "green", "green", "green")>> - <<set $activeSlave.hColor = either("black", "black", "blonde", "red", "red", "red", "brown")>> - <<else>> - <<set $activeSlave.skin = either("pale", "light", "fair")>> - <<set $activeSlave.eyeColor = either("blue", "brown", "green")>> - <<set $activeSlave.hColor = either("black", "blonde", "red", "brown")>> - <</if>> - <<set $activeSlave.hStyle = "neat">> -<<case "latina">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("light olive", "brown", "dark brown", "tanned", "dark olive")>> - <<set $activeSlave.hColor = either("black", "black", "brown", "brown")>> - <<set $activeSlave.hStyle = "neat">> -<<case "indo-aryan" "malay" "pacific islander" "amerindian">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("dark", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<case "asian">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("light olive", "dark olive", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<case "middle eastern" "semitic" "southern european">> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("fair", "light olive", "tanned", "light")>> - <<set $activeSlave.hColor = either("black")>> - <<set $activeSlave.hStyle = "neat">> -<<default>> - <<set $activeSlave.butt = either(1, 1, 2, 3)>> - <<set $activeSlave.boobs = either(100, 200, 200, 300, 300, 400, 500)>> - <<set $activeSlave.lips = random(5,25)>> - <<set $activeSlave.skin = either("pale", "dark", "light")>> - <<set $activeSlave.hColor = either("black", "black", "black", "black", "brown", "brown", "blonde", "red")>> - <<set $activeSlave.hStyle = "neat">> -<</switch>> -<<if $activeSlave.physicalAge > 55>> - <<if random(1,100) > 40>> - <<set $activeSlave.hStyle = "bald", $activeSlave.bald = 1>> - <</if>> -<</if>> -<<if ($activeSlave.skin == "pale") || ($activeSlave.skin == "fair")>> - <<if random(1,4) == 1>> - <<set $activeSlave.markings = either("freckles", "freckles", "freckles", "heavily freckled", "beauty mark", "beauty mark", "birthmark", "birthmark")>> - <</if>> -<<elseif random(1,8) == 1>> - <<set $activeSlave.markings = either("beauty mark", "birthmark")>> -<</if>> - -<<set $activeSlave.origRace = $activeSlave.race>> -<<set $activeSlave.origEye = $activeSlave.eyeColor>> -<<set $activeSlave.origHColor = $activeSlave.hColor>> -<<set $activeSlave.origSkin = $activeSlave.skin>> -<<set $activeSlave.pubicHColor = $activeSlave.hColor>> -<<set $activeSlave.pubicHStyle = either("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")>> -<<set $activeSlave.underArmHColor = $activeSlave.hColor>> -<<set $activeSlave.underArmHStyle = either("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 ($activeSlave.pubicHStyle == "hairless" || $activeSlave.underArmHStyle == "hairless") && random(1,100) > 40>> - <<set $activeSlave.pubicHStyle = "hairless", $activeSlave.underArmHStyle = "hairless">> -<</if>> -<<if ($activeSlave.hColor == "blonde" && random(1,20) > 17)>> - <<set $activeSlave.eyebrowHColor = either("brown", "brown", "brown", "brown", "black")>> - <<set $activeSlave.override_Brow_H_Color = 1>> -<<else>> - <<set $activeSlave.eyebrowHColor = $activeSlave.hColor>> -<</if>> -<<set $activeSlave.eyebrowHStyle = either("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")>> -<<set $activeSlave.eyebrowFullness = either("pencil-thin", "thin", "thin", "threaded", "threaded", "threaded", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "natural", "tapered", "tapered", "tapered", "thick", "thick", "bushy")>> - - -<<if ($weightAffectsAssets != 0)>> - <<if $activeSlave.weight < -10 && $activeSlave.butt > 1>> - <<set $activeSlave.butt -= 1>> - <<elseif $activeSlave.weight > 100 && $activeSlave.butt < 6>> - <<set $activeSlave.butt += random(1,2)>> - <<elseif $activeSlave.weight > 10 && $activeSlave.butt < 4>> - <<set $activeSlave.butt += 1>> - <</if>> - - <<if $activeSlave.weight < -10 && $activeSlave.boobs > 200>> - <<set $activeSlave.boobs -= 100>> - <<elseif $activeSlave.weight > 190 && $activeSlave.boobs < 3000>> - <<set $activeSlave.boobs += (random(3,8)*100)>> - <<elseif $activeSlave.weight > 160 && $activeSlave.boobs < 1500>> - <<set $activeSlave.boobs += (random(2,6)*100)>> - <<elseif $activeSlave.weight > 130 && $activeSlave.boobs < 1500>> - <<set $activeSlave.boobs += (random(1,4)*100)>> - <<elseif $activeSlave.weight > 95 && $activeSlave.boobs < 1200>> - <<set $activeSlave.boobs += (random(1,3)*100)>> - <<elseif $activeSlave.weight > 30 && $activeSlave.boobs < 1000>> - <<set $activeSlave.boobs += 100>> - <</if>> -<</if>> - -<<set _maleBoobShapeGen = []>> -<<if $activeSlave.boobs > 250 && $activeSlave.boobs < 800>> - <<set _maleBoobShapeGen.push("perky")>> - <<set _maleBoobShapeGen.push("downward-facing")>> -<</if>> -<<if $activeSlave.boobs > 400 && $activeSlave.boobs < 1200>> - <<set _maleBoobShapeGen.push("torpedo-shaped")>> - <<set _maleBoobShapeGen.push("wide-set")>> -<</if>> -<<if $activeSlave.boobs > 800 && $activeSlave.physicalAge > random(10,50)>> - <<set _maleBoobShapeGen.push("saggy")>> -<</if>> -<<if _maleBoobShapeGen.length == 1>> - <<if random(1,2) != 1>> - <<set $activeSlave.boobShape = _maleBoobShapeGen.random()>> - <</if>> -<<elseif _maleBoobShapeGen.length > 1>> - <<if random(1,3) != 1>> - <<set $activeSlave.boobShape = _maleBoobShapeGen.random()>> - <</if>> -<</if>> - -<<if passage() != "Starting Girls">> - <<set $activeSlave.earPiercing = either(0,0,0,1)>> - <<set $activeSlave.nosePiercing = either(0,0,0,0,1)>> - <<set $activeSlave.eyebrowPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.dickPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.lipsPiercing = either(0,0,0,0,0,1)>> - <<set $activeSlave.navelPiercing = either(0,0,0,0,1)>> - <<set $activeSlave.nipplesPiercing = either(0,0,0,0,1)>> -<</if>> - -<<set $activeSlave.face = random(-70,20)>> -<<if random(0,2) == 1>><<set $activeSlave.face = random(-40,-10)>><</if>> -<<if $activeSlave.physicalAge > 40>> - <<set $activeSlave.face -= random(0,20)>> -<<elseif $activeSlave.physicalAge > 35>> - <<set $activeSlave.face -= random(0,10)>> -<<elseif $activeSlave.physicalAge <= 20>> - <<set $activeSlave.face += random(0,20)>> -<<elseif $activeSlave.physicalAge <= 25>> - <<set $activeSlave.face += random(0,10)>> -<</if>> -<<if $activeSlave.physicalAge >= 17>> - <<set $activeSlave.faceShape = either("masculine", "masculine", "masculine", "androgynous")>> -<<elseif $activeSlave.physicalAge >= 15>> - <<set $activeSlave.faceShape = either("masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "masculine", "androgynous", "sensual", "exotic", "normal")>> -<<elseif $activeSlave.physicalAge >= 13>> - <<set $activeSlave.faceShape = either("masculine", "masculine", "masculine", "androgynous", "cute", "sensual", "exotic", "normal")>> -<<elseif $activeSlave.physicalAge >= 11>> - <<set $activeSlave.faceShape = either("masculine", "androgynous", "cute", "sensual", "exotic", "normal", "normal")>> -<<else>> - <<set $activeSlave.faceShape = either("androgynous", "androgynous", "cute", "cute", "sensual", "exotic", "normal", "normal")>> -<</if>> -<<switch $activeSlave.faceShape>> -<<case "sensual" "cute">> - <<set $activeSlave.face += random(0,20)>> -<<case "exotic" "androgynous">> - <<set $activeSlave.face += random(-10,10)>> -<<case "masculine">> - <<set $activeSlave.face += random(-10,0)>> -<</switch>> - -<<if $activeSlave.boobs < 250>> - <<set $activeSlave.nipples = either("tiny", "tiny", "tiny", "tiny", "cute", "cute", "puffy", "partially inverted")>> -<<elseif $activeSlave.boobs < 500>> - <<set $activeSlave.nipples = either("tiny", "cute", "cute", "cute", "puffy", "partially inverted")>> -<<elseif $activeSlave.boobs < 1000>> - <<set $activeSlave.nipples = either("tiny", "cute", "cute", "cute", "puffy", "puffy", "partially inverted", "inverted")>> -<<else>> - <<set $activeSlave.nipples = either("cute", "puffy", "partially inverted", "inverted", "huge")>> -<</if>> - -<<set $activeSlave.vagina = -1>> -<<set $activeSlave.clit = 0>> -<<set $activeSlave.preg = 0>> - -<<set $activeSlave.dick = either(1, 2, 2, 2, 3, 3, 3, 4, 4, 5)>> -<<if $seeExtreme == 1>> - <<set $activeSlave.balls = either(0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5)>> -<<else>> - <<set $activeSlave.balls = either(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5)>> -<</if>> -<<set $activeSlave.scrotum = $activeSlave.balls>> - -<<if $activeSlave.balls > 0>> - <<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXY>> - <<set $activeSlave.pubertyXY = 1>> - <<else>> - <<set $activeSlave.pubertyXY = 0>> - <</if>> -<<else>> - <<set $activeSlave.pubertyXY = 0>> -<</if>> - -/% Begin circumcision rate replacement section. %/ -/% 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 ($seeCircumcision == 0)>> - <<set $activeSlave.foreskin = $activeSlave.dick + random(0,1)>> -<<else>> - /% Temporarily use activeSlave.foreskin to store the chance of circumcision. %/ - <<switch $activeSlave.nationality>> - <<case "Afghan" "Iranian" "Moroccan" "Palestinian" "Sahrawi" "Tunisian">> - <<set $activeSlave.foreskin = 100>> - <<case "Comorian" "Gabonese" "Iraqi" "Jordanian" "Kurdish" "Mauritanian" "Nigerian" "Tajik" "Turkish" "Yemeni">> - <<set $activeSlave.foreskin = 99>> - <<case "Algerian" "Azerbaijani" "Liberian" "Maldivian">> - <<set $activeSlave.foreskin = 98>> - <<case "Djiboutian" "Eritrean" "Ivorian" "Libyan" "Saudi" "Uzbek">> - <<set $activeSlave.foreskin = 97>> - <<case "Nigerien" "Pakistani" "Sierra Leonean" "Turkmen" "Zairian">> - <<set $activeSlave.foreskin = 96>> - <<case "a Cook Islander" "Egyptian" "Gambian" "Guamanian" "Malagasy" "Nauruan" "Ni-Vanuatu" "Niuean" "Palauan" "Samoan" "a Solomon Islander" "Togolese" "Tongan" "Tuvaluan">> - <<set $activeSlave.foreskin = 95>> - <<case "Cameroonian" "Senegalese" "Somali">> - <<set $activeSlave.foreskin = 94>> - <<case "Bangladeshi" "Beninese" "Bissau-Guinean" "Indonesian" "Syrian">> - <<set $activeSlave.foreskin = 93>> - <<case "Ethiopian" "Filipina" "Ghanan" "Israeli" "Kosovan">> - <<set $activeSlave.foreskin = 92>> - <<case "Kenyan" "Kyrgyz">> - <<set $activeSlave.foreskin = 91>> - <<case "Burkinabé" "Omani">> - <<set $activeSlave.foreskin = 88>> - <<case "Equatoguinean">> - <<set $activeSlave.foreskin = 87>> - <<case "Kuwaiti" "Malian">> - <<set $activeSlave.foreskin = 86>> - <<case "Guinean">> - <<set $activeSlave.foreskin = 84>> - <<case "Bahraini">> - <<set $activeSlave.foreskin = 81>> - <<case "French Polynesian">> - <<set $activeSlave.foreskin = 78>> - <<case "American" "Qatari">> - <<set $activeSlave.foreskin = 77>> - <<case "Emirati">> - <<set $activeSlave.foreskin = 76>> - <<case "Chadian">> - <<set $activeSlave.foreskin = 74>> - <<case "Tanzanian">> - <<set $activeSlave.foreskin = 72>> - <<case "Congolese">> - <<set $activeSlave.foreskin = 70>> - <<case "Central African">> - <<set $activeSlave.foreskin = 63>> - <<case "Burundian" "Malaysian">> - <<set $activeSlave.foreskin = 61>> - <<case "Lebanese">> - <<set $activeSlave.foreskin = 60>> - <<case "Angolan">> - <<set $activeSlave.foreskin = 58>> - <<case "Fijian" "Kazakh">> - <<set $activeSlave.foreskin = 56>> - <<case "Bruneian" "Korean" "Mosotho">> - /% Population-weighted average of South Korea and North Korea. %/ - <<set $activeSlave.foreskin = 52>> - <<case "New Caledonian">> - <<set $activeSlave.foreskin = 50>> - <<case "Albanian">> - <<set $activeSlave.foreskin = 48>> - <<case "Mozambican">> - <<set $activeSlave.foreskin = 47>> - <<case "South African">> - <<set $activeSlave.foreskin = 45>> - <<case "Dominican">> - <<set $activeSlave.foreskin = 43>> - <<case "Bosnian">> - <<set $activeSlave.foreskin = 42>> - <<case "Sudanese">> - <<set $activeSlave.foreskin = 39>> - <<case "Mexican">> - <<set $activeSlave.foreskin = 38>> - <<case "Macedonian">> - <<set $activeSlave.foreskin = 34>> - <<case "a New Zealander">> - <<set $activeSlave.foreskin = 33>> - <<case "Canadian">> - <<set $activeSlave.foreskin = 32>> - <<case "Scottish">> - <<set $activeSlave.foreskin = 28>> - <<case "Australian" "Ugandan">> - <<set $activeSlave.foreskin = 27>> - <<case "Namibian">> - <<set $activeSlave.foreskin = 26>> - <<case "South Sudanese">> - <<set $activeSlave.foreskin = 24>> - <<case "Belgian" "Cypriot" "Thai">> - <<set $activeSlave.foreskin = 23>> - <<case "Malawian">> - <<set $activeSlave.foreskin = 22>> - <<case "British">> - <<set $activeSlave.foreskin = 21>> - <<case "Puerto Rican">> - <<set $activeSlave.foreskin = 20>> - <<case "Montenegrin">> - <<set $activeSlave.foreskin = 19>> - <<case "Mauritian">> - <<set $activeSlave.foreskin = 17>> - <<case "Motswana" "Singaporean" "Surinamese">> - <<set $activeSlave.foreskin = 15>> - <<case "Chinese" "French" "Indian" "Jamaican">> - <<set $activeSlave.foreskin = 14>> - <<case "Bulgarian" "Rwandan" "Zambian">> - <<set $activeSlave.foreskin = 13>> - <<case "French Guianan" "Guyanese" "Russian">> - <<set $activeSlave.foreskin = 12>> - <<case "German">> - <<set $activeSlave.foreskin = 11>> - <<case "Belarusian" "Georgian" "Papua New Guinean">> - <<set $activeSlave.foreskin = 10>> - <<case "Japanese" "Zimbabwean">> - <<set $activeSlave.foreskin = 9>> - <<case "Slovene" "Sri Lankan" "Swazi" "Taiwanese">> - <<set $activeSlave.foreskin = 8>> - <<case "Catalan" "Haitian" "Spanish">> - <<set $activeSlave.foreskin = 7>> - <<case "Austrian" "Dutch" "East Timorese" "Swiss" "Trinidadian">> - <<set $activeSlave.foreskin = 6>> - <<case "Danish" "Greek" "a Liechtensteiner" "Swedish">> - <<set $activeSlave.foreskin = 5>> - <<case "Burmese" "Cambodian" "Mongolian" "Nepalese" "Peruvian" "Serbian">> - <<set $activeSlave.foreskin = 4>> - <<case "Argentinian" "Italian" "Norwegian">> - <<set $activeSlave.foreskin = 3>> - <<case "Luxembourgian" "Tibetan" "Ukrainian" "Vincentian">> - <<set $activeSlave.foreskin = 2>> - <<case "Andorran" "Barbadian" "Bermudian" "Bhutanese" "Brazilian" "Croatian" "Finnish" "Hungarian" "Irish" "Moldovan" "Monégasque" "Panamanian" "Portuguese" "Seychellois" "Uruguayan">> - <<set $activeSlave.foreskin = 1>> - <<case "Antiguan" "Armenian" "Bahamian" "Belizean" "Bolivian" "Cape Verdean" "Chilean" "Colombian" "Costa Rican" "Cuban" "Czech" "Dominiquais" "Ecuadorian" "Estonian" "Greenlandic" "Grenadian" "Guatemalan" "Honduran" "I-Kiribati" "Icelandic" "Kittitian" "Laotian" "Latvian" "Lithuanian" "Maltese" "Marshallese" "Micronesian" "Nicaraguan" "Paraguayan" "Polish" "Romanian" "Saint Lucian" "Salvadoran" "Sammarinese" "São Toméan" "Slovak" "Vatican" "Venezuelan" "Vietnamese">> - <<set $activeSlave.foreskin = 0>> - <<default>> - /% Some overlooked country, or possibly stateless. Use global average. %/ - <<set $activeSlave.foreskin = 38>> - <</switch>> - /% Second pass for minorities in other countries. %/ - <<if ($activeSlave.race == "middle eastern") && ($activeSlave.foreskin < 76)>> - <<set $activeSlave.foreskin = 76>> - <</if>> - <<if ($activeSlave.race == "semitic") && ($activeSlave.foreskin < 90)>> - <<set $activeSlave.foreskin = 90>> - <</if>> - /% Chance activeSlave.foreskin back to the normal meaning. %/ - <<if (random(0,99) < $activeSlave.foreskin)>> - <<set $activeSlave.foreskin = 0>> - <<else>> - <<set $activeSlave.foreskin = $activeSlave.dick + random(0,1)>> - <</if>> -<</if>> -/% End circumcision rate replacement section. %/ -<<if $activeSlave.balls == 0>> - <<if random(0,1) == 1 && $activeSlave.faceShape == "masculine">> - <<set $activeSlave.faceShape = either("androgynous", "cute")>> - <</if>> -<<else>> - <<set $activeSlave.scrotum = $activeSlave.balls + either(0, 0, 1)>> -<</if>> - -<<if $activeSlave.balls > 2>> - <<set $activeSlave.voice = 1>> -<<elseif $activeSlave.balls > 0>> - <<set $activeSlave.voice = either(1, 1, 2)>> -<<else>> - <<set $activeSlave.voice = either(1, 2, 2)>> -<</if>> - -<<if $activeSlave.attrXY > 0>> - <<set $activeSlave.anus = either(0, 1, 2)>> -<<else>> - <<set $activeSlave.anus = either(0, 0, 0, 1, 1, 2)>> -<</if>> -<<set $activeSlave.analArea = $activeSlave.anus + either(0, 0, 0, 1)>> - -<<if $activeSlave.anus == 0>> - <<set $activeSlave.analSkill = 0>> -<<elseif random(1,4) == 1>> - <<set $activeSlave.anusTat = "bleached">> -<</if>> - -/%pedoshit%/ -<<if $activeSlave.physicalAge <= 13>> - <<set $activeSlave.dick = either(1, 1, 1, 1, 2, 2, 2, 3)>> - <<set $activeSlave.balls = either(0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3)>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.anus = either(0, 0, 0, 0, 0, 1)>> -<<elseif $activeSlave.physicalAge <= 15>> - <<set $activeSlave.dick = either(1, 1, 1, 2, 2, 2, 3)>> - <<set $activeSlave.balls = either(0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4)>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.anus = either(0, 0, 0, 0, 1, 1, 1)>> -<<elseif $activeSlave.physicalAge <= 17>> - <<set $activeSlave.dick = either(1, 1, 2, 2, 3, 3)>> - <<set $activeSlave.balls = either(0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5)>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.anus = either(0, 0, 0, 1, 1, 1)>> -<</if>> - -<<if ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.butt = either(1, 1, 1, 2, 2, 3, 3, 4)>> -<</if>> - -<<if ($activeSlave.physicalAge <= 11)>> - <<set $activeSlave.voice = either(2, 2, 2, 3, 3, 3, 3, 3, 3)>> -<<elseif ($activeSlave.physicalAge <= 13)>> - <<set $activeSlave.voice = either(1, 1, 2, 2, 2, 2, 2, 3, 3)>> -<<elseif ($activeSlave.physicalAge <= 16)>> - <<set $activeSlave.voice = either(1, 1, 1, 2, 2, 2, 2, 2, 3)>> -<</if>> - -<<if $activeSlave.actualAge >= 18 && random(1,100) < 3>> - <<set $activeSlave.vasectomy = 1>> -<</if>> - -<<if $activeSlave.physicalAge <= 6>> - <<set $activeSlave.pregAdaptation = 5>> -<<elseif $activeSlave.physicalAge <= 7>> - <<set $activeSlave.pregAdaptation = 6>> -<<elseif $activeSlave.physicalAge <= 8>> - <<set $activeSlave.pregAdaptation = 7>> -<<elseif $activeSlave.physicalAge <= 9>> - <<set $activeSlave.pregAdaptation = 8>> -<<elseif $activeSlave.physicalAge <= 10>> - <<set $activeSlave.pregAdaptation = 9>> -<<elseif $activeSlave.physicalAge <= 11>> - <<set $activeSlave.pregAdaptation = 10>> -<<elseif $activeSlave.physicalAge <= 12>> - <<set $activeSlave.pregAdaptation = 12>> -<<elseif $activeSlave.physicalAge <= 13>> - <<set $activeSlave.pregAdaptation = 14>> -<<elseif $activeSlave.physicalAge <= 14>> - <<set $activeSlave.pregAdaptation = 16>> -<<elseif $activeSlave.physicalAge <= 15>> - <<set $activeSlave.pregAdaptation = 18>> -<<else>> - <<set $activeSlave.pregAdaptation = 20>> -<</if>> - -<<if $activeSlave.fuckdoll > 0>> - <<set $activeSlave.pronoun = "it", $activeSlave.possessivePronoun = "its", $activeSlave.possessive = "its", $activeSlave.object = "it", $activeSlave.objectReflexive = "itself", $activeSlave.noun = "toy">> -<<elseif $activeSlave.dick > 0 && $activeSlave.vagina == -1 && $diversePronouns == 1>> - <<set $activeSlave.pronoun = "he", $activeSlave.possessivePronoun = "his", $activeSlave.possessive = "his", $activeSlave.object = "him", $activeSlave.objectReflexive = "himself", $activeSlave.noun = "boy">> -<<else>> - <<set $activeSlave.pronoun = "she", $activeSlave.possessivePronoun = "hers", $activeSlave.possessive = "her", $activeSlave.object = "her", $activeSlave.objectReflexive = "herself", $activeSlave.noun = "girl">> -<</if>> - -<<if passage() == "Slave Markets" && $slaveMarket == "corporate">> - <<if ($captureUpgradeRace != "unselected") && ($captureUpgradeRace != "none")>> - <<if $activeSlave.race != $captureUpgradeRace>> - <<set $activeSlave.race = $captureUpgradeRace>> - <</if>> - <</if>> -<</if>> - -<<if $seeExtreme == 1>> - <<run disabilityRoll($activeSlave)>> -<</if>> +<<run GenerateNewSlave("XY")>> diff --git a/src/utility/slaveCreationWidgets.tw b/src/utility/slaveCreationWidgets.tw index b7a95914ff1a9e082c0417df074fe307b0fc24da..2efb15c8c95055745af4794d79f7105cad626f79 100644 --- a/src/utility/slaveCreationWidgets.tw +++ b/src/utility/slaveCreationWidgets.tw @@ -6,7 +6,7 @@ Called from Gen XX, Gen XY, CheatMode DB, InitNationalities. %/ <<widget "BaseSlave">> - <<set $activeSlave = {slaveName: "blank", slaveSurname: 0, birthName: "blank", birthSurname: 0, genes: "XX", pronoun: "she", possessive: "her", possessivePronoun: "hers", objectReflexive: "herself", object: "her", noun: "girl", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFeed: 0, pornFame: 0, pornFameSpending: 0, pornPrestige: 0, pornPrestigeDesc: 0, pornFameType: "none", pornFocus: "none", pornTypeGeneral: 0, pornTypeFuckdoll: 0, pornTypeRape: 0, pornTypePreggo: 0, pornTypeBBW: 0, pornTypeGainer: 0, pornTypeStud: 0, pornTypeLoli: 0, pornTypeDeepThroat: 0, pornTypeStruggleFuck: 0, pornTypePainal: 0, pornTypeTease: 0, pornTypeRomantic: 0, pornTypePervert: 0, pornTypeCaring: 0, pornTypeUnflinching: 0, pornTypeSizeQueen: 0, pornTypeNeglectful: 0, pornTypeCumAddict: 0, pornTypeAnalAddict: 0, pornTypeAttentionWhore: 0, pornTypeBreastGrowth: 0, pornTypeAbusive: 0, pornTypeMalicious: 0, pornTypeSelfHating: 0, pornTypeBreeder: 0, pornTypeSub: 0, pornTypeCumSlut: 0, pornTypeAnal: 0, pornTypeHumiliation: 0, pornTypeBoobs: 0, pornTypeDom: 0, pornTypeSadist: 0, pornTypeMasochist: 0, pornTypePregnancy: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, father: 0, mother: 0, daughters: 0, sisters: 0, canRecruit: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, visualAge: 18, physicalAge: 18, ovaryAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", origRace: "white", markings: "none", eyes: 1, eyeColor: "brown", origEye: "brown", pupil: "circular", sclerae: "white", eyewear: "none", hears: 0, earwear: "none", earImplant: 0, origHColor: "brown", hColor: "brown", pubicHColor: "brown", underArmHColor: "brown", eyebrowHColor: "brown", origSkin: "light", skin: "light", hLength: 60, eyebrowFullness: "natural", hStyle: "short", pubicHStyle: "neat", underArmHStyle: "neat", eyebrowHStyle: "natural", waist: 0, corsetPiercing: 0, PLimb: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute", nipplesPiercing: 0, nipplesAccessory: 0, areolae: 0, areolaePiercing: 0, areolaeShape: "circle", boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, pregAdaptation: 50, superfetation: 0, ovaImplant: 0, broodmother: 0, broodmotherFetuses: 0, broodmotherOnHold: 0, broodmotherCountDown: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, prostate: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules: "restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", legAccessory: "none", buttplug: "none", buttplugAttachment: "none", intelligence: 0, intelligenceImplant: 0, energy: 50, need: 0, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customTitle: "", customTitleLisp: "", rudeTitle: 0, customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, pregKnown: 0, pregWeek: 0, belly: 0, bellyPreg: 0, bellyFluid: 0, bellyImplant: -1, bellySag: 0, bellySagPreg: 0, bellyPain: 0, cervixImplant: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, scars: 0, breedingMark: 0, bodySwap: 0, HGExclude: 0, ballType: "human", eggType: "human", reservedChildren: 0, reservedChildrenNursery: 0, choosesOwnChastity: 0, pregControl: "none", readyLimbs: [], ageAdjust: 0, bald: 0, origBodyOwner: "", origBodyOwnerID: 0, death: "", hormoneBalance: 0, onDiet: 0, breastMesh: 0, slavesFathered: 0, PCChildrenFathered: 0, slavesKnockedUp: 0, PCKnockedUp: 0, prematureBirth: 0, premature: 0, origSkin: "white", vasectomy: 0, haircuts: 0, newGamePlus: 0, skillHG: 0, skillRC: 0, skillBG: 0, skillMD: 0, skillDJ: 0, skillNU: 0, skillTE: 0, skillAT: 0, skillMT: 0, skillST: 0, skillMM: 0, skillWA: 0, skillS: 0, skillE: 0, skillW: 0, tankBaby: 0, inducedNCS: 0, NCSyouthening: 0, override_Race: 0, override_Skin: 0, override_Eye_Color: 0, override_H_Color: 0, override_Pubic_H_Color: 0, override_Arm_H_Color: 0, override_Brow_H_Color: 0, missingEyes: 0, missingArms: 0, missingLegs: 0}>> + <<run BaseSlave()>> <</widget>> /%