From f05c69e67898d4f176300353bdfce3dd83bbb055 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Sun, 29 Nov 2020 19:02:39 -0500 Subject: [PATCH] begind cheatmode --- src/events/intro/introSummary.js | 457 +------------------------ src/events/intro/pcAppearance.js | 464 +++++++++++++++++++++++++- src/events/intro/pcAppearanceIntro.tw | 2 +- src/events/intro/pcBodyIntro.js | 4 +- 4 files changed, 465 insertions(+), 462 deletions(-) diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js index 8a091bfd4e8..ca397aefc67 100644 --- a/src/events/intro/introSummary.js +++ b/src/events/intro/introSummary.js @@ -45,7 +45,7 @@ App.Intro.summary = function() { { title: "Player Character", id: "player", - get node() { return playerContent(); } + get node() { return App.UI.Player.design(); } }, { title: "UI", @@ -605,434 +605,6 @@ App.Intro.summary = function() { return el; } - function playerContent() { - const el = new DocumentFragment(); - let options = new App.UI.OptionsGroup(); - let option; - let r; - let linkArray; - - if (V.freshPC === 1 || V.saveImported === 0) { - options.addOption("You are a", "title", V.PC) - .addValue("Masculine Master", 1, () => V.PC.genes = "XY").addValue("Feminine Mistress", 0, () => V.PC.genes = "XX"); - - App.Intro.PCNames(options); - - V.PC.physicalAge = V.PC.actualAge; - V.PC.visualAge = V.PC.actualAge; - options.addOption("You are", "actualAge", V.PC).showTextBox() - .addRange(25, 35, "<", "Surprisingly young").addRange(40, 50, "<", "Entering middle age") - .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(); - - options.addOption("Player aging is", "playerAging") - .addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off() - .addComment("This option cannot be changed during the game."); - - if (V.PC.customTitle) { - options.addOption("Custom title", "customTitle", V.PC).showTextBox() - .addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; }); - - options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox() - .addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.'); - } else { - options.addOption("Custom title", "customTitle", V.PC) - .addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather'); - } - - App.Intro.pcAppearance(options); - - options.addOption("Your face is", "faceShape", V.PC) - .addValueList([ - ["Normal", "normal"], - ["Androgynous", "androgynous"], - ["Masculine", "masculine"], - ["Cute", "cute"], - ["Sensual", "sensual"], - ["Exotic", "exotic"] - ]); - - App.Intro.refreshmentChoice(options); - - option = options.addOption("Before you came to the Free Cities, you were a", "career", V.PC); - if (V.PC.career === "arcology owner") { - option.addValue("Arcology owner", "arcology owner"); - } else { - option.addValueList([ - ["Member of the idle wealthy", "wealth"], - ["Business leader", "capitalist"], - ["Mercenary", "mercenary"], - ["Slaver", "slaver"], - ["Engineer", "engineer"], - ["Doctor", "medicine"], - ["Hacker", "BlackHat"], - ["Minor celebrity", "celebrity"], - ["Escort", "escort"], - ["Servant", "servant"], - ["Gang leader", "gang"]] - ); - 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>`); - } - } - } - - options.addOption("It is rumored that you acquired your arcology through", "rumor", V.PC) - .addValueList([ - ["Wealth", "wealth"], - ["Hard work", "diligence"], - ["Force", "force"], - ["Social engineering", "social engineering"], - ["Blind luck", "luck"] - ]); - - el.append(options.render()); - - App.UI.DOM.appendNewElement("h2", el, "Sexuality"); - 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."); - } - - if (V.PC.vagina !== -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; }) - .addRange(16, 37, "<=", "Pregnant").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; }) - .addRange(40, 42, "<=", "Ready to drop").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; }) - .addRange(43, 42, ">", "Ready to drop with octuplets").addCallback(() => { V.PC.pregType = 8; V.PC.labor = 1; }); - if (V.PC.preg === -1) { - option.addComment("You can't get pregnant, however there will be a slight increase to living expenses."); - } - - if (V.PC.counter.birthsTotal > 0) { - options.addOption("").addComment(`You have given birth to <strong>${V.PC.counter.birthsTotal}</strong> babies.`); - } - - option = options.addOption("Hormone effects", "pregMood", V.PC) - .addValueList([ - ["None", 0], - ["Caring and motherly", 1], - ["Aggressive and domineering", 2] - ]); - if (V.PC.pregMood === 1) { - option.addComment("Sex scene alterations; slaves will trust you more, but may try to take advantage of your mercy."); - } else if (V.PC.pregMood === 2) { - option.addComment("Sex scene alterations; slaves will fear you more, but will become more submissive to you."); - } - } - - 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); - } else { - option = options.addOption("Your breasts are", "boobs", V.PC).addValue("Flat", 100, () => V.PC.boobsImplant = 0); - } - option.addValueList([ - ["C-cups", 500], - ["DD-cups", 900], - ["F-cups", 1100], - ["G-cups", 1300] - ]); - - if (V.PC.boobs >= 500) { - options.addOption("Your breasts are", "boobsImplant", V.PC) - .addValueList([ - ["All natural", 0], - ["Fake", 400] - ]); - } - - el.append(options.render()); - } else { - r = []; - r.push(`You are a`); - if (V.PC.title === 1) { - r.push(`masculine <strong>Master</strong>`); - } else { - r.push(`feminine ''Mistress'`); - } - r.push(`and everyone that matters calls you ${PlayerName()}.`); - - 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) { - r.push(`<strong>well into middle age</strong>.`); - } else if (V.PC.actualAge >= 35) { - r.push(`<strong>entering middle age</strong>.`); - } else { - r.push(`<strong>surprisingly young</strong>.`); - } - App.Events.addNode(el, r, "p"); - - r = []; - - r.push(`You are a ${V.PC.nationality} ${V.PC.race} with`); - if (V.PC.markings === "heavily freckled") { - r.push(`heavily freckled`); - } else if (V.PC.markings === "freckles") { - r.push(`lightly freckled`); - } 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.`); - App.Events.addNode(el, r, "p"); - options = new App.UI.OptionsGroup(); - options.addOption("Player aging is", "playerAging") - .addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off() - .addComment("This option cannot be changed during the game."); - - if (V.PC.customTitle) { - options.addOption("Custom title", "customTitle", V.PC).showTextBox() - .addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; }); - - options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox() - .addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.'); - } else { - options.addOption("Custom title", "customTitle", V.PC) - .addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather'); - } - - App.Intro.refreshmentChoice(options); - - el.append(options.render()); - - r = []; - switch (V.PC.career) { - case "wealth": - 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 "mercenary": - r.push(`Prior to being an arcology owner, you were a mercenary.`); - break; - case "slaver": - r.push(`Prior to being an arcology owner, you were a slaver.`); - break; - case "engineer": - r.push(`Prior to being an arcology owner, you were an engineer.`); - break; - case "medicine": - r.push(`Prior to being an arcology owner, you were a surgeon.`); - break; - case "celebrity": - r.push(`Prior to being an arcology owner, you were a minor celebrity.`); - break; - case "BlackHat": - 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": - r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`); - break; - case "servant": - r.push(`Prior to being an arcology owner, you served a well-off`); - if (V.PC.counter.birthMaster >= 2) { - r.push(`master and bore him several children.`); - } else { - r.push(`master.`); - } - break; - case "gang": - r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`); - break; - } - - r.push(`Word in the arcology is you acquired it through`); - switch (V.PC.rumor) { - case "wealth": - r.push(`a rather ridiculous amount of money.`); - break; - case "diligence": - r.push(`sheer effort.`); - break; - case "force": - r.push(`brutal force.`); - break; - case "social engineering": - r.push(`clever social manipulation.`); - break; - case "luck": - r.push(`blind luck.`); - break; - } - App.Events.addNode(el, r, "p"); - - 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`); - } - if (V.PC.vagina !== -1) { - r.push(`and are`); - if (V.PC.pregWeek < 0) { - r.push(`recovering from your last pregnancy.`); - } else if (V.PC.preg === -2) { - r.push(`infertile.`); - } else if (V.PC.preg === -1) { - r.push(`taking contraceptives.`); - } else if (V.PC.preg === 0) { - r.push(`fertile.`); - } else if (V.PC.preg > 37) { - r.push(`extremely pregnant.`); - } else if (V.PC.preg > 0) { - r.push(`pregnant.`); - } - - linkArray = []; - if (V.PC.preg > 20 || V.PC.counter.birthsTotal > 0) { - if (V.PC.pregMood === 1) { - r.push(`You tend to be caring and motherly when you're pregnant.`); - linkArray.push(noChange(), aggressive()); - } else if (V.PC.pregMood === 0) { - r.push(`Pregnancy doesn't really affect your mood.`); - linkArray.push(motherly(), aggressive()); - } else { - r.push(`You tend to be very demanding and aggressive when you're pregnant.`); - linkArray.push(noChange(), motherly()); - } - } else { - if (V.PC.pregMood === 1) { - r.push(`You tend to be caring and motherly when you're hormonal.`); - linkArray.push(noChange(), aggressive()); - } else if (V.PC.pregMood === 0) { - r.push(`Your mood isn't tied to your hormones.`); - linkArray.push(motherly(), aggressive()); - } else { - r.push(`You tend to be very demanding and aggressive when you're hormonal.`); - linkArray.push(noChange(), motherly()); - } - } - - r.push(App.UI.DOM.generateLinksStrip(linkArray)); - if (V.PC.counter.birthsTotal > 0) { - r.push(`You have given birth to ${V.PC.counter.birthsTotal} babies.`); - } - } - - 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"); - } - - return el; - } - function interfaceContent() { const el = new DocumentFragment(); let options = new App.UI.OptionsGroup(); @@ -1060,31 +632,4 @@ App.Intro.summary = function() { el.append(App.UI.artOptions()); return el; } - - function noChange() { - return App.UI.DOM.link( - "Change to no change", - () => { V.PC.pregMood = 0; }, - [], - "Intro Summary" - ); - } - - function motherly() { - return App.UI.DOM.link( - "Change to motherly", - () => { V.PC.pregMood = 1; }, - [], - "Intro Summary" - ); - } - - function aggressive() { - return App.UI.DOM.link( - "Change to aggressive", - () => { V.PC.pregMood = 2; }, - [], - "Intro Summary" - ); - } }; diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js index cec9e6a2ac5..70bda99103e 100644 --- a/src/events/intro/pcAppearance.js +++ b/src/events/intro/pcAppearance.js @@ -1,4 +1,6 @@ -App.Intro.pcAppearance = function(options) { +App.UI.Player = {}; + +App.UI.Player.appearance = function(options) { options.addOption("Your nationality is", "nationality", V.PC).showTextBox() .addValueList(Object.keys(App.Data.SlaveSummary.short.nationality)) .addComment("For best result capitalize it."); @@ -23,7 +25,7 @@ App.Intro.pcAppearance = function(options) { } }; -App.Intro.refreshmentChoice = function(options) { +App.UI.Player.refreshmentChoice = function(options) { options.addOption("Your preferred refreshment is", "refreshment", V.PC).showTextBox() .addValue("Cigars", "cigar", () => { V.PC.refreshmentType = 0; }) .addValue("Whiskey", "whiskey", () => { V.PC.refreshmentType = 1; }); @@ -42,7 +44,7 @@ App.Intro.refreshmentChoice = function(options) { option.addComment(comment); }; -App.Intro.PCNames = function(options) { +App.UI.Player.names = function(options) { options.addOption(`Everyone calls you <b>${PlayerName()}.</b>`); options.addOption("Your given name is", "slaveName", V.PC).showTextBox(); @@ -56,3 +58,459 @@ App.Intro.PCNames = function(options) { .addComment("Surnames cannot be changed during the game outside of special circumstances."); } }; + +App.UI.Player.design = function() { + const el = new DocumentFragment(); + let options = new App.UI.OptionsGroup(); + let option; + let r; + let linkArray; + const freshStart = (V.freshPC === 1 || V.saveImported === 0); + + if (freshStart) { + options.addOption("You are a", "title", V.PC) + .addValue("Masculine Master", 1, () => V.PC.genes = "XY").addValue("Feminine Mistress", 0, () => V.PC.genes = "XX"); + + App.UI.Player.names(options); + + V.PC.physicalAge = V.PC.actualAge; + V.PC.visualAge = V.PC.actualAge; + options.addOption("You are", "actualAge", V.PC).showTextBox() + .addRange(25, 35, "<", "Surprisingly young").addRange(40, 50, "<", "Entering middle age") + .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(); + + options.addOption("Player aging is", "playerAging") + .addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off() + .addComment("This option cannot be changed during the game."); + + if (V.PC.customTitle) { + options.addOption("Custom title", "customTitle", V.PC).showTextBox() + .addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; }); + + options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox() + .addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.'); + } else { + options.addOption("Custom title", "customTitle", V.PC) + .addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather'); + } + + App.UI.Player.appearance(options); + + options.addOption("Your face is", "faceShape", V.PC) + .addValueList([ + ["Normal", "normal"], + ["Androgynous", "androgynous"], + ["Masculine", "masculine"], + ["Cute", "cute"], + ["Sensual", "sensual"], + ["Exotic", "exotic"] + ]); + + App.UI.Player.refreshmentChoice(options); + + option = options.addOption("Before you came to the Free Cities, you were a", "career", V.PC); + if (V.PC.career === "arcology owner") { + option.addValue("Arcology owner", "arcology owner"); + } else { + option.addValueList([ + ["Member of the idle wealthy", "wealth"], + ["Business leader", "capitalist"], + ["Mercenary", "mercenary"], + ["Slaver", "slaver"], + ["Engineer", "engineer"], + ["Doctor", "medicine"], + ["Hacker", "BlackHat"], + ["Minor celebrity", "celebrity"], + ["Escort", "escort"], + ["Servant", "servant"], + ["Gang leader", "gang"]] + ); + 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>`); + } + } + } + + options.addOption("It is rumored that you acquired your arcology through", "rumor", V.PC) + .addValueList([ + ["Wealth", "wealth"], + ["Hard work", "diligence"], + ["Force", "force"], + ["Social engineering", "social engineering"], + ["Blind luck", "luck"] + ]); + + el.append(options.render()); + + App.UI.DOM.appendNewElement("h2", el, "Sexuality"); + 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."); + } + + if (V.PC.vagina !== -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; }) + .addRange(16, 37, "<=", "Pregnant").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; }) + .addRange(40, 42, "<=", "Ready to drop").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; }) + .addRange(43, 42, ">", "Ready to drop with octuplets").addCallback(() => { V.PC.pregType = 8; V.PC.labor = 1; }); + if (V.PC.preg === -1) { + option.addComment("You can't get pregnant, however there will be a slight increase to living expenses."); + } + + if (V.PC.counter.birthsTotal > 0) { + options.addOption("").addComment(`You have given birth to <strong>${V.PC.counter.birthsTotal}</strong> babies.`); + } + + option = options.addOption("Hormone effects", "pregMood", V.PC) + .addValueList([ + ["None", 0], + ["Caring and motherly", 1], + ["Aggressive and domineering", 2] + ]); + if (V.PC.pregMood === 1) { + option.addComment("Sex scene alterations; slaves will trust you more, but may try to take advantage of your mercy."); + } else if (V.PC.pregMood === 2) { + option.addComment("Sex scene alterations; slaves will fear you more, but will become more submissive to you."); + } + } + + 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); + } else { + option = options.addOption("Your breasts are", "boobs", V.PC).addValue("Flat", 100, () => V.PC.boobsImplant = 0); + } + option.addValueList([ + ["C-cups", 500], + ["DD-cups", 900], + ["F-cups", 1100], + ["G-cups", 1300] + ]); + + if (V.PC.boobs >= 500) { + options.addOption("Your breasts are", "boobsImplant", V.PC) + .addValueList([ + ["All natural", 0], + ["Fake", 400] + ]); + } + + el.append(options.render()); + } else { + r = []; + r.push(`You are a`); + if (V.PC.title === 1) { + r.push(`masculine <strong>Master</strong>`); + } else { + r.push(`feminine ''Mistress'`); + } + r.push(`and everyone that matters calls you ${PlayerName()}.`); + + 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) { + r.push(`<strong>well into middle age</strong>.`); + } else if (V.PC.actualAge >= 35) { + r.push(`<strong>entering middle age</strong>.`); + } else { + r.push(`<strong>surprisingly young</strong>.`); + } + App.Events.addNode(el, r, "p"); + + r = []; + + r.push(`You are a ${V.PC.nationality} ${V.PC.race} with`); + if (V.PC.markings === "heavily freckled") { + r.push(`heavily freckled`); + } else if (V.PC.markings === "freckles") { + r.push(`lightly freckled`); + } 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.`); + App.Events.addNode(el, r, "p"); + options = new App.UI.OptionsGroup(); + options.addOption("Player aging is", "playerAging") + .addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off() + .addComment("This option cannot be changed during the game."); + + if (V.PC.customTitle) { + options.addOption("Custom title", "customTitle", V.PC).showTextBox() + .addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; }); + + options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox() + .addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.'); + } else { + options.addOption("Custom title", "customTitle", V.PC) + .addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather'); + } + + App.UI.Player.refreshmentChoice(options); + + el.append(options.render()); + + r = []; + switch (V.PC.career) { + case "wealth": + 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 "mercenary": + r.push(`Prior to being an arcology owner, you were a mercenary.`); + break; + case "slaver": + r.push(`Prior to being an arcology owner, you were a slaver.`); + break; + case "engineer": + r.push(`Prior to being an arcology owner, you were an engineer.`); + break; + case "medicine": + r.push(`Prior to being an arcology owner, you were a surgeon.`); + break; + case "celebrity": + r.push(`Prior to being an arcology owner, you were a minor celebrity.`); + break; + case "BlackHat": + 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": + r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`); + break; + case "servant": + r.push(`Prior to being an arcology owner, you served a well-off`); + if (V.PC.counter.birthMaster >= 2) { + r.push(`master and bore him several children.`); + } else { + r.push(`master.`); + } + break; + case "gang": + r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`); + break; + } + + r.push(`Word in the arcology is you acquired it through`); + switch (V.PC.rumor) { + case "wealth": + r.push(`a rather ridiculous amount of money.`); + break; + case "diligence": + r.push(`sheer effort.`); + break; + case "force": + r.push(`brutal force.`); + break; + case "social engineering": + r.push(`clever social manipulation.`); + break; + case "luck": + r.push(`blind luck.`); + break; + } + App.Events.addNode(el, r, "p"); + + 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`); + } + if (V.PC.vagina !== -1) { + r.push(`and are`); + if (V.PC.pregWeek < 0) { + r.push(`recovering from your last pregnancy.`); + } else if (V.PC.preg === -2) { + r.push(`infertile.`); + } else if (V.PC.preg === -1) { + r.push(`taking contraceptives.`); + } else if (V.PC.preg === 0) { + r.push(`fertile.`); + } else if (V.PC.preg > 37) { + r.push(`extremely pregnant.`); + } else if (V.PC.preg > 0) { + r.push(`pregnant.`); + } + + linkArray = []; + if (V.PC.preg > 20 || V.PC.counter.birthsTotal > 0) { + if (V.PC.pregMood === 1) { + r.push(`You tend to be caring and motherly when you're pregnant.`); + linkArray.push(noChange(), aggressive()); + } else if (V.PC.pregMood === 0) { + r.push(`Pregnancy doesn't really affect your mood.`); + linkArray.push(motherly(), aggressive()); + } else { + r.push(`You tend to be very demanding and aggressive when you're pregnant.`); + linkArray.push(noChange(), motherly()); + } + } else { + if (V.PC.pregMood === 1) { + r.push(`You tend to be caring and motherly when you're hormonal.`); + linkArray.push(noChange(), aggressive()); + } else if (V.PC.pregMood === 0) { + r.push(`Your mood isn't tied to your hormones.`); + linkArray.push(motherly(), aggressive()); + } else { + r.push(`You tend to be very demanding and aggressive when you're hormonal.`); + linkArray.push(noChange(), motherly()); + } + } + + r.push(App.UI.DOM.generateLinksStrip(linkArray)); + if (V.PC.counter.birthsTotal > 0) { + r.push(`You have given birth to ${V.PC.counter.birthsTotal} babies.`); + } + } + + 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"); + } + + return el; + + function noChange() { + return App.UI.DOM.link( + "Change to no change", + () => { V.PC.pregMood = 0; }, + [], + "Intro Summary" + ); + } + + function motherly() { + return App.UI.DOM.link( + "Change to motherly", + () => { V.PC.pregMood = 1; }, + [], + "Intro Summary" + ); + } + + function aggressive() { + return App.UI.DOM.link( + "Change to aggressive", + () => { V.PC.pregMood = 2; }, + [], + "Intro Summary" + ); + } +}; diff --git a/src/events/intro/pcAppearanceIntro.tw b/src/events/intro/pcAppearanceIntro.tw index 3c9e22e1a7c..3854ab1ddab 100644 --- a/src/events/intro/pcAppearanceIntro.tw +++ b/src/events/intro/pcAppearanceIntro.tw @@ -7,7 +7,7 @@ </div> </p> <<set _options = new App.UI.OptionsGroup()>> -<<run App.Intro.pcAppearance(_options)>> +<<run App.UI.Player.appearance(_options)>> <<includeDOM _options.render()>> <p> diff --git a/src/events/intro/pcBodyIntro.js b/src/events/intro/pcBodyIntro.js index 9be66507771..f22df55907d 100644 --- a/src/events/intro/pcBodyIntro.js +++ b/src/events/intro/pcBodyIntro.js @@ -150,8 +150,8 @@ App.Intro.PCBodyIntro = function() { App.UI.DOM.appendNewElement("div", el, `What is your name and alternate indulgence?`, ["intro", "question"]); - App.Intro.PCNames(options); - App.Intro.refreshmentChoice(options); + App.UI.Player.names(options); + App.UI.Player.refreshmentChoice(options); el.append(options.render()); -- GitLab