diff --git a/src/facilities/nursery/nursery.tw b/src/facilities/nursery/nursery.tw index 8a8e1c90b640551a3caed55deb06cc24302cc534..f5fb7e793849e42e3dd4cf597c17fb4769fe7b9b 100644 --- a/src/facilities/nursery/nursery.tw +++ b/src/facilities/nursery/nursery.tw @@ -481,16 +481,16 @@ Target age for release: <<textbox "$targetAgeNursery" $targetAgeNursery "Nursery <<set $cribs[_c].ID = $nIDNumber++>> <</if>> <<capture $cribs[_c]>> - <<if $activeChild.actualAge >= 3>> - <<link "$cribs[_c].slaveName" "Child Interact">> + <<if $activeChild.actualAge < 3>> + <<link "$cribs[_c].slaveName" "Infant Interact">> <<set $activeChild = $cribs[_c], $activeChild.weeksLeft = ($targetAgeNursery * 52) - $activeChild.actualAge>> <</link>> - <<= App.Facilities.Nursery.ChildSummary($activeChild)>> + <<= App.Facilities.Nursery.InfantSummary($activeChild)>> <<else>> - <<link "$cribs[_c].slaveName" "Infant Interact">> + <<link "$cribs[_c].slaveName" "Child Interact">> <<set $activeChild = $cribs[_c], $activeChild.weeksLeft = ($targetAgeNursery * 52) - $activeChild.actualAge>> <</link>> - <<= App.Facilities.Nursery.InfantSummary($activeChild)>> + <<= App.Facilities.Nursery.ChildSummary($activeChild)>> <</if>> <br> <</capture>> diff --git a/src/facilities/nursery/nurseryWidgets.js b/src/facilities/nursery/nurseryWidgets.js index 3a124b0b98ef267c18448659802a5b248cec3a52..eba5fe213a58a7b883fd35bc43ab38e9cf6f7815 100644 --- a/src/facilities/nursery/nurseryWidgets.js +++ b/src/facilities/nursery/nurseryWidgets.js @@ -1,3 +1,5 @@ +/* INFANTS */ + /** * @param {App.Entity.InfantState} child * @returns {string} @@ -1247,57 +1249,21 @@ App.Facilities.Nursery.InfantSummary = function(child) { * @param {App.Entity.SlaveState} child */ function longIntelligence(child) { - const intelligence = child.intelligence + child.intelligenceImplant; - if (child.intelligenceImplant >= 30) { - if (intelligence >= 130) { - r += `<span class="deepskyblue">Genius${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 95) { - r += `<span class="deepskyblue">Brilliant, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } - } else if (child.intelligenceImplant >= 15) { - if (intelligence > 95) { - r += `<span class="deepskyblue">Brilliant, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } + const intelligence = child.intelligence; + if (child.intelligence > 95) { + r += `<span class="deepskyblue">Likely to be brilliant${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">Likely to be very smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">Likely to be smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -15) { + r += `Average intelligence${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; + } else if (intelligence >= -50) { + r += `<span class="orangered">Likely to be slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">Likely to be very slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; } else { - if (child.intelligence > 95) { - r += `<span class="deepskyblue">Brilliant${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } + r += `<span class="orangered">Likely to be moronic${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; } } @@ -1857,13 +1823,23 @@ App.Facilities.Nursery.InfantSummary = function(child) { }; /** - * @param {App.Entity.SlaveState} child + * @param {App.Entity.InfantState} child * @returns {string} */ -App.Facilities.Nursery.ChildSummary = function(child) { +App.Facilities.Nursery.LongInfantDescription = function(child) { "use strict"; - const V = State.variables; - let r = ``; + const + V = State.variables, + PC = V.PC, + arcology = V.arcologies[0], + weeksOwned = V.week - child.weekAcquired; + + let + r = ``, + age, + title, + father, + mother; /* eslint-disable */ const pronouns = getPronouns(child), @@ -1877,3446 +1853,2806 @@ App.Facilities.Nursery.ChildSummary = function(child) { His = capFirstChar(his); /* eslint-enable */ - /** - * @param {App.Entity.SlaveState} child - * @returns {string} - */ - function ChildSummaryUncached(child) { - if (V.abbreviateDevotion === 1) { - shortDevotion(child); - } else if (V.abbreviateDevotion === 2) { - longDevotion(child); - } - if (child.fuckdoll === 0) { - if (V.abbreviateRules === 1) { - shortRules(child); - } else if (V.abbreviateRules === 2) { - longRules(child); - } - } - if (child.tired !== 0) { - r += `Tired. `; - } - if (V.abbreviateDiet === 1) { - shortWeight(child); - } else if (V.abbreviateDiet === 2) { - longWeight(child); - } - if (V.abbreviateDiet === 1) { - shortDiet(child); - } else if (V.abbreviateDiet === 2) { - longDiet(child); + if (child.father === -1 && child.mother === -1) { + father = PC; + mother = PC; + } else { + if (child.father === -1) { + father = PC; + mother = getSlave(child.mother); + } else if (child.mother === -1) { + father = getSlave(child.father); + mother = PC; + } else { + father = getSlave(child.father); + mother = getSlave(child.mother); } - if (V.abbreviateHealth === 1) { - shortHealth(child); - } else if (V.abbreviateHealth === 2) { - longHealth(child); + } + + // TODO: add infant art here + + r += ` `; + + r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `; + + if (typeof child.custom !== "undefined") { + if (child.custom.label) { + r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `; } - if (V.abbreviateDrugs === 1) { - shortDrugs(child); - } else if (V.abbreviateDrugs === 2) { - longDrugs(child); + } + + if (child.actualAge > 0) { + age = `${child.actualAge}-year-old`; + if (child.actualAge > 1) { + title = `toddler`; + } else { + title = `baby`; } - if (V.abbreviateNationality + V.abbreviateGenitalia + V.abbreviatePhysicals + V.abbreviateSkills + V.abbreviateMental !== 0) { - r += `<br> `; - if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { - r += " "; + } else { + if (weeksOwned > 4) { + age = `${weeksOwned * 4}-month-old`; + title = `${baby}`; + } else { + if (weeksOwned <= 1) { + age = ``; + title = `newborn`; + } else { + age = `${weeksOwned}-week-old`; + title = `baby`; } } - V.desc = SlaveTitle(child); - const firstLetter = V.desc.substring(0, 1).toUpperCase(); - V.desc = firstLetter + V.desc.substring(1); - r += `<strong><span class="coral">${V.desc}${V.abbreviatePhysicals === 2? '.' : ''}</span></strong> `; - if (V.seeRace === 1) { - r += `<span class="tan">`; - if (V.abbreviateRace === 1) { - shortRace(child); - } else if (V.abbreviateRace === 2) { - longRace(child); + } + + r += ` is a ${age} <strong><span class="coral">${title}.</span></strong> ${He} was born in ${arcology.name} ${weeksOwned > 4 ? weeksOwned < 9 ? `about a month` : `${weeksOwned} months` : weeksOwned <= 1 ? `last week` : `${weeksOwned} weeks`}${weeksOwned > 1 ? ` ago` : ``}`; + + if (typeof child.counter !== "undefined") { + const + oral = child.counter.oral, + vaginal = child.counter.vaginal, + anal = child.counter.oral, + mammary = child.counter.mammary, + penetrative = child.counter.penetrative, + total = oral + vaginal + anal + mammary + penetrative; + + if (total > 0) { + r += `and has been fucked about ${total} times, including `; + if ((vaginal + anal + mammary + penetrative) > 0) { + if (vaginal > 0) { + r += `${vaginal} vanilla, `; + } + if (anal > 0) { + r += `${anal} anal, `; + } + if (mammary > 0) { + r += `${mammary} mammary `; + } + if (penetrative > 0) { + r += `${penetrative} penetrating, `; + } + r += ` and `; } - r += `</span> `; - } - if (V.abbreviateNationality === 1) { - shortNationality(child); - } else if (V.abbreviateNationality === 2) { - longNationality(child); - } - if (V.abbreviatePhysicals === 1) { - shortSkin(child); + r += `${oral} oral sexual encounters. `; } else { - r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `; - } - if (V.abbreviateGenitalia === 1) { - shortGenitals(child); - } else if (V.abbreviateGenitalia === 2) { - longGenitals(child); - } - if (V.abbreviatePhysicals === 1) { - shortAge(child); - shortFace(child); - shortEyes(child); - shortEars(child); - if (child.markings !== "none") { - r += "Markings"; + if (weeksOwned >= 1) { + r += `and `; + } else { + r += `. ${He} `; } - shortLips(child); - shortTeeth(child); - shortMuscles(child); - shortLimbs(child); - shortVoice(child); - shortTitsAss(child); - shortHips(child); - shortWaist(child); - shortImplants(child); - shortLactation(child); - shortMods(child); - r += `</span> `; - } else if (V.abbreviatePhysicals === 2) { - longAge(child); - longFace(child); - longEyes(child); - longEars(child); - longLips(child); - longTeeth(child); - longMuscles(child); - longLimbs(child); - longVoice(child); - longTitsAss(child); - longHips(child); - longWaist(child); - longImplants(child); - longLactation(child); - longMods(child); - if (child.brand !== 0) { - r += `Branded. `; + + r += `has had little or no sexual experience `; + if (child.weekAcquired !== 0) { + r += `as your slave `; + } else { + r += `in your new arcology `; } - r += `</span> `; - } - if (V.abbreviateHormoneBalance === 1) { - if (child.hormoneBalance <= -21) { - r += `<span class="deepskyblue">`; - r += ` <strong>HB:M</strong> `; - } else if (child.hormoneBalance <= 20) { - r += `<span class="pink">`; - r += ` <strong>HB:N</strong> `; - } else if (child.hormoneBalance <= 500) { - r += `<span class="pink">`; - r += ` <strong>HB:F</strong> `; - } - r += `</span> `; - } else if (V.abbreviateHormoneBalance === 2) { - r += `<span class=`; - if (child.hormoneBalance <= -21) { - r += `"deepskyblue"`; - } else { - r += `"pink"`; - } - r += `> `; - if (child.hormoneBalance < -400) { - r += `Overwhelmingly masculine`; - } else if (child.hormoneBalance <= -300) { - r += `Extremely masculine`; - } else if (child.hormoneBalance <= -200) { - r += `Heavily masculine`; - } else if (child.hormoneBalance <= -100) { - r += `Very masculine`; - } else if (child.hormoneBalance <= -21) { - r += `Masculine`; - } else if (child.hormoneBalance <= 20) { - r += `Neutral`; - } else if (child.hormoneBalance <= 99) { - r += `Feminine`; - } else if (child.hormoneBalance <= 199) { - r += `Very feminine`; - } else if (child.hormoneBalance <= 299) { - r += `Heavily feminine`; - } else if (child.hormoneBalance <= 399) { - r += `Extremely feminine`; - } else if (child.hormoneBalance <= 500) { - r += `Overwhelmingly feminine`; - } - r += ` hormone balance.</span> `; - } - r += "<br>"; - if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { - r += " "; - } - if (V.abbreviateSkills === 1) { - shortIntelligence(child); - shortSexSkills(child); - if (child.skill.combat > 0) { - r += "C"; - } - r += "</span> "; - shortPrestige(child); - shortPornPrestige(child); - } else if (V.abbreviateSkills === 2) { - longIntelligence(child); - longSexSkills(child); - if (child.skill.combat > 0) { - r += "Trained fighter."; - } - r += "</span> "; - longPrestige(child); - longPornPrestige(child); - } - if (V.abbreviateMental === 1) { - if (child.fetish !== "mindbroken") { - if (child.fetishKnown === 1) { - shortFetish(child); - } - if (child.attrKnown === 1) { - shortAttraction(child); - } - } - if (child.clitPiercing === 3) { - shortSmartFetish(child); - shortSmartAttraction(child); - } - shortBehaviorFlaw(child); - shortSexFlaw(child); - shortBehaviorQuirk(child); - shortSexQuirk(child); - } else if (V.abbreviateMental === 2) { - if (child.fetish !== "mindbroken") { - if (child.fetishKnown === 1) { - longFetish(child); + r += `yet. `; + + let sortedCounts = []; + sortedCounts.push( + {type: "oral", value: oral}, + {type: "vaginal", value: vaginal}, + {type: "anal", value: anal}, + {type: "mammary", value: mammary}, + {type: "penetrative", value: penetrative} + ); + sortedCounts = sortedCounts.sort(function(a, b) { // sorts the counts from largest to smallest + return b.value - a.value; + }); + + if (sortedCounts[0].type === "oral") { + if (((weeksOwned * 112) / oral) < 4) { + r += `Remarkably, this means that ${he}'s sucked something off `; + if (((weeksOwned * 112) / oral) < 1) { + r += `more than once every hour `; + } else if (((weeksOwned * 112) / oral) < 1.5) { + r += `about once every hour `; + } else if (((weeksOwned * 112) / oral) < 2.5) { + r += `about once every two hours `; + } else if (((weeksOwned * 112) / oral) < 3.5) { + r += `about once every three hours `; + } else { + r += `about once every four hours `; + } + r += ` ${he}'s spent awake. `; } - if (child.attrKnown === 1) { - longAttraction(child); + } else if (sortedCounts[0].type === "vaginal") { + if (((weeksOwned * 112) / oral) < 4) { + r += `Remarkably, this means that ${his} pussy has been fucked `; + if (((weeksOwned * 112) / oral) < 1) { + r += `more than once every hour `; + } else if (((weeksOwned * 112) / oral) < 1.5) { + r += `about once every hour `; + } else if (((weeksOwned * 112) / oral) < 2.5) { + r += `about once every two hours `; + } else if (((weeksOwned * 112) / oral) < 3.5) { + r += `about once every three hours `; + } else { + r += `about once every four hours `; + } + r += ` ${he}'s spent awake. `; } - } - if (child.clitPiercing === 3) { - longSmartFetish(child); - longSmartAttraction(child); - } - longBehaviorFlaw(child); - longSexFlaw(child); - longBehaviorQuirk(child); - longSexQuirk(child); - } - if (child.custom.label) { - r += `<strong><span class="yellow">${capFirstChar(child.custom.label)}</span></strong> `; - } - if ((child.relationship !== 0) || (child.relation !== 0) || (V.abbreviateClothes === 2) || (V.abbreviateRulesets === 2)) { - r += `<br> `; - if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { - r += ` `; - } - } - if (V.abbreviateMental === 1) { - r += `<span class="lightgreen">`; - if (V.familyTesting === 1) { - shortExtendedFamily(child); - } else { - shortLegacyFamily(child); - } - r += `</span> `; - shortClone(child); - shortRival(child); - } else if (V.abbreviateMental === 2) { - if (V.familyTesting === 1) { - longExtendedFamily(child); - } else { - longLegacyFamily(child); - } - longClone(child); - longRival(child); - } - if (child.fuckdoll === 0) { - if (V.abbreviateClothes === 2) { - r += ` `; - if (child.choosesOwnClothes === 1) { - r += "Dressing herself. "; + } else if (sortedCounts[0].type === "anal") { + if (((weeksOwned * 112) / oral) < 4) { + r += `Remarkably, this means that ${he}'s been buttfucked `; + if (((weeksOwned * 112) / oral) < 1) { + r += `more than once every hour `; + } else if (((weeksOwned * 112) / oral) < 1.5) { + r += `about once every hour `; + } else if (((weeksOwned * 112) / oral) < 2.5) { + r += `about once every two hours `; + } else if (((weeksOwned * 112) / oral) < 3.5) { + r += `about once every three hours `; + } else { + r += `about once every four hours `; + } + r += ` ${he}'s spent awake. `; } - longClothes(child); - longCollar(child); - longBelly(child); - if (child.amp !== 1) { - longLegs(child); + } else if (sortedCounts[0].type === "mammary") { + if (((weeksOwned * 112) / oral) < 4) { + r += `Remarkably, this means that ${he}'s put ${his} tits to work `; + if (((weeksOwned * 112) / oral) < 1) { + r += `more than once every hour `; + } else if (((weeksOwned * 112) / oral) < 1.5) { + r += `about once every hour `; + } else if (((weeksOwned * 112) / oral) < 2.5) { + r += `about once every two hours `; + } else if (((weeksOwned * 112) / oral) < 3.5) { + r += `about once every three hours `; + } else { + r += `about once every four hours `; + } + r += ` ${he}'s spent awake. `; } - if (canWalk(child)) { - longShoes(child); + } else if (sortedCounts[0].type === "penetrative") { + if (((weeksOwned * 112) / oral) < 4) { + r += `Remarkably, this means that ${he}'s pounded a hole `; + if (((weeksOwned * 112) / oral) < 1) { + r += `more than once every hour `; + } else if (((weeksOwned * 112) / oral) < 1.5) { + r += `about once every hour `; + } else if (((weeksOwned * 112) / oral) < 2.5) { + r += `about once every two hours `; + } else if (((weeksOwned * 112) / oral) < 3.5) { + r += `about once every three hours `; + } else { + r += `about once every four hours `; + } + r += ` ${he}'s spent awake. `; } - longChastity(child); - longVaginalAcc(child); - longDickAcc(child); - longButtplug(child); } } - r += ` `; - rulesAssistant(child); - if (V.abbreviateOrigins === 2 && child.origin !== 0) { - origins(child); - } - return r; } - /** - * @param {App.Entity.SlaveState} child - */ - function shortDevotion(child) { - if (child.fetish === "mindbroken") { - r += `<span class="red">MB</span> `; - } else if (child.devotion < -95) { - r += `<span class="darkviolet">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; - } else if (child.devotion < -50) { - r += `<span class="darkviolet">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; - } else if (child.devotion < -20) { - r += `<span class="mediumorchid">Res${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; - } else if (child.devotion <= 20) { - r += `<span class="yellow">Ambiv${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; - } else if (child.devotion <= 50) { - r += `<span class="hotpink">Accept${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; - } else if (child.devotion <= 95) { - r += `<span class="deeppink">Devo${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + /* OPEN FAMILY */ + + if (father === PC && mother === PC) { + r += `${He} is <span class="lightgreen">your child;</span> you knocked yourself up with ${him}. `; + } else if (father === mother) { + r += `He was <span class="lightgreen">both fathered and mothered by ${father.slaveName}.</span> `; + } else { + if (father === PC) { + r += `${He} is <span class="lightgreen">your child;</span> you knocked up ${his} mother, ${SlaveFullName(mother)}. `; + } else if (mother === PC) { + r += `${He} is <span class="lightgreen">your child;</span> you gave birth to ${him}. `; } else { - r += `<span class="magenta">Wor${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + let pName; + if (father > 0) { + if (child.father in V.missingTable && V.showMissingSlaves) { + pName = V.slaves[V.slaveIndices[child.father]].slaveName; + } else { + pName = `your former slave ${V.missingTable[child.father].slaveName}`; + } + r += `${He} was <span class="lightgreen">fathered by ${pName}'s</span> virile dick. `; + } else if (mother > 0) { + if (child.mother in V.missingTable && V.showMissingSlaves) { + pName = V.slaves[V.slaveIndices[child.mother]].slaveName; + } else { + pName = `your former slave ${V.missingTable[child.mother].slaveName}`; + } + r += `${He} was born from ${pName}'s fertile womb. `; + } } - if (child.fetish === "mindbroken") { - return; - } else if (child.trust < -95) { - r += `<span class="darkgoldenrod">ETerr${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else if (child.trust < -50) { - r += `<span class="goldenrod">Terr${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else if (child.trust < -20) { - r += `<span class="gold">Fright${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else if (child.trust <= 20) { - r += `<span class="yellow">Fear${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else if (child.trust <= 50) { - if (child.devotion < -20) { - r += `<span class="orange">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else { - r += `<span class="mediumaquamarine">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } + + if (V.showDistantRelatives) { + const + mi = mother, + fi = father; + + let + mmi, + fmi, + mfi, + ffi; + + if (typeof mi !== "undefined") { + mmi = mother.mother; + fmi = mother.father; + } else if (mother === PC) { + mmi = PC.mother; + fmi = PC.father; + } + + if (typeof fi !== "undefined") { + mfi = father.mother; + ffi = father.father; + } else if (father === PC) { + mfi = PC.mother; + ffi = PC.father; + } + + // TODO: if this starts breaking, add undef checks + + // grandparents + if (mmi === PC || fmi === PC || mfi === PC || ffi === PC) { + if (mi === fi) { + if (PC === mother.mother && PC === father.father) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You impregnated yourself with ${his} sole biological parent. `; + } else if (PC === mother.mother) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} sole biological parent. `; + } else if (PC === father.father) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} sole biological parent. `; + } + } else if (PC === mother.mother && PC === father.mother) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to both of ${his} parents. `; + } else if (PC === mother.father && PC === father.father) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered both of ${his} parents. `; + } else if (PC === mother.mother) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} mother. `; + } else if (PC === mother.father) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} mother. `; } - } else if (child.trust < 95) { - if (child.devotion < -20) { - r += `<span class="orangered">Bold${V.summaryStats ? `[${child.trust}]` : ''}</span> `; - } else { - r += `<span class="mediumseagreen">Trust${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + if (PC === father.mother) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} father. `; + } else if (PC === father.father) { + r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} father. `; } } else { - if (child.devotion < -20) { - r += `<span class="darkred">Defiant${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + if (mmi === ffi) { + r += `${His} sole granparent is ${mmi.slaveName}.</span> `; } else { - r += `<span class="seagreen">VTrust ${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + if (mmi === mfi) { + r += `${His} sole <span class="lightgreen">grandparent is ${mmi}.</span> `; + } else { + r += `${His} maternal <span class="lightgreen">grandmother is ${mmi.slaveName}.</span> ${His} paternal <span class="lightgreen">grandmother is ${mfi.slaveName}.</span> `; + } + if (fmi === ffi) { + r += `${His} sole <span class="lightgreen">grandparent is ${ffi}.</span> `; + } else { + r += `${His} maternal <span class="lightgreen">grandfather is ${fmi.slaveName}.</span> ${His} paternal <span class="lightgreen">grandfather is ${ffi.slaveName}.</span> `; + } } } - } - /** - * @param {App.Entity.SlaveState} child - */ - function longDevotion(child) { - if (child.fetish === "mindbroken") { - r += `<span class="red">Mindbroken.</span> `; - } else if (child.devotion < -95) { - r += `<span class="darkviolet">Very hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else if (child.devotion < -50) { - r += `<span class="darkviolet">Hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else if (child.devotion < -20) { - r += `<span class="mediumorchid">Resistant${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else if (child.devotion <= 20) { - r += `<span class="yellow">Ambivalent${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else if (child.devotion <= 50) { - r += `<span class="hotpink">Accepting${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else if (child.devotion <= 95) { - r += `<span class="deeppink">Devoted${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; - } else { - r += `<span class="magenta">Worshipful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + // aunts + for (let i = 0; i < V.slaves.length; i++) { + if (V.slaves[i] === mother || V.slaves[i] === father) { + for (let j = 0; j < V.slaves.length; j++) { + if (V.slaves[j].genes === "XX") { + if (areSisters(V.slaves[i], V.slaves[j]) === 1 || areSisters(V.slaves[i], V.slaves[j] === 2)) { + V.children.push(V.slaves[j]); + } + } + } + } } - if (child.fetish === "mindbroken") { - return; - } else if (child.trust < -95) { - r += `<span class="darkgoldenrod">Extremely terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; - } else if (child.trust < -50) { - r += `<span class="goldenrod">Terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; - } else if (child.trust < -20) { - r += `<span class="gold">Frightened${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; - } else if (child.trust <= 20) { - r += `<span class="yellow">Fearful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; - } else if (child.trust <= 50) { - if (child.devotion < -20) { - r += `<span class="orange">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + + if (V.children.length > 0) { + r += `${He} `; + if (V.children.length > 2) { + r += `has <span class="lightgreen">many aunts, `; + for (j = 0; j < V.children.length; j++) { + if (j < V.children.length - 1) { + r += `${V.children[j].slaveName}, `; + } else { + r += `and ${V.children[j].slaveName}.</span> `; + } + } + } else if (V.children.length === 2) { + r += `has <span class="lightgreen">two aunts, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; } else { - r += `<span class="mediumaquamarine">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + r += `has <span class="lightgreen">an aunt, ${V.children[0].slaveName}.</span> `; } - } else if (child.trust < 95) { - if (child.devotion < -20) { - r += `<span class="orangered">Bold${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; - } else { - r += `<span class="mediumseagreen">Trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } + V.children = []; + + // uncles + for (let i = 0; i < V.slaves.length; i++) { + if (V.slaves[i] === mother || V.slaves[i] === father) { + for (let j = 0; j < V.slaves.length; j++) { + if (V.slaves[j].genes === "XY") { + if (areSisters(V.slaves[i], V.slaves[j]) === 1 || areSisters(V.slaves[i], V.slaves[j] === 2)) { + V.children.push(V.slaves[j]); + } + } + } } - } else { - if (child.devotion < -20) { - r += `<span class="darkred">Defiant${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } + + if (V.children.length > 0) { + r += `${He} `; + if (V.children.length > 2) { + r += `has <span class="lightgreen">many uncles, `; + for (j = 0; j < V.children.length; j++) { + if (j < V.children.length - 1) { + r += `${V.children[j].slaveName}, `; + } else { + r += `and ${V.children[j].slaveName}.</span> `; + } + } + } else if (V.children.length === 2) { + r += `has <span class="lightgreen">two uncles, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; } else { - r += `<span class="seagreen">Profoundly trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + r += `has <span class="lightgreen">an uncle, ${V.children[0].slaveName}.</span> `; } } - } + V.children = []; - /** - * @param {App.Entity.SlaveState} child - */ - function shortRules(child) { - switch (child.livingRules) { - case "luxurious": - r += `<strong>LS:Lux</strong> `; - break; - case "normal": - r += `<strong>LS:Nor</strong> `; - break; - default: - r += `<strong>LS:Spa</strong> `; - break; - } - if (canTalk(child)) { - switch (child.speechRules) { - case "permissive": - r += `<strong>SpR:P</strong> `; - break; - case "accent elimination": - r += `<strong>SpR:NoAcc</strong> `; - break; - case "language lessons": - r += `<strong>SpR:LL</strong> `; - break; - default: - r += `<strong>SpR:R</strong> `; - break; + // nieces + for (let i = 0; i < V.slaves.length; i++) { + if (areSisters(V.slaves[i], child) === 1 || areSisters(V.slaves[i], child) === 2) { + for (let j = 0; j < V.slaves.length; j++) { + if (V.slaves[i].ID !== V.slaves[j].ID && V.slaves[j].genes === "XX") { + if (V.slaves[i].ID === V.slaves[j].mother || V.slaves[i].ID === V.slaves[j].father) { + V.children.push(V.slaves[j]); + } + } + } } - r += " "; - } - switch (child.relationshipRules) { - case "permissive": - r += `<strong>ReR:P</strong> `; - break; - case "just friends": - r += `<strong>ReR:Fr</strong> `; - break; - default: - r += `<strong>ReR:R</strong> `; - break; - } - switch (child.standardPunishment) { - case "confinement": - r += `<strong>Pun:Conf</strong> `; - break; - case "whipping": - r += `<strong>Pun:Whip</strong> `; - break; - case "chastity": - r += `<strong>Pun:Chas</strong> `; - break; - default: - r += `<strong>Pun:Situ</strong> `; - break; - } - switch (child.standardReward) { - case "relaxation": - r += `<strong>Rew:Relx</strong> `; - break; - case "drugs": - r += `<strong>Rew:Drug</strong> `; - break; - case "orgasm": - r += `<strong>Rew:Orga</strong> `; - break; - default: - r += `<strong>Rew:Situ</strong> `; - break; - } - switch (child.releaseRules) { - case "permissive": - r += `<strong>MaR:P</strong> `; - break; - case "sapphic": - r += `<strong>MaR:S</strong> `; - break; - case "masturbation": - r += `<strong>MaR:M</strong> `; - break; - case "chastity": - r += `<strong>MaR:C</strong> `; - break; - default: - r += `<strong>MaR:R</strong> `; - break; } - } - /** - * @param {App.Entity.SlaveState} child - */ - function longRules(child) { - r += `Living standard: ${child.livingRules}. `; - if (canTalk(child)) { - r += `Speech rules: ${child.speechRules}. `; + if (V.children.length > 0) { + r += `${He} `; + if (V.children.length > 2) { + r += `has <span class="lightgreen">many nieces, `; + for (j = 0; j < V.children.length; j++) { + if (j < V.children.length - 1) { + r += `${V.children[j].slaveName}, `; + } else { + r += `and ${V.children[j].slaveName}.</span> `; + } + } + } else if (V.children.length === 2) { + r += `has <span class="lightgreen">two nieces, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; + } else { + r += `has <span class="lightgreen">a niece, ${V.children[0].slaveName}.</span> `; + } } - r += `Relationship rules: ${child.relationshipRules}. `; - r += `Typical punishment: ${child.standardPunishment}. `; - r += `Typical reward: ${child.standardReward}. `; - r += `Release rules: ${child.releaseRules}. `; - } + V.children = []; - /** - * @param {App.Entity.SlaveState} child - */ - function shortWeight(child) { - if (child.weight < -95) { - r += `<strong><span class="red">W---${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; - } else if (child.weight < -30) { - if (child.hips < -1) { - r += `<strong>W--${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else { - r += `<strong><span class="red">W--${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + // nephews + for (let i = 0; i < V.slaves.length; i++) { + if (areSisters(V.slaves[i], child) === 1 || areSisters(V.slaves[i], child) === 2) { + for (let j = 0; j < V.slaves.length; j++) { + if (V.slaves[i].ID !== V.slaves[j].ID && V.slaves[j].genes === "XY") { + if (V.slaves[i].ID === V.slaves[j].mother || V.slaves[i].ID === V.slaves[j].father) { + V.children.push(V.slaves[j]); + } + } + } } - } else if (child.weight < -10) { - r += `<strong>W-${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else if (child.weight <= 10) { - r += `<strong>W${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else if (child.weight <= 30) { - r += `<strong>W+${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else if (child.weight <= 95) { - if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `<strong>W++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } + + if (V.children.length > 0) { + r += `${He} `; + if (V.children.length > 2) { + r += `has <span class="lightgreen">many nephews, `; + for (j = 0; j < V.children.length; j++) { + if (j < V.children.length - 1) { + r += `${V.children[j].slaveName}, `; + } else { + r += `and ${V.children[j].slaveName}.</span> `; + } + } + } else if (V.children.length === 2) { + r += `has <span class="lightgreen">two nephews, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; } else { - r += `<strong><span class="red">W++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + r += `has <span class="lightgreen">a nephew, ${V.children[0].slaveName}.</span> `; } - } else if (child.weight <= 130) { - if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `<strong>W+++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else { - r += `<strong><span class="red">W+++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + V.children = []; + + let + twins = [], + sisters = [], + brothers = [], + halfSisters = [], + halfBrothers = [], + cousins = []; + + for (let i = 0; i < V.slaves.length; i++) { + let sisterCheck = areSisters(V.slaves[i], child); + if (sisterCheck === 1) { + twins.push(V.slaves[i]); } - } else if (child.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `<strong>W++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else { - r += `<strong><span class="red">W++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + if (sisterCheck === 2) { + (V.slaves[i].genes === "XX" ? sisters : brothers).push(V.slaves[i]); } - } else if (child.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `<strong>W+++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else { - r += `<strong><span class="red">W+++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + if (sisterCheck === 3) { + (V.slaves[i].genes === "XX" ? halfSisters : halfBrothers).push(V.slaves[i]); } - } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `<strong>W++++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; - } else { - r += `<strong><span class="red">W++++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + if (V.showDistantRelatives) { + if (areCousins(V.slaves[i], child)) { + cousins.push(V.slaves[i]); + } } } - } - /** - * @param {App.Entity.SlaveState} child - */ - function longWeight(child) { - if (child.weight < -95) { - r += `<span class="red">Emaciated${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; - } else if (child.weight < -30) { - if (child.hips < -1) { - r += `Model-thin${V.summaryStats? `[${child.weight}]`: ''}. `; - } else { - r += `<span class="red">Very thin${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; - } - } else if (child.weight < -10) { - r += `Thin${V.summaryStats? `[${child.weight}]`: ''}. `; - } else if (child.weight <= 10) { - r += `Trim${V.summaryStats? `[${child.weight}]`: ''}. `; - } else if (child.weight <= 30) { - r += `Plush${V.summaryStats? `[${child.weight}]`: ''}. `; - } else if (child.weight <= 95) { - if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `Nicely chubby${V.summaryStats? `[${child.weight}]`: ''}. `; - } else { - r += `<span class="red">Overweight${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; - } - } else if (child.weight <= 130) { - if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `Pleasantly soft and shapely${V.summaryStats? `[${child.weight}]`: ''}. `; - } else { - r += `<span class="red">Fat${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; - } - } else if (child.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `Amazingly voluptuous${V.summaryStats? `[${child.weight}]`: ''}. `; + // twins + if (twins.length > 0) { + r += `${He} `; + if (twins.length > 2) { + r += `<span class="lightgreen">shared a cramped womb with ${twins.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })}</span> `; + } else if (twins.length === 2) { + r += `is <span class="lightgreen">one of a set of triplets; ${twins[0].slaveName} and ${twins[1].slaveName}</span> complete the trio. `; } else { - r += `<span class="red">Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + r += `is <span class="lightgreen">twins with ${twins[0].slaveName}.</span> `; } - } else if (child.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `SSBBW${V.summaryStats? `[${child.weight}]`: ''}. `; + } + + // sisters + if (sisters.length > 0) { + if (sisters.length > 1) { + r += `<span class="lightgreen">${sisters.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })} are ${his} sisters.</span> `; } else { - r += `<span class="red">Super Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + r += `<span class="lightgreen">${sisters[0].slaveName} is $his sister. `; } - } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - r += `Perfectly massive${V.summaryStats? `[${child.weight}]`: ''}. `; + } + + // brothers + if (brothers.length > 0) { + if (brothers.length > 1) { + r += `<span class="lightgreen">${brothers.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })} are ${his} brothers.</span> `; } else { - r += `<span class="red">Dangerously Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + r += `<span class="lightgreen">${brothers[0].slaveName} is $his brother. `; } } - } - /** - * @param {App.Entity.SlaveState} child - */ - function shortDiet(child) { - r += `<span class="teal">`; - switch (child.diet) { - case "restricted": - r += `<strong>Di:W-</strong> `; - break; - case "fattening": - r += `<strong>Di:W+</strong> `; - break; - case "XX": - r += `<strong>Di:XX+</strong> `; - break; - case "XY": - r += `<strong>Di:XY+</strong> `; - break; - case "XXY": - r += `<strong>Di:XXY+</strong> `; - break; - case "muscle building": - r += `<strong>Di:M+</strong> `; - break; - case "slimming": - r += `<strong>Di:M-</strong> `; - break; - case "cum production": - r += `<strong>Di:C+</strong> `; - break; - case "cleansing": - r += `<strong>Di:H+</strong> `; - break; - case "fertility": - r += `<strong>Di:F+</strong> `; - break; - } - r += `</span> `; - r += `<span class="cyan">`; - if (child.dietCum === 2) { - r += `<strong>Cum++</strong> `; - } else if (((child.dietCum === 1) && (child.dietMilk === 0))) { - r += `<strong>Cum+</strong> `; - } else if (((child.dietCum === 1) && (child.dietMilk === 1))) { - r += `<strong>Cum+ Milk+</strong> `; - } else if (((child.dietCum === 0) && (child.dietMilk === 1))) { - r += `<strong>Milk+</strong> `; - } else if ((child.dietMilk === 2)) { - r += `<strong>Milk++</strong> `; + // half-sisters + children = V.slaves.filter(function(s) { + return areSisters(child, s) === 3 && s.genes === "XX"; + }); + if (children.length > 2) { + r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })} are half-sisters to ${him}.</span> `; + } else if (children.length === 2) { + r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are half-sisters to ${him}.</span> `; + } else { + r += `<span class="lightgreen">${children[0].slaveName} is a half-sister to ${him}.</span> `; } - r += `</span> `; - } - /** - * @param {App.Entity.SlaveState} child - */ - function longDiet(child) { - r += `<span class="teal">`; - switch (child.diet) { - case "restricted": - r += `Dieting. `; - break; - case "fattening": - r += `Gaining weight. `; - break; - case "XX": - r += `Estrogen rich. `; - break; - case "XY": - r += `Testosterone rich. `; - break; - case "XXY": - r += `Futanari mix. `; - break; - case "muscle building": - r += `Pumping iron. `; - break; - case "slimming": - r += `Slimming down. `; - break; - case "cum production": - r += `Cum production. `; - break; - case "cleansing": - r += `Cleansing. `; - break; - case "fertility": - r += `Fertility. `; - break; - } - r += `</span> `; - if (child.dietCum === 2) { - r += `Diet base: <span class="cyan">Cum Based.</span> `; - } else if (((child.dietCum === 1) && (child.dietMilk === 0))) { - r += `Diet base: <span class="cyan">Cum Added.</span> `; - } else if (((child.dietCum === 1) && (child.dietMilk === 1))) { - r += `Diet base: <span class="cyan">Milk & Cum Added.</span> `; - } else if (((child.dietCum === 0) && (child.dietMilk === 1))) { - r += `Diet base: <span class="cyan">Milk Added.</span> `; - } else if ((child.dietMilk === 2)) { - r += `Diet base: <span class="cyan">Milk Based.</span> `; + // half-brothers + children = V.slaves.filter(function(s) { + return areSisters(child, s) === 3 && s.genes === "XY"; + }); + if (children.length > 2) { + r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })} are half-brothers to ${him}.</span> `; + } else if (children.length === 2) { + r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are half-brothers to ${him}.</span> `; + } else { + r += `<span class="lightgreen">${children[0].slaveName} is a half-brother to ${him}.</span> `; } - } - /** - * @param {App.Entity.SlaveState} child - */ - function shortHealth(child) { - if (child.health < -20) { - r += `<strong><span class="red">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; - } else if (child.health <= 20) { - r += `<strong><span class="yellow">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; - } else if (child.health > 20) { - r += `<strong><span class="green">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; + // cousins + children = V.slaves.filter(function(s) { + return areCousins(child, s); + }); + if (children.length > 2) { + r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { + return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; + })} are cousins to ${him}.</span> `; + } else if (children.length === 2) { + r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are cousins to ${him}.</span> `; + } else { + r += `<span class="lightgreen">${children[0].slaveName} is a cousins to ${him}.</span> `; } } - /** - * @param {App.Entity.SlaveState} child - */ - function longHealth(child) { - if (child.health < -90) { - r += `<span class="red">On the edge of death${V.summaryStats? `[${child.health}]` : ''}.</span> `; - } else if (child.health < -50) { - r += `<span class="red">Extremely unhealthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; - } else if (child.health < -20) { - r += `<span class="red">Unhealthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; - } else if (child.health <= 20) { - r += `<span class="yellow">Healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; - } else if (child.health <= 50) { - r += `<span class="green">Very healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; - } else if (child.health <= 90) { - r += `<span class="green">Extremely healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + /* CLOSE FAMILY */ + + if (father === PC) { + if (child.eyeColor === PC.eyeColor) { + r += `${He} has your ${child.eyeColor} eyes, `; } else { - r += `<span class="green">Unnaturally healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `; + } + } else { + if (child.eyeColor === father.eyeColor) { + r += `${He} has ${his} father ${father.slaveName}'s ${child.eyeColor} eyes, `; + } else { + r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `; } } + r += ` and ${he} will likely have ${child.hColor} hair when ${he}'s older. `; + + r += `${He} is ${child.race} and ${child.nationality}, and has ${child.skin} skin. `; // TODO: reword this + + return r; +}; + +/* CHILDREN */ + +/** + * @param {App.Entity.SlaveState} child + * @returns {string} + */ +App.Facilities.Nursery.ChildSummary = function(child) { + "use strict"; + const V = State.variables; + let r = ``; + /* eslint-disable */ + const + pronouns = getPronouns(child), + he = pronouns.pronoun, + him = pronouns.object, + his = pronouns.possessive, + hers = pronouns.possessivePronoun, + himself = pronouns.objectReflexive, + boy = pronouns.noun, + He = capFirstChar(he), + His = capFirstChar(his); + /* eslint-enable */ /** * @param {App.Entity.SlaveState} child + * @returns {string} */ - function shortDrugs(child) { - r += `<span class="tan">`; - switch (child.drugs) { - case "breast injections": - r += `<strong>Dr:Boobs+</strong> `; - break; - case "intensive breast injections": - r += `<strong>Dr:Boobs++</strong> `; - break; - case "hyper breast injections": - r += `<strong>Dr:Boobs+++</strong> `; - break; - case "butt injections": - r += `<strong>Dr:Butt+</strong> `; - break; - case "intensive butt injections": - r += `<strong>Dr:Butt++</strong> `; - break; - case "hyper butt injections": - r += `<strong>Dr:Butt+++</strong> `; - break; - case "lip injections": - r += `<strong>Dr:Lip+</strong> `; - break; - case "fertility drugs": - r += `<strong>Dr:Fert+</strong> `; - break; - case "super fertility drugs": - r += `<strong>Dr:Fert++</strong> `; - break; - case "penis enhancement": - r += `<strong>Dr:Dick+</strong> `; - break; - case "intensive penis enhancement": - r += `<strong>Dr:Dick++</strong> `; - break; - case "hyper penis enhancement": - r += `<strong>Dr:Dick+++</strong> `; - break; - case "testicle enhancement": - r += `<strong>Dr:Balls+</strong> `; - break; - case "intensive testicle enhancement": - r += `<strong>Dr:Balls++</strong> `; - break; - case "hyper testicle enhancement": - r += `<strong>Dr:Balls+++</strong> `; - break; - case "psychosuppressants": - r += `<strong>Dr:Psych</strong> `; - break; - case "steroids": - r += `<strong>Dr:Ster</strong> `; - break; - case "female hormone injections": - r += `<strong>Dr:HormXX++</strong> `; - break; - case "male hormone injections": - r += `<strong>Dr:HormXY++</strong> `; - break; - case "hormone enhancers": - r += `<strong>Dr:Horm+</strong> `; - break; - case "hormone blockers": - r += `<strong>Dr:Horm-</strong> `; - break; - case "anti-aging cream": - r += `<strong>Dr:Age-</strong> `; - break; - case "appetite suppressors": - r += `<strong>Dr:ApSup</strong> `; - break; - case "penis atrophiers": - r += `<strong>Dr:Dick-</strong> `; - break; - case "testicle atrophiers": - r += `<strong>Dr:Balls-</strong> `; - break; - case "clitoris atrophiers": - r += `<strong>Dr:Clit-</strong> `; - break; - case "labia atrophiers": - r += `<strong>Dr:Labia-</strong> `; - break; - case "nipple atrophiers": - r += `<strong>Dr:Nipple-</strong> `; - break; - case "lip atrophiers": - r += `<strong>Dr:Lip-</strong> `; - break; - case "breast redistributors": - r += `<strong>Dr:Breast-</strong> `; - break; - case "butt redistributors": - r += `<strong>Dr:Butt-</strong> `; - break; - case "sag-B-gone": - r += `<strong>Dr:AntiSag</strong> `; - break; - case "growth stimulants": - r += `<strong>Dr:groStim</strong> `; - break; - } - r += `</span> `; - r += `<span class="lightgreen">`; - if (child.curatives === 2) { - r += `<strong>Cura</strong> `; - } else if (child.curatives === 1) { - r += `<strong>Prev</strong> `; + function ChildSummaryUncached(child) { + if (V.abbreviateDevotion === 1) { + shortDevotion(child); + } else if (V.abbreviateDevotion === 2) { + longDevotion(child); } - r += `</span> `; - if (child.aphrodisiacs !== 0) { - r += `<span class="lightblue">`; - if (child.aphrodisiacs === 1) { - r += `<strong>Aph</strong> `; - } else if (child.aphrodisiacs === 2) { - r += `<strong>Aph++</strong> `; - } else { - r += `<strong>Anaph</strong> `; + if (child.fuckdoll === 0) { + if (V.abbreviateRules === 1) { + shortRules(child); + } else if (V.abbreviateRules === 2) { + longRules(child); } - r += `</span> `; } - if (child.addict !== 0) { - r += `<span class="cyan">Add</span> `; - } - r += `<span class="lightsalmon">`; - if (child.hormones > 1) { - r += `<strong>Ho:F+</strong> `; - } else if (child.hormones > 0) { - r += `<strong>Ho:F</strong> `; - } else if (child.hormones < -1) { - r += `<strong>Ho:M+</strong> `; - } else if (child.hormones < 0) { - r += `<strong>Ho:M</strong> `; - } - r += `</span> `; - r += `<span class="mediumseagreen">`; - if ((child.bellyImplant > -1)) { - r += `<strong>Belly Imp</strong> `; - } else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) { - r += `<strong>Barr</strong> `; - } else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `<strong>Prepub</strong> `; - } else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `<strong>Meno</strong> `; - } else if (child.pregWeek < 0) { - r += `<strong>Postpartum</strong> `; - } else if (child.preg === -1) { - r += `<strong>CC</strong> `; - } else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `<strong>Fert+</strong> `; - // } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) { - // r += `<strong>Preg?</strong> `; - } else if ((child.preg >= 36) && (child.broodmother > 0)) { - r += `<strong>Perm preg</strong> `; - } else if (child.pregKnown === 1) { - r += `<strong>${child.pregWeek} wks preg</strong> `; - } - r += `</span> `; - if (child.induce === 1) { - r += `<span class="orange"><strong>Early Labor</strong></span> `; - } - if (child.pubertyXY === 0 && child.balls > 0) { - r += `<strong>Prepub balls</strong> `; - } - if (child.balls > 0 && child.vasectomy === 1) { - r += `<strong>Vasect</strong> `; - } - r += `<span class="springgreen">`; - if (child.inflation === 3) { - r += `<strong>8 ltr ${child.inflationType}</strong> `; - } else if (child.inflation === 2) { - r += `<strong>4 ltr ${child.inflationType}</strong> `; - } else if (child.inflation === 1) { - r += `<strong>2 ltr ${child.inflationType}</strong> `; - } else if (child.bellyFluid > 0) { - r += `<strong>${child.bellyFluid}ccs ${child.inflationType}</strong> `; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longDrugs(child) { - if ((child.drugs !== "no drugs") && (child.drugs !== "none")) { - r += `<span class="tan">On ${child.drugs}.</span> `; + if (child.tired !== 0) { + r += `Tired. `; } - r += `<span class="lightgreen">`; - if (child.curatives === 2) { - r += `On curatives. `; - } else if (child.curatives === 1) { - r += `On preventatives. `; + if (V.abbreviateDiet === 1) { + shortWeight(child); + } else if (V.abbreviateDiet === 2) { + longWeight(child); } - r += `</span> `; - r += `<span class="lightblue">`; - if (child.aphrodisiacs > 0) { - r += `On ${child.aphrodisiacs > 1 ? 'extreme': ''} aphrodisiacs. `; - } else if (child.aphrodisiacs === -1) { - r += `On anaphrodisiacs. `; + if (V.abbreviateDiet === 1) { + shortDiet(child); + } else if (V.abbreviateDiet === 2) { + longDiet(child); } - r += `</span> `; - if (child.addict !== 0) { - r += `<span class="cyan">Addict.</span> `; + if (V.abbreviateHealth === 1) { + shortHealth(child); + } else if (V.abbreviateHealth === 2) { + longHealth(child); } - r += `<span class="lightsalmon">`; - if (child.hormones > 1) { - r += `Heavy female hormones. `; - } else if (child.hormones > 0) { - r += `Female hormones. `; - } else if (child.hormones < -1) { - r += `Heavy male hormones. `; - } else if (child.hormones < 0) { - r += `Male hormones. `; + if (V.abbreviateDrugs === 1) { + shortDrugs(child); + } else if (V.abbreviateDrugs === 2) { + longDrugs(child); } - r += `</span> `; - r += `<span class="mediumseagreen">`; - if ((child.bellyImplant > -1)) { - r += `Belly Implant. `; - } else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) { - r += `Barren. `; - } else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `Not ovulating yet. `; - } else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `Menopausal. `; - } else if (child.pregWeek < 0) { - r += `Postpartum. `; - } else if (child.preg === -1) { - r += `On contraceptives. `; - } else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) { - r += `Fertile. `; - } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) { - r += `May be pregnant. `; - } else if ((child.preg >= 36) && (child.broodmother > 0)) { - r += `Permanently pregnant. `; - } else if (child.pregKnown === 1) { - if (child.pregType < 2 || child.broodmother > 0) { - r += `${child.pregWeek} weeks pregnant. `; - } else { - r += `${child.pregWeek} weeks pregnant with `; - if (child.pregType >= 40) { - r += `a tremendous brood of offspring. `; - } else if (child.pregType >= 20) { - r += `a brood of offspring. `; - } else if (child.pregType >= 10) { - r += `${child.pregType} babies. `; - } else if (child.pregType === 9) { - r += `nonuplets. `; - } else if (child.pregType === 8) { - r += `octuplets. `; - } else if (child.pregType === 7) { - r += `septuplets. `; - } else if (child.pregType === 6) { - r += `sextuplets. `; - } else if (child.pregType === 5) { - r += `quintuplets. `; - } else if (child.pregType === 4) { - r += `quadruplets. `; - } else if (child.pregType === 3) { - r += `triplets. `; - } else { - r += `twins. `; - } + if (V.abbreviateNationality + V.abbreviateGenitalia + V.abbreviatePhysicals + V.abbreviateSkills + V.abbreviateMental !== 0) { + r += `<br> `; + if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { + r += " "; } - if (child.preg > child.pregData.normalBirth && child.broodmother === 0) { - r += ` (Overdue.)`; + } + V.desc = SlaveTitle(child); + const firstLetter = V.desc.substring(0, 1).toUpperCase(); + V.desc = firstLetter + V.desc.substring(1); + r += `<strong><span class="coral">${V.desc}${V.abbreviatePhysicals === 2? '.' : ''}</span></strong> `; + if (V.seeRace === 1) { + r += `<span class="tan">`; + if (V.abbreviateRace === 1) { + shortRace(child); + } else if (V.abbreviateRace === 2) { + longRace(child); } + r += `</span> `; } - r += `</span> `; - if (child.induce === 1) { - r += `<span class="orange">Showing signs of early labor.</span> `; + if (V.abbreviateNationality === 1) { + shortNationality(child); + } else if (V.abbreviateNationality === 2) { + longNationality(child); } - if (child.pubertyXY === 0 && child.balls > 0) { - r += `Has not had first ejaculation. `; + if (V.abbreviatePhysicals === 1) { + shortSkin(child); + } else { + r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `; } - if (child.balls > 0 && child.vasectomy === 1) { - r += `Vasectomy. `; + if (V.abbreviateGenitalia === 1) { + shortGenitals(child); + } else if (V.abbreviateGenitalia === 2) { + longGenitals(child); } - r += `<span class="springgreen">`; - if (child.inflation === 3) { - r += `Filled with 8 liters of ${child.inflationType}. `; - } else if (child.inflation === 2) { - r += `Filled with 4 liters of ${child.inflationType}. `; - } else if (child.inflation === 1) { - r += `Filled with 2 liters of ${child.inflationType}. `; - } else if (child.bellyFluid > 0) { - r += `Stuffed with ${child.bellyFluid}ccs of ${child.inflationType}. `; + if (V.abbreviatePhysicals === 1) { + shortAge(child); + shortFace(child); + shortEyes(child); + shortEars(child); + if (child.markings !== "none") { + r += "Markings"; + } + shortLips(child); + shortTeeth(child); + shortMuscles(child); + shortLimbs(child); + shortVoice(child); + shortTitsAss(child); + shortHips(child); + shortWaist(child); + shortImplants(child); + shortLactation(child); + shortMods(child); + r += `</span> `; + } else if (V.abbreviatePhysicals === 2) { + longAge(child); + longFace(child); + longEyes(child); + longEars(child); + longLips(child); + longTeeth(child); + longMuscles(child); + longLimbs(child); + longVoice(child); + longTitsAss(child); + longHips(child); + longWaist(child); + longImplants(child); + longLactation(child); + longMods(child); + if (child.brand !== 0) { + r += `Branded. `; + } + r += `</span> `; } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortRace(child) { - switch (child.race) { - case "white": - r += `C`; - break; - case "asian": - r += `A`; - break; - case "indo-aryan": - r += `I`; - break; - case "latina": - r += `L`; - break; - case "middle eastern": - r += `ME`; - break; - case "black": - r += `B`; - break; - case "pacific islander": - r += `PI`; - break; - case "malay": - r += `M`; - break; - case "amerindian": - r += `AI`; - break; - case "semitic": - r += `S`; - break; - case "southern european": - r += `SE`; - break; - case "mixed race": - r += `MR`; - break; - default: - r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`; - break; + if (V.abbreviateHormoneBalance === 1) { + if (child.hormoneBalance <= -21) { + r += `<span class="deepskyblue">`; + r += ` <strong>HB:M</strong> `; + } else if (child.hormoneBalance <= 20) { + r += `<span class="pink">`; + r += ` <strong>HB:N</strong> `; + } else if (child.hormoneBalance <= 500) { + r += `<span class="pink">`; + r += ` <strong>HB:F</strong> `; + } + r += `</span> `; + } else if (V.abbreviateHormoneBalance === 2) { + r += `<span class=`; + if (child.hormoneBalance <= -21) { + r += `"deepskyblue"`; + } else { + r += `"pink"`; + } + r += `> `; + if (child.hormoneBalance < -400) { + r += `Overwhelmingly masculine`; + } else if (child.hormoneBalance <= -300) { + r += `Extremely masculine`; + } else if (child.hormoneBalance <= -200) { + r += `Heavily masculine`; + } else if (child.hormoneBalance <= -100) { + r += `Very masculine`; + } else if (child.hormoneBalance <= -21) { + r += `Masculine`; + } else if (child.hormoneBalance <= 20) { + r += `Neutral`; + } else if (child.hormoneBalance <= 99) { + r += `Feminine`; + } else if (child.hormoneBalance <= 199) { + r += `Very feminine`; + } else if (child.hormoneBalance <= 299) { + r += `Heavily feminine`; + } else if (child.hormoneBalance <= 399) { + r += `Extremely feminine`; + } else if (child.hormoneBalance <= 500) { + r += `Overwhelmingly feminine`; + } + r += ` hormone balance.</span> `; + } + r += "<br>"; + if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { + r += " "; + } + if (V.abbreviateSkills === 1) { + shortIntelligence(child); + shortSexSkills(child); + if (child.skill.combat > 0) { + r += "C"; + } + r += "</span> "; + shortPrestige(child); + shortPornPrestige(child); + } else if (V.abbreviateSkills === 2) { + longIntelligence(child); + longSexSkills(child); + if (child.skill.combat > 0) { + r += "Trained fighter."; + } + r += "</span> "; + longPrestige(child); + longPornPrestige(child); + } + if (V.abbreviateMental === 1) { + if (child.fetish !== "mindbroken") { + if (child.fetishKnown === 1) { + shortFetish(child); + } + if (child.attrKnown === 1) { + shortAttraction(child); + } + } + if (child.clitPiercing === 3) { + shortSmartFetish(child); + shortSmartAttraction(child); + } + shortBehaviorFlaw(child); + shortSexFlaw(child); + shortBehaviorQuirk(child); + shortSexQuirk(child); + } else if (V.abbreviateMental === 2) { + if (child.fetish !== "mindbroken") { + if (child.fetishKnown === 1) { + longFetish(child); + } + if (child.attrKnown === 1) { + longAttraction(child); + } + } + if (child.clitPiercing === 3) { + longSmartFetish(child); + longSmartAttraction(child); + } + longBehaviorFlaw(child); + longSexFlaw(child); + longBehaviorQuirk(child); + longSexQuirk(child); + } + if (child.custom.label) { + r += `<strong><span class="yellow">${capFirstChar(child.custom.label)}</span></strong> `; + } + if ((child.relationship !== 0) || (child.relation !== 0) || (V.abbreviateClothes === 2) || (V.abbreviateRulesets === 2)) { + r += `<br> `; + if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { + r += ` `; + } + } + if (V.abbreviateMental === 1) { + r += `<span class="lightgreen">`; + if (V.familyTesting === 1) { + shortExtendedFamily(child); + } else { + shortLegacyFamily(child); + } + r += `</span> `; + shortClone(child); + shortRival(child); + } else if (V.abbreviateMental === 2) { + if (V.familyTesting === 1) { + longExtendedFamily(child); + } else { + longLegacyFamily(child); + } + longClone(child); + longRival(child); + } + if (child.fuckdoll === 0) { + if (V.abbreviateClothes === 2) { + r += ` `; + if (child.choosesOwnClothes === 1) { + r += "Dressing herself. "; + } + longClothes(child); + longCollar(child); + longBelly(child); + if (child.amp !== 1) { + longLegs(child); + } + if (canWalk(child)) { + longShoes(child); + } + longChastity(child); + longVaginalAcc(child); + longDickAcc(child); + longButtplug(child); + } + } + r += ` `; + rulesAssistant(child); + if (V.abbreviateOrigins === 2 && child.origin !== 0) { + origins(child); } + return r; } /** * @param {App.Entity.SlaveState} child */ - function longRace(child) { - switch (child.race) { - case "white": - r += `Caucasian. `; - break; - case "asian": - r += `Asian. `; - break; - case "indo-aryan": - r += `Indo-aryan. `; - break; - case "latina": - r += `Latina. `; - break; - case "middle eastern": - r += `Middle Eastern. `; - break; - case "black": - r += `Black. `; - break; - case "pacific islander": - r += `Pacific Islander. `; - break; - case "malay": - r += `Malay. `; - break; - case "amerindian": - r += `Amerindian. `; - break; - case "semitic": - r += `Semitic. `; - break; - case "southern european": - r += `Southern European. `; - break; - case "mixed race": - r += `Mixed race. `; - break; - default: - r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `; - break; + function shortDevotion(child) { + if (child.fetish === "mindbroken") { + r += `<span class="red">MB</span> `; + } else if (child.devotion < -95) { + r += `<span class="darkviolet">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else if (child.devotion < -50) { + r += `<span class="darkviolet">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else if (child.devotion < -20) { + r += `<span class="mediumorchid">Res${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else if (child.devotion <= 20) { + r += `<span class="yellow">Ambiv${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else if (child.devotion <= 50) { + r += `<span class="hotpink">Accept${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else if (child.devotion <= 95) { + r += `<span class="deeppink">Devo${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } else { + r += `<span class="magenta">Wor${V.summaryStats ? `[${child.devotion}]` : ''}</span> `; + } + if (child.fetish === "mindbroken") { + return; + } else if (child.trust < -95) { + r += `<span class="darkgoldenrod">ETerr${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else if (child.trust < -50) { + r += `<span class="goldenrod">Terr${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else if (child.trust < -20) { + r += `<span class="gold">Fright${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else if (child.trust <= 20) { + r += `<span class="yellow">Fear${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else if (child.trust <= 50) { + if (child.devotion < -20) { + r += `<span class="orange">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else { + r += `<span class="mediumaquamarine">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } + } else if (child.trust < 95) { + if (child.devotion < -20) { + r += `<span class="orangered">Bold${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else { + r += `<span class="mediumseagreen">Trust${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } + } else { + if (child.devotion < -20) { + r += `<span class="darkred">Defiant${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } else { + r += `<span class="seagreen">VTrust ${V.summaryStats ? `[${child.trust}]` : ''}</span> `; + } } } /** * @param {App.Entity.SlaveState} child */ - function shortNationality(child) { - r += `<span class="tan">`; - switch (child.nationality) { - case "Afghan": - r += `Afg`; - break; - case "Albanian": - r += `Alb`; - break; - case "Algerian": - r += `Alg`; - break; - case "American": - r += `USA`; - break; - case "Andorran": - r += `And`; - break; - case "Angolan": - r += `Ang`; + function longDevotion(child) { + if (child.fetish === "mindbroken") { + r += `<span class="red">Mindbroken.</span> `; + } else if (child.devotion < -95) { + r += `<span class="darkviolet">Very hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else if (child.devotion < -50) { + r += `<span class="darkviolet">Hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else if (child.devotion < -20) { + r += `<span class="mediumorchid">Resistant${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else if (child.devotion <= 20) { + r += `<span class="yellow">Ambivalent${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else if (child.devotion <= 50) { + r += `<span class="hotpink">Accepting${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else if (child.devotion <= 95) { + r += `<span class="deeppink">Devoted${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } else { + r += `<span class="magenta">Worshipful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `; + } + if (child.fetish === "mindbroken") { + return; + } else if (child.trust < -95) { + r += `<span class="darkgoldenrod">Extremely terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else if (child.trust < -50) { + r += `<span class="goldenrod">Terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else if (child.trust < -20) { + r += `<span class="gold">Frightened${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else if (child.trust <= 20) { + r += `<span class="yellow">Fearful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else if (child.trust <= 50) { + if (child.devotion < -20) { + r += `<span class="orange">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else { + r += `<span class="mediumaquamarine">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } + } else if (child.trust < 95) { + if (child.devotion < -20) { + r += `<span class="orangered">Bold${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else { + r += `<span class="mediumseagreen">Trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } + } else { + if (child.devotion < -20) { + r += `<span class="darkred">Defiant${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } else { + r += `<span class="seagreen">Profoundly trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortRules(child) { + switch (child.livingRules) { + case "luxurious": + r += `<strong>LS:Lux</strong> `; break; - case "Antiguan": - r += `AB`; + case "normal": + r += `<strong>LS:Nor</strong> `; break; - case "Argentinian": - r += `Arg`; + default: + r += `<strong>LS:Spa</strong> `; break; - case "Armenian": - r += `Arm`; + } + if (canTalk(child)) { + switch (child.speechRules) { + case "permissive": + r += `<strong>SpR:P</strong> `; + break; + case "accent elimination": + r += `<strong>SpR:NoAcc</strong> `; + break; + case "language lessons": + r += `<strong>SpR:LL</strong> `; + break; + default: + r += `<strong>SpR:R</strong> `; + break; + } + r += " "; + } + switch (child.relationshipRules) { + case "permissive": + r += `<strong>ReR:P</strong> `; break; - case "Aruban": - r += `Aru`; + case "just friends": + r += `<strong>ReR:Fr</strong> `; break; - case "Australian": - r += `Aus`; + default: + r += `<strong>ReR:R</strong> `; break; - case "Austrian": - r += `Aut`; + } + switch (child.standardPunishment) { + case "confinement": + r += `<strong>Pun:Conf</strong> `; break; - case "Azerbaijani": - r += `Aze`; + case "whipping": + r += `<strong>Pun:Whip</strong> `; break; - case "Bahamian": - r += `Bah`; + case "chastity": + r += `<strong>Pun:Chas</strong> `; break; - case "Bahraini": - r += `Bah`; + default: + r += `<strong>Pun:Situ</strong> `; break; - case "Bangladeshi": - r += `Bgd`; + } + switch (child.standardReward) { + case "relaxation": + r += `<strong>Rew:Relx</strong> `; break; - case "Barbadian": - r += `Bar`; + case "drugs": + r += `<strong>Rew:Drug</strong> `; break; - case "Belarusian": - r += `Ber`; + case "orgasm": + r += `<strong>Rew:Orga</strong> `; break; - case "Belgian": - r += `Bel`; + default: + r += `<strong>Rew:Situ</strong> `; break; - case "Belizean": - r += `Blz`; + } + switch (child.releaseRules) { + case "permissive": + r += `<strong>MaR:P</strong> `; break; - case "Beninese": - r += `Ben`; + case "sapphic": + r += `<strong>MaR:S</strong> `; break; - case "Bermudian": - r += `Bmd`; + case "masturbation": + r += `<strong>MaR:M</strong> `; break; - case "Bhutanese": - r += `Bhu`; + case "chastity": + r += `<strong>MaR:C</strong> `; break; - case "Bissau-Guinean": - r += `GB`; + default: + r += `<strong>MaR:R</strong> `; break; - case "Bolivian": - r += `Bol`; - break; - case "Bosnian": - r += `Bos`; - break; - case "Brazilian": - r += `Bra`; - break; - case "British": - r += `UK`; - break; - case "Bruneian": - r += `Bru`; - break; - case "Bulgarian": - r += `Bul`; - break; - case "Burkinabé": - r += `BF`; - break; - case "Burmese": - r += `Bur`; - break; - case "Burundian": - r += `Bnd`; - break; - case "Cambodian": - r += `Kam`; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longRules(child) { + r += `Living standard: ${child.livingRules}. `; + if (canTalk(child)) { + r += `Speech rules: ${child.speechRules}. `; + } + r += `Relationship rules: ${child.relationshipRules}. `; + r += `Typical punishment: ${child.standardPunishment}. `; + r += `Typical reward: ${child.standardReward}. `; + r += `Release rules: ${child.releaseRules}. `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortWeight(child) { + if (child.weight < -95) { + r += `<strong><span class="red">W---${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } else if (child.weight < -30) { + if (child.hips < -1) { + r += `<strong>W--${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W--${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } else if (child.weight < -10) { + r += `<strong>W-${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else if (child.weight <= 10) { + r += `<strong>W${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else if (child.weight <= 30) { + r += `<strong>W+${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else if (child.weight <= 95) { + if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `<strong>W++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } else if (child.weight <= 130) { + if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `<strong>W+++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W+++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } else if (child.weight <= 160) { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `<strong>W++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } else if (child.weight <= 190) { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `<strong>W+++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W+++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } else { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `<strong>W++++++${V.summaryStats? `[${child.weight}]` : ''}</strong> `; + } else { + r += `<strong><span class="red">W++++++${V.summaryStats? `[${child.weight}]` : ''}</span></strong> `; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longWeight(child) { + if (child.weight < -95) { + r += `<span class="red">Emaciated${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } else if (child.weight < -30) { + if (child.hips < -1) { + r += `Model-thin${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Very thin${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } else if (child.weight < -10) { + r += `Thin${V.summaryStats? `[${child.weight}]`: ''}. `; + } else if (child.weight <= 10) { + r += `Trim${V.summaryStats? `[${child.weight}]`: ''}. `; + } else if (child.weight <= 30) { + r += `Plush${V.summaryStats? `[${child.weight}]`: ''}. `; + } else if (child.weight <= 95) { + if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `Nicely chubby${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Overweight${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } else if (child.weight <= 130) { + if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `Pleasantly soft and shapely${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Fat${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } else if (child.weight <= 160) { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `Amazingly voluptuous${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } else if (child.weight <= 190) { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `SSBBW${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Super Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } else { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + r += `Perfectly massive${V.summaryStats? `[${child.weight}]`: ''}. `; + } else { + r += `<span class="red">Dangerously Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortDiet(child) { + r += `<span class="teal">`; + switch (child.diet) { + case "restricted": + r += `<strong>Di:W-</strong> `; break; - case "Cameroonian": - r += `Cam`; + case "fattening": + r += `<strong>Di:W+</strong> `; break; - case "Canadian": - r += `Can`; + case "XX": + r += `<strong>Di:XX+</strong> `; break; - case "Cape Verdean": - r += `CV`; + case "XY": + r += `<strong>Di:XY+</strong> `; break; - case "Catalan": - r += `Cat`; + case "XXY": + r += `<strong>Di:XXY+</strong> `; break; - case "Central African": - r += `CAR`; + case "muscle building": + r += `<strong>Di:M+</strong> `; break; - case "Chadian": - r += `Cha`; + case "slimming": + r += `<strong>Di:M-</strong> `; break; - case "Chilean": - r += `Chl`; + case "cum production": + r += `<strong>Di:C+</strong> `; break; - case "Chinese": - r += `Chi`; + case "cleansing": + r += `<strong>Di:H+</strong> `; break; - case "Colombian": - r += `Col`; + case "fertility": + r += `<strong>Di:F+</strong> `; break; - case "Comorian": - r += `Com`; + } + r += `</span> `; + r += `<span class="cyan">`; + if (child.dietCum === 2) { + r += `<strong>Cum++</strong> `; + } else if (((child.dietCum === 1) && (child.dietMilk === 0))) { + r += `<strong>Cum+</strong> `; + } else if (((child.dietCum === 1) && (child.dietMilk === 1))) { + r += `<strong>Cum+ Milk+</strong> `; + } else if (((child.dietCum === 0) && (child.dietMilk === 1))) { + r += `<strong>Milk+</strong> `; + } else if ((child.dietMilk === 2)) { + r += `<strong>Milk++</strong> `; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longDiet(child) { + r += `<span class="teal">`; + switch (child.diet) { + case "restricted": + r += `Dieting. `; break; - case "Congolese": - r += `RC`; + case "fattening": + r += `Gaining weight. `; break; - case "a Cook Islander": - r += `CI`; + case "XX": + r += `Estrogen rich. `; break; - case "Costa Rican": - r += `CR`; + case "XY": + r += `Testosterone rich. `; break; - case "Croatian": - r += `Cro`; + case "XXY": + r += `Futanari mix. `; break; - case "Cuban": - r += `Cub`; + case "muscle building": + r += `Pumping iron. `; break; - case "Curaçaoan": - r += `Cur`; + case "slimming": + r += `Slimming down. `; break; - case "Cypriot": - r += `Cyp`; + case "cum production": + r += `Cum production. `; break; - case "Czech": - r += `Cze`; + case "cleansing": + r += `Cleansing. `; break; - case "Danish": - r += `Den`; + case "fertility": + r += `Fertility. `; break; - case "Djiboutian": - r += `Dji`; - break; - case "Dominican": - r += `DR`; - break; - case "Dominiquais": - r += `Dom`; - break; - case "Dutch": - r += `Nld`; - break; - case "East Timorese": - r += `ET`; - break; - case "Ecuadorian": - r += `Ecu`; - break; - case "Egyptian": - r += `Egy`; - break; - case "Emirati": - r += `UAE`; - break; - case "Equatoguinean": - r += `EG`; - break; - case "Eritrean": - r += `Eri`; - break; - case "Estonian": - r += `Est`; - break; - case "Ethiopian": - r += `Eth`; - break; - case "Fijian": - r += `Fij`; - break; - case "Filipina": - r += `Phl`; - break; - case "Finnish": - r += `Fin`; - break; - case "French": - r += `Fra`; - break; - case "French Guianan": - r += `FG`; - break; - case "French Polynesian": - r += `FP`; - break; - case "Gabonese": - r += `Gab`; - break; - case "Gambian": - r += `Gam`; - break; - case "Georgian": - r += `Geo`; - break; - case "German": - r += `Ger`; - break; - case "Ghanan": - r += `Gha`; - break; - case "Greek": - r += `Gre`; + } + r += `</span> `; + if (child.dietCum === 2) { + r += `Diet base: <span class="cyan">Cum Based.</span> `; + } else if (((child.dietCum === 1) && (child.dietMilk === 0))) { + r += `Diet base: <span class="cyan">Cum Added.</span> `; + } else if (((child.dietCum === 1) && (child.dietMilk === 1))) { + r += `Diet base: <span class="cyan">Milk & Cum Added.</span> `; + } else if (((child.dietCum === 0) && (child.dietMilk === 1))) { + r += `Diet base: <span class="cyan">Milk Added.</span> `; + } else if ((child.dietMilk === 2)) { + r += `Diet base: <span class="cyan">Milk Based.</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortHealth(child) { + if (child.health < -20) { + r += `<strong><span class="red">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; + } else if (child.health <= 20) { + r += `<strong><span class="yellow">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; + } else if (child.health > 20) { + r += `<strong><span class="green">H${V.summaryStats? `[${child.health}]` : ''}</span></strong> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longHealth(child) { + if (child.health < -90) { + r += `<span class="red">On the edge of death${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else if (child.health < -50) { + r += `<span class="red">Extremely unhealthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else if (child.health < -20) { + r += `<span class="red">Unhealthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else if (child.health <= 20) { + r += `<span class="yellow">Healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else if (child.health <= 50) { + r += `<span class="green">Very healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else if (child.health <= 90) { + r += `<span class="green">Extremely healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } else { + r += `<span class="green">Unnaturally healthy${V.summaryStats? `[${child.health}]` : ''}.</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortDrugs(child) { + r += `<span class="tan">`; + switch (child.drugs) { + case "breast injections": + r += `<strong>Dr:Boobs+</strong> `; break; - case "Greenlandic": - r += `Grn`; + case "intensive breast injections": + r += `<strong>Dr:Boobs++</strong> `; break; - case "Grenadian": - r += `Gda`; + case "hyper breast injections": + r += `<strong>Dr:Boobs+++</strong> `; break; - case "Guamanian": - r += `Gua`; + case "butt injections": + r += `<strong>Dr:Butt+</strong> `; break; - case "Guatemalan": - r += `Gtm`; + case "intensive butt injections": + r += `<strong>Dr:Butt++</strong> `; break; - case "Guinean": - r += `Gui`; + case "hyper butt injections": + r += `<strong>Dr:Butt+++</strong> `; break; - case "Guyanese": - r += `Guy`; + case "lip injections": + r += `<strong>Dr:Lip+</strong> `; break; - case "Haitian": - r += `Hai`; + case "fertility drugs": + r += `<strong>Dr:Fert+</strong> `; break; - case "Honduran": - r += `Hon`; + case "super fertility drugs": + r += `<strong>Dr:Fert++</strong> `; break; - case "Hungarian": - r += `Hun`; + case "penis enhancement": + r += `<strong>Dr:Dick+</strong> `; break; - case "I-Kiribati": - r += `Kir`; + case "intensive penis enhancement": + r += `<strong>Dr:Dick++</strong> `; break; - case "Icelandic": - r += `Ice`; + case "hyper penis enhancement": + r += `<strong>Dr:Dick+++</strong> `; break; - case "Indian": - r += `Ind`; + case "testicle enhancement": + r += `<strong>Dr:Balls+</strong> `; break; - case "Indonesian": - r += `Idn`; + case "intensive testicle enhancement": + r += `<strong>Dr:Balls++</strong> `; break; - case "Iranian": - r += `Irn`; + case "hyper testicle enhancement": + r += `<strong>Dr:Balls+++</strong> `; break; - case "Iraqi": - r += `Irq`; + case "psychosuppressants": + r += `<strong>Dr:Psych</strong> `; break; - case "Irish": - r += `Irl`; + case "steroids": + r += `<strong>Dr:Ster</strong> `; break; - case "Israeli": - r += `Isr`; + case "female hormone injections": + r += `<strong>Dr:HormXX++</strong> `; break; - case "Italian": - r += `Ita`; + case "male hormone injections": + r += `<strong>Dr:HormXY++</strong> `; break; - case "Ivorian": - r += `IC`; + case "hormone enhancers": + r += `<strong>Dr:Horm+</strong> `; break; - case "Jamaican": - r += `Jam`; + case "hormone blockers": + r += `<strong>Dr:Horm-</strong> `; break; - case "Japanese": - r += `Jpn`; + case "anti-aging cream": + r += `<strong>Dr:Age-</strong> `; break; - case "Jordanian": - r += `Jor`; + case "appetite suppressors": + r += `<strong>Dr:ApSup</strong> `; break; - case "Kazakh": - r += `Kaz`; + case "penis atrophiers": + r += `<strong>Dr:Dick-</strong> `; break; - case "Kenyan": - r += `Ken`; + case "testicle atrophiers": + r += `<strong>Dr:Balls-</strong> `; break; - case "Kittitian": - r += `SKN`; + case "clitoris atrophiers": + r += `<strong>Dr:Clit-</strong> `; break; - case "Korean": - r += `Kor`; + case "labia atrophiers": + r += `<strong>Dr:Labia-</strong> `; break; - case "Kosovan": - r += `Kos`; + case "nipple atrophiers": + r += `<strong>Dr:Nipple-</strong> `; break; - case "Kurdish": - r += `Kur`; + case "lip atrophiers": + r += `<strong>Dr:Lip-</strong> `; break; - case "Kuwaiti": - r += `Kuw`; + case "breast redistributors": + r += `<strong>Dr:Breast-</strong> `; break; - case "Kyrgyz": - r += `Kyr`; + case "butt redistributors": + r += `<strong>Dr:Butt-</strong> `; break; - case "Laotian": - r += `Lao`; + case "sag-B-gone": + r += `<strong>Dr:AntiSag</strong> `; break; - case "Latvian": - r += `Lat`; + case "growth stimulants": + r += `<strong>Dr:groStim</strong> `; break; - case "Lebanese": - r += `Lbn`; - break; - case "Liberian": - r += `Lib`; - break; - case "Libyan": - r += `Lby`; - break; - case "a Liechtensteiner": - r += `Lie`; + } + r += `</span> `; + r += `<span class="lightgreen">`; + if (child.curatives === 2) { + r += `<strong>Cura</strong> `; + } else if (child.curatives === 1) { + r += `<strong>Prev</strong> `; + } + r += `</span> `; + if (child.aphrodisiacs !== 0) { + r += `<span class="lightblue">`; + if (child.aphrodisiacs === 1) { + r += `<strong>Aph</strong> `; + } else if (child.aphrodisiacs === 2) { + r += `<strong>Aph++</strong> `; + } else { + r += `<strong>Anaph</strong> `; + } + r += `</span> `; + } + if (child.addict !== 0) { + r += `<span class="cyan">Add</span> `; + } + r += `<span class="lightsalmon">`; + if (child.hormones > 1) { + r += `<strong>Ho:F+</strong> `; + } else if (child.hormones > 0) { + r += `<strong>Ho:F</strong> `; + } else if (child.hormones < -1) { + r += `<strong>Ho:M+</strong> `; + } else if (child.hormones < 0) { + r += `<strong>Ho:M</strong> `; + } + r += `</span> `; + r += `<span class="mediumseagreen">`; + if ((child.bellyImplant > -1)) { + r += `<strong>Belly Imp</strong> `; + } else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) { + r += `<strong>Barr</strong> `; + } else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `<strong>Prepub</strong> `; + } else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `<strong>Meno</strong> `; + } else if (child.pregWeek < 0) { + r += `<strong>Postpartum</strong> `; + } else if (child.preg === -1) { + r += `<strong>CC</strong> `; + } else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `<strong>Fert+</strong> `; + // } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) { + // r += `<strong>Preg?</strong> `; + } else if ((child.preg >= 36) && (child.broodmother > 0)) { + r += `<strong>Perm preg</strong> `; + } else if (child.pregKnown === 1) { + r += `<strong>${child.pregWeek} wks preg</strong> `; + } + r += `</span> `; + if (child.induce === 1) { + r += `<span class="orange"><strong>Early Labor</strong></span> `; + } + if (child.pubertyXY === 0 && child.balls > 0) { + r += `<strong>Prepub balls</strong> `; + } + if (child.balls > 0 && child.vasectomy === 1) { + r += `<strong>Vasect</strong> `; + } + r += `<span class="springgreen">`; + if (child.inflation === 3) { + r += `<strong>8 ltr ${child.inflationType}</strong> `; + } else if (child.inflation === 2) { + r += `<strong>4 ltr ${child.inflationType}</strong> `; + } else if (child.inflation === 1) { + r += `<strong>2 ltr ${child.inflationType}</strong> `; + } else if (child.bellyFluid > 0) { + r += `<strong>${child.bellyFluid}ccs ${child.inflationType}</strong> `; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longDrugs(child) { + if ((child.drugs !== "no drugs") && (child.drugs !== "none")) { + r += `<span class="tan">On ${child.drugs}.</span> `; + } + r += `<span class="lightgreen">`; + if (child.curatives === 2) { + r += `On curatives. `; + } else if (child.curatives === 1) { + r += `On preventatives. `; + } + r += `</span> `; + r += `<span class="lightblue">`; + if (child.aphrodisiacs > 0) { + r += `On ${child.aphrodisiacs > 1 ? 'extreme': ''} aphrodisiacs. `; + } else if (child.aphrodisiacs === -1) { + r += `On anaphrodisiacs. `; + } + r += `</span> `; + if (child.addict !== 0) { + r += `<span class="cyan">Addict.</span> `; + } + r += `<span class="lightsalmon">`; + if (child.hormones > 1) { + r += `Heavy female hormones. `; + } else if (child.hormones > 0) { + r += `Female hormones. `; + } else if (child.hormones < -1) { + r += `Heavy male hormones. `; + } else if (child.hormones < 0) { + r += `Male hormones. `; + } + r += `</span> `; + r += `<span class="mediumseagreen">`; + if ((child.bellyImplant > -1)) { + r += `Belly Implant. `; + } else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) { + r += `Barren. `; + } else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `Not ovulating yet. `; + } else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `Menopausal. `; + } else if (child.pregWeek < 0) { + r += `Postpartum. `; + } else if (child.preg === -1) { + r += `On contraceptives. `; + } else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) { + r += `Fertile. `; + } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) { + r += `May be pregnant. `; + } else if ((child.preg >= 36) && (child.broodmother > 0)) { + r += `Permanently pregnant. `; + } else if (child.pregKnown === 1) { + if (child.pregType < 2 || child.broodmother > 0) { + r += `${child.pregWeek} weeks pregnant. `; + } else { + r += `${child.pregWeek} weeks pregnant with `; + if (child.pregType >= 40) { + r += `a tremendous brood of offspring. `; + } else if (child.pregType >= 20) { + r += `a brood of offspring. `; + } else if (child.pregType >= 10) { + r += `${child.pregType} babies. `; + } else if (child.pregType === 9) { + r += `nonuplets. `; + } else if (child.pregType === 8) { + r += `octuplets. `; + } else if (child.pregType === 7) { + r += `septuplets. `; + } else if (child.pregType === 6) { + r += `sextuplets. `; + } else if (child.pregType === 5) { + r += `quintuplets. `; + } else if (child.pregType === 4) { + r += `quadruplets. `; + } else if (child.pregType === 3) { + r += `triplets. `; + } else { + r += `twins. `; + } + } + if (child.preg > child.pregData.normalBirth && child.broodmother === 0) { + r += ` (Overdue.)`; + } + } + r += `</span> `; + if (child.induce === 1) { + r += `<span class="orange">Showing signs of early labor.</span> `; + } + if (child.pubertyXY === 0 && child.balls > 0) { + r += `Has not had first ejaculation. `; + } + if (child.balls > 0 && child.vasectomy === 1) { + r += `Vasectomy. `; + } + r += `<span class="springgreen">`; + if (child.inflation === 3) { + r += `Filled with 8 liters of ${child.inflationType}. `; + } else if (child.inflation === 2) { + r += `Filled with 4 liters of ${child.inflationType}. `; + } else if (child.inflation === 1) { + r += `Filled with 2 liters of ${child.inflationType}. `; + } else if (child.bellyFluid > 0) { + r += `Stuffed with ${child.bellyFluid}ccs of ${child.inflationType}. `; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortRace(child) { + switch (child.race) { + case "white": + r += `C`; break; - case "Lithuanian": - r += `Lit`; + case "asian": + r += `A`; break; - case "Luxembourgian": - r += `Lux`; + case "indo-aryan": + r += `I`; break; - case "Macedonian": - r += `Mac`; + case "latina": + r += `L`; break; - case "Malagasy": - r += `Mad`; + case "middle eastern": + r += `ME`; break; - case "Malawian": - r += `Mwi`; + case "black": + r += `B`; break; - case "Malaysian": - r += `Mys`; + case "pacific islander": + r += `PI`; break; - case "Maldivian": - r += `Mdv`; + case "malay": + r += `M`; break; - case "Malian": - r += `Mal`; + case "amerindian": + r += `AI`; break; - case "Maltese": - r += `Mlt`; + case "semitic": + r += `S`; break; - case "Marshallese": - r += `MI`; + case "southern european": + r += `SE`; break; - case "Mauritanian": - r += `Mta`; + case "mixed race": + r += `MR`; break; - case "Mauritian": - r += `Mts`; + default: + r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`; break; - case "Mexican": - r += `Mex`; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longRace(child) { + switch (child.race) { + case "white": + r += `Caucasian. `; break; - case "Micronesian": - r += `FSM`; + case "asian": + r += `Asian. `; break; - case "Moldovan": - r += `Mol`; + case "indo-aryan": + r += `Indo-aryan. `; break; - case "Monégasque": - r += `Mnc`; + case "latina": + r += `Latina. `; break; - case "Mongolian": - r += `Mon`; + case "middle eastern": + r += `Middle Eastern. `; break; - case "Montenegrin": - r += `Mng`; + case "black": + r += `Black. `; break; - case "Moroccan": - r += `Mor`; + case "pacific islander": + r += `Pacific Islander. `; break; - case "Mosotho": - r += `Les`; + case "malay": + r += `Malay. `; break; - case "Motswana": - r += `Bot`; + case "amerindian": + r += `Amerindian. `; break; - case "Mozambican": - r += `Moz`; + case "semitic": + r += `Semitic. `; break; - case "Namibian": - r += `Nam`; + case "southern european": + r += `Southern European. `; break; - case "Nauruan": - r += `Nau`; + case "mixed race": + r += `Mixed race. `; break; - case "Nepalese": - r += `Npl`; + default: + r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `; break; - case "New Caledonian": - r += `NC`; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortNationality(child) { + r += `<span class="tan">`; + switch (child.nationality) { + case "Afghan": + r += `Afg`; break; - case "a New Zealander": - r += `NZ`; + case "Albanian": + r += `Alb`; break; - case "Ni-Vanuatu": - r += `Van`; + case "Algerian": + r += `Alg`; break; - case "Nicaraguan": - r += `Nic`; + case "American": + r += `USA`; break; - case "Nigerian": - r += `Nga`; + case "Andorran": + r += `And`; break; - case "Nigerien": - r += `Ngr`; + case "Angolan": + r += `Ang`; break; - case "Niuean": - r += `Niu`; + case "Antiguan": + r += `AB`; break; - case "Norwegian": - r += `Nor`; + case "Argentinian": + r += `Arg`; break; - case "Omani": - r += `Omn`; + case "Armenian": + r += `Arm`; break; - case "Pakistani": - r += `Pak`; + case "Aruban": + r += `Aru`; break; - case "Palauan": - r += `Plu`; + case "Australian": + r += `Aus`; break; - case "Palestinian": - r += `Pal`; + case "Austrian": + r += `Aut`; break; - case "Panamanian": - r += `Pan`; + case "Azerbaijani": + r += `Aze`; break; - case "Papua New Guinean": - r += `PNG`; + case "Bahamian": + r += `Bah`; break; - case "Paraguayan": - r += `Par`; + case "Bahraini": + r += `Bah`; break; - case "Peruvian": - r += `Per`; + case "Bangladeshi": + r += `Bgd`; break; - case "Polish": - r += `Pol`; + case "Barbadian": + r += `Bar`; break; - case "Portuguese": - r += `Por`; + case "Belarusian": + r += `Ber`; break; - case "Puerto Rican": - r += `PR`; + case "Belgian": + r += `Bel`; break; - case "Qatari": - r += `Qat`; + case "Belizean": + r += `Blz`; break; - case "Romanian": - r += `Rom`; + case "Beninese": + r += `Ben`; break; - case "Russian": - r += `Rus`; + case "Bermudian": + r += `Bmd`; break; - case "Rwandan": - r += `Rwa`; + case "Bhutanese": + r += `Bhu`; break; - case "Sahrawi": - r += `Sah`; + case "Bissau-Guinean": + r += `GB`; break; - case "Saint Lucian": - r += `SL`; + case "Bolivian": + r += `Bol`; break; - case "Salvadoran": - r += `ES`; + case "Bosnian": + r += `Bos`; break; - case "Sammarinese": - r += `SM`; + case "Brazilian": + r += `Bra`; break; - case "Samoan": - r += `Sam`; + case "British": + r += `UK`; break; - case "São Toméan": - r += `STP`; + case "Bruneian": + r += `Bru`; break; - case "Saudi": - r += `Sau`; + case "Bulgarian": + r += `Bul`; break; - case "Scottish": - r += `Sco`; + case "Burkinabé": + r += `BF`; break; - case "Senegalese": - r += `Sen`; + case "Burmese": + r += `Bur`; break; - case "Serbian": - r += `Srb`; + case "Burundian": + r += `Bnd`; break; - case "Seychellois": - r += `Sey`; + case "Cambodian": + r += `Kam`; break; - case "Sierra Leonean": - r += `Sie`; + case "Cameroonian": + r += `Cam`; break; - case "Singaporean": - r += `Sng`; + case "Canadian": + r += `Can`; break; - case "Slovak": - r += `Svk`; + case "Cape Verdean": + r += `CV`; break; - case "Slovene": - r += `Svn`; + case "Catalan": + r += `Cat`; break; - case "a Solomon Islander": - r += `SI`; + case "Central African": + r += `CAR`; break; - case "Somali": - r += `Som`; + case "Chadian": + r += `Cha`; break; - case "South African": - r += `RSA`; + case "Chilean": + r += `Chl`; break; - case "South Sudanese": - r += `SS`; + case "Chinese": + r += `Chi`; break; - case "Spanish": - r += `Spa`; + case "Colombian": + r += `Col`; break; - case "Sri Lankan": - r += `Sri`; + case "Comorian": + r += `Com`; break; - case "Sudanese": - r += `Sud`; + case "Congolese": + r += `RC`; break; - case "Surinamese": - r += `Sur`; + case "a Cook Islander": + r += `CI`; break; - case "Swazi": - r += `Swa`; + case "Costa Rican": + r += `CR`; break; - case "Swedish": - r += `Swe`; - break; - case "Swiss": - r += `Swi`; + case "Croatian": + r += `Cro`; break; - case "Syrian": - r += `Syr`; + case "Cuban": + r += `Cub`; break; - case "Taiwanese": - r += `Tai`; + case "Curaçaoan": + r += `Cur`; break; - case "Tajik": - r += `Taj`; + case "Cypriot": + r += `Cyp`; break; - case "Tanzanian": - r += `Tza`; + case "Czech": + r += `Cze`; break; - case "Thai": - r += `Tha`; + case "Danish": + r += `Den`; break; - case "Tibetan": - r += `Tib`; + case "Djiboutian": + r += `Dji`; break; - case "Togolese": - r += `Tog`; + case "Dominican": + r += `DR`; break; - case "Tongan": - r += `Ton`; + case "Dominiquais": + r += `Dom`; break; - case "Trinidadian": - r += `TT`; + case "Dutch": + r += `Nld`; break; - case "Tunisian": - r += `Tun`; + case "East Timorese": + r += `ET`; break; - case "Turkish": - r += `Tur`; + case "Ecuadorian": + r += `Ecu`; break; - case "Turkmen": - r += `Tkm`; + case "Egyptian": + r += `Egy`; break; - case "Tuvaluan": - r += `Tuv`; + case "Emirati": + r += `UAE`; break; - case "Ugandan": - r += `Uga`; + case "Equatoguinean": + r += `EG`; break; - case "Ukrainian": - r += `Ukr`; + case "Eritrean": + r += `Eri`; break; - case "Uruguayan": - r += `Uru`; + case "Estonian": + r += `Est`; break; - case "Uzbek": - r += `Uzb`; + case "Ethiopian": + r += `Eth`; break; - case "Vatican": - r += `VC`; + case "Fijian": + r += `Fij`; break; - case "Venezuelan": - r += `Ven`; + case "Filipina": + r += `Phl`; break; - case "Vietnamese": - r += `Vnm`; + case "Finnish": + r += `Fin`; break; - case "Vincentian": - r += `SVG`; + case "French": + r += `Fra`; break; - case "Yemeni": - r += `Yem`; + case "French Guianan": + r += `FG`; break; - case "Zairian": - r += `DRC`; + case "French Polynesian": + r += `FP`; break; - case "Zambian": - r += `Zam`; + case "Gabonese": + r += `Gab`; break; - case "Zimbabwean": - if (child.race === "white") { - r += `Rho`; - } else { - r += `Zwe`; - } + case "Gambian": + r += `Gam`; break; - case "Ancient Chinese Revivalist": - r += `Chi Rev`; + case "Georgian": + r += `Geo`; break; - case "Ancient Egyptian Revivalist": - r += `Egy Rev`; + case "German": + r += `Ger`; break; - case "Arabian Revivalist": - r += `Ara Rev`; + case "Ghanan": + r += `Gha`; break; - case "Aztec Revivalist": - r += `Azt Rev`; + case "Greek": + r += `Gre`; break; - case "Edo Revivalist": - r += `Edo Rev`; + case "Greenlandic": + r += `Grn`; break; - case "Roman Revivalist": - r += `Rom Rev`; + case "Grenadian": + r += `Gda`; break; - case "": - case "none": - case "child": - case "Stateless": - r += `None`; + case "Guamanian": + r += `Gua`; break; - default: - r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`; + case "Guatemalan": + r += `Gtm`; break; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longNationality(child) { - r += `<span class="tan">`; - switch (child.nationality) { - case "a Cook Islander": - r += `Cook Islander. `; + case "Guinean": + r += `Gui`; break; - case "a Liechtensteiner": - r += `Liechtensteiner. `; + case "Guyanese": + r += `Guy`; break; - case "a New Zealander": - r += `New Zealander. `; + case "Haitian": + r += `Hai`; break; - case "a Solomon Islander": - r += `Solomon Islander. `; + case "Honduran": + r += `Hon`; break; - case "Zimbabwean": - if (child.race === "white") { - r += `Rhodesian. `; - } else { - r += `${child.nationality}. `; - } + case "Hungarian": + r += `Hun`; break; - case "child": - case "none": - case "": - case "Stateless": - r += `Stateless. `; + case "I-Kiribati": + r += `Kir`; break; - default: - r += `${child.nationality}. `; + case "Icelandic": + r += `Ice`; break; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortSkin(child) { - r += `<span class="pink">`; - switch (child.skin) { - case "pure white": - r += `P. Whi`; + case "Indian": + r += `Ind`; break; - case "extremely fair": - r += `E. Fai`; + case "Indonesian": + r += `Idn`; break; - case "very fair": - r += `V. Fai`; + case "Iranian": + r += `Irn`; break; - case "extremely pale": - r += `E. Pal`; + case "Iraqi": + r += `Irq`; break; - case "very pale": - r += `V. Pal`; + case "Irish": + r += `Irl`; break; - case "light brown": - r += `L. Br`; + case "Israeli": + r += `Isr`; break; - case "dark brown": - r += `D. Br`; + case "Italian": + r += `Ita`; break; - case "light olive": - r += `L. Oli`; + case "Ivorian": + r += `IC`; break; - case "dark olive": - r += `D. Oli`; + case "Jamaican": + r += `Jam`; break; - case "light beige": - r += `L. Bei`; + case "Japanese": + r += `Jpn`; break; - case "dark beige": - r += `D. Bei`; + case "Jordanian": + r += `Jor`; break; - case "tan": - r += `Tan`; + case "Kazakh": + r += `Kaz`; break; - case "bronze": - r += `Bron`; + case "Kenyan": + r += `Ken`; break; - case "ebony": - r += `Ebon`; + case "Kittitian": + r += `SKN`; break; - case "pure black": - r += `P. Bla`; + case "Korean": + r += `Kor`; break; - case "dark": - case "fair": - case "pale": - r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`; + case "Kosovan": + r += `Kos`; break; - default: - r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`; + case "Kurdish": + r += `Kur`; break; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortGenitals(child) { - if (child.dick > 0) { - r += `<span class="pink">`; - if (child.balls === 0) { - r += `Geld`; - } - if ((child.dick > 8) && (child.balls > 8)) { - r += `Junk+++`; - } else if ((child.dick > 5) && (child.balls > 5)) { - r += `Junk++`; - } else if ((child.dick > 4) && (child.balls > 4)) { - r += `Junk+`; - } else if ((child.dick > 3) && (child.balls > 3)) { - r += `Junk`; - } else if (child.dick > 8) { - r += `Dick+++`; - } else if (child.dick > 5) { - r += `Dick++`; - } else if (child.dick > 4) { - r += `Dick+`; - } else if (child.dick > 3) { - r += `Dick`; - } else if (child.balls > 10) { - r += `Balls+++`; - } else if (child.balls > 5) { - r += `Balls++`; - } else if (child.balls > 4) { - r += `Balls+`; - } else if (child.balls > 3) { - r += `Balls`; - } - r += `</span> `; - } - if (child.vagina === 0) { - r += `<span class="lime">VV</span> `; - } else if ((child.pregKnown === 1) && canWalk(child) && (child.clothes === "no clothing" || child.clothes === "body oil") && (child.shoes === "none")) { - r += `<span class="pink">NBP</span> `; - } - if (child.anus === 0) { - r += ` <span class="lime">AV</span> `; - } - r += `<span class="pink">`; - if ((child.vagina > 3) && (child.anus > 3)) { - r += ` V++A++`; - } else if ((child.vagina > 2) && (child.anus > 2)) { - r += ` V+A+`; - } else if (child.vagina > 3) { - r += ` V++`; - } else if (child.vagina > 2) { - r += ` V+`; - } else if (child.anus > 3) { - r += ` A++`; - } else if (child.anus > 2) { - r += ` A+`; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longGenitals(child) { - if (child.dick > 0) { - r += `<span class="pink">`; - if (child.balls === 0) { - r += `Gelded. `; - } - if ((child.dick > 8) && (child.balls > 8)) { - r += `Hyper dick & balls. `; - } else if ((child.dick > 5) && (child.balls > 5)) { - r += `Monster dick & balls. `; - } else if ((child.dick > 4) && (child.balls > 4)) { - r += `Huge dick & balls. `; - } else if ((child.dick > 3) && (child.balls > 3)) { - r += `Big dick & balls. `; - } else if (child.dick > 8) { - r += `Hyper dong. `; - } else if (child.dick > 5) { - r += `Monster dong. `; - } else if (child.dick > 4) { - r += `Huge dick. `; - } else if (child.dick > 3) { - r += `Big dick. `; - } else if (child.balls > 8) { - r += `Hyper balls. `; - } else if (child.balls > 5) { - r += `Monstrous balls. `; - } else if (child.balls > 4) { - r += `Huge balls. `; - } else if (child.balls > 3) { - r += `Big balls. `; - } - r += `</span> `; - } - if (child.vagina === 0) { - r += `<span class="lime">Virgin.</span> `; - } else if ((child.pregKnown === 1) && canWalk(child) && (child.clothes === "no clothing" || child.clothes === "body oil") && (child.shoes === "none")) { - r += `<span class="pink">Naked, barefoot, and pregnant.</span> `; - } - if (child.anus === 0) { - r += `<span class="lime">Anal virgin.</span> `; - } - r += `<span class="pink">`; - if ((child.vagina > 3) && (child.anus > 3)) { - r += `Blown out holes. `; - } else if ((child.vagina > 2) && (child.anus > 2)) { - r += `High mileage. `; - } else if (child.vagina > 3) { - r += `Cavernous pussy. `; - } else if (child.vagina > 2) { - r += `Loose pussy. `; - } else if (child.anus > 3) { - r += `Permagaped anus. `; - } else if (child.anus > 2) { - r += `Gaping anus. `; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortAge(child) { - r += `<span class="pink">`; - if (V.showAgeDetail === 1) { - r += child.actualAge; - } else if (child.actualAge >= 40) { - r += `40s`; - } else if (child.actualAge >= 35) { - r += `Lt30s`; - } else if (child.actualAge >= 30) { - r += `Ea30s`; - } else if (child.actualAge >= 25) { - r += `Lt20s`; - } else if (child.actualAge >= 20) { - r += `Ea20s`; - } else if (child.actualAge >= 18) { - r += child.actualAge; - } - if (child.actualAge !== child.physicalAge) { - r += ` w ${child.physicalAge}y-bdy`; - } - if (child.visualAge !== child.physicalAge) { - r += ` Lks${child.visualAge}`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortFace(child) { - if (child.face < -95) { - r += `<span class="red">Face---${V.summaryStats? `[${child.face}]` : ''}</span> `; - } else if (child.face < -40) { - r += `<span class="red">Face--${V.summaryStats? `[${child.face}]` : ''}</span> `; - } else if (child.face < -10) { - r += `<span class="red">Face-${V.summaryStats? `[${child.face}]` : ''}</span> `; - } else if (child.face <= 10) { - r += `Face${V.summaryStats? `[${child.face}]` : ''}`; - } else if (child.face <= 40) { - r += `<span class="pink">Face+${V.summaryStats? `[${child.face}]` : ''}</span> `; - } else if (child.face <= 95) { - r += `<span class="pink">Face++${V.summaryStats? `[${child.face}]` : ''}</span> `; - } else { - r += `<span class="pink">Face+++${V.summaryStats? `[${child.face}]` : ''}</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortEyes(child) { - if (child.eyes === -2) { - r += `<span class="red">Blind</span> `; - } else if (((child.eyes === -1) && (child.eyewear !== "corrective glasses") && (child.eyewear !== "corrective contacts")) || (child.eyewear === "blurring glasses") || (child.eyewear === "blurring contacts")) { - r += `<span class="yellow">Sight-</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortEars(child) { - if (child.hears === -2) { - r += `<span class="red">Deaf</span> `; - } else if ((child.hears === -1) && (child.earwear !== "hearing aids")) { - r += `<span class="yellow">Hearing-</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortLips(child) { - if (child.lips > 95) { - r += `Facepussy`; - } else if (child.lips > 70) { - r += `Lips+++${V.summaryStats? `[${child.lips}]` : ''}`; - } else if (child.lips > 40) { - r += `Lips++${V.summaryStats? `[${child.lips}]` : ''}`; - } else if (child.lips > 20) { - r += `Lips+${V.summaryStats? `[${child.lips}]` : ''}`; - } else if (child.lips > 10) { - r += `Lips${V.summaryStats? `[${child.lips}]` : ''}`; - } else { - r += `<span class="red">Lips-${V.summaryStats? `[${child.lips}]` : ''}</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortTeeth(child) { - if (child.teeth === "crooked") { - r += `<span class="yellow">Cr Teeth</span> `; - } else if (child.teeth === "gapped") { - r += `<span class="yellow">Gap</span> `; - } else if (child.teeth === "cosmetic braces") { - r += `Cos Braces`; - } else if (child.teeth === "straightening braces") { - r += `Braces`; - } else if (child.teeth === "removable") { - r += `Rem Teeth`; - } else if (child.teeth === "pointy") { - r += `Fangs`; - } else if (child.teeth === "baby") { - r += `Baby`; - } else if (child.teeth === "mixed") { - r += `Mixed`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortMuscles(child) { - if (child.muscles > 95) { - r += `Musc++${V.summaryStats? `[${child.muscles}]`: ''}`; - } else if (child.muscles > 50) { - r += `Musc+${V.summaryStats? `[${child.muscles}]`: ''}`; - } else if (child.muscles > 5) { - r += `Fit${V.summaryStats? `[${child.muscles}]`: ''}`; - } else if (child.muscles > -6) { - r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}`; - } else if (child.muscles > -31) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { - r += `<span class="red">Weak</span>${V.summaryStats? `[${child.muscles}]`: ''}`; - } else { - r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}`; - } - } else if (child.muscles > -96) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { - r += `<span class="red">Weak+</span>${V.summaryStats? `[${child.muscles}]`: ''}`; - } else { - r += `Soft+${V.summaryStats? `[${child.muscles}]`: ''}`; - } - } else { - r += `<span class="red">Weak++</span>${V.summaryStats? `[${child.muscles}]`: ''}`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortLimbs(child) { - if (child.amp !== 0) { - if (child.amp === -1) { - r += `P-Limbs`; - } else if (child.amp === -2) { - r += `Sex P-Limbs`; - } else if (child.amp === -3) { - r += `Beauty P-Limbs`; - } else if (child.amp === -4) { - r += `Combat P-Limbs`; - } else if (child.amp === -5) { - r += `Cyber P-Limbs`; - } else { - r += `Amp`; - } - } - if (!canWalk(child)) { - r += ` Immob `; - } - if (child.heels === 1) { - r += ` Heel `; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortVoice(child) { - if (child.voice === 0) { - r += `<span class="red">Mute</span> `; - } else { - if (child.accent === 3) { - r += `<span class="red">Acc--</span> `; - } else if (child.accent === 2) { - r += `Acc-`; - } else if (child.accent === 4) { - r += `Acc--`; - } else if (child.accent === 1) { - r += `<span class="pink">Acc</span> `; - } - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortTitsAss(child) { - r += `<span class="pink">`; - if ((child.boobs >= 12000) && (child.butt > 9)) { - r += `T&A+++`; - } else if ((child.boobs > 4000) && (child.butt > 8)) { - r += `T&A++`; - } else if ((child.boobs > 2000) && (child.butt > 6)) { - r += `T&A+`; - } else if ((child.boobs > 800) && (child.butt > 4)) { - r += `T&A`; - } else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) { - r += `Girlish`; - } else if (child.boobs >= 12000) { - r += `Boobs+++`; - } else if (child.boobs > 4000) { - r += `Boobs++`; - } else if (child.boobs > 2000) { - r += `Boobs+`; - } else if (child.boobs > 800) { - r += `Boobs`; - } else if (child.butt > 9) { - r += `Ass+++`; - } else if (child.butt > 8) { - r += `Ass++`; - } else if (child.butt > 6) { - r += `Ass+`; - } else if (child.butt > 4) { - r += `Ass`; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortHips(child) { - r += `<span class="red">`; - if (child.hips < -1) { - if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { - r += `Disp+`; - } - } else if (child.hips < 0) { - if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { - r += `Disp+`; - } - } else if (child.hips > 2) { - if (child.butt <= 8) { - r += `Disp-`; - } - } else if (child.hips > 1) { - if (child.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { - r += `Disp-`; - } - } else if (child.hips > 0) { - if (child.butt > 8) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { - r += `Disp+`; - } - } else if (child.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { - r += `Disp-`; - } - } else { - if (child.butt > 6) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { - r += `Disp+`; - } - } else if (child.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { - r += `Disp-`; - } - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortWaist(child) { - if (child.waist > 95) { - r += `<span class="red">Wst---${V.summaryStats? `[${child.waist}]` : ''}</span> `; - } else if (child.waist > 40) { - r += `<span class="red">Wst--${V.summaryStats? `[${child.waist}]`: ''}</span> `; - } else if (child.waist > 10) { - r += `<span class="red">Wst-${V.summaryStats? `[${child.waist}]` : ''}</span> `; - } else if (child.waist >= -10) { - r += `Wst${V.summaryStats? `[${child.waist}]`: ''}`; - } else if (child.waist >= -40) { - r += `<span class="pink">Wst+${V.summaryStats? `[${child.waist}]` : ''}</span> `; - } else if (child.waist >= -95) { - r += `<span class="pink">Wst++${V.summaryStats? `[${child.waist}]` : ''}</span> `; - } else { - r += `<span class="pink">Wst+++${V.summaryStats? `[${child.waist}]`: ''}</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortImplants(child) { - r += `<span class="pink">`; - if ((child.boobsImplant === 0) && (child.buttImplant === 0) && (child.waist >= -95) && (child.lipsImplant === 0) && (child.faceImplant <= 5) && (child.bellyImplant === -1)) { - r += `Natr`; - } else { - r += `Impl`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortLactation(child) { - if (child.lactation === 1) { - r += `Lact`; - } else if (child.lactation === 2) { - r += `Lact++`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortMods(child) { - V.modScorChildStatsChecker.modScore(child); - if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) { - return; - } else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) { - r += `Mods++`; - } else if (V.modScore > 7) { - r += `Mods+`; - } else { - r += `Mods`; - } - if (child.brand !== 0) { - r += `Br`; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longAge(child) { - r += `<span class="pink">`; - if (V.showAgeDetail === 1) { - r += `Age ` + `${child.actualAge}` + `. `; - } else if (child.actualAge >= 40) { - r += `Forties. `; - } else if (child.actualAge >= 35) { - r += `Late thirties. `; - } else if (child.actualAge >= 30) { - r += `Early thirties. `; - } else if (child.actualAge >= 25) { - r += `Late twenties. `; - } else if (child.actualAge >= 20) { - r += `Early twenties. `; - } else if (child.actualAge >= 19) { - r += `Nineteen. `; - } else if (child.actualAge >= 18) { - r += `Eighteen. `; - } else { - r += `Underage. `; - } - /* - ** No NCS, then do the standard, However because of the wrinkes of Incubators, as long as visual age is greater - ** than or equal to physical age, we do the old physical body/Looks for fresh out of the can NCS slaves. - */ - if (((child.geneMods.NCS === 0) || (child.visualAge >= child.physicalAge))) { - if (child.actualAge !== child.physicalAge) { - r += `${child.physicalAge}` + ` year old body. `; - } - if (child.visualAge !== child.physicalAge) { - r += `Looks ` + `${child.visualAge}` + `. `; - } - } else { - /* - ** Now the rub. The use of physical Age for the year old body above, basically conflicts with the changes - ** that NCS introduces, so here to *distinguish* the changes, we use visual age with the 'year old body' - ** and appears, for exampChild release from incubator at age 10, Her summary would show, 'Age 0. 10 - ** year old body.' But if she's given NCS a few weeks after release, while she's still before her first - ** birthday, it'll appear the same. But once her birthday fires, if we ran with the above code it would - ** say: 'Age 1. 11 year old body.' -- this conflicts with the way NCS works though, because she hasn't - ** visually aged, so our change here makes it say 'Age 1. Appears to have a 10 year old body.' - */ - r += `Appears to have a ` + `${child.visualAge}` + ` year old body. `; - } - if (child.geneMods.NCS === 1) { - r += `(<span class="orange">NCS</span>) `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longFace(child) { - if (child.face < -95) { - r += `<span class="red">Very ugly${V.summaryStats? `[${child.face}]`: ''}</span> `; - } else if (child.face < -40) { - r += `<span class="red">Ugly${V.summaryStats? `[${child.face}]`: ''}</span> `; - } else if (child.face < -10) { - r += `<span class="red">Unattractive${V.summaryStats? `[${child.face}]`: ''}</span> `; - } else if (child.face <= 10) { - r += `Average${V.summaryStats? `[${child.face}]`: ''}`; - } else if (child.face <= 40) { - r += `<span class="pink">Attractive${V.summaryStats? `[${child.face}]`: ''}</span> `; - } else if (child.face <= 95) { - r += `<span class="pink">Beautiful${V.summaryStats? `[${child.face}]`: ''}</span> `; - } else { - r += `<span class="pink">Very beautiful${V.summaryStats? `[${child.face}]`: ''}</span> `; - } - r += ` ${child.faceShape} face. `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longEyes(child) { - if (child.eyes <= -2) { - r += `<span class="red">Blind.</span> `; - } else if (((child.eyes === -1) && (child.eyewear !== "corrective glasses") && (child.eyewear !== "corrective contacts")) || (child.eyewear === "blurring glasses") || (child.eyewear === "blurring contacts")) { - r += `<span class="yellow">Nearsighted.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longEars(child) { - if (child.hears <= -2) { - r += `<span class="red">Deaf.</span> `; - } else if ((child.hears === -1) && (child.earwear !== "hearing aids")) { - r += `<span class="yellow">Hard of hearing.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longLips(child) { - if (child.lips > 95) { - r += `Facepussy${V.summaryStats? `[${child.lips}]`: ''}. `; - } else if (child.lips > 70) { - r += `Huge lips${V.summaryStats? `[${child.lips}]`: ''}. `; - } else if (child.lips > 40) { - r += `Big lips${V.summaryStats? `[${child.lips}]`: ''}. `; - } else if (child.lips > 20) { - r += `Pretty lips${V.summaryStats? `[${child.lips}]`: ''}. `; - } else if (child.lips > 10) { - r += `Normal lips${V.summaryStats? `[${child.lips}]`: ''}. `; - } else { - r += `<span class="red">Thin lips${V.summaryStats? `[${child.lips}]`: ''}.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longTeeth(child) { - if (child.teeth === "crooked") { - r += `<span class="yellow">Crooked teeth.</span> `; - } else if (child.teeth === "gapped") { - r += `<span class="yellow">Tooth gap.</span> `; - } else if (child.teeth === "cosmetic braces") { - r += `Cosmetic braces. `; - } else if (child.teeth === "straightening braces") { - r += `Braces. `; - } else if (child.teeth === "removable") { - r += `Removable teeth. `; - } else if (child.teeth === "pointy") { - r += `Sharp fangs. `; - } else if (child.teeth === "baby") { - r += `Baby teeth. `; - } else if (child.teeth === "mixed") { - r += `Mixed teeth. `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longMuscles(child) { - if (child.muscles > 95) { - r += `Hugely muscular${V.summaryStats? `[${child.muscles}]` : ''}. `; - } else if (child.muscles > 50) { - r += `Muscular${V.summaryStats? `[${child.muscles}]`: ''}. `; - } else if (child.muscles > 5) { - r += `Fit${V.summaryStats? `[${child.muscles}]`: ''}. `; - } else if (child.muscles > -6) { - r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}. `; - } else if (child.muscles > -31) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { - r += `<span class="red">Weak${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; - } else { - r += `Weak${V.summaryStats? `[${child.muscles}]`: ''}. `; - } - } else if (child.muscles > -96) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { - r += `<span class="red">Very weak${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; - } else { - r += `Very weak${V.summaryStats? `[${child.muscles}]`: ''}. `; - } - } else { - r += `<span class="red">Frail${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longLimbs(child) { - if (child.amp !== 0) { - if (child.amp === -1) { - r += `Prosthetic limbs. `; - } else if (child.amp === -2) { - r += `Sexy prosthetic limbs. `; - } else if (child.amp === -3) { - r += `Beautiful prosthetic limbs. `; - } else if (child.amp === -4) { - r += `Deadly prosthetic limbs. `; - } else if (child.amp === -5) { - r += `Cyber prosthetic limbs. `; - } else { - r += `Amputee. `; - } - } - if (!canWalk(child)) { - r += `Immobile. `; - } - if (child.heels === 1) { - r += `Heeled. `; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longVoice(child) { - if (child.voice === 0) { - r += `<span class="red">Mute.</span> `; - } else { - if (child.accent === 3) { - r += `<span class="red">Bad accent.</span> `; - } else if (child.accent === 4) { - r += `<span class="red">No language skills.</span> `; - } else if (child.accent === 2) { - r += `Accent. `; - } else if (child.accent === 1) { - r += `<span class="pink">Cute accent.</span> `; - } - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longTitsAss(child) { - r += `<span class="pink">`; - if ((child.boobs >= 12000) && (child.butt > 9)) { - r += `Hyper T&A. `; - } else if ((child.boobs > 4000) && (child.butt > 8)) { - r += `Enormous T&A. `; - } else if ((child.boobs > 2000) && (child.butt > 6)) { - r += `Huge T&A. `; - } else if ((child.boobs > 800) && (child.butt > 4)) { - r += `Big T&A. `; - } else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) { - r += `Girlish figure. `; - } else if (child.boobs >= 12000) { - r += `Immobilizing tits. `; - } else if (child.boobs > 4000) { - r += `Monstrous tits. `; - } else if (child.boobs > 2000) { - r += `Huge tits. `; - } else if (child.boobs > 800) { - r += `Big tits. `; - } else if (child.butt > 9) { - r += `Hyper ass. `; - } else if (child.butt > 8) { - r += `Titanic ass. `; - } else if (child.butt > 6) { - r += `Huge ass. `; - } else if (child.butt > 4) { - r += `Big ass. `; - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longHips(child) { - r += `<span class="red">`; - if (child.hips < -1) { - if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { - r += `Disproportionately big butt. `; - } - } else if (child.hips < 0) { - if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { - r += `Disproportionately big butt. `; - } - } else if (child.hips > 2) { - if (child.butt <= 8) { - r += `Disproportionately small butt. `; - } - } else if (child.hips > 1) { - if (child.butt <= 3 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { - r += `Disproportionately small butt. `; - } - } else if (child.hips > 0) { - if (child.butt > 8) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { - r += `Disproportionately big butt. `; - } - } else if (child.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { - r += `Disproportionately small butt. `; - } - } else { - if (child.butt > 6) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { - r += `Disproportionately big butt. `; - } - } else if (child.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { - r += `Disproportionately small butt. `; - } - } - r += `</span> `; - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longWaist(child) { - if (child.waist > 95) { - r += `<span class="red">Masculine waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } else if (child.waist > 40) { - r += `<span class="red">Ugly waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } else if (child.waist > 10) { - r += `<span class="red">Unattractive waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } else if (child.waist >= -10) { - r += `Average waist${V.summaryStats? `[${child.waist}]`: ''}. `; - } else if (child.waist >= -40) { - r += `<span class="pink">Feminine waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } else if (child.waist >= -95) { - r += `<span class="pink">Hourglass waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } else { - r += `<span class="pink">Absurdly narrow waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longImplants(child) { - r += `<span class="pink">`; - if ((child.boobsImplant !== 0) || (child.buttImplant !== 0) || (child.lipsImplant !== 0) || (child.bellyImplant !== -1)) { - r += `Implants. `; - } else if ((child.faceImplant >= 30) || (child.waist < -95)) { - r += `Surgery enhanced. `; - } else { - r += `All natural. `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longLactation(child) { - if (child.lactation === 1) { - r += `Lactating naturally. `; - } else if (child.lactation === 2) { - r += `Heavy lactation. `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longMods(child) { - V.modScorChildStatsChecker.modScore(child); - if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) { - return; - } else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) { - r += `Extensive body mods. `; - } else if (V.modScore > 7) { - r += `Noticeable body mods. `; - } else { - r += `Light body mods. `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortIntelligence(child) { - const intelligence = child.intelligence + child.intelligenceImplant; - if (child.fetish === "mindbroken") { - return; - } else if (child.intelligenceImplant >= 30) { - if (intelligence >= 130) { - r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 95) { - r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -15) { - r += `I(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; - } else if (intelligence >= -50) { - r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else { - r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } - } else if (child.intelligenceImplant >= 15) { - if (intelligence > 95) { - r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -15) { - r += `I(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; - } else if (intelligence >= -50) { - r += `<span class="orangered">I-(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">I--(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else { - r += `<span class="orangered">I---(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } - } else { - if (intelligence > 95) { - r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">I++${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">I+${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -15) { - r += `I${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; - } else if (intelligence >= -50) { - r += `<span class="orangered">I-${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">I--${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } else { - r += `<span class="orangered">I---${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; - } - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function shortSexSkills(child) { - let SSkills = child.skill.anal + child.skill.oral; - r += `<span class="aquamarine">`; - if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) { - r += `MSS`; - } else { - SSkills += child.skill.vaginal; - SSkills = Math.trunc(SSkills); - if (SSkills > 180) { - r += `S++`; - } else if ((SSkills > 120) && (child.vagina < 0)) { - r += `Sh++`; - } else if (SSkills > 90) { - r += `S+`; - } else if (SSkills > 30) { - r += `S`; - } else { - r += `S-`; - } - if (V.summaryStats) { - r += `[${SSkills}] `; - } - r += " "; - if (child.skill.whoring >= 100) { - r += `W+++`; - } else if (child.skill.whoring > 60) { - r += `W++`; - } else if (child.skill.whoring > 30) { - r += `W+`; - } else if (child.skill.whoring > 10) { - r += `W`; - } - if (child.skill.whoring > 10) { - if (V.summaryStats) { - r += `[${child.skill.whoring}] `; - } - } - r += " "; - if (child.skill.entertainment >= 100) { - r += `E+++`; - } else if (child.skill.entertainment > 60) { - r += `E++`; - } else if (child.skill.entertainment > 30) { - r += `E+`; - } else if (child.skill.entertainment > 10) { - r += `E`; - } - if (child.skill.entertainment > 10) { - if (V.summaryStats) { - r += `[${child.skill.entertainment}] `; + case "Kuwaiti": + r += `Kuw`; + break; + case "Kyrgyz": + r += `Kyr`; + break; + case "Laotian": + r += `Lao`; + break; + case "Latvian": + r += `Lat`; + break; + case "Lebanese": + r += `Lbn`; + break; + case "Liberian": + r += `Lib`; + break; + case "Libyan": + r += `Lby`; + break; + case "a Liechtensteiner": + r += `Lie`; + break; + case "Lithuanian": + r += `Lit`; + break; + case "Luxembourgian": + r += `Lux`; + break; + case "Macedonian": + r += `Mac`; + break; + case "Malagasy": + r += `Mad`; + break; + case "Malawian": + r += `Mwi`; + break; + case "Malaysian": + r += `Mys`; + break; + case "Maldivian": + r += `Mdv`; + break; + case "Malian": + r += `Mal`; + break; + case "Maltese": + r += `Mlt`; + break; + case "Marshallese": + r += `MI`; + break; + case "Mauritanian": + r += `Mta`; + break; + case "Mauritian": + r += `Mts`; + break; + case "Mexican": + r += `Mex`; + break; + case "Micronesian": + r += `FSM`; + break; + case "Moldovan": + r += `Mol`; + break; + case "Monégasque": + r += `Mnc`; + break; + case "Mongolian": + r += `Mon`; + break; + case "Montenegrin": + r += `Mng`; + break; + case "Moroccan": + r += `Mor`; + break; + case "Mosotho": + r += `Les`; + break; + case "Motswana": + r += `Bot`; + break; + case "Mozambican": + r += `Moz`; + break; + case "Namibian": + r += `Nam`; + break; + case "Nauruan": + r += `Nau`; + break; + case "Nepalese": + r += `Npl`; + break; + case "New Caledonian": + r += `NC`; + break; + case "a New Zealander": + r += `NZ`; + break; + case "Ni-Vanuatu": + r += `Van`; + break; + case "Nicaraguan": + r += `Nic`; + break; + case "Nigerian": + r += `Nga`; + break; + case "Nigerien": + r += `Ngr`; + break; + case "Niuean": + r += `Niu`; + break; + case "Norwegian": + r += `Nor`; + break; + case "Omani": + r += `Omn`; + break; + case "Pakistani": + r += `Pak`; + break; + case "Palauan": + r += `Plu`; + break; + case "Palestinian": + r += `Pal`; + break; + case "Panamanian": + r += `Pan`; + break; + case "Papua New Guinean": + r += `PNG`; + break; + case "Paraguayan": + r += `Par`; + break; + case "Peruvian": + r += `Per`; + break; + case "Polish": + r += `Pol`; + break; + case "Portuguese": + r += `Por`; + break; + case "Puerto Rican": + r += `PR`; + break; + case "Qatari": + r += `Qat`; + break; + case "Romanian": + r += `Rom`; + break; + case "Russian": + r += `Rus`; + break; + case "Rwandan": + r += `Rwa`; + break; + case "Sahrawi": + r += `Sah`; + break; + case "Saint Lucian": + r += `SL`; + break; + case "Salvadoran": + r += `ES`; + break; + case "Sammarinese": + r += `SM`; + break; + case "Samoan": + r += `Sam`; + break; + case "São Toméan": + r += `STP`; + break; + case "Saudi": + r += `Sau`; + break; + case "Scottish": + r += `Sco`; + break; + case "Senegalese": + r += `Sen`; + break; + case "Serbian": + r += `Srb`; + break; + case "Seychellois": + r += `Sey`; + break; + case "Sierra Leonean": + r += `Sie`; + break; + case "Singaporean": + r += `Sng`; + break; + case "Slovak": + r += `Svk`; + break; + case "Slovene": + r += `Svn`; + break; + case "a Solomon Islander": + r += `SI`; + break; + case "Somali": + r += `Som`; + break; + case "South African": + r += `RSA`; + break; + case "South Sudanese": + r += `SS`; + break; + case "Spanish": + r += `Spa`; + break; + case "Sri Lankan": + r += `Sri`; + break; + case "Sudanese": + r += `Sud`; + break; + case "Surinamese": + r += `Sur`; + break; + case "Swazi": + r += `Swa`; + break; + case "Swedish": + r += `Swe`; + break; + case "Swiss": + r += `Swi`; + break; + case "Syrian": + r += `Syr`; + break; + case "Taiwanese": + r += `Tai`; + break; + case "Tajik": + r += `Taj`; + break; + case "Tanzanian": + r += `Tza`; + break; + case "Thai": + r += `Tha`; + break; + case "Tibetan": + r += `Tib`; + break; + case "Togolese": + r += `Tog`; + break; + case "Tongan": + r += `Ton`; + break; + case "Trinidadian": + r += `TT`; + break; + case "Tunisian": + r += `Tun`; + break; + case "Turkish": + r += `Tur`; + break; + case "Turkmen": + r += `Tkm`; + break; + case "Tuvaluan": + r += `Tuv`; + break; + case "Ugandan": + r += `Uga`; + break; + case "Ukrainian": + r += `Ukr`; + break; + case "Uruguayan": + r += `Uru`; + break; + case "Uzbek": + r += `Uzb`; + break; + case "Vatican": + r += `VC`; + break; + case "Venezuelan": + r += `Ven`; + break; + case "Vietnamese": + r += `Vnm`; + break; + case "Vincentian": + r += `SVG`; + break; + case "Yemeni": + r += `Yem`; + break; + case "Zairian": + r += `DRC`; + break; + case "Zambian": + r += `Zam`; + break; + case "Zimbabwean": + if (child.race === "white") { + r += `Rho`; + } else { + r += `Zwe`; } - } + break; + case "Ancient Chinese Revivalist": + r += `Chi Rev`; + break; + case "Ancient Egyptian Revivalist": + r += `Egy Rev`; + break; + case "Arabian Revivalist": + r += `Ara Rev`; + break; + case "Aztec Revivalist": + r += `Azt Rev`; + break; + case "Edo Revivalist": + r += `Edo Rev`; + break; + case "Roman Revivalist": + r += `Rom Rev`; + break; + case "": + case "none": + case "child": + case "Stateless": + r += `None`; + break; + default: + r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`; + break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortPrestige(child) { - if (child.prestige > 0) { - r += `<span class="green">`; - if (child.prestige > 2) { - r += `Prest++`; - } else if (child.prestige === 2) { - r += `Prest+`; - } else if (child.prestige === 1) { - r += `Prest`; - } - r += `</span> `; + function longNationality(child) { + r += `<span class="tan">`; + switch (child.nationality) { + case "a Cook Islander": + r += `Cook Islander. `; + break; + case "a Liechtensteiner": + r += `Liechtensteiner. `; + break; + case "a New Zealander": + r += `New Zealander. `; + break; + case "a Solomon Islander": + r += `Solomon Islander. `; + break; + case "Zimbabwean": + if (child.race === "white") { + r += `Rhodesian. `; + } else { + r += `${child.nationality}. `; + } + break; + case "child": + case "none": + case "": + case "Stateless": + r += `Stateless. `; + break; + default: + r += `${child.nationality}. `; + break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortPornPrestige(child) { - if (child.pornPrestige > 0) { - r += `<span class="green">`; - if (child.pornPrestige > 2) { - r += `PPrest++`; - } else if (child.pornPrestige === 2) { - r += `PPrest+`; - } else if (child.pornPrestige === 1) { - r += `PPrest`; - } - r += `</span> `; + function shortSkin(child) { + r += `<span class="pink">`; + switch (child.skin) { + case "pure white": + r += `P. Whi`; + break; + case "extremely fair": + r += `E. Fai`; + break; + case "very fair": + r += `V. Fai`; + break; + case "extremely pale": + r += `E. Pal`; + break; + case "very pale": + r += `V. Pal`; + break; + case "light brown": + r += `L. Br`; + break; + case "dark brown": + r += `D. Br`; + break; + case "light olive": + r += `L. Oli`; + break; + case "dark olive": + r += `D. Oli`; + break; + case "light beige": + r += `L. Bei`; + break; + case "dark beige": + r += `D. Bei`; + break; + case "tan": + r += `Tan`; + break; + case "bronze": + r += `Bron`; + break; + case "ebony": + r += `Ebon`; + break; + case "pure black": + r += `P. Bla`; + break; + case "dark": + case "fair": + case "pale": + r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`; + break; + default: + r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`; + break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function longIntelligence(child) { - const intelligence = child.intelligence + child.intelligenceImplant; - if (child.fetish === "mindbroken") { - return; - } else if (child.intelligenceImplant >= 30) { - if (intelligence >= 130) { - r += `<span class="deepskyblue">Genius${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 95) { - r += `<span class="deepskyblue">Brilliant, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } - } else if (child.intelligenceImplant >= 15) { - if (intelligence > 95) { - r += `<span class="deepskyblue">Brilliant, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + function shortGenitals(child) { + if (child.dick > 0) { + r += `<span class="pink">`; + if (child.balls === 0) { + r += `Geld`; } - } else { - if (intelligence > 95) { - r += `<span class="deepskyblue">Brilliant${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 50) { - r += `<span class="deepskyblue">Very smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence > 15) { - r += `<span class="deepskyblue">Smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -15) { - r += `Average intelligence${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; - } else if (intelligence >= -50) { - r += `<span class="orangered">Slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else if (intelligence >= -95) { - r += `<span class="orangered">Very slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; - } else { - r += `<span class="orangered">Moronic${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + if ((child.dick > 8) && (child.balls > 8)) { + r += `Junk+++`; + } else if ((child.dick > 5) && (child.balls > 5)) { + r += `Junk++`; + } else if ((child.dick > 4) && (child.balls > 4)) { + r += `Junk+`; + } else if ((child.dick > 3) && (child.balls > 3)) { + r += `Junk`; + } else if (child.dick > 8) { + r += `Dick+++`; + } else if (child.dick > 5) { + r += `Dick++`; + } else if (child.dick > 4) { + r += `Dick+`; + } else if (child.dick > 3) { + r += `Dick`; + } else if (child.balls > 10) { + r += `Balls+++`; + } else if (child.balls > 5) { + r += `Balls++`; + } else if (child.balls > 4) { + r += `Balls+`; + } else if (child.balls > 3) { + r += `Balls`; } + r += `</span> `; } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longSexSkills(child) { - let SSkills = (child.skill.anal + child.skill.oral); - r += `<span class="aquamarine">`; - if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) { - r += `Masterful Child. `; - } else { - SSkills += child.skill.vaginal; - if (SSkills > 180) { - r += `Sex master${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; - } else if ((SSkills > 120) && (child.vagina < 0)) { - r += `Masterful shemale${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; - } else if (SSkills > 90) { - r += `Sexual expert${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; - } else if (SSkills > 30) { - r += `Sexually skilled${V.summaryStats? `[${Math.trunc(SSkills)}]` : ''}. `; - } else { - r += `Sexually unskilled${V.summaryStats? `[${Math.trunc(SSkills)}]` : ''}. `; - } - r += " "; - if (child.skill.whoring >= 100) { - r += `Masterful whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; - } else if (child.skill.whoring >= 60) { - r += `Expert whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; - } else if (child.skill.whoring >= 30) { - r += `Skilled whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; - } else if (child.skill.whoring >= 10) { - r += `Basic whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; - } - r += " "; - if (child.skill.entertainment >= 100) { - r += `Masterful entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; - } else if (child.skill.entertainment >= 60) { - r += `Expert entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; - } else if (child.skill.entertainment >= 30) { - r += `Skilled entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; - } else if (child.skill.entertainment >= 10) { - r += `Basic entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; - } - r += " "; + if (child.vagina === 0) { + r += `<span class="lime">VV</span> `; + } else if ((child.pregKnown === 1) && canWalk(child) && (child.clothes === "no clothing" || child.clothes === "body oil") && (child.shoes === "none")) { + r += `<span class="pink">NBP</span> `; + } + if (child.anus === 0) { + r += ` <span class="lime">AV</span> `; + } + r += `<span class="pink">`; + if ((child.vagina > 3) && (child.anus > 3)) { + r += ` V++A++`; + } else if ((child.vagina > 2) && (child.anus > 2)) { + r += ` V+A+`; + } else if (child.vagina > 3) { + r += ` V++`; + } else if (child.vagina > 2) { + r += ` V+`; + } else if (child.anus > 3) { + r += ` A++`; + } else if (child.anus > 2) { + r += ` A+`; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function longPrestige(child) { - if (child.prestige > 0) { - r += `<span class="green">`; - if (child.prestige > 2) { - r += `Extremely prestigious. `; - } else if (child.prestige === 2) { - r += `Very prestigious. `; - } else if (child.prestige === 1) { - r += `Prestigious. `; + function longGenitals(child) { + if (child.dick > 0) { + r += `<span class="pink">`; + if (child.balls === 0) { + r += `Gelded. `; } - r += `</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longPornPrestige(child) { - if (child.pornPrestige > 0) { - r += `<span class="green">`; - if (child.pornPrestige > 2) { - r += `Porn star. `; - } else if (child.pornPrestige === 2) { - r += `Porn slut. `; - } else if (child.pornPrestige === 1) { - r += `Porn amateur. `; + if ((child.dick > 8) && (child.balls > 8)) { + r += `Hyper dick & balls. `; + } else if ((child.dick > 5) && (child.balls > 5)) { + r += `Monster dick & balls. `; + } else if ((child.dick > 4) && (child.balls > 4)) { + r += `Huge dick & balls. `; + } else if ((child.dick > 3) && (child.balls > 3)) { + r += `Big dick & balls. `; + } else if (child.dick > 8) { + r += `Hyper dong. `; + } else if (child.dick > 5) { + r += `Monster dong. `; + } else if (child.dick > 4) { + r += `Huge dick. `; + } else if (child.dick > 3) { + r += `Big dick. `; + } else if (child.balls > 8) { + r += `Hyper balls. `; + } else if (child.balls > 5) { + r += `Monstrous balls. `; + } else if (child.balls > 4) { + r += `Huge balls. `; + } else if (child.balls > 3) { + r += `Big balls. `; } r += `</span> `; } + if (child.vagina === 0) { + r += `<span class="lime">Virgin.</span> `; + } else if ((child.pregKnown === 1) && canWalk(child) && (child.clothes === "no clothing" || child.clothes === "body oil") && (child.shoes === "none")) { + r += `<span class="pink">Naked, barefoot, and pregnant.</span> `; + } + if (child.anus === 0) { + r += `<span class="lime">Anal virgin.</span> `; + } + r += `<span class="pink">`; + if ((child.vagina > 3) && (child.anus > 3)) { + r += `Blown out holes. `; + } else if ((child.vagina > 2) && (child.anus > 2)) { + r += `High mileage. `; + } else if (child.vagina > 3) { + r += `Cavernous pussy. `; + } else if (child.vagina > 2) { + r += `Loose pussy. `; + } else if (child.anus > 3) { + r += `Permagaped anus. `; + } else if (child.anus > 2) { + r += `Gaping anus. `; + } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortFetish(child) { - r += `<span class="lightcoral">`; - switch (child.fetish) { - case "submissive": - if (child.fetishStrength > 95) { - r += `Sub++`; - } else if (child.fetishStrength > 60) { - r += `Sub+`; - } else { - r += `Sub`; - } - break; - case "cumslut": - if (child.fetishStrength > 95) { - r += `Oral++`; - } else if (child.fetishStrength > 60) { - r += `Oral+`; - } else { - r += `Oral`; - } - break; - case "humiliation": - if (child.fetishStrength > 95) { - r += `Humil++`; - } else if (child.fetishStrength > 60) { - r += `Humil+`; - } else { - r += `Humil`; - } - break; - case "buttslut": - if (child.fetishStrength > 95) { - r += `Anal++`; - } else if (child.fetishStrength > 60) { - r += `Anal+`; - } else { - r += `Anal`; - } - break; - case "boobs": - if (child.fetishStrength > 95) { - r += `Boobs++`; - } else if (child.fetishStrength > 60) { - r += `Boobs+`; - } else { - r += `Boobs`; - } - break; - case "sadist": - if (child.fetishStrength > 95) { - r += `Sadist++`; - } else if (child.fetishStrength > 60) { - r += `Sadist+`; - } else { - r += `Sadist`; - } - break; - case "masochist": - if (child.fetishStrength > 95) { - r += `Pain++`; - } else if (child.fetishStrength > 60) { - r += `Pain+`; - } else { - r += `Pain`; - } - break; - case "dom": - if (child.fetishStrength > 95) { - r += `Dom++`; - } else if (child.fetishStrength > 60) { - r += `Dom+`; - } else { - r += `Dom`; - } - break; - case "pregnancy": - if (child.fetishStrength > 95) { - r += `Preg++`; - } else if (child.fetishStrength > 60) { - r += `Preg+`; - } else { - r += `Preg`; - } - break; - default: - r += `Vanilla`; - break; + function shortAge(child) { + r += `<span class="pink">`; + if (V.showAgeDetail === 1) { + r += child.actualAge; + } else if (child.actualAge >= 40) { + r += `40s`; + } else if (child.actualAge >= 35) { + r += `Lt30s`; + } else if (child.actualAge >= 30) { + r += `Ea30s`; + } else if (child.actualAge >= 25) { + r += `Lt20s`; + } else if (child.actualAge >= 20) { + r += `Ea20s`; + } else if (child.actualAge >= 18) { + r += child.actualAge; } - if (V.summaryStats) { - r += `[${child.fetishStrength}]`; + if (child.actualAge !== child.physicalAge) { + r += ` w ${child.physicalAge}y-bdy`; + } + if (child.visualAge !== child.physicalAge) { + r += ` Lks${child.visualAge}`; } - r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortAttraction(child) { - if (child.attrXY <= 5) { - r += `<span class="red">XY---${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } else if (child.attrXY <= 15) { - r += `<span class="red">XY--${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } else if (child.attrXY <= 35) { - r += `<span class="red">XY-${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } else if (child.attrXY <= 65) { - r += `XY${V.summaryStats? `[${child.attrXY}]`: ''}`; - } else if (child.attrXY <= 85) { - r += `<span class="green">XY+${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } else if (child.attrXY <= 95) { - r += `<span class="green">XY++${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } else if (child.attrXX > 95) { - if (child.energy <= 95) { - r += `<span class="green">Omni!</span> `; - } else { - r += `<span class="green">Omni+Nympho!!</span> `; - } - } else { - r += `<span class="green">XY+++${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; - } - if (child.attrXX <= 5) { - r += `<span class="red">XX---${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } else if (child.attrXX <= 15) { - r += `<span class="red">XX--${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } else if (child.attrXX <= 35) { - r += `<span class="red">XX-${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } else if (child.attrXX <= 65) { - r += `XX${V.summaryStats? `[${child.attrXX}]`: ''}`; - } else if (child.attrXX <= 85) { - r += `<span class="green">XX+${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } else if (child.attrXX <= 95) { - r += `<span class="green">XX++${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } else if (child.attrXY <= 95) { - r += `<span class="green">XX+++${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; - } - if (child.energy > 95) { - if ((child.attrXY <= 95) || (child.attrXX <= 95)) { - r += `<span class="green">Nympho!</span> `; - } - } else if (child.energy > 80) { - r += `<span class="green">SD++${V.summaryStats? `[${child.energy}]`: ''}</span> `; - } else if (child.energy > 60) { - r += `<span class="green">SD+${V.summaryStats? `[${child.energy}]`: ''}</span> `; - } else if (child.energy > 40) { - r += `<span class="yellow">SD${V.summaryStats? `[${child.energy}]`: ''}</span> `; - } else if (child.energy > 20) { - r += `<span class="red">SD-${V.summaryStats? `[${child.energy}]`: ''}</span> `; + function shortFace(child) { + if (child.face < -95) { + r += `<span class="red">Face---${V.summaryStats? `[${child.face}]` : ''}</span> `; + } else if (child.face < -40) { + r += `<span class="red">Face--${V.summaryStats? `[${child.face}]` : ''}</span> `; + } else if (child.face < -10) { + r += `<span class="red">Face-${V.summaryStats? `[${child.face}]` : ''}</span> `; + } else if (child.face <= 10) { + r += `Face${V.summaryStats? `[${child.face}]` : ''}`; + } else if (child.face <= 40) { + r += `<span class="pink">Face+${V.summaryStats? `[${child.face}]` : ''}</span> `; + } else if (child.face <= 95) { + r += `<span class="pink">Face++${V.summaryStats? `[${child.face}]` : ''}</span> `; } else { - r += `<span class="red">SD--${V.summaryStats? `[${child.energy}]`: ''}</span> `; + r += `<span class="pink">Face+++${V.summaryStats? `[${child.face}]` : ''}</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function shortSmartFetish(child) { - if (child.fetishKnown === 1) { - if (child.clitSetting === "off") { - r += `SP-`; - } else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) { - r += `SP:sub`; - } else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) { - r += `SP:oral`; - } else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) { - r += `SP:humil`; - } else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) { - r += `SP:anal`; - } else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) { - r += `SP:boobs`; - } else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) { - r += `SP:sade`; - } else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) { - r += `SP:pain`; - } else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) { - r += `SP:dom`; - } else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) { - r += `SP:preg`; - } else if (((child.fetish !== "none") && (child.clitSetting === "vanilla"))) { - r += `SP:vanilla`; - } else if ((child.energy <= 95) && (child.clitSetting === "all")) { - r += `SP:all`; - } else if ((child.energy > 5) && (child.clitSetting === "none")) { - r += `SP:none`; - } else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) { - r += `SP:monitoring`; - } - } else { - switch (child.clitSetting) { - case "off": - r += `SP-`; - break; - case "submissive": - r += `SP:sub`; - break; - case "lesbian": - r += `SP:les`; - break; - case "oral": - r += `SP:oral`; - break; - case "humiliation": - r += `SP:humil`; - break; - case "anal": - r += `SP:anal`; - break; - case "boobs": - r += `SP:boobs`; - break; - case "sadist": - r += `SP:sade`; - break; - case "masochist": - r += `SP:pain`; - break; - case "dom": - r += `SP:dom`; - break; - case "pregnancy": - r += `SP:pregnancy`; - break; - case "vanilla": - r += `SP:vanilla`; - break; - case "all": - r += `SP:all`; - break; - case "none": - r += `SP:none`; - break; - } + function shortEyes(child) { + if (child.eyes === -2) { + r += `<span class="red">Blind</span> `; + } else if (((child.eyes === -1) && (child.eyewear !== "corrective glasses") && (child.eyewear !== "corrective contacts")) || (child.eyewear === "blurring glasses") || (child.eyewear === "blurring contacts")) { + r += `<span class="yellow">Sight-</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function shortSmartAttraction(child) { - if (child.attrKnown === 1) { - if (child.clitSetting === "women") { - if (child.attrXX < 95) { - r += `SP:women`; - } else { - r += `SP:monitoring`; - } - } else if (child.clitSetting === "men") { - if (child.attrXY < 95) { - r += `SP:men`; - } else { - r += `SP:monitoring`; - } - } else if (child.clitSetting === "anti-women") { - if (child.attrXX > 0) { - r += `SP:anti-women`; - } else { - r += `SP:monitoring`; - } - } else if (child.clitSetting === "anti-men") { - if (child.attrXY > 0) { - r += `SP:anti-men`; - } else { - r += `SP:monitoring`; - } - } + function shortEars(child) { + if (child.hears === -2) { + r += `<span class="red">Deaf</span> `; + } else if ((child.hears === -1) && (child.earwear !== "hearing aids")) { + r += `<span class="yellow">Hearing-</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortLips(child) { + if (child.lips > 95) { + r += `Facepussy`; + } else if (child.lips > 70) { + r += `Lips+++${V.summaryStats? `[${child.lips}]` : ''}`; + } else if (child.lips > 40) { + r += `Lips++${V.summaryStats? `[${child.lips}]` : ''}`; + } else if (child.lips > 20) { + r += `Lips+${V.summaryStats? `[${child.lips}]` : ''}`; + } else if (child.lips > 10) { + r += `Lips${V.summaryStats? `[${child.lips}]` : ''}`; } else { - if (child.clitSetting === "women") { - r += `SP:women`; - } else if (child.clitSetting === "men") { - r += `SP:men`; - } else if (child.clitSetting === "anti-women") { - r += `SP:anti-women`; - } else if (child.clitSetting === "anti-men") { - r += `SP:anti-men`; - } + r += `<span class="red">Lips-${V.summaryStats? `[${child.lips}]` : ''}</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function shortBehaviorFlaw(child) { - r += `<span class="red">`; - switch (child.behavioralFlaw) { - case "arrogant": - r += `Arrog`; - break; - case "bitchy": - r += `Bitchy`; - break; - case "odd": - r += `Odd`; - break; - case "hates men": - r += `Men-`; - break; - case "hates women": - r += `Women-`; - break; - case "gluttonous": - r += `Glut`; - break; - case "anorexic": - r += `Ano`; - break; - case "devout": - r += `Dev`; - break; - case "liberated": - r += `Lib`; - break; - default: - child.behavioralFlaw = "none"; - break; + function shortTeeth(child) { + if (child.teeth === "crooked") { + r += `<span class="yellow">Cr Teeth</span> `; + } else if (child.teeth === "gapped") { + r += `<span class="yellow">Gap</span> `; + } else if (child.teeth === "cosmetic braces") { + r += `Cos Braces`; + } else if (child.teeth === "straightening braces") { + r += `Braces`; + } else if (child.teeth === "removable") { + r += `Rem Teeth`; + } else if (child.teeth === "pointy") { + r += `Fangs`; + } else if (child.teeth === "baby") { + r += `Baby`; + } else if (child.teeth === "mixed") { + r += `Mixed`; } - r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortSexFlaw(child) { - switch (child.sexualFlaw) { - case "hates oral": - r += `<span class="red">Oral-</span> `; - break; - case "hates anal": - r += `<span class="red">Anal-</span> `; - break; - case "hates penetration": - r += `<span class="red">Fuck-</span> `; - break; - case "shamefast": - r += `<span class="red">Shame</span> `; - break; - case "idealistic": - r += `<span class="red">Ideal</span> `; - break; - case "repressed": - r += `<span class="red">Repre</span> `; - break; - case "apathetic": - r += `<span class="red">Apath</span> `; - break; - case "crude": - r += `<span class="red">Crude</span> `; - break; - case "judgemental": - r += `<span class="red">Judge</span> `; - break; - case "cum addict": - r += `<span class="yellow">CumAdd</span> `; - break; - case "anal addict": - r += `<span class="yellow">AnalAdd</span> `; - break; - case "attention whore": - r += `<span class="yellow">Attention</span> `; - break; - case "breast growth": - r += `<span class="yellow">BoobObsess</span> `; - break; - case "abusive": - r += `<span class="yellow">Abusive</span> `; - break; - case "malicious": - r += `<span class="yellow">Malice</span> `; - break; - case "self hating": - r += `<span class="yellow">SelfHatr</span> `; - break; - case "neglectful": - r += `<span class="yellow">SelfNeglect</span> `; - break; - case "breeder": - r += `<span class="yellow">BreedObsess</span> `; - break; - default: - child.sexualFlaw = "none"; - break; + function shortMuscles(child) { + if (child.muscles > 95) { + r += `Musc++${V.summaryStats? `[${child.muscles}]`: ''}`; + } else if (child.muscles > 50) { + r += `Musc+${V.summaryStats? `[${child.muscles}]`: ''}`; + } else if (child.muscles > 5) { + r += `Fit${V.summaryStats? `[${child.muscles}]`: ''}`; + } else if (child.muscles > -6) { + r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}`; + } else if (child.muscles > -31) { + if (V.arcologies[0].FSPhysicalIdealist === "unset") { + r += `<span class="red">Weak</span>${V.summaryStats? `[${child.muscles}]`: ''}`; + } else { + r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}`; + } + } else if (child.muscles > -96) { + if (V.arcologies[0].FSPhysicalIdealist === "unset") { + r += `<span class="red">Weak+</span>${V.summaryStats? `[${child.muscles}]`: ''}`; + } else { + r += `Soft+${V.summaryStats? `[${child.muscles}]`: ''}`; + } + } else { + r += `<span class="red">Weak++</span>${V.summaryStats? `[${child.muscles}]`: ''}`; } } /** * @param {App.Entity.SlaveState} child */ - function shortBehaviorQuirk(child) { - r += `<span class="green">`; - switch (child.behavioralQuirk) { - case "confident": - r += `Confid`; - break; - case "cutting": - r += `Cutting`; - break; - case "funny": - r += `Funny`; - break; - case "fitness": - r += `Fit`; - break; - case "adores women": - r += `Women+`; - break; - case "adores men": - r += `Men+`; - break; - case "insecure": - r += `Insec`; - break; - case "sinful": - r += `Sinf`; - break; - case "advocate": - r += `Advoc`; - break; - default: - child.behavioralQuirk = "none"; - break; + function shortLimbs(child) { + if (child.amp !== 0) { + if (child.amp === -1) { + r += `P-Limbs`; + } else if (child.amp === -2) { + r += `Sex P-Limbs`; + } else if (child.amp === -3) { + r += `Beauty P-Limbs`; + } else if (child.amp === -4) { + r += `Combat P-Limbs`; + } else if (child.amp === -5) { + r += `Cyber P-Limbs`; + } else { + r += `Amp`; + } + } + if (!canWalk(child)) { + r += ` Immob `; + } + if (child.heels === 1) { + r += ` Heel `; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortSexQuirk(child) { - switch (child.sexualQuirk) { - case "gagfuck queen": - r += `Gagfuck`; - break; - case "painal queen": - r += `Painal`; - break; - case "strugglefuck queen": - r += `Struggle`; - break; - case "tease": - r += `Tease`; - break; - case "romantic": - r += `Romantic`; - break; - case "perverted": - r += `Perverted`; - break; - case "caring": - r += `Caring`; - break; - case "unflinching": - r += `Unflinch`; - break; - case "size queen": - r += `SizeQ`; - break; - default: - child.sexualQuirk = "none"; - break; + function shortVoice(child) { + if (child.voice === 0) { + r += `<span class="red">Mute</span> `; + } else { + if (child.accent === 3) { + r += `<span class="red">Acc--</span> `; + } else if (child.accent === 2) { + r += `Acc-`; + } else if (child.accent === 4) { + r += `Acc--`; + } else if (child.accent === 1) { + r += `<span class="pink">Acc</span> `; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortTitsAss(child) { + r += `<span class="pink">`; + if ((child.boobs >= 12000) && (child.butt > 9)) { + r += `T&A+++`; + } else if ((child.boobs > 4000) && (child.butt > 8)) { + r += `T&A++`; + } else if ((child.boobs > 2000) && (child.butt > 6)) { + r += `T&A+`; + } else if ((child.boobs > 800) && (child.butt > 4)) { + r += `T&A`; + } else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) { + r += `Girlish`; + } else if (child.boobs >= 12000) { + r += `Boobs+++`; + } else if (child.boobs > 4000) { + r += `Boobs++`; + } else if (child.boobs > 2000) { + r += `Boobs+`; + } else if (child.boobs > 800) { + r += `Boobs`; + } else if (child.butt > 9) { + r += `Ass+++`; + } else if (child.butt > 8) { + r += `Ass++`; + } else if (child.butt > 6) { + r += `Ass+`; + } else if (child.butt > 4) { + r += `Ass`; } r += `</span> `; } @@ -5324,93 +4660,40 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function longFetish(child) { - r += `<span class="lightcoral">`; - switch (child.fetish) { - case "submissive": - if (child.fetishStrength > 95) { - r += `Complete submissive${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Submissive${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Submissive tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "cumslut": - if (child.fetishStrength > 95) { - r += `Cumslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Oral fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Prefers oral${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "humiliation": - if (child.fetishStrength > 95) { - r += `Humiliation slut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Exhibitionist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Interest in humiliation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "buttslut": - if (child.fetishStrength > 95) { - r += `Buttslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Anal fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Prefers anal${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "boobs": - if (child.fetishStrength > 95) { - r += `Boobslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Breast fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Loves boobs${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "sadist": - if (child.fetishStrength > 95) { - r += `Complete sadist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Sadist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Sadistic tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "masochist": - if (child.fetishStrength > 95) { - r += `Complete masochist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Masochist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Masochistic tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "dom": - if (child.fetishStrength > 95) { - r += `Complete dom${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Dominant${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Dominant tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } - break; - case "pregnancy": - if (child.fetishStrength > 95) { - r += `Pregnancy fetish${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else if (child.fetishStrength > 60) { - r += `Pregnancy kink${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - } else { - r += `Interest in impregnation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + function shortHips(child) { + r += `<span class="red">`; + if (child.hips < -1) { + if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + r += `Disp+`; + } + } else if (child.hips < 0) { + if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + r += `Disp+`; + } + } else if (child.hips > 2) { + if (child.butt <= 8) { + r += `Disp-`; + } + } else if (child.hips > 1) { + if (child.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + r += `Disp-`; + } + } else if (child.hips > 0) { + if (child.butt > 8) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + r += `Disp+`; } - break; - default: - r += `Sexually vanilla${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; - break; + } else if (child.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + r += `Disp-`; + } + } else { + if (child.butt > 6) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + r += `Disp+`; + } + } else if (child.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + r += `Disp-`; + } } r += `</span> `; } @@ -5418,337 +4701,257 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function longAttraction(child) { - if (child.attrXY <= 5) { - r += `<span class="red">Disgusted by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; - } else if (child.attrXY <= 15) { - r += `<span class="red">Turned off by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; - } else if (child.attrXY <= 35) { - r += `<span class="red">Not attracted to men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; - } else if (child.attrXY <= 65) { - r += `Indifferent to men${V.summaryStats? `[${child.attrXY}]` : ''}, `; - } else if (child.attrXY <= 85) { - r += `<span class="green">Attracted to men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; - } else if (child.attrXY <= 95) { - r += `<span class="green">Aroused by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; - } else if (child.attrXX > 95) { - if (child.energy <= 95) { - r += `<span class="green">Omnisexual!</span> `; - } else { - r += `<span class="green">Omnisexual nymphomaniac!</span> `; - } + function shortWaist(child) { + if (child.waist > 95) { + r += `<span class="red">Wst---${V.summaryStats? `[${child.waist}]` : ''}</span> `; + } else if (child.waist > 40) { + r += `<span class="red">Wst--${V.summaryStats? `[${child.waist}]`: ''}</span> `; + } else if (child.waist > 10) { + r += `<span class="red">Wst-${V.summaryStats? `[${child.waist}]` : ''}</span> `; + } else if (child.waist >= -10) { + r += `Wst${V.summaryStats? `[${child.waist}]`: ''}`; + } else if (child.waist >= -40) { + r += `<span class="pink">Wst+${V.summaryStats? `[${child.waist}]` : ''}</span> `; + } else if (child.waist >= -95) { + r += `<span class="pink">Wst++${V.summaryStats? `[${child.waist}]` : ''}</span> `; } else { - r += `<span class="green">Passionate about men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + r += `<span class="pink">Wst+++${V.summaryStats? `[${child.waist}]`: ''}</span> `; } - if (child.attrXX <= 5) { - r += `<span class="red">disgusted by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; - } else if (child.attrXX <= 15) { - r += `<span class="red">turned off by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; - } else if (child.attrXX <= 35) { - r += `<span class="red">not attracted to women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; - } else if (child.attrXX <= 65) { - r += `indifferent to women${V.summaryStats? `[${child.attrXX}]` : ''}. `; - } else if (child.attrXX <= 85) { - r += `<span class="green">attracted to women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; - } else if (child.attrXX <= 95) { - r += `<span class="green">aroused by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; - } else if (child.attrXY <= 95) { - r += `<span class="green">passionate about women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortImplants(child) { + r += `<span class="pink">`; + if ((child.boobsImplant === 0) && (child.buttImplant === 0) && (child.waist >= -95) && (child.lipsImplant === 0) && (child.faceImplant <= 5) && (child.bellyImplant === -1)) { + r += `Natr`; + } else { + r += `Impl`; } - if (child.energy > 95) { - if ((child.attrXY <= 95) || (child.attrXX <= 95)) { - r += `<span class="green">Nymphomaniac!</span> `; - } - } else if (child.energy > 80) { - r += `<span class="green">Powerful sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; - } else if (child.energy > 60) { - r += `<span class="green">Good sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; - } else if (child.energy > 40) { - r += `<span class="yellow">Average sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; - } else if (child.energy > 20) { - r += `<span class="red">Poor sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortLactation(child) { + if (child.lactation === 1) { + r += `Lact`; + } else if (child.lactation === 2) { + r += `Lact++`; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortMods(child) { + V.modScorChildStatsChecker.modScore(child); + if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) { + return; + } else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) { + r += `Mods++`; + } else if (V.modScore > 7) { + r += `Mods+`; } else { - r += `<span class="red">No sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + r += `Mods`; + } + if (child.brand !== 0) { + r += `Br`; } } /** * @param {App.Entity.SlaveState} child */ - function longSmartFetish(child) { - if (child.fetishKnown === 1) { - if (child.clitSetting === "off") { - r += `SP off. `; - } else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) { - r += `SP: submissive. `; - } else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) { - r += `SP: oral. `; - } else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) { - r += `SP: humiliation. `; - } else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) { - r += `SP: anal. `; - } else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) { - r += `SP: breasts. `; - } else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) { - r += `SP: sadism. `; - } else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) { - r += `SP: masochism. `; - } else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) { - r += `SP: dominance. `; - } else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) { - r += `SP: pregnancy. `; - } else if ((child.fetish !== "none") && (child.clitSetting === "vanilla")) { - r += `SP: vanilla. `; - } else if ((child.energy <= 95) && (child.clitSetting === "all")) { - r += `SP: all. `; - } else if ((child.energy > 5) && (child.clitSetting === "none")) { - r += `SP: none. `; - } else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) { - r += `SP: monitoring. `; - } + function longAge(child) { + r += `<span class="pink">`; + if (V.showAgeDetail === 1) { + r += `Age ` + `${child.actualAge}` + `. `; + } else if (child.actualAge >= 40) { + r += `Forties. `; + } else if (child.actualAge >= 35) { + r += `Late thirties. `; + } else if (child.actualAge >= 30) { + r += `Early thirties. `; + } else if (child.actualAge >= 25) { + r += `Late twenties. `; + } else if (child.actualAge >= 20) { + r += `Early twenties. `; + } else if (child.actualAge >= 19) { + r += `Nineteen. `; + } else if (child.actualAge >= 18) { + r += `Eighteen. `; } else { - switch (child.clitSetting) { - case "off": - r += `SP off. `; - break; - case "submissive": - r += `SP: submissive. `; - break; - case "oral": - r += `SP: oral. `; - break; - case "humiliation": - r += `SP: humiliation. `; - break; - case "anal": - r += `SP: anal. `; - break; - case "boobs": - r += `SP: breasts. `; - break; - case "sadist": - r += `SP: sadism. `; - break; - case "masochist": - r += `SP: masochism. `; - break; - case "dom": - r += `SP: dominance. `; - break; - case "pregnancy": - r += `SP: pregnancy. `; - break; - case "vanilla": - r += `SP: vanilla. `; - break; - case "all": - r += `SP: all. `; - break; - case "none": - r += `SP: none. `; - break; + r += `Underage. `; + } + /* + ** No NCS, then do the standard, However because of the wrinkes of Incubators, as long as visual age is greater + ** than or equal to physical age, we do the old physical body/Looks for fresh out of the can NCS slaves. + */ + if (((child.geneMods.NCS === 0) || (child.visualAge >= child.physicalAge))) { + if (child.actualAge !== child.physicalAge) { + r += `${child.physicalAge}` + ` year old body. `; + } + if (child.visualAge !== child.physicalAge) { + r += `Looks ` + `${child.visualAge}` + `. `; } + } else { + /* + ** Now the rub. The use of physical Age for the year old body above, basically conflicts with the changes + ** that NCS introduces, so here to *distinguish* the changes, we use visual age with the 'year old body' + ** and appears, for exampChild release from incubator at age 10, Her summary would show, 'Age 0. 10 + ** year old body.' But if she's given NCS a few weeks after release, while she's still before her first + ** birthday, it'll appear the same. But once her birthday fires, if we ran with the above code it would + ** say: 'Age 1. 11 year old body.' -- this conflicts with the way NCS works though, because she hasn't + ** visually aged, so our change here makes it say 'Age 1. Appears to have a 10 year old body.' + */ + r += `Appears to have a ` + `${child.visualAge}` + ` year old body. `; + } + if (child.geneMods.NCS === 1) { + r += `(<span class="orange">NCS</span>) `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longFace(child) { + if (child.face < -95) { + r += `<span class="red">Very ugly${V.summaryStats? `[${child.face}]`: ''}</span> `; + } else if (child.face < -40) { + r += `<span class="red">Ugly${V.summaryStats? `[${child.face}]`: ''}</span> `; + } else if (child.face < -10) { + r += `<span class="red">Unattractive${V.summaryStats? `[${child.face}]`: ''}</span> `; + } else if (child.face <= 10) { + r += `Average${V.summaryStats? `[${child.face}]`: ''}`; + } else if (child.face <= 40) { + r += `<span class="pink">Attractive${V.summaryStats? `[${child.face}]`: ''}</span> `; + } else if (child.face <= 95) { + r += `<span class="pink">Beautiful${V.summaryStats? `[${child.face}]`: ''}</span> `; + } else { + r += `<span class="pink">Very beautiful${V.summaryStats? `[${child.face}]`: ''}</span> `; + } + r += ` ${child.faceShape} face. `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longEyes(child) { + if (child.eyes <= -2) { + r += `<span class="red">Blind.</span> `; + } else if (((child.eyes === -1) && (child.eyewear !== "corrective glasses") && (child.eyewear !== "corrective contacts")) || (child.eyewear === "blurring glasses") || (child.eyewear === "blurring contacts")) { + r += `<span class="yellow">Nearsighted.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longSmartAttraction(child) { - if (child.attrKnown === 1) { - if ((child.attrXX < 100) && (child.clitSetting === "women")) { - r += `SP: women. `; - } else if ((child.attrXY < 100) && (child.clitSetting === "men")) { - r += `SP: men. `; - } - } else { - if (child.clitSetting === "women") { - r += `SP: women. `; - } else if (child.clitSetting === "men") { - r += `SP: men. `; - } + function longEars(child) { + if (child.hears <= -2) { + r += `<span class="red">Deaf.</span> `; + } else if ((child.hears === -1) && (child.earwear !== "hearing aids")) { + r += `<span class="yellow">Hard of hearing.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longBehaviorFlaw(child) { - r += `<span class="red">`; - switch (child.behavioralFlaw) { - case "arrogant": - r += `Arrogant. `; - break; - case "bitchy": - r += `Bitchy. `; - break; - case "odd": - r += `Odd. `; - break; - case "hates men": - r += `Hates men. `; - break; - case "hates women": - r += `Hates women. `; - break; - case "gluttonous": - r += `Stress eater. `; - break; - case "anorexic": - r += `Anorexic. `; - break; - case "devout": - r += `Devoutly religious. `; - break; - case "liberated": - r += `Mentally liberated. `; - break; - default: - child.behavioralFlaw = "none"; - break; + function longLips(child) { + if (child.lips > 95) { + r += `Facepussy${V.summaryStats? `[${child.lips}]`: ''}. `; + } else if (child.lips > 70) { + r += `Huge lips${V.summaryStats? `[${child.lips}]`: ''}. `; + } else if (child.lips > 40) { + r += `Big lips${V.summaryStats? `[${child.lips}]`: ''}. `; + } else if (child.lips > 20) { + r += `Pretty lips${V.summaryStats? `[${child.lips}]`: ''}. `; + } else if (child.lips > 10) { + r += `Normal lips${V.summaryStats? `[${child.lips}]`: ''}. `; + } else { + r += `<span class="red">Thin lips${V.summaryStats? `[${child.lips}]`: ''}.</span> `; } - r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function longSexFlaw(child) { - switch (child.sexualFlaw) { - case "hates oral": - r += `<span class="red">Hates oral.</span> `; - break; - case "hates anal": - r += `<span class="red">Hates anal.</span> `; - break; - case "hates penetration": - r += `<span class="red">Hates penetration.</span> `; - break; - case "shamefast": - r += `<span class="red">Shamefast.</span> `; - break; - case "idealistic": - r += `<span class="red">Sexually idealistic.</span> `; - break; - case "repressed": - r += `<span class="red">Sexually repressed.</span> `; - break; - case "apathetic": - r += `<span class="red">Sexually apathetic.</span> `; - break; - case "crude": - r += `<span class="red">Sexually crude.</span> `; - break; - case "judgemental": - r += `<span class="red">Sexually judgemental.</span> `; - break; - case "cum addict": - r += `<span class="yellow">Cum addict.</span> `; - break; - case "anal addict": - r += `<span class="yellow">Anal addict.</span> `; - break; - case "attention whore": - r += `<span class="yellow">Attention whore.</span> `; - break; - case "breast growth": - r += `<span class="yellow">Breast obsession.</span> `; - break; - case "abusive": - r += `<span class="yellow">Sexually abusive.</span> `; - break; - case "malicious": - r += `<span class="yellow">Sexually malicious.</span> `; - break; - case "self hating": - r += `<span class="yellow">Self hatred.</span> `; - break; - case "neglectful": - r += `<span class="yellow">Self neglectful.</span> `; - break; - case "breeder": - r += `<span class="yellow">Breeding obsession.</span> `; - break; - default: - child.sexualFlaw = "none"; - break; + function longTeeth(child) { + if (child.teeth === "crooked") { + r += `<span class="yellow">Crooked teeth.</span> `; + } else if (child.teeth === "gapped") { + r += `<span class="yellow">Tooth gap.</span> `; + } else if (child.teeth === "cosmetic braces") { + r += `Cosmetic braces. `; + } else if (child.teeth === "straightening braces") { + r += `Braces. `; + } else if (child.teeth === "removable") { + r += `Removable teeth. `; + } else if (child.teeth === "pointy") { + r += `Sharp fangs. `; + } else if (child.teeth === "baby") { + r += `Baby teeth. `; + } else if (child.teeth === "mixed") { + r += `Mixed teeth. `; } } /** * @param {App.Entity.SlaveState} child */ - function longBehaviorQuirk(child) { - r += `<span class="green">`; - switch (child.behavioralQuirk) { - case "confident": - r += `Confident. `; - break; - case "cutting": - r += `Cutting. `; - break; - case "funny": - r += `Funny. `; - break; - case "fitness": - r += `Fitness. `; - break; - case "adores women": - r += `Adores women. `; - break; - case "adores men": - r += `Adores men. `; - break; - case "insecure": - r += `Insecure. `; - break; - case "sinful": - r += `Sinful. `; - break; - case "advocate": - r += `Advocate. `; - break; - default: - child.behavioralQuirk = "none"; - break; + function longMuscles(child) { + if (child.muscles > 95) { + r += `Hugely muscular${V.summaryStats? `[${child.muscles}]` : ''}. `; + } else if (child.muscles > 50) { + r += `Muscular${V.summaryStats? `[${child.muscles}]`: ''}. `; + } else if (child.muscles > 5) { + r += `Fit${V.summaryStats? `[${child.muscles}]`: ''}. `; + } else if (child.muscles > -6) { + r += `Soft${V.summaryStats? `[${child.muscles}]`: ''}. `; + } else if (child.muscles > -31) { + if (V.arcologies[0].FSPhysicalIdealist === "unset") { + r += `<span class="red">Weak${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; + } else { + r += `Weak${V.summaryStats? `[${child.muscles}]`: ''}. `; + } + } else if (child.muscles > -96) { + if (V.arcologies[0].FSPhysicalIdealist === "unset") { + r += `<span class="red">Very weak${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; + } else { + r += `Very weak${V.summaryStats? `[${child.muscles}]`: ''}. `; + } + } else { + r += `<span class="red">Frail${V.summaryStats? `[${child.muscles}]`: ''}.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longSexQuirk(child) { - switch (child.sexualQuirk) { - case "gagfuck queen": - r += `Gagfuck queen. `; - break; - case "painal queen": - r += `Painal queen. `; - break; - case "strugglefuck queen": - r += `Strugglefuck queen. `; - break; - case "tease": - r += `Tease. `; - break; - case "romantic": - r += `Romantic. `; - break; - case "perverted": - r += `Perverted. `; - break; - case "caring": - r += `Caring. `; - break; - case "unflinching": - r += `Unflinching. `; - break; - case "size queen": - r += `Size queen. `; - break; - default: - child.sexualQuirk = "none"; - break; + function longLimbs(child) { + if (child.amp !== 0) { + if (child.amp === -1) { + r += `Prosthetic limbs. `; + } else if (child.amp === -2) { + r += `Sexy prosthetic limbs. `; + } else if (child.amp === -3) { + r += `Beautiful prosthetic limbs. `; + } else if (child.amp === -4) { + r += `Deadly prosthetic limbs. `; + } else if (child.amp === -5) { + r += `Cyber prosthetic limbs. `; + } else { + r += `Amputee. `; + } + } + if (!canWalk(child)) { + r += `Immobile. `; + } + if (child.heels === 1) { + r += `Heeled. `; } r += `</span> `; } @@ -5756,719 +4959,831 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function shortExtendedFamily(child) { - let handled = 0; - if (child.mother > 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.mother; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTermShort(child); - r += ` & ${friendShipShort}`; - handled = 1; - } - } - r += " "; - } else if (child.mother === -1) { - r += `Your daughter`; - if (child.relationship === -3) { - r += ` & wife`; - handled = 1; - } else if (child.relationship === -2) { - r += ` & lover`; - handled = 1; + function longVoice(child) { + if (child.voice === 0) { + r += `<span class="red">Mute.</span> `; + } else { + if (child.accent === 3) { + r += `<span class="red">Bad accent.</span> `; + } else if (child.accent === 4) { + r += `<span class="red">No language skills.</span> `; + } else if (child.accent === 2) { + r += `Accent. `; + } else if (child.accent === 1) { + r += `<span class="pink">Cute accent.</span> `; } - r += " "; - } else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) { - r += `${V.missingTable[child.mother].fullName}'s daughter `; } - if (child.father > 0 && child.father !== child.mother) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.father; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`; - if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) { - const friendShipShort = relationshipTermShort(child); - r += ` & ${friendShipShort}`; - handled = 1; - } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longTitsAss(child) { + r += `<span class="pink">`; + if ((child.boobs >= 12000) && (child.butt > 9)) { + r += `Hyper T&A. `; + } else if ((child.boobs > 4000) && (child.butt > 8)) { + r += `Enormous T&A. `; + } else if ((child.boobs > 2000) && (child.butt > 6)) { + r += `Huge T&A. `; + } else if ((child.boobs > 800) && (child.butt > 4)) { + r += `Big T&A. `; + } else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) { + r += `Girlish figure. `; + } else if (child.boobs >= 12000) { + r += `Immobilizing tits. `; + } else if (child.boobs > 4000) { + r += `Monstrous tits. `; + } else if (child.boobs > 2000) { + r += `Huge tits. `; + } else if (child.boobs > 800) { + r += `Big tits. `; + } else if (child.butt > 9) { + r += `Hyper ass. `; + } else if (child.butt > 8) { + r += `Titanic ass. `; + } else if (child.butt > 6) { + r += `Huge ass. `; + } else if (child.butt > 4) { + r += `Big ass. `; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longHips(child) { + r += `<span class="red">`; + if (child.hips < -1) { + if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + r += `Disproportionately big butt. `; } - r += " "; - } else if (child.father === -1 && child.mother !== -1) { - r += `Your daughter`; - if (child.relationship === -3) { - r += ` & wife`; - handled = 1; - } else if (child.relationship === -2) { - r += ` & lover`; - handled = 1; + } else if (child.hips < 0) { + if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + r += `Disproportionately big butt. `; } - r += " "; - } else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) { - r += `${V.missingTable[child.father].fullName}'s daughter`; - } - if (child.daughters === 1) { - let _ssj = V.slaves.findIndex(function(s) { - return s.mother === child.ID; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s mother`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTermShort(child); - r += ` & ${friendShipShort}`; - handled = 1; - } + } else if (child.hips > 2) { + if (child.butt <= 8) { + r += `Disproportionately small butt. `; } - r += " "; - _ssj = V.slaves.findIndex(function(s) { - return s.father === child.ID; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s father`; - if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) { - const friendShipShort = relationshipTermShort(child); - r += ` & ${friendShipShort}`; - handled = 1; - } + } else if (child.hips > 1) { + if (child.butt <= 3 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + r += `Disproportionately small butt. `; } - r += " "; - } else if (child.daughters > 1) { - r += `multiple daughters `; - } - if (child.sisters === 1) { - const _ssj = V.slaves.findIndex(function(s) { - return areSisters(s, child) > 0; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s sister`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTermShort(child); - r += `& ${friendShipShort}`; - handled = 1; + } else if (child.hips > 0) { + if (child.butt > 8) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + r += `Disproportionately big butt. `; } + } else if (child.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + r += `Disproportionately small butt. `; } - r += " "; - } else if (child.sisters > 1) { - r += `multiple sisters `; - } - if (child.relationship > 0 && handled !== 1) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationshipTarget; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s`; - const friendShipShort = relationshipTermShort(child); - r += ` ${friendShipShort}`; + } else { + if (child.butt > 6) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + r += `Disproportionately big butt. `; + } + } else if (child.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + r += `Disproportionately small butt. `; } - } else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) { - r += `Your wife`; - } else if (child.relationship === -2) { - r += `E Bonded`; - } else if (child.relationship === -1) { - r += `E Slut`; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function shortLegacyFamily(child) { - if (child.relation !== 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationTarget; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s ${child.relation}`; - } - } - if (child.relationship > 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationshipTarget; - }); - if (_ssj !== -1) { - const friendship = relationshipTerm(child); - if (child.relationshipTarget !== child.relationTarget) { - r += `${SlaveFullName(V.slaves[_ssj])}'s`; - } else { - r += ` &`; - } - r += ` ${friendship}`; - } - } else if (child.relationship === -3) { - r += `Your wife`; - } else if (child.relationship === -2) { - r += `E Bonded`; - } else if (child.relationship === -1) { - r += `E Slut`; + function longWaist(child) { + if (child.waist > 95) { + r += `<span class="red">Masculine waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; + } else if (child.waist > 40) { + r += `<span class="red">Ugly waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; + } else if (child.waist > 10) { + r += `<span class="red">Unattractive waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; + } else if (child.waist >= -10) { + r += `Average waist${V.summaryStats? `[${child.waist}]`: ''}. `; + } else if (child.waist >= -40) { + r += `<span class="pink">Feminine waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; + } else if (child.waist >= -95) { + r += `<span class="pink">Hourglass waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; + } else { + r += `<span class="pink">Absurdly narrow waist${V.summaryStats? `[${child.waist}]`: ''}.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function shortClone(child) { - if (child.clone !== 0) { - r += ` Clone`; + function longImplants(child) { + r += `<span class="pink">`; + if ((child.boobsImplant !== 0) || (child.buttImplant !== 0) || (child.lipsImplant !== 0) || (child.bellyImplant !== -1)) { + r += `Implants. `; + } else if ((child.faceImplant >= 30) || (child.waist < -95)) { + r += `Surgery enhanced. `; + } else { + r += `All natural. `; } } /** * @param {App.Entity.SlaveState} child */ - function shortRival(child) { - if (child.rivalry !== 0) { - r += ` `; - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.rivalryTarget; - }); - if (_ssj !== -1) { - r += `<span class="lightsalmon">`; - if (child.rivalry <= 1) { - r += `Disl ${SlaveFullName(V.slaves[_ssj])}`; - } else if (child.rivalry <= 2) { - r += `${SlaveFullName(V.slaves[_ssj])}'s rival`; - } else { - r += `Hates ${SlaveFullName(V.slaves[_ssj])}`; - } - r += `</span> `; - } + function longLactation(child) { + if (child.lactation === 1) { + r += `Lactating naturally. `; + } else if (child.lactation === 2) { + r += `Heavy lactation. `; } } /** * @param {App.Entity.SlaveState} child */ - function longExtendedFamily(child) { - let handled = 0; - if (child.mother > 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.mother; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTerm(child); - r += ` and ${friendShipShort}`; - handled = 1; - } - r += `.</span> `; - } - } else if (child.mother === -1) { - r += `Your `; - if (child.relationship === -3) { - r += `<span class="lightgreen">daughter and wife.</span> `; - handled = 1; - } else if (child.relationship === -2) { - r += `<span class="lightgreen">daughter and lover.</span> `; - handled = 1; - } else { - r += `<span class="lightgreen">daughter.</span> `; - } - } else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) { - r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `; + function longMods(child) { + V.modScorChildStatsChecker.modScore(child); + if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) { + return; + } else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) { + r += `Extensive body mods. `; + } else if (V.modScore > 7) { + r += `Noticeable body mods. `; + } else { + r += `Light body mods. `; } - if (child.father > 0 && child.father !== child.mother) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.father; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTerm(child); - r += ` and ${friendShipShort}`; - handled = 1; - } - r += `.</span> `; - } - } else if (child.father === -1 && child.father !== child.mother) { - r += `Your `; - if (child.relationship === -3) { - r += `<span class="lightgreen">daughter and wife.</span> `; - handled = 1; - } else if (child.relationship === -2) { - r += `<span class="lightgreen">daughter and lover.</span> `; - handled = 1; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortIntelligence(child) { + const intelligence = child.intelligence + child.intelligenceImplant; + if (child.fetish === "mindbroken") { + return; + } else if (child.intelligenceImplant >= 30) { + if (intelligence >= 130) { + r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 95) { + r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -15) { + r += `I(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; + } else if (intelligence >= -50) { + r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } else { - r += `<span class="lightgreen">daughter.</span> `; - } - } else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) { - r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `; - } - if (child.daughters === 1) { - let _ssj = V.slaves.findIndex(function(s) { - return s.mother === child.ID; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTerm(child); - r += ` and ${friendShipShort}`; - handled = 1; - } - r += `.</span> `; - } - _ssj = V.slaves.findIndex(function(s) { - return s.father === child.ID; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTerm(child); - r += ` and ${friendShipShort}`; - handled = 1; - } - r += `.</span> `; + r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } - } else if (child.daughters > 1) { - if (child.daughters > 10) { - r += `<span class="lightgreen">Has tons of daughters.</span> `; - } else if (child.daughters > 5) { - r += `<span class="lightgreen">Has many daughters.</span> `; + } else if (child.intelligenceImplant >= 15) { + if (intelligence > 95) { + r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -15) { + r += `I(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; + } else if (intelligence >= -50) { + r += `<span class="orangered">I-(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">I--(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } else { - r += `<span class="lightgreen">Has several daughters.</span> `; - } - } - if (child.sisters === 1) { - const _ssj = V.slaves.findIndex(function(s) { - return areSisters(s, child) > 0; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`; - if (child.relationshipTarget === V.slaves[_ssj].ID) { - const friendShipShort = relationshipTerm(child); - r += ` and ${friendShipShort}`; - handled = 1; - } - r += `.</span> `; + r += `<span class="orangered">I---(e)${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } - } else if (child.sisters > 1) { - if (child.sisters > 10) { - r += `<span class="lightgreen">One of many sisters.</span> `; - } else if (child.sisters > 5) { - r += `<span class="lightgreen">Has many sisters.</span> `; + } else { + if (intelligence > 95) { + r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">I++${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">I+${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -15) { + r += `I${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}`; + } else if (intelligence >= -50) { + r += `<span class="orangered">I-${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">I--${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } else { - r += `<span class="lightgreen">Has several sisters.</span> `; - } - } - if (child.relationship > 0 && handled !== 1) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationshipTarget; - }); - if (_ssj !== -1) { - const friendship = relationshipTerm(child); - r += `${SlaveFullName(V.slaves[_ssj])}'s `; - r += `<span class="lightgreen">${friendship}.</span> `; + r += `<span class="orangered">I---${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}</span> `; } - } else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) { - r += `<span class="lightgreen">Your wife.</span> `; - } else if (child.relationship === -2) { - r += `<span class="lightgreen">Emotionally bonded to you.</span> `; - } else if (child.relationship === -1) { - r += `<span class="lightgreen">Emotional slut.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longLegacyFamily(child) { - if (child.relation !== 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationTarget; - }); - if (_ssj !== -1) { - r += `${SlaveFullName(V.slaves[_ssj])}'s `; - if (child.relationshipTarget !== child.relationTarget) { - r += `<span class="lightgreen">${child.relation}.</span> `; - } else { - r += `<span class="lightgreen">${child.relation}</span> `; - } - if (child.relationship <= 0) { - r += ` `; + function shortSexSkills(child) { + let SSkills = child.skill.anal + child.skill.oral; + r += `<span class="aquamarine">`; + if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) { + r += `MSS`; + } else { + SSkills += child.skill.vaginal; + SSkills = Math.trunc(SSkills); + if (SSkills > 180) { + r += `S++`; + } else if ((SSkills > 120) && (child.vagina < 0)) { + r += `Sh++`; + } else if (SSkills > 90) { + r += `S+`; + } else if (SSkills > 30) { + r += `S`; + } else { + r += `S-`; + } + if (V.summaryStats) { + r += `[${SSkills}] `; + } + r += " "; + if (child.skill.whoring >= 100) { + r += `W+++`; + } else if (child.skill.whoring > 60) { + r += `W++`; + } else if (child.skill.whoring > 30) { + r += `W+`; + } else if (child.skill.whoring > 10) { + r += `W`; + } + if (child.skill.whoring > 10) { + if (V.summaryStats) { + r += `[${child.skill.whoring}] `; } } - } - if (child.relationship > 0) { - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.relationshipTarget; - }); - if (_ssj !== -1) { - const friendship = relationshipTerm(child); - if (child.relationshipTarget !== child.relationTarget) { - r += `${SlaveFullName(V.slaves[_ssj])}'s `; - } else { - r += ` and `; + r += " "; + if (child.skill.entertainment >= 100) { + r += `E+++`; + } else if (child.skill.entertainment > 60) { + r += `E++`; + } else if (child.skill.entertainment > 30) { + r += `E+`; + } else if (child.skill.entertainment > 10) { + r += `E`; + } + if (child.skill.entertainment > 10) { + if (V.summaryStats) { + r += `[${child.skill.entertainment}] `; } - r += `<span class="lightgreen">${friendship}.</span> `; } - } else if (child.relationship === -3) { - r += `<span class="lightgreen">Your wife.</span> `; - } else if (child.relationship === -2) { - r += `<span class="lightgreen">Emotionally bonded to you.</span> `; - } else if (child.relationship === -1) { - r += `<span class="lightgreen">Emotional slut.</span> `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longClone(child) { - if (child.clone !== 0) { - r += ` <span class="skyblue">Clone of ${child.clone}.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longRival(child) { - if (child.rivalry !== 0) { - r += ` `; - const _ssj = V.slaves.findIndex(function(s) { - return s.ID === child.rivalryTarget; - }); - if (_ssj !== -1) { - if (child.rivalry <= 1) { - r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `; - } else if (child.rivalry <= 2) { - r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `; - } else { - r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `; - } + function shortPrestige(child) { + if (child.prestige > 0) { + r += `<span class="green">`; + if (child.prestige > 2) { + r += `Prest++`; + } else if (child.prestige === 2) { + r += `Prest+`; + } else if (child.prestige === 1) { + r += `Prest`; } - r += " "; + r += `</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longClothes(child) { - switch (child.clothes) { - case "attractive lingerie": - r += `Nice lingerie. `; - break; - case "a succubus outfit": - r += `Succubus outfit. `; - break; - case "a string bikini": - r += `String bikini. `; - break; - case "a scalemail bikini": - r += `Scalemail bikini. `; - break; - case "striped panties": - r += `Striped panties. `; - break; - case "a monokini": - r += `Monokini. `; - break; - case "an apron": - r += `Apron. `; - break; - case "a cybersuit": - r += `Cybersuit. `; - break; - case "cutoffs and a t-shirt": - r += `Cutoffs, t-shirt. `; - break; - case "a slutty outfit": - r += `Slutty outfit. `; - break; - case "uncomfortable straps": - r += `Leather straps. `; - break; - case "a fallen nuns habit": - r += `Slutty habit. `; - break; - case "a chattel habit": - r += `Chattel habit. `; - break; - case "a penitent nuns habit": - r += `Cilice. `; - break; - case "slutty jewelry": - r += `Bangles. `; - break; - case "attractive lingerie for a pregnant woman": - r += `Preggo lingerie. `; - break; - case "a maternity dress": - r += `Maternity dress. `; - break; - case "stretch pants and a crop-top": - r += `Stretch pants, crop-top. `; - break; - case "harem gauze": - r += `Harem outfit. `; - break; - case "a child gown": - r += `Slave gown. `; - break; - case "a halter top dress": - r += `Halter top dress. `; - break; - case "a mini dress": - r += `Mini dress. `; - break; - case "a ball gown": - r += `Ball gown. `; - break; - case "slutty business attire": - r += `Slutty suit. `; - break; - case "nice business attire": - r += `Nice suit. `; - break; - case "a comfortable bodysuit": - r += `Bodysuit. `; - break; - case "a military uniform": - r += `Military uniform. `; - break; - case "a schutzstaffel uniform": - r += `Schutzstaffel uniform. `; - break; - case "a slutty schutzstaffel uniform": - r += `Slutty Schutzstaffel uniform. `; - break; - case "a red army uniform": - r += `Red Army uniform. `; - break; - case "a long qipao": - r += `Long Qipao. `; - break; - case "battlearmor": - r += `Battlearmor. `; - break; - case "a mounty outfit": - r += `Mounty outfit. `; - break; - case "a dirndl": - r += `Dirndl. `; - break; - case "lederhosen": - r += `Lederhosen. `; - break; - case "a biyelgee costume": - r += `Biyelgee costume. `; - break; - case "a leotard": - r += `Leotard. `; - break; - case "a bunny outfit": - r += `Bunny outfit. `; - break; - case "a slutty maid outfit": - r += `Slutty maid. `; - break; - case "a nice maid outfit": - r += `Nice maid. `; - break; - case "a slutty nurse outfit": - r += `Slutty nurse. `; - break; - case "a nice nurse outfit": - r += `Nice nurse. `; - break; - case "a schoolgirl outfit": - r += `Schoolgirl outfit. `; - break; - case "a kimono": - r += `Kimono. `; - break; - case "a hijab and abaya": - r += `Hijab and abaya. `; - break; - case "battledress": - r += `Battledress. `; - break; - case "a latex catsuit": - r += `Nice latex. `; - break; - case "restrictive latex": - r += `Bondage latex. `; - break; - case "conservative clothing": - r += `Conservative clothing. `; - break; - case "chains": - r += `Chains. `; - break; - case "overalls": - r += `Overalls. `; - break; - case "a cheerleader outfit": - r += `Cheerleader. `; - break; - case "clubslut netting": - r += `Netting. `; - break; - case "shibari ropes": - r += `Shibari. `; - break; - case "Western clothing": - r += `Chaps. `; - break; - case "body oil": - r += `Body oil. `; - break; - case "a toga": - r += `Toga. `; - break; - case "a huipil": - r += `Huipil. `; - break; - case "a slutty qipao": - r += `Slutty qipao. `; - break; - case "spats and a tank top": - r += `Spats, tank top. `; - break; - case "a burkini": - r += `Burkini. `; - break; - case "a niqab and abaya": - r += `Niqab and abaya. `; - break; - case "a klan robe": - r += `Klan robe. `; - break; - case "a hijab and blouse": - r += `Hijab and blouse. `; - break; - case "a burqa": - r += `Burqa. `; - break; - case "kitty lingerie": - r += `Kitty lingerie. `; - break; - case "a tube top and thong": - r += `Tube top, thong. `; - break; - case "a button-up shirt and panties": - r += `Button-up shirt, panties. `; - break; - case "a gothic lolita dress": - r += `Gothic lolita dress. `; + function shortPornPrestige(child) { + if (child.pornPrestige > 0) { + r += `<span class="green">`; + if (child.pornPrestige > 2) { + r += `PPrest++`; + } else if (child.pornPrestige === 2) { + r += `PPrest+`; + } else if (child.pornPrestige === 1) { + r += `PPrest`; + } + r += `</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longIntelligence(child) { + const intelligence = child.intelligence + child.intelligenceImplant; + if (child.fetish === "mindbroken") { + return; + } else if (child.intelligenceImplant >= 30) { + if (intelligence >= 130) { + r += `<span class="deepskyblue">Genius${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 95) { + r += `<span class="deepskyblue">Brilliant, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">Very smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">Smart, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -15) { + r += `Average intelligence, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; + } else if (intelligence >= -50) { + r += `<span class="orangered">Slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">Very slow, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else { + r += `<span class="orangered">Moronic, well educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } + } else if (child.intelligenceImplant >= 15) { + if (intelligence > 95) { + r += `<span class="deepskyblue">Brilliant, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">Very smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">Smart, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -15) { + r += `Average intelligence, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; + } else if (intelligence >= -50) { + r += `<span class="orangered">Slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">Very slow, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else { + r += `<span class="orangered">Moronic, educated${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } + } else { + if (intelligence > 95) { + r += `<span class="deepskyblue">Brilliant${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 50) { + r += `<span class="deepskyblue">Very smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence > 15) { + r += `<span class="deepskyblue">Smart${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -15) { + r += `Average intelligence${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}. `; + } else if (intelligence >= -50) { + r += `<span class="orangered">Slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else if (intelligence >= -95) { + r += `<span class="orangered">Very slow${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } else { + r += `<span class="orangered">Moronic${V.summaryStats ? `[${child.intelligence+child.intelligenceImplant}]` : ''}.</span> `; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longSexSkills(child) { + let SSkills = (child.skill.anal + child.skill.oral); + r += `<span class="aquamarine">`; + if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) { + r += `Masterful Child. `; + } else { + SSkills += child.skill.vaginal; + if (SSkills > 180) { + r += `Sex master${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; + } else if ((SSkills > 120) && (child.vagina < 0)) { + r += `Masterful shemale${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; + } else if (SSkills > 90) { + r += `Sexual expert${V.summaryStats? `[${Math.trunc(SSkills)}]`: ''}. `; + } else if (SSkills > 30) { + r += `Sexually skilled${V.summaryStats? `[${Math.trunc(SSkills)}]` : ''}. `; + } else { + r += `Sexually unskilled${V.summaryStats? `[${Math.trunc(SSkills)}]` : ''}. `; + } + r += " "; + if (child.skill.whoring >= 100) { + r += `Masterful whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; + } else if (child.skill.whoring >= 60) { + r += `Expert whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; + } else if (child.skill.whoring >= 30) { + r += `Skilled whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; + } else if (child.skill.whoring >= 10) { + r += `Basic whore${V.summaryStats? `[${child.skill.whoring}]`: ''}. `; + } + r += " "; + if (child.skill.entertainment >= 100) { + r += `Masterful entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; + } else if (child.skill.entertainment >= 60) { + r += `Expert entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; + } else if (child.skill.entertainment >= 30) { + r += `Skilled entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; + } else if (child.skill.entertainment >= 10) { + r += `Basic entertainer${V.summaryStats? `[${child.skill.entertainment}]`: ''}. `; + } + r += " "; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longPrestige(child) { + if (child.prestige > 0) { + r += `<span class="green">`; + if (child.prestige > 2) { + r += `Extremely prestigious. `; + } else if (child.prestige === 2) { + r += `Very prestigious. `; + } else if (child.prestige === 1) { + r += `Prestigious. `; + } + r += `</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longPornPrestige(child) { + if (child.pornPrestige > 0) { + r += `<span class="green">`; + if (child.pornPrestige > 2) { + r += `Porn star. `; + } else if (child.pornPrestige === 2) { + r += `Porn slut. `; + } else if (child.pornPrestige === 1) { + r += `Porn amateur. `; + } + r += `</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortFetish(child) { + r += `<span class="lightcoral">`; + switch (child.fetish) { + case "submissive": + if (child.fetishStrength > 95) { + r += `Sub++`; + } else if (child.fetishStrength > 60) { + r += `Sub+`; + } else { + r += `Sub`; + } break; - case "a hanbok": - r += `Hanbok. `; + case "cumslut": + if (child.fetishStrength > 95) { + r += `Oral++`; + } else if (child.fetishStrength > 60) { + r += `Oral+`; + } else { + r += `Oral`; + } break; - case "a bra": - r += `Nice bra. `; + case "humiliation": + if (child.fetishStrength > 95) { + r += `Humil++`; + } else if (child.fetishStrength > 60) { + r += `Humil+`; + } else { + r += `Humil`; + } break; - case "a button-up shirt": - r += `Nice button-up shirt. `; + case "buttslut": + if (child.fetishStrength > 95) { + r += `Anal++`; + } else if (child.fetishStrength > 60) { + r += `Anal+`; + } else { + r += `Anal`; + } break; - case "a nice pony outfit": - r += `Nice pony outfit. `; + case "boobs": + if (child.fetishStrength > 95) { + r += `Boobs++`; + } else if (child.fetishStrength > 60) { + r += `Boobs+`; + } else { + r += `Boobs`; + } break; - case "a sweater": - r += `Nice sweater. `; + case "sadist": + if (child.fetishStrength > 95) { + r += `Sadist++`; + } else if (child.fetishStrength > 60) { + r += `Sadist+`; + } else { + r += `Sadist`; + } break; - case "a tank-top": - r += `Nice tank-top. `; + case "masochist": + if (child.fetishStrength > 95) { + r += `Pain++`; + } else if (child.fetishStrength > 60) { + r += `Pain+`; + } else { + r += `Pain`; + } break; - case "a thong": - r += `Nice thong. `; + case "dom": + if (child.fetishStrength > 95) { + r += `Dom++`; + } else if (child.fetishStrength > 60) { + r += `Dom+`; + } else { + r += `Dom`; + } break; - case "a tube top": - r += `Nice tube top. `; + case "pregnancy": + if (child.fetishStrength > 95) { + r += `Preg++`; + } else if (child.fetishStrength > 60) { + r += `Preg+`; + } else { + r += `Preg`; + } break; - case "a one-piece swimsuit": - r += `Swimsuit. `; + default: + r += `Vanilla`; break; - case "a police uniform": - r += `Police uniform. `; + } + if (V.summaryStats) { + r += `[${child.fetishStrength}]`; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortAttraction(child) { + if (child.attrXY <= 5) { + r += `<span class="red">XY---${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } else if (child.attrXY <= 15) { + r += `<span class="red">XY--${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } else if (child.attrXY <= 35) { + r += `<span class="red">XY-${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } else if (child.attrXY <= 65) { + r += `XY${V.summaryStats? `[${child.attrXY}]`: ''}`; + } else if (child.attrXY <= 85) { + r += `<span class="green">XY+${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } else if (child.attrXY <= 95) { + r += `<span class="green">XY++${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } else if (child.attrXX > 95) { + if (child.energy <= 95) { + r += `<span class="green">Omni!</span> `; + } else { + r += `<span class="green">Omni+Nympho!!</span> `; + } + } else { + r += `<span class="green">XY+++${V.summaryStats? `[${child.attrXY}]`: ''}</span> `; + } + if (child.attrXX <= 5) { + r += `<span class="red">XX---${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } else if (child.attrXX <= 15) { + r += `<span class="red">XX--${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } else if (child.attrXX <= 35) { + r += `<span class="red">XX-${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } else if (child.attrXX <= 65) { + r += `XX${V.summaryStats? `[${child.attrXX}]`: ''}`; + } else if (child.attrXX <= 85) { + r += `<span class="green">XX+${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } else if (child.attrXX <= 95) { + r += `<span class="green">XX++${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } else if (child.attrXY <= 95) { + r += `<span class="green">XX+++${V.summaryStats? `[${child.attrXX}]`: ''}</span> `; + } + if (child.energy > 95) { + if ((child.attrXY <= 95) || (child.attrXX <= 95)) { + r += `<span class="green">Nympho!</span> `; + } + } else if (child.energy > 80) { + r += `<span class="green">SD++${V.summaryStats? `[${child.energy}]`: ''}</span> `; + } else if (child.energy > 60) { + r += `<span class="green">SD+${V.summaryStats? `[${child.energy}]`: ''}</span> `; + } else if (child.energy > 40) { + r += `<span class="yellow">SD${V.summaryStats? `[${child.energy}]`: ''}</span> `; + } else if (child.energy > 20) { + r += `<span class="red">SD-${V.summaryStats? `[${child.energy}]`: ''}</span> `; + } else { + r += `<span class="red">SD--${V.summaryStats? `[${child.energy}]`: ''}</span> `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortSmartFetish(child) { + if (child.fetishKnown === 1) { + if (child.clitSetting === "off") { + r += `SP-`; + } else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) { + r += `SP:sub`; + } else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) { + r += `SP:oral`; + } else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) { + r += `SP:humil`; + } else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) { + r += `SP:anal`; + } else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) { + r += `SP:boobs`; + } else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) { + r += `SP:sade`; + } else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) { + r += `SP:pain`; + } else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) { + r += `SP:dom`; + } else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) { + r += `SP:preg`; + } else if (((child.fetish !== "none") && (child.clitSetting === "vanilla"))) { + r += `SP:vanilla`; + } else if ((child.energy <= 95) && (child.clitSetting === "all")) { + r += `SP:all`; + } else if ((child.energy > 5) && (child.clitSetting === "none")) { + r += `SP:none`; + } else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) { + r += `SP:monitoring`; + } + } else { + switch (child.clitSetting) { + case "off": + r += `SP-`; + break; + case "submissive": + r += `SP:sub`; + break; + case "lesbian": + r += `SP:les`; + break; + case "oral": + r += `SP:oral`; + break; + case "humiliation": + r += `SP:humil`; + break; + case "anal": + r += `SP:anal`; + break; + case "boobs": + r += `SP:boobs`; + break; + case "sadist": + r += `SP:sade`; + break; + case "masochist": + r += `SP:pain`; + break; + case "dom": + r += `SP:dom`; + break; + case "pregnancy": + r += `SP:pregnancy`; + break; + case "vanilla": + r += `SP:vanilla`; + break; + case "all": + r += `SP:all`; + break; + case "none": + r += `SP:none`; + break; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortSmartAttraction(child) { + if (child.attrKnown === 1) { + if (child.clitSetting === "women") { + if (child.attrXX < 95) { + r += `SP:women`; + } else { + r += `SP:monitoring`; + } + } else if (child.clitSetting === "men") { + if (child.attrXY < 95) { + r += `SP:men`; + } else { + r += `SP:monitoring`; + } + } else if (child.clitSetting === "anti-women") { + if (child.attrXX > 0) { + r += `SP:anti-women`; + } else { + r += `SP:monitoring`; + } + } else if (child.clitSetting === "anti-men") { + if (child.attrXY > 0) { + r += `SP:anti-men`; + } else { + r += `SP:monitoring`; + } + } + } else { + if (child.clitSetting === "women") { + r += `SP:women`; + } else if (child.clitSetting === "men") { + r += `SP:men`; + } else if (child.clitSetting === "anti-women") { + r += `SP:anti-women`; + } else if (child.clitSetting === "anti-men") { + r += `SP:anti-men`; + } + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortBehaviorFlaw(child) { + r += `<span class="red">`; + switch (child.behavioralFlaw) { + case "arrogant": + r += `Arrog`; break; - case "a striped bra": - r += `Striped bra. `; + case "bitchy": + r += `Bitchy`; break; - case "a skimpy loincloth": - r += `Skimpy loincloth. `; + case "odd": + r += `Odd`; break; - case "a slutty klan robe": - r += `Slutty klan robe. `; + case "hates men": + r += `Men-`; break; - case "a slutty pony outfit": - r += `Slutty pony outfit. `; + case "hates women": + r += `Women-`; break; - case "a Santa dress": - r += `Santa dress. `; + case "gluttonous": + r += `Glut`; break; - case "a sports bra": - r += `Sports bra. `; + case "anorexic": + r += `Ano`; break; - case "a sweater and panties": - r += `Sweater, panties. `; + case "devout": + r += `Dev`; break; - case "a t-shirt": - r += `T-shirt. `; + case "liberated": + r += `Lib`; break; - case "a tank-top and panties": - r += `Tank-top, panties. `; + default: + child.behavioralFlaw = "none"; break; - case "a t-shirt and thong": - r += `Thong, t-shirt. `; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortSexFlaw(child) { + switch (child.sexualFlaw) { + case "hates oral": + r += `<span class="red">Oral-</span> `; break; - case "an oversized t-shirt and boyshorts": - r += `Over-sized t-shirt, boy shorts. `; + case "hates anal": + r += `<span class="red">Anal-</span> `; break; - case "an oversized t-shirt": - r += `Nice over-sized t-shirt. `; + case "hates penetration": + r += `<span class="red">Fuck-</span> `; break; - case "a t-shirt and jeans": - r += `Blue jeans, t-shirt. `; + case "shamefast": + r += `<span class="red">Shame</span> `; break; - case "boyshorts": - r += `Boy shorts. `; + case "idealistic": + r += `<span class="red">Ideal</span> `; break; - case "cutoffs": - r += `Jean shorts. `; + case "repressed": + r += `<span class="red">Repre</span> `; break; - case "leather pants and pasties": - r += `Leather pants, pasties. `; + case "apathetic": + r += `<span class="red">Apath</span> `; break; - case "leather pants": - r += `Nice leather pants. `; + case "crude": + r += `<span class="red">Crude</span> `; break; - case "panties": - r += `Nice panties. `; + case "judgemental": + r += `<span class="red">Judge</span> `; break; - case "sport shorts and a t-shirt": - r += `Nice sport shorts, shirt. `; + case "cum addict": + r += `<span class="yellow">CumAdd</span> `; break; - case "a t-shirt and panties": - r += `Panties, t-shirt. `; + case "anal addict": + r += `<span class="yellow">AnalAdd</span> `; break; - case "panties and pasties": - r += `Pasties, panties. `; + case "attention whore": + r += `<span class="yellow">Attention</span> `; break; - case "striped underwear": - r += `Striped underwear`; + case "breast growth": + r += `<span class="yellow">BoobObsess</span> `; break; - case "sport shorts and a sports bra": - r += `Shorts, bra. `; + case "abusive": + r += `<span class="yellow">Abusive</span> `; break; - case "jeans": - r += `Tight blue jeans. `; + case "malicious": + r += `<span class="yellow">Malice</span> `; break; - case "a sweater and cutoffs": - r += `Jean shorts, sweater. `; + case "self hating": + r += `<span class="yellow">SelfHatr</span> `; break; - case "leather pants and a tube top": - r += `Leather pants, tube top. `; + case "neglectful": + r += `<span class="yellow">SelfNeglect</span> `; break; - case "sport shorts": - r += `Shorts. `; + case "breeder": + r += `<span class="yellow">BreedObsess</span> `; break; default: - r += `Naked. `; + child.sexualFlaw = "none"; break; } } @@ -6476,207 +5791,431 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function longCollar(child) { - switch (child.collar) { - case "uncomfortable leather": - r += `Leather collar. `; - break; - case "tight steel": - r += `Steel collar. `; + function shortBehaviorQuirk(child) { + r += `<span class="green">`; + switch (child.behavioralQuirk) { + case "confident": + r += `Confid`; break; - case "preg biometrics": - r += `Pregnancy biometrics collar. `; + case "cutting": + r += `Cutting`; break; - case "cruel retirement counter": - r += `Cruel counter collar. `; + case "funny": + r += `Funny`; break; - case "shock punishment": - r += `Shock collar. `; + case "fitness": + r += `Fit`; break; - case "dildo gag": - r += `Dildo gag. `; + case "adores women": + r += `Women+`; break; - case "massive dildo gag": - r += `Throat-bulging dildo gag. `; + case "adores men": + r += `Men+`; break; - case "neck corset": - r += `Neck corset. `; + case "insecure": + r += `Insec`; break; - case "stylish leather": - r += `Stylish leather collar. `; + case "sinful": + r += `Sinf`; break; - case "satin choker": - r += `Satin choker. `; + case "advocate": + r += `Advoc`; break; - case "silk ribbon": - r += `Silken ribbon. `; + default: + child.behavioralQuirk = "none"; break; - case "heavy gold": - r += `Gold collar. `; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function shortSexQuirk(child) { + switch (child.sexualQuirk) { + case "gagfuck queen": + r += `Gagfuck`; break; - case "bowtie": - r += `Bowtie collar. `; + case "painal queen": + r += `Painal`; break; - case "pretty jewelry": - r += `Pretty collar. `; + case "strugglefuck queen": + r += `Struggle`; break; - case "nice retirement counter": - r += `Nice counter collar. `; + case "tease": + r += `Tease`; break; - case "bell collar": - r += `Bell collar. `; + case "romantic": + r += `Romantic`; break; - case "leather with cowbell": - r += `Cowbell collar. `; + case "perverted": + r += `Perverted`; break; - case "ancient Egyptian": - r += `Wesekh. `; + case "caring": + r += `Caring`; break; - case "ball gag": - r += `Ball gag. `; + case "unflinching": + r += `Unflinch`; break; - case "bit gag": - r += `Bit gag. `; + case "size queen": + r += `SizeQ`; break; - case "porcelain mask": - r += `Porcelain mask. `; + default: + child.sexualQuirk = "none"; break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function longBelly(child) { - switch (child.bellyAccessory) { - case "shapewear": - r += `Shapewear. `; + function longFetish(child) { + r += `<span class="lightcoral">`; + switch (child.fetish) { + case "submissive": + if (child.fetishStrength > 95) { + r += `Complete submissive${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Submissive${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Submissive tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "a small empathy belly": - r += `Small fake belly. `; + case "cumslut": + if (child.fetishStrength > 95) { + r += `Cumslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Oral fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Prefers oral${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "a medium empathy belly": - r += `Medium fake belly. `; + case "humiliation": + if (child.fetishStrength > 95) { + r += `Humiliation slut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Exhibitionist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Interest in humiliation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "a large empathy belly": - r += `Large fake belly. `; + case "buttslut": + if (child.fetishStrength > 95) { + r += `Buttslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Anal fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Prefers anal${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "a huge empathy belly": - r += `Huge fake belly. `; + case "boobs": + if (child.fetishStrength > 95) { + r += `Boobslut${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Breast fixation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Loves boobs${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "a corset": - r += `Corset. `; + case "sadist": + if (child.fetishStrength > 95) { + r += `Complete sadist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Sadist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Sadistic tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } break; - case "an extreme corset": - r += `Extreme corsetage. `; + case "masochist": + if (child.fetishStrength > 95) { + r += `Complete masochist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Masochist${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Masochistic tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } + break; + case "dom": + if (child.fetishStrength > 95) { + r += `Complete dom${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Dominant${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Dominant tendencies${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } + break; + case "pregnancy": + if (child.fetishStrength > 95) { + r += `Pregnancy fetish${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else if (child.fetishStrength > 60) { + r += `Pregnancy kink${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } else { + r += `Interest in impregnation${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; + } + break; + default: + r += `Sexually vanilla${V.summaryStats? `[${child.fetishStrength}]` : ''}. `; break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function longLegs(child) { - if (child.legAccessory === "short stockings") { - r += `Short stockings. `; - } else if (child.legAccessory === "long stockings") { - r += `Long stockings. `; - } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longShoes(child) { - if (child.shoes === "heels") { - r += `Heels. `; - } else if (child.shoes === "pumps") { - r += `Pumps. `; - } else if (child.shoes === "extreme heels") { - r += `Extreme heels. `; - } else if (child.shoes === "boots") { - r += `Boots. `; - } else if (child.heels === 1) { - r += `<span class="yellow">Crawling.</span> `; - } else if (child.shoes === "flats") { - r += `Flats. `; + function longAttraction(child) { + if (child.attrXY <= 5) { + r += `<span class="red">Disgusted by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + } else if (child.attrXY <= 15) { + r += `<span class="red">Turned off by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + } else if (child.attrXY <= 35) { + r += `<span class="red">Not attracted to men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + } else if (child.attrXY <= 65) { + r += `Indifferent to men${V.summaryStats? `[${child.attrXY}]` : ''}, `; + } else if (child.attrXY <= 85) { + r += `<span class="green">Attracted to men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + } else if (child.attrXY <= 95) { + r += `<span class="green">Aroused by men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; + } else if (child.attrXX > 95) { + if (child.energy <= 95) { + r += `<span class="green">Omnisexual!</span> `; + } else { + r += `<span class="green">Omnisexual nymphomaniac!</span> `; + } + } else { + r += `<span class="green">Passionate about men${V.summaryStats? `[${child.attrXY}]` : ''},</span> `; } - } - - /** - * @param {App.Entity.SlaveState} child - */ - function longChastity(child) { - if (child.chastityAnus === 1 && child.chastityPenis === 1 && child.chastityVagina === 1) { - r += `Full chastity. `; - } else if (child.chastityPenis === 1 && child.chastityVagina === 1) { - r += `Genital chastity. `; - } else if ((child.chastityAnus === 1 && child.chastityVagina === 1) || (child.chastityAnus === 1 && child.chastityPenis === 1)) { - r += `Combined chastity. `; - } else if (child.chastityVagina === 1) { - r += `Vaginal chastity. `; - } else if (child.chastityPenis === 1) { - r += `Chastity cage. `; - } else if (child.chastityAnus === 1) { - r += `Anal chastity. `; + if (child.attrXX <= 5) { + r += `<span class="red">disgusted by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } else if (child.attrXX <= 15) { + r += `<span class="red">turned off by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } else if (child.attrXX <= 35) { + r += `<span class="red">not attracted to women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } else if (child.attrXX <= 65) { + r += `indifferent to women${V.summaryStats? `[${child.attrXX}]` : ''}. `; + } else if (child.attrXX <= 85) { + r += `<span class="green">attracted to women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } else if (child.attrXX <= 95) { + r += `<span class="green">aroused by women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } else if (child.attrXY <= 95) { + r += `<span class="green">passionate about women${V.summaryStats? `[${child.attrXX}]` : ''}.</span> `; + } + if (child.energy > 95) { + if ((child.attrXY <= 95) || (child.attrXX <= 95)) { + r += `<span class="green">Nymphomaniac!</span> `; + } + } else if (child.energy > 80) { + r += `<span class="green">Powerful sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + } else if (child.energy > 60) { + r += `<span class="green">Good sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + } else if (child.energy > 40) { + r += `<span class="yellow">Average sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + } else if (child.energy > 20) { + r += `<span class="red">Poor sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; + } else { + r += `<span class="red">No sex drive${V.summaryStats? `[${child.energy}]` : ''}.</span> `; } } /** * @param {App.Entity.SlaveState} child */ - function longVaginalAcc(child) { - if (child.vaginalAttachment !== "vibrator") { - switch (child.vaginalAccessory) { - case "bullet vibrator": - r += `Attached bullet vibrator. `; + function longSmartFetish(child) { + if (child.fetishKnown === 1) { + if (child.clitSetting === "off") { + r += `SP off. `; + } else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) { + r += `SP: submissive. `; + } else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) { + r += `SP: oral. `; + } else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) { + r += `SP: humiliation. `; + } else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) { + r += `SP: anal. `; + } else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) { + r += `SP: breasts. `; + } else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) { + r += `SP: sadism. `; + } else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) { + r += `SP: masochism. `; + } else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) { + r += `SP: dominance. `; + } else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) { + r += `SP: pregnancy. `; + } else if ((child.fetish !== "none") && (child.clitSetting === "vanilla")) { + r += `SP: vanilla. `; + } else if ((child.energy <= 95) && (child.clitSetting === "all")) { + r += `SP: all. `; + } else if ((child.energy > 5) && (child.clitSetting === "none")) { + r += `SP: none. `; + } else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) { + r += `SP: monitoring. `; + } + } else { + switch (child.clitSetting) { + case "off": + r += `SP off. `; break; - case "smart bullet vibrator": - r += `Attached smart bullet vibrator. `; + case "submissive": + r += `SP: submissive. `; break; - case "dildo": - r += `Vaginal dildo. `; + case "oral": + r += `SP: oral. `; break; - case "large dildo": - r += `Large vaginal dildo. `; + case "humiliation": + r += `SP: humiliation. `; break; - case "huge dildo": - r += `Huge vaginal dildo. `; + case "anal": + r += `SP: anal. `; break; - case "long dildo": - r += `Long vaginal dildo. `; + case "boobs": + r += `SP: breasts. `; break; - case "long, large dildo": - r += `Long and large vaginal dildo. `; + case "sadist": + r += `SP: sadism. `; break; - case "long, huge dildo": - r += `Long and wide vaginal dildo. `; + case "masochist": + r += `SP: masochism. `; + break; + case "dom": + r += `SP: dominance. `; + break; + case "pregnancy": + r += `SP: pregnancy. `; + break; + case "vanilla": + r += `SP: vanilla. `; + break; + case "all": + r += `SP: all. `; + break; + case "none": + r += `SP: none. `; break; } } - if (child.vaginalAttachment !== "none") { - switch (child.vaginalAttachment) { - case "vibrator": - r += `Vibrating dildo. `; - break; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longSmartAttraction(child) { + if (child.attrKnown === 1) { + if ((child.attrXX < 100) && (child.clitSetting === "women")) { + r += `SP: women. `; + } else if ((child.attrXY < 100) && (child.clitSetting === "men")) { + r += `SP: men. `; + } + } else { + if (child.clitSetting === "women") { + r += `SP: women. `; + } else if (child.clitSetting === "men") { + r += `SP: men. `; } - r += " "; } } /** * @param {App.Entity.SlaveState} child */ - function longDickAcc(child) { - switch (child.dickAccessory) { - case "sock": - r += `Cock sock. `; + function longBehaviorFlaw(child) { + r += `<span class="red">`; + switch (child.behavioralFlaw) { + case "arrogant": + r += `Arrogant. `; + break; + case "bitchy": + r += `Bitchy. `; + break; + case "odd": + r += `Odd. `; + break; + case "hates men": + r += `Hates men. `; + break; + case "hates women": + r += `Hates women. `; + break; + case "gluttonous": + r += `Stress eater. `; + break; + case "anorexic": + r += `Anorexic. `; + break; + case "devout": + r += `Devoutly religious. `; + break; + case "liberated": + r += `Mentally liberated. `; + break; + default: + child.behavioralFlaw = "none"; + break; + } + r += `</span> `; + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longSexFlaw(child) { + switch (child.sexualFlaw) { + case "hates oral": + r += `<span class="red">Hates oral.</span> `; + break; + case "hates anal": + r += `<span class="red">Hates anal.</span> `; + break; + case "hates penetration": + r += `<span class="red">Hates penetration.</span> `; + break; + case "shamefast": + r += `<span class="red">Shamefast.</span> `; + break; + case "idealistic": + r += `<span class="red">Sexually idealistic.</span> `; + break; + case "repressed": + r += `<span class="red">Sexually repressed.</span> `; + break; + case "apathetic": + r += `<span class="red">Sexually apathetic.</span> `; break; - case "bullet vibrator": - r += `Frenulum bullet vibrator. `; + case "crude": + r += `<span class="red">Sexually crude.</span> `; break; - case "smart bullet vibrator": - r += `Smart frenulum bullet vibrator. `; + case "judgemental": + r += `<span class="red">Sexually judgemental.</span> `; + break; + case "cum addict": + r += `<span class="yellow">Cum addict.</span> `; + break; + case "anal addict": + r += `<span class="yellow">Anal addict.</span> `; + break; + case "attention whore": + r += `<span class="yellow">Attention whore.</span> `; + break; + case "breast growth": + r += `<span class="yellow">Breast obsession.</span> `; + break; + case "abusive": + r += `<span class="yellow">Sexually abusive.</span> `; + break; + case "malicious": + r += `<span class="yellow">Sexually malicious.</span> `; + break; + case "self hating": + r += `<span class="yellow">Self hatred.</span> `; + break; + case "neglectful": + r += `<span class="yellow">Self neglectful.</span> `; + break; + case "breeder": + r += `<span class="yellow">Breeding obsession.</span> `; + break; + default: + child.sexualFlaw = "none"; break; } } @@ -6684,36 +6223,38 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function longButtplug(child) { - switch (child.buttplug) { - case "plug": - r += `Buttplug. `; + function longBehaviorQuirk(child) { + r += `<span class="green">`; + switch (child.behavioralQuirk) { + case "confident": + r += `Confident. `; break; - case "large plug": - r += `Large buttplug. `; + case "cutting": + r += `Cutting. `; break; - case "huge plug": - r += `Huge buttplug. `; + case "funny": + r += `Funny. `; break; - case "long plug": - r += `Long buttplug. `; + case "fitness": + r += `Fitness. `; break; - case "long, large plug": - r += `Large, long buttplug. `; + case "adores women": + r += `Adores women. `; break; - case "long, huge plug": - r += `Enormous buttplug. `; + case "adores men": + r += `Adores men. `; break; - } - switch (child.buttplugAttachment) { - case "tail": - r += `Attached tail. `; + case "insecure": + r += `Insecure. `; break; - case "cat tail": - r += `Attached cat tail. `; + case "sinful": + r += `Sinful. `; break; - case "fox tail": - r += `Attached fox tail. `; + case "advocate": + r += `Advocate. `; + break; + default: + child.behavioralQuirk = "none"; break; } } @@ -6721,602 +6262,1030 @@ App.Facilities.Nursery.ChildSummary = function(child) { /** * @param {App.Entity.SlaveState} child */ - function rulesAssistant(child) { - if (child.useRulesAssistant === 0) { - r += `<span class="lightgreen">RA-Exempt</span> `; - } else if (V.abbreviateRulesets === 2 && (child.currentRules !== undefined) && (child.currentRules.length > 0)) { - r += `Rules: ${V.defaultRules.filter(x => ruleApplied(child, x)).map(x => x.name).join(", ")}`; + function longSexQuirk(child) { + switch (child.sexualQuirk) { + case "gagfuck queen": + r += `Gagfuck queen. `; + break; + case "painal queen": + r += `Painal queen. `; + break; + case "strugglefuck queen": + r += `Strugglefuck queen. `; + break; + case "tease": + r += `Tease. `; + break; + case "romantic": + r += `Romantic. `; + break; + case "perverted": + r += `Perverted. `; + break; + case "caring": + r += `Caring. `; + break; + case "unflinching": + r += `Unflinching. `; + break; + case "size queen": + r += `Size queen. `; + break; + default: + child.sexualQuirk = "none"; + break; } + r += `</span> `; } /** * @param {App.Entity.SlaveState} child */ - function origins(child) { - r += `<br> `; - if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { - r += ` `; - } - r += `<span class="gray">${child.origin}</span> `; - } - - return ChildSummaryUncached(child); -}; - -/** - * @param {App.Entity.InfantState} child - * @returns {string} - */ -App.Facilities.Nursery.LongInfantDescription = function(child) { - "use strict"; - const - V = State.variables, - PC = V.PC, - arcology = V.arcologies[0], - weeksOwned = V.week - child.weekAcquired; - - let - r = ``, - age, - title, - father, - mother; - /* eslint-disable */ - const - pronouns = getPronouns(child), - he = pronouns.pronoun, - him = pronouns.object, - his = pronouns.possessive, - hers = pronouns.possessivePronoun, - himself = pronouns.objectReflexive, - boy = pronouns.noun, - He = capFirstChar(he), - His = capFirstChar(his); - /* eslint-enable */ - - if (child.father === -1 && child.mother === -1) { - father = PC; - mother = PC; - } else { - if (child.father === -1) { - father = PC; - mother = getSlave(child.mother); + function shortExtendedFamily(child) { + let handled = 0; + if (child.mother > 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.mother; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTermShort(child); + r += ` & ${friendShipShort}`; + handled = 1; + } + } + r += " "; } else if (child.mother === -1) { - father = getSlave(child.father); - mother = PC; - } else { - father = getSlave(child.father); - mother = getSlave(child.mother); - } - } - - // TODO: add infant art here - - r += ` `; - - r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `; - - if (typeof child.custom !== "undefined") { - if (child.custom.label) { - r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `; - } - } - - if (child.actualAge > 0) { - age = `${child.actualAge}-year-old`; - if (child.actualAge > 1) { - title = `toddler`; - } else { - title = `baby`; + r += `Your daughter`; + if (child.relationship === -3) { + r += ` & wife`; + handled = 1; + } else if (child.relationship === -2) { + r += ` & lover`; + handled = 1; + } + r += " "; + } else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) { + r += `${V.missingTable[child.mother].fullName}'s daughter `; } - } else { - if (weeksOwned > 4) { - age = `${weeksOwned * 4}-month-old`; - title = `${baby}`; - } else { - if (weeksOwned <= 1) { - age = ``; - title = `newborn`; - } else { - age = `${weeksOwned}-week-old`; - title = `baby`; + if (child.father > 0 && child.father !== child.mother) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.father; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`; + if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) { + const friendShipShort = relationshipTermShort(child); + r += ` & ${friendShipShort}`; + handled = 1; + } + } + r += " "; + } else if (child.father === -1 && child.mother !== -1) { + r += `Your daughter`; + if (child.relationship === -3) { + r += ` & wife`; + handled = 1; + } else if (child.relationship === -2) { + r += ` & lover`; + handled = 1; } + r += " "; + } else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) { + r += `${V.missingTable[child.father].fullName}'s daughter`; } - } - - r += ` is a ${age} <strong><span class="coral">${title}.</span></strong> ${He} was born in ${arcology.name} ${weeksOwned > 4 ? weeksOwned < 9 ? `about a month` : `${weeksOwned} months` : weeksOwned <= 1 ? `last week` : `${weeksOwned} weeks`}${weeksOwned > 1 ? ` ago. ` : `. `}`; - - if (typeof child.counter !== "undefined") { - const - oral = child.counter.oral, - vaginal = child.counter.vaginal, - anal = child.counter.oral, - mammary = child.counter.mammary, - penetrative = child.counter.penetrative, - total = oral + vaginal + anal + mammary + penetrative; - - if (total > 0) { - r += `and has been fucked about ${total} times, including `; - if ((vaginal + anal + mammary + penetrative) > 0) { - if (vaginal > 0) { - r += `${vaginal} vanilla, `; - } - if (anal > 0) { - r += `${anal} anal, `; + if (child.daughters === 1) { + let _ssj = V.slaves.findIndex(function(s) { + return s.mother === child.ID; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s mother`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTermShort(child); + r += ` & ${friendShipShort}`; + handled = 1; } - if (mammary > 0) { - r += `${mammary} mammary `; + } + r += " "; + _ssj = V.slaves.findIndex(function(s) { + return s.father === child.ID; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s father`; + if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) { + const friendShipShort = relationshipTermShort(child); + r += ` & ${friendShipShort}`; + handled = 1; } - if (penetrative > 0) { - r += `${penetrative} penetrating, `; + } + r += " "; + } else if (child.daughters > 1) { + r += `multiple daughters `; + } + if (child.sisters === 1) { + const _ssj = V.slaves.findIndex(function(s) { + return areSisters(s, child) > 0; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s sister`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTermShort(child); + r += `& ${friendShipShort}`; + handled = 1; } - r += ` and `; } - r += `${oral} oral sexual encounters. `; - } else { - if (weeksOwned >= 1) { - r += `and `; - } else { - r += `. ${He} `; + r += " "; + } else if (child.sisters > 1) { + r += `multiple sisters `; + } + if (child.relationship > 0 && handled !== 1) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationshipTarget; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s`; + const friendShipShort = relationshipTermShort(child); + r += ` ${friendShipShort}`; } + } else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) { + r += `Your wife`; + } else if (child.relationship === -2) { + r += `E Bonded`; + } else if (child.relationship === -1) { + r += `E Slut`; + } + } - r += `has had little or no sexual experience `; - if (child.weekAcquired !== 0) { - r += `as your slave `; - } else { - r += `in your new arcology `; + /** + * @param {App.Entity.SlaveState} child + */ + function shortLegacyFamily(child) { + if (child.relation !== 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationTarget; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s ${child.relation}`; } - r += `yet. `; - - let sortedCounts = []; - sortedCounts.push( - {type: "oral", value: oral}, - {type: "vaginal", value: vaginal}, - {type: "anal", value: anal}, - {type: "mammary", value: mammary}, - {type: "penetrative", value: penetrative} - ); - sortedCounts = sortedCounts.sort(function(a, b) { // sorts the counts from largest to smallest - return b.value - a.value; + } + if (child.relationship > 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationshipTarget; }); - - if (sortedCounts[0].type === "oral") { - if (((weeksOwned * 112) / oral) < 4) { - r += `Remarkably, this means that ${he}'s sucked something off `; - if (((weeksOwned * 112) / oral) < 1) { - r += `more than once every hour `; - } else if (((weeksOwned * 112) / oral) < 1.5) { - r += `about once every hour `; - } else if (((weeksOwned * 112) / oral) < 2.5) { - r += `about once every two hours `; - } else if (((weeksOwned * 112) / oral) < 3.5) { - r += `about once every three hours `; - } else { - r += `about once every four hours `; - } - r += ` ${he}'s spent awake. `; - } - } else if (sortedCounts[0].type === "vaginal") { - if (((weeksOwned * 112) / oral) < 4) { - r += `Remarkably, this means that ${his} pussy has been fucked `; - if (((weeksOwned * 112) / oral) < 1) { - r += `more than once every hour `; - } else if (((weeksOwned * 112) / oral) < 1.5) { - r += `about once every hour `; - } else if (((weeksOwned * 112) / oral) < 2.5) { - r += `about once every two hours `; - } else if (((weeksOwned * 112) / oral) < 3.5) { - r += `about once every three hours `; - } else { - r += `about once every four hours `; - } - r += ` ${he}'s spent awake. `; - } - } else if (sortedCounts[0].type === "anal") { - if (((weeksOwned * 112) / oral) < 4) { - r += `Remarkably, this means that ${he}'s been buttfucked `; - if (((weeksOwned * 112) / oral) < 1) { - r += `more than once every hour `; - } else if (((weeksOwned * 112) / oral) < 1.5) { - r += `about once every hour `; - } else if (((weeksOwned * 112) / oral) < 2.5) { - r += `about once every two hours `; - } else if (((weeksOwned * 112) / oral) < 3.5) { - r += `about once every three hours `; - } else { - r += `about once every four hours `; - } - r += ` ${he}'s spent awake. `; - } - } else if (sortedCounts[0].type === "mammary") { - if (((weeksOwned * 112) / oral) < 4) { - r += `Remarkably, this means that ${he}'s put ${his} tits to work `; - if (((weeksOwned * 112) / oral) < 1) { - r += `more than once every hour `; - } else if (((weeksOwned * 112) / oral) < 1.5) { - r += `about once every hour `; - } else if (((weeksOwned * 112) / oral) < 2.5) { - r += `about once every two hours `; - } else if (((weeksOwned * 112) / oral) < 3.5) { - r += `about once every three hours `; - } else { - r += `about once every four hours `; - } - r += ` ${he}'s spent awake. `; - } - } else if (sortedCounts[0].type === "penetrative") { - if (((weeksOwned * 112) / oral) < 4) { - r += `Remarkably, this means that ${he}'s pounded a hole `; - if (((weeksOwned * 112) / oral) < 1) { - r += `more than once every hour `; - } else if (((weeksOwned * 112) / oral) < 1.5) { - r += `about once every hour `; - } else if (((weeksOwned * 112) / oral) < 2.5) { - r += `about once every two hours `; - } else if (((weeksOwned * 112) / oral) < 3.5) { - r += `about once every three hours `; - } else { - r += `about once every four hours `; - } - r += ` ${he}'s spent awake. `; + if (_ssj !== -1) { + const friendship = relationshipTerm(child); + if (child.relationshipTarget !== child.relationTarget) { + r += `${SlaveFullName(V.slaves[_ssj])}'s`; + } else { + r += ` &`; } + r += ` ${friendship}`; } + } else if (child.relationship === -3) { + r += `Your wife`; + } else if (child.relationship === -2) { + r += `E Bonded`; + } else if (child.relationship === -1) { + r += `E Slut`; } } - /* OPEN FAMILY */ + /** + * @param {App.Entity.SlaveState} child + */ + function shortClone(child) { + if (child.clone !== 0) { + r += ` Clone`; + } + } - if (father === PC && mother === PC) { - r += `${He} is <span class="lightgreen">your child;</span> you knocked yourself up with ${him}. `; - } else if (father === mother) { - r += `He was <span class="lightgreen">both fathered and mothered by ${father.slaveName}.</span> `; - } else { - if (father === PC) { - r += `${He} is <span class="lightgreen">your child;</span> you knocked ${his} mother up. `; - } else if (mother === PC) { - r += `${He} is <span class="lightgreen">your child;</span> you gave birth to ${him}. `; - } else { - let pName; - if (father > 0) { - if (child.father in V.missingTable && V.showMissingSlaves) { - pName = V.slaves[V.slaveIndices[child.father]].slaveName; - } else { - pName = `your former slave ${V.missingTable[child.father].slaveName}`; - } - r += `${He} was <span class="lightgreen">fathered by ${pName}'s</span> virile dick. `; - } else if (mother > 0) { - if (child.mother in V.missingTable && V.showMissingSlaves) { - pName = V.slaves[V.slaveIndices[child.mother]].slaveName; + /** + * @param {App.Entity.SlaveState} child + */ + function shortRival(child) { + if (child.rivalry !== 0) { + r += ` `; + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.rivalryTarget; + }); + if (_ssj !== -1) { + r += `<span class="lightsalmon">`; + if (child.rivalry <= 1) { + r += `Disl ${SlaveFullName(V.slaves[_ssj])}`; + } else if (child.rivalry <= 2) { + r += `${SlaveFullName(V.slaves[_ssj])}'s rival`; } else { - pName = `your former slave ${V.missingTable[child.mother].slaveName}`; + r += `Hates ${SlaveFullName(V.slaves[_ssj])}`; } - r += `${He} was born from ${pName}'s fertile womb. `; + r += `</span> `; } } } - if (V.showDistantRelatives) { - const - mi = mother, - fi = father; - - let - mmi, - fmi, - mfi, - ffi; - - if (typeof mi !== "undefined") { - mmi = mother.mother; - fmi = mother.father; - } else if (mother === PC) { - mmi = PC.mother; - fmi = PC.father; - } - - if (typeof fi !== "undefined") { - mfi = father.mother; - ffi = father.father; - } else if (father === PC) { - mfi = PC.mother; - ffi = PC.father; - } - - // TODO: if this starts breaking, add undef checks - - // grandparents - if (mmi === PC || fmi === PC || mfi === PC || ffi === PC) { - if (mi === fi) { - if (PC === mother.mother && PC === father.father) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You impregnated yourself with ${his} sole biological parent. `; - } else if (PC === mother.mother) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} sole biological parent. `; - } else if (PC === father.father) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} sole biological parent. `; + /** + * @param {App.Entity.SlaveState} child + */ + function longExtendedFamily(child) { + let handled = 0; + if (child.mother > 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.mother; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTerm(child); + r += ` and ${friendShipShort}`; + handled = 1; } - } else if (PC === mother.mother && PC === father.mother) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to both of ${his} parents. `; - } else if (PC === mother.father && PC === father.father) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered both of ${his} parents. `; - } else if (PC === mother.mother) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} mother. `; - } else if (PC === mother.father) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} mother. `; - } - if (PC === father.mother) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You gave birth to ${his} father. `; - } else if (PC === father.father) { - r += `${He} is <span class="lightgreen">your grandchild.</span> You fathered ${his} father. `; + r += `.</span> `; } - } else { - if (mmi === ffi) { - r += `${His} sole granparent is ${mmi.slaveName}.</span> `; + } else if (child.mother === -1) { + r += `Your `; + if (child.relationship === -3) { + r += `<span class="lightgreen">daughter and wife.</span> `; + handled = 1; + } else if (child.relationship === -2) { + r += `<span class="lightgreen">daughter and lover.</span> `; + handled = 1; } else { - if (mmi === mfi) { - r += `${His} sole <span class="lightgreen">grandparent is ${mmi}.</span> `; - } else { - r += `${His} maternal <span class="lightgreen">grandmother is ${mmi.slaveName}.</span> ${His} paternal <span class="lightgreen">grandmother is ${mfi.slaveName}.</span> `; - } - if (fmi === ffi) { - r += `${His} sole <span class="lightgreen">grandparent is ${ffi}.</span> `; - } else { - r += `${His} maternal <span class="lightgreen">grandfather is ${fmi.slaveName}.</span> ${His} paternal <span class="lightgreen">grandfather is ${ffi.slaveName}.</span> `; + r += `<span class="lightgreen">daughter.</span> `; + } + } else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) { + r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `; + } + if (child.father > 0 && child.father !== child.mother) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.father; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTerm(child); + r += ` and ${friendShipShort}`; + handled = 1; } + r += `.</span> `; + } + } else if (child.father === -1 && child.father !== child.mother) { + r += `Your `; + if (child.relationship === -3) { + r += `<span class="lightgreen">daughter and wife.</span> `; + handled = 1; + } else if (child.relationship === -2) { + r += `<span class="lightgreen">daughter and lover.</span> `; + handled = 1; + } else { + r += `<span class="lightgreen">daughter.</span> `; } + } else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) { + r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `; } - - // aunts - for (let i = 0; i < V.slaves.length; i++) { - if (V.slaves[i] === mother || V.slaves[i] === father) { - for (let j = 0; j < V.slaves.length; j++) { - if (V.slaves[j].genes === "XX") { - if (areSisters(V.slaves[i], V.slaves[j]) === 1 || areSisters(V.slaves[i], V.slaves[j] === 2)) { - V.children.push(V.slaves[j]); - } - } + if (child.daughters === 1) { + let _ssj = V.slaves.findIndex(function(s) { + return s.mother === child.ID; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTerm(child); + r += ` and ${friendShipShort}`; + handled = 1; + } + r += `.</span> `; + } + _ssj = V.slaves.findIndex(function(s) { + return s.father === child.ID; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTerm(child); + r += ` and ${friendShipShort}`; + handled = 1; } + r += `.</span> `; + } + } else if (child.daughters > 1) { + if (child.daughters > 10) { + r += `<span class="lightgreen">Has tons of daughters.</span> `; + } else if (child.daughters > 5) { + r += `<span class="lightgreen">Has many daughters.</span> `; + } else { + r += `<span class="lightgreen">Has several daughters.</span> `; } } - - if (V.children.length > 0) { - r += `${He} `; - if (V.children.length > 2) { - r += `has <span class="lightgreen">many aunts, `; - for (j = 0; j < V.children.length; j++) { - if (j < V.children.length - 1) { - r += `${V.children[j].slaveName}, `; - } else { - r += `and ${V.children[j].slaveName}.</span> `; - } + if (child.sisters === 1) { + const _ssj = V.slaves.findIndex(function(s) { + return areSisters(s, child) > 0; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`; + if (child.relationshipTarget === V.slaves[_ssj].ID) { + const friendShipShort = relationshipTerm(child); + r += ` and ${friendShipShort}`; + handled = 1; } - } else if (V.children.length === 2) { - r += `has <span class="lightgreen">two aunts, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; + r += `.</span> `; + } + } else if (child.sisters > 1) { + if (child.sisters > 10) { + r += `<span class="lightgreen">One of many sisters.</span> `; + } else if (child.sisters > 5) { + r += `<span class="lightgreen">Has many sisters.</span> `; } else { - r += `has <span class="lightgreen">an aunt, ${V.children[0].slaveName}.</span> `; + r += `<span class="lightgreen">Has several sisters.</span> `; } } - V.children = []; + if (child.relationship > 0 && handled !== 1) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationshipTarget; + }); + if (_ssj !== -1) { + const friendship = relationshipTerm(child); + r += `${SlaveFullName(V.slaves[_ssj])}'s `; + r += `<span class="lightgreen">${friendship}.</span> `; + } + } else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) { + r += `<span class="lightgreen">Your wife.</span> `; + } else if (child.relationship === -2) { + r += `<span class="lightgreen">Emotionally bonded to you.</span> `; + } else if (child.relationship === -1) { + r += `<span class="lightgreen">Emotional slut.</span> `; + } + } - // uncles - for (let i = 0; i < V.slaves.length; i++) { - if (V.slaves[i] === mother || V.slaves[i] === father) { - for (let j = 0; j < V.slaves.length; j++) { - if (V.slaves[j].genes === "XY") { - if (areSisters(V.slaves[i], V.slaves[j]) === 1 || areSisters(V.slaves[i], V.slaves[j] === 2)) { - V.children.push(V.slaves[j]); - } - } + /** + * @param {App.Entity.SlaveState} child + */ + function longLegacyFamily(child) { + if (child.relation !== 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationTarget; + }); + if (_ssj !== -1) { + r += `${SlaveFullName(V.slaves[_ssj])}'s `; + if (child.relationshipTarget !== child.relationTarget) { + r += `<span class="lightgreen">${child.relation}.</span> `; + } else { + r += `<span class="lightgreen">${child.relation}</span> `; + } + if (child.relationship <= 0) { + r += ` `; } } } - - if (V.children.length > 0) { - r += `${He} `; - if (V.children.length > 2) { - r += `has <span class="lightgreen">many uncles, `; - for (j = 0; j < V.children.length; j++) { - if (j < V.children.length - 1) { - r += `${V.children[j].slaveName}, `; - } else { - r += `and ${V.children[j].slaveName}.</span> `; - } + if (child.relationship > 0) { + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.relationshipTarget; + }); + if (_ssj !== -1) { + const friendship = relationshipTerm(child); + if (child.relationshipTarget !== child.relationTarget) { + r += `${SlaveFullName(V.slaves[_ssj])}'s `; + } else { + r += ` and `; } - } else if (V.children.length === 2) { - r += `has <span class="lightgreen">two uncles, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; - } else { - r += `has <span class="lightgreen">an uncle, ${V.children[0].slaveName}.</span> `; + r += `<span class="lightgreen">${friendship}.</span> `; } + } else if (child.relationship === -3) { + r += `<span class="lightgreen">Your wife.</span> `; + } else if (child.relationship === -2) { + r += `<span class="lightgreen">Emotionally bonded to you.</span> `; + } else if (child.relationship === -1) { + r += `<span class="lightgreen">Emotional slut.</span> `; } - V.children = []; + } - // nieces - for (let i = 0; i < V.slaves.length; i++) { - if (areSisters(V.slaves[i], child) === 1 || areSisters(V.slaves[i], child) === 2) { - for (let j = 0; j < V.slaves.length; j++) { - if (V.slaves[i].ID !== V.slaves[j].ID && V.slaves[j].genes === "XX") { - if (V.slaves[i].ID === V.slaves[j].mother || V.slaves[i].ID === V.slaves[j].father) { - V.children.push(V.slaves[j]); - } - } - } - } + /** + * @param {App.Entity.SlaveState} child + */ + function longClone(child) { + if (child.clone !== 0) { + r += ` <span class="skyblue">Clone of ${child.clone}.</span> `; } + } - if (V.children.length > 0) { - r += `${He} `; - if (V.children.length > 2) { - r += `has <span class="lightgreen">many nieces, `; - for (j = 0; j < V.children.length; j++) { - if (j < V.children.length - 1) { - r += `${V.children[j].slaveName}, `; - } else { - r += `and ${V.children[j].slaveName}.</span> `; - } + /** + * @param {App.Entity.SlaveState} child + */ + function longRival(child) { + if (child.rivalry !== 0) { + r += ` `; + const _ssj = V.slaves.findIndex(function(s) { + return s.ID === child.rivalryTarget; + }); + if (_ssj !== -1) { + if (child.rivalry <= 1) { + r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `; + } else if (child.rivalry <= 2) { + r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `; + } else { + r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `; } - } else if (V.children.length === 2) { - r += `has <span class="lightgreen">two nieces, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; - } else { - r += `has <span class="lightgreen">a niece, ${V.children[0].slaveName}.</span> `; } + r += " "; + } + } + + /** + * @param {App.Entity.SlaveState} child + */ + function longClothes(child) { + switch (child.clothes) { + case "attractive lingerie": + r += `Nice lingerie. `; + break; + case "a succubus outfit": + r += `Succubus outfit. `; + break; + case "a string bikini": + r += `String bikini. `; + break; + case "a scalemail bikini": + r += `Scalemail bikini. `; + break; + case "striped panties": + r += `Striped panties. `; + break; + case "a monokini": + r += `Monokini. `; + break; + case "an apron": + r += `Apron. `; + break; + case "a cybersuit": + r += `Cybersuit. `; + break; + case "cutoffs and a t-shirt": + r += `Cutoffs, t-shirt. `; + break; + case "a slutty outfit": + r += `Slutty outfit. `; + break; + case "uncomfortable straps": + r += `Leather straps. `; + break; + case "a fallen nuns habit": + r += `Slutty habit. `; + break; + case "a chattel habit": + r += `Chattel habit. `; + break; + case "a penitent nuns habit": + r += `Cilice. `; + break; + case "slutty jewelry": + r += `Bangles. `; + break; + case "attractive lingerie for a pregnant woman": + r += `Preggo lingerie. `; + break; + case "a maternity dress": + r += `Maternity dress. `; + break; + case "stretch pants and a crop-top": + r += `Stretch pants, crop-top. `; + break; + case "harem gauze": + r += `Harem outfit. `; + break; + case "a child gown": + r += `Slave gown. `; + break; + case "a halter top dress": + r += `Halter top dress. `; + break; + case "a mini dress": + r += `Mini dress. `; + break; + case "a ball gown": + r += `Ball gown. `; + break; + case "slutty business attire": + r += `Slutty suit. `; + break; + case "nice business attire": + r += `Nice suit. `; + break; + case "a comfortable bodysuit": + r += `Bodysuit. `; + break; + case "a military uniform": + r += `Military uniform. `; + break; + case "a schutzstaffel uniform": + r += `Schutzstaffel uniform. `; + break; + case "a slutty schutzstaffel uniform": + r += `Slutty Schutzstaffel uniform. `; + break; + case "a red army uniform": + r += `Red Army uniform. `; + break; + case "a long qipao": + r += `Long Qipao. `; + break; + case "battlearmor": + r += `Battlearmor. `; + break; + case "a mounty outfit": + r += `Mounty outfit. `; + break; + case "a dirndl": + r += `Dirndl. `; + break; + case "lederhosen": + r += `Lederhosen. `; + break; + case "a biyelgee costume": + r += `Biyelgee costume. `; + break; + case "a leotard": + r += `Leotard. `; + break; + case "a bunny outfit": + r += `Bunny outfit. `; + break; + case "a slutty maid outfit": + r += `Slutty maid. `; + break; + case "a nice maid outfit": + r += `Nice maid. `; + break; + case "a slutty nurse outfit": + r += `Slutty nurse. `; + break; + case "a nice nurse outfit": + r += `Nice nurse. `; + break; + case "a schoolgirl outfit": + r += `Schoolgirl outfit. `; + break; + case "a kimono": + r += `Kimono. `; + break; + case "a hijab and abaya": + r += `Hijab and abaya. `; + break; + case "battledress": + r += `Battledress. `; + break; + case "a latex catsuit": + r += `Nice latex. `; + break; + case "restrictive latex": + r += `Bondage latex. `; + break; + case "conservative clothing": + r += `Conservative clothing. `; + break; + case "chains": + r += `Chains. `; + break; + case "overalls": + r += `Overalls. `; + break; + case "a cheerleader outfit": + r += `Cheerleader. `; + break; + case "clubslut netting": + r += `Netting. `; + break; + case "shibari ropes": + r += `Shibari. `; + break; + case "Western clothing": + r += `Chaps. `; + break; + case "body oil": + r += `Body oil. `; + break; + case "a toga": + r += `Toga. `; + break; + case "a huipil": + r += `Huipil. `; + break; + case "a slutty qipao": + r += `Slutty qipao. `; + break; + case "spats and a tank top": + r += `Spats, tank top. `; + break; + case "a burkini": + r += `Burkini. `; + break; + case "a niqab and abaya": + r += `Niqab and abaya. `; + break; + case "a klan robe": + r += `Klan robe. `; + break; + case "a hijab and blouse": + r += `Hijab and blouse. `; + break; + case "a burqa": + r += `Burqa. `; + break; + case "kitty lingerie": + r += `Kitty lingerie. `; + break; + case "a tube top and thong": + r += `Tube top, thong. `; + break; + case "a button-up shirt and panties": + r += `Button-up shirt, panties. `; + break; + case "a gothic lolita dress": + r += `Gothic lolita dress. `; + break; + case "a hanbok": + r += `Hanbok. `; + break; + case "a bra": + r += `Nice bra. `; + break; + case "a button-up shirt": + r += `Nice button-up shirt. `; + break; + case "a nice pony outfit": + r += `Nice pony outfit. `; + break; + case "a sweater": + r += `Nice sweater. `; + break; + case "a tank-top": + r += `Nice tank-top. `; + break; + case "a thong": + r += `Nice thong. `; + break; + case "a tube top": + r += `Nice tube top. `; + break; + case "a one-piece swimsuit": + r += `Swimsuit. `; + break; + case "a police uniform": + r += `Police uniform. `; + break; + case "a striped bra": + r += `Striped bra. `; + break; + case "a skimpy loincloth": + r += `Skimpy loincloth. `; + break; + case "a slutty klan robe": + r += `Slutty klan robe. `; + break; + case "a slutty pony outfit": + r += `Slutty pony outfit. `; + break; + case "a Santa dress": + r += `Santa dress. `; + break; + case "a sports bra": + r += `Sports bra. `; + break; + case "a sweater and panties": + r += `Sweater, panties. `; + break; + case "a t-shirt": + r += `T-shirt. `; + break; + case "a tank-top and panties": + r += `Tank-top, panties. `; + break; + case "a t-shirt and thong": + r += `Thong, t-shirt. `; + break; + case "an oversized t-shirt and boyshorts": + r += `Over-sized t-shirt, boy shorts. `; + break; + case "an oversized t-shirt": + r += `Nice over-sized t-shirt. `; + break; + case "a t-shirt and jeans": + r += `Blue jeans, t-shirt. `; + break; + case "boyshorts": + r += `Boy shorts. `; + break; + case "cutoffs": + r += `Jean shorts. `; + break; + case "leather pants and pasties": + r += `Leather pants, pasties. `; + break; + case "leather pants": + r += `Nice leather pants. `; + break; + case "panties": + r += `Nice panties. `; + break; + case "sport shorts and a t-shirt": + r += `Nice sport shorts, shirt. `; + break; + case "a t-shirt and panties": + r += `Panties, t-shirt. `; + break; + case "panties and pasties": + r += `Pasties, panties. `; + break; + case "striped underwear": + r += `Striped underwear`; + break; + case "sport shorts and a sports bra": + r += `Shorts, bra. `; + break; + case "jeans": + r += `Tight blue jeans. `; + break; + case "a sweater and cutoffs": + r += `Jean shorts, sweater. `; + break; + case "leather pants and a tube top": + r += `Leather pants, tube top. `; + break; + case "sport shorts": + r += `Shorts. `; + break; + default: + r += `Naked. `; + break; } - V.children = []; + } - // nephews - for (let i = 0; i < V.slaves.length; i++) { - if (areSisters(V.slaves[i], child) === 1 || areSisters(V.slaves[i], child) === 2) { - for (let j = 0; j < V.slaves.length; j++) { - if (V.slaves[i].ID !== V.slaves[j].ID && V.slaves[j].genes === "XY") { - if (V.slaves[i].ID === V.slaves[j].mother || V.slaves[i].ID === V.slaves[j].father) { - V.children.push(V.slaves[j]); - } - } - } - } + /** + * @param {App.Entity.SlaveState} child + */ + function longCollar(child) { + switch (child.collar) { + case "uncomfortable leather": + r += `Leather collar. `; + break; + case "tight steel": + r += `Steel collar. `; + break; + case "preg biometrics": + r += `Pregnancy biometrics collar. `; + break; + case "cruel retirement counter": + r += `Cruel counter collar. `; + break; + case "shock punishment": + r += `Shock collar. `; + break; + case "dildo gag": + r += `Dildo gag. `; + break; + case "massive dildo gag": + r += `Throat-bulging dildo gag. `; + break; + case "neck corset": + r += `Neck corset. `; + break; + case "stylish leather": + r += `Stylish leather collar. `; + break; + case "satin choker": + r += `Satin choker. `; + break; + case "silk ribbon": + r += `Silken ribbon. `; + break; + case "heavy gold": + r += `Gold collar. `; + break; + case "bowtie": + r += `Bowtie collar. `; + break; + case "pretty jewelry": + r += `Pretty collar. `; + break; + case "nice retirement counter": + r += `Nice counter collar. `; + break; + case "bell collar": + r += `Bell collar. `; + break; + case "leather with cowbell": + r += `Cowbell collar. `; + break; + case "ancient Egyptian": + r += `Wesekh. `; + break; + case "ball gag": + r += `Ball gag. `; + break; + case "bit gag": + r += `Bit gag. `; + break; + case "porcelain mask": + r += `Porcelain mask. `; + break; } + } - if (V.children.length > 0) { - r += `${He} `; - if (V.children.length > 2) { - r += `has <span class="lightgreen">many nephews, `; - for (j = 0; j < V.children.length; j++) { - if (j < V.children.length - 1) { - r += `${V.children[j].slaveName}, `; - } else { - r += `and ${V.children[j].slaveName}.</span> `; - } - } - } else if (V.children.length === 2) { - r += `has <span class="lightgreen">two nephews, ${V.children[0].slaveName}, and ${V.children[1].slaveName}.</span> `; - } else { - r += `has <span class="lightgreen">a nephew, ${V.children[0].slaveName}.</span> `; - } + /** + * @param {App.Entity.SlaveState} child + */ + function longBelly(child) { + switch (child.bellyAccessory) { + case "shapewear": + r += `Shapewear. `; + break; + case "a small empathy belly": + r += `Small fake belly. `; + break; + case "a medium empathy belly": + r += `Medium fake belly. `; + break; + case "a large empathy belly": + r += `Large fake belly. `; + break; + case "a huge empathy belly": + r += `Huge fake belly. `; + break; + case "a corset": + r += `Corset. `; + break; + case "an extreme corset": + r += `Extreme corsetage. `; + break; } - V.children = []; + } - let - twins = [], - sisters = [], - brothers = [], - halfSisters = [], - halfBrothers = [], - cousins = []; + /** + * @param {App.Entity.SlaveState} child + */ + function longLegs(child) { + if (child.legAccessory === "short stockings") { + r += `Short stockings. `; + } else if (child.legAccessory === "long stockings") { + r += `Long stockings. `; + } + } - for (let i = 0; i < V.slaves.length; i++) { - let sisterCheck = areSisters(V.slaves[i], child); - if (sisterCheck === 1) { - twins.push(V.slaves[i]); - } - if (sisterCheck === 2) { - (V.slaves[i].genes === "XX" ? sisters : brothers).push(V.slaves[i]); - } - if (sisterCheck === 3) { - (V.slaves[i].genes === "XX" ? halfSisters : halfBrothers).push(V.slaves[i]); - } - if (V.showDistantRelatives) { - if (areCousins(V.slaves[i], child)) { - cousins.push(V.slaves[i]); - } - } + /** + * @param {App.Entity.SlaveState} child + */ + function longShoes(child) { + if (child.shoes === "heels") { + r += `Heels. `; + } else if (child.shoes === "pumps") { + r += `Pumps. `; + } else if (child.shoes === "extreme heels") { + r += `Extreme heels. `; + } else if (child.shoes === "boots") { + r += `Boots. `; + } else if (child.heels === 1) { + r += `<span class="yellow">Crawling.</span> `; + } else if (child.shoes === "flats") { + r += `Flats. `; } + } - // twins - if (twins.length > 0) { - r += `${He} `; - if (twins.length > 2) { - r += `<span class="lightgreen">shared a cramped womb with ${twins.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })}</span> `; - } else if (twins.length === 2) { - r += `is <span class="lightgreen">one of a set of triplets; ${twins[0].slaveName} and ${twins[1].slaveName}</span> complete the trio. `; - } else { - r += `is <span class="lightgreen">twins with ${twins[0].slaveName}.</span> `; - } + /** + * @param {App.Entity.SlaveState} child + */ + function longChastity(child) { + if (child.chastityAnus === 1 && child.chastityPenis === 1 && child.chastityVagina === 1) { + r += `Full chastity. `; + } else if (child.chastityPenis === 1 && child.chastityVagina === 1) { + r += `Genital chastity. `; + } else if ((child.chastityAnus === 1 && child.chastityVagina === 1) || (child.chastityAnus === 1 && child.chastityPenis === 1)) { + r += `Combined chastity. `; + } else if (child.chastityVagina === 1) { + r += `Vaginal chastity. `; + } else if (child.chastityPenis === 1) { + r += `Chastity cage. `; + } else if (child.chastityAnus === 1) { + r += `Anal chastity. `; } + } - // sisters - if (sisters.length > 0) { - if (sisters.length > 1) { - r += `<span class="lightgreen">${sisters.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })} are ${his} sisters.</span> `; - } else { - r += `<span class="lightgreen">${sisters[0].slaveName} is $his sister. `; + /** + * @param {App.Entity.SlaveState} child + */ + function longVaginalAcc(child) { + if (child.vaginalAttachment !== "vibrator") { + switch (child.vaginalAccessory) { + case "bullet vibrator": + r += `Attached bullet vibrator. `; + break; + case "smart bullet vibrator": + r += `Attached smart bullet vibrator. `; + break; + case "dildo": + r += `Vaginal dildo. `; + break; + case "large dildo": + r += `Large vaginal dildo. `; + break; + case "huge dildo": + r += `Huge vaginal dildo. `; + break; + case "long dildo": + r += `Long vaginal dildo. `; + break; + case "long, large dildo": + r += `Long and large vaginal dildo. `; + break; + case "long, huge dildo": + r += `Long and wide vaginal dildo. `; + break; } } - - // brothers - if (brothers.length > 0) { - if (brothers.length > 1) { - r += `<span class="lightgreen">${brothers.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })} are ${his} brothers.</span> `; - } else { - r += `<span class="lightgreen">${brothers[0].slaveName} is $his brother. `; + if (child.vaginalAttachment !== "none") { + switch (child.vaginalAttachment) { + case "vibrator": + r += `Vibrating dildo. `; + break; } + r += " "; } + } - // half-sisters - children = V.slaves.filter(function(s) { - return areSisters(child, s) === 3 && s.genes === "XX"; - }); - if (children.length > 2) { - r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })} are half-sisters to ${him}.</span> `; - } else if (children.length === 2) { - r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are half-sisters to ${him}.</span> `; - } else { - r += `<span class="lightgreen">${children[0].slaveName} is a half-sister to ${him}.</span> `; + /** + * @param {App.Entity.SlaveState} child + */ + function longDickAcc(child) { + switch (child.dickAccessory) { + case "sock": + r += `Cock sock. `; + break; + case "bullet vibrator": + r += `Frenulum bullet vibrator. `; + break; + case "smart bullet vibrator": + r += `Smart frenulum bullet vibrator. `; + break; } + } - // half-brothers - children = V.slaves.filter(function(s) { - return areSisters(child, s) === 3 && s.genes === "XY"; - }); - if (children.length > 2) { - r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })} are half-brothers to ${him}.</span> `; - } else if (children.length === 2) { - r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are half-brothers to ${him}.</span> `; - } else { - r += `<span class="lightgreen">${children[0].slaveName} is a half-brother to ${him}.</span> `; + /** + * @param {App.Entity.SlaveState} child + */ + function longButtplug(child) { + switch (child.buttplug) { + case "plug": + r += `Buttplug. `; + break; + case "large plug": + r += `Large buttplug. `; + break; + case "huge plug": + r += `Huge buttplug. `; + break; + case "long plug": + r += `Long buttplug. `; + break; + case "long, large plug": + r += `Large, long buttplug. `; + break; + case "long, huge plug": + r += `Enormous buttplug. `; + break; } - - // cousins - children = V.slaves.filter(function(s) { - return areCousins(child, s); - }); - if (children.length > 2) { - r += `<span class="lightgreen">${children.reduce(function(res, ch, i, arr) { - return (res.slaveName || res) + (i === arr.length - 1 ? ` and ` : `, `) + ch.slaveName; - })} are cousins to ${him}.</span> `; - } else if (children.length === 2) { - r += `<span class="lightgreen">${children[0].slaveName} and ${children[1].slaveName} are cousins to ${him}.</span> `; - } else { - r += `<span class="lightgreen">${children[0].slaveName} is a cousins to ${him}.</span> `; + switch (child.buttplugAttachment) { + case "tail": + r += `Attached tail. `; + break; + case "cat tail": + r += `Attached cat tail. `; + break; + case "fox tail": + r += `Attached fox tail. `; + break; } } - /* CLOSE FAMILY */ - - if (father === PC) { - if (child.eyeColor === PC.eyeColor) { - r += `${He} has your ${child.eyeColor} eyes. `; - } else { - r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes. `; - } - } else { - if (child.eyeColor === father.eyeColor) { - r += `${He} has ${his} father ${father.slaveName}'s ${child.eyeColor} eyes. `; - } else { - r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes. `; + /** + * @param {App.Entity.SlaveState} child + */ + function rulesAssistant(child) { + if (child.useRulesAssistant === 0) { + r += `<span class="lightgreen">RA-Exempt</span> `; + } else if (V.abbreviateRulesets === 2 && (child.currentRules !== undefined) && (child.currentRules.length > 0)) { + r += `Rules: ${V.defaultRules.filter(x => ruleApplied(child, x)).map(x => x.name).join(", ")}`; } } - // TODO: add something about fetishes? + /** + * @param {App.Entity.SlaveState} child + */ + function origins(child) { + r += `<br> `; + if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) { + r += ` `; + } + r += `<span class="gray">${child.origin}</span> `; + } - return r; + return ChildSummaryUncached(child); }; /** diff --git a/src/facilities/nursery/nurseryWorkaround.tw b/src/facilities/nursery/nurseryWorkaround.tw index 80494c515538d5c767bd6b23f587ba76c61cedb6..42696c16c58501a465251239d4b4426b08cf8161 100644 --- a/src/facilities/nursery/nurseryWorkaround.tw +++ b/src/facilities/nursery/nurseryWorkaround.tw @@ -2,239 +2,6 @@ <<if $cribs.length < $nursery>> <<set $activeChild.growTime = ($targetAgeNursery*52)>> + <<set $activeChild.actualAge = 0>> <<set $cribs.push($activeChild)>> - /* for later - TODO: is this going to be used? - <span id="naming"> - <<if $activeChild.mother > 0>> - <<set _tempMom = getSlave($activeChild.mother)>> - <</if>> - <<if $activeChild.father > 0>> - <<set _tempDad = getSlave($activeChild.father)>> - <</if>> - <br>Choose a name for $him. <<textbox "$activeChild.slaveName" $activeChild.slaveName>> - <<link "Commit name.">> - <<set $activeChild.birthName = $activeChild.slaveName>> - <<replace "#naming">> - You instruct $assistantName to register the new $girl as "<<print $activeSlave.slaveName>>" in the slave registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <br><<link "Have your PA assign $him a random name">> - <<replace "#naming">> - <<NewChildName $activeSlave>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<if $arcologies[0].FSPastoralist != "unset">> - <<if $activeChild.lactation > 0>> - <br><<link "Have your PA assign $him a random cow name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.cowSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <</if>> - <<if $arcologies[0].FSChattelReligionist != "unset">> - <br><<link "Have your PA assign $him a random devotional name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.chattelReligionistSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <<if $arcologies[0].FSRomanRevivalist != "unset">> - <br><<link "Have your PA assign $him a random Roman name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.romanSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif $arcologies[0].FSAztecRevivalist != "unset">> - <br><<link "Have your PA assign $him a random Aztec name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.aztecSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> - <br><<link "Have your PA assign $him a random ancient Egyptian name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.ancientEgyptianSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif $arcologies[0].FSEdoRevivalist != "unset">> - <br><<link "Have your PA assign $him a random feudal Japanese name">> - <<replace "#naming">> - <<set $activeSlave.slaveName = setup.edoSlaveNames.random()>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <<if $arcologies[0].FSDegradationist != "unset">> - <br><<link "Have your PA assign $him a degrading name">> - <<replace "#naming">> - <<run DegradingName($activeSlave)>> - <<set $activeSlave.birthName = $activeSlave.slaveName>> - $assistantName registers the new $girl as "<<print $activeSlave.slaveName>>" in your registry. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <<if $activeChild.mother > 0>> - <<setLocalPronouns _tempMom 2>> - <<if _tempMom.ID == $Concubine.ID>> - <br><<link "Permit your Concubine to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempMom $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempMom.slaveName picks a name _he2 thinks you might find attractive; from now on _his2 daughter will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempMom.relationship == -3 && (_tempMom.devotion >= -20)>> - <br><<link "Permit your wife to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempMom $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempMom.slaveName picks a name suitable for your daughter; from now on _he2 will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempMom.ID == $Bodyguard.ID>> - <br><<link "Permit your bodyguard to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempMom $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempMom.slaveName decides on "<<print $activeChild.slaveName>>" for _his2 daughter. _He2 hopes you'll find it fitting $his station. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempMom.ID == $HeadGirl.ID>> - <br><<link "Permit your headgirl to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempMom $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempMom.slaveName decides on "<<print $activeChild.slaveName>>" for _his2 daughter, and hopes it will be a name your other slaves will learn to respect. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempMom.devotion > 50 && _tempMom.trust > 50>> - <br><<link "Permit $his devoted mother to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempMom $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempMom.slaveName picks a name _he2 hopes you'll like; from now on _his2 daughter will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <</if>> - <<if $activeChild.father > 0 && $activeChild.father != $activeChild.mother>> - <<setLocalPronouns _tempDad 2>> - <<if _tempDad.ID == $Concubine.ID>> - <br><<link "Permit your Concubine to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempDad $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempDad.slaveName picks a name _he2 thinks you might find attractive; from now on _his2 daughter will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempDad.relationship == -3 && (_tempDad.devotion >= -20)>> - <br><<link "Permit your wife to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempDad $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempDad.slaveName picks a name suitable for your daughter; from now on $he will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempDad.ID == $Bodyguard.ID>> - <br><<link "Permit your bodyguard to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempDad $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempDad.slaveName decides on "<<print $activeChild.slaveName>>" for _his2 daughter. _He2 hopes you'll find it fitting $his station. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempDad.ID == $HeadGirl.ID>> - <br><<link "Permit your headgirl to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempDad $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempDad.slaveName decides on "<<print $activeChild.slaveName>>" for _his2 daughter, and hopes it will be a name your other slaves will learn to respect. - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <<elseif _tempDad.devotion > 50 && _tempDad.trust > 50>> - <br><<link "Permit $his devoted father to name _his2 daughter">> - <<replace "#naming">> - <<ParentNames _tempDad $activeChild>> - <<set $activeChild.birthName = $activeChild.slaveName>> - After some careful consideration, _tempDad.slaveName picks a name _he2 hopes you'll like; from now on _his2 daughter will be known as "<<print $activeChild.slaveName>>". - <</replace>> - <<replace "#newName">> - ''__@@.pink;$activeChild.slaveName@@__'' - <</replace>> - <</link>> - <</if>> - <</if>> - </span> - <span id="newName"> - <<set $activeChild.birthName = $activeChild.slaveName>> - </span> - */ <</if>> \ No newline at end of file