diff --git a/src/events/nonRandom/pBodyswapReveal.js b/src/events/nonRandom/pBodyswapReveal.js new file mode 100644 index 0000000000000000000000000000000000000000..8023be4ea74e93455bd17e6957fb01f445bbfab3 --- /dev/null +++ b/src/events/nonRandom/pBodyswapReveal.js @@ -0,0 +1,19 @@ +App.Events.PBodyswapReveal = class PBodyswapReveal extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() > 45, + () => V.bodyswapAnnounced === 0, + () => V.surgeryUpgrade === 1, + ]; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "Random Nonindividual Event"; + + V.bodyswapAnnounced = 1; + App.Events.addParagraph(node, [`You receive countless messages throughout the day; mostly worthless spam, several uninteresting business offers and the occasional enslavement request. This one catches your eye however. It's an offer from a top surgeon who has recently been experimenting with radical new surgeries. You've been loosely following their work for the last few weeks, ever since they successfully swapped the consciousness from one slave to another with minimal side effects, assuming they are kept on a special suppressant, and it seems they are now offering their work to anyone with a surgical suite capable of performing the surgery and willing to undertake the risk.`]); + + App.Events.addParagraph(node, [`It's an interesting offer and your remote surgery will suffice should you want to change up your slaves' bodies more than any drug or implant ever could. You'll need a slave to swap them with, however. Perhaps one of the mindless slaves from the Flesh Heap will suit your needs, should you not wish to use your own stock.`]); + } +}; diff --git a/src/events/nonRandom/pBodyswapReveal.tw b/src/events/nonRandom/pBodyswapReveal.tw deleted file mode 100644 index 587d28b966d2194b63ed2f159113a87cb55d6478..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/pBodyswapReveal.tw +++ /dev/null @@ -1,9 +0,0 @@ -:: P Bodyswap Reveal [nobr] - -<<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> - -<<set $bodyswapAnnounced = 1>> - -You receive countless messages throughout the day; mostly worthless spam, several uninteresting business offers and the occasional enslavement request. This one catches your eye however. It's an offer from a top surgeon who has recently been experimenting with radical new surgeries. You've been loosely following their work for the last few weeks, ever since they successfully swapped the consciousness from one slave to another with minimal side effects, assuming they are kept on a special suppressant, and it seems they are now offering their work to anyone with a surgical suite capable of performing the surgery and willing to undertake the risk. -<br><br> -It's an interesting offer and your remote surgery will suffice should you want to change up your slaves' bodies more than any drug or implant ever could. You'll need a slave to swap them with, however. Perhaps one of the mindless slaves from the Flesh Heap will suit your needs, should you not wish to use your own stock. diff --git a/src/events/nonRandom/pCorpAnnouncement.js b/src/events/nonRandom/pCorpAnnouncement.js new file mode 100644 index 0000000000000000000000000000000000000000..203a36546c765b4e62ca8e801173932aabb75024 --- /dev/null +++ b/src/events/nonRandom/pCorpAnnouncement.js @@ -0,0 +1,21 @@ +App.Events.PCorpAnnouncement = class PCorpAnnouncement extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.cash > 120000, + () => V.rep > 4000, + () => V.corp.Announced === 0, + ]; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "Random Nonindividual Event"; + + V.corp.Announced = 1; + App.Events.addParagraph(node, [`You never understood the power of money until accumulating so much of it yourself. If you were to try to explain it to someone without that power, you would emphasize the access it buys you. You can speak to anyone, about anything; propose anything, to anyone. And recently, you have begun to encounter the trouble of being too powerful.`]); + + App.Events.addParagraph(node, [`Good investment opportunities are hard to come by in the uncertain world of today. The days of government bonds providing steady yields are ending. Markets are volatile, and under attack by forces they cannot begin to control or anticipate. In places, the very consensus on modern capitalism that has held for nearly fifty years is under siege. There's one reliable growth market in the Free Cities: slaves. And there's too much capital chasing too few investment opportunities in that market.`]); + + App.Events.addParagraph(node, [`Reviewing the situation from your desk, the nerve center of your growing empire, you think to yourself: why not? You have the reputation and the capital to become a major player in the slave market, just for the asking. If you announced the incorporation of a publicly traded company dedicated to the industry of slavery, Free Cities investors would be lining up, cash in hand, ready to buy stock.`]); + } +}; diff --git a/src/events/nonRandom/pCorpAnnouncement.tw b/src/events/nonRandom/pCorpAnnouncement.tw deleted file mode 100644 index b68932a9b47232fdb8f594f4fa2af1d6fff68cd1..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/pCorpAnnouncement.tw +++ /dev/null @@ -1,12 +0,0 @@ -:: P Corp Announcement [nobr] - -<<set $nextButton = "Continue">> -<<set $nextLink = "Random Nonindividual Event">> - -<<set $corp.Announced = 1>> - -You never understood the power of money until accumulating so much of it yourself. If you were to try to explain it to someone without that power, you would emphasize the access it buys you. You can speak to anyone, about anything; propose anything, to anyone. And recently, you have begun to encounter the trouble of being too powerful. - -Good investment opportunities are hard to come by in the uncertain world of today. The days of government bonds providing steady yields are ending. Markets are volatile, and under attack by forces they cannot begin to control or anticipate. In places, the very consensus on modern capitalism that has held for nearly fifty years is under siege. There's one reliable growth market in the Free Cities: slaves. And there's too much capital chasing too few investment opportunities in that market. - -Reviewing the situation from your desk, the nerve center of your growing empire, you think to yourself: why not? You have the reputation and the capital to become a major player in the slave market, just for the asking. If you announced the incorporation of a publicly traded company dedicated to the industry of slavery, Free Cities investors would be lining up, cash in hand, ready to buy stock. diff --git a/src/events/nonRandom/pDefenseFears.js b/src/events/nonRandom/pDefenseFears.js new file mode 100644 index 0000000000000000000000000000000000000000..a53232ca6a5cd6b325262745a93e4ab87354a7d5 --- /dev/null +++ b/src/events/nonRandom/pDefenseFears.js @@ -0,0 +1,54 @@ +App.Events.PDefenseFears = class PDefenseFears extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.mercenaries < 3 + ]; + } + + execute(node) { + V.nextButton = " "; /* hide button until user makes a selection */ + V.fcnn.push("...hiring mercenaries to act as a defensive force against the old world..."); + + App.Events.addParagraph(node, [`A deputation of slaveowning citizens comes to see you. Though they haven't experienced anything so disturbing as your dealings with the Daughters of Liberty, rumors of unrest and revolution are running through the Free Cities. They are upset with the lack of troops to protect the arcology. This is quite a development in the young history of Free Cities society; only a few months ago, the idea of collective defense would have been a bitterly controversial one. It's still an employer's market for mercenaries; you could easily hire some. Alternatively, your citizens would probably agree to fund them by subscription — the word "taxes" would be impolitic.`]); + + App.Events.addParagraph(node, [ + App.UI.DOM.makeElement("span", "This is a unique and very important opportunity", "bold"), + `and must not be taken lightly.` + ]); + + const choices = []; + choices.push(new App.Events.Result(`Install a full platoon by subscription`, subscription)); + choices.push( + new App.Events.Result( + `Install a full platoon at your expense`, yourExpense, `This will cost ${cashFormat(10000)} and ${(V.PC.skill.warfare >= 100 || V.PC.career === "arcology owner") ? `some upkeep, <span class="springgreen">reduced by your mercenary contacts</span>` : `incur significant upkeep costs`}` + ) + ); + choices.push(new App.Events.Result(`Refuse to quarter so many troops in your arcology`, plead3rd)); + App.Events.addResponses(node, choices); + + function subscription() { + V.nextButton = "Continue"; + App.Utils.updateUserButton();/* unlock Continue button */ + repX(-500, "event"); + V.mercenaries = 3; + return `You hire a full platoon of reputable mercenaries and a veteran officer to command them, kit them in excellent gear, and quarter them in the arcology. Their pay is on an escrow basis; the huge lump sum you paid will serve to secure them, and its interest will constitute their pay. The sight of many armed men on patrol has reassured the worried slaveowners, but they are <span class="red">resentful</span> of having to take this step themselves.`; + } + + function yourExpense() { + V.nextButton = "Continue"; + App.Utils.updateUserButton();/* unlock Continue button */ + repX(2500, "event"); + cashX(-10000, "mercenaries"); + V.mercenaries = 3; + return `You hire a full platoon of reputable mercenaries and a veteran officer to command them, kit them in excellent gear, and quarter them in the arcology. Their pay is on an escrow basis; the huge lump sum you paid will serve to secure them, and its interest will constitute their pay. The sight of many armed men on patrol has reassured the worried slaveowners, and they are <span class="green">grateful</span> to you for seeing to their defense.`; + } + + function plead3rd() { + V.nextButton = "Continue"; + App.Utils.updateUserButton();/* unlock Continue button */ + V.arcologies[0].prosperity = Math.trunc(V.arcologies[0].prosperity * 0.8); + repX(-1000, "event"); + return `The consensus that the arcology is vulnerable triggers an <span class="red">exodus</span> of your most wealthy and valuable citizens, and your reputation <span class="red">suffers</span> grievously.`; + } + } +}; diff --git a/src/events/nonRandom/pDefenseFears.tw b/src/events/nonRandom/pDefenseFears.tw deleted file mode 100644 index c27a1edb7102ca7e771046e41e551565b6fc90de..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/pDefenseFears.tw +++ /dev/null @@ -1,40 +0,0 @@ -:: P defense fears [nobr] - -<<set $nextButton = " ">> /* hide button until user makes a selection */ -<<set $fcnn.push("...hiring mercenaries to act as a defensive force against the old world...")>> - -A deputation of slaveowning citizens comes to see you. Though they haven't experienced anything so disturbing as your dealings with the Daughters of Liberty, rumors of unrest and revolution are running through the Free Cities. They are upset with the lack of troops to protect the arcology. This is quite a development in the young history of Free Cities society; only a few months ago, the idea of collective defense would have been a bitterly controversial one. It's still an employer's market for mercenaries; you could easily hire some. Alternatively, your citizens would probably agree to fund them by subscription — the word "taxes" would be impolitic. - -<br><br> - -''This is a unique and very important opportunity'' and must not be taken lightly. - -<br><br> - -<span id="result"> -<<link "Install a full platoon by subscription">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You hire a full platoon of reputable mercenaries and a veteran officer to command them, kit them in excellent gear, and quarter them in the arcology. Their pay is on an escrow basis; the huge lump sum you paid will serve to secure them, and its interest will constitute their pay. The sight of many armed men on patrol has reassured the worried slaveowners, but they are @@.red;resentful@@ of having to take this step themselves. - <<run repX(-500, "event")>> - <<set $mercenaries = 3>> - <</replace>> -<</link>> -<br><<link "Install a full platoon at your expense">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You hire a full platoon of reputable mercenaries and a veteran officer to command them, kit them in excellent gear, and quarter them in the arcology. Their pay is on an escrow basis; the huge lump sum you paid will serve to secure them, and its interest will constitute their pay. The sight of many armed men on patrol has reassured the worried slaveowners, and they are @@.green;grateful@@ to you for seeing to their defense. - <<run repX(2500, "event")>> - <<run cashX(-10000, "mercenaries")>> - <<set $mercenaries = 3>> - <</replace>> -<</link>> <<if ($PC.skill.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(10000)>> and incur significant upkeep costs//<</if>> -<br><<link "Refuse to quarter so many troops in your arcology">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - The consensus that the arcology is vulnerable triggers an @@.red;exodus@@ of your most wealthy and valuable citizens, and your reputation @@.red;suffers@@ grievously. - <<set $arcologies[0].prosperity = Math.trunc($arcologies[0].prosperity*0.8)>> - <<run repX(-1000, "event")>> - <</replace>> -<</link>> -</span> diff --git a/src/events/nonRandom/pFSAnnouncement.js b/src/events/nonRandom/pFSAnnouncement.js new file mode 100644 index 0000000000000000000000000000000000000000..587dfe2cf9b129da52089fd5d4acfe5510bb04ca --- /dev/null +++ b/src/events/nonRandom/pFSAnnouncement.js @@ -0,0 +1,27 @@ +App.Events.PFSAnnouncement = class PFSAnnouncement extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() > 5, + () => V.rep > 3000, + () => V.FSAnnounced === 0 + ]; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "Random Nonindividual Event"; + + V.FSAnnounced = 1; + V.FSGotRepCredits = 1; + + if (V.seeImages === 1) { + node.append(assistantArt(3)); + } + const {heA} = getPronouns(assistant.pronouns().main).appendSuffix("A"); // TODO: does assistant actually have gender at this point? + App.Events.addParagraph(node, [`The simple pleasure of power has to be experienced to be understood. You often take a moment to stand on a balcony overlooking an interior atrium, watching the living, breathing, flowing current of your demesne. ${capFirstChar(V.assistant.name)} knows to allow you these moments of peace.`]); + + App.Events.addParagraph(node, [`You immediately pay attention, therefore, when ${heA} interrupts. "${properTitle()},"${heA} says, "this is an appropriate moment to bring a serious matter to your attention. I monitor conversations, social media, and general opinion within the arcology where I can. You are respected, and the inhabitants of this arcology are starting to look to you to give direction to society."`]); + + App.Events.addParagraph(node, [`"This is not a situation that requires your attention," ${heA} continues. "You can continue to lead them by simple example. Or, you can take a more active role in defining the future. The rewards could be considerable. I will make the necessary additions to the arcology management interface to support societal modification."`]); + } +}; diff --git a/src/events/nonRandom/pFSAnnouncement.tw b/src/events/nonRandom/pFSAnnouncement.tw deleted file mode 100644 index 6212bec9ace4f67d8add784b98b2178ad80c2bc8..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/pFSAnnouncement.tw +++ /dev/null @@ -1,17 +0,0 @@ -:: P FS Announcement [nobr] - -<<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> - -<<set $FSAnnounced = 1>> -<<set $FSGotRepCredits = 1>> -<<setAssistantPronouns>> - -<span id="art-frame"> - <<if $seeImages == 1>><<= assistantArt(3)>><</if>> -</span> - -The simple pleasure of power has to be experienced to be understood. You often take a moment to stand on a balcony overlooking an interior atrium, watching the living, breathing, flowing current of your demesne. <<= capFirstChar($assistant.name)>> knows to allow you these moments of peace. -<br><br> -You immediately pay attention, therefore, when _heA interrupts. "<<= properTitle()>>," _heA says, "this is an appropriate moment to bring a serious matter to your attention. I monitor conversations, social media, and general opinion within the arcology where I can. You are respected, and the inhabitants of this arcology are starting to look to you to give direction to society." -<br><br> -"This is not a situation that requires your attention," _heA continues. "You can continue to lead them by simple example. Or, you can take a more active role in defining the future. The rewards could be considerable. I will make the necessary additions to the arcology management interface to support societal modification." diff --git a/src/events/nonRandom/tfsFarmUpgrade.js b/src/events/nonRandom/tfsFarmUpgrade.js new file mode 100644 index 0000000000000000000000000000000000000000..b6b123a6840827369c140dbd3e2161dd8afc8d73 --- /dev/null +++ b/src/events/nonRandom/tfsFarmUpgrade.js @@ -0,0 +1,121 @@ +App.Events.TFSFarmUpgrade = class TFSFarmUpgrade extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.TFS.schoolPresent === 1, + () => V.organFarmUpgrade !== 0, + () => V.TFS.farmUpgrade === 0 + ]; + } + + execute(node) { + let r = []; + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + V.TFS.farmUpgradeAsked = V.week; + + r.push(`You receive yet another personal call from an older Futanari Sister, one of the Sisters who lives in your arcology; you've given up trying to tell them apart. Unusually, this one has taken a break from the Sisters' constant sexual communion to concentrate on speaking with you, and she looks serious, though she's still a gorgeous naked futa whose boobs fill half the screen, and whose perpetually erect dick pokes insistently into frame.`); + if (V.PC.slaveSurname) { + if (V.PC.title) { + r.push(`"Mr.`); + } else { + r.push(`"Ms.`); + } + r.push(`${V.PC.slaveSurname},"`); + } else { + r.push(`"${V.PC.slaveName},"`); + } + r.push(`she says`); + if (V.PC.dick !== 0 && V.PC.vagina !== -1 && V.PC.boobs >= 300) { + r.push(`submissively, "I would like to beg a favor of you." She looks uncharacteristically uncomfortable, but steels herself and asks. "Please, may we use your organ farm? We're not... complete. Like you." She hugs herself unconsciously, her arms pressing her enormous breasts against her chest. "We... I... would like to be like you, and we`); + } else { + r.push(`politely, "I would like to ask a favor of you on behalf of myself and my Sisters." She looks less confident than the older Sisters usually do, but steels herself and asks. "May we use your organ farm? We would like to really complete our transformations. We`); + } + if (V.TFS.schoolUpgrade === 3 && V.TFS.compromiseWeek + 15 <= V.week) { + r.push(`have a rather cheap one to grow dicks for the girls and we`); + } + r.push(`can pay for the costs of using it, but we have no other way of accessing such advanced technology."`); + + App.Events.addParagraph(node, r); + r = []; + + r.push(`"I know that you could demand thousands of credits," she continues, "but the discount we already give you is all we can afford without selling Sisters early.`); + if (V.PC.dick !== 0 && V.PC.vagina !== -1 && V.PC.boobs >= 300) { + r.push(`I would pretend to be independent and offer you the choice of how we approach this, but you've already given us so much, and you're... so perfect. We'll do whatever you say. If you do give us this priceless gift, it's your decision`); + } else { + r.push(`All we have to offer for this priceless gift is your decision on an important question:`); + } + r.push(`whether we will use contraception after we are transformed." She shudders suddenly, gripped by obscure emotion. "Not using contraception would be a hard change in some ways. But years later, there would be... more of us."`); + + App.Events.addParagraph(node, r); + r = []; + + r.push(`"Please forgive me for calling you, instead of asking you in person," she says penitently. "And please come down to see us, whatever you decide."`); + + const choices = []; + choices.push(new App.Events.Result(`Permit them access, but tell them to use contraception`, contraception)); + if (V.seePreg !== 0) { + choices.push(new App.Events.Result(`Permit them access, and encourage them to get pregnant`, preg)); + if (V.seeHyperPreg === 1) { + choices.push(new App.Events.Result(`Permit them access, and encourage them to embrace hyperpregnancy`, hyperPreg)); + } + // choices.push(new App.Events.Result(`Decline, but grant them something more fitting`, fitting)); + } + choices.push(new App.Events.Result(`Decline`, decline)); + App.Events.addResponses(node, choices); + + function contraception() { + V.TFS.farmUpgrade = 1; + return `You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries. To your mild surprise, she responds by breaking down into cutely inelegant crying. You add that you think the Sisters are beautiful as they are, and recruits will continue to approach them; it's not necessary for them to go through the rigors of pregnancy. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.`; + } + + function preg() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs more Futanari Sisters, especially ones as cute and sexy as you're confident her many daughters will be. At that, she breaks down completely, one of her hands going to rub her belly gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.`); + if (V.arcologies[0].FSRestartDecoration === 100 && V.eugenicsFullControl !== 1) { + r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it.`); + } + V.TFS.farmUpgrade = 2; + if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + V.failedElite += 275; + } + App.Events.addParagraph(frag, r); + return frag; + } + + function hyperPreg() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries, so long as they are willing to bear as many children as they can handle. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs many more Futanari Sisters, especially ones as cute and sexy as you're confident her countless daughters will be. At that, she breaks down completely, one of her hands going to rub her belly gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.`); + if (V.arcologies[0].FSRestartDecoration === 100 && V.eugenicsFullControl !== 1) { + r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it to such an obscene degree.`); + } + V.TFS.farmUpgrade = 3; + if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + V.failedElite += 1000; + } + App.Events.addParagraph(frag, r); + return frag; + } + + function fitting() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You decline her offer and propose a new one, letting the Sister know that the organ farm will accept seed tissue from any of them for the purpose of fabricating testicular ovaries, which should satisfy their desires, if in an unorthodox way. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs more Futanari Sisters, especially ones as cute and sexy as you're confident her many daughters will be. At that, she breaks down completely, one of her hands going to rub her balls gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.`); + if (V.arcologies[0].FSRestartDecoration === 100 && V.eugenicsFullControl !== 1) { + r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it.`); + } + V.TFS.farmUpgrade = 4; + if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + V.failedElite += 100; + } + App.Events.addParagraph(frag, r); + return frag; + } + + function decline() { + V.TFS.farmUpgrade = -1; + return `You decline. The Sister accepts your decision politely, but cannot hide her deep disappointment.`; + } + } +}; diff --git a/src/events/nonRandom/tfsFarmUpgrade.tw b/src/events/nonRandom/tfsFarmUpgrade.tw deleted file mode 100644 index d2f11d88994a3eb086dee29f0c134a45a0fe4afc..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/tfsFarmUpgrade.tw +++ /dev/null @@ -1,76 +0,0 @@ -:: TFS Farm Upgrade [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event">> -<<set $TFS.farmUpgradeAsked = $week>> - -You receive yet another personal call from an older Futanari Sister, one of the Sisters who lives in your arcology; you've given up trying to tell them apart. Unusually, this one has taken a break from the Sisters' constant sexual communion to concentrate on speaking with you, and she looks serious, though she's still a gorgeous naked futa whose boobs fill half the screen, and whose perpetually erect dick pokes insistently into frame. "<<if $PC.slaveSurname>><<if $PC.title>>Mr.<<else>>Ms.<</if>> <<print $PC.slaveSurname>><<else>><<print $PC.slaveName>><</if>>," she says -<<if ($PC.dick != 0) && ($PC.vagina != -1) && ($PC.boobs >= 300)>> - submissively, "I would like to beg a favor of you." She looks uncharacteristically uncomfortable, but steels herself and asks. "Please, may we use your organ farm? We're not... complete. Like you." She hugs herself unconsciously, her arms pressing her enormous breasts against her chest. "We... I... would like to be like you, and we -<<else>> - politely, "I would like to ask a favor of you on behalf of myself and my Sisters." She looks less confident than the older Sisters usually do, but steels herself and asks. "May we use your organ farm? We would like to really complete our transformations. We -<</if>> -<<if $TFS.schoolUpgrade == 3 && $TFS.compromiseWeek+15 <= $week>>have a rather cheap one to grow dicks for the girls and we<</if>> can pay for the costs of using it, but we have no other way of accessing such advanced technology." - -<br><br> - -"I know that you could demand thousands of credits," she continues, "but the discount we already give you is all we can afford without selling Sisters early. -<<if ($PC.dick != 0) && ($PC.vagina != -1) && ($PC.boobs >= 300)>> - I would pretend to be independent and offer you the choice of how we approach this, but you've already given us so much, and you're... so perfect. We'll do whatever you say. If you do give us this priceless gift, it's your decision -<<else>> - All we have to offer for this priceless gift is your decision on an important question: -<</if>> -whether we will use contraception after we are transformed." She shudders suddenly, gripped by obscure emotion. "Not using contraception would be a hard change in some ways. But years later, there would be... more of us." - -<br><br> - -"Please forgive me for calling you, instead of asking you in person," she says penitently. "And please come down to see us, whatever you decide." - -<br><br> - -<span id="result"> -<<link "Permit them access, but tell them to use contraception">> - <<replace "#result">> - You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries. To your mild surprise, she responds by breaking down into cutely inelegant crying. You add that you think the Sisters are beautiful as they are, and recruits will continue to approach them; it's not necessary for them to go through the rigors of pregnancy. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further. - <<set $TFS.farmUpgrade = 1>> - <</replace>> -<</link>> -<<if $seePreg != 0>> - <br><<link "Permit them access, and encourage them to get pregnant">> - <<replace "#result">> - You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs more Futanari Sisters, especially ones as cute and sexy as you're confident her many daughters will be. At that, she breaks down completely, one of her hands going to rub her belly gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.<<if $arcologies[0].FSRestartDecoration == 100 && $eugenicsFullControl != 1>> The Societal Elite are @@.red;outraged@@ that you would not only allow such a breach of eugenics to occur, but encourage it.<</if>> - <<set $TFS.farmUpgrade = 2>> - <<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> - <<set $failedElite += 275>> - <</if>> - <</replace>> - <</link>> - <<if $seeHyperPreg == 1>> - <br><<link "Permit them access, and encourage them to embrace hyperpregnancy.">> - <<replace "#result">> - You signify your assent, telling the Sister that the organ farm will accept seed tissue from any of them for the purpose of fabricating ovaries, so long as they are willing to bear as many children as they can handle. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs many more Futanari Sisters, especially ones as cute and sexy as you're confident her countless daughters will be. At that, she breaks down completely, one of her hands going to rub her belly gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.<<if $arcologies[0].FSRestartDecoration == 100 && $eugenicsFullControl != 1>> The Societal Elite are @@.red;outraged@@ that you would not only allow such a breach of eugenics to occur, but encourage it to such an obscene degree.<</if>> - <<set $TFS.farmUpgrade = 3>> - <<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> - <<set $failedElite += 1000>> - <</if>> - <</replace>> - <</link>> - <</if>> - /* - <br><<link "Decline, but grant them something more fitting">> - <<replace "#result">> - You decline her offer and propose a new one, letting the Sister know that the organ farm will accept seed tissue from any of them for the purpose of fabricating testicular ovaries, which should satisfy their desires, if in an unorthodox way. To your mild surprise, she responds with cutely inelegant crying. You add that you think the world needs more Futanari Sisters, especially ones as cute and sexy as you're confident her many daughters will be. At that, she breaks down completely, one of her hands going to rub her balls gently. It takes her a long time to manage to thank you properly, and she hurries to end the call before she can embarrass herself further.<<if $arcologies[0].FSRestartDecoration == 100 && $eugenicsFullControl != 1>> The Societal Elite are @@.red;outraged@@ that you would not only allow such a breach of eugenics to occur, but encourage it.<</if>> - <<set $TFS.farmUpgrade = 4>> - <<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> - <<set $failedElite += 100>> - <</if>> - <</replace>> - <</link>> - */ -<</if>> -<br><<link "Decline">> - <<replace "#result">> - You decline. The Sister accepts your decision politely, but cannot hide her deep disappointment. - <<set $TFS.farmUpgrade = -1>> - <</replace>> -<</link>> -</span> diff --git a/src/events/nonRandomEvent.js b/src/events/nonRandomEvent.js index bcd4b88946e8315b05541fdb1182b8d7071dcd3e..5f8c96c6610e08e5e6e1aa61636f9e00fe789735 100644 --- a/src/events/nonRandomEvent.js +++ b/src/events/nonRandomEvent.js @@ -41,19 +41,13 @@ App.Events.getNonrandomEvents = function() { new App.Events.SERecruiterSuccess(), new App.Events.SEcustomSlaveDelivery(), new App.Events.JobFulfillmentCenterDelivery(), - new App.Events.TwineEvent().wrapPassage([ - () => V.huskSlaveOrdered === 1 - ], "SE husk slave delivery"), + new App.Events.SEHuskSlaveDelivery(), new App.Events.SECoursing(), new App.Events.SERaiding(), new App.Events.SEPitFight(), new App.Events.PBioreactorPerfected(), new App.Events.RESFailure(), - new App.Events.TwineEvent().wrapPassage([ - () => V.TFS.schoolPresent === 1, - () => V.organFarmUpgrade !== 0, - () => V.TFS.farmUpgrade === 0 - ], "TFS Farm Upgrade"), + new App.Events.TFSFarmUpgrade(), new App.Events.SENicaeaAnnouncement(), new App.Events.SENicaeaPreparation(), new App.Events.SENicaeaCouncil(), @@ -98,6 +92,13 @@ App.Events.getNonrandomEvents = function() { new App.Events.eliteTakeOver(), new App.Events.RETheSirenStrikesBack(), + new App.Events.SEAssholeKnight(), + new App.Events.SENewBaron(), + new App.Events.SEPoorKnight(), + new App.Events.SEFcnnStation(), + new App.Events.SEFctvInstall(), + new App.Events.PBodyswapReveal(), + new App.Events.PCorpAnnouncement(), ]; }; @@ -203,20 +204,8 @@ globalThis.nonRandomEvent = function() { V.eventSlave = 0; const effectiveWeek = App.Events.effectiveWeek(); if (V.plot) { - if (effectiveWeek >= 5 && V.FCTV.receiver === -1) { - setTimeout(() => Engine.play("SE FCTV Install"), Engine.minDomActionDelay); - } else if ((effectiveWeek >= 15) && (V.arcologies[0].FSNeoImperialistLaw1 === 1) && V.assholeKnight !== 1) { - V.assholeKnight = 1; - V.imperialEventWeek = effectiveWeek; - setTimeout(() => Engine.play("SE assholeknight"), Engine.minDomActionDelay); - } else if (V.SF.Toggle && V.SF.Active === -1 && effectiveWeek >= 72) { + if (V.SF.Toggle && V.SF.Active === -1 && effectiveWeek >= 72) { setTimeout(() => Engine.play("Security Force Proposal"), Engine.minDomActionDelay); - } else if (effectiveWeek > 5 && V.rep > 3000 && V.FSAnnounced === 0) { - setTimeout(() => Engine.play("P FS Announcement"), Engine.minDomActionDelay); - } else if (effectiveWeek > 45 && V.bodyswapAnnounced === 0 && V.surgeryUpgrade === 1) { - setTimeout(() => Engine.play("P Bodyswap Reveal"), Engine.minDomActionDelay); - } else if (V.cash > 120000 && V.rep > 4000 && V.corp.Announced === 0) { - setTimeout(() => Engine.play("P Corp Announcement"), Engine.minDomActionDelay); } else if (V.rivalOwner > 0) { if (V.hostageAnnounced === 0 && V.rivalSet !== 0) { setTimeout(() => Engine.play("P rivalry hostage"), Engine.minDomActionDelay); @@ -227,16 +216,6 @@ globalThis.nonRandomEvent = function() { } else { setTimeout(() => Engine.play("P rivalry actions"), Engine.minDomActionDelay); } - } else if ((effectiveWeek >= 37) && (V.arcologies[0].FSNeoImperialistLaw1 === 1) && (V.arcologies[0].FSNeoImperialistLaw2 === 1) && V.poorKnight !== 1 && effectiveWeek >= V.imperialEventWeek + 3) { - V.poorKnight = 1; - V.imperialEventWeek = effectiveWeek; - setTimeout(() => Engine.play("SE poorknight"), Engine.minDomActionDelay); - } else if ((effectiveWeek >= 40) && (V.arcologies[0].prosperity > 80) && (V.arcologies[0].FSNeoImperialistLaw2 === 1) && V.newBaron !== 1 && effectiveWeek >= V.imperialEventWeek + 3) { - V.newBaron = 1; - V.imperialEventWeek = effectiveWeek; - setTimeout(() => Engine.play("SE newBaron"), Engine.minDomActionDelay); - } else if (V.rivalOwner === 0 && V.seeFCNN === 1 && V.FCNNstation === 0 && V.week > 95 && V.cash > 200000 && V.rep > 7500) { - setTimeout(() => Engine.play("SE FCNN Station"), Engine.minDomActionDelay); } else { if (random(1, 100) > effectiveWeek + 25) { setTimeout(() => Engine.play("RIE Eligibility Check"), Engine.minDomActionDelay); diff --git a/src/events/scheduled/assholeKnight.js b/src/events/scheduled/assholeKnight.js new file mode 100644 index 0000000000000000000000000000000000000000..3ed931f051ac25bff1a3748b43e8f42150779ac8 --- /dev/null +++ b/src/events/scheduled/assholeKnight.js @@ -0,0 +1,71 @@ +App.Events.SEAssholeKnight = class SEAssholeKnight extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() >= 15, + () => V.arcologies[0].FSNeoImperialistLaw1 === 1, + () => V.assholeKnight !== 1 + ]; + } + + execute(node) { + V.assholeKnight = 1; + V.imperialEventWeek = App.Events.effectiveWeek(); + + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + App.Events.addParagraph(node, [`The group of citizens you hand-picked as your Knights have quickly proven themselves a reliable staple of the Arcology. Being visibly a league above the common citizen with their heavy Imperial Plate decorated with glimmering pendants and marks of their individual, flowery coats of arms, their mere presence is enough to make most common criminals cower and keep merchants selling their wares at fair prices. The tenets of neo-Imperial hierarchy and their own social prestige have already gone to their heads, and many Knights are now recognized immediately by the common citizens as heroic, uncowed citizen-soldiers.`]); + + App.Events.addParagraph(node, [`Despite the noble reputations of many of your Knights, their image as defenders of the downtrodden and honest protectors of the Arcology is not universal. Although you Knighted every last one of them yourself, it seems you might have made a misjudgment on the character of one of your new servants; a stream of minor offenses from one Knight in particular has been building up in your inbox for quite some time, and reviewing the whole dossier now paints a portrait of abuses and misconduct.`]); + + App.Events.addParagraph(node, [`This singular Knight has apparently been using their position to extort and bully the populace, demanding unreasonably steep discounts from merchants and regularly beating the peasantry - often for no reason other than momentary amusement, and treating them as "less than even slaves". A number of frustrated citizens have sent you a petition demanding that you denounce and punish them for their petty offenses - a picture of a woman with her face blurred out and a trail of bruises over every inch of her naked body is attached. No names have been attached to the petition, apparently for fear of what the Knight in question will do to them should their attempts be uncovered. Whatever you decide to do with this man will undoubtedly set the precedent for how you deal with Knights who abuse their station in the future.`]); + + const choices = []; + choices.push(new App.Events.Result(`Remove his title and confiscate his weapons`, demTitles)); + choices.push(new App.Events.Result(`Have him publicly flogged, then enslaved`, flogMeat)); + choices.push(new App.Events.Result(`Turn a blind eye`, blindInjustice)); + App.Events.addResponses(node, choices); + + function demTitles() { + repX(2500, "event"); + return `You have the insolent Knight's plate armor confiscated, his apartment seized and his right to bear a coat of arms redacted. The knight is nothing short of utterly furious, but puts up no fight as your guards seize his advanced weaponry; to do so would be suicidal. While he swears revenge against you for taking away his "noble rights", you receive a letter from a relieved merchant <span class="green">thanking you</span> for putting the jumped-up bandit down.`; + } + + function flogMeat() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You have the insolent Knight's gear and weapons confiscated, then publicly flog him in the plaza and announce that he's to be enslaved for crimes against the people of ${V.arcologies[0].name}. Although the watching peasants are clearly <span class="green">relieved</span> that the cruel bully is off the streets, some of them, those who did not feel the fist of the howling man on their own neck, <span class="red">recoil</span> somewhat at the sudden brutality against a class that most of them idolize and romanticize.`); + repX(1000, "event"); + const assholeKnight = GenerateNewSlave("XY", {minAge: 22, maxAge: 34, disableDisability: 1}); + assholeKnight.prestige = 1; + assholeKnight.prestigeDesc = "$He was formerly an Imperial Knight, a highly prestigious position indicating both nobility and exceptional combat prowess. Although $he has had $his coat of arms stripped, many still recognize $him from his former Knighthood."; + assholeKnight.origin = "$He used to be a Knight within your arcology, until you had $him stripped of $his title and summarily enslaved for cruelly abusing citizens beneath $his stature."; + assholeKnight.career = "spec ops"; + assholeKnight.devotion = random(-80, -60); + assholeKnight.muscles = random(50, 75); + assholeKnight.skill.combat = 1; + assholeKnight.behavioralFlaw = "malicious"; + assholeKnight.behavioralQuirk = "none"; + assholeKnight.trust = random(-30, -20); + assholeKnight.boobs = 150; + assholeKnight.butt = random(0, 1); + assholeKnight.faceShape = "masculine"; + assholeKnight.height = random(175, 195); + assholeKnight.fetish = "sadist"; + assholeKnight.fetishStrength = 80; + assholeKnight.preg = 0; + assholeKnight.dick = random(3, 5); + assholeKnight.balls = random(2, 4); + assholeKnight.scrotum = assholeKnight.balls; + assholeKnight.prostate = 1; + r.push(App.UI.newSlaveIntro(assholeKnight)); + App.Events.addParagraph(frag, r); + return frag; + } + + function blindInjustice() { + cashX(500, "bribe"); + repX(-2000, "event"); + return `You opt to ignore the abuses of the cruel knight completely. Every few weeks, you receive another <span class="red">pleading</span> message in your inbox about the Knight, until they simply stop coming as the lower class accepts the random abuse of their betters. A few days later, as you socialize with your upper-class, the Knight in question passes you a <span class="green">full envelope</span> and winks with no further explanation.`; + } + } +}; diff --git a/src/events/scheduled/assholeKnight.tw b/src/events/scheduled/assholeKnight.tw deleted file mode 100644 index 6a18b4be53a4654456c5695af0ea743bb66fe41c..0000000000000000000000000000000000000000 --- a/src/events/scheduled/assholeKnight.tw +++ /dev/null @@ -1,56 +0,0 @@ -:: SE assholeknight [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event">> - -The group of citizens you hand-picked as your Knights have quickly proven themselves a reliable staple of the Arcology. Being visibly a league above the common citizen with their heavy Imperial Plate decorated with glimmering pendants and marks of their individual, flowery coats of arms, their mere presence is enough to make most common criminals cower and keep merchants selling their wares at fair prices. The tenets of neo-Imperial hierarchy and their own social prestige have already gone to their heads, and many Knights are now recognized immediately by the common citizens as heroic, uncowed citizen-soldiers. -<br><br> -Despite the noble reputations of many of your Knights, their image as defenders of the downtrodden and honest protectors of the Arcology is not universal. Although you Knighted every last one of them yourself, it seems you might have made a misjudgment on the character of one of your new servants; a stream of minor offenses from one Knight in particular has been building up in your inbox for quite some time, and reviewing the whole dossier now paints a portrait of abuses and misconduct. -<br><br> -This singular Knight has apparently been using their position to extort and bully the populace, demanding unreasonably steep discounts from merchants and regularly beating the peasantry - often for no reason other than momentary amusement, and treating them as "less than even slaves". A number of frustrated citizens have sent you a petition demanding that you denounce and punish them for their petty offenses - a picture of a woman with her face blurred out and a trail of bruises over every inch of her naked body is attached. No names have been attached to the petition, apparently for fear of what the Knight in question will do to them should their attempts be uncovered. Whatever you decide to do with this man will undoubtedly set the precedent for how you deal with Knights who abuse their station in the future. -<br><br> - -<span id="result"> - -<br> <<link "Remove his title and confiscate his weapons">> - <<replace "#result">> - You have the insolent Knight's plate armor confiscated, his apartment seized and his right to bear a coat of arms redacted. The knight is nothing short of utterly furious, but puts up no fight as your guards seize his advanced weaponry; to do so would be suicidal. While he swears revenge against you for taking away his "noble rights", you receive a letter from a relieved merchant @@.green;thanking you@@ for putting the jumped-up bandit down. - <<run repX(2500, "event")>> - <</replace>> -<</link>> -<br> <<link "Have him publicly flogged, then enslaved">> - <<replace "#result">> - You have the insolent Knight's gear and weapons confiscated, then publicly flog him in the plaza and announce that he's to be enslaved for crimes against the people of $arcologies[0].name. Although the watching peasants are clearly @@.green;relieved@@ that the cruel bully is off the streets, some of them, those who did not feel the fist of the howling man on their own neck, @@.red;recoil@@ somewhat at the sudden brutality against a class that most of them idolize and romanticize. - <<run repX(1000, "event")>> - <<set _slave = GenerateNewSlave("XY", {minAge: 22, maxAge: 34, disableDisability: 1})>> - <<set _slave.prestige = 1>> - <<set _slave.prestigeDesc = "$He was formerly an Imperial Knight, a highly prestigious position indicating both nobility and exceptional combat prowess. Although $he has had $his coat of arms stripped, many still recognize $him from his former Knighthood.">> - <<set _slave.origin = "$He used to be a Knight within your arcology, until you had $him stripped of $his title and summarily enslaved for cruelly abusing citizens beneath $his stature.">> - <<set _slave.career = "spec ops">> - <<set _slave.devotion = random(-80,-60)>> - <<set _slave.muscles = random(50,75)>> - <<set _slave.skill.combat = 1>> - <<set _slave.behavioralFlaw = "malicious">> - <<set _slave.behavioralQuirk = "none">> - <<set _slave.trust = random(-30,-20)>> - <<set _slave.boobs = 150>> - <<set _slave.butt = random(0,1)>> - <<set _slave.faceShape = "masculine">> - <<set _slave.height = random(175,195)>> - <<set _slave.fetish = "sadist">> - <<set _slave.fetishStrength = 80>> - <<set _slave.preg = 0>> - <<set _slave.dick = random(3,5)>> - <<set _slave.balls = random(2,4)>> - <<set _slave.scrotum = _slave.balls>> - <<set _slave.prostate = 1>> - <<includeDOM App.UI.newSlaveIntro(_slave)>> - <</replace>> -<</link>> -<br> <<link "Turn a blind eye">> - <<replace "#result">> - You opt to ignore the abuses of the cruel knight completely. Every few weeks, you receive another @@.red;pleading@@ message in your inbox about the Knight, until they simply stop coming as the lower class accepts the random abuse of their betters. A few days later, as you socialize with your upper-class, the Knight in question passes you a @@.green;full envelope@@ and winks with no further explanation. - <<run cashX(500, "bribe")>> - <<run repX(-2000, "event")>> - <</replace>> -<</link>> -</span> \ No newline at end of file diff --git a/src/events/scheduled/newBaron.js b/src/events/scheduled/newBaron.js new file mode 100644 index 0000000000000000000000000000000000000000..3f057eb1e4a794868c76edadc0286e3e9c265b22 --- /dev/null +++ b/src/events/scheduled/newBaron.js @@ -0,0 +1,47 @@ +App.Events.SENewBaron = class SENewBaron extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() >= 40, + () => V.arcologies[0].prosperity > 80, + () => V.arcologies[0].FSNeoImperialistLaw2 === 1, + () => V.newBaron !== 1, + () => App.Events.effectiveWeek() >= V.imperialEventWeek + 3 + ]; + } + + execute(node) { + V.newBaron = 1; + V.imperialEventWeek = App.Events.effectiveWeek(); + + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + App.Events.addParagraph(node, [`${V.arcologies[0].name} is prospering. New citizens flood to your gates, filling out the marketplaces and houses with new goods, slaves, and desires. Although every new citizen and visitor on the bustling trams lines more money into your pocket, it also comes with the challenge of new bureaucracy. The original group of Barons you appointed to micromanage each district has been valiantly struggling to manage increasingly larger clusters of people, but it has become quite clear, even if the Barons refuse to admit it, that a new addition to their hallowed ranks is needed to administrate your ever-greater Arcology.`]); + + App.Events.addParagraph(node, [`The appointment of a new Baron is not something to be taken lightly; it is undoubtedly the most desired title in your arcology, and a veritable horde of citizens and millionaires hound your inbox and parties with hints and implications, subtly attempting to display their qualifications, because the Barons posses something even the wealthiest trillionaire in the Free Cities does not - security. The golden band of office of an Imperial Baron brings with it a penthouse, a sense of nobility, and a guaranteed sector of people to rule; so long as the Arcology continues to exist, the Barons will rule in your name, free from worries about petty market fluctuations and slave prices. Short of your personal intervention or the total collapse of the Arcology, nothing can unseat a Baron once they're appointed.`]); + + App.Events.addParagraph(node, [`The hunger for such security among your upper class leaves you in an interesting position. You have dozens of citizens that you could give the title to, with various skills and proficiencies from your diverse arcology, and anyone who's handed a noble title will be certain to show their gratitude. The only real question on your mind - and on the minds of the waiting elites - is who you plan to promote.`]); + + const choices = []; + choices.push(new App.Events.Result(`Appoint a wealthy executive`, executive)); + choices.push(new App.Events.Result(`Appoint a competent bureaucrat`, bureaucrat)); + choices.push(new App.Events.Result(`Appoint a veteran Knight`, veteran)); + App.Events.addResponses(node, choices); + + function executive() { + cashX(5000, "Baron gift"); + V.arcologies[0].prosperity -= 1; + return `You select one of your loyal executives, an ultra-wealthy trader within the arcology who made a fortune in the sale of human bodies, for the new Barony. The man, a portly and unintimidating man that hides a razor-sharp mind behind his fat and an expensive suit, smiles full of teeth as you announce your decision to a waiting crowd of elites. After you go through the formalities and hand him the golden band that'll represent his symbol of office, he shakes your hand vigorously, still smiling devilishly. The next day, the newly-appointed Baron sends you a platter of expensive gifts and foreign candies, complimented with a <span class="green">massive direct deposit to your bank account.</span> You can't help but feel that such a crafty fox might use his new power to <span class="red">corner the market</span> in his barony, though.`; + } + + function bureaucrat() { + V.arcologies[0].prosperity += 3; + return `You select an unimportant but accomplished bureaucrat within the lower ranks of your administration, one of the cornerstone accountants that keeps the trains running on time. The rail-thin woman is clearly surprised that you'd choose her over a wealthier, more influential elite, but nevertheless accepts the golden band with overflowing joy. Although she may not turn any eyebrows, you can tell without a fact that she'll <span class="green">keep your arcology efficient and prosperous</span> - after all, if it collapses, then her 'guaranteed' barony vanishes too.`; + } + + function veteran() { + repX(+2500, "event"); + V.arcologies[0].prosperity += 1; + return `You select one of your Imperial Knights, a heavily scarred and muscular man who bears his rose-and-hawk coat of arms like a purple heart on his broad chest. The grizzled soldier is somewhat taken aback at your decision, but regains his composure almost immediately and accepts the golden band of a Baron with a scarred-over smirk. The ex-Knight takes to his new duty with surprising gusto, and quickly proves himself an <span class="green">extraordinarily popular figure</span> among the commoners, who see the scarred and athletic figure both as proof that duty is rewarded in your arcology and as an example of what a proper Imperial noble should be - martial, confident, and nearly unbeatable in a duel.`; + } + } +}; diff --git a/src/events/scheduled/newBaron.tw b/src/events/scheduled/newBaron.tw deleted file mode 100644 index e25c509134aad53eda00b37146da31c914427a5f..0000000000000000000000000000000000000000 --- a/src/events/scheduled/newBaron.tw +++ /dev/null @@ -1,34 +0,0 @@ -:: SE newBaron [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event">> - -$arcologies[0].name is prospering. New citizens flood to your gates, filling out the marketplaces and houses with new goods, slaves, and desires. Although every new citizen and visitor on the bustling trams lines more money into your pocket, it also comes with the challenge of new bureaucracy. The original group of Barons you appointed to micromanage each district has been valiantly struggling to manage increasingly larger clusters of people, but it has become quite clear, even if the Barons refuse to admit it, that a new addition to their hallowed ranks is needed to administrate your ever-greater Arcology. -<br><br> -The appointment of a new Baron is not something to be taken lightly; it is undoubtedly the most desired title in your arcology, and a veritable horde of citizens and millionaires hound your inbox and parties with hints and implications, subtly attempting to display their qualifications, because the Barons posses something even the wealthiest trillionaire in the Free Cities does not - security. The golden band of office of an Imperial Baron brings with it a penthouse, a sense of nobility, and a guaranteed sector of people to rule; so long as the Arcology continues to exist, the Barons will rule in your name, free from worries about petty market fluctuations and slave prices. Short of your personal intervention or the total collapse of the Arcology, nothing can unseat a Baron once they're appointed. -<br><br> -The hunger for such security among your upper class leaves you in an interesting position. You have dozens of citizens that you could give the title to, with various skills and proficiencies from your diverse arcology, and anyone who's handed a noble title will be certain to show their gratitude. The only real question on your mind - and on the minds of the waiting elites - is who you plan to promote. -<br><br> - -<span id="result"> - -<br> <<link "Appoint a wealthy executive">> - <<replace "#result">> - You select one of your loyal executives, an ultra-wealthy trader within the arcology who made a fortune in the sale of human bodies, for the new Barony. The man, a portly and unintimidating man that hides a razor-sharp mind behind his fat and an expensive suit, smiles full of teeth as you announce your decision to a waiting crowd of elites. After you go through the formalities and hand him the golden band that'll represent his symbol of office, he shakes your hand vigorously, still smiling devilishly. The next day, the newly-appointed Baron sends you a platter of expensive gifts and foreign candies, complimented with a @@.green;massive direct deposit to your bank account.@@ You can't help but feel that such a crafty fox might use his new power to @@.red;corner the market@@ in his barony, though. - <<run cashX(5000, "Baron gift")>> - <<run $arcologies[0].prosperity -= 1>> - <</replace>> -<</link>> -<br> <<link "Appoint a competent bureaucrat">> - <<replace "#result">> - You select an unimportant but accomplished bureaucrat within the lower ranks of your administration, one of the cornerstone accountants that keeps the trains running on time. The rail-thin woman is clearly surprised that you'd choose her over a wealthier, more influential elite, but nevertheless accepts the golden band with overflowing joy. Although she may not turn any eyebrows, you can tell without a fact that she'll @@.green;keep your arcology efficient and prosperous@@ - after all, if it collapses, then her 'guaranteed' barony vanishes too. - <<run $arcologies[0].prosperity += 3>> - <</replace>> -<</link>> -<br> <<link "Appoint a veteran Knight">> - <<replace "#result">> - You select one of your Imperial Knights, a heavily scarred and muscular man who bears his rose-and-hawk coat of arms like a purple heart on his broad chest. The grizzled soldier is somewhat taken aback at your decision, but regains his composure almost immediately and accepts the golden band of a Baron with a scarred-over smirk. The ex-Knight takes to his new duty with surprising gusto, and quickly proves himself an @@.green;extraordinarily popular figure@@ among the commoners, who see the scarred and athletic figure both as proof that duty is rewarded in your arcology and as an example of what a proper Imperial noble should be - martial, confident, and nearly unbeatable in a duel. - <<run repX(+2500, "event")>> - <<run $arcologies[0].prosperity += 1>> - <</replace>> -<</link>> -</span> diff --git a/src/events/scheduled/poorKnight.js b/src/events/scheduled/poorKnight.js new file mode 100644 index 0000000000000000000000000000000000000000..46af6232e8af55921e84d01b01ada8117c6452c9 --- /dev/null +++ b/src/events/scheduled/poorKnight.js @@ -0,0 +1,61 @@ +App.Events.SEPoorKnight = class SEPoorKnight extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() >= 37, + () => V.arcologies[0].FSNeoImperialistLaw1 === 1, + () => V.arcologies[0].FSNeoImperialistLaw2 === 1, + () => V.poorKnight !== 1, + () => App.Events.effectiveWeek() >= V.imperialEventWeek + 3, + ]; + } + + execute(node) { + V.poorKnight = 1; + V.imperialEventWeek = App.Events.effectiveWeek(); + + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + + App.Events.addParagraph(node, [`Word reaches your ears through the idle gossip of your well-to-do Barons of a particular citizen whose name has been on everyone's lips the last few days. During the visit of a wealthy trader from a neighboring arcology, the merchant, supposedly at the prompting of one particularly pompous Knight of yours who referred to the peasantry as "little more than mindless toys", had his guards beat some of your lower-class citizens for amusement, molesting a young girl and treating them generally as slaves.`]); + + App.Events.addParagraph(node, [`The cruel rambunctiousness of this trader and your own Knights continued for a few hours, with nearby guards both pretending not to notice and not reporting their activities to you, until a factory-working peasant by the name of Valentin approached them in the marketplace and demanded they stop. When the merchant's guards attempted to apprehend him, although you aren't clear on the exact details, it seems he managed to somehow strike down all five, despite being both unarmed and unarmored. The present Knight promptly challenged him to fight, out-of-armor and one-on-one, and was then knocked flat by the peasant in front of the watching marketplace as well.`]); + + App.Events.addParagraph(node, [`This 'Valentin', a quiet man built like a mountain, has very rapidly become a local hero to your peasantry. You have heard petitions calling for him to be Knighted, and the public has nearly immediately come to see him as a courageous fighter against the various injustices of your hierarchical Imperial society. Your Barons, on the other hand, murmur that he is a rabblerouser, a peasant who has clearly forgotten his station at the bottom of the pyramid, and that to do anything but punish him for his insolence will surely lead to riots and unrest. Such a man would surely be a proud and capable Imperial Knight, but to Knight him would undoubtedly be seen as condoning liberal freedoms in your lower classes, and a Knight drawn from the filthy, unwashed peasants is totally unheard of.`]); + + const festiveCost = 5000; + const quietCost = 500; + const choices = []; + if (V.cash >= festiveCost) { + choices.push(new App.Events.Result(`Knight him in a Grand Festival`, festival, `costing ${cashFormat(festiveCost)}.`)); + } else { + choices.push(new App.Events.Result(null, null, `Cannot afford a Grand Festival.`)); + } + if (V.cash >= quietCost) { + choices.push(new App.Events.Result(`Knight him in a Quiet Ceremony`, quiet, `costing ${cashFormat(quietCost)}.`)); + } else { + choices.push(new App.Events.Result(null, null, `Cannot afford even a quiet ceremony. Maybe, uh, Valentin could spot you a few ¤?`)); + } + choices.push(new App.Events.Result(`Have him flogged for attacking your honored guests`, floggingMeat)); + App.Events.addResponses(node, choices); + + function festival() { + cashX(-festiveCost, "knighting"); + V.arcologies[0].prosperity -= 2; + repX(5000, "event"); + return `You make your stance on the issue known with a large public ceremony, awarding Valentin with his own private apartment, coat of arms, and a set of Imperial Plate in the very marketplace where he bested a group of brutish foreign thugs and an overly-cocky Knight. A swarm of peasantry surround every inch of the ceremony, <span class="green">cheering your name</span> and 'Sir' Valentin's as you demonstrate that skill and courage is more important than social station. The furious foreign merchant sends you a message a few days later swearing to <span class="red">never return to your arcology,</span> and the Barons grumble about the wildly dancing and celebrating peasants <span class="red">undermining your authority.</span>`; + } + + function quiet() { + cashX(-quietCost, "knighting"); + V.arcologies[0].prosperity -= 1; + repX(2000, "event"); + return `You quietly award the brave peasant a set of Imperial Plate and his own apartment in a private ceremony attended only by a handful of your Barons and Knights. Many of the watching oligarchs seem thoroughly unenthusiastic about the enormous, grease-stained man joining their hallowed ranks, but politely clap and congratulate him nevertheless. Even the pompous Knight who he beat a few days ago, still sporting a black eye, claps him on the back after you have him rise as 'Sir' Valentin and congratulates him on a fight "befitting of a real man". Word of your decision soon reaches the peasantry, who <span class="green">celebrate</span> the rewards given for honor, but you later receive a message from the foreign merchant infuriated that you would reward such insolence and claiming that he'll <span class="red">hike his prices for you.</span>`; + } + + function floggingMeat() { + repX(-2000, "event"); + V.arcologies[0].prosperity += 1; + return `You have the uppity peasant flogged for a few hours in the marketplace where he beat the merchant's guards. He accepts the punishment quietly and without any protest, submitting his muscled back to the bite of the lash as your Barons nod their head in agreement with your decision. The watching peasants are utterly <span class="red">horrified</span> at your treatment of one of their heroes, but a day later you receive a message from the pleased merchant saying that he'll be sure to give you a <span class="green">steep discount</span> the next time he visits your arcology for 'putting that uppity vermin in its place - beneath us.'`; + } + } +}; diff --git a/src/events/scheduled/poorKnight.tw b/src/events/scheduled/poorKnight.tw deleted file mode 100644 index 1adf7137610de6c28a97e43bb5c901913e1b94f1..0000000000000000000000000000000000000000 --- a/src/events/scheduled/poorKnight.tw +++ /dev/null @@ -1,41 +0,0 @@ -:: SE poorknight [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event">> - -Word reaches your ears through the idle gossip of your well-to-do Barons of a particular citizen whose name has been on everyone's lips the last few days. During the visit of a wealthy trader from a neighboring arcology, the merchant, supposedly at the prompting of one particularly pompous Knight of yours who referred to the peasantry as "little more than mindless toys", had his guards beat some of your lower-class citizens for amusement, molesting a young girl and treating them generally as slaves. -<br><br> -The cruel rambunctiousness of this trader and your own Knights continued for a few hours, with nearby guards both pretending not to notice and not reporting their activities to you, until a factory-working peasant by the name of Valentin approached them in the marketplace and demanded they stop. When the merchant's guards attempted to apprehend him, although you aren't clear on the exact details, it seems he managed to somehow strike down all five, despite being both unarmed and unarmored. The present Knight promptly challenged him to fight, out-of-armor and one-on-one, and was then knocked flat by the peasant in front of the watching marketplace as well. -<br><br> -This 'Valentin', a quiet man built like a mountain, has very rapidly become a local hero to your peasantry. You have heard petitions calling for him to be Knighted, and the public has nearly immediately come to see him as a courageous fighter against the various injustices of your hierarchical Imperial society. Your Barons, on the other hand, murmur that he is a rabblerouser, a peasant who has clearly forgotten his station at the bottom of the pyramid, and that to do anything but punish him for his insolence will surely lead to riots and unrest. Such a man would surely be a proud and capable Imperial Knight, but to Knight him would undoubtedly be seen as condoning liberal freedoms in your lower classes, and a Knight drawn from the filthy, unwashed peasants is totally unheard of. -<br><br> -<span id="result"> -<<if $cash >= 5000>> -<br> <<link "Knight him in a Grand Festival">> - <<replace "#result">> - You make your stance on the issue known with a large public ceremony, awarding Valentin with his own private apartment, coat of arms, and a set of Imperial Plate in the very marketplace where he bested a group of brutish foreign thugs and an overly-cocky Knight. A swarm of peasantry surround every inch of the ceremony, @@.green;cheering your name@@ and 'Sir' Valentin's as you demonstrate that skill and courage is more important than social station. The furious foreign merchant sends you a message a few days later swearing to @@.red;never return to your arcology,@@ and the Barons grumble about the wildly dancing and celebrating peasants @@.red;undermining your authority.@@ - <<run cashX(-5000, "knighting")>> - <<run $arcologies[0].prosperity -= 2>> - <<run repX(5000, "event")>> - <</replace>> -<</link>> -costing <<print cashFormat(5000)>>. -<</if>> -<<if $cash >= 500>> -<br> <<link "Knight him in a Quiet Ceremony">> - <<replace "#result">> - You quietly award the brave peasant a set of Imperial Plate and his own apartment in a private ceremony attended only by a handful of your Barons and Knights. Many of the watching oligarchs seem thoroughly unenthusiastic about the enormous, grease-stained man joining their hallowed ranks, but politely clap and congratulate him nevertheless. Even the pompous Knight who he beat a few days ago, still sporting a black eye, claps him on the back after you have him rise as 'Sir' Valentin and congratulates him on a fight "befitting of a real man". Word of your decision soon reaches the peasantry, who @@.green;celebrate@@ the rewards given for honor, but you later receive a message from the foreign merchant infuriated that you would reward such insolence and claiming that he'll @@.red;hike his prices for you.@@ - <<run cashX(-500, "knighting")>> - <<run $arcologies[0].prosperity -= 1>> - <<run repX(2000, "event")>> - <</replace>> -<</link>> -costing <<print cashFormat(500)>>. -<</if>> -<br> <<link "Have him flogged for attacking your honored guests">> - <<replace "#result">> - You have the uppity peasant flogged for a few hours in the marketplace where he beat the merchant's guards. He accepts the punishment quietly and without any protest, submitting his muscled back to the bite of the lash as your Barons nod their head in agreement with your decision. The watching peasants are utterly @@.red;horrified@@ at your treatment of one of their heroes, but a day later you receive a message from the pleased merchant saying that he'll be sure to give you a @@.green;steep discount@@ the next time he visits your arcology for 'putting that uppity vermin in its place - beneath us.' - <<run repX(-2000, "event")>> - <<run $arcologies[0].prosperity += 1>> - <</replace>> -<</link>> -</span> diff --git a/src/events/scheduled/seFCNNstation.js b/src/events/scheduled/seFCNNstation.js new file mode 100644 index 0000000000000000000000000000000000000000..c16f14675919f0df23d7c22375c342015f782f49 --- /dev/null +++ b/src/events/scheduled/seFCNNstation.js @@ -0,0 +1,44 @@ +App.Events.SEFcnnStation = class SEFcnnStation extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => (V.rivalOwner === 0 && V.seeFCNN === 1 && V.FCNNstation === 0 && V.week > 95 && V.cash > 200000 && V.rep > 7500) + ]; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + V.encyclopedia = "FCTV"; + V.FCNNstation = -1; + + const cost = 100000; + const {girlP} = getPronouns(V.PC).appendSuffix("P"); + App.Events.addParagraph(node, [`One of the first groups to take advantage of the Free Cities' nearly nonexistent regulations for media and communications was the Free Cities News Network. As one of the few stations covering news within the Free Cities, and the only one doing so without any form of censorship, FCNN quickly became one the most popular news networks in the world. Presently, however, the network's future looks grim. Its reluctance on portraying explicitly pornographic content has lead to plummeting audience figures, especially in comparison to the upstart 8HGG Inc. media empire. In addition, governments within and outside the Free Cities have become increasingly restrictive towards the press, to the point that many FCNN branches have been effectively silenced.`]); + + App.Events.addParagraph(node, [`This is the situation when you receive a personal video call from the network's beleaguered president. The former FCNN headquarters has been outright destroyed for reporting on its host nation's human rights abuses, and they're hoping to relocate to ${V.arcologies[0].name}. "We are, of course, in dire financial straits," the president nervously explains, "So we'll need a small subsidy to establish our new headquarters. Probably, oh, let's say... <span class="yellowgreen">${cashFormat(cost)}</span> or so?" He flinches while forcing a grin.`]); + + App.Events.addParagraph(node, [`You ponder their proposal to yourself. ${(V.seeFCNN === 1) ? `While you're not exactly a FCNN fan${girlP},` : `Though you may not listen to FCNN regularly,`} and the price certainly seems outrageous, accepting the offer would likely be a boost to your public reputation, as well as the local economy. The network is clearly at the end of their rope; the fact they would even ask for money beforehand is proof enough of that. If you don't accept their offer now, they'll probably go bankrupt or worse before you can get another chance to.`]); + + const choices = []; + if (V.cash > cost) { + choices.push(new App.Events.Result(`Accept`, accept)); + } else { + choices.push(new App.Events.Result(null, null, `You cannot afford the asking price`)); + } + + choices.push(new App.Events.Result(`Decline`, decline)); + App.Events.addResponses(node, choices); + + function accept() { + cashX(forceNeg(cost), "capEx"); + V.arcologies[0].prosperity += 2; + V.FCNNstation = 1; + return `You accept the FCNN president's offer. He looks like he's about to burst into tears after hearing this, especially since you offer no caveats as well, but struggles to maintain a professional composure regardless. Before the week is over, FCNN has established their new headquarters in ${V.arcologies[0].name}.`; + } + + function decline() { + V.FCNNstation = -1; + return `You decline the FCNN president's offer. There's very little change in his expression; he was probably expecting this response. He accepts your decision, thanks you for your time, and unenthusiastically claims the network will soldier on regardless.`; + } + } +}; diff --git a/src/events/scheduled/seFCNNstation.tw b/src/events/scheduled/seFCNNstation.tw deleted file mode 100644 index 19bcab5dec73e086f1183b65368df706e21ca0d9..0000000000000000000000000000000000000000 --- a/src/events/scheduled/seFCNNstation.tw +++ /dev/null @@ -1,32 +0,0 @@ -:: SE FCNN Station [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event", $returnTo = "Scheduled Event", $encyclopedia = "FCTV", $FCNNstation = -1>> - -<<setPlayerPronouns>> - -One of the first groups to take advantage of the Free Cities' nearly nonexistent regulations for media and communications was the Free Cities News Network. As one of the few stations covering news within the Free Cities, and the only one doing so without any form of censorship, FCNN quickly became one the most popular news networks in the world. Presently, however, the network's future looks grim. Its reluctance on portraying explicitly pornographic content has lead to plummeting audience figures, especially in comparison to the upstart 8HGG Inc. media empire. In addition, governments within and outside the Free Cities have become increasingly restrictive towards the press, to the point that many FCNN branches have been effectively silenced. -<br><br> -This is the situation when you receive a personal video call from the network's beleaguered president. The former FCNN headquarters has been outright destroyed for reporting on its host nation's human rights abuses, and they're hoping to relocate to $arcologies[0].name. "We are, of course, in dire financial straits," the president nervously explains, "So we'll need a small subsidy to establish our new headquarters. Probably, oh, let's say... @@.yellowgreen;<<print cashFormat(100000)>>@@ or so?" He flinches while forcing a grin. -<br><br> -You ponder their proposal to yourself. -<<if $seeFCNN == 1>> - While you're not exactly a FCNN fan<<= _girlP>>, -<<else>> - Though you may not listen to FCNN regularly, -<</if>> -and the price certainly seems outrageous, accepting the offer would likely be a boost to your public reputation, as well as the local economy. The network is clearly at the end of their rope; the fact they would even ask for money beforehand is proof enough of that. If you don't accept their offer now, they'll probably go bankrupt or worse before you can get another chance to. -<br><br> -<span id="result"> - <<link "Accept">> - <<replace "#result">> - You accept the FCNN president's offer. He looks like he's about to burst into tears after hearing this, especially since you offer no caveats as well, but struggles to maintain a professional composure regardless. Before the week is over, FCNN has established their new headquarters in $arcologies[0].name. - <<set cashX(forceNeg(100000), "capEx"), $arcologies[0].prosperity += 2, $FCNNstation = 1>> - <</replace>> - <</link>> - <br><<link "Decline">> - <<replace "#result">> - You decline the FCNN president's offer. There's very little change in his expression; he was probably expecting this response. He accepts your decision, thanks you for your time, and unenthusiastically claims the network will soldier on regardless. - <<set $FCNNstation = -1>> - <</replace>> - <</link>> -</span> \ No newline at end of file diff --git a/src/events/scheduled/seFCTVinstall.js b/src/events/scheduled/seFCTVinstall.js new file mode 100644 index 0000000000000000000000000000000000000000..a9959eca43c9dbc613eae7a36e850e925876dc19 --- /dev/null +++ b/src/events/scheduled/seFCTVinstall.js @@ -0,0 +1,21 @@ +App.Events.SEFctvInstall = class SEHuskSlaveDelivery extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => App.Events.effectiveWeek() >= 5, + () => V.FCTV.receiver === -1 + ]; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + V.returnTo = "Scheduled Event"; + V.encyclopedia = "FCTV"; + V.FCTV.receiver = 0; + App.Events.addParagraph(node, [`You've been sitting in your office into the early afternoon going over bothersome lease documents that need your approval. When you take a break to look out the window, ${V.assistant.name} speaks up. "${properTitle()}, you have received an approval welcome packet from 8HGG Inc. in regards to Free Cities TV. It seems that they've determined that ${V.arcologies[0].name} is now sufficiently developed enough to warrant a FCTV-Citizen connection. All the details and contracts necessary are included in the packet. From there, a receiver will need to be built onto ${V.arcologies[0].name} in order to access FCTV."`]); + + App.Events.addParagraph(node, [`You browse the guide: home shopping networks, random dramas, how-to shows and a myriad of other things. Of more interest are some of the programs showing glimpses into foreign arcologies and how they are using the service to help mold society.`]); + + App.UI.DOM.appendNewElement("p", node, `While FCTV attempts to exclude any dick-based, pregnancy, hyperpregnancy, and extreme content based on your settings, it may still hint at that content, especially the more mundane of it. If you wish to be absolutely sure, don't watch FCTV or do not install the receiver.`, "note"); + } +}; diff --git a/src/events/scheduled/seFCTVinstall.tw b/src/events/scheduled/seFCTVinstall.tw deleted file mode 100644 index 729fb955c6ecc22051de6ca87cc42218a4381f2b..0000000000000000000000000000000000000000 --- a/src/events/scheduled/seFCTVinstall.tw +++ /dev/null @@ -1,10 +0,0 @@ -:: SE FCTV Install [nobr] - -<<set $nextButton = "Continue", $nextLink = "Scheduled Event", $returnTo = "Scheduled Event", $encyclopedia = "FCTV", $FCTV.receiver = 0>> - -You've been sitting in your office into the early afternoon going over bothersome lease documents that need your approval. When you take a break to look out the window, $assistant.name speaks up. "<<= properTitle()>>, you have received an approval welcome packet from 8HGG Inc. in regards to Free Cities TV. It seems that they've determined that $arcologies[0].name is now sufficiently developed enough to warrant a FCTV-Citizen connection. All the details and contracts necessary are included in the packet. From there, a receiver will need to be built onto $arcologies[0].name in order to access FCTV." -<br><br> - -You browse the guide: home shopping networks, random dramas, how-to shows and a myriad of other things. Of more interest are some of the programs showing glimpses into foreign arcologies and how they are using the service to help mold society. - -<br><br><i>While FCTV attempts to exclude any dick-based, pregnancy, hyperpregnancy, and extreme content based on your settings, it may still hint at that content, especially the more mundane of it. If you wish to be absolutely sure, don't watch FCTV or do not install the receiver.</i> diff --git a/src/events/scheduled/seHuskSlaveDelivery.js b/src/events/scheduled/seHuskSlaveDelivery.js new file mode 100644 index 0000000000000000000000000000000000000000..a56e7f9a549ce956b67adef58b4deda3c4f42bb1 --- /dev/null +++ b/src/events/scheduled/seHuskSlaveDelivery.js @@ -0,0 +1,100 @@ +App.Events.SEHuskSlaveDelivery = class SEHuskSlaveDelivery extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.huskSlaveOrdered === 1 + ]; + } + + execute(node) { + V.huskSlaveOrdered = 0; + V.nextButton = "Continue"; + V.nextLink = "Scheduled Event"; + V.returnTo = "Scheduled Event"; + V.encyclopedia = "Enslaving People"; + + const pram = { + mature: 0, nationality: V.huskSlave.nationality, minAge: V.huskSlave.age, maxAge: V.huskSlave.age, ageOverridesPedoMode: 1 + }; + if (V.huskSlave.race !== "not important") { + pram.race = V.huskSlave.race; + } + let husk; + if (V.huskSlave.sex === 2) { + husk = GenerateNewSlave("XY", pram); + husk.boobs = 50; + husk.boobsImplant = 0; + husk.boobsImplantType = "none"; + } else { + husk = GenerateNewSlave("XX", pram); + } + + husk.slaveName = "Doll"; + husk.birthName = ""; + husk.slaveSurname = ""; + husk.surname = ""; + husk.origin = "You reserved a mindless slave like $him from the Flesh Heap."; + husk.devotion = 0; + husk.trust = 0; + husk.fetish = "mindbroken"; + husk.fetishStrength = 10; + husk.fetishKnown = 1; + husk.career = "a Fuckdoll"; + husk.behavioralFlaw = "none"; + husk.behavioralQuirk = "none"; + husk.sexualFlaw = "none"; + husk.sexualQuirk = "none"; + husk.intelligence = -100; + husk.intelligenceImplant = 0; + husk.skill.vaginal = 0; + husk.skill.oral = 0; + husk.skill.anal = 0; + husk.skill.whoring = 0; + husk.skill.entertainment = 0; + husk.skill.combat = 0; + + if (V.huskSlave.sex === 3) { + husk.dick = 1; + husk.foreskin = 2; + husk.prostate = 1; + husk.balls = 1; + if (husk.physicalAge >= V.potencyAge) { + husk.pubertyXY = 1; + } + } + if (husk.balls > 0) { + husk.scrotum = husk.balls; + } + if (husk.vagina === -1) { + husk.clit = 0; + } + if (V.huskSlave.virgin === 0) { + husk.anus = 0; + if (husk.vagina > -1) { + husk.vagina = 0; + } + } + + const { + he, him + } = getPronouns(husk); + + App.UI.DOM.appendNewElement("p", node, `A slave came in fitting the description you provided.`); + App.UI.DOM.appendNewElement("p", node, `As expected, ${he} is a complete vegetable, but that is what you ordered after all. You lack the facilities to care for ${him} in this state, so you should do what you are planning quickly. Or you could return ${him} to the Flesh Heap, though you won't get your credits back.`, "note"); + + node.append(App.Desc.longSlave(husk, {market: "generic"})); + + const choices = []; + if (V.cash >= V.surgeryCost) { + choices.push(new App.Events.Result(`Accept the offered slave and contact the bodyswap surgeon.`, accept)); + } else { + choices.push(new App.Events.Result(null, null, `You can't sustain ${him} and thus must return ${him}.`)); + } + App.Events.addResponses(node, choices); + + function accept() { + V.activeSlave = husk; + Engine.play("Husk Slave Swap Workaround"); + return ``; + } + } +}; diff --git a/src/events/scheduled/seHuskSlaveDelivery.tw b/src/events/scheduled/seHuskSlaveDelivery.tw deleted file mode 100644 index 2d8d2c360284f90552626549d426556b457db320..0000000000000000000000000000000000000000 --- a/src/events/scheduled/seHuskSlaveDelivery.tw +++ /dev/null @@ -1,82 +0,0 @@ -:: SE husk slave delivery [nobr] - -<<set $huskSlaveOrdered = 0, $nextButton = "Continue", $nextLink = "Scheduled Event", $returnTo = "Scheduled Event", $encyclopedia = "Enslaving People">> - -<<set _pram = {mature: 0, nationality: $huskSlave.nationality, minAge: $huskSlave.age, maxAge: $huskSlave.age, ageOverridesPedoMode: 1}>> -<<if $huskSlave.race != "not important">> - <<set _pram.race = $huskSlave.race>> -<</if>> -<<if $huskSlave.sex == 2>> - <<set _husk = GenerateNewSlave("XY", _pram)>> - <<set _husk.boobs = 50>> - <<set _husk.boobsImplant = 0>> - <<set _husk.boobsImplantType = "none">> -<<else>> - <<set _husk = GenerateNewSlave("XX", _pram)>> -<</if>> - -<<set _husk.slaveName = "Doll">> -<<set _husk.birthName = "">> -<<set _husk.slaveSurname = "">> -<<set _husk.surname = "">> -<<set _husk.origin = "You reserved a mindless slave like $him from the Flesh Heap.">> -<<set _husk.devotion = 0>> -<<set _husk.trust = 0>> -<<set _husk.fetish = "mindbroken">> -<<set _husk.fetishStrength = 10>> -<<set _husk.fetishKnown = 1>> -<<set _husk.career = "a Fuckdoll">> -<<set _husk.behavioralFlaw = "none">> -<<set _husk.behavioralQuirk = "none">> -<<set _husk.sexualFlaw = "none">> -<<set _husk.sexualQuirk = "none">> -<<set _husk.intelligence = -100>> -<<set _husk.intelligenceImplant = 0>> -<<set _husk.skill.vaginal = 0>> -<<set _husk.skill.oral = 0>> -<<set _husk.skill.anal = 0>> -<<set _husk.skill.whoring = 0>> -<<set _husk.skill.entertainment = 0>> -<<set _husk.skill.combat = 0>> - -<<if $huskSlave.sex == 3>> - <<set _husk.dick = 1>> - <<set _husk.foreskin = 2>> - <<set _husk.prostate = 1>> - <<set _husk.balls = 1>> - <<if _husk.physicalAge >= $potencyAge>> - <<set _husk.pubertyXY = 1>> - <</if>> -<</if>> -<<if _husk.balls > 0>> - <<set _husk.scrotum = _husk.balls>> -<</if>> -<<if _husk.vagina == -1>> - <<set _husk.clit = 0>> -<</if>> -<<if $huskSlave.virgin == 0>> - <<set _husk.anus = 0>> - <<if _husk.vagina > -1>> - <<set _husk.vagina = 0>> - <</if>> -<</if>> - -<<setLocalPronouns _husk>> - -A slave came in fitting the description you provided. -<br> -//As expected, $he is a complete vegetable, but that is what you ordered after all. You lack the facilities to care for $him in this state, so you should do what you are planning quickly. Or you could return $him to the Flesh Heap, though you won't get your credits back.// -<br><br> -<<includeDOM App.Desc.longSlave(_husk, {market: "generic"})>> -<br><br> -<span id="result"> -<<if $cash >= $surgeryCost>> - <<link "Accept the offered slave and contact the bodyswap surgeon.">> - <<set $activeSlave = _husk>> - <<goto "Husk Slave Swap Workaround">> - <</link>> - //Will significantly increase the selected slave's upkeep.// -<<else>> - //You can't sustain $him and thus must return $him.// -<</if>> -</span> diff --git a/src/events/timeGatedPlotEvent.js b/src/events/timeGatedPlotEvent.js index 2d95b1551dadf13c65f4b8fb53ea968a1a6ea76b..63c40ab60b49457a3ea8a556c41697155eaf03bd 100644 --- a/src/events/timeGatedPlotEvent.js +++ b/src/events/timeGatedPlotEvent.js @@ -20,9 +20,7 @@ App.Events.TimeGatedPlotEvent = class TimeGatedPlotEvent extends App.Events.Base this.events[56] = new App.Events.PUndergroundRailroad(); this.events[58] = new App.Events.PBombing(); this.events[61] = new App.Events.PTraitorMessage(); - this.events[62] = new App.Events.TwineEvent().wrapPassage([ - () => V.mercenaries < 3 - ], "P defense fears"); + this.events[62] = new App.Events.PDefenseFears(); this.events[65] = new App.Events.PCitizensAndCivilians(); this.events[67] = new App.Events.PCoupCollaborationChoice(); this.events[69] = new App.Events.PHackerSupport();