diff --git a/js/003-data/slaveSummaryData.js b/js/003-data/slaveSummaryData.js index 9152432f7a56b4c6c6dffeef8341251354f1901d..9fbb4aba84cf732e360960f1afee7421d6c61d50 100644 --- a/js/003-data/slaveSummaryData.js +++ b/js/003-data/slaveSummaryData.js @@ -1,32 +1,39 @@ +// these ratings tables are consumed by App.UI.SlaveSummaryImpl.helpers. getNumericRating() +// this function takes a value for rating and iterates a table (in the declaration order) +// until it finds a key greater or equal to the value; the found record is returned from the function +// Briefly, each dictionary entry key -> value is read as "the highest rating that still suits -> value" or +// "up to, including" +// The idea behind this is too decrease number of comparisons and retain compatibility with simple dictionaries +// without sparse keys App.Data.SlaveSummary = { long: { body: { age: { - 0: "Underage.", + 17: "Underage.", 18: "Eighteen.", 19: "Nineteen.", - 20: "Early twenties.", - 25: "Late twenties.", - 30: "Early thirties.", - 35: "Late thirties.", - 40: "Forties." + 24: "Early twenties.", + 29: "Late twenties.", + 34: "Early thirties.", + 39: "Late thirties.", + 999: "Forties." }, face: { // face value + 100 - 0: {desc: "Very ugly", style: "red"}, - 5: {desc: "Ugly", style: "red"}, - 60: {desc: "Unattractive", style: "red"}, - 90: {desc: "Average"}, - 111: {desc: "Attractive", style: "pink"}, - 141: {desc: "Beautiful", style: "pink"}, - 196: {desc: "Very beautiful", style: "pink"}, + 4: {desc: "Very ugly", style: "red"}, + 59: {desc: "Ugly", style: "red"}, + 89: {desc: "Unattractive", style: "red"}, + 110: {desc: "Average"}, + 140: {desc: "Attractive", style: "pink"}, + 195: {desc: "Beautiful", style: "pink"}, + 200: {desc: "Very beautiful", style: "pink"}, }, lips: { - 0: {desc: "Thin lips", style: "red"}, - 11: {desc: "Normal lips"}, - 21: {desc: "Pretty lips"}, - 41: {desc: "Big lips"}, - 71: {desc: "Huge lips"}, - 96: {desc: "Facepussy"} + 10: {desc: "Thin lips", style: "red"}, + 20: {desc: "Normal lips"}, + 40: {desc: "Pretty lips"}, + 70: {desc: "Big lips"}, + 95: {desc: "Huge lips"}, + 100: {desc: "Facepussy"} }, teeth: { "crooked": {desc: "Crooked teeth.", style: "yellow"}, @@ -39,16 +46,157 @@ App.Data.SlaveSummary = { "mixed": {desc: "Mixed teeth."} }, waist: { // waist value + 100 - 0: {desc: "Absurdly narrow waist", style: "pink"}, - 5: {desc: "Hourglass waist", style: "pink"}, - 60: {desc: "Feminine waist", style: "pink"}, - 90: {desc: "Average waist"}, - 111: {desc: "Unattractive waist", style: "red"}, - 141: {desc: "Ugly waist", style: "red"}, - 195: {desc: "Masculine waist", style: "red"} + 4: {desc: "Absurdly narrow waist", style: "pink"}, + 60: {desc: "Hourglass waist", style: "pink"}, + 89: {desc: "Feminine waist", style: "pink"}, + 110: {desc: "Average waist"}, + 140: {desc: "Unattractive waist", style: "red"}, + 195: {desc: "Ugly waist", style: "red"}, + 200: {desc: "Masculine waist", style: "red"} + }, + genitalia:{ + dickBalls: { // indices [dick, balls] + 3: { + 3: null, + 4: "Big balls.", + 5: "Huge balls.", + 8: "Monstrous balls.", + 99: "Hyper balls." + }, + 4: { + 3: "Big dick.", + 99: "Big dick & balls." + }, + 5: { + 4: "Huge dick.", + 99: "Huge dick & balls." + }, + 8: { + 5: "Monster dong.", + 99: "Monster dick & balls." + }, + 99: { + 8: "Hyper dong.", + 99: "Hyper dick & balls." + } + }, + holes: { // indices [vagina, anus] + 2: { + 2: null, + 3: "Gaping anus.", + 4: "Permagaped anus." + }, + 3: { + 2: "Loose pussy.", + 3: "High mileage." + }, + 4: { + 3: "Cavernous pussy.", + 4: "Blown out holes." + } + } + }, + titsAss: { // indices: [boobs, butt, FSAssetExpansionist(0,1), weight+100, muscles+100] + 499: { + 2: { + 2: { // FSAssetExpansionist doesn't matter + 109: { + 130: {desc: "Girlish figure.", style: "pink"}, + }, + }, + } + }, + 799: { + 4: null, + 6: {desc: "Big ass.", style: "pink"}, + 8: {desc: "Huge ass.", style: "pink"}, + 9: {desc: "Titanic ass.", style: "pink"}, + 999: {desc: "Hyper ass.", style: "pink"}, + }, + 1999: { + 4: {desc: "Big tits.", style: "pink"}, + 999: {desc: "Big T&A.", style: "pink"} + }, + 3999: { + 6: {desc: "Huge tits.", style: "pink"}, + 999: {desc: "Huge T&A.", style: "pink"} + }, + 11999: { + 8:{desc: "Monstrous tits.", style: "pink"}, + 999: {desc: "Enormous T&A.", style: "pink"}, + }, + 100000: { + 9: {desc: "Immobilizing tits.", style: "pink"}, + 999: {desc: "Hyper T&A.", style: "pink"} + } + }, + weight: { // indices: [weigh + 100, FSHedonisticDecadence (0,1), hips + 2, ] + 4: {desc: "Emaciated", style: "red"}, + 69: { + 2: { // FSHedonisticDecadence doesn't matter + 0: {desc: "Model-thin"}, + 5: {desc: "Very thin", style: "red"} + } + }, + 89: {desc: "Thin"}, + 110: {desc: "Trim"}, + 130: {desc: "Plush"}, + 195: { + 0: {desc: "Overweight", style: "red"}, + 1: { + 3: {desc: "Overweight", style: "red"}, + 5: {desc: "Nicely chubby"} + } + }, + 230: { + 0: {desc: "Fat", style: "red"}, + 1: { + 4: {desc: "Fat", style: "red"}, + 5: {desc: "Pleasantly soft and shapely"} + } + }, + 260: { + 0: {desc: "Obese", style: "red"}, + 1: {desc: "Amazingly voluptuous"} + }, + 290: { + 0: {desc: "Super Obese", style: "red"}, + 1: {desc: "SSBBW"} + }, + 999: { + 0: {desc: "Dangerously Obese", style: "red"}, + 1: {desc: "Perfectly massive"} + } } }, mental: { + devotion: { // devotion value + 100 + 4: {desc: "Very hateful", style: ["devotion", "hateful"]}, + 49: {desc: "Hateful", style: ["devotion", "hateful"]}, + 79: {desc: "Resistant", style: ["devotion", "resistant"]}, + 120: {desc: "Ambivalent", style: ["devotion", "ambivalent"]}, + 150: {desc: "Accepting", style: ["devotion", "accept"]}, + 195: {desc: "Devoted", style: ["devotion", "devoted"]}, + 200: {desc: "Worshipful", style: ["devotion", "worship"]} + }, + trust: { // first key: trust + 100, second key: devotion + 100 + 4: {desc: "Extremely terrified", style: ["trust", "extremely-terrified"]}, + 49: {desc: "Terrified", style: ["trust", "terrified"]}, + 79: {desc: "Frightened", style: ["trust", "frightened"]}, + 120: {desc: "Fearful", style: ["trust", "fearful"]}, + 150: { + 79: {desc: "Careful", style: ["defiant", "careful"]}, + 200: {desc: "Careful", style: ["trust", "careful"]}, + }, + 195: { + 79: {desc: "Bold", style: ["defiant", "bold"]}, + 200: {desc: "Trusting", style: ["trust", "trusting"]}, + }, + 200: { + 79: {desc: "Defiant", style: ["defiant", "full"]}, + 200: {desc: "Profoundly trusting", style: ["trust", "prof-trusting"]}, + } + }, behavioralFlaw: { "arrogant": "Arrogant.", "bitchy": "Bitchy.", @@ -246,6 +394,17 @@ App.Data.SlaveSummary = { "cleansing": "Cleansing.", "fertility": "Fertility.", }, + specialDiet: { // index: dietCum + 3 * dietMilk + 0: null, + 1: "Cum Added.", + 2: "Cum Based.", + 3: "Milk Based.", + 4: "Milk & Cum Added.", + 5: "Cum Based with Milk.", + 6: "Milk Added.", + 7: "Milk Based with Cum.", + 8: "Cum and Milk Based." + }, race: { "white": "Caucasian", "asian": "Asian", @@ -260,40 +419,42 @@ App.Data.SlaveSummary = { "southern european": "Southern European", "mixed race": "Mixed race", }, - hormoneBalance: { // rating is hormoneBalance value + 400 - 0: "Overwhelmingly masculine", - 100: "Extremely masculine", - 200: "Heavily masculine", - 300: "Very masculine", - 379: "Masculine", - 420: "Neutral", - 499: "Feminine", - 599: "Very feminine", - 699: "Heavily feminine", - 799: "Extremely feminine", - 900: "Overwhelmingly feminine" + hormoneBalance: { // rating is hormoneBalance value + 500 + 100: "Overwhelmingly masculine", + 200: "Extremely masculine", + 300: "Heavily masculine", + 400: "Very masculine", + 479: "Masculine", + 520: "Neutral", + 599: "Feminine", + 699: "Very feminine", + 799: "Heavily feminine", + 899: "Extremely feminine", + 1000: "Overwhelmingly feminine" }, health: { illness: { - 0: {desc: "Sick", style: "yellow"}, + 0: null, + 1: {desc: "Sick", style: "yellow"}, 2: {desc: "Ill", style: ["red", "strong"]}, 3: {desc: "Very ill", style: ["red", "strong"]}, - 4: {desc: "Terribly ill", style: ["red", "strong"]} + 4: {desc: "Terribly ill", style: ["red", "strong"]}, + 5: {desc: "Dangerously ill", style: ["red", "strong"]} }, tiredness: { - 0: {desc: "Energetic", style: "green"}, - 31: {desc: "Tired", style: "yellow"}, - 61: {desc: "Fatigued", style: "orange"}, - 91: {desc: "Exhausted", style: ["red", "strong"]} + 30: {desc: "Energetic", style: "green"}, + 60: {desc: "Tired", style: "yellow"}, + 90: {desc: "Fatigued", style: "orange"}, + 100: {desc: "Exhausted", style: ["red", "strong"]} }, health: { // health + 100 - 0: {desc: "On the edge of death", style: ["red", "strong"]}, - 10: {desc: "Extremely unhealthy", style: ["red", "strong"]}, - 50: {desc: "Unhealthy", style: ["red", "strong"]}, - 80: {desc: "healthy", style: "yellow"}, - 121: {desc: "Very healthy", style: "green"}, - 151: {desc: "Extremely healthy", style: "green"}, - 191: {desc: "Unnaturally healthy", style: "green"} + 10: {desc: "On the edge of death", style: ["red", "strong"]}, + 49: {desc: "Extremely unhealthy", style: ["red", "strong"]}, + 79: {desc: "Unhealthy", style: ["red", "strong"]}, + 120: {desc: "healthy", style: "yellow"}, + 150: {desc: "Very healthy", style: "green"}, + 190: {desc: "Extremely healthy", style: "green"}, + 200: {desc: "Unnaturally healthy", style: "green"} }, }, prestige: { @@ -303,6 +464,7 @@ App.Data.SlaveSummary = { 3: {desc: "Extremely prestigious.", style: "green"}, }, accent: { + 0: null, 1: {desc: "Cute accent.", style: "pink"}, 2: {desc: "Accent."}, 3: {desc: "Bad accent.", style: "red"}, @@ -314,28 +476,28 @@ App.Data.SlaveSummary = { age: { 18: "18", 19: "19", - 20: "Ea20s", - 25: "Lt20s", - 30: "Ea30s", - 35: "Lt30s", - 40: "40s" + 24: "Ea20s", + 29: "Lt20s", + 34: "Ea30s", + 39: "Lt30s", + 999: "40s" }, face: { // face value + 100 - 0: {desc: "Face---", style: "red"}, - 5: {desc: "Face--", style: "red"}, - 60: {desc: "Face-", style: "red"}, - 90: {desc: "Face"}, - 111: {desc: "Face+", style: "pink"}, - 141: {desc: "Face++", style: "pink"}, - 196: {desc: "Face+++", style: "pink"}, + 4: {desc: "Face---", style: "red"}, + 59: {desc: "Face--", style: "red"}, + 89: {desc: "Face-", style: "red"}, + 110: {desc: "Face"}, + 140: {desc: "Face+", style: "pink"}, + 195: {desc: "Face++", style: "pink"}, + 200: {desc: "Face+++", style: "pink"}, }, lips: { - 0: {desc: "Lips-", style: "red"}, - 11: {desc: "Lips"}, - 21: {desc: "Lips+"}, - 41: {desc: "Lips++"}, - 71: {desc: "Lips+++"}, - 96: {desc: "Facepussy"} + 10: {desc: "Lips-", style: "red"}, + 20: {desc: "Lips"}, + 40: {desc: "Lips+"}, + 70: {desc: "Lips++"}, + 95: {desc: "Lips+++"}, + 100: {desc: "Facepussy"} }, teeth: { "crooked": {desc: "Cr Teeth", style: "yellow"}, @@ -348,16 +510,157 @@ App.Data.SlaveSummary = { "mixed": {desc: "Mixed"} }, waist: { // waist value + 100 - 0: {desc: "Wst+++", style: "pink"}, - 5: {desc: "Wst++", style: "pink"}, - 60: {desc: "Wst+", style: "pink"}, - 90: {desc: "Wst"}, - 111: {desc: "Wst-", style: "red"}, - 141: {desc: "Wst--", style: "red"}, - 195: {desc: "Wst---", style: "red"} + 4: {desc: "Wst+++", style: "pink"}, + 60: {desc: "Wst++", style: "pink"}, + 89: {desc: "Wst+", style: "pink"}, + 110: {desc: "Wst"}, + 140: {desc: "Wst-", style: "red"}, + 195: {desc: "Wst--", style: "red"}, + 200: {desc: "Wst---", style: "red"} + }, + genitalia:{ + dickBalls: { // indices [dick, balls] + 3: { + 3: null, + 4: "Balls", + 5: "Balls+", + 8: "Balls++", + 99: "Balls+++" + }, + 4: { + 3: "Dick", + 99: "Junk" + }, + 5: { + 4: "Dick+", + 99: "Junk+" + }, + 8: { + 5: "Dick++", + 99: "Junk++" + }, + 99: { + 8: "Dick+++", + 99: "Junk+++" + } + }, + holes: { // indices [vagina, anus] + 2: { + 2: null, + 3: "A+", + 4: "A++" + }, + 3: { + 2: "V+", + 3: "V+A+" + }, + 4: { + 3: "V++", + 4: "V++A++" + } + } + }, + titsAss: { // indices: [boobs, butt, FSAssetExpansionist(0,1), weight+100, muscles+100] + 499: { + 2: { + 2: { // FSAssetExpansionist doesn't matter + 109: { + 130: {desc: "Girlish", style: "pink"}, + }, + }, + } + }, + 799: { + 4: null, + 6: {desc: "Ass", style: "pink"}, + 8: {desc: "Ass+", style: "pink"}, + 9: {desc: "Ass++", style: "pink"}, + 999: {desc: "Ass+++", style: "pink"}, + }, + 1999: { + 4: {desc: "Boobs", style: "pink"}, + 999: {desc: "T&A", style: "pink"} + }, + 3999: { + 6: {desc: "Boobs+", style: "pink"}, + 999: {desc: "T&A+", style: "pink"} + }, + 11999: { + 8:{desc: "Boobs++", style: "pink"}, + 999: {desc: "T&A++", style: "pink"}, + }, + 100000: { + 9: {desc: "Boobs+++", style: "pink"}, + 999: {desc: "T&A+++", style: "pink"} + } + }, + weight: { // indices: [weigh + 100, FSHedonisticDecadence (0,1), hips + 2, ] + 4: {desc: "W---", style: ["red", "strong"]}, + 69: { + 99: { // FSHedonisticDecadence doesn't matter + 0: {desc: "W--", style: "strong"}, + 5: {desc: "W--", style: ["red", "strong"]} + } + }, + 89: {desc: "W-", style: "strong"}, + 110: {desc: "W", style: "strong"}, + 130: {desc: "W+", style: "strong"}, + 195: { + 0: {desc: "W++", style: ["red", "strong"]}, + 1: { + 3: {desc: "W++", style: ["red", "strong"]}, + 5: {desc: "W++", style: "strong"} + } + }, + 230: { + 0: {desc: "W+++", style: ["red", "strong"]}, + 1: { + 4: {desc: "W+++", style: ["red", "strong"]}, + 5: {desc: "W+++", style: "strong"} + } + }, + 260: { + 0: {desc: "W++++", style: ["red", "strong"]}, + 1: {desc: "W++++", style: "strong"} + }, + 290: { + 0: {desc: "W+++++", style: ["red", "strong"]}, + 1: {desc: "W+++++", style: "strong"} + }, + 999: { + 0: {desc: "W++++++", style: ["red", "strong"]}, + 1: {desc: "W++++++", style: "strong"} + } } }, mental: { + devotion: { // devotion value + 100 + 4: {desc: "VHate", style: ["devotion", "hateful"]}, + 49: {desc: "Hate", style: ["devotion", "hateful"]}, + 79: {desc: "Res", style: ["devotion", "resistant"]}, + 120: {desc: "Ambiv", style: ["devotion", "ambivalent"]}, + 150: {desc: "Accept", style: ["devotion", "accept"]}, + 195: {desc: "Devo", style: ["devotion", "devoted"]}, + 200: {desc: "Wor", style: ["devotion", "worship"]} + }, + trust: { // first key: trust + 100, second key: devotion + 100 + 4: {desc: "ETerr", style: ["trust", "extremely-terrified"]}, + 49: {desc: "Terr", style: ["trust", "terrified"]}, + 79: {desc: "Fright", style: ["trust", "frightened"]}, + 120: {desc: "Fear", style: ["trust", "fearful"]}, + 150: { + 79: {desc: "Caref", style: ["defiant", "careful"]}, + 200: {desc: "Caref", style: ["trust", "careful"]}, + }, + 195: { + 79: {desc: "Bold", style: ["defiant", "bold"]}, + 200: {desc: "Trust", style: ["trust", "trusting"]}, + }, + 200: { + 79: {desc: "Defiant", style: ["defiant", "full"]}, + 200: {desc: "VTrust", style: ["trust", "prof-trusting"]}, + } + }, behavioralFlaw: { "arrogant": "Arrog", "bitchy": "Bitchy", @@ -414,10 +717,10 @@ App.Data.SlaveSummary = { }, health: { tiredness: { - 0: {desc: "Ene", style: "green"}, - 31: {desc: "Tir", style: "yellow"}, - 61: {desc: "Tir+", style: "orange"}, - 91: {desc: "Exh", style: ["red", "strong"]} + 30: {desc: "Ene", style: "green"}, + 60: {desc: "Tir", style: "yellow"}, + 90: {desc: "Tir+", style: "orange"}, + 100: {desc: "Exh", style: ["red", "strong"]} } }, accent: { @@ -440,6 +743,17 @@ App.Data.SlaveSummary = { "fertility": "Di:F+", }, + specialDiet: { // index: dietCum + 3 * dietMilk + 0: null, + 1: "Cum+", + 2: "Cum++", + 3: "Milk+", + 4: "Cum+ Milk+", + 5: "Cum++ Milk+", + 6: "Milk++", + 7: "Cum+ Milk++", + 8: "Cum++ Milk++" + }, drugs: { "breast injections": "Boobs+", "intensive breast injections": "Boobs++", diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js index f5bfc39e7419e5c2cdfb5744d1b9a88aa41d3a0b..2602a0f59fef5816c1d06f7e479d20ae4bc0b329 100644 --- a/src/js/slaveSummaryHelpers.js +++ b/src/js/slaveSummaryHelpers.js @@ -102,14 +102,25 @@ App.UI.SlaveSummaryImpl = function() { * @returns {*|null} */ function getNumericRating(ratings, value) { - let p; - for (p in ratings) { - // @ts-ignore - if (p >= value) { - return ratings[p]; + for (const key in ratings) { + if (parseInt(key) >= value) { + return ratings[key]; } } - return ratings[p]; + return null; + } + + /** + * @param {object} ratings + * @param {number[]} values + * @returns {*|null} + */ + function getMultiNumericRating(ratings, values) { + const firstRating = getNumericRating(ratings, values[0]); + if (firstRating === null || typeof firstRating === "string" || firstRating.hasOwnProperty("desc")) { + return firstRating; + } + return getMultiNumericRating(firstRating, values.slice(1)); } /** @@ -129,7 +140,21 @@ App.UI.SlaveSummaryImpl = function() { function makeRatedStyledSpan(container, ratings, value, offset = 0, stdDecor = false) { /** @type {StyledDesc} */ const d = getNumericRating(ratings, value + offset); - makeSpan(container, d.desc, d.style, stdDecor, value); + if (d) { + makeSpan(container, d.desc, d.style, stdDecor, value); + } + } + + /** + * @param {Node} container + * @param {StyledDesc} styledDesc + * @param {number} [value] + * @param {boolean} [stdDecor] + */ + function makeStyledSpan(container, styledDesc, value, stdDecor = false) { + if (styledDesc) { + makeSpan(container, styledDesc.desc, styledDesc.style, stdDecor, value); + } } /** @@ -137,7 +162,7 @@ App.UI.SlaveSummaryImpl = function() { * @param {StyledRatings} ratings * @param {string|number} value */ - function makeStyledSpan(container, ratings, value) { + function makeMappedStyledSpan(container, ratings, value) { const d = ratings[value]; if (d) { makeSpan(container, d.desc, d.style); @@ -166,6 +191,10 @@ App.UI.SlaveSummaryImpl = function() { return s.charAt(0).toUpperCase() + s.charAt(1) + s.charAt(2); } + function FSPolicyFlag(name) { + return V.arcologies[0][`FS${name}`] === "unset" ? 0 : 1; + } + return { addText: addText, makeSpan: makeSpan, @@ -173,10 +202,13 @@ App.UI.SlaveSummaryImpl = function() { makeParagraph: makeParagraph, getExactRating: getExactRating, getNumericRating: getNumericRating, - makeRatedStyledSpan: makeRatedStyledSpan, + getMultiNumericRating: getMultiNumericRating, makeStyledSpan: makeStyledSpan, + makeRatedStyledSpan: makeRatedStyledSpan, + makeMappedStyledSpan: makeMappedStyledSpan, makeMappedSpan: makeMappedSpan, - firstThreeUc: firstThreeUc + firstThreeUc: firstThreeUc, + FSPolicyFlag: FSPolicyFlag }; }(); @@ -354,7 +386,7 @@ App.UI.SlaveSummaryImpl = function() { * @returns {void} */ function long_teeth(slave, c) { - helpers.makeStyledSpan(c, data.long.body.teeth, slave.teeth); + helpers.makeMappedStyledSpan(c, data.long.body.teeth, slave.teeth); } /** @@ -399,7 +431,7 @@ App.UI.SlaveSummaryImpl = function() { if (slave.voice === 0) { makeSpan(c, "Mute.", "red"); } else { - helpers.makeStyledSpan(c, data.long.accent, slave.accent); + helpers.makeMappedStyledSpan(c, data.long.accent, slave.accent); } } @@ -409,34 +441,10 @@ App.UI.SlaveSummaryImpl = function() { * @returns {void} */ function long_tits_ass(slave, c) { - const styles = "pink"; - if ((slave.boobs >= 12000) && (slave.butt > 9)) { - makeSpan(c, "Hyper T&A.", styles); - } else if ((slave.boobs > 4000) && (slave.butt > 8)) { - makeSpan(c, "Enormous T&A.", styles); - } else if ((slave.boobs > 2000) && (slave.butt > 6)) { - makeSpan(c, "Huge T&A.", styles); - } else if ((slave.boobs > 800) && (slave.butt > 4)) { - makeSpan(c, "Big T&A.", styles); - } else if ((slave.boobs < 500) && (slave.butt < 3) && (slave.weight <= 10) && (slave.muscles <= 30)) { - makeSpan(c, "Girlish figure.", styles); - } else if (slave.boobs >= 12000) { - makeSpan(c, "Immobilizing tits.", styles); - } else if (slave.boobs > 4000) { - makeSpan(c, "Monstrous tits.", styles); - } else if (slave.boobs > 2000) { - makeSpan(c, "Huge tits.", styles); - } else if (slave.boobs > 800) { - makeSpan(c, "Big tits.", styles); - } else if (slave.butt > 9) { - makeSpan(c, "Hyper ass.", styles); - } else if (slave.butt > 8) { - makeSpan(c, "Titanic ass.", styles); - } else if (slave.butt > 6) { - makeSpan(c, "Huge ass.", styles); - } else if (slave.butt > 4) { - makeSpan(c, "Big ass.", styles); - } + const h = helpers; + h.makeStyledSpan(c, + h.getMultiNumericRating(data.long.body.titsAss, + [slave.boobs, slave.butt, h.FSPolicyFlag("AssetExpansionist"), slave.weight + 100, slave.muscles + 100])); } /** @@ -608,7 +616,7 @@ App.UI.SlaveSummaryImpl = function() { * @returns {void} */ function short_teeth(slave, c) { - helpers.makeStyledSpan(c, data.short.body.teeth, slave.teeth); + helpers.makeMappedStyledSpan(c, data.short.body.teeth, slave.teeth); } /** @@ -653,7 +661,7 @@ App.UI.SlaveSummaryImpl = function() { if (slave.voice === 0) { makeSpan(c, "Mute", "red"); } else { - helpers.makeStyledSpan(c, data.short.accent, slave.accent); + helpers.makeMappedStyledSpan(c, data.short.accent, slave.accent); } } @@ -663,34 +671,10 @@ App.UI.SlaveSummaryImpl = function() { * @returns {void} */ function short_tits_ass(slave, c) { - let styles = "pink"; - if ((slave.boobs >= 12000) && (slave.butt > 9)) { - makeSpan(c, "T&A+++", styles); - } else if ((slave.boobs > 4000) && (slave.butt > 8)) { - makeSpan(c, "T&A++", styles); - } else if ((slave.boobs > 2000) && (slave.butt > 6)) { - makeSpan(c, "T&A+", styles); - } else if ((slave.boobs > 800) && (slave.butt > 4)) { - makeSpan(c, "T&A", styles); - } else if ((slave.boobs < 500) && (slave.butt < 3) && (slave.weight <= 10) && (slave.muscles <= 30)) { - makeSpan(c, "Girlish", styles); - } else if (slave.boobs >= 12000) { - makeSpan(c, "Boobs+++", styles); - } else if (slave.boobs > 4000) { - makeSpan(c, "Boobs++", styles); - } else if (slave.boobs > 2000) { - makeSpan(c, "Boobs+", styles); - } else if (slave.boobs > 800) { - makeSpan(c, "Boobs", styles); - } else if (slave.butt > 9) { - makeSpan(c, "Ass+++", styles); - } else if (slave.butt > 8) { - makeSpan(c, "Ass++", styles); - } else if (slave.butt > 6) { - makeSpan(c, "Ass+", styles); - } else if (slave.butt > 4) { - makeSpan(c, "Ass", styles); - } + const h = helpers; + h.makeStyledSpan(c, + h.getMultiNumericRating(data.short.body.titsAss, + [slave.boobs, slave.butt, h.FSPolicyFlag("AssetExpansionist"), slave.weight + 100, slave.muscles + 100])); } /** @@ -1526,7 +1510,7 @@ App.UI.SlaveSummaryImpl = function() { * @returns {void} */ function short_sex_flaw(slave, c) { - helpers.makeStyledSpan(c, data.short.mental.sexualFlaw, slave.sexualFlaw); + helpers.makeMappedStyledSpan(c, data.short.mental.sexualFlaw, slave.sexualFlaw); } /** diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index 77f9659a3b9cfef4c1406699e00aac00c466ac20..567cbff12cbf566eab50a4fb7d241a4fc85d9c52 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -13,49 +13,10 @@ App.UI.SlaveSummaryRenderers = function() { const makeSpan = helpers.makeSpan; if (slave.fetish === "mindbroken") { makeSpan(c, "MB", "mindbroken"); - } else if (slave.devotion < -95) { - makeSpan(c, "Hate", ["devotion", "hateful"], true, slave.devotion); - } else if (slave.devotion < -50) { - makeSpan(c, "Hate", ["devotion", "hateful"], true, slave.devotion); - } else if (slave.devotion < -20) { - makeSpan(c, "Res", ["devotion", "resistant"], true, slave.devotion); - } else if (slave.devotion <= 20) { - makeSpan(c, "Ambiv", ["devotion", "ambivalent"], true, slave.devotion); - } else if (slave.devotion <= 50) { - makeSpan(c, "Accept", ["devotion", "accept"], true, slave.devotion); - } else if (slave.devotion <= 95) { - makeSpan(c, "Devo", ["devotion", "devoted"], true, slave.devotion); } else { - makeSpan(c, "Wor", ["devotion", "worship"], true, slave.devotion); - } - if (slave.fetish === "mindbroken") { - return; - } else if (slave.trust < -95) { - makeSpan(c, "ETerr", ["trust", "extremely-terrified"], true, slave.trust); - } else if (slave.trust < -50) { - makeSpan(c, "Terr", ["trust", "terrified"], true, slave.trust); - } else if (slave.trust < -20) { - makeSpan(c, "Fright", ["trust", "frightened"], true, slave.trust); - } else if (slave.trust <= 20) { - makeSpan(c, "Fear", ["trust", "fearful"], true, slave.trust); - } else if (slave.trust <= 50) { - if (slave.devotion < -20) { - makeSpan(c, "Caref", ["defiant", "careful"], true, slave.trust); - } else { - makeSpan(c, "Caref", ["trust", "careful"], true, slave.trust); - } - } else if (slave.trust < 95) { - if (slave.devotion < -20) { - makeSpan(c, "Bold", ["defiant", "bold"], true, slave.trust); - } else { - makeSpan(c, "Trust", ["trust", "trusting"], true, slave.trust); - } - } else { - if (slave.devotion < -20) { - makeSpan(c, "Defiant", ["defiant", "full"], true, slave.trust); - } else { - makeSpan(c, "VTrust", ["trust", "prof-trusting"], true, slave.trust); - } + helpers.makeRatedStyledSpan(c, data.short.mental.devotion, slave.devotion, 100, true); + helpers.makeStyledSpan(c, helpers.getMultiNumericRating(data.short.mental.trust, [slave.trust + 100, slave.devotion + 100]), + slave.trust, true); } }, @@ -155,52 +116,8 @@ App.UI.SlaveSummaryRenderers = function() { * @returns {void} */ weight: function(slave, c) { - const makeSpan = helpers.makeSpan; - if (slave.weight < -95) { - makeSpan(c, "W---", ["red", "strong"], true, slave.weight); - } else if (slave.weight < -30) { - if (slave.hips < -1) { - makeSpan(c, "W--", "strong", true, slave.weight); - } else { - makeSpan(c, "W--", ["red", "strong>"], true, slave.weight); - } - } else if (slave.weight < -10) { - makeSpan(c, "W-", "strong", true, slave.weight); - } else if (slave.weight <= 10) { - makeSpan(c, "W", "strong", true, slave.weight); - } else if (slave.weight <= 30) { - makeSpan(c, "W+", "strong", true, slave.weight); - } else if (slave.weight <= 95) { - if (slave.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "W++", "strong", true, slave.weight); - } else { - makeSpan(c, "W++", ["red", "strong"], true, slave.weight); - } - } else if (slave.weight <= 130) { - if (slave.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "W+++", "strong", true, slave.weight); - } else { - makeSpan(c, "W+++", ["red", "strong"], true, slave.weight); - } - } else if (slave.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "W++++", "strong", true, slave.weight); - } else { - makeSpan(c, "W++++", ["red", "strong"], true, slave.weight); - } - } else if (slave.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "W+++++", "strong", true, slave.weight); - } else { - makeSpan(c, "W+++++", ["red", "strong"], true, slave.weight); - } - } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "W++++++", "strong", true, slave.weight); - } else { - makeSpan(c, "W++++++", ["red", "strong"], true, slave.weight); - } - } + helpers.makeStyledSpan(c, helpers.getMultiNumericRating(data.short.body.weight, + [slave.weight + 100, helpers.FSPolicyFlag("HedonisticDecadence"), slave.hips + 2]), slave.weight, true); }, /** @@ -211,37 +128,13 @@ App.UI.SlaveSummaryRenderers = function() { genitalia: function(slave, c) { const makeSpan = helpers.makeSpan; if (slave.dick > 0) { - let dickDesc = ""; - if (slave.balls === 0) { - dickDesc += `Geld`; + let dickDesc = slave.balls === 0 ? "Geld" : ""; + const dickBallsDesc = helpers.getMultiNumericRating(data.short.body.genitalia.dickBalls, [slave.dick, slave.balls]); + if (dickBallsDesc) { + dickDesc += ` ${dickBallsDesc}`; } - if ((slave.dick > 8) && (slave.balls > 8)) { - dickDesc += `Junk+++`; - } else if ((slave.dick > 5) && (slave.balls > 5)) { - dickDesc += `Junk++`; - } else if ((slave.dick > 4) && (slave.balls > 4)) { - dickDesc += `Junk+`; - } else if ((slave.dick > 3) && (slave.balls > 3)) { - dickDesc += `Junk`; - } else if (slave.dick > 8) { - dickDesc += `Dick+++`; - } else if (slave.dick > 5) { - dickDesc += `Dick++`; - } else if (slave.dick > 4) { - dickDesc += `Dick+`; - } else if (slave.dick > 3) { - dickDesc += `Dick`; - } else if (slave.balls > 10) { - dickDesc += `Balls+++`; - } else if (slave.balls > 5) { - dickDesc += `Balls++`; - } else if (slave.balls > 4) { - dickDesc += `Balls+`; - } else if (slave.balls > 3) { - dickDesc += `Balls`; - } - if (dickDesc.length) { - makeSpan(c, dickDesc, "pink"); + if (dickDesc) { + helpers.makeSpan(c, dickDesc, "pink"); } } if (slave.vagina === 0) { @@ -252,21 +145,8 @@ App.UI.SlaveSummaryRenderers = function() { if (slave.anus === 0) { makeSpan(c, "AV", "lime"); } - let holesDesc = ""; - if ((slave.vagina > 3) && (slave.anus > 3)) { - holesDesc += `V++A++`; - } else if ((slave.vagina > 2) && (slave.anus > 2)) { - holesDesc += `V+A+`; - } else if (slave.vagina > 3) { - holesDesc += `V++`; - } else if (slave.vagina > 2) { - holesDesc += `V+`; - } else if (slave.anus > 3) { - holesDesc += `A++`; - } else if (slave.anus > 2) { - holesDesc += `A+`; - } - if (holesDesc.length) { + const holesDesc = helpers.getMultiNumericRating(data.long.body.genitalia.holes, [slave.vagina, slave.anus]); + if (holesDesc) { makeSpan(c, holesDesc, "pink"); } }, @@ -277,27 +157,9 @@ App.UI.SlaveSummaryRenderers = function() { * @returns {void} */ diet: function(slave, c) { - const makeSpan = helpers.makeSpan; - const dietStr = data.short.diet[slave.diet]; - if (dietStr) { - makeSpan(c, dietStr, ["teal", "strong"]); - } - - let specialDiet = makeSpan(null, "", ["cyan", "strong"]); - if (slave.dietCum === 2) { - specialDiet.textContent = "Cum++"; - } else if (((slave.dietCum === 1) && (slave.dietMilk === 0))) { - specialDiet.textContent = "Cum+"; - } else if (((slave.dietCum === 1) && (slave.dietMilk === 1))) { - specialDiet.textContent = "Cum+ Milk+"; - } else if (((slave.dietCum === 0) && (slave.dietMilk === 1))) { - specialDiet.textContent = "Milk+"; - } else if ((slave.dietMilk === 2)) { - specialDiet.textContent = ">Milk++"; - } - if (specialDiet.textContent.length > 0) { - c.appendChild(specialDiet); - } + const style = ["teal", "strong"]; + helpers.makeMappedSpan(c, data.short.diet, slave.diet, style); + helpers.makeMappedSpan(c, data.short.specialDiet, slave.dietCum + 3 * slave.dietMilk, style); }, /** @@ -537,49 +399,10 @@ App.UI.SlaveSummaryRenderers = function() { const makeSpan = helpers.makeSpan; if (slave.fetish === "mindbroken") { makeSpan(c, "Mindbroken.", "mindbroken"); - } else if (slave.devotion < -95) { - makeSpan(c, "Very hateful", ["devotion", "hateful"], true, slave.devotion); - } else if (slave.devotion < -50) { - makeSpan(c, "Hateful", ["devotion", "hateful"], true, slave.devotion); - } else if (slave.devotion < -20) { - makeSpan(c, "Resistant", ["devotion", "resistant"], true, slave.devotion); - } else if (slave.devotion <= 20) { - makeSpan(c, "Ambivalent", ["devotion", "ambivalent"], true, slave.devotion); - } else if (slave.devotion <= 50) { - makeSpan(c, "Accepting", ["devotion", "accept"], true, slave.devotion); - } else if (slave.devotion <= 95) { - makeSpan(c, "Devoted", ["devotion", "devoted"], true, slave.devotion); - } else { - makeSpan(c, "Worshipful", ["devotion", "worship"], true, slave.devotion); - } - if (slave.fetish === "mindbroken") { - return; - } else if (slave.trust < -95) { - makeSpan(c, "Extremely terrified", ["trust", "extremely-terrified"], true, slave.trust); - } else if (slave.trust < -50) { - makeSpan(c, "Terrified", ["trust", "terrified"], true, slave.trust); - } else if (slave.trust < -20) { - makeSpan(c, "Frightened", ["trust", "frightened"], true, slave.trust); - } else if (slave.trust <= 20) { - makeSpan(c, "Fearful", ["trust", "fearful"], true, slave.trust); - } else if (slave.trust <= 50) { - if (slave.devotion < -20) { - makeSpan(c, "Careful", ["defiant", "careful"], true, slave.trust); - } else { - makeSpan(c, "Careful", ["trust", "careful"], true, slave.trust); - } - } else if (slave.trust <= 95) { - if (slave.devotion < -20) { - makeSpan(c, "Bold", ["defiant", "bold"], true, slave.trust); - } else { - makeSpan(c, "Trusting", ["trust", "trusting"], true, slave.trust); - } } else { - if (slave.devotion < -20) { - makeSpan(c, "Defiant", ["defiant", "full"], true, slave.trust); - } else { - makeSpan(c, "Profoundly trusting", ["trust", "prof-trusting"], true, slave.trust); - } + helpers.makeRatedStyledSpan(c, data.long.mental.devotion, slave.devotion, 100, true); + helpers.makeStyledSpan(c, helpers.getMultiNumericRating(data.long.mental.trust, [slave.trust + 100, slave.devotion + 100]), + slave.trust, true); } }, /** @@ -600,52 +423,8 @@ App.UI.SlaveSummaryRenderers = function() { * @returns {void} */ weight: function(slave, c) { - const makeSpan = helpers.makeSpan; - if (slave.weight < -95) { - makeSpan(c, "Emaciated", "red", true, slave.weight); - } else if (slave.weight < -30) { - if (slave.hips < -1) { - makeSpan(c, "Model-thin", null, true, slave.weight); - } else { - makeSpan(c, "Very thin", "red", true, slave.weight); - } - } else if (slave.weight < -10) { - makeSpan(c, "Thin", null, true, slave.weight); - } else if (slave.weight <= 10) { - makeSpan(c, "Trim", null, true, slave.weight); - } else if (slave.weight <= 30) { - makeSpan(c, "Plush", null, true, slave.weight); - } else if (slave.weight <= 95) { - if (slave.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "Nicely chubby", null, true, slave.weight); - } else { - makeSpan(c, "Overweight", "red", true, slave.weight); - } - } else if (slave.weight <= 130) { - if (slave.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "Pleasantly soft and shapely", null, true, slave.weight); - } else { - makeSpan(c, "Fat", "red", true, slave.weight); - } - } else if (slave.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "Amazingly voluptuous", null, true, slave.weight); - } else { - makeSpan(c, "Obese", "red", true, slave.weight); - } - } else if (slave.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "SSBBW", null, true, slave.weight); - } else { - makeSpan(c, "Super Obese", "red", true, slave.weight); - } - } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { - makeSpan(c, "Perfectly massive", null, true, slave.weight); - } else { - makeSpan(c, "Dangerously Obese", "red", true, slave.weight); - } - } + helpers.makeStyledSpan(c, helpers.getMultiNumericRating(data.long.body.weight, + [slave.weight + 100, helpers.FSPolicyFlag("HedonisticDecadence"), slave.hips + 2]), slave.weight, true); }, /** @@ -672,36 +451,12 @@ App.UI.SlaveSummaryRenderers = function() { */ genitalia: function(slave, c) { if (slave.dick > 0) { - let dickDesc = ""; - if (slave.balls === 0) { - dickDesc += 'Gelded.'; - } - if ((slave.dick > 8) && (slave.balls > 8)) { - dickDesc += `Hyper dick & balls.`; - } else if ((slave.dick > 5) && (slave.balls > 5)) { - dickDesc += `Monster dick & balls.`; - } else if ((slave.dick > 4) && (slave.balls > 4)) { - dickDesc = `Huge dick & balls.`; - } else if ((slave.dick > 3) && (slave.balls > 3)) { - dickDesc = `Big dick & balls.`; - } else if (slave.dick > 8) { - dickDesc = `Hyper dong.`; - } else if (slave.dick > 5) { - dickDesc = `Monster dong.`; - } else if (slave.dick > 4) { - dickDesc = `Huge dick.`; - } else if (slave.dick > 3) { - dickDesc = `Big dick.`; - } else if (slave.balls > 8) { - dickDesc = `Hyper balls.`; - } else if (slave.balls > 5) { - dickDesc = `Monstrous balls.`; - } else if (slave.balls > 4) { - dickDesc = `Huge balls.`; - } else if (slave.balls > 3) { - dickDesc = `Big balls.`; + let dickDesc = slave.balls === 0 ? "Gelded." : ""; + const dickBallsDesc = helpers.getMultiNumericRating(data.long.body.genitalia.dickBalls, [slave.dick, slave.balls]); + if (dickBallsDesc) { + dickDesc += ` ${dickBallsDesc}`; } - if (dickDesc.length) { + if (dickDesc) { helpers.makeSpan(c, dickDesc, "pink"); } } @@ -713,21 +468,8 @@ App.UI.SlaveSummaryRenderers = function() { if (slave.anus === 0) { helpers.makeSpan(c, "Anal virgin.", "lime"); } - let holesDesc = ""; - if ((slave.vagina > 3) && (slave.anus > 3)) { - holesDesc += `Blown out holes.`; - } else if ((slave.vagina > 2) && (slave.anus > 2)) { - holesDesc += `High mileage.`; - } else if (slave.vagina > 3) { - holesDesc += `Cavernous pussy.`; - } else if (slave.vagina > 2) { - holesDesc += `Loose pussy.`; - } else if (slave.anus > 3) { - holesDesc += `Permagaped anus.`; - } else if (slave.anus > 2) { - holesDesc += `Gaping anus.`; - } - if (holesDesc.length) { + const holesDesc = helpers.getMultiNumericRating(data.long.body.genitalia.holes, [slave.vagina, slave.anus]); + if (holesDesc) { helpers.makeSpan(c, holesDesc, "pink"); } }, @@ -738,26 +480,11 @@ App.UI.SlaveSummaryRenderers = function() { * @returns {void} */ diet: function(slave, c) { - const dietDesc = data.long.diet[slave.diet]; - if (dietDesc) { - helpers.makeSpan(c, dietDesc, "teal"); - } - - function specialDiet(text) { + helpers.makeMappedSpan(c, data.long.diet, slave.diet, "teal"); + const sd = data.long.specialDiet[slave.dietCum + 3 * slave.dietMilk]; + if (sd) { helpers.addText(c, "Diet base: "); - helpers.makeSpan(c, text, "cyan"); - } - - if (slave.dietCum === 2) { - specialDiet("Cum Based."); - } else if (((slave.dietCum === 1) && (slave.dietMilk === 0))) { - specialDiet("Cum Added."); - } else if (((slave.dietCum === 1) && (slave.dietMilk === 1))) { - specialDiet("Milk & Cum Added."); - } else if (((slave.dietCum === 0) && (slave.dietMilk === 1))) { - specialDiet("Milk Added."); - } else if ((slave.dietMilk === 2)) { - specialDiet("Milk Based."); + helpers.makeSpan(c, sd, "cyan"); } }, @@ -907,7 +634,7 @@ App.UI.SlaveSummaryRenderers = function() { */ hormoneBalance: function(slave, c) { const colorClass = slave.hormoneBalance <= -21 ? "deepskyblue" : "pink"; - const desc = helpers.getNumericRating(data.long.hormoneBalance, slave.hormoneBalance + 400); + const desc = helpers.getNumericRating(data.long.hormoneBalance, slave.hormoneBalance + 500); helpers.makeSpan(c, desc + " hormone balance.", colorClass); },