diff --git a/src/events/scheduled/murderAttempt.js b/src/events/scheduled/murderAttempt.js index 7529b8cf79bdcebafb49265acc48068c36add6a2..7556e52c11de1900d2a3ca4d58eac403171935e2 100644 --- a/src/events/scheduled/murderAttempt.js +++ b/src/events/scheduled/murderAttempt.js @@ -4,9 +4,9 @@ App.Events.murderAttempt = function() { // disable Continue V.nextButton = " "; const nextPassage = "Random Nonindividual Event"; - const perceptiveCareers = ["mercenary", "gang"]; + const perceptiveCareers = ["mercenary", "gang", "escort"]; // event unique - const variation = jsEither(["trade", "slave", "drug", "military"]); + const variation = jsEither(["trade", "slave", "military"]); // , "drug" let isSincere = Math.random() > 0.6; // actual deals can only trigger once if (isSincere) { @@ -26,16 +26,25 @@ App.Events.murderAttempt = function() { } } const companyName = "RealTec"; // TODO generate name - const {he, his, him, man, himself} = getPronouns((V.arcologies[0].FSGenderFundamentalist !== "unset" || V.seeDicks > random(0, 99)) + const {he, his, him, woman, himself} = getPronouns((V.arcologies[0].FSGenderFundamentalist !== "unset" || V.seeDicks > random(0, 99)) ? {pronoun: App.Data.Pronouns.Kind.male} : {pronoun: App.Data.Pronouns.Kind.female}); + const {womanPC} = getPronouns(V.PC).appendSuffix("PC"); + if (S.Bodyguard) { + // eslint-disable-next-line no-unused-vars + const {heBG, HeBG, himBG, hisBG} = getPronouns(S.Bodyguard).appendSuffix("BG"); + } const documentFragment = document.createDocumentFragment(); intro(documentFragment); return documentFragment; + function perceptionChance() { + return (perceptiveCareers.includes(V.PC.career) || V.PC.skill.warfare >= 60 || V.PC.skill.slaving >= 60 || V.PC.skill.medicine >= 60); + } + function intro(fragment) { const r = []; - r.push(`As per routine, you are sifting through the messages ${assistant.name} has flagged as relevant from the mass that fills your inbox each day.`); + r.push(`As per routine, you are sifting through the messages ${V.assistant.name} has flagged as relevant from the mass that fills your inbox each day.`); r.push(`One is a request from a company called ${companyName} for a personal meeting to propose some kind of`); switch (variation) { case "trade": @@ -98,7 +107,7 @@ App.Events.murderAttempt = function() { const fragment = document.createDocumentFragment(); let r = []; - r.push(`${capFirstChar($assistant.name)} schedules a meeting a few days later to take place in your personal office, an oddity given these meetings are usually conducted in a more neutral, albeit less secure location, but ${companyName} insisted on it.`); + r.push(`${capFirstChar(V.assistant.name)} schedules a meeting a few days later to take place in your personal office, an oddity given these meetings are usually conducted in a more neutral, albeit less secure location, but ${companyName} insisted on it.`); if (["capitalist", "mercenary", "slaver", "engineer", "escort"].includes(V.PC.career)) { r.push("You should prepare for anything; it's better to be prepared in case something goes awry."); } else { @@ -107,11 +116,11 @@ App.Events.murderAttempt = function() { App.Events.addParagraph(fragment, r); r = []; - r.push(`When it comes time for the meeting, a ${man} arrives at the entryway of the penthouse and is escorted to your office by one of your slaves as you watch ${him} on your monitor. The ${man} is distinctively average looking, as if you took all business men that did their job well, but did not overachieve, and created the perfect average of it. Someone trying this hard to appear average is certainly anything but average.`); + r.push(`When it comes time for the meeting, a ${woman} arrives at the entryway of the penthouse and is escorted to your office by one of your slaves as you watch ${him} on your monitor. The ${woman} is distinctively average looking, as if you took all business men that did their job well, but did not overachieve, and created the perfect average of it. Someone trying this hard to appear average is certainly anything but average.`); App.Events.addParagraph(fragment, r); r = []; - r.push("Once ${he} reaches your office, you settle down after a short greeting for ${him} to begin"); + r.push(`Once ${he} reaches your office, you settle down after a short greeting for ${him} to begin`); switch (variation) { case "trade": case "military": @@ -122,15 +131,14 @@ App.Events.murderAttempt = function() { break; case "drug": r.push("showing you the effects of their new drug."); + break; } if (S.Bodyguard) { r.push(`Before getting anywhere though, ${he} interrupts ${himself}, gesturing at your bodyguard.`); - r.push("I'm sorry, this is meant only for your ears, can you please send your bodyguard outside?"); + r.push(`"I'm sorry, this is meant only for your ears, can you please send your bodyguard outside?"`); App.Events.addParagraph(fragment, r); - const {He} = getPronouns(S.Bodyguard).appendSuffix("BG"); - App.Events.addResponses(fragment, [ new App.Events.Result(`Order ${him} to leave for making such a request.`, endEvent), new App.Events.Result(`${S.Bodyguard.slaveName} goes everywhere and does everything with you. ${HeBG} stays.`, bgStaysRoute), @@ -152,14 +160,17 @@ App.Events.murderAttempt = function() { if (isSincere) { sincereProposal(fragment, paragraphStart); } else { - paragraphStart.push("For the next few hours", he, - "talks in circles, doing grand gestures here and there but without actually saying anything of substance to the point where you start getting bored until"); - if (perceptiveCareers.includes(V.PC.career)) { - paragraphStart.push("during one of his wide gestures you notice", he, "dropped something in your drink. When you confront", him, "about it", he, "draws a weapon and shoots you before you have a chance to react."); - if (slaveLeft && canWalk(S.Bodyguard)) { - paragraphStart.push("When your bodyguard storms in it is already too late and your murderer being dead too will not make you alive again."); + paragraphStart.push(`For the next few hours ${he} talks in circles, making grand gestures here and there but not really saying anything of substance to the point it starts to bore you.`); + if (perceptionChance) { + paragraphStart.push(`That is, up until one of ${his} wide motions drops something in your drink. When you confront ${him} about it, ${he} draws a weapon and shoots you before you have a chance to react.`); + if (V.PC.career === "gang") { + paragraphStart.push(`You have the last laugh, though, as you draw your own weapon and gun ${him} down before you succumb to your wound.`); + // } else if (V.PC.skill.medicine >= 100) { + // allow for gravely wounded state during player update + } else if (slaveLeft) { // BG must be able to walk, so we should assume that if this is true, she is actually lurking + paragraphStart.push(`While ${S.Bodyguard.slaveName} may storm in and cut ${him} down, it will not bring you back to life.`); } else { - paragraphStart.push("Before", he, "can leave the building your security detains", him, ", but this won't help you anymore."); + paragraphStart.push(`Before ${he} can leave the building, your security detains ${him}, but this won't help a dead ${womanPC}.`); } App.Events.addParagraph(fragment, paragraphStart); gameOver(fragment); @@ -174,31 +185,30 @@ App.Events.murderAttempt = function() { if (isSincere) { let r = []; - r.push("\"Very good\"", he, "smiles. Seeing your confused look,", he, - "says \"We are not interested in dealing with someone who isn't in control of their own affairs.\" Seems like you just passed a test."); + r.push(`"Very good," ${he} smiles, seeing your confused look, "We are not interested in dealing with someone who isn't in control of their own affairs." Seems like you just passed some sort of test.`); App.Events.addParagraph(fragment, r); r = []; - r.push("After this, he continues explaining."); + r.push(`Satisfied, ${he} begins explaining:`); sincereProposal(fragment, r); } else { let r = []; - r.push("\"If you say so\", ", he, - "continues and starts explaining the plans anew, sometimes with great gestures, without ever getting to the point and you start to get bored"); - if (S.Bodyguard.intelligence + S.Bodyguard.intelligenceImplant + 30 * S.Bodyguard.skill.combat > 40 - && canSee(S.Bodyguard)) { - r.push("until", he, "does on of", his, "grand gestures again and", - S.Bodyguard.slaveName, canWalk(S.Bodyguard) ? "jumps forward" : "starts"); - if (perceptiveCareers.includes(V.PC.career)) { - r.push(r.pop() + ", just a moment faster than you,"); + r.push(`"If you say so..." ${He} continues and starts ${his} explanation anew, sometimes with great gestures, but never actually getting to the point. You start to grow bored of ${his} drivel`); + if (S.Bodyguard.intelligence + S.Bodyguard.intelligenceImplant + (30 * S.Bodyguard.skill.combat) > 60) { + r.push(`until ${he} does one of ${his} grand motions again and ${S.Bodyguard.slaveName} jumps forward,`); + if (perceptionChance) { + r.push("just a moment faster than you,"); + } + if (canTalk(S.Bodyguard)) { + r.push(`demanding to know what ${he} just put in your drink.`); + } else { + r.push(`snatching the glass and taking an agressive stance.`); } - r.push("and asks the man what", he, "just put in your drink."); bgDefense(fragment, r); - } else if (perceptiveCareers.includes(V.PC.career)) { - r.push("until", he, "does on of", his, "grand gestures again, during which you notice", he, - "put something in your drink and you confront", him, "about what", he, "just did."); + } else if (perceptionChance) { + r.push(`until, on of ${his} grand motions, you notice ${he} slips something in your drink and you confront ${him} about what ${he} just did.`); bgDefense(fragment, r); } else { - r.push(r.pop() + ". After a while"); + r.push(r.pop() + "."); poisoned(fragment, r); } } @@ -206,39 +216,31 @@ App.Events.murderAttempt = function() { } function bgDefense(fragment, paragraphStart) { - const {her: herBG, she: sheBG} = getPronouns(S.Bodyguard); - - paragraphStart.push("Before you can react to anything the", man, "draws a weapon and"); - if (hasAnyArms(S.Bodyguard) && canSee(S.Bodyguard)) { + paragraphStart.push(`Before you can react, the ${woman} draws a weapon and`); + if (S.Bodyguard.muscles > 95 || S.Bodyguard.muscles < -30 || S.Bodyguard.boobs > 4000 || S.Bodyguard.weight > 130 || S.Bodyguard.health.tired > 30 || S.Bodyguard.belly >= 100000) { // BG is too big or weak to draw fast enough to matter + paragraphStart.push("shoots you through the heart; having a bodyguard who cannot actually defend you might have been a poor choice in retrospect."); + paragraphStart.push(`With you dead, ${S.Bodyguard.slaveName} knows ${heBG} has to put this to rest.`); + if (Deadliness(S.Bodyguard) > 1) { + paragraphStart.push(`Out of ammo, your murderer moves to grab ${himBG} by the head and introduce ${hisBG} skull to the corner of your table. ${S.Bodyguard.slaveName} may have been slow on the draw, but is not incompetent. ${HeBG} subdues ${him}, pinning ${him} down until security may collect ${him}, but it's all in vain when ${he} starts convulsing and quickly perishes to the contents of a false tooth. With nothing left, ${S.Bodyguard.slaveName} readies ${hisBG} weapon, puts it under ${hisBG} chin, and pulls the trigger.`); + } else { + paragraphStart.push(`Alas, ${heBG} is too incompetent to even do that. By the time ${heBG} manages to get a steady grip on ${hisBG} weapon, your murderer is already introducing ${hisBG} skull to the corner of your table. Sure ${he} is detained before ${he} makes it out of the building, but does that really matter when you're dead?`); + } + App.Events.addParagraph(fragment, paragraphStart); + gameOver(fragment); + } else { paragraphStart.push(paragraphStart.pop() + ","); - if (Deadliness(S.Bodyguard) > 4) { - paragraphStart.push("just a moment faster,", S.Bodyguard.slaveName, "draws", herBG, "own, shooting", him, - "in the shoulder. Screaming of pain, ", he, "drops", his, "weapon and", S.Bodyguard.slaveName, - "swiftly moves to secure", him); + if (Deadliness(S.Bodyguard) > 1) { + paragraphStart.push(`just a little quicker, ${S.Bodyguard.slaveName} draws ${hisBG} own, shooting ${him} in the shoulder. Screaming in pain, ${he} drops ${his} weapon and ${S.Bodyguard.slaveName} swiftly moves to secure ${him}.`); App.Events.addParagraph(fragment, paragraphStart); let r = []; - r.push("After the initial shock is over you are about to start interrogating", him, "about who send", - him + ", but all of a sudden", he, "starts convulsing and a few moments later", he, - "is dead. Seems like they care a lot about not being tracked down. And indeed, all the already sparse information about", - companyName, "is gone and any leads you might have had are useless. You task your assistant to continue searching for the one behind this, but you don't expect anything to come out of it. Someone wanting you dead is no surprise to you and without any idea as to why there are thousands of small groups and individuals who want arcology owners, your kind of owner or maybe just you personally dead."); + r.push(`After the initial shock has waned and you ready to begin interrogating ${him}, ${he} clamps ${his} jaw down hard, foams for several seconds and dies. Seems like whomever sent ${him} cares a lot about not being tracked down. And indeed, all the already sparse information about ${companyName} is gone and any leads you may have had are useless. You task ${V.assistant.name} to continue searching for the one behind this, but you don't expect anything to come out of it. Someone wanting you dead isn't all that surprising, and without any idea as to why, there are thousands of small groups and individuals who want arcology owners, owners like you, or maybe just you personally, dead.`); App.Events.addParagraph(fragment, r); continueButton(fragment); } else { - paragraphStart.push("just a moment too slow,", S.Bodyguard.slaveName, "draws", herBG, "own, shooting", him, - "in the chest, but at that point you already have a bullet in your heart. Seeing you fall down", sheBG, "sets", herBG, "weapon to automatic, puts it under", herBG, "chin and presses the trigger."); + paragraphStart.push(`just a moment too slow, ${S.Bodyguard.slaveName} draws ${hisBG} own, shooting ${him} in the chest, but not before you already have a bullet through your heart. Seeing you fall down, ${heBG} sets ${hisBG} weapon to automatic, puts it under ${hisBG} chin, and pulls the trigger.`); App.Events.addParagraph(fragment, paragraphStart); gameOver(fragment); } - } else { - paragraphStart.push("shoots you. Having a bodyguard who cannot actually defend you might not have been the best choice in retrospect."); - paragraphStart.push("You being dead", S.Bodyguard, "knows", sheBG, "has to follow you. Being unable to shoot a weapon means"); - if (canWalk(S.Bodyguard)) { - paragraphStart.push("all that is left to", herBG, "is trying to hit the corner of your table hard enough with", herBG, "head. By the time your slaves come in the corner is bloody red and your bodyguard is lying next to you with large wound on", herBG, "head."); - } else { - paragraphStart.push(sheBG, "has to do so with other means but when your other slaves come in all", sheBG, "was able to do are some minor cuts and bruises. After watching for a while one of your slaves finally ends it."); - } - App.Events.addParagraph(fragment, paragraphStart); - gameOver(fragment); } } @@ -246,15 +248,12 @@ App.Events.murderAttempt = function() { const fragment = document.createDocumentFragment(); if (isSincere) { let r = []; - r.push("After your bodyguard leaves,", he, - "looks at you for a while, before saying, \"I don't believe you are ready to do business with us.\" When you question why,", - he, "answers \"If you can't trust your bodyguard with sensitive information, you clearly have bigger problems too worry about than our small proposal.\" before leaving your office without waiting for a guide to lead", - him, "outside."); + r.push(`After your bodyguard leaves, ${he} stares at you for a while, before stating, "I don't believe you are ready to do business with us." When questioned why, ${he} answers, "If you can't trust your bodyguard with sensitive information, you clearly have bigger problems to worry about than our small proposal." ${He} leaves your office without waiting for anyone to see ${him} off.`); App.Events.addParagraph(fragment, r); continueButton(fragment); } else { let r = []; - r.push("\"Thank you.\" he continues."); + r.push(`"Thank you," ${he} states, before continuing.`); noSlaveRoute(fragment, r, true); } return fragment; @@ -262,11 +261,10 @@ App.Events.murderAttempt = function() { function poisoned(fragment, paragraphStart){ let r = paragraphStart; - r.push(he, "starts packing up and tells you to call", him, - "if you are interested. You certainly will not, if you wanted to hear someone talk for hours without saying anything you would watch old world politicians."); + r.push(`After a while, ${he} finishes ${his} seemingly unending pitch, begins packing up and tells you to call ${him} if you are interested. You certainly will not be; if you wanted to hear someone talk for hours without saying anything, you would tune into a political debate out of one of the nearby old world counties.`); App.Events.addParagraph(fragment, r); r = []; - r.push("Several hours later you start too feel unwell and a few minutes after you drop dead. Later autopsy reveals you were poisoned."); + r.push("Several hours later you start to feel strange. A few minutes after that, you collapse. You are dead long before help can arrive. Later autopsy reveals your cause of death to be poisoning."); App.Events.addParagraph(fragment, r); gameOver(fragment); } @@ -275,46 +273,48 @@ App.Events.murderAttempt = function() { const options = []; switch (variation) { case "trade": - paragraphStart.push(companyName, "is planning a trade deal with an old world corporation that wants to expand into the Free Cities, but with the added twist of effectively robbing them during this. Their problem is that they need something to show them and your arcology would ideal for this. Your role would be simple, just following a short script before leaving both sides to negotiate. If everything goes well your share could be in the six digit realm, but in case something goes wrong your reputation could be severely damaged."); + paragraphStart.push(`${companyName} is planning a trade deal with an old world corporation that wants to expand into the Free Cities, but with the added twist of effectively robbing them during this. Their problem is they need something to show them and your arcology would ideal for this. Your role would be simple, just follow a short script before leaving both sides to negotiate. If everything goes well, your share could be in the six digit realm, but if something goes wrong, your reputation would be severely damaged.`); options.push( - new App.Events.Result("A chance to get this amount of money doesn't come by every day. Of course you take this opportunity.", accept()), - new App.Events.Result("The potential winnings are not in proportion to the risk. You will not be a part of their plans.", refused) + new App.Events.Result("A windfall like this doesn't come by every day. Of course you'll take this opportunity.", accept()), + new App.Events.Result("The potential winnings are not worth the risk. You will not be a part of their plans.", refused()) ); break; case "slave": - paragraphStart.push(companyName, - "is dealing in a special kind of enslavement. Instead of searching for buyers for the slaves they already have, they instead first search for buyers and enslave those the buyer wants to buy. And while you can at many companies pre order slaves with certain traits,", - companyName, - "enslaves the exact individuals you want, fabricating debt or even kidnapping until they own their target."); + paragraphStart.push(`${companyName} is dealing in a special kind of enslavement. Rather than searching for buyers for the slaves they already have, they instead find potential buyers and acquire those they want to buy. And while there are means to order slaves with certain traits, ${companyName} enslaves the exact individuals you want through fabricated debt, kidnapping or any means neccessary.`); if (V.cash >= 50000) { - options.push(new App.Events.Result( - "Enslaving that annoying guy from high school might be petty, but it will be worth it nonetheless.", - accept("school"), "Costs ¤50.000")); + options.push(new App.Events.Result( // age needs to be checked here + "Enslaving that annoying girl from high school might be petty, but it will be worth it nonetheless.", + accept("school"), `Costs ${cashFormat(50000)}`)); } if (V.cash >= 250000) { options.push(new App.Events.Result( - "There is a rising star in the music industry who would fit perfectly in your stable.", - accept("star"), "Costs ¤250.000")); + "There is a rising star in the music industry that would fit perfectly in your stable.", + accept("star"), `Costs ${cashFormat(250000)}`)); + } + if (V.cash < 50000) { + options.push(new App.Events.Result("You couldn't afford to enslave someone even if you wanted to.", refused())); + } else { + options.push(new App.Events.Result(`You'll pass on the offer.`, refused())); } - options.push(new App.Events.Result(`There is no one you ${options.length > 0 ? "want to" : "can"} enslave right now.`, refused)); break; case "drug": - paragraphStart.push(companyName, "has developed a new performance enhancing drug that can greatly enhance one's productivity. It does however come with serious drawbacks making it unusable for sex slaves, but it could immensely enhance the performance of your menial slaves."); + paragraphStart.push(`${companyName} has developed a new performance enhancing drug that can greatly improve one's productivity. It does however come with serious drawbacks, making it unsuitable for sex slaves, but it could immensely boost the efficiency of your menial slaves.`); if (V.cash >= 100000) { - options.push(new App.Events.Result("Making more money from your menials is always good. Buy the drug.", accept(), "Costs ¤100.000")); + options.push(new App.Events.Result("Making more money from your menials is always good. Buy the drug.", accept(), `Costs ${cashFormat(100000)}`)); } else { options.push(new App.Events.Result(null, null, "You don't have the cash required to buy the drug.")); } options.push( - new App.Events.Result("With the few menials you have you will not recoup the costs for the drug anytime soon.", refused) + new App.Events.Result("The downsides are not worth it.", refused()) ); break; case "military": - paragraphStart.push(companyName, "is part of an endeavor to carve out a Free Cities colony in the old world. While being too far way to influence your local political climate it is certainly a new milestone in the Free Cities dominance over the old world. Your mercenaries are known to be veterans in fighting on old world territory and you supply them with state-of-the-art equipment, so it is only natural for them to ask you to borrow your mercenaries for this operation. Shipping your mercenaries around the globe would be a big operation, but all participants who don't get part of the colony itself will receive a large monetary compensation."); + paragraphStart.push(`${companyName} is part of an endeavor to carve out a new Free City in the old world. While being too far away to influence your local political climate, it is certainly a new milestone in their growing dominance over the old world. Your mercenaries are known to be veterans in fighting in such territory and that you supply them with state-of-the-art equipment, so it is only natural for the company to ask you to join in this operation. Shipping your mercenaries around the globe would be a big expense, but all participants who don't get a share of the colony itself will receive hefty compensation.`); options.push( new App.Events.Result("This is a worthy endeavor. Of course you will help out.", accept()), - new App.Events.Result("Military operations tend to be a net loss most of the time. You will watch with interest but that's it.", refused) + new App.Events.Result("Military operations tend to be a net loss most of the time. You will watch with interest, but not a vested one.", refused()) ); + break; } App.Events.addParagraph(fragment, paragraphStart); App.Events.addResponses(fragment, options, "deal"); @@ -329,11 +329,11 @@ App.Events.murderAttempt = function() { const r = []; switch (variation) { case "trade": - r.push("You discuss the details of the operation before", he, "leaves. You will have a guest soon."); + r.push(`You discuss the details of the operation before ${he} leaves. You will have a guest soon.`); V.illegalDeals.trade = {week: V.week + 2, company: companyName}; break; case "slave": - r.push("You tell", him, "your target and he nods. \"A great idea. It should take no longer than a few weeks.\""); + r.push(`You tell ${him} your target and he nods. "A great idea. It should take no longer than a few weeks."`); V.illegalDeals.slave = {type: argument, company: companyName}; break; case "drug": @@ -341,7 +341,7 @@ App.Events.murderAttempt = function() { V.illegalDeals.menialDrug = 1; break; case "military": - r.push("You order your mercenaries to prepare and a few days later they start to leave, leaving enough man behind to keep your arcology secure. You do not expect to hear much in the next few months, military operations of this size simply take time."); + r.push("You order your mercenaries to prepare and a few days later they depart, leaving enough men behind to keep your arcology secure. You do not expect to hear much in the next few months; military operations of this size simply take time."); V.illegalDeals.military = {week: V.week + 16, company: companyName}; break; } @@ -406,13 +406,12 @@ App.Events.murderAttemptFollowup = function(variation, companyName, type) { function tradeDeal() { V.illegalDeals.trade = -1; let r = []; - r.push("Today you are receiving the delegation of the old world company wanting to buy into the lucrative Free Cities market. After showing them around your logistic centers and the cleaner industry areas you leave them alone with the delegation from", - companyName + "."); - if (Math.random() > 0.05) { - r.push("The next day you receive a transaction of", cashFormatColor(270000) + "."); + r.push(`Today you are receiving the delegation from the old world company wanting to buy into the lucrative Free Cities market. After showing them around your logistic centers and the cleaner industry areas, you leave them alone with the representatives from ${companyName}.`); + if (random(1, 100) > 50) { + r.push(`The next day you receive a transaction of ${cashFormatColor(270000)}.`); cashX(270000, "event"); } else { - r.push("A few hours later you receive a message that tricking the old world company in giving them money for nothing didn't quite work out as hoped. And truly, the next day your uncompetitive behavior is all over the media. This inflicts <span class='reputation dec'>lasting harm on your reputation</span> and <span class='red'>severely damages your economy</span> since your arcology is not seen as a reliable place to conduct business anymore."); + r.push("A few hours later you receive a message that tricking the old world company into giving them money for nothing didn't quite work out as hoped. And truly, the next day your uncompetitive behavior is all over the media. This inflicts <span class='reputation dec'>lasting harm on your reputation</span> and <span class='red'>severely damages your economy</span> as your arcology is now seen as a place to go to be cheated."); repX(-20000, "event"); V.enduringRep *= 0.5; V.arcologies[0].prosperity *= 0.7; @@ -434,25 +433,26 @@ App.Events.murderAttemptFollowup = function(variation, companyName, type) { race: V.PC.race // Same school does not imply same race, but with PC nationality defaulting to // Stateless it's better than nothing. }); - slave.origin = "You were on the same school and seeing $her as your slave fills you with endless satisfaction"; + slave.origin = "You were in the same class and seeing $him as your slave fills you with endless satisfaction."; slave.behavioralFlaw = "arrogant"; relation = "your former schoolmate"; } else if (type === "star") { - slave = GenerateNewSlave(null); + slave = GenerateNewSlave('XX'); slave.origin = "You bought $her enslavement in an illegal deal."; + slaev.voice = 3; slave.skill.entertainment = 60; slave.face = 96 + Math.floor(Math.random() * 5); // Math.random() is always < 1, so range is 0<=x<=4 slave.intelligence = Math.abs(slave.intelligence); // never dumb, but no guarantee on smart slave.weight = Math.clamp(slave.weight, -30, 30); + slave.waist = Math.clamp(slave.waist, -50, 10); slave.career = "an actress"; slave.prestige = 2; slave.prestigeDesc = "$He was once a rising star in the music business, but was illegally enslaved on your command."; relation = "the former rising star"; } V.activeSlave = slave; - console.log(V.activeSlave); let r = []; - r.push("Today", relation, "whose enslavement you bought arrives at your penthouse."); + r.push(`Today ${relation}, whose enslavement you purchased, arrives at your penthouse complete with forged documents and no connections to their past life.`); r.push(App.UI.DOM.renderPassage("New Slave Intro")); return r; } @@ -460,16 +460,14 @@ App.Events.murderAttemptFollowup = function(variation, companyName, type) { function militaryDeal() { V.illegalDeals.military = -1; let r = []; - if (Math.random() > 0.1) { - r.push("After several months of fighting the Free Cities colony in the old world is finally established. While small scale fighting will continue likely for years to come local Free Cities can easily do this, so external forces, like your own mercenaries, are starting to withdraw. For your participation you get", - cashFormatColor(1000000), "and 500 menial slaves."); + if (random(1, 100) > 10) { + r.push(`After several months of fighting, the new Free City in the old world is finally established. While small scale conflicts will likely continue for years to come, local forces can easily manage them, leaving external forces, like your own mercenaries, to withdraw with their spoils. For your participation you get ${cashFormatColor(1000000)} and several hundred new bodies to add to your menial stock.`); cashX(1000000, "event"); V.menials += 500; } else { - r.push("Despite great efforts the coalition of Free Cities trying to establish a colony in the old world finally announces the projects failure. Whether the reason is that the old world military still has enough power left to stop the establishment of a colony or simple mismanagement by the leading Free Cities is a topic for debate, but the fact remains that months were waisted on a fruitless war. Luckily you didn't invest too much so the cost for failure is a meager", - cashFormatColor(40000, true), "and some <span class='reputation dec'>reputation loss.</span>"); + r.push("Despite great efforts, the coalition of forces trying to establish a new Free City in the old world finally announces their failure. May the reason be that the old world military still has enough power to stop the establishment of a colony or simple mismanagement by the powers at hand is a topic for debate, but the fact remains that months were wasted on a fruitless war. Luckily you didn't invest too much, so the cost for failure is a meager ${cashFormatColor(40000, true)} and some <span class='reputation dec'>reputation.</span>"); cashX(-40000, "event"); - repX(-(V.rep / 8), "event"); + repX(forceNeg((V.rep / 8)), "event"); } return r; }