diff --git a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js index 0967be7a4b4b1133c861aacc63f97111be11fee2..c17a83331fa9aa8f4e1bb8dfea4d67f39680c0a0 100644 --- a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js +++ b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js @@ -382,6 +382,9 @@ App.UI.CustomSlaveTrade = function() { } }; +/** + * @returns {HTMLElement} + */ App.UI.nationalitiesDisplay = function() { const p = document.createElement("p"); diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js index 46365ff63372e6fd1dbdbfb633a8393db06f8322..0fdb40cdc5ab6b628acd7a3a02a3b38792d42498 100644 --- a/src/events/intro/introSummary.js +++ b/src/events/intro/introSummary.js @@ -1,20 +1,20 @@ App.Intro.summary = function() { const el = new DocumentFragment(); let linkArray; -/* - <style> - .active { - r.push(`background-color: grey;`); - } - </style> - */ - + /* + <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.`); + + App.UI.DOM.append("div", `You may review your settings before clicking "Continue" to begin.`); linkArray = []; @@ -24,48 +24,48 @@ App.Intro.summary = function() { () => { 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; + 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") { @@ -103,14 +103,14 @@ App.Intro.summary = function() { 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() + 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); @@ -123,84 +123,56 @@ App.Intro.summary = function() { 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>} */ + /** @type {Array<siCategory>} */ const buttons = [ { title: "World", id: "world", - get node() { return App.UI.SlaveInteract.description(slave); } + get node() { return worldContent(); } }, { title: "Slaves", id: "slaves", - get node() { return App.UI.SlaveInteract.modify(slave); } + get node() { return slavesContent(); } }, { title: "Player Character", id: "player", - get node() { return App.UI.SlaveInteract.work(slave); } + get node() { return playerContent(); } }, { title: "UI", id: "interface", - get node() { return App.UI.SlaveInteract.wardrobe(slave); } + get node() { return interfaceContent(); } } ]; - - function interfaceFunction() { + + function worldContent() { const el = new DocumentFragment(); + App.UI.DOM.appendNewElement("h2", el, "Economy") + 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(); - + let _option; + 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) - + .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; - } + V.econAdvantage = -2; + } if (V.difficultySwitch === 0) { - V.econRate = 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) - + .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) { @@ -214,298 +186,307 @@ App.Intro.summary = function() { [[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) { + + 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 (!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") - + .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.") - + .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.") + .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"> - `) + .customButton("Adjust the slave trade", () => { V.customWA = 0; V.customVariety = 1 }, "Customize Slave Trade") + .customButton("Stop customizing", () => { delete V.customVariety }) + + //TODO: can we really simplify like this? + el.append(App.UI.nationalitiesDisplay()); + } - /* closes ${V.customVariety} is defined */ - + /* 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> + .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.") + + el.append(_options.render()); + + + App.UI.DOM.appendNewElement("h2", el, "The Free City") _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.") - + + _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"]]) - + .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") + _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() + .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() + .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> + .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.") + + el.append(_options.render()); + + App.UI.DOM.appendNewElement("h2", el, "Content") _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]]) - + .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() + .addValue("Yes", 1).on().addValue("No", 0).off() } - + _options.addOption("Slaves getting sick is", "seeIllness") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Pregnancy related content is", "seePreg") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .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() - + .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() + .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() - + .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() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Extreme content like amputation is", "seeExtreme") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Bestiality content is", "seeBestiality") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Watersports content is", "seePee") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Incest is", "seeIncest") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - - + .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() + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() } - - <<includeDOM _options.render() - - <h2>Mods</h2> + + el.append(_options.render()); + + App.UI.DOM.appendNewElement("h2", el, "Mods") + _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>") - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment(`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. + It is non-canon where it conflicts with canonical updates to the base game.`) + _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(); - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment(`This mod introduces security and crime in the arcology, as well as attacks and battles. + The mod can be activated in any moment, but it may result in unbalanced gameplay if activated very late in the game.`) + + el.append(_options.render()); + return el; + } + + function slavesContent() { + + let _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() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Slaves can have alternate titles", "newDescriptions") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Mention ethnicity", "seeRace") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Mention nationality", "seeNationality") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Dynasties of enslaved royalties are", "realRoyalties") - .addValueList([["Historical", 1], ["Random", 0]]) - + .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() - + .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]]) - + .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() - + .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() - + .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() - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + _options.addOption("Family titles for relatives", "allowFamilyTitles") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off() - + .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.") - + .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() - + .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> + .addValue("Yes", 0).on().addValue("No", 1).off() + + el.append(_options.render()); + + App.UI.DOM.appendNewElement("h2", el, "Age") _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() - + .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) - + .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() - + .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() - + .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() - + .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() - + .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(); - + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + + el.append(_options.render()) + + return el; + } + + function playerContent() { + const el = new DocumentFragment(); + let _options = new App.UI.OptionsGroup(); + let _option; + let r; + 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>`); + .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.") + .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.") + .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") - + .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) { + .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;}) - + .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.') + .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') + .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"]]) - + .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]]) - + .addValue("Cigars", "cigar", () => { V.PC.refreshmentType = 0 }) + .addValue("Whiskey", "whiskey", () => { V.PC.refreshmentType = 1 }) + + _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) { @@ -513,53 +494,53 @@ App.Intro.summary = function() { } 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"]] + ["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>"); + 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> + .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(); - + + let _vagina_penis; if (V.PC.vagina !== -1 && V.PC.dick !== 0) { _vagina_penis = 2; } else if (V.PC.vagina !== -1) { @@ -567,32 +548,32 @@ App.Intro.summary = function() { } 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 - }) + + _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) { @@ -600,104 +581,101 @@ App.Intro.summary = function() { } 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;}) + _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]]) + + _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]]) + .addValueList([["All natural", 0], ["Fake", 400]]) } - - <<includeDOM _options.render() + + el.append(_options.render()); } else { - - You are a + r = []; + r.push(`You are a`); if (V.PC.title === 1) { - masculine ''Master'' + r.push(`masculine ''Master''`); } else { - feminine ''Mistress' + r.push(`feminine ''Mistress'`); } - and everyone that matters calls you - V.PlayerName() - . - - You are ${V.PC.actualAge} years old which is + 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) { - ''old''. + r.push(`''old''.`); } else if (V.PC.actualAge >= 50) { - ''well into middle age''. + r.push(`''well into middle age''.`); } else if (V.PC.actualAge >= 35) { - ''entering middle age''. + r.push(`''entering middle age''.`); } else { - ''surprisingly young''. + r.push(`''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> - + 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 (def V.PC.customTitle) { + .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;}) - + .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.') + .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') + .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]]) - + .addValue("Cigars", "cigar", () => {V.PC.refreshmentType = 0 }) + .addValue("Whiskey", "whiskey", () => {V.PC.refreshmentType = 1 }) + + _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) { @@ -705,153 +683,213 @@ App.Intro.summary = function() { } 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> + el.append(_options.render()); + + r = []; 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. + case "wealth": + r.push(`Prior to being an arcology owner, you were a member of the idle wealthy.`); + case "capitalist": + r.push(`Prior to being an arcology owner, you were a business leader.`); + case "mercenary": + r.push(`Prior to being an arcology owner, you were a mercenary.`); + case "slaver": + r.push(`Prior to being an arcology owner, you were a slaver.`); + case "engineer": + r.push(`Prior to being an arcology owner, you were an engineer.`); + case "medicine": + r.push(`Prior to being an arcology owner, you were a surgeon.`); + case "celebrity": + r.push(`Prior to being an arcology owner, you were a minor celebrity.`); + case "BlackHat": + r.push(`Prior to being an arcology owner, you specialized in cracking databases and making mockeries of cyber security.`); + case "arcology owner": + r.push(`Being an arcology owner defines your life now.`); + case "escort": + r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`); + 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.`); + } + case "gang": + r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`); } - - Word in the arcology is you acquired it through + + r.push(`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. + case "wealth": + r.push(`a rather ridiculous amount of money.`); + case "diligence": + r.push(`sheer effort.`); + case "force": + r.push(`brutal force.`); + case "social engineering": + r.push(`clever social manipulation.`); + case "luck": + r.push(`blind luck.`); } - </p> - - <p> - You have a + App.Events.addNode(el, r, "p"); + + r = []; + r.push(`You have a`); if (V.PC.vagina !== -1 && V.PC.dick !== 0) { - penis and vagina + r.push(`penis and vagina`); } else if (V.PC.dick !== 0) { - penis. + r.push(`penis.`); } else if (V.PC.vagina !== -1) { - vagina + r.push(`vagina`); } if (V.PC.vagina !== -1) { - and are + r.push(`and are`); if (V.PC.pregWeek < 0) { - recovering from your last pregnancy. + r.push(`recovering from your last pregnancy.`); } else if (V.PC.preg === -2) { - infertile. + r.push(`infertile.`); } else if (V.PC.preg === -1) { - taking contraceptives. + r.push(`taking contraceptives.`); } else if (V.PC.preg === 0) { - fertile. + r.push(`fertile.`); } else if (V.PC.preg > 37) { - extremely pregnant. + r.push(`extremely pregnant.`); } else if (V.PC.preg > 0) { - pregnant. + r.push(`pregnant.`); } + + linkArray = []; 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]] + r.push(`You tend to be caring and motherly when you're pregnant.`); + linkArray.push(noChange(), aggressive()); } 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]] + r.push(`Pregnancy doesn't really affect your mood.`); + linkArray.push(motherly(), aggressive()); } 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]] + r.push(`You tend to be very demanding and aggressive when you're pregnant.`); + linkArray.push(noChange(), motherly()); } } 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]] + r.push(`You tend to be caring and motherly when you're hormonal.`); + linkArray.push(noChange(),aggressive()); } 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]] + r.push(`Your mood isn't tied to your hormones.`); + linkArray.push(motherly(), aggressive()); } 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]] + r.push(`You tend to be very demanding and aggressive when you're hormonal.`); + linkArray.push(noChange(), motherly()); } } + + 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" + ) + } + r.push(App.UI.DOM.generateLinksStrip(linkArray)); if (V.PC.counter.birthsTotal > 0) { - You have given birth to ${V.PC.counter.birthsTotal} babies. + r.push(`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 + 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) { - giant - if (V.PC.boobsImplant !== 0) { - , fake - } - cow tits. + r.push(`giant${(V.PC.boobsImplant !== 0) ? `, fake` : ``} cow tits.`); } else if (V.PC.boobs >= 1200) { - huge - if (V.PC.boobsImplant !== 0) { - fake - } - breasts. + r.push(`huge`); + if (V.PC.boobsImplant !== 0) { + r.push(`fake`); + } + r.push(`breasts.`); } else if (V.PC.boobs >= 1000) { - big - if (V.PC.boobsImplant !== 0) { - fake - } - breasts. + r.push(`big`); + if (V.PC.boobsImplant !== 0) { + r.push(`fake`); + } + r.push(`breasts.`); } else if (V.PC.boobs >= 800) { - noticeable breasts. + r.push(`noticeable breasts.`); } else if (V.PC.boobs >= 650) { - unremarkable breasts. + r.push(`unremarkable breasts.`); } else if (V.PC.boobs >= 500) { - average breasts. + r.push(`average breasts.`); } else { - small breasts. + r.push(`small breasts.`); } } else { if (V.PC.title > 0) { - You have a manly chest. + r.push(`You have a manly chest.`); } else { - You are flat as a board. + r.push(`You are flat as a board.`); } } - </p> + App.Events.addNode(el, r, "p"); } - - </div> - </div> - + + return el; + } + + function interfaceContent() { + 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; + } + + + + + + }; \ No newline at end of file