From 00070d6ddfddc398e972100e71ba29f7b80a7cab Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Thu, 7 May 2020 16:50:53 -0700 Subject: [PATCH] Move reRelativeRecruiter over to the Javascript event system. --- .../backwardsCompatibility/datatypeCleanup.js | 4 +- src/events/randomEvent.js | 1 + src/events/reRelativeRecruiter.js | 646 ++++++++++++++ src/js/generateRelatedSlave.js | 52 +- src/uncategorized/newSlaveIntro.tw | 27 +- src/uncategorized/randomNonindividualEvent.tw | 16 - src/uncategorized/reRelativeRecruiter.tw | 807 ------------------ 7 files changed, 703 insertions(+), 850 deletions(-) create mode 100644 src/events/reRelativeRecruiter.js delete mode 100644 src/uncategorized/reRelativeRecruiter.tw diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index dc12e51a204..e3fa0e0b2fa 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -2284,12 +2284,13 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "drugs", "curatives", "aphrodisiacs", "choosesOwnClothes", "clothes", "collar", "shoes", "makeup", "nails", - "vaginalAccessory", "vaginalAttachment", "dickAccessory", "armAccessory", "legAccessory", + "vaginalAccessory", "vaginalAttachment", "dickAccessory", "nipplesAccessory", "armAccessory", "legAccessory", "buttplug", "buttplugAttachment", "fetishKnown", "rudeTitle", "currentRules", "induce", + "induceLactation", "boobsMilk", "mpreg", "inflation", "inflationType", "inflationMethod", "milkSource", "cumSource", "burst", @@ -2303,6 +2304,7 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "onDiet", "prematureBirth", "slaveCost", + "NCSyouthening", "lastWeeksCashIncome", "lastWeeksRepIncome", "lastWeeksRepExpenses", "lifetimeCashIncome", "lifetimeCashExpenses", "lifetimeRepIncome", "lifetimeRepExpenses" ].forEach((s) => delete slave[s]); diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index bdf8c510766..a951210eb57 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -29,6 +29,7 @@ App.Events.getNonindividualEvents = function() { // instantiate all possible random nonindividual events here // example: new App.Events.TestEvent(), new App.Events.REDevotees(), + new App.Events.RERelativeRecruiter(), ] .filter(e => (e.eventPrerequisites().every(p => p()) && e.castActors(null))) .reduce((res, cur) => res.concat(Array(cur.weight).fill(cur)), []); diff --git a/src/events/reRelativeRecruiter.js b/src/events/reRelativeRecruiter.js new file mode 100644 index 00000000000..df495ada5a2 --- /dev/null +++ b/src/events/reRelativeRecruiter.js @@ -0,0 +1,646 @@ +App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // first actor - recruiter + s => s.fetish !== "mindbroken", + s => s.fuckdoll === 0, + s => s.devotion > 50, + canWalk, /* TODO: not sure why this requirement exists */ + s => s.canRecruit === 1 && (totalRelatives(s) === 0 || V.limitFamilies !== 1), + s => this._chooseTargetRelative(s) + ] + ]; + } + + /** pick a target relative and store it in the event parameters + * @param {App.Entity.SlaveState} slave who's doing the recruiting (should be first actor) + * @returns {boolean} success or failure + */ + _chooseTargetRelative(slave) { + // make sure the slave has a genepool entry (everyone should) + const gp = V.genePool.find(s => s.ID === slave.ID); + if (!gp) { + console.log(`Slave with ID ${slave.ID} is missing her genepool entry.`); + slave.canRecruit = 0; + return false; + } + const choices = this._getTargetRelativeChoices(slave); + if (choices.length === 0) { + slave.canRecruit = 0; // slave has exhausted possible relatives, can't recruit any longer + return false; + } + this.params.relative = choices.random(); + return true; + } + + /** find all eligible target relatives for a slave; one will be selected randomly (or by cheating) + * @param {App.Entity.SlaveState} slave who's doing the recruiting (should be first actor) + * @returns {string[]} + */ + _getTargetRelativeChoices(slave) { + let recruit = []; + + const pushWeight = (value, weight=1) => recruit.push(...Array(weight).fill(value)); + + if (slave.mother === 0 && slave.actualAge < 24 && V.seeDicks !== 100) { + pushWeight("mother", 3); + } + if (slave.father === 0 && slave.actualAge < 24 && V.seeDicks !== 0) { + pushWeight("father"); + } + + // TODO: age/fertility/virginity/potency should probably be checking genepool, not current state, since the child would have been born before the event slave was in your possession + if (slave.daughters < 3 && (slave.actualAge > V.minimumSlaveAge + V.fertilityAge) && isFertile(slave) && slave.trueVirgin !== 1) { + if (V.seeDicks !== 100) { + pushWeight("daughter", 2); + } + if (V.seeDicks !== 0) { + pushWeight("son"); + } + } else if (slave.daughters < 3 && (slave.actualAge > V.minimumSlaveAge + V.potencyAge) && slave.balls > 0) { + if (V.seeDicks !== 100) { + pushWeight("daughter", 2); + } + if (V.seeDicks !== 0) { + pushWeight("son"); + } + } + + if (slave.sisters < 3) { + if (slave.actualAge < V.retirementAge - 2) { + if (V.seeDicks !== 100) { + pushWeight("older sister", 2); + } + if (V.seeDicks !== 0) { + pushWeight("older brother", 2); + } + } + if (slave.actualAge > V.minimumSlaveAge + 1) { + if (V.seeDicks !== 100) { + pushWeight("younger sister", 2); + } + if (V.seeDicks !== 0) { + pushWeight("younger brother", 2); + } + } + pushWeight("twin"); + } + + return recruit; + } + + /** returns a description for a given background + * @param {App.Entity.SlaveState} slave (relative) + * @param {string} background + * @returns {string} description + */ + _getBackgroundDescription(slave, background) { + const {His, he, his} = getPronouns(slave); + const backgroundDescriptions = { + "prostitute": `${he} was used as a prostitute by ${his} previous owner`, + "shemale prostitute": `${he} was used as a shemale prostitute by ${his} previous owner`, + "bed MILF": `${he} was used as a bed slave by ${his} MILF-loving owner`, + "gelded servant": `${he} was gelded and used as a house servant`, + "sex toy": `${he} was kept as a personal sex toy by ${his} previous owner`, + "flat toy": `${he} was kept as a bedslave by an owner that loves flat chests`, + "bimbo toy": `${he} was kept as a personal toy by ${his} bimbo-loving owner`, + }; + if (backgroundDescriptions[background]) { + return `${His} listing states that ${backgroundDescriptions[background]}.`; + } + return ``; // twin, for example, has no specific background + } + + /** returns the possible backgrounds for a given relative type; one will be selected randomly (or by cheating) + * Currently super simple (returns exactly one element) to emulate the old twine event, but may easily be expanded if more backgrounds are written + * @param {string} relative + * @returns {string[]} + */ + _getRelativeBackgrounds(relative) { + let bgs = []; + const pushWeight = (value, weight=1) => bgs.push(...Array(weight).fill(value)); + + if (relative === "daughter") { + pushWeight("prostitute"); + } else if (relative === "son") { + pushWeight("shemale prostitute"); + } else if (relative === "mother") { + pushWeight("bed MILF"); + } else if (relative === "father") { + pushWeight("gelded servant"); + } else if (relative === "older sister" || relative === "older brother") { + pushWeight("sex toy"); + } else if (relative === "younger sister") { + pushWeight("flat toy"); + } else if (relative === "younger brother") { + pushWeight("bimbo toy"); + } else if (relative === "twin") { + pushWeight("twin"); + } + return bgs; + } + + execute(node) { + const [eventSlave] = this.actors.map(a => getSlave(a)); + const {He, he, his} = getPronouns(eventSlave); + + V.nextLink = "RIE Eligibility Check"; + + let artDiv = document.createElement("div"); // named container so we can replace it later + App.Events.drawEventArt(artDiv, eventSlave); + node.appendChild(artDiv); + + // pick a random background for the selected relative + this.params.background = this._getRelativeBackgrounds(this.params.relative).random(); + + let _this = this; // fuck javascript's halfassed classes + let cost = 0; // will be filled out later + + let cheatDiv = App.UI.DOM.makeElement("div", (V.cheatMode === 1) ? cheatModeSelectors() : ''); + node.appendChild(cheatDiv); + + let eventTextDiv = App.UI.DOM.makeElement("div", eventText()); + node.appendChild(eventTextDiv); + + /** produce the event text and response links. might be regenerated by changing slave selection in cheat mode + * @returns {DocumentFragment} + */ + function eventText() { + let frag = document.createDocumentFragment(); + + V.activeSlave = makeSlave(); + cost = slaveCost(V.activeSlave); + const {He: He2, him: him2, his: his2, he: he2, daughter: daughter2, sister: sister2} = getPronouns(V.activeSlave); + + const {title: Master} = getEnunciation(eventSlave); + + let t = []; + t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave)); + t.push(`requests an interview with you. ${He}'s a devoted slave, and you grant it, and are happy you did when you see the troubled expression on ${his} face. ${He} explains`); + if (!canTalk(eventSlave)) { + t.push("with desperate gestures"); + } + t.push(`that`); + switch (_this.params.relative) { + case "daughter": + case "son": + t.push(`${he} had a ${daughter2}, who was sent to the slave orphanages. ${He}'s heard a rumor through other slaves that ${his} ${daughter2} will go up for sale soon.`); + break; + case "mother": + case "father": + t.push(`${his} ${_this.params.relative} might be getting sold soon. ${He2} has been a slave for some time. ${He}'s heard a rumor through other slaves that ${his} ${_this.params.relative} will go up for sale soon.`); + break; + case "older sister": + case "older brother": + t.push(`${his} older ${sister2} is being sold. ${He2} was likely to be enslaved the last ${eventSlave.slaveName} knew of ${him2}, and now ${he}'s heard a rumor through other slaves that ${his} big ${sister2} is going to be sold to a new owner.`); + break; + case "younger sister": + case "younger brother": + t.push(`${his} younger ${sister2} is being sold. ${He2} was likely to be enslaved the last ${eventSlave.slaveName} knew of ${him2}, and now ${he}'s heard a rumor through other slaves that ${his} little ${sister2} is going to be sold to a new owner.`); + break; + case "twin": + t.push(`${he} has a twin ${sister2}, who was still free the last ${eventSlave.slaveName} knew of ${him2}. ${He}'s heard a rumor through other slaves that ${his} twin has finally been enslaved, and will soon go up for sale.`); + break; + default: + throw `Unknown relative type: ${_this.params.relative}`; + } + + if (!canTalk(eventSlave)) { + t.push(`${He} urgently gestures for permission to write. It's unusual, but ${he} seems quite serious, so you grant it. ${He} writes,`); + } + t.push(Spoken(eventSlave, `"You've been so good to me, ${Master}. I'm sure ${he2} looks like I did when you bought me. Please, ${Master}, will you buy ${V.activeSlave.slaveName} like you bought me? I'm afraid ${he2}'ll go to a cruel master."`)); + t.push(`${He} bites ${his} lip.`); + t.push(Spoken(eventSlave, `"And, ${Master}, I'm sure ${he2}'d learn to love`)); + + if (eventSlave.fetish === "cumslut") { + t.push(Spoken(eventSlave, `the taste of your cum`)); + } else if (eventSlave.fetish === "submissive") { + t.push(Spoken(eventSlave, `submission`)); + } else if (eventSlave.fetish === "humiliation") { + t.push(Spoken(eventSlave, `being treated like a dirty slut`)); + } else if (eventSlave.fetish === "buttslut") { + t.push(Spoken(eventSlave, `the feeling of your cock in ${his2} butt`)); + } else if (eventSlave.fetish === "sadist") { + t.push(Spoken(eventSlave, `hurting your other slaves`)); + } else if (eventSlave.fetish === "pregnancy" && V.activeSlave.genes !== "XY") { + t.push(Spoken(eventSlave, `being pregnant`)); + } else if (eventSlave.fetish === "masochist") { + t.push(Spoken(eventSlave, `being beaten`)); + } else if (eventSlave.fetish === "dom") { + t.push(Spoken(eventSlave, `fucking your other slaves`)); + } else if (eventSlave.energy > 95) { + t.push(Spoken(eventSlave, `being a good nympho slut`)); + } else if (eventSlave.addict > 2) { + t.push(Spoken(eventSlave, `being a druggie whore`)); + } else if (eventSlave.counter.birthsTotal > 3 && V.activeSlave.genes !== "XY") { + t.push(Spoken(eventSlave, `bearing children`)); + } else if (eventSlave.bellyPreg >= 50 && eventSlave.pregKnown === 1 && V.activeSlave.genes !== "XY") { + t.push(Spoken(eventSlave, `swelling with life`)); + } else if (eventSlave.anus > 2) { + t.push(Spoken(eventSlave, `getting ${his2} butt stretched out`)); + } else if (eventSlave.boobsImplant > 500) { + t.push(Spoken(eventSlave, `getting turned into a bimbo slut`)); + } else { + t.push(Spoken(eventSlave, `the feeling of your cock in ${him2}`)); /* TODO: assumes PC has cock!? */ + } + t.push(Spoken(eventSlave, `as much as I do.`)); + + if (eventSlave.fetish === "cumslut") { + t.push(Spoken(eventSlave, `We could blow you at the same time, ${Master}! And share cum!"`)); + } else if (eventSlave.fetish === "submissive") { + t.push(Spoken(eventSlave, `You could use us together, ${Master}!"`)); + } else if (eventSlave.fetish === "humiliation") { + t.push(Spoken(eventSlave, `You could make us fuck each other in public, ${Master}!"`)); + } else if (eventSlave.fetish === "buttslut") { + t.push(Spoken(eventSlave, `You could fuck our butts right next to each other, ${Master}!"`)); + } else if (eventSlave.fetish === "pregnancy" && V.activeSlave.genes !== "XY") { + t.push(Spoken(eventSlave, `You could knock us up next to each other, ${Master}!"`)); + } else if (eventSlave.fetish === "sadist") { + t.push(Spoken(eventSlave, `I'm sure ${he2}'d love to help me, ${Master}!"`)); + } else if (eventSlave.fetish === "masochist") { + t.push(Spoken(eventSlave, `You could whip us both, ${Master}!"`)); + } else if (eventSlave.fetish === "dom") { + t.push(Spoken(eventSlave, `I'm sure ${he2}'d love to help me use other slaves, ${Master}!"`)); + } else if (eventSlave.energy > 95) { + t.push(Spoken(eventSlave, `I'm sure ${he2}'d love to have threesomes, ${Master}!"`)); + } else if (eventSlave.counter.birthsTotal > 3 && V.activeSlave.genes !== "XY") { + if (V.PC.dick !== 0) { + t.push(Spoken(eventSlave, `We could compete over who carried more of your children, ${Master}!"`)); + } else { + t.push(Spoken(eventSlave, `We could compete over who carried more children for you, ${Master}!"`)); + } + } else if (eventSlave.bellyPreg >= 50 && eventSlave.pregKnown === 1 && V.activeSlave.genes !== "XY") { + t.push(Spoken(eventSlave, `You could compare how big our bellies are next to each other, ${Master}!"`)); + } else { + t.push(Spoken(eventSlave, `You could fuck us together, ${Master}!"`)); + } + + t.push(`${He} waits anxiously for your decision.`); + App.Events.addParagraph(frag, t); + + t = []; + t.push(`You look up the ${_this.params.relative}. ${He2} costs ${cashFormat(cost)}, a bargain, but you won't be able to inspect ${him2} beyond his likely resemblance to ${eventSlave.slaveName}.`); + t.push(_this._getBackgroundDescription(V.activeSlave, _this.params.background)); + App.Events.addParagraph(frag, t); + + App.Events.addResponses(frag, [ + new App.Events.Result(`Buy ${him2}`, buySlave), + ]); + + return frag; + } + + /** fill in the relationship/background selectors for cheat mode + * @returns {DocumentFragment} + */ + function cheatModeSelectors() { + const refreshCallback = (effect) => { effect(); $(cheatDiv).empty().append(cheatModeSelectors); $(eventTextDiv).empty().append(eventText); }; + + let relativeTypeLinks = _.uniq(_this._getTargetRelativeChoices(getSlave(_this.actors[0]))).map((choice) => + App.UI.DOM.link(choice, refreshCallback, [() => { _this.params.relative = choice; _this.params.background = _this._getRelativeBackgrounds(choice).random(); }]) + ); + let backgroundTypeLinks = _.uniq(_this._getRelativeBackgrounds(_this.params.relative)).map((choice) => + App.UI.DOM.link(choice, refreshCallback, [() => { _this.params.background = choice; }]) + ); + + let frag = document.createDocumentFragment(); + $(frag).append( + `Relative Type: <strong>${_this.params.relative}</strong> `, App.UI.DOM.generateLinksStrip(relativeTypeLinks), + "<br>", + `Background: <strong>${_this.params.background}</strong> `, App.UI.DOM.generateLinksStrip(backgroundTypeLinks) + ); + return frag; + } + + /** make the target relative slave + * @returns {App.Entity.SlaveState} + */ + function makeSlave() { + /** @param {App.Entity.SlaveState} slave */ + function clearMods(slave) { + slave.ageImplant = 0; + slave.boobsImplant = 0; + slave.boobsImplantType = "none"; + slave.buttImplant = 0; + slave.buttImplantType = "none"; + slave.earImplant = 0; + slave.faceImplant = 0; + slave.hipsImplant = 0; + slave.lipsImplant = 0; + slave.shouldersImplant = 0; + slave.voiceImplant = 0; + slave.areolaePiercing = 0; + slave.anusPiercing = 0; + slave.clitPiercing = 0; + slave.corsetPiercing = 0; + slave.dickPiercing = 0; + slave.earPiercing = 0; + slave.eyebrowPiercing = 0; + slave.lipsPiercing = 0; + slave.navelPiercing = 0; + slave.nipplesPiercing = 0; + slave.nosePiercing = 0; + slave.tonguePiercing = 0; + slave.vaginaPiercing = 0; + slave.anusTat = 0; + slave.armsTat = 0; + slave.backTat = 0; + slave.bellyTat = 0; + slave.boobsTat = 0; + slave.buttTat = 0; + slave.dickTat = 0; + slave.lipsTat = 0; + slave.legsTat = 0; + slave.shouldersTat = 0; + slave.stampTat = 0; + slave.vaginaTat = 0; + if (slave.nipples === "fuckable") { + slave.nipples = either("cute", "inverted", "partially inverted", "puffy"); + } + } + + function relativeOrigin() { + switch (_this.params.relative) { + case "mother": + case "father": + return "$He was recruited into your service by $his child."; + case "son": + case "daughter": + return "$He was recruited into your service by $his parent."; + case "younger brother": + case "younger sister": + return "$He was recruited into your service by $his older sibling."; + case "older brother": + case "older sister": + return "$He was recruited into your service by $his younger sibling."; + case "twin": + return "$He was recruited into your service by $his twin."; + } + throw `Unknown relative type: ${_this.params.relative}`; + } + + /** @param {App.Entity.SlaveState} slave */ + function applyBackground(slave) { + function applyProstitute() { // assumes XX + slave.boobsImplant = 600; + slave.boobsImplantType = "normal"; + slave.boobs += slave.boobsImplant; + slave.skill.oral += random(30, 50); + slave.skill.vaginal += random(30, 50); + slave.skill.anal += random(30, 50); + slave.skill.entertainment += random(0, 20); + slave.skill.whoring += random(30, 50); + slave.nipplesPiercing = 1; + slave.lipsPiercing = 1; + slave.tonguePiercing = 1; + slave.vaginaPiercing = 1; + slave.earPiercing = 1; + slave.makeup = 1; + slave.nails = 4; + slave.hStyle = either("luxurious", "neat", "tails", "up"); + slave.stampTat = "advertisements"; + } + + function applyShemaleWhore() { // assumes XY + slave.vagina = random(1, 2); + slave.boobsImplant = 600; + slave.boobsImplantType = "normal"; + slave.boobs += slave.boobsImplant; + slave.skill.oral += random(30, 50); + slave.skill.vaginal += random(30, 50); + slave.skill.anal += random(30, 50); + slave.skill.entertainment += random(0, 20); + slave.skill.whoring += random(30, 50); + slave.lips = random(60, 90); + slave.lipsImplant = 40; + slave.lipsPiercing = 1; + slave.tonguePiercing = 1; + slave.vaginaPiercing = 1; + slave.earPiercing = 1; + slave.makeup = 1; + slave.nails = 4; + slave.hStyle = "tails"; + slave.stampTat = "advertisements"; + } + + function applyBedMILF() { // assumes XX + slave.anus = 1; + slave.vagina = 3; + if (V.seePreg !== 0) { + slave.preg = random(5, 39); + slave.pregType = 1; + slave.pregKnown = 1; + slave.pregSource = 0; + slave.pregWeek = slave.preg; + SetBellySize(slave); + } + slave.weight = random(30, 135); + slave.muscles = random(0, 15); + slave.skill.oral = 15; + slave.skill.vaginal = 30; + slave.skill.anal = 15; + slave.skill.entertainment = 10; + slave.skill.whoring = 10; + slave.boobs = (random(12, 20)*100); + slave.butt = random(4, 6); + slave.boobShape = "saggy"; + slave.lactation = 1; + slave.lactationDuration = 2; + slave.markings = "birthmark"; + slave.hLength = random(50, 100); + slave.hStyle = either("bun", "luxurious", "neat", "up"); + slave.voice = 2; + slave.counter.birthsTotal = 5; + slave.counter.birthsTotal += V.slaves.reduce((acc, cur) => acc + (sameDad(eventSlave, cur) ? 1 : 0), 0); + slave.bellySag = 4, slave.bellySagPreg = 4; + slave.energy = 65; + slave.bellyTat = "a heart"; + } + + function applyGeldedServant() { // assumes XY + slave.anus = 2; + slave.weight = random(70, 180); + slave.skill.oral = 35; + slave.skill.anal = 75; + slave.hLength = random(10, 20); + slave.hStyle = either("buzzcut", "long", "neat", "trimmed"); + slave.voice = 1; + slave.energy = 0; + slave.balls = 0; + } + + function applySexToy() { // either sex + slave.tonguePiercing = 1; + slave.makeup = 1; + if (slave.balls < 4 && slave.balls > 0) { + slave.balls = 4; + slave.scrotum = slave.balls; + } + if (slave.dick < 5 && slave.dick > 0) { + slave.dick = 5; + } + if (slave.vagina > -1) { + slave.vagina = 2; + } + } + + function applyFlatToy() { // either sex + slave.boobs = Math.min(slave.boobs, (random(1, 4)*100)); + slave.butt = random(1, 2); + slave.hips = random(-2, 0); + slave.shoulders = random(-2, 0); + slave.skill.entertainment += random(0, 20); + if (slave.vagina > -1) { + slave.anus = 0; + slave.vagina = 1; + } else { + slave.anus = 1; + } + } + + function applyBimboToy() { // either sex + slave.boobsImplant = (random(20, 40)*100); + slave.boobsImplantType = "string"; + slave.boobs += slave.boobsImplant; + slave.buttImplant = random(5, 7); + slave.buttImplantType = "string"; + slave.butt += slave.buttImplant; + slave.lipsImplant = random(60, 80); + slave.lips = Math.clamp(slave.lips + slave.lipsImplant, 0, 100); + slave.nipplesPiercing = 2; + if (slave.vagina > -1) { + slave.vagina = 3; + } + slave.anus = 3; + slave.makeup = 3; + slave.nails = 5; + slave.skill.anal = 70; + slave.skill.oral = 70; + slave.skill.whoring = 100; + slave.energy = 100; + slave.skill.entertainment += random(0, 20); + } + + function applyTwin() { + // no changes for this case + } + + const backgroundDispatch = { + "prostitute": applyProstitute, + "shemale prostitute": applyShemaleWhore, + "bed MILF": applyBedMILF, + "gelded servant": applyGeldedServant, + "sex toy": applySexToy, + "flat toy": applyFlatToy, + "bimbo toy": applyBimboToy, + "twin": applyTwin + }; + backgroundDispatch[_this.params.background](); + } + + /** @param {App.Entity.SlaveState} slave */ + function applyCommon(slave) { + slave.devotion = random(25, 45); + slave.trust = random(-15, 15); + slave.oldDevotion = slave.devotion; + slave.oldTrust = slave.trust; + configureLimbs(slave, "all", 1, true); + slave.career = "a slave"; + setHealth(slave, jsRandom(20, 40)); + slave.skill.combat = 0; + slave.addict = 0; + slave.chem = 0; + slave.weekAcquired = V.week; + randomizeAttraction(slave); // already randomized by generateRelatedSlave, but energy might have changed, so do it again + } + + const origSlave = BaseSlave(); + Object.assign(origSlave, V.genePool.find(s => s.ID === getSlave(_this.actors[0]).ID)); + + const newSlave = generateRelatedSlave(origSlave, _this.params.relative); + clearMods(newSlave); + newSlave.origin = relativeOrigin(); + applyBackground(newSlave); + applyCommon(newSlave); + return newSlave; + } + + function buySlave() { + // kill the cheat div (no going back now!) + $(cheatDiv).empty(); + + // the new slave is already set up to be related to the exising slave, but we're responsible for making sure the existing slave (and any others in our stable) gets *their* relatives set correctly + switch (_this.params.relative) { + case "mother": { + eventSlave.mother = V.activeSlave.ID; + for (const slave of V.slaves) { + if (sameDad(eventSlave, slave) && slave.mother === 0) { + slave.mother = V.activeSlave.ID; + } + } + break; + } + case "father": { + eventSlave.father = V.activeSlave.ID; + for (const slave of V.slaves) { + if (sameMom(eventSlave, slave) && slave.father === 0) { + slave.father = V.activeSlave.ID; + } + } + break; + } + case "older sister": + case "younger sister": + case "older brother": + case "younger brother": + case "twin": { // siblings + if (eventSlave.father === 0 && eventSlave.mother === 0) { + setMissingParents(eventSlave); + V.activeSlave.mother = eventSlave.mother; + V.activeSlave.father = eventSlave.father; + } else if (eventSlave.father === 0) { + setMissingParents(eventSlave); + V.activeSlave.father = eventSlave.father; + for (const slave of V.slaves) { + if (sameMom(eventSlave, slave) && slave.father === 0) { + slave.father = eventSlave.father; + } + } + } else if (eventSlave.mother === 0) { + setMissingParents(eventSlave); + V.activeSlave.mother = eventSlave.mother; + for (const slave of V.slaves) { + if (sameDad(eventSlave, slave) && slave.mother === 0) { + slave.mother = eventSlave.mother; + } + } + } + break; + } + default: // nothing needed for son/daughter + } + + cashX(forceNeg(cost), "slaveTransfer", V.activeSlave); + + // replace slave art + $(artDiv).empty(); + App.Events.drawEventArt(artDiv, [V.activeSlave, eventSlave]); + + const {he: he2} = getPronouns(V.activeSlave); + + let elements = []; + elements.push(`You complete the legalities and biometric scanning quickly and without fuss. ${V.activeSlave.slaveName} arrives shortly. The two slaves remember each other only dimly — they parted a long time ago — but they embrace. The devoted ${SlaveTitle(eventSlave)} explains the situation and encourages ${his} ${_this.params.relative} to be a good slave to you. ${V.activeSlave.slaveName} looks a little fearful but clearly realizes that ${he2}'s lucky to be here.`); + + let desc = document.createDocumentFragment(); + V.eventSlave = eventSlave; // New Slave Intro uses global $eventSlave, so set it here + $(desc).wiki(`<<include "New Slave Intro">>`); + elements.push(desc); + + return elements; + } + } +}; diff --git a/src/js/generateRelatedSlave.js b/src/js/generateRelatedSlave.js index 92370887030..4707f55d938 100644 --- a/src/js/generateRelatedSlave.js +++ b/src/js/generateRelatedSlave.js @@ -4,12 +4,14 @@ globalThis.generateRelatedSlave = (function() { /** * Generate a very similar relative for an existing slave (for use in Household Liquidators, for example). * @param {App.Entity.SlaveState} slave - the source relative. Note: this slave is NOT changed, calling code is responsible for setting up the source end of the relationship! - * @param {string} relationship - the relationship that the new relative has with the source. Currently supports "parent", "child", "older sibling", "younger sibling", "twin". - * @param {boolean} oppositeSex - set to true if the new relative should be the opposite sex of the old one (otherwise it will be the same sex). + * @param {string} relationship - the relationship that the new relative has with the source. Currently supports "parent", "child", "older sibling", "younger sibling", "twin", and applicable gender-specific variants of those (i.e. mother/father, daughter/son, older/younger brother/sister). + * @param {boolean} oppositeSex - set to true if the new relative should be the opposite sex of the old one (otherwise it will be the same sex). will be ignored if gender is implied by relationship. * @returns {App.Entity.SlaveState} - new relative */ function generateRelative(slave, relationship, oppositeSex=false) { let relative = prepareClone(slave); + + ({relationship, oppositeSex} = interpretGenderSpecificRelationship(slave, relationship, oppositeSex)); if (relationship === "twin") { makeTwin(relative); } else if (relationship === "child") { @@ -20,6 +22,8 @@ globalThis.generateRelatedSlave = (function() { makeYoungerSibling(relative); } else if (relationship === "older sibling") { makeOlderSibling(relative); + } else { + throw(`Unknown relationship: ${relationship}`); } if (oppositeSex) { if (slave.genes === "XX") { @@ -40,6 +44,41 @@ globalThis.generateRelatedSlave = (function() { return relative; } + /** + * Split a gender-specific relationship into a gender-neutral relationship and a base-slave-relative gender toggle + * @param {App.Entity.SlaveState} slave + * @param {string} relationship + * @param {boolean} oppositeSex - original value of oppositeSex (will be copied unchanged if not overridden) + * @returns {{relationship: string, oppositeSex: boolean}} + */ + function interpretGenderSpecificRelationship(slave, relationship, oppositeSex) { + /** @param {string} genes - expected genes for this case + * @returns {boolean} - whether genes match slave or not */ + function isOppositeSex(genes) { return slave.genes !== genes; } + + if (relationship === "daughter") { + return {relationship: "child", oppositeSex: isOppositeSex("XX")}; + } else if (relationship === "son") { + return {relationship: "child", oppositeSex: isOppositeSex("XY")}; + } else if (relationship === "mother") { + return {relationship: "parent", oppositeSex: isOppositeSex("XX")}; + } else if (relationship === "father") { + return {relationship: "parent", oppositeSex: isOppositeSex("XY")}; + } else { + const bits = relationship.split(" "); + if (bits.length === 2) { + if (bits[0] === "younger" || bits[0] === "older") { + if (bits[1] === "sister") { + return {relationship: `${bits[0]} sibling`, oppositeSex: isOppositeSex("XX")}; + } else if (bits[1] === "brother") { + return {relationship: `${bits[0]} sibling`, oppositeSex: isOppositeSex("XY")}; + } + } + } + } + return {relationship: relationship, oppositeSex: oppositeSex}; + } + /** * Clone the original slave and do some common preparations to it. * @param {App.Entity.SlaveState} slave - the source relative @@ -88,7 +127,8 @@ globalThis.generateRelatedSlave = (function() { * @param {App.Entity.SlaveState} slave - the new twin */ function makeTwin(slave) { - /* twins are identical, change nothing. */ + /* twins are physically identical, change only mental traits. */ + randomiseFetishFlaws(slave); } /** @@ -235,6 +275,7 @@ globalThis.generateRelatedSlave = (function() { } else { slave.sexualFlaw = either("apathetic", "crude", "hates anal", "hates oral", "hates penetration", "idealistic", "judgemental", "none", "none", "none", "none", "repressed", "shamefast"); } + randomizeAttraction(slave); } /** @@ -261,6 +302,10 @@ globalThis.generateRelatedSlave = (function() { } } SetBellySize(slave); + + // reset lactation + slave.lactation = 0; + slave.lactationDuration = 0; } /** @@ -441,6 +486,7 @@ globalThis.generateRelatedSlave = (function() { slave.nosePiercing = jsEither([0, 0, 0, 1]); slave.eyebrowPiercing = jsEither([0, 0, 0, 0, 0, 1]); slave.clitPiercing = jsEither([0, 0, 0, 0, 0, 1]); + slave.dickPiercing = 0; slave.lipsPiercing = jsEither([0, 0, 0, 0, 0, 1]); slave.navelPiercing = jsEither([0, 0, 0, 1]); slave.nipplesPiercing = jsEither([0, 0, 0, 0, 1]); diff --git a/src/uncategorized/newSlaveIntro.tw b/src/uncategorized/newSlaveIntro.tw index 3d8919553f7..5a4d78de3f9 100644 --- a/src/uncategorized/newSlaveIntro.tw +++ b/src/uncategorized/newSlaveIntro.tw @@ -972,7 +972,7 @@ The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlav <</link>> <br> /*Written by DrPill, coded by Boney M*/ -<<case "$He was recruited into your service by $his older sister.">> +<<case "$He was recruited into your service by $his older sibling.">> <<setLocalPronouns $eventSlave 2>> //and since $he was recruited by $his older _sister2...// <br> @@ -991,7 +991,7 @@ The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlav <<set $activeSlave.trust += 4>> <</link>> <br> -<<case "$He was recruited into your service by $his younger sister.">> +<<case "$He was recruited into your service by $his younger sibling.">> <<setLocalPronouns $eventSlave 2>> //and since $he was recruited by $his younger _sister2...// <br> @@ -1010,7 +1010,7 @@ The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlav <<set $activeSlave.trust += 4>> <</link>> <br> -<<case "$He was recruited into your service by $his twin sister.">> +<<case "$He was recruited into your service by $his twin.">> <<setLocalPronouns $eventSlave 2>> //and since $he was recruited by $his twin...// <br> @@ -1029,25 +1029,6 @@ The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlav <<set $activeSlave.trust += 4>> <</link>> <br> -<<case "$He was recruited into your service by $his mother.">> - <<setLocalPronouns $eventSlave 2>> - //and since $he was recruited by $his mother...// - <br> - <<link "Use $his mother as an example">> - <<replace "#introResult">> - You gesture towards $eventSlave.slaveName. _He2 is <<if $eventSlave.intelligence+$eventSlave.intelligenceImplant > 15>>bright enough<<elseif (($eventSlave.skill.vaginal + $eventSlave.skill.anal + $eventSlave.skill.oral) > 100)>>skilled enough<<else>>obedient enough<</if>> to understand you mean a demonstration is in order. $eventSlave.slaveName starts things off with a <<if $eventSlave.skill.entertainment >= 100>>masterful<<elseif $eventSlave.skill.entertainment > 10>>skillful<<else>>passable<</if>> striptease, culminating in _him2 <<if ($eventSlave.anus > 0) && ($eventSlave.fetish != "cumslut")>>bending over<<else>>kneeling<</if>> in front of you. _He2 eagerly moans as you enter _him2, begging for your seed<<if $eventSlave.energy > 95>> like the slut _he2 is<<elseif $eventSlave.skill.whoring > 30>> like the whore _he2 is<<elseif ($eventSlave.assignment == "serve in the master suite") || ($eventSlave.assignment == "please you")>> like the fucktoy _he2 is<</if>>. As you finish, _he2 <<if $eventSlave.fetish == "cumslut">>opens _his2 mouth and savors your gift, thanking you once _he2's swallowed enough to be able to talk again<<elseif ($eventSlave.fetish == "buttslut") || ($eventSlave.fetish == "submissive")>>collapses on the floor with _his2 ass high in the air, thanking you for painting _his2 hole white<<else>>thanks you<</if>>. Witnessing this display of servitude from $his mother @@.hotpink;eases $activeSlave.slaveName into $his new life,@@ and @@.mediumaquamarine;gives $him hope@@ $he can find a place here. - <</replace>> - <<if ($eventSlave.anus > 0) && ($eventSlave.fetish != "cumslut")>> - <<set $eventSlave.counter.anal += 1>> - <<set $analTotal += 1>> - <<else>> - <<set $eventSlave.counter.oral += 1>> - <<set $oralTotal += 1>> - <</if>> - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.trust += 4>> - <</link>> - <br> <<case "$He was recruited into your service by $his parent.">> <<setLocalPronouns $eventSlave 2>> //and since $he was recruited by $his parent...// @@ -1067,7 +1048,7 @@ The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlav <<set $activeSlave.trust += 4>> <</link>> <br> -<<case "$He was recruited into your service by $his daughter.">> +<<case "$He was recruited into your service by $his child.">> <<setLocalPronouns $eventSlave 2>> //and since $he was recruited by $his _daughter2...// <br> diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw index 9bd733a86e7..384aa92f874 100644 --- a/src/uncategorized/randomNonindividualEvent.tw +++ b/src/uncategorized/randomNonindividualEvent.tw @@ -704,22 +704,6 @@ <</if>> <</if>> - <<set _recruiterSlaves = $slaves.filter(function(s) { return s.fuckdoll === 0 && s.canRecruit === 1 && (totalRelatives(s) === 0 || $limitFamilies !== 1) && s.devotion > 50 && canWalk(s); })>> - - <<for _recruiterSlaves.length > 0>> - <<set $recruiterSlave = _recruiterSlaves.pluck()>> - <<set $j = $genePool.findIndex(function(o) { return o.ID == $recruiterSlave.ID; })>> - <<if $j != -1>> - <<set $events.push("RE relative recruiter")>> - <<set $recruiterSlave = $recruiterSlave.ID>> - <<break>> - <<else>> /* no matching slave object in the array -- bug? */ - <<set $i = $slaveIndices[$recruiterSlave.ID]>> - <<set $slaves[$i].canRecruit = 0>> - <<set $recruiterSlave = -1>> - <</if>> - <</for>> - <<if $FSAnnounced == 1>> <<set $FSAcquisitionEvents = []>> <<if $arcologies[0].FSSupremacist > (random(1,100) || $cheatMode)>> diff --git a/src/uncategorized/reRelativeRecruiter.tw b/src/uncategorized/reRelativeRecruiter.tw deleted file mode 100644 index b835a48d5fb..00000000000 --- a/src/uncategorized/reRelativeRecruiter.tw +++ /dev/null @@ -1,807 +0,0 @@ -:: RE relative recruiter [nobr] - -<<set $nextButton = "Continue", $nextLink = "RIE Eligibility Check", $returnTo = "RIE Eligibility Check">> - -<<set $eventSlave = getSlave($recruiterSlave)>> -<<set $activeSlave = BaseSlave()>> -<<set $activeSlave = Object.assign($activeSlave, clone($genePool.find(function(o) { return o.ID == $eventSlave.ID; })))>> - -<span id="artFrame"> -/* 000-250-006 */ -<<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt($eventSlave, 2, 0)>></div> - <<else>> - <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt($eventSlave, 2, 0)>></div> - <</if>> -<</if>> -/* 000-250-006 */ -</span> - -<<run Enunciate($eventSlave)>> -<<setLocalPronouns $eventSlave>> - -<<set _recruitedType = []>> -<<if $eventSlave.mother == 0 && $activeSlave.actualAge < 24 && $seeDicks != 100>> - <<set _recruitedType.push("mother")>> - <<set _recruitedType.push("mother")>> - <<set _recruitedType.push("mother")>> -<</if>> -<<if $eventSlave.father == 0 && $activeSlave.actualAge < 24 && $seeDicks != 0>> - <<set _recruitedType.push("father")>> -<</if>> -<<if ($eventSlave.daughters < 3) && ($activeSlave.actualAge > ($minimumSlaveAge+$fertilityAge)) && isFertile($activeSlave) && $activeSlave.trueVirgin != 1>> - <<if $seeDicks != 100>> - <<set _recruitedType.push("daughter")>> - <<set _recruitedType.push("daughter")>> - <</if>> - <<if $seeDicks != 0>> - <<set _recruitedType.push("son")>> - <</if>> - <<set _tempMF = "mother">> -<</if>> -<<if ($eventSlave.daughters < 3) && $activeSlave.actualAge > ($minimumSlaveAge+$potencyAge) && $activeSlave.balls > 0>> - <<if $seeDicks != 100>> - <<set _recruitedType.push("daughter")>> - <<set _recruitedType.push("daughter")>> - <</if>> - <<if $seeDicks != 0>> - <<set _recruitedType.push("son")>> - <</if>> - <<set _tempMF = "father">> -<</if>> -<<if ($eventSlave.sisters < 3)>> - <<if $activeSlave.actualAge < ($retirementAge-1)>> - <<if $seeDicks != 100>> - <<set _recruitedType.push("older sister")>> - <<set _recruitedType.push("older sister")>> - <</if>> - <<if $seeDicks != 0>> - <<set _recruitedType.push("older brother")>> - <<set _recruitedType.push("older brother")>> - <</if>> - <</if>> - <<if $activeSlave.actualAge > $minimumSlaveAge>> - <<if $seeDicks != 100>> - <<set _recruitedType.push("younger sister")>> - <<set _recruitedType.push("younger sister")>> - <</if>> - <<if $seeDicks != 0>> - <<set _recruitedType.push("younger brother")>> - <<set _recruitedType.push("younger brother")>> - <</if>> - <</if>> - <<set _recruitedType.push("twin")>> -<</if>> - -<<set $activeSlave.ID = generateSlaveID()>> - -<<if _recruitedType.length == 0>> - <<set $eventSlave.canRecruit = 0>> - $eventSlave.slaveName requests an interview with you. However, $he ends up withdrawing $his request. It would seem whatever $he wanted to tell you is no longer relevant. - -<<else>> /* this else covers the remainder of the extended family mode variant (search for vanilla to find closing tag) */ - - <<set _relationType = _recruitedType.random()>> - - <<if _relationType != "twin">> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.muscles = 0>> - <<set $activeSlave.corsetPiercing = 0>> - <<set $activeSlave.boobsImplant = 0>> - <<set $activeSlave.boobsImplantType = "none">> - <<set $activeSlave.nipplesPiercing = 0>> - <<set $activeSlave.areolae = 0>> - <<set $activeSlave.areolaePiercing = 0>> - <<set $activeSlave.areolaeShape = "circle">> - <<set $activeSlave.lactation = 0>> - <<set $activeSlave.hipsImplant = 0>> - <<set $activeSlave.buttImplant = 0>> - <<set $activeSlave.buttImplantType = "none">> - <<set $activeSlave.lipsImplant = 0>> - <<set $activeSlave.lipsPiercing = 0>> - <<set $activeSlave.tonguePiercing = 0>> - <<set $activeSlave.vaginaPiercing = 0>> - <<set $activeSlave.scar = {}>> - <<set $activeSlave.clitPiercing = 0>> - <<set $activeSlave.dick = 0>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.dickPiercing = 0>> - <<set $activeSlave.balls = 0>> - <<set $activeSlave.scrotum = 0>> - <<set $activeSlave.ovaries = 0>> - <<set $activeSlave.labia = 0>> - <<set $activeSlave.makeup = 0>> - <<set $activeSlave.nails = 0>> - <<set $activeSlave.earPiercing = 0>> - <<set $activeSlave.nosePiercing = 0>> - <<set $activeSlave.eyebrowPiercing = 0>> - <<set $activeSlave.stampTat = 0>> - <<set $activeSlave.energy = 0>> - <<set $activeSlave.bellyTat = 0>> - <<set $activeSlave.bellySag = 0, $activeSlave.bellySagPreg = 0>> - <<set $activeSlave.counter.birthsTotal = 0>> - <<set $activeSlave.prostate = 0>> - <<run randomizeAttraction($activeSlave)>> - <</if>> - <<if $activeSlave.nipples == "fuckable">> - <<set $activeSlave.nipples = either("cute", "inverted", "partially inverted", "puffy")>> - <</if>> - <<set $activeSlave.lactationDuration = 0>> - <<set $activeSlave.boobsMilk = 0>> - <<set $activeSlave.induceLactation = 0>> - <<set WombFlush($activeSlave)>> - <<run SetBellySize($activeSlave)>> - <<set $activeSlave.clone = 0>> - <<set $activeSlave.cloneID = 0>> - -/*<<set _relativeSeed = random(1,100)>> To be used if additional variants are added. Since there currently is one each, checking a seed for a 100% chance is pointless. */ - -<<set _siblingGap = parseInt(hashChoice({1: 2**7, 2: 2**8, 3: 2**7, 4: 2**6, 5: 2**5, 6: 2**4, 7: 2**3, 8: 2**2, 9: 2, 10: 1}), 10)>> - -<<switch _relationType>> - -<<case "mother">> - <<set $activeSlave.origin = "$He was recruited into your service by $his daughter.">> - <<set $activeSlave.genes = "XX">> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 3>> - <<set $activeSlave.ovaries = 1>> - <<if $seePreg != 0>> - <<set $activeSlave.preg = random(5,39)>> - <<set $activeSlave.pregType = 1>> - <<set $activeSlave.pregKnown = 1>> - <<set $activeSlave.pregSource = 0>> - <<set $activeSlave.pregWeek = $activeSlave.preg>> - <<run SetBellySize($activeSlave)>> - <</if>> - <<set $activeSlave.weight = random(30,135)>> - <<set $activeSlave.muscles = random(0,15)>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.vaginal = 30>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.entertainment = 10>> - <<set $activeSlave.skill.whoring = 10>> - <<set $activeSlave.boobs = (random(12,20)*100)>> - <<set $activeSlave.butt = random(4,6)>> - <<set $activeSlave.boobShape = "saggy">> - <<set $activeSlave.lactation = 1>> - <<set $activeSlave.lactationDuration = 2>> - <<set $activeSlave.markings = "birthmark">> - <<set $activeSlave.hLength = random(50,100)>> - <<set $activeSlave.hStyle = either("bun", "luxurious", "neat", "up")>> - <<set $activeSlave.voice = 2>> - <<set $activeSlave.counter.birthsTotal = 5>> - <<for _reRR = 0; _reRR < $slaves.length; _reRR++>> - <<if sameDad($eventSlave, $slaves[_reRR]) && $slaves[_reRR].mother == 0>> - <<set $activeSlave.counter.birthsTotal += 1>> - <</if>> - <</for>> - <<set $activeSlave.bellySag = 4, $activeSlave.bellySagPreg = 4>> - <<set $activeSlave.energy = 65>> - <<set $activeSlave.bellyTat = "a heart">> - <<set $activeSlave.actualAge = ($eventSlave.actualAge+random(15,20))>> - -<<case "father">> - <<set $activeSlave.origin = "$He was recruited into your service by $his daughter.">> - <<set $activeSlave.genes = "XY">> - <<set $activeSlave.anus = 2>> - <<set $activeSlave.vagina = -1>> - <<set $activeSlave.weight = random(70,180)>> - <<set $activeSlave.skill.oral = 35>> - <<set $activeSlave.skill.anal = 75>> - <<set $activeSlave.hLength = random(10,20)>> - <<set $activeSlave.hStyle = either("buzzcut", "long", "neat", "trimmed")>> - <<set $activeSlave.voice = 1>> - <<set $activeSlave.energy = 0>> - <<set $activeSlave.dick = 2>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.vagina = -1>> - <<set $activeSlave.boobs = (random(5,6)*100)>> - <<set $activeSlave.boobsImplant = 0>> - <<set $activeSlave.boobsImplantType = "none">> - <<set $activeSlave.butt = random(4,6)>> - <<set $activeSlave.actualAge = ($eventSlave.actualAge+random(15,20))>> - -<<case "daughter">> - <<set $activeSlave.origin = "$He was recruited into your service by $his parent.">> - <<set $activeSlave.genes = "XX">> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.preg = -1>> - <<set $activeSlave.boobs = (random(8,10)*100)>> - <<set $activeSlave.boobsImplant = 600>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.skill.oral += random(0,20)>> - <<set $activeSlave.skill.vaginal += random(0,20)>> - <<set $activeSlave.skill.anal += random(0,20)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - <<set $activeSlave.skill.whoring += random(0,20)>> - <<set $activeSlave.nipplesPiercing = 1>> - <<set $activeSlave.lipsPiercing = 1>> - <<set $activeSlave.tonguePiercing = 1>> - <<set $activeSlave.vaginaPiercing = 1>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.makeup = 1>> - <<set $activeSlave.nails = 4>> - <<set $activeSlave.hStyle = either("luxurious", "neat", "tails", "up")>> - <<set $activeSlave.stampTat = "advertisements">> - <<set $activeSlaveOneTimeMaxAge = Math.max($minimumSlaveAge, Math.min(18, ($eventSlave.actualAge - Math.min(11, $fertilityAge))))>> - <<set $activeSlaveOneTimeMinAge = Math.max($minimumSlaveAge, Math.min(14, $activeSlaveOneTimeMaxAge))>> - <<if $pedo_mode == 1>><<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>><</if>> - <<set $activeSlave.actualAge = random($activeSlaveOneTimeMinAge, $activeSlaveOneTimeMaxAge)>> - -<<case "son">> - <<set $activeSlave.origin = "$He was recruited into your service by $his parent.">> - <<set $activeSlave.genes = "XY">> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.boobs = (random(6,8)*100)>> - <<set $activeSlave.boobsImplant = 600>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.skill.oral += random(0,20)>> - <<set $activeSlave.skill.anal += random(0,20)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - <<set $activeSlave.skill.whoring += random(0,20)>> - <<set $activeSlave.lips = random(60,90)>> - <<set $activeSlave.lipsImplant = 40>> - <<set $activeSlave.lipsPiercing = 1>> - <<set $activeSlave.tonguePiercing = 1>> - <<set $activeSlave.vaginaPiercing = 1>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.makeup = 1>> - <<set $activeSlave.nails = 4>> - <<set $activeSlave.hStyle = "tails">> - <<set $activeSlave.stampTat = "advertisements">> - <<set $activeSlaveOneTimeMaxAge = Math.max($minimumSlaveAge, Math.min(18, ($eventSlave.actualAge - Math.min(11, $fertilityAge))))>> - <<set $activeSlaveOneTimeMinAge = Math.max($minimumSlaveAge, Math.min(14, $activeSlaveOneTimeMaxAge))>> - <<if $pedo_mode == 1>><<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>><</if>> - <<set $activeSlave.actualAge = random($activeSlaveOneTimeMinAge, $activeSlaveOneTimeMaxAge)>> - -<<case "older sister">> - <<set $activeSlave.origin = "$He was recruited into your service by $his younger sister.">> - <<set $activeSlave.genes = "XX">> - <<set $activeSlave.vagina = 2>> - <<set $activeSlave.boobs += 200>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.makeup = 1>> - <<set $activeSlave.actualAge = Math.clamp($eventSlave.actualAge, $retirementAge-1, $eventSlave.actualAge + _siblingGap)>> - <<set $activeSlave.preg = -1>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.skill.oral += random(0,20)>> - <<set $activeSlave.skill.vaginal += random(0,20)>> - <<set $activeSlave.skill.anal += random(0,20)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - <<set $activeSlave.skill.whoring += random(0,20)>> - -<<case "younger sister">> - <<set $activeSlave.origin = "$He was recruited into your service by $his older sister.">> - <<set $activeSlave.genes = "XX">> - <<set $activeSlave.boobs = (random(1,4)*100)>> - <<set $activeSlave.butt = random(1,2)>> - <<set $activeSlave.hips = random(-2,0)>> - <<set $activeSlave.shoulders = random(-2,0)>> - <<set $activeSlave.actualAge = Math.clamp($minimumSlaveAge, $eventSlave.actualAge, $eventSlave.actualAge - _siblingGap)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - <<set $activeSlave.preg = -1>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.vagina = 1>> - -<<case "older brother">> - <<set $activeSlave.origin = "$He was recruited into your service by $his younger sister.">> - <<set $activeSlave.genes = "XY">> - <<set $activeSlave.dick = 5>> - <<set $activeSlave.boobs = 50>> - <<set $activeSlave.boobsImplant = 0>> - <<set $activeSlave.boobsImplantType = "none">> - <<set $activeSlave.balls = 4>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.actualAge = Math.clamp($eventSlave.actualAge, $retirementAge-1, $eventSlave.actualAge + _siblingGap)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - <<set $activeSlave.skill.whoring += random(0,20)>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.vagina = -1>> - <<set $activeSlave.energy = 70>> - <<set $activeSlave.dickPiercing = 1>> - <<set $activeSlave.tonguePiercing = 1>> - <<set $activeSlave.face = random(15,95)>> - <<set $activeSlave.faceShape = "masculine">> - -<<case "younger brother">> - <<set $activeSlave.origin = "$He was recruited into your service by $his older sister.">> - <<set $activeSlave.genes = "XY">> - <<set $activeSlave.boobs = (random(20,40)*100)>> - <<set $activeSlave.boobsImplant = $activeSlave.boobs - 100>> - <<set $activeSlave.boobsImplantType = "string">> - <<set $activeSlave.butt = random(7,8)>> - <<set $activeSlave.buttImplant = $activeSlave.butt-1>> - <<set $activeSlave.buttImplantType = "string">> - <<set $activeSlave.lips = random(70,90)>> - <<set $activeSlave.lipsImplant = $activeSlave.lips-10>> - <<set $activeSlave.nipplesPiercing = 2>> - <<set $activeSlave.dick = 1>> - <<set $activeSlave.balls = 1>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.foreskin = 10>> - <<set $activeSlave.scrotum = 10>> - <<set $activeSlave.vagina = -1>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.makeup = 3>> - <<set $activeSlave.nails = 5>> - <<set $activeSlave.skill.anal = 70>> - <<set $activeSlave.skill.oral = 70>> - <<set $activeSlave.skill.whoring = 100>> - <<set $activeSlave.energy = 100>> - <<set $activeSlave.actualAge = Math.clamp($minimumSlaveAge, $eventSlave.actualAge, $eventSlave.actualAge - _siblingGap)>> - <<set $activeSlave.skill.entertainment += random(0,20)>> - -<<case "twin">> - <<set $activeSlave.origin = "$He was recruited into your service by $his twin sister.">> - <<set $activeSlave.birthWeek = $eventSlave.birthWeek>> - <<set $activeSlave.actualAge = $eventSlave.actualAge>> - -<</switch>> - -<<set $activeSlave.visualAge = $activeSlave.actualAge>> -<<set $activeSlave.physicalAge = $activeSlave.actualAge>> -<<set $activeSlave.ovaryAge = $activeSlave.actualAge>> -<<set $activeSlave.pubertyAgeXX = $fertilityAge>> -<<if $activeSlave.ovaries == 1>> - <<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXX>> - <<set $activeSlave.pubertyXX = 1>> - <<else>> - <<set $activeSlave.pubertyXX = 0>> - <</if>> -<<else>> - <<set $activeSlave.pubertyXX = 0>> -<</if>> -<<set $activeSlave.pubertyAgeXY = $potencyAge>> -<<if $activeSlave.balls > 0>> - <<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXY>> - <<set $activeSlave.pubertyXY = 1>> - <<else>> - <<set $activeSlave.pubertyXY = 0>> - <</if>> -<<else>> - <<set $activeSlave.pubertyXY = 0>> -<</if>> -<<if _relationType != "twin">> - <<= resyncSlaveHight($activeSlave)>> -<</if>> -<<set $activeSlave.devotion = random(25,45)>> -<<set $activeSlave.trust = random(-15,15)>> -<<set $activeSlave.ageImplant = 0>> -<<run configureLimbs($activeSlave, "all", 1, true)>> -<<set $activeSlave.career = "a slave">> -<<set $activeSlave.relationship = 0>> -<<set $activeSlave.relationshipTarget = 0>> -<<set $activeSlave.counter.births = 0>> -<<set $activeSlave.counter.oral = 0>> -<<set $activeSlave.counter.vaginal = 0>> -<<set $activeSlave.counter.anal = 0>> -<<set $activeSlave.counter.mammary = 0>> -<<set $activeSlave.counter.penetrative = 0>> -<<set $activeSlave.counter.pitKills = 0>> -<<set $activeSlave.drugs = "no drugs">> -<<set $activeSlave.shoes = "none">> -<<set $activeSlave.clothes = "no clothing">> -<<set $activeSlave.hormones = 0>> -<<set $activeSlave.waist = 0>> -<<set $activeSlave.prestige = 0>> -<<set $activeSlave.porn = new App.Entity.SlavePornPerformanceState()>> -<<set $activeSlave.prestigeDesc = "">> -<<set $activeSlave.rivalry = 0>> -<<set $activeSlave.rivalryTarget = 0>> -<<set $activeSlave.subTarget = 0>> -<<set $activeSlave.sentence = 0>> -<<set $activeSlave.toyHole = "all her holes">> -<<set $activeSlave.indenture = -1>> -<<set $activeSlave.indentureRestrictions = 0>> -<<set $activeSlave.health = {}>> -<<run setHealth($activeSlave, jsRandom(20, 40))>> -<<set $activeSlave.minorInjury = 0>> -<<set $activeSlave.eyewear = "none">> -<<set $activeSlave.earwear = "none">> -<<set $activeSlave.earImplant = 0>> -<<set $activeSlave.voiceImplant = 0>> -<<set $activeSlave.shouldersImplant = 0>> -<<set $activeSlave.boobsTat = 0>> -<<set $activeSlave.counter.milk = 0>> -<<set $activeSlave.counter.cum = 0>> -<<set $activeSlave.faceImplant = 0>> -<<set $activeSlave.lipsTat = 0>> -<<set $activeSlave.vaginaTat = 0>> -<<set $activeSlave.dickTat = 0>> -<<set $activeSlave.labor = 0>> -<<set $activeSlave.anusPiercing = 0>> -<<set $activeSlave.anusTat = 0>> -<<set $activeSlave.bellyAccessory = "none">> -<<set $activeSlave.brand = {}>> -<<set $activeSlave.shouldersTat = 0>> -<<set $activeSlave.armsTat = 0>> -<<set $activeSlave.legsTat = 0>> -<<set $activeSlave.backTat = 0>> -<<set $activeSlave.skill.combat = 0>> -<<set $activeSlave.aphrodisiacs = 0>> -<<set $activeSlave.curatives = 0>> -<<set $activeSlave.addict = 0>> -<<set $activeSlave.chem = 0>> -<<set $activeSlave.induce = 0>> -<<set $activeSlave.mpreg = 0>> -<<set $activeSlave.bellyImplant = -1>> -<<set $activeSlave.cervixImplant = 0>> -<<set $activeSlave.custom.tattoo = "">> -<<set $activeSlave.custom.label = "">> -<<set $activeSlave.custom.title = "">> -<<set $activeSlave.custom.titleLisp = "">> -<<set $activeSlave.assignment = "rest">> -<<set $activeSlave.choosesOwnAssignment = 0>> -<<set $activeSlave.fetishStrength = random(0,90)>> -<<set $activeSlave.fetish = either("boobs", "buttslut", "cumslut", "humiliation", "none", "none", "none", "none", "none", "none", "pregnancy", "submissive")>> -<<set $activeSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration", "none", "none", "none", "none")>> -<<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "hates men", "hates women", "hates women", "none", "none", "none", "odd")>> -<<set $activeSlave.weekAcquired = $week>> -<<set $activeSlave.rudeTitle = 0>> -<<set $activeSlave.ageAdjust = 0>> -<<set $activeSlave.inflation = 0, $activeSlave.inflationType = "none", $activeSlave.inflationMethod = 0>> -<<set $activeSlave.bodySwap = 0>> -<<set $activeSlave.pregControl = "none">> -<<set $activeSlave.vaginalAttachment = "none">> -<<set $activeSlave.buttplugAttachment = "none">> -<<run SetBellySize($activeSlave)>> -<<if $activeSlave.physicalAge < 6>> - <<set $activeSlave.teeth = "baby">> -<<elseif $activeSlave.physicalAge < 12>> - <<set $activeSlave.teeth = "mixed">> -<<elseif ($activeSlave.teeth == "mixed" || $activeSlave.teeth == "baby") && $activeSlave.physicalAge >= 12>> - <<set $activeSlave.teeth = "normal">> -<</if>> -<<if ndef $activeSlave.geneMods>> - <<set $activeSlave.geneMods = {NCS: 0, rapidCellGrowth: 0}>> -<<else>> - <<set $activeSlave.geneMods.NCS = 0>> - <<set $activeSlave.geneMods.rapidCellGrowth = 0>> -<</if>> -<<set $activeSlave.NCSyouthening = 0>> -<<set $activeSlave.slaveCost = 0>> -<<set $activeSlave.lifetimeCashExpenses = 0>> -<<set $activeSlave.lifetimeCashIncome = 0>> -<<set $activeSlave.lastWeeksCashIncome = 0>> -<<set $activeSlave.lifetimeRepExpenses = 0>> -<<set $activeSlave.lifetimeRepIncome = 0>> -<<set $activeSlave.lastWeeksRepExpenses = 0>> -<<set $activeSlave.lastWeeksRepIncome = 0>> -<<set $activeSlave.custom.desc = "">> - -<<set _slaveCost = slaveCost($activeSlave)>> - -<<if $activeSlave.slaveSurname>><<set _familyName = $activeSlave.slaveSurname>><</if>> -<<set _familyBirthSurname = $activeSlave.birthSurname>> -<<run nationalityToName($activeSlave)>> -<<if _familyName>><<set $activeSlave.slaveSurname = _familyName>><</if>> -<<set $activeSlave.birthSurname = _familyBirthSurname>> - -<<run generatePronouns($activeSlave)>> -<<setLocalPronouns $activeSlave 2>> -<<setSpokenLocalPronouns $eventSlave $activeSlave>> - - $eventSlave.slaveName requests an interview with you. $He's a devoted slave, and you grant it, and are happy you did when you see the troubled expression on $his face. $He explains<<if !canTalk($eventSlave)>> with desperate gestures<</if>> that - <<switch _relationType>> - <<case "daughter">> - $he had a _daughter2, who was sent to the slave orphanages. $He's heard a rumor through other slaves that $his _daughter2 will go up for sale soon. - <<case "son">> - $he had a _daughter2, who was sent to the slave orphanages. $He's heard a rumor through other slaves that $his _daughter2 will go up for sale soon. - <<case "mother">> - $his mother might be getting sold soon. _He2 has been a slave for some time. $He's heard a rumor through other slaves that $his mother will go up for sale soon. - <<case "father">> - $his father might be getting sold soon. _He2 has been a slave for some time. $He's heard a rumor through other slaves that $his father will go up for sale soon. - <<case "older sister">> - $his older _sister2 is being sold. _He2 was likely to be enslaved the last $eventSlave.slaveName knew of _him2, and now $he's heard a rumor through other slaves that $his big _sister2 is going to be sold to a new owner. - <<case "older brother">> - $his older _sister2 is being sold. _He2 was likely to be enslaved the last $eventSlave.slaveName knew of _him2. $He's heard a rumor through other slaves that $his big _sister2 is going to be sold to a new owner. - <<case "younger sister">> - $his younger _sister2 is being sold. _He2 was likely to be enslaved the last $eventSlave.slaveName knew of _him2, and now $he's heard a rumor through other slaves that $his little _sister2 is going to be sold to a new owner. - <<case "younger brother">> - $his younger _sister2 is being sold. _He2 was likely to be enslaved the last $eventSlave.slaveName knew of _him2. $He's heard a rumor through other slaves that $his little _sister2 is going to be sold to a new owner. - <<default>> - $he has a twin _sister2, who was still free the last $eventSlave.slaveName knew of _him2. $He's heard a rumor through other slaves that $his twin has finally been enslaved, and will soon go up for sale. - <</switch>> - -<<if !canTalk($eventSlave)>>$He urgently gestures for permission to write. It's unusual, but $he seems quite serious, so you grant it. $He writes,<</if>> -"You've been <<s>>o good to me, <<Master>>. I'm <<s>>ure <<he 2>> look<<s>> like I did when you bought me. Plea<<s>>e, <<Master>>, will you buy _him2 like you bought me? I'm afraid <<he 2>>'ll go to a cruel Ma<<s>>ter." $He bites $his lip. "And, <<Master>>, I'm <<s>>ure <<he 2>>'d learn to love -<<if $eventSlave.fetish == "cumslut">> - the ta<<s>>te of your cum -<<elseif $eventSlave.fetish == "submissive">> - <<s>>ubmi<<ss>>ion -<<elseif $eventSlave.fetish == "humiliation">> - being treated like a dirty <<s>>lut -<<elseif $eventSlave.fetish == "buttslut">> - the feeling of your cock in <<his 2>> butt -<<elseif $eventSlave.fetish == "sadist">> - hurting your other <<s>>lave<<s>> -<<elseif $eventSlave.fetish == "pregnancy" && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - being pregnant -<<elseif $eventSlave.fetish == "masochist">> - being beaten -<<elseif $eventSlave.fetish == "dom">> - fucking your other <<s>>lave<<s>> -<<elseif $eventSlave.energy > 95>> - being a good nympho <<s>>lut -<<elseif $eventSlave.addict > 2>> - being a druggie whore -<<elseif $eventSlave.counter.birthsTotal > 3 && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - bearing children -<<elseif $eventSlave.bellyPreg >= 50 && $eventSlave.pregKnown == 1 && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - <<s>>welling with life -<<elseif $eventSlave.anus > 2>> - getting <<his 2>> butt <<s>>tretched out -<<elseif $eventSlave.boobsImplant > 500>> - getting turned into a bimbo <<s>>lut -<<else>> - the feeling of your cock in _him2 -<</if>> -a<<s>> much a<<s>> I do. -<<if $eventSlave.fetish == "cumslut">> - We could blow you at the <<s>>ame time, <<Master>>! And <<sh>>are cum!" -<<elseif $eventSlave.fetish == "submissive">> - You could u<<s>>e u<<s>> together, <<Master>>!" -<<elseif $eventSlave.fetish == "humiliation">> - You could make u<<s>> fuck each other in public, <<Master>>!" -<<elseif $eventSlave.fetish == "buttslut">> - You could fuck our butt<<s>> right ne<<x>>t to each other, <<Master>>!" -<<elseif $eventSlave.fetish == "pregnancy" && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - You could knock u<<s>> up ne<<x>>t to each other, <<Master>>!" -<<elseif $eventSlave.fetish == "sadist">> - I'm <<s>>ure <<he 2>>'d love to help me, <<Master>>!" -<<elseif $eventSlave.fetish == "masochist">> - You could whip u<<s>> both, <<Master>>!" -<<elseif $eventSlave.fetish == "dom">> - I'm <<s>>ure <<he 2>>'d love to help me u<<s>>e other <<s>>lave<<s>>, <<Master>>!" -<<elseif $eventSlave.energy > 95>> - I'm <<s>>ure <<he 2>>'d love to have three<<s>>ome<<s>>, <<Master>>!" -<<elseif $eventSlave.counter.birthsTotal > 3 && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - <<if $PC.dick != 0>> - We could compete over who carried more of your children, <<Master>>! - <<else>> - We could compete over who carried more children for you, <<Master>>! - <</if>> -<<elseif $eventSlave.bellyPreg >= 50 && $eventSlave.pregKnown == 1 && _relationType != "father" && _relationType != "son" && _relationType != "older brother" && _relationType != "younger brother">> - You could compare how big our bellie<<s>> are ne<<x>>t to each other, <<Master>>! -<<else>> - You could fuck u<<s>> together, <<Master>>!" -<</if>> -$He waits anxiously for your decision. - -<br><br> -You look up the _relationType. _He2 costs <<print cashFormat(_slaveCost)>>, a bargain, but you won't be able to inspect _him2 beyond _his2 likely resemblance to _his2 -<<switch _relationType>> -<<case "daughter">> - $mother. _His2 listing states that _he2 was used as a prostitute by _his2 previous owner. -<<case "son">> - $mother. _His2 listing states that _he2 was used as a shemale prostitute by _his2 previous owner. -<<case "mother">> - $daughter. _His2 listing states that _he2 was used as a bed slave by _his2 MILF-loving owner. -<<case "father">> - $daughter. _His2 listing states that _he2 was gelded and used as a house servant. -<<case "older sister">> - little $sister. _His2 listing states that _he2 was kept as a personal sex toy by _his2 owner. -<<case "older brother">> - little $sister. _His2 listing states that _he2 was kept as a personal sex toy by _his2 owner. -<<case "younger brother">> - big $sister. _His2 listing states that _he2 was kept as a personal toy by _his2 bimbo loving owner. -<<case "younger sister">> - big $sister. _His2 listing states that _he2 was kept as a bedslave by an owner that loves flat chests. -<<default>> - twin $sister. -<</switch>> - -<br><br> -<span id="result"> -<<link "Buy _him2">> - <<run cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave)>> - <<switch _relationType>> - <<case "daughter">> - <<if _tempMF == "father">> - <<set $activeSlave.father = $eventSlave.ID>> - <<else>> - <<set $activeSlave.mother = $eventSlave.ID>> - <</if>> - <<case "son">> - <<if _tempMF == "father">> - <<set $activeSlave.father = $eventSlave.ID>> - <<else>> - <<set $activeSlave.mother = $eventSlave.ID>> - <</if>> - <<case "mother">> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($eventSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $activeSlave.ID>> - <</if>> - <</for>> - <<set $eventSlave.mother = $activeSlave.ID>> - <<set $activeSlave.father = 0>> - <<set $activeSlave.mother = 0>> - <<case "father">> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($eventSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $activeSlave.ID>> - <</if>> - <</for>> - <<set $eventSlave.father = $activeSlave.ID>> - <<set $activeSlave.father = 0>> - <<set $activeSlave.mother = 0>> - <<case "older sister">> - <<if $eventSlave.father == 0 && $eventSlave.mother == 0>> - <<set $eventSlave.mother = $missingParentID>> - <<set $activeSlave.mother = $missingParentID>> - <<set $missingParentID-->> - <<set $eventSlave.father = $missingParentID>> - <<set $activeSlave.father = $missingParentID>> - <<set $missingParentID-->> - <<elseif $eventSlave.mother != 0 && $eventSlave.father != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $eventSlave.father>> - <<elseif $eventSlave.mother != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($activeSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <<elseif $eventSlave.father != 0>> - <<set $activeSlave.father = $eventSlave.father>> - <<set $activeSlave.mother = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($activeSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <</if>> - <<case "older brother">> - <<if $eventSlave.father == 0 && $eventSlave.mother == 0>> - <<set $eventSlave.mother = $missingParentID>> - <<set $activeSlave.mother = $missingParentID>> - <<set $missingParentID-->> - <<set $eventSlave.father = $missingParentID>> - <<set $activeSlave.father = $missingParentID>> - <<set $missingParentID-->> - <<elseif $eventSlave.mother != 0 && $eventSlave.father != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $eventSlave.father>> - <<elseif $eventSlave.mother != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($activeSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <<elseif $eventSlave.father != 0>> - <<set $activeSlave.father = $eventSlave.father>> - <<set $activeSlave.mother = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($activeSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <</if>> - <<case "younger brother">> - <<if $eventSlave.father == 0 && $eventSlave.mother == 0>> - <<set $eventSlave.mother = $missingParentID>> - <<set $activeSlave.mother = $missingParentID>> - <<set $missingParentID-->> - <<set $eventSlave.father = $missingParentID>> - <<set $activeSlave.father = $missingParentID>> - <<set $missingParentID-->> - <<elseif $eventSlave.mother != 0 && $eventSlave.father != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $eventSlave.father>> - <<elseif $eventSlave.mother != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($activeSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <<elseif $eventSlave.father != 0>> - <<set $activeSlave.father = $eventSlave.father>> - <<set $activeSlave.mother = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($activeSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <</if>> - <<case "younger sister">> - <<if $eventSlave.father == 0 && $eventSlave.mother == 0>> - <<set $eventSlave.mother = $missingParentID>> - <<set $activeSlave.mother = $missingParentID>> - <<set $missingParentID-->> - <<set $eventSlave.father = $missingParentID>> - <<set $activeSlave.father = $missingParentID>> - <<set $missingParentID-->> - <<elseif $eventSlave.mother != 0 && $eventSlave.father != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $eventSlave.father>> - <<elseif $eventSlave.mother != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($activeSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <<elseif $eventSlave.father != 0>> - <<set $activeSlave.father = $eventSlave.father>> - <<set $activeSlave.mother = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($activeSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <</if>> - <<default>> - <<if $eventSlave.father == 0 && $eventSlave.mother == 0>> - <<set $eventSlave.mother = $missingParentID>> - <<set $activeSlave.mother = $missingParentID>> - <<set $missingParentID-->> - <<set $eventSlave.father = $missingParentID>> - <<set $activeSlave.father = $missingParentID>> - <<set $missingParentID-->> - <<elseif $eventSlave.mother != 0 && $eventSlave.father != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $eventSlave.father>> - <<elseif $eventSlave.mother != 0>> - <<set $activeSlave.mother = $eventSlave.mother>> - <<set $activeSlave.father = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameMom($activeSlave, $slaves[$j]) && $slaves[$j].father == 0>> - <<set $slaves[$j].father = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <<elseif $eventSlave.father != 0>> - <<set $activeSlave.father = $eventSlave.father>> - <<set $activeSlave.mother = $missingParentID>> - <<for $j = 0; $j < $slaves.length; $j++>> - <<if sameDad($activeSlave, $slaves[$j]) && $slaves[$j].mother == 0>> - <<set $slaves[$j].mother = $missingParentID>> - <</if>> - <</for>> - <<set $missingParentID-->> - <</if>> - <</switch>> - <<set $desc = SlaveTitle($eventSlave)>> - <<replace "#artFrame">> - /* 000-250-006 */ - <<if $seeImages == 1>> - <div class="imageColumn"> - <div class="imageRef medImg"> - <<= SlaveArt($activeSlave, 2, 0)>> - </div> - <div class="imageRef medImg"> - <<= SlaveArt($eventSlave, 2, 0)>> - </div> - </div> - <</if>> - /* 000-250-006 */ - <</replace>> - <<replace "#result">> - You complete the legalities and biometric scanning quickly and without fuss. $activeSlave.slaveName arrives shortly. The two slaves remember each other only dimly — they parted a long time ago — but they embrace. The devoted $desc explains the situation and encourages $his _relationType to be a good slave to you. $activeSlave.slaveName looks a little fearful but clearly realizes that _he2's lucky to be here. - <<include "New Slave Intro">> - <</replace>> -<</link>> -</span> - -<</if>> /* _recruitedType.length */ -- GitLab