diff --git a/player variables documentation - Pregmod.txt b/player variables documentation - Pregmod.txt index 1eddbc1385ad5c208599a727f86fa3316b49d45d..d8fd24f46feb390f6093293bbf6c92c4cb7be7fb 100644 --- a/player variables documentation - Pregmod.txt +++ b/player variables documentation - Pregmod.txt @@ -541,6 +541,21 @@ face: 100 +lips: + +lip size (0-100) +0 - 10 - thin +11 - 20 - normal +21 - 40 - pretty +41 - 70 - plush +71 - 95 - huge (lisps) +96 - 100- facepussy (mute) + +lipsImplant: + +how large her lip implants are +See .lips + reservedChildren: how many of your children will be added to the incubator diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index b51ecbc0720c5ee7275a26f60f3eb99044fc3f69..ec1c17f77c9ea2f2e831a2043d796bf77ae2d667 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,6 +1,6 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. - pmod: "3.9.6", + pmod: "4.A.0", commitHash: null, - release: 1129 // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1130 // 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/events/intro/introSummary.js b/src/events/intro/introSummary.js index 5136031fa2696a20ae8f38fbe6e05f9f6f057b39..d1b201b38fa65a75671c694152c8ce1d447ad94e 100644 --- a/src/events/intro/introSummary.js +++ b/src/events/intro/introSummary.js @@ -374,18 +374,27 @@ App.Intro.summary = function() { } // I hope this works PCDatatypeCleanup(V.PC); - } - if (V.PC.dick >= 3) { - V.PC.geneticQuirks.wellHung = 2; - } - if (V.PC.title === 0) { - V.PC.hLength = 15; - V.PC.waist = -20; - V.PC.voice = 2; - } - if (V.PC.eye.right.vision === 1 || V.PC.eye.left.vision === 1) { - V.PC.eyewear = "corrective glasses"; + if (V.PC.dick >= 3) { + V.PC.geneticQuirks.wellHung = 2; + } + if (V.PC.title === 0) { + V.PC.hLength = 15; + V.PC.waist = -20; + V.PC.voice = 2; + } + if (V.PC.eye.right.vision === 1 || V.PC.eye.left.vision === 1) { + V.PC.eyewear = "corrective glasses"; + } + if (V.PC.pubertyXX === 0 && V.PC.pubertyXY === 0) { + if (V.PC.age < 11) { + V.PC.energy = 20; + } else if (V.PC.age < 12) { + V.PC.energy = 30; + } else if (V.PC.age < 13) { + V.PC.energy = 40; + } + } } V.PC.birthName = V.PC.slaveName; diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js index 98c8be487e19d4c75cfe55369bdebbc1ad00f660..40c3d32f0bc150d14309019406f64af19ed59ed0 100644 --- a/src/events/intro/pcAppearance.js +++ b/src/events/intro/pcAppearance.js @@ -1,6 +1,6 @@ App.UI.Player = {}; -App.UI.Player.appearance = function(options) { +App.UI.Player.appearance = function(options, summary = false) { let option; options.addOption("Your nationality is", "nationality", V.PC).showTextBox() @@ -15,6 +15,9 @@ App.UI.Player.appearance = function(options) { .addValueList(Array.from(App.Data.misc.filterRaces, (k => [k[1], k[0]]))); } + options.addOption("You are genetically", "genes", V.PC) + .addValue("XY").addValue("XX"); + options.addOption(`You are`, "height", V.PC).showTextBox({unit: "cm"}) .addRange(145, 150, "<", "Petite") .addRange(155, 160, "<", "Short") @@ -49,7 +52,17 @@ App.UI.Player.appearance = function(options) { .addValueList(makeAList(App.Medicine.Modification.eyeColor.map(color => color.value))); options.addOption("You", "vision", V.PC.eye.right) - .addValueList([["Need glasses to see properly", 1, () => { V.PC.eye.right = 1; V.PC.eye.left = 1;}], ["have normal vision", 2, () => { V.PC.eye.right = 2; V.PC.eye.left = 2;}]]); + .addValueList([["Need glasses to see properly", 1, () => { V.PC.eye.right = 1; V.PC.eye.left = 1; }], ["have normal vision", 2, () => { V.PC.eye.right = 2; V.PC.eye.left = 2; }]]); + + options.addOption("Your face is", "faceShape", V.PC) + .addValueList([ + ["Normal", "normal"], + ["Androgynous", "androgynous"], + ["Masculine", "masculine"], + ["Cute", "cute"], + ["Sensual", "sensual"], + ["Exotic", "exotic"] + ]); options.addOption("Your body", "markings", V.PC) .addValueList([["Is clear of blemishes", "none"], ["Has light freckling", "freckles"], ["Has heavy freckling", "heavily freckled"]]); @@ -85,7 +98,7 @@ App.UI.Player.appearance = function(options) { option.addValue("Very broad", 2); } - if (V.PC.boobs >= 200) { + if (V.PC.boobs >= 200 || summary) { if (V.PC.title === 1 && V.PC.boobs <= 200) { option = options.addOption("Your chest is", "boobs", V.PC).addValue("Manly", 200, () => { V.PC.boobsImplant = 0; V.PC.boobsImplantType = "none"; }); } else { @@ -95,7 +108,7 @@ App.UI.Player.appearance = function(options) { ["A-cups", 300], ["B-cups", 400], ["C-cups", 500], - ]); + ]); if (V.PC.physicalAge <= 13) { option.addValueList([ ["hefty D-cups", 650], @@ -115,7 +128,7 @@ App.UI.Player.appearance = function(options) { .addValueList([ ["All natural", 0, () => { V.PC.boobsImplant = 0; V.PC.boobsImplantType = "none"; }], ["Fake", V.PC.boobs / 2, () => V.PC.boobsImplantType = "normal"] - ]) + ]); } if (V.PC.boobsImplant > 0) { option = options.addOption("You have", "boobsImplantType", V.PC).addValue("Regular implants", "normal"); @@ -158,7 +171,7 @@ App.UI.Player.appearance = function(options) { ["Small", 1], ["Plump", 2], ["Big", 3], - ]); + ]); if (V.PC.physicalAge > 13) { option.addValue("Huge", 4); } @@ -173,7 +186,7 @@ App.UI.Player.appearance = function(options) { .addValueList([ ["All natural", 0, () => V.PC.buttImplantType = "none"], ["Fake", Math.round(V.PC.butt / 2), () => V.PC.buttImplantType = "normal"] - ]) + ]); } if (V.PC.buttImplant > 0) { option = options.addOption("You have", "buttImplantType", V.PC).addValue("Regular implants", "normal"); @@ -189,7 +202,7 @@ App.UI.Player.appearance = function(options) { ["Small", 2, () => V.PC.foreskin = 3], ["Average", 3, () => V.PC.foreskin = 3], ["Big", 4, () => V.PC.foreskin = 4], - ]); + ]); if (V.PC.physicalAge > 13) { option.addValue("Huge", 5, () => V.PC.foreskin = 5); } @@ -210,7 +223,7 @@ App.UI.Player.appearance = function(options) { option.addValueList([ ["Average", 3, () => V.PC.scrotum = 4], ["Large", 4, () => V.PC.scrotum = 5], - ]); + ]); if (V.PC.physicalAge > 13) { option.addValue("Massive", 5, () => V.PC.scrotum = 5); } @@ -229,7 +242,7 @@ App.UI.Player.appearance = function(options) { } if (V.PC.physicalAge < 14) { options.addOption("You are", "pubertyXY", V.PC) - .addValueList([["Not producing potent sperm yet", 0], ["Producing potent sperm", 1]]); + .addValueList([["Not producing potent sperm yet", 0], ["Producing potent sperm", 1]]); } } @@ -241,9 +254,9 @@ App.UI.Player.appearance = function(options) { if (V.PC.physicalAge <= 18) { options.addOption("You are", "vagina", V.PC) .addValueList([["A virgin", 0], ["Not a virgin", 1]]); - if (V.PC.physicalAge < 14) { + if (V.PC.physicalAge < 14 && V.PC.preg <= 0) { options.addOption("You have", "pubertyXX", V.PC) - .addValueList([["Not had your first period", 0], ["Had your first period", 1]]); + .addValueList([["Not had your first period", 0], ["Had your first period", 1]]); } } } @@ -271,7 +284,9 @@ App.UI.Player.syncAgeBasedParameters = function() { if (V.PC.vagina !== -1) { V.PC.vagina = 0; V.PC.vaginaLube = 0; - V.PC.pubertyXX = 0; + if (V.PC.preg <= 0) { + V.PC.pubertyXX = 0; + } } V.PC.pregAdaptation = 10; if (V.PC.dick !== 0) { @@ -327,7 +342,9 @@ App.UI.Player.syncAgeBasedParameters = function() { if (V.PC.vagina !== -1) { V.PC.vagina = 0; V.PC.vaginaLube = 0; - V.PC.pubertyXX = 0; + if (V.PC.preg <= 0) { + V.PC.pubertyXX = 0; + } } V.PC.pregAdaptation = 30; if (V.PC.dick !== 0) { @@ -534,6 +551,12 @@ App.UI.Player.design = function() { .addRange(55, 65, "<", "Well into middle age").addRange(70, 65, ">=", "Old"); options.addOption(`Your birthday was <strong>${V.PC.birthWeek}</strong> weeks ago.`, "birthWeek", V.PC).showTextBox(); + option = options.addCustomOption() + .addButton( + "Adjust body to match age", + () => App.UI.Player.syncAgeBasedParameters(), + "" + ); } } else { r = []; @@ -545,7 +568,7 @@ App.UI.Player.design = function() { } r.push(`and everyone that matters calls you ${PlayerName()}.`); - r.push(`You are ${V.PC.actualAge} years old which is`); + r.push(`You are ${V.PC.actualAge} years old, which is`); if (V.PC.actualAge >= 65) { r.push(`<strong>old</strong>.`); } else if (V.PC.actualAge >= 50) { @@ -587,21 +610,51 @@ App.UI.Player.design = function() { // Appearance if (allowEdits) { - App.UI.Player.appearance(options); + if (V.PC.vagina !== -1 && V.PC.dick !== 0) { + State.temporary.vaginaPenis = 2; + } else if (V.PC.vagina !== -1) { + State.temporary.vaginaPenis = 1; + } else { + State.temporary.vaginaPenis = 0; + } - options.addOption("Your face is", "faceShape", V.PC) - .addValueList([ - ["Normal", "normal"], - ["Androgynous", "androgynous"], - ["Masculine", "masculine"], - ["Cute", "cute"], - ["Sensual", "sensual"], - ["Exotic", "exotic"] - ]); + option = options.addOption("You have a", "vaginaPenis", State.temporary) + .addValue("Penis", 0, () => { + V.PC.preg = 0; + V.PC.pregType = 0; + V.PC.dick = 4; + V.PC.balls = 3; + V.PC.scrotum = 3; + V.PC.prostate = 1; + V.PC.vagina = -1; + V.PC.ovaries = 0; + }).addValue("Vagina", 1, () => { + V.PC.dick = 0; + V.PC.balls = 0; + V.PC.scrotum = 0; + V.PC.prostate = 0; + V.PC.vagina = 1; + V.PC.ovaries = 1; + }).addValue("Penis and Vagina", 2, () => { + V.PC.dick = 4; + V.PC.balls = 3; + V.PC.scrotum = 3; + V.PC.prostate = 1; + V.PC.vagina = 1; + V.PC.ovaries = 1; + }); + if (State.temporary.vaginaPenis === 0) { + option.addComment("Standard sex scenes; easiest reputation maintenance."); + } else if (State.temporary.vaginaPenis === 1) { + option.addComment("Sex scene variations; most difficult reputation maintenance."); + } else { + option.addComment("Sex scene variations; more difficult reputation maintenance; some unique opportunities, especially with breasts."); + } + App.UI.Player.appearance(options, true); } else { r = []; - r.push(`You are a ${V.PC.nationality} ${V.PC.race} with`); + r.push(`You are a ${heightToEitherUnit(V.PC)} tall ${V.PC.nationality} ${V.PC.race} with`); if (V.PC.markings === "heavily freckled") { r.push(`heavily freckled`); } else if (V.PC.markings === "freckles") { @@ -609,7 +662,18 @@ App.UI.Player.design = function() { } else { r.push(`clear`); } - r.push(`${V.PC.skin} skin, ${V.PC.hColor} hair and ${App.Desc.eyesColor(V.PC)}. You have a ${V.PC.faceShape} face.`); + r.push(`${V.PC.skin} skin, ${V.PC.hColor} hair and ${App.Desc.eyesColor(V.PC)}. You have a ${V.PC.faceShape}`); + if (V.PC.lips > 95) { + r.push(`face with way too much lip; you can't shut your mouth properly anymore.`); + } else if (V.PC.lips > 70) { + r.push(`face with truly massive lips.`); + } else if (V.PC.lips > 40) { + r.push(`face with plump lips.`); + } else if (V.PC.lips > 20) { + r.push(`face with full lips.`); + } else { + r.push(`face.`); + } App.Events.addNode(el, r, "p"); } @@ -635,40 +699,35 @@ App.UI.Player.design = function() { ["Servant", "servant"], ["Gang leader", "gang"]] ); + option = options.addCustomOption() + .addButton( + "Adjust career for age", + () => V.PC.career = App.UI.Player.assignCareerByAge(V.PC.career), + "" + ); if (V.secExpEnabled > 0) { - switch (V.PC.career) { - case "capitalist": - option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`); - break; - case "mercenary": - option.addComment(`<div><span class="green">Easier to maintain security</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); - break; - case "slaver": - option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); - break; - case "engineer": - option.addComment(`<div><span class="yellowgreen">construction and upgrade of facilities will be cheaper.</span></div>`); - break; - case "medicine": - option.addComment(`<div><span class="yellowgreen">Drug upgrades will be cheaper.</span></div>`); - break; - case "celebrity": - option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`); - break; - case "escort": - option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); - break; - case "servant": - option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); - break; - case "gang": - option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); - break; - case "BlackHat": - option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); - break; - default: - option.addComment(`<div><span class="red">Harder to maintain authority,</span> but <span class="yellowgreen">the propaganda hub's upgrades will be cheaper.</span></div>`); + if (isPCCareerInCategory("capitalist")) { + option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("mercenary")) { + option.addComment(`<div><span class="green">Easier to maintain security</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("slaver")) { + option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("engineer")) { + option.addComment(`<div><span class="yellowgreen">construction and upgrade of facilities will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("medicine")) { + option.addComment(`<div><span class="yellowgreen">Drug upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("celebrity")) { + option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("escort")) { + option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); + } else if (isPCCareerInCategory("servant")) { + option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); + } else if (isPCCareerInCategory("gang")) { + option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`); + } else if (isPCCareerInCategory("BlackHat")) { + option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`); + } else { + option.addComment(`<div><span class="red">Harder to maintain authority,</span> but <span class="yellowgreen">the propaganda hub's upgrades will be cheaper.</span></div>`); } } } @@ -687,39 +746,81 @@ App.UI.Player.design = function() { r = []; switch (V.PC.career) { case "wealth": + case "trust fund": + case "rich kid": r.push(`Prior to being an arcology owner, you were a member of the idle wealthy.`); break; case "capitalist": r.push(`Prior to being an arcology owner, you were a business leader.`); break; + case "entrepreneur": + case "business kid": + r.push(`Prior to being an arcology owner, you were a cunning entrepreneur.`); + break; case "mercenary": + case "recruit": r.push(`Prior to being an arcology owner, you were a mercenary.`); break; + case "child soldier": + r.push(`Prior to being an arcology owner, you were a disposable conscript.`); + break; case "slaver": + case "slave overseer": r.push(`Prior to being an arcology owner, you were a slaver.`); break; + case "slave tender": + r.push(`Prior to being an arcology owner, you were a slaver tasked with looking after fresh captures.`); + break; case "engineer": r.push(`Prior to being an arcology owner, you were an engineer.`); break; + case "construction": + case "worksite helper": + r.push(`Prior to being an arcology owner, you built buildings.`); + break; case "medicine": r.push(`Prior to being an arcology owner, you were a surgeon.`); break; + case "medical assistant": + r.push(`Prior to being an arcology owner, you assisted with surgeries.`); + break; + case "nurse": + r.push(`Prior to being an arcology owner, you were a nurse.`); + break; case "celebrity": r.push(`Prior to being an arcology owner, you were a minor celebrity.`); break; + case "rising star": + r.push(`Prior to being an arcology owner, you were an up-and-coming star.`); + break; + case "child star": + r.push(`Prior to being an arcology owner, you were a child actor.`); + break; case "BlackHat": + case "hacker": + case "script kiddy": r.push(`Prior to being an arcology owner, you specialized in cracking databases and making mockeries of cyber security.`); break; case "arcology owner": r.push(`Being an arcology owner defines your life now.`); break; case "escort": + case "prostitute": r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`); break; + case "child prostitute": + r.push(`Prior to being an arcology owner, you had no choice but to sell your body to survive.`); + break; case "servant": + case "handmaiden": + case "child servant": r.push(`Prior to being an arcology owner, you served a well-off`); - if (V.PC.counter.birthMaster >= 2) { + if (V.PC.counter.birthMaster >= 8) { + r.push(`master as his breeder.`); + } else if (V.PC.counter.birthMaster >= 2) { r.push(`master and bore him several children.`); + } else if (V.PC.counter.birthMaster >= 1) { + r.push(`master and bore him a child.`); } else { r.push(`master.`); } @@ -727,6 +828,12 @@ App.UI.Player.design = function() { case "gang": r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`); break; + case "hoodlum": + r.push(`Prior to being an arcology owner, you were a troublemaker in a gang.`); + break; + case "street urchin": + r.push(`Prior to being an arcology owner, you lived a hard life on the streets.`); + break; } r.push(`Word in the arcology is you acquired it through`); @@ -756,47 +863,7 @@ App.UI.Player.design = function() { if (allowEdits) { options = new App.UI.OptionsGroup(); - if (V.PC.vagina !== -1 && V.PC.dick !== 0) { - State.temporary.vaginaPenis = 2; - } else if (V.PC.vagina !== -1) { - State.temporary.vaginaPenis = 1; - } else { - State.temporary.vaginaPenis = 0; - } - - option = options.addOption("You have a", "vaginaPenis", State.temporary) - .addValue("Penis", 0, () => { - V.PC.preg = 0; - V.PC.pregType = 0; - V.PC.dick = 4; - V.PC.balls = 3; - V.PC.scrotum = 3; - V.PC.prostate = 1; - V.PC.vagina = -1; - V.PC.ovaries = 0; - }).addValue("Vagina", 1, () => { - V.PC.dick = 0; - V.PC.balls = 0; - V.PC.scrotum = 0; - V.PC.prostate = 0; - V.PC.vagina = 1; - V.PC.ovaries = 1; - }).addValue("Penis and Vagina", 2, () => { - V.PC.dick = 4; - V.PC.balls = 3; - V.PC.scrotum = 3; - V.PC.prostate = 1; - V.PC.vagina = 1; - V.PC.ovaries = 1; - }); - if (State.temporary.vaginaPenis === 0) { - option.addComment("Standard sex scenes; easiest reputation maintenance."); - } else if (State.temporary.vaginaPenis === 1) { - option.addComment("Sex scene variations; most difficult reputation maintenance."); - } else { - option.addComment("Sex scene variations; more difficult reputation maintenance; some unique opportunities, especially with breasts."); - } - + // obsolete? if (V.cheatMode) { options.addOption("Vagina", "vagina", V.PC).showTextBox(); options.addOption("New vagina", "newVag", V.PC).showTextBox(); @@ -811,7 +878,7 @@ App.UI.Player.design = function() { options.addOption("Balls implant", "ballsImplant", V.PC).showTextBox(); } - if (V.PC.vagina !== -1) { + if (V.PC.vagina !== -1 && V.PC.pubertyXX === 1) { option = options.addOption("You are", "preg", V.PC) .addValue("Taking contraceptives", -1, () => { V.PC.pregType = 0; V.PC.labor = 0; }) .addValue("Not taking contraceptives", 0, () => { V.PC.pregType = 0; V.PC.labor = 0; }) @@ -864,83 +931,201 @@ App.UI.Player.design = function() { } } - if (V.PC.title === 1 && V.PC.boobs <= 100) { - option = options.addOption("Your chest is", "boobs", V.PC).addValue("Manly", 100, () => V.PC.boobsImplant = 0); + el.append(options.render()); + } else { + r = []; + + if (V.PC.boobs >= 300) { + r.push(`You have a`); + if (V.PC.title > 0) { + r.push(`masculine`); + } else { + r.push(`feminine`); + } + r.push(`body with`); + if (V.PC.shoulders > 1) { + r.push(`very broad shoulders`); + } else if (V.PC.shoulders > 0) { + r.push(`broad shoulders`); + } else if (V.PC.shoulders < -1) { + r.push(`very narrow shoulders`); + } else if (V.PC.shoulders < 0) { + r.push(`narrow shoulders`); + } + if (V.PC.shoulders !== 0) { + r.push(`and`); + } + let breastShapeDesc; + if (V.PC.boobShape === "saggy") { + breastShapeDesc = ` that sag a bit`; + } else if (V.PC.boobShape === "spherical") { + breastShapeDesc = ` that might just be a little too much implant now.`; + } + if (V.PC.boobs >= 1400) { + r.push(`giant${(V.PC.boobsImplant !== 0) ? `, fake` : ``} cow tits${breastShapeDesc}.`); + } else if (V.PC.boobs >= 1200) { + r.push(`huge`); + if (V.PC.boobsImplant !== 0) { + r.push(`fake`); + } + r.push(`breasts${breastShapeDesc}.`); + } else if (V.PC.boobs >= 1000) { + r.push(`big`); + if (V.PC.boobsImplant !== 0) { + r.push(`fake`); + } + r.push(`breasts${breastShapeDesc}.`); + } else if (V.PC.boobs >= 800) { + r.push(`noticeable breasts${breastShapeDesc}.`); + } else if (V.PC.boobs >= 650) { + r.push(`unremarkable breasts${breastShapeDesc}.`); + } else if (V.PC.boobs >= 500) { + r.push(`average breasts${breastShapeDesc}.`); + } else { + r.push(`small breasts${breastShapeDesc}.`); + } } else { - option = options.addOption("Your breasts are", "boobs", V.PC).addValue("Flat", 100, () => V.PC.boobsImplant = 0); + if (V.PC.title > 0) { + r.push(`You have a manly chest.`); + } else { + r.push(`You are flat as a board.`); + } } - option.addValueList([ - ["C-cups", 500], - ["DD-cups", 900], - ["F-cups", 1100], - ["G-cups", 1300] - ]); - option.showTextBox("CCs"); - - if (V.PC.boobs >= 500) { - options.addOption("Your breasts are", "boobsImplant", V.PC) - .addValueList([ - ["All natural", 0], - ["Fake", 400] - ]) - .showTextBox("CCs"); + r.push(`Around back, you have`); + if (V.PC.butt > 10) { + r.push(`a disproportionate swelling of flesh`); + } else if (V.PC.butt > 7) { + r.push(`an absurdly large butt`); + } else if (V.PC.butt > 6) { + r.push(`a ridiculous ass`); + } else if (V.PC.butt > 5) { + r.push(`a gigantic ass`); + } else if (V.PC.butt > 4) { + r.push(`an enormous ass`); + } else if (V.PC.butt > 3) { + r.push(`a huge ass`); + } else if (V.PC.butt > 2) { + r.push(`a big butt`); + } else if (V.PC.butt > 1) { + r.push(`a shapely rear`); + } else if (V.PC.butt > 0) { + r.push(`a trim rear`); + } else { + r.push(`a flat ass`); } - - if (V.cheatMode) { - if (V.PC.boobs >= 500) { - options.addOption("Your breasts are", "lactation", V.PC) - .addValueList([ - ["Lactating", 1], - ["Not Lactating", 0] - ]); - } + r.push(`attached to a pair of`); + if (V.PC.hips > 2) { + r.push(`inhumanly wide hips.`); + } else if (V.PC.hips > 1) { + r.push(`very wide hips.`); + } else if (V.PC.hips > 0) { + r.push(`wide hips.`); + } else if (V.PC.hips > -1) { + r.push(`average hips.`); + } else if (V.PC.hips > -2) { + r.push(`narrow hips.`); + } else { + r.push(`very narrow hips.`); } - options.addOption("Your butt size", "butt", V.PC) - .addValueList([ - ["Normal", 2], - ["Big", 3], - ["Huge", 4], - ["Enormous", 5], - ]) - .showTextBox(); - - options.addOption("Your butt is", "buttImplant", V.PC) - .addValueList([ - ["All natural", 0], - ["Fake", 1] - ]) - .showTextBox("CCs"); - - - options.addOption("You are genetically", "genes", V.PC) - .addValue("XY").addValue("XX"); - - el.append(options.render()); - } else { - r = []; - r.push(`You have a`); - if (V.PC.vagina !== -1 && V.PC.dick !== 0) { - r.push(`penis and vagina`); - } else if (V.PC.dick !== 0) { - r.push(`penis.`); - } else if (V.PC.vagina !== -1) { - r.push(`vagina`); + r.push(`Between your legs, you have`); + if (V.PC.dick !== 0) { + if (V.PC.dick === 1) { + r.push(`a tiny, humilating`); + } else if (V.PC.dick === 2) { + r.push(`a small`); + } else if (V.PC.dick === 3) { + r.push(`an average`); + } else if (V.PC.dick === 4) { + r.push(`a big`); + } else if (V.PC.dick === 5) { + r.push(`a huge`); + } else if (V.PC.dick === 6) { + r.push(`a pussy wrecking`); + } else if (V.PC.dick === 7) { + r.push(`a massive, unusable`); + } else if (V.PC.dick === 8) { + r.push(`an imposing, if unusable,`); + } else if (V.PC.dick === 9) { + r.push(`a monster of a`); + } else if (V.PC.dick === 10) { + r.push(`an inhuman`); + } else { + r.push(`an unusable slab of sensetive flesh you call a`); + } + r.push(`dick`); + if (V.PC.balls !== 0) { + r.push(r.pop() + ","); + } + if (V.PC.balls === 1) { + if (V.PC.scrotum === 0) { + r.push(`a tiny pair of internal balls`); + } else { + r.push(`vestigial testicles`); + } + } else if (V.PC.balls === 2) { + if (V.PC.scrotum === 0) { + r.push(`a pair of internal balls`); + } else { + r.push(`a pair of small testicles`); + } + } else if (V.PC.balls === 3) { + r.push(`a pair of average testicles`); + } else if (V.PC.balls === 4) { + r.push(`a dangling pair of large balls`); + } else if (V.PC.balls === 5) { + r.push(`a dangling pair of heavy testicles`); + } else if (V.PC.balls === 6) { + r.push(`a heavy pair of huge balls`); + } else if (V.PC.balls === 7) { + r.push(`a ponderous set of giant testicles`); + } else if (V.PC.balls === 8) { + r.push(`a ponderous set of enormous testicles`); + } else if (V.PC.balls === 9) { + r.push(`a monstrous pair of testicles`); + } else { + r.push(`an inhuman pair of testicles`); + } + if (V.PC.vagina !== -1) { + r.push(`and`); + } else { + r.push(r.pop() + "."); + } } if (V.PC.vagina !== -1) { - r.push(`and are`); + if (V.PC.vagina === 0) { + r.push(`an unsullied`); + } else if (V.PC.vagina === 1 || V.PC.newVag === 1) { + // nothing + } else if (V.PC.vagina === 2) { + r.push(`an experienced`); + } else if (V.PC.vagina === 3) { + r.push(`a loose`); + } else if (V.PC.vagina === 4) { + r.push(`a very well-traveled`); + } else { + r.push(`a ruined`); + } + r.push(`vagina.`); + } + if (V.PC.vagina !== -1 && V.PC.mpreg !== 0) { + r.push(`You are`); if (V.PC.pregWeek < 0) { - r.push(`recovering from your last pregnancy.`); + r.push(`currently recovering from your last pregnancy.`); } else if (V.PC.preg === -2) { - r.push(`infertile.`); + r.push(`infertile and can't get pregnant.`); } else if (V.PC.preg === -1) { - r.push(`taking contraceptives.`); + r.push(`taking contraceptives to avoid potential pregnancy.`); } else if (V.PC.preg === 0) { - r.push(`fertile.`); + if (V.PC.pubertyXX === 0) { + r.push(`not yet fertile.`); + } else { + r.push(`fertile and capable of becoming pregnant.`); + } } else if (V.PC.preg > 37) { - r.push(`extremely pregnant.`); + r.push(`extremely pregnant and likely to give birth soon.`); } else if (V.PC.preg > 0) { - r.push(`pregnant.`); + r.push(`currently pregnant.`); } linkArray = []; @@ -974,44 +1159,6 @@ App.UI.Player.design = function() { } } - if (V.PC.boobs >= 300) { - r.push(`You have a`); - if (V.PC.title > 0) { - r.push(`masculine`); - } else { - r.push(`feminine`); - } - r.push(`body with`); - if (V.PC.boobs >= 1400) { - r.push(`giant${(V.PC.boobsImplant !== 0) ? `, fake` : ``} cow tits.`); - } else if (V.PC.boobs >= 1200) { - r.push(`huge`); - if (V.PC.boobsImplant !== 0) { - r.push(`fake`); - } - r.push(`breasts.`); - } else if (V.PC.boobs >= 1000) { - r.push(`big`); - if (V.PC.boobsImplant !== 0) { - r.push(`fake`); - } - r.push(`breasts.`); - } else if (V.PC.boobs >= 800) { - r.push(`noticeable breasts.`); - } else if (V.PC.boobs >= 650) { - r.push(`unremarkable breasts.`); - } else if (V.PC.boobs >= 500) { - r.push(`average breasts.`); - } else { - r.push(`small breasts.`); - } - } else { - if (V.PC.title > 0) { - r.push(`You have a manly chest.`); - } else { - r.push(`You are flat as a board.`); - } - } App.Events.addNode(el, r, "p"); } diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js index 42daf74d95270ba38c0e854d584be8049d7a49d4..dd4173e855497fa45df1def71a10920719d7c37c 100644 --- a/src/player/js/PlayerState.js +++ b/src/player/js/PlayerState.js @@ -609,7 +609,7 @@ App.Entity.PlayerState = class PlayerState { * * 70000-89999 - door-crowding * * 90000-100000 - door-jamming */ - this.boobs = 100; + this.boobs = 200; /** breast engorgement from unmilked tits */ this.boobsMilk = 0; /**