diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js new file mode 100644 index 0000000000000000000000000000000000000000..46365ff63372e6fd1dbdbfb633a8393db06f8322 --- /dev/null +++ b/src/events/intro/introSummary.js @@ -0,0 +1,857 @@ +App.Intro.summary = function() { + const el = new DocumentFragment(); + let linkArray; +/* + <style> + .active { + r.push(`background-color: grey;`); + } + </style> + */ + + V.neighboringArcologies = variableAsNumber(V.neighboringArcologies, 0, 8, 3); + V.FSCreditCount = variableAsNumber(V.FSCreditCount, 4, 7, 5); + V.PC.actualAge = variableAsNumber(V.PC.actualAge, 14, 80, 35); + V.PC.birthWeek = variableAsNumber(V.PC.birthWeek, 0, 51, 0); + + App.UI.DOM.appendNewElement("div", `You may review your settings before clicking "Continue" to begin.`); + + + linkArray = []; + linkArray.push( + App.UI.DOM.link( + "Continue", + () => { + if (V.freshPC === 1 || V.saveImported === 0) { + switch (V.PC.career) { + case "wealth": + if (V.PC.vagina === 1) { + V.PC.vagina = 2; + } + case "capitalist": + V.PC.skill.trading = 100; + case "mercenary": + V.PC.skill.warfare = 100; + case "slaver": + V.PC.skill.slaving = 100; + case "engineer": + V.PC.skill.engineering = 100; + case "medicine": + V.PC.skill.medicine = 100; + case "celebrity": + if (V.PC.vagina === 1) { + V.PC.vagina = 2; + } + case "BlackHat": + V.PC.skill.hacking = 100; + case "arcology owner": + V.PC.skill.trading = 100, V.PC.skill.warfare = 100, V.PC.skill.hacking = 100, V.PC.skill.slaving = 100, V.PC.skill.engineering = 100, V.PC.skill.medicine = 100; + case "escort": + if (V.PC.vagina === 1) { + V.PC.vagina = 4; + } + V.PC.anus = 1; + V.PC.clothes = "a slutty outfit"; + V.PC.education = 15; + V.PC.skill.trading = 50, V.PC.skill.warfare = -100, V.PC.skill.slaving = -100, V.PC.skill.engineering = -100, V.PC.skill.medicine = 10, V.PC.skill.hacking = 10; + case "servant": + V.PC.clothes = "a nice maid outfit"; + V.PC.education = 0; + if (V.PC.vagina === 1) { + V.PC.vagina = 4; + } + V.PC.skill.trading = -100, V.PC.skill.warfare = -100, V.PC.skill.slaving = -100, V.PC.skill.engineering = -100, V.PC.skill.medicine = -100, V.PC.skill.hacking = -100; + case "gang": + if (V.PC.vagina === 1) { + V.PC.vagina = 2; + } + V.PC.skill.trading = 50, V.PC.skill.warfare = 50, V.PC.skill.slaving = 50, V.PC.skill.engineering = -100, V.PC.skill.medicine = 0, V.PC.skill.hacking = 50; + } + } + if (V.saveImported === 1 && V.freshPC === 0 && V.PC.rules.living !== "luxurious") { + if (V.PC.rules.living === "spare") { + V.PC.rules.living = "normal"; + } else { + V.PC.rules.living = "luxurious"; + } + } else if (V.PC.career === "wealth" || V.PC.career === "celebrity") { + V.PC.rules.living = "normal"; + } else { + V.PC.rules.living = "spare"; + } + App.Intro.initNationalities(); + SectorCounts(); // Update AProsperityCap + }, + [], + "Starting Girls" + ) + ) + + if ((V.economy !== 100) || (V.seeDicks !== 25) || (V.continent !== "North America") || (V.internationalTrade !== 1) || (V.internationalVariety !== 1) || (V.seeRace !== 1) || (V.seeNationality !== 1) || (V.seeExtreme !== 0) || (V.seeCircumcision !== 1) || (V.seeAge !== 1) || (V.plot !== 1)) { + linkArray.push( + App.UI.DOM.link( + "restore defaults", + () => { + V.seeDicks = 25, V.economy = 100, V.continent = "North America", V.internationalTrade = 1, V.internationalVariety = 1, V.seeRace = 1, V.seeNationality = 1, V.seeExtreme = 0, V.seeCircumcision = 1, V.seeAge = 1, V.plot = 1 + }, + [], + "Intro Summary" + ) + ) + } + linkArray.push( + App.UI.DOM.link( + "Cheat Start", + () => { + cashX(1000000, "cheating"), V.PC.rules.living = "luxurious",repX(20000, "cheating"), V.dojo += 1, V.cheatMode = 1, V.seeDesk = 0, V.seeFCNN = 0, V.sortSlavesBy = "devotion", V.sortSlavesOrder = "descending", V.sortSlavesMain = 0, V.rulesAssistantMain = 1, V.UI.slaveSummary.abbreviation = {devotion: 1, rules: 1, clothes: 2, health: 1, diet: 1, drugs: 1, race: 1, nationality: 1, genitalia: 1, physicals: 1, skills: 1, mental: 2}, V.PC.skill.trading = 100, V.PC.skill.warfare = 100, V.PC.skill.slaving = 100, V.PC.skill.engineering = 100, V.PC.skill.medicine = 100, V.PC.skill.hacking = 100, App.Intro.initNationalities() + }, + [], + "Starting Girls", + "Intended for debugging: may have unexpected effects" + ) + ) + + V.minimumSlaveAge = variableAsNumber(V.minimumSlaveAge, 3, 18, 18); + V.retirementAge = variableAsNumber(V.retirementAge, 25, 120, 45); + V.fertilityAge = variableAsNumber(V.fertilityAge, 3, 18, 13); + V.potencyAge = variableAsNumber(V.potencyAge, 3, 18, 13); + V.PC.mother = Number(V.PC.mother); + V.PC.father = Number(V.PC.father); + if (V.freshPC === 1 || V.saveImported === 0) { + V.PC.origRace = V.PC.race; + V.PC.origSkin = V.PC.skin; + V.PC.origEye = V.PC.eye.right.iris; // needed for compatibility + V.PC.origHColor = V.PC.hColor; + } + + App.UI.tabBar.handlePreSelectedTab(V.tabChoice.IntroSummary); + + /** @type {Array<siCategory>} */ + const buttons = [ + { + title: "World", + id: "world", + get node() { return App.UI.SlaveInteract.description(slave); } + }, + { + title: "Slaves", + id: "slaves", + get node() { return App.UI.SlaveInteract.modify(slave); } + }, + { + title: "Player Character", + id: "player", + get node() { return App.UI.SlaveInteract.work(slave); } + }, + { + title: "UI", + id: "interface", + get node() { return App.UI.SlaveInteract.wardrobe(slave); } + } + ]; + + function interfaceFunction() { + const el = new DocumentFragment(); + let _options = new App.UI.OptionsGroup(); + + _options.addOption("Help tooltips are", "tooltipsEnabled") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment(`This is mostly for new players. <span class="exampleTooltip.noteworthy">Colored text</span> can have tooltips.`) + + _options.addOption("Accordion on week end defaults to", "useAccordion") + .addValue("Open", 0).on().addValue("Collapsed", 1).off() + + _options.addOption("Economic Tabs on weekly reports are", "useTabs") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + el.append(_options.render()); + + App.UI.DOM.appendNewElement("h2", el, "Images") + _options = new App.UI.OptionsGroup(); + + _options.addOption("Images are", "seeImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + el.append(_options.render()) + + el.append(App.UI.artOptions()); + return el; + } + + <div id="world" class="tab-content"> + <div class="content"> + + <h2>Economy</h2> + + _options = new App.UI.OptionsGroup(); + + V.localEcon = V.economy; + _options.addOption("Economic climate", "baseDifficulty") + .addValue("Very Easy", 1, () => ${V.economy} = 200).addValue("Easy", 2, () => V.economy = 125) + .addValue("Default Difficulty", 3, () => ${V.economy} = 100).addValue("Hard", 4, () => V.economy = 80) + .addValue("Very Hard", 5, () => ${V.economy} = 67) + + if (V.difficultySwitch === 1) { + V.econAdvantage = -2; + } + if (V.difficultySwitch === 0) { + V.econRate = 0; + } + _options.addOption("Economic forecast", "econRate").addComment("Some economic content requires this to be set to harder than vanilla") + .addValue("Vanilla", 0, () => ${V.difficultySwitch} = 0).addValue("Easy", 1, () => V.difficultySwitch = 1) + .addValue("Default", 2, () => ${V.difficultySwitch} = 1).addValue("Hard", 3, () => V.difficultySwitch = 1) + + /* Not functional yet + All the things you need to run your arcology are getting more expensive + if (V.incomeMod === 0) { + while all forms of income ''remain static''. + [[Easier|Intro Summary][V.incomeMod = 1]] + } else if (V.incomeMod === 1) { + while all forms of income ''rise but cannot keep pace''. + [[Harder|Intro Summary][V.incomeMod = 0]] | [[Easier|Intro Summary][V.incomeMod = 2]] + } else { + but luckily all forms of income ''rise in lockstep''. + [[Harder|Intro Summary][V.incomeMod = 1]] + } + */ + + V.foodCost = Math.trunc(2500/V.economy); + V.drugsCost = Math.trunc(10000/V.economy); + V.rulesCost = Math.trunc(10000/V.economy); + V.modCost = Math.trunc(5000/V.economy); + V.surgeryCost = Math.trunc(30000/V.economy); + + if (ndef V.customVariety) { + _options.addOption("You are using standardized slave trading channels.") + .customButton("Customize the slave trade", () => {${V.customVariety} = 1; V.customWA = 0}, "Customize Slave Trade") + + _options.addOption("", "internationalTrade") + .addValue("Allow intercontinental trade", 1).on().customDescription("The slave trade is ''international,'' so a wider variety of slaves will be available.") + .addValue("Restrict the trade to continental", 0).off().customDescription("The slave trade is ''continental,'' so a narrower variety of slaves will be available.") + + if (V.internationalTrade === 1) { + _options.addOption("International slave variety is", "internationalVariety") + .addValue("Normalized national variety", 1).customDescription("''normalized,'' so small nations will appear nearly as much as large ones.") + .addValue("Semi-realistic national variety", 0).customDescription("''semi-realistic,'' so more populous nations will be more common.") + } + } else { + _options.addOption("Nationality distributions are customized.") + .customButton("Adjust the slave trade", () => {${V.customWA} = 0; V.customVariety = 1}, "Customize Slave Trade") + .customButton("Stop customizing", () => {delete ${V.customVariety})} + + _options.addOption("").addCustomElement(` + <hr style="margin:0"> + <<includeDOM App.UI.nationalitiesDisplay() + <br style="clear:both"><hr style="margin:0"> + `) + } + /* closes ${V.customVariety} is defined */ + + _options.addOption("", "plot") + .addValue("Enable non-erotic events", 1).on().customDescription("Game mode: ''two-handed''. Includes non-erotic events concerning the changing world.") + .addValue("Disable non-erotic events", 0).off().customDescription("Game mode: ''one-handed''. No non-erotic events concerning the changing world.") + + <<includeDOM _options.render() + + <h2>The Free City</h2> + _options = new App.UI.OptionsGroup(); + + _options.addOption("The Free City features ''V.neighboringArcologies'' arcologies in addition to your own.", "neighboringArcologies") + .showTextBox().addComment("Setting this to 0 will disable most content involving the rest of the Free City.") + + if (V.targetArcology.fs === "New") { + _options.addOption("The Free City is located on ''V.terrain'' terrain.", "terrain") + .addValueList([["Urban", "urban"], ["Rural", "rural"], ["Ravine", "ravine"], ["Marine", "marine"], ["Oceanic", "oceanic"]]) + + if (V.terrain !== "oceanic") { + <<set _option = _options.addOption("The Free City is located in ''V.continent''.", "continent") + .addValue("North America").addCallback(() => ${V.language} = "English") + .addValue("South America").addCallback(() => ${V.language} = "Spanish") + .addValue("Brazil").addCallback(() => ${V.language} = "Portuguese") + .addValue("Western Europe").addCallback(() => ${V.language} = "English") + .addValue("Central Europe").addCallback(() => ${V.language} = "German") + .addValue("Eastern Europe").addCallback(() => ${V.language} = "Russian") + .addValue("Southern Europe").addCallback(() => ${V.language} = "Italian") + .addValue("Scandinavia").addCallback(() => ${V.language} = "Norwegian") + .addValue("the Middle East").addCallback(() => ${V.language} = "Arabic") + .addValue("Africa").addCallback(() => ${V.language} = "Arabic") + .addValue("Asia").addCallback(() => ${V.language} = "Chinese") + .addValue("Australia").addCallback(() => ${V.language} = "English") + .addValue("Japan").addCallback(() => ${V.language} = "Japanese") + } + + _options.addOption("The lingua franca of your arcology is", "language") + .showTextBox() + } else if (!["ArabianRevivalist", "AztecRevivalist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "RomanRevivalist"].includes(V.targetArcology.fs)) { + _options.addOption("The lingua franca of your arcology is", "language") + .addValueList(["English", "Spanish", "Arabic"]).showTextBox() + } + + _options.addOption("The Free City could develop as many as ''V.FSCreditCount'' future societies.", "FSCreditCount") + .showTextBox().addComment("5 is default, 4 behaves the same as pre-patch 0.9.9.0, max is 7. This option cannot be changed during the game.") + + <<includeDOM _options.render() + + <h2>Content</h2> + _options = new App.UI.OptionsGroup(); + + _options.addOption("Proportion of slave girls with dicks", "seeDicks") + .addValueList([["None (0%)", 0], ["Nearly none (1%)", 1], ["A few (10%)", 10], ["Some (25%)", 25], ["Half (50%)", 50], ["Lots (75%)", 75], ["Most (90%)", 90], ["Almost all (99%)", 99], ["All (100%)", 100]]) + + if (V.seeDicks === 0) { + _options.addOption("Should you be able to surgically attach a penis to your female slaves and starting girls?", "makeDicks") + .addValue("Yes", 1).on().addValue("No", 0).off() + } + + _options.addOption("Slaves getting sick is", "seeIllness") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Pregnancy related content is", "seePreg") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Children born in game strictly adhering to dick content settings is", "seeDicksAffectsPregnancy") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + if (V.seeDicksAffectsPregnancy === 0) { + _options.addOption("XX slaves only fathering daughters is", "adamPrinciple") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + } + + _options.addOption("Extreme pregnancy content like broodmothers is", "seeHyperPreg") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Advanced pregnancy complications such as miscarriage and premature birth are", "dangerousPregnancy") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Extreme content like amputation is", "seeExtreme") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Bestiality content is", "seeBestiality") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + + _options.addOption("Watersports content is", "seePee") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + + _options.addOption("Incest is", "seeIncest") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + + if (V.seeDicks !== 0 || V.makeDicks !== 0) { + _options.addOption("Circumcision is", "seeCircumcision") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + } + + <<includeDOM _options.render() + + <h2>Mods</h2> + _options = new App.UI.OptionsGroup(); + + _options.addOption("The Special Force Mod is", "Toggle", V.SF) + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("<div>This mod is initially from anon1888 but expanded by SFanon offers a lategame special (started out as security but changed to special in order to try and reduce confusion with CrimeAnon's separate Security Expansion (SecExp) mod) force, that is triggered after week 72.</div> + <div>It is non-canon where it conflicts with canonical updates to the base game.</div>") + + _options.addOption("The Security Expansion Mod is", "secExpEnabled") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("<div>This mod introduces security and crime in the arcology, as well as attacks and battles.</div> + <div>The mod can be activated in any moment, but it may result in unbalanced gameplay if activated very late in the game.</div>") + + <<includeDOM _options.render() + </div> + </div> + + <div id="slaves" class="tab-content"> + <div class="content"> + + _options = new App.UI.OptionsGroup(); + + _options.addOption("Master Suite report details such as slave changes are", "verboseDescriptions") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Slaves can have alternate titles", "newDescriptions") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Mention ethnicity", "seeRace") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Mention nationality", "seeNationality") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Dynasties of enslaved royalties are", "realRoyalties") + .addValueList([["Historical", 1], ["Random", 0]]) + + _options.addOption("New slaves may have male names", "allowMaleSlaveNames").addComment("This only affects slave generation and not your ability to name your slaves.") + .addValue("Enabled", true).on().addValue("Disabled", false).off() + + _options.addOption("Schema for ordering slave names is", "surnameOrder") + .addValueList([["Country of origin", 0], ["Name Surname", 1], ["Surname Name", 2]]) + + _options.addOption("Family size", "limitFamilies").addComment("Controls acquisition of additional relatives, by means other than birth, for slaves with families.") + .addValue("Allow extended families", 0).on().addValue("Restrict family size (Vanilla Emulation)", 1).off() + + _options.addOption("Tracking distant relatives is", "showDistantRelatives") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Successive breeding resulting in sub-average slaves is", "inbreeding") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Family titles for relatives", "allowFamilyTitles") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Slave assets affected by weight is", "weightAffectsAssets") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("Diet will still affect asset size.") + + _options.addOption("Curative side effects are", "curativeSideEffects") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Slaves with fat lips or heavy oral piercings may lisp", "disableLisping") + .addValue("Yes", 0).on().addValue("No", 1).off() + + <<includeDOM _options.render() + + <h2>Age</h2> + _options = new App.UI.OptionsGroup(); + + _options.addOption("Slave aging", "seeAge") + .addValue("Enabled", 1).on().addValue("Celebrate birthdays, but don't age.", 2).neutral().addValue("Disabled", 0).off() + + _options.addOption("Slave age distribution", "pedo_mode").addComment("In loli mode most new slaves are under the age of 18. May not apply to custom slaves and slaves from specific events.") + .addValue("Loli mode", 1, () => ${V.minimumSlaveAge} = 5).addValue("Normal mode", 0) + + V.minimumSlaveAge = Math.clamp(V.minimumSlaveAge, 3, 18); + _options.addOption("Girls appearing in the game will be no younger than", "minimumSlaveAge").showTextBox(); + + _options.addOption("Molestation of slaves younger than V.minimumSlaveAge is", "extremeUnderage") + .addValue("Permitted", 1).on().addValue("Forbidden", 0).off() + + V.retirementAge = Math.clamp(V.retirementAge, V.minimumSlaveAge + 1, 120); + _options.addOption("Initial retirement age will be at", "retirementAge") + .addComment("May cause issues with New Game and initial slaves if set below 45.").showTextBox() + + V.fertilityAge = Math.clamp(V.fertilityAge, 3, 18); + _options.addOption("Girls will not be able to become pregnant if their age is under", "fertilityAge").showTextBox(); + + V.potencyAge = Math.clamp(V.potencyAge, 3, 18); + _options.addOption("Girls will not be able to impregnate others if their age is under", "potencyAge").showTextBox(); + + _options.addOption("Precocious puberty is", "precociousPuberty").addComment("Under certain conditions they can become pregnant or inseminate others younger then normal age - V.fertilityAge, though they may also experience delayed puberty.") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Age penalties are", "AgePenalty").addComment("Job and career penalties due to age.") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + _options.addOption("Children growing as they age is", "loliGrow") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + <<includeDOM _options.render() + </div> + </div> + + <div id="player" class="tab-content"> + <div class="content"> + + _options = new App.UI.OptionsGroup(); + + 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") + + _options.addOption(`Everyone calls you <b>V.{PlayerName()}.</b>`); + _options.addOption("Your given name is", "slaveName", V.PC).showTextBox(); + + if (V.PC.slaveSurname === 0) { + _option = _options.addOption("And no surname", "slaveSurname", V.PC) + .addValue("Add a surname", "Anon") + .addComment("Surnames cannot be changed during the game outside of special circumstances.") + } else { + _option = _options.addOption("And your surname is", "slaveSurname", V.PC).showTextBox() + .addValue("Go by a single name", 0) + .addComment("Surnames cannot be changed during the game outside of special circumstances.") + } + + 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 ''V.PC.birthWeek'' 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 (def 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"]]) + + _options.addOption("Your preferred refreshment is", "refreshment", V.PC).showTextBox() + .addValue("Cigars", "cigar", () => {${V.PC.refreshmentType} = 0}) + .addValue("Whiskey", "whiskey", () => {${V.PC.refreshmentType} = 1}) + + <<set _option = _options.addOption("Which you", "refreshmentType", V.PC) + .addValueList([["Smoke", 0], ["Drink", 1], ["Eat", 2], ["Snort", 3], ["Inject", 4], ["Pop", 5], ["Orally dissolve", 6]]) + + if (V.PC.refreshmentType === 0) { + _option.addComment('"Smoked" must fit into the following sentence: "I smoked a V.PC.refreshment" to fit events properly.'); + } else if (V.PC.refreshmentType === 5) { + _option.addComment('"Popped" must fit into the following sentence: "I shook the bottle of V.PC.refreshment" to fit events properly.'); + } else if (V.PC.refreshmentType === 6) { + _option.addComment('"Orally Dissolved" must fit into the following sentence: "I placed a tab of V.PC.refreshment under my tongue" to fit events properly.'); + } + + _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>"); + 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>"); + 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>"); + case "engineer": + _option.addComment("<div><span class="yellowgreen">construction and upgrade of facilities will be cheaper.</span></div>"); + case "medicine": + _option.addComment("<div><span class="yellowgreen">Drug upgrades will be cheaper.</span></div>"); + case "celebrity": + _option.addComment("<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>"); + case "escort": + _option.addComment("<div><span class="red">Harder to maintain authority.</span></div>"); + case "servant": + _option.addComment("<div><span class="red">Harder to maintain authority.</span></div>"); + 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>"); + case "BlackHat": + _option.addComment("<div><span class="red">Harder to maintain authority.</span></div>"); + 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"]] + ) + + <<includeDOM _options.render() + + <h2>Sexuality</h2> + _options = new App.UI.OptionsGroup(); + + if (V.PC.vagina !== -1 && V.PC.dick !== 0) { + _vagina_penis = 2; + } else if (V.PC.vagina !== -1) { + _vagina_penis = 1; + } else { + _vagina_penis = 0; + } + + <<set _option = _options.addOption("You have a", "vagina_penis", 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 (_vagina_penis === 0) { + _option.addComment("Standard sex scenes; easiest reputation maintenance."); + } else if (_vagina_penis === 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) { + <<set _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 ''V.PC.counter.birthsTotal'' babies."); + } + + <<set _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]]) + } + + <<includeDOM _options.render() + } else { + + You are a + if (V.PC.title === 1) { + masculine ''Master'' + } else { + feminine ''Mistress' + } + and everyone that matters calls you + V.PlayerName() + . + + You are ${V.PC.actualAge} years old which is + if (V.PC.actualAge >= 65) { + ''old''. + } else if (V.PC.actualAge >= 50) { + ''well into middle age''. + } else if (V.PC.actualAge >= 35) { + ''entering middle age''. + } else { + ''surprisingly young''. + } + + <p> + You are a ${V.PC.nationality} V.PC.race with + if (V.PC.markings === "heavily freckled") { + heavily freckled + } else if (V.PC.markings === "freckles") { + lightly freckled + } else { + clear + } + ${V.PC.skin} skin, V.PC.hColor hair and + V.App.Desc.eyesColor(V.PC) + . You have a ${V.PC.faceShape} face. + </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 (def 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') + } + + _options.addOption("Your preferred refreshment is", "refreshment", V.PC).showTextBox() + .addValue("Cigars", "cigar", () => {${V.PC.refreshmentType} = 0}) + .addValue("Whiskey", "whiskey", () => {${V.PC.refreshmentType} = 1}) + + <<set _option = _options.addOption("Which you", "refreshmentType", V.PC) + .addValueList([["Smoke", 0], ["Drink", 1], ["Eat", 2], ["Snort", 3], ["Inject", 4], ["Pop", 5], ["Orally dissolve", 6]]) + + if (V.PC.refreshmentType === 0) { + _option.addComment('"Smoked" must fit into the following sentence: "I smoked a V.PC.refreshment" to fit events properly.'); + } else if (V.PC.refreshmentType === 5) { + _option.addComment('"Popped" must fit into the following sentence: "I shook the bottle of V.PC.refreshment" to fit events properly.'); + } else if (V.PC.refreshmentType === 6) { + _option.addComment('"Orally Dissolved" must fit into the following sentence: "I placed a tab of V.PC.refreshment under my tongue" to fit events properly.'); + } + <<includeDOM _options.render() + + <p> + switch (V.PC.career) { + case "wealth": + Prior to being an arcology owner, you were a member of the idle wealthy. + case "capitalist": + Prior to being an arcology owner, you were a business leader. + case "mercenary": + Prior to being an arcology owner, you were a mercenary. + case "slaver": + Prior to being an arcology owner, you were a slaver. + case "engineer": + Prior to being an arcology owner, you were an engineer. + case "medicine": + Prior to being an arcology owner, you were a surgeon. + case "celebrity": + Prior to being an arcology owner, you were a minor celebrity. + case "BlackHat": + Prior to being an arcology owner, you specialized in cracking databases and making mockeries of cyber security. + case "arcology owner": + Being an arcology owner defines your life now. + case "escort": + Prior to being an arcology owner, you knew how to survive off your looks and body. + case "servant": + Prior to being an arcology owner, you served a well-off master + if (V.PC.counter.birthMaster >= 2) { + and bore him several children + } + . + case "gang": + Prior to being an arcology owner, you were the leader of a ruthless gang. + } + + Word in the arcology is you acquired it through + switch (V.PC.rumor) { + case "wealth": + a rather ridiculous amount of money. + case "diligence": + sheer effort. + case "force": + brutal force. + case "social engineering": + clever social manipulation. + case "luck": + blind luck. + } + </p> + + <p> + You have a + if (V.PC.vagina !== -1 && V.PC.dick !== 0) { + penis and vagina + } else if (V.PC.dick !== 0) { + penis. + } else if (V.PC.vagina !== -1) { + vagina + } + if (V.PC.vagina !== -1) { + and are + if (V.PC.pregWeek < 0) { + recovering from your last pregnancy. + } else if (V.PC.preg === -2) { + infertile. + } else if (V.PC.preg === -1) { + taking contraceptives. + } else if (V.PC.preg === 0) { + fertile. + } else if (V.PC.preg > 37) { + extremely pregnant. + } else if (V.PC.preg > 0) { + pregnant. + } + if (V.PC.preg > 20 || V.PC.counter.birthsTotal > 0) { + if (V.PC.pregMood === 1) { + You tend to be caring and motherly when you're pregnant. + [[Change to no change|Intro Summary][V.PC.pregMood = 0]] | [[Change to aggressive|Intro Summary][V.PC.pregMood = 2]] + } else if (V.PC.pregMood === 0) { + Pregnancy doesn't really affect your mood. + [[Change to motherly|Intro Summary][V.PC.pregMood = 1]] | [[Change to aggressive|Intro Summary][V.PC.pregMood = 2]] + } else { + You tend to be very demanding and aggressive when you're pregnant. + [[Change to no change|Intro Summary][V.PC.pregMood = 0]] | [[Change to motherly|Intro Summary][V.PC.pregMood = 1]] + } + } else { + if (V.PC.pregMood === 1) { + You tend to be caring and motherly when you're hormonal. + [[Change to no change|Intro Summary][V.PC.pregMood = 0]] | [[Change to aggressive|Intro Summary][V.PC.pregMood = 2]] + } else if (V.PC.pregMood === 0) { + Your mood isn't tied to your hormones. + [[Change to motherly|Intro Summary][V.PC.pregMood = 1]] | [[Change to aggressive|Intro Summary][V.PC.pregMood = 2]] + } else { + You tend to be very demanding and aggressive when you're hormonal. + [[Change to no change|Intro Summary][V.PC.pregMood = 0]] | [[Change to motherly|Intro Summary][V.PC.pregMood = 1]] + } + } + if (V.PC.counter.birthsTotal > 0) { + You have given birth to ${V.PC.counter.birthsTotal} babies. + } + } + + if (V.PC.boobs >= 300) { + You have a + if (V.PC.title > 0) { + masculine + } else { + feminine + } + body with + if (V.PC.boobs >= 1400) { + giant + if (V.PC.boobsImplant !== 0) { + , fake + } + cow tits. + } else if (V.PC.boobs >= 1200) { + huge + if (V.PC.boobsImplant !== 0) { + fake + } + breasts. + } else if (V.PC.boobs >= 1000) { + big + if (V.PC.boobsImplant !== 0) { + fake + } + breasts. + } else if (V.PC.boobs >= 800) { + noticeable breasts. + } else if (V.PC.boobs >= 650) { + unremarkable breasts. + } else if (V.PC.boobs >= 500) { + average breasts. + } else { + small breasts. + } + } else { + if (V.PC.title > 0) { + You have a manly chest. + } else { + You are flat as a board. + } + } + </p> + } + + </div> + </div> + +}; \ No newline at end of file diff --git a/src/gui/options/optionsPassage.js b/src/gui/options/optionsPassage.js index e4f67727a931f12b59ee2a9227d78b1e6bf6f322..4807dce4c2f71b2be9d6ab68a32abc260b9bd904 100644 --- a/src/gui/options/optionsPassage.js +++ b/src/gui/options/optionsPassage.js @@ -298,58 +298,7 @@ App.UI.optionsPassage = function() { App.UI.DOM.appendNewElement("h2", el, "Images"); - if (V.seeImages > 0) { - App.Events.drawEventArt(el, BaseSlave()); - } - - options = new App.UI.OptionsGroup(); - - options.addOption("Images are", "seeImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - if (V.seeImages > 0) { - options.addOption("Image style is", "imageChoice") - .addValueList([["Revamped embedded vector art", 3], ["Non-embedded vector art", 2], ["NoX/Deepmurk's vector art", 1], ["Shokushu's rendered imagepack", 0]]); - - if (V.imageChoice === 1) { - options.addOption("").addComment('<span class="warning">Git compiled only, no exceptions.</span>'); - - options.addOption("Face artwork is", "seeFaces") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Height scaling", "seeHeight") - .addValue("All images", 2).on().addValue("Small images", 1).neutral().addValue("Disabled", 0).off(); - - options.addOption("Clothing erection bulges are", "showClothingErection") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - } else if (V.imageChoice === 0) { - options.addOption("").addComment(`You need """to""" - <a href="https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0">download the image pack</a> - """and""" put the 'renders' folder into the resources/ folder where this html file is.` - ); - - options.addOption("Slave summary fetish images are", "seeMainFetishes") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - } else if (V.imageChoice === 3) { - options.addOption("").addComment('<span class="warning">Git compiled only, no exceptions.</span>'); - - options.addOption("Clothing erection bulges are", "showClothingErection") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - } - - options.addOption("PA avatar art is", "seeAvatar") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Slave images in lists are", "seeSummaryImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Slave images in the weekly report are", "seeReportImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - } - el.append(options.render()); + el.append(App.UI.artOptions()); return el; } @@ -1059,3 +1008,60 @@ App.UI.optionsPassage = function() { return el; } }; + +App.UI.artOptions = function() { + const el = new DocumentFragment(); + let options = new App.UI.OptionsGroup(); + + if (V.seeImages > 0) { + App.Events.drawEventArt(el, BaseSlave()); + } + + options.addOption("Images are", "seeImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + if (V.seeImages > 0) { + options.addOption("Image style is", "imageChoice") + .addValueList([["Revamped embedded vector art", 3], ["Non-embedded vector art", 2], ["NoX/Deepmurk's vector art", 1], ["Shokushu's rendered imagepack", 0]]); + + if (V.imageChoice === 1) { + options.addOption("").addComment('<span class="warning">Git compiled only, no exceptions.</span>'); + + options.addOption("Face artwork is", "seeFaces") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Height scaling", "seeHeight") + .addValue("All images", 2).on().addValue("Small images", 1).neutral().addValue("Disabled", 0).off(); + + options.addOption("Clothing erection bulges are", "showClothingErection") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + } else if (V.imageChoice === 0) { + options.addOption("").addComment(`You need """to""" + <a href="https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0">download the image pack</a> + """and""" put the 'renders' folder into the resources/ folder where this html file is.` + ); + + options.addOption("Slave summary fetish images are", "seeMainFetishes") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + } else if (V.imageChoice === 3) { + options.addOption("").addComment('<span class="warning">Git compiled only, no exceptions.</span>'); + + options.addOption("Clothing erection bulges are", "showClothingErection") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + } + + options.addOption("PA avatar art is", "seeAvatar") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Slave images in lists are", "seeSummaryImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Slave images in the weekly report are", "seeReportImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + } + el.append(options.render()); + return el; +}