diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index cba57053206e48835129ad52156d033823169493..fa2e590df7737d3983ad3b5a3ada8aec9dfd0138 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -43,6 +43,7 @@ App.Data.defaultGameStateVariables = { abbreviation: { clothes: 2, devotion: 2, + beauty: 2, diet: 2, drugs: 2, genitalia: 2, diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index edb1418f75b8392ba3077b3c209b9980e33ba683..0774ad19271af2bde0d1275f753623595a9e2013 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -2,5 +2,5 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. pmod: "4.0.0-alpha.27", commitHash: null, - release: 1207, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1208, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. }; diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 4846a3c8128ccd39d65be2e82217f83463f96b15..e72f4e5b889ee8b287f3d5a96c795bda67a2dc5f 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -357,11 +357,16 @@ App.Update.globalVariables = function(node) { if (typeof V.abbreviateClothes === "number") { V.UI.slaveSummary = App.UI.SlaveSummary.makeNewState(); - for (const key of ["clothes", "devotion", "diet", "drugs", "genitalia", "health", "hormoneBalance", + for (const key of ["clothes", "devotion", "beauty", "diet", "drugs", "genitalia", "health", "hormoneBalance", "mental", "nationality", "origins", "physicals", "race", "rules", "rulesets", "skills"]) { V.UI.slaveSummary.abbreviation[key] = V["abbreviate" + capFirstChar(key)] || V.UI.slaveSummary.abbreviation[key]; } } + + if (typeof V.UI.slaveSummary.abbreviation.beauty === "undefined") { + V.UI.slaveSummary.abbreviation.beauty = 0; + } + if (typeof V.UI.compressSocialEffects !== "number") { V.UI.compressSocialEffects = 0; } diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js index 90b566e3190bc00437df18ea22062e493f8859b8..08ba583b8bbfb491bd8f353c5aeb376c1d3354ad 100644 --- a/src/events/intro/introSummary.js +++ b/src/events/intro/introSummary.js @@ -95,6 +95,7 @@ App.Intro.summary = function() { V.UI.slaveSummary.abbreviation, { devotion: 1, + beauty: 1, rules: 1, clothes: 2, health: 1, diff --git a/src/js/extendedFamilyModeJS.js b/src/js/extendedFamilyModeJS.js index b2f901ccd85c3c13ad36160bcc4a912607486adf..921f22346a14be29a4bebf4f66d9eea869ddc6ac 100644 --- a/src/js/extendedFamilyModeJS.js +++ b/src/js/extendedFamilyModeJS.js @@ -68,6 +68,10 @@ globalThis.isParentP = function(daughter, parent) { * @returns {boolean} */ globalThis.isGrandmotherP = function(granddaughter, grandmother) { + if (!V.showDistantRelatives) { + return false; + } + const father = getRelative(granddaughter.father); const mother = getRelative(granddaughter.mother); return (mother && (mother.mother === grandmother.ID)) || @@ -80,6 +84,10 @@ globalThis.isGrandmotherP = function(granddaughter, grandmother) { * @returns {boolean} */ globalThis.isGrandfatherP = function(granddaughter, grandfather) { + if (!V.showDistantRelatives) { + return false; + } + const father = getRelative(granddaughter.father); const mother = getRelative(granddaughter.mother); return (mother && (mother.father === grandfather.ID)) || @@ -92,6 +100,10 @@ globalThis.isGrandfatherP = function(granddaughter, grandfather) { * @returns {boolean} */ globalThis.isGrandparentP = function(granddaughter, grandparent) { + if (!V.showDistantRelatives) { + return false; + } + return isGrandmotherP(granddaughter, grandparent) || isGrandfatherP(granddaughter, grandparent); }; diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index 447b1985b52263034cb24d77f9cf1260844e9b1a..75270d49c35d7832da0234a3d9c6e2947df6d2f9 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -19,6 +19,21 @@ App.UI.SlaveSummaryRenderers = function() { } }, + /** + * @param {App.Entity.SlaveState} slave + * @param {Node} c + */ + beauty: function(slave, c) { + + const makeSpan = helpers.makeSpan; + const style1 = ["pink", "strong"]; + const style2 = ["coral", "strong"]; + // Beauty + makeSpan(c, "B[" + Beauty(slave) + "].", style1); + // Fresult + makeSpan(c, "FR[" + FResult(slave) + "].", style2); + }, + /** * @param {App.Entity.SlaveState} slave * @param {Node} c @@ -402,6 +417,22 @@ App.UI.SlaveSummaryRenderers = function() { slave.trust, true); } }, + + /** + * @param {App.Entity.SlaveState} slave + * @param {Node} c + */ + beauty: function(slave, c) { + + const makeSpan = helpers.makeSpan; + const style1 = ["pink", "strong"]; + const style2 = ["coral", "strong"]; + // Beauty + makeSpan(c, "Beauty[" + Beauty(slave) + "].", style1); + // Fresult + makeSpan(c, "Sex Score[" + FResult(slave) + "].", style2); + }, + /** * @param {App.Entity.SlaveState} slave * @param {Node} c @@ -811,6 +842,7 @@ App.UI.SlaveSummary = function() { const delegates = { clothes: emptyRenderer, devotion: emptyRenderer, + beauty: emptyRenderer, rules: emptyRenderer, height: emptyRenderer, diet: emptyRenderer, @@ -838,6 +870,7 @@ App.UI.SlaveSummary = function() { abbreviation: { clothes: 2, devotion: 2, + beauty: 2, diet: 2, drugs: 2, genitalia: 2, @@ -920,6 +953,7 @@ App.UI.SlaveSummary = function() { let para = helpers.makeParagraph(res); delegates.devotion(slave, para); + delegates.beauty(slave, para); if (!slave.fuckdoll) { delegates.rules(slave, para); } @@ -979,6 +1013,7 @@ App.UI.SlaveSummary = function() { } appendSAHOption("devotion", "Mental stats are"); + appendSAHOption("beauty", "Beauty and sex score stats are"); appendSAHOption("mental", "Mental attributes are"); appendSAHOption("rules", "Rules are"); appendSAHOption("health", "Health is"); diff --git a/src/js/speech.js b/src/js/speech.js index b0e0ac499961403e7313487db85a31349a8789e1..a4efc5f2e9518ba9e5f9bf7dac7a592502242442 100644 --- a/src/js/speech.js +++ b/src/js/speech.js @@ -50,6 +50,39 @@ globalThis.getEnunciation = function(slave) { } else { ret.title = "Thithter"; } + } + } else if (isAunt(V.PC, slave)){ + if (V.PC.title === 1) { + ret.title = "Nephew"; + } else if (V.PC.title === 0) { + ret.title = "Niethe"; + } + } + else if (isAunt(slave, V.PC)){ + if (V.PC.title === 1) { + ret.title = "Uncle"; + } else if (V.PC.title === 0) { + ret.title = "Aunt"; + } + } else if (areCousins(slave, V.PC)){ + ret.title = "Couthin"; + } else if (isGrandfatherP(V.PC, slave) || isGrandmotherP(V.PC, slave) ){ + if (V.PC.title === 1) { + ret.title = "Grandthon"; + } else { + ret.title = "Granddaughter"; + } + } else if (isGrandfatherP(slave, V.PC)){ + if (slave.actualAge < 18) { + ret.title = "Grand-papa"; + } else { + ret.title = "Grandfather"; + } + } else if (isGrandmotherP(slave, V.PC)){ + if (slave.actualAge < 18) { + ret.title = "Grand-mama"; + } else { + ret.title = "Grandmother"; } } } @@ -109,6 +142,38 @@ globalThis.getEnunciation = function(slave) { ret.title = "Sister"; } } + } else if (isAunt(V.PC, slave)){ + if (V.PC.title === 1) { + ret.title = "Nephew"; + } else if (V.PC.title === 0) { + ret.title = "Niece"; + } + } else if (isAunt(slave, V.PC)){ + if (V.PC.title === 1) { + ret.title = "Uncle"; + } else if (V.PC.title === 0) { + ret.title = "Aunt"; + } + } else if (areCousins(slave, V.PC)){ + ret.title = "Cousin"; + } else if (isGrandfatherP(V.PC, slave) || isGrandmotherP(V.PC, slave)){ + if (V.PC.title === 1) { + ret.title = "Grandson"; + } else { + ret.title = "Granddaughter"; + } + } else if (isGrandfatherP(slave, V.PC)){ + if (slave.actualAge < 18) { + ret.title = "Grand-papa"; + } else { + ret.title = "Grandfather"; + } + } else if (isGrandmotherP(slave, V.PC)){ + if (slave.actualAge < 18) { + ret.title = "Grand-mama"; + } else { + ret.title = "Grandmother"; + } } } if (slave.custom.title !== undefined && slave.custom.title !== "") { diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js index 9d7b328173a2e99ed6d5aa63f13957c57af4a5a4..5f0d9bbbc8ac8a9451a1d5b6e9831e99fdfc18e5 100644 --- a/src/npc/interaction/fFeelings.js +++ b/src/npc/interaction/fFeelings.js @@ -1907,6 +1907,15 @@ App.Interact.fFeelings = function(slave) { text.push(`${Spoken(slave, `I — I'm fucking my ${sister2},"`)} ${he} bursts out, blushing even harder. ${Spoken(slave, `"It's so fucking wrong, but ${he2}'s so hot, I can't stop.`)}`); } else if (areSisters(slave, partner) === 3) { text.push(`${Spoken(slave, `I — I'm fucking my half-${sister2},"`)} ${he} bursts out, blushing even harder. ${Spoken(slave, `"It's so fucking wrong, but ${he2}'s so hot, I can't stop.`)}`); + } else if (areCousins(slave, partner)) { + text.push(`${Spoken(slave, `I — I'm fucking my cousin,"`)} ${he} bursts out, blushing even harder. ${Spoken(slave, `"It's so fucking wrong, but ${he2}'s so hot, I can't stop.`)}`); + } else if (isAunt(slave, partner)) { + const aunt = (partner.genes === "XY" && useMaleTerms)? `uncle`: `aunt`; + text.push(`${Spoken(slave, `I — I'm fucking my ${aunt},"`)} ${he} bursts out, blushing even harder. ${Spoken(slave, `"It's so fucking wrong, but ${he2}'s so hot, I can't stop.`)}`); + } else if (isAunt(partner, slave)) { + const niece = (partner.genes === "XY" && useMaleTerms)? `nephew`: `niece`; + text.push(`${Spoken(slave, `I — I'm fucking my ${niece},"`)} ${he} bursts out, blushing even harder. ${Spoken(slave, `"It's so fucking wrong, but ${he2} has such a hot little body, I can't stop.`)}`); + } else if ((slave.actualAge + 14) < partner.actualAge) { text.push(`${Spoken(slave, `${He2}'s old enough to be my ${mother2}."`)} ${He} looks down, blushing a little harder. ${Spoken(slave, `"But I'm lucky, ${he2}'s such a hot ${milf2}.`)}`); } else if ((slave.actualAge - 14) > partner.actualAge) {