diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index 186f3b3073f6da8503c8d3f87d1841b1e1f3ee84..11e6183b2c1279fdd5b98073730d96011e78de4e 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -22,6 +22,18 @@ interface Window { } declare namespace App { + namespace Data { + namespace Pronouns { + class Definition { + pronoun: string; + possessive: string; + possessivePronoun: string; + object: string; + objectReflexive: string; + noun: string; + }; + } + } namespace RA { class NumericTarget { cond: string; diff --git a/src/data/utility/pronouns.js b/src/data/utility/pronouns.js new file mode 100644 index 0000000000000000000000000000000000000000..58186a2338e139584b6bb628894dbb81f1ece201 --- /dev/null +++ b/src/data/utility/pronouns.js @@ -0,0 +1,45 @@ +App.Data.Pronouns = {}; + +/** + * @readonly + * @enum {number} + */ +App.Data.Pronouns.Kind = Object.freeze({ + female: 0, + male: 1, + neutral: 2, + toy: 2, + epicene: 3, + plural: 3, + ai: 4, + custom: 1000 +}); + +/** + * @param {string} pronoun + * @param {string} possessive + * @param {string} possessivePronoun + * @param {string} object + * @param {string} objectReflexive + * @param {string} noun + * @returns {App.Data.Pronouns.Definition} + */ +App.Data.Pronouns.makePronounsData = function( + pronoun, possessive, possessivePronoun, object, objectReflexive, noun) { + return { + pronoun: pronoun, + possessive: possessive, + possessivePronoun: possessivePronoun, + object: object, + objectReflexive: objectReflexive, + noun: noun + }; +}; + +App.Data.Pronouns.Std = { + 0: App.Data.Pronouns.makePronounsData("she", "her", "hers", "her", "herself", "girl"), + 1: App.Data.Pronouns.makePronounsData("he", "his", "his", "him", "himself", "boy"), + 2: App.Data.Pronouns.makePronounsData("it", "its", "its", "it", "itself", "toy"), + 3: App.Data.Pronouns.makePronounsData("they", "their", "theirs", "them", "themselves", "toys"), + 4: App.Data.Pronouns.makePronounsData("it", "its", "its", "it", "itself", "program"), +}; diff --git a/src/endWeek/minorInjuryResponse.js b/src/endWeek/minorInjuryResponse.js index 18d4aa7724e3908e515b59245a0bb80368a48eed..5292e976a7cf915cc5673db3ca7fa34287943bfe 100644 --- a/src/endWeek/minorInjuryResponse.js +++ b/src/endWeek/minorInjuryResponse.js @@ -5,10 +5,7 @@ window.minorInjuryResponse = function minorInjuryResponse(slave) { const arcology = State.variables.arcologies[0]; const arcologyUpgrade = State.variables.arcologyUpgrade; - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const himself = pronouns.objectReflexive; - const He = capFirstChar(he); + const {he, himself, He} = getPronouns(slave); let r = ""; if (arcology.FSDegradationist > 20) { diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 0b3bf7065cb6591d198c9e6ee1069463ccc51cb7..ba36abbea9a0a86fca847b4907c533c1db04f612 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -4,7 +4,6 @@ window.saChoosesOwnClothes = (function() { let player; let r; /* eslint-disable no-unused-vars*/ - let pronouns; let he; let him; let his; @@ -24,15 +23,10 @@ window.saChoosesOwnClothes = (function() { player = V.PC; r = ""; if (slave.choosesOwnClothes !== 1) { return r; } - pronouns = getPronouns(slave); - he = pronouns.pronoun; - him = pronouns.object; - his = pronouns.possessive; - hers = pronouns.possessivePronoun; - himself = pronouns.objectReflexive; - boy = pronouns.noun; - He = capFirstChar(he); - His = capFirstChar(his); + ({ + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave)); if (slave.fetish === "mindbroken") { const corsetChoice = todaysCorset(slave); diff --git a/src/endWeek/saNanny.js b/src/endWeek/saNanny.js index ce8fdff3bb99350c5bd66049cff7844011f69e6a..7d81f0b93845349d604e0f3134d2149b73b7d74e 100644 --- a/src/endWeek/saNanny.js +++ b/src/endWeek/saNanny.js @@ -6,15 +6,8 @@ window.saNanny = function saNanny(slave) { "use strict"; const V = State.variables; /* eslint-disable no-unused-vars*/ - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); + const {he, him, his, hers, himself, + boy, He, His} = getPronouns(slave); /* eslint-enable */ let t = `works as a nanny this week. `; diff --git a/src/endWeek/saRest.js b/src/endWeek/saRest.js index d739b26443d86d45befb1bac2d42cf4e8d268745..54971ddeb8481b6968f7cf9581f03b14905ea55e 100644 --- a/src/endWeek/saRest.js +++ b/src/endWeek/saRest.js @@ -5,15 +5,10 @@ window.saRest = function saRest(slave) { const V = State.variables; /* eslint-disable no-unused-vars*/ - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); /* eslint-enable */ let t = " takes the week off."; diff --git a/src/endWeek/saServant.js b/src/endWeek/saServant.js index ff232b7711f13a8ec2d20b3e09a5ce2a3f5da215..576d273a637bd296e629e5d22a575eb2b3f55c34 100644 --- a/src/endWeek/saServant.js +++ b/src/endWeek/saServant.js @@ -5,15 +5,10 @@ window.saServant = function saServant(slave) { const V = State.variables; /* eslint-disable no-unused-vars*/ - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); /* eslint-enable */ let t = `works as a servant. ${He} performs the lowest jobs in your penthouse, cleaning up after your other slaves, bathing them, helping them dress, and giving them sexual relief.`; diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js index dbfc5aef7a0c59778ca61798a4436271223abbe1..c4ad50c058e74f5d95819a102811635fe62d843a 100644 --- a/src/endWeek/saServeThePublic.js +++ b/src/endWeek/saServeThePublic.js @@ -27,11 +27,9 @@ window.saServeThePublic = (function saServeThePublic() { T = State.temporary; arcology = V.arcologies[0]; r = ` `; - pronouns = getPronouns(slave); - he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, girl = pronouns.noun; - He = capFirstChar(he); - His = capFirstChar(his); - girl === "girl" ? loli = "loli" : loli = "shota"; + ({ + he, him, his, hers, himself, girl, He, His, loli + } = getPronouns(slave)); gatherStatistics(slave); if (slave.assignment === "serve in the club") { diff --git a/src/endWeek/saStayConfined.js b/src/endWeek/saStayConfined.js index 0efc693f62b1bbca55c6de4da61f8767122603a9..7b77f387e5fc34deea5d243e2895141ccb979756 100644 --- a/src/endWeek/saStayConfined.js +++ b/src/endWeek/saStayConfined.js @@ -5,15 +5,10 @@ window.saStayConfined = function saStayConfined(slave) { const V = State.variables; /* eslint-disable no-unused-vars*/ - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); /* eslint-enable */ let t = ""; diff --git a/src/endWeek/saWhore.js b/src/endWeek/saWhore.js index 28c5deb6149eb5fd6dd2cec5ca3f64f59b9a3dd8..b6adeb7c28b83df5f014888d62021fb95757702b 100644 --- a/src/endWeek/saWhore.js +++ b/src/endWeek/saWhore.js @@ -13,7 +13,6 @@ window.saWhore = (function saWhore() { let beautyMultiplier; let beautyCorrection; let cervixPump; - let pronouns; let he, him, his, hers, himself, girl, loli, He, His; // if the following are set outside this file, they must be set in it too! @@ -34,10 +33,9 @@ window.saWhore = (function saWhore() { T = State.temporary; arcology = V.arcologies[0]; r = ` `; - pronouns = getPronouns(slave); - he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, girl = pronouns.noun; - He = capFirstChar(he), His = capFirstChar(his); - loli = (girl === "girl") ? "loli" : "shota"; + ({ + he, him, his, hers, himself, girl, He, His, loli + } = getPronouns(slave)); gatherStatistics(slave); updateNonSlaveVariables(slave); // must be run before applyFSDecoration() or you will face NaNs @@ -353,7 +351,7 @@ window.saWhore = (function saWhore() { if (slave.devotion <= 20) { r += ` The Madam rapes ${him} when ${he} fails to meet standards.`; } else { - r += ` The Madam uses ${madamPronouns.possessive} dick to reward ${him} when ${he} does well and needs some loving.`; + r += ` The Madam uses ${madamPronouns.his} dick to reward ${him} when ${he} does well and needs some loving.`; } } if (!canHear(slave)) { diff --git a/src/endWeek/saWorkAGloryHole.js b/src/endWeek/saWorkAGloryHole.js index b12395f290dd00a6d4afe2aa8b952ccc3073e6ab..ad5d91566013d5b062d23428853903bc28aee62c 100644 --- a/src/endWeek/saWorkAGloryHole.js +++ b/src/endWeek/saWorkAGloryHole.js @@ -6,7 +6,6 @@ window.saWorkAGloryHole = (function saWorkAGloryHole() { let beauty; let FResult; /* eslint-disable no-unused-vars*/ - let pronouns; let he; let him; let his; @@ -27,9 +26,9 @@ window.saWorkAGloryHole = (function saWorkAGloryHole() { V = State.variables; T = State.temporary; r = ``; - pronouns = getPronouns(slave); - he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - He = capFirstChar(he), His = capFirstChar(his); + ({ + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave)); beauty = slave.sexAmount; /* This gets calculated during slaveAssignmentReport and stored on the slave for later use */ FResult = V.arcadePrice; /* This gets calculated during slaveAssignmentReport after we know the total 'arcade' sex slave supply */ diff --git a/src/endWeek/saWorkTheFarm.js b/src/endWeek/saWorkTheFarm.js index 474b62ac501eb199dfa6523124856d56e3dd7b44..d8b0cb4e2b7cf141e7dc22fb63b1da6bf5c31533 100644 --- a/src/endWeek/saWorkTheFarm.js +++ b/src/endWeek/saWorkTheFarm.js @@ -7,15 +7,9 @@ window.saWorkTheFarm = function saWorkTheFarm(slave) { const V = State.variables; const arcology = V.arcologies[0]; /* eslint-disable no-unused-vars*/ - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave); /* eslint-enable */ const incomeStats = getSlaveStatisticData(slave, V.facility.farmyard); @@ -428,7 +422,7 @@ window.saWorkTheFarm = function saWorkTheFarm(slave) { } } if (slave.behavioralQuirk === "fitness") { - t += `${slave.slaveName} <span class="hotpink">privately enjoys</span> the exercise ${he} receives while working in ${farmyardName}. `; + t += `${slave.slaveName} <span class="hotpink">privately enjoys</span> the exercise ${he} receives while working in ${V.farmyardName}. `; slave.devotion += 1; } diff --git a/src/init/dummy.tw b/src/init/dummy.tw index 13620d9b23cb392995241c9504dc850d139b7ee1..826a5cc17a897741b38ada1ed2131d94e847cafa 100644 --- a/src/init/dummy.tw +++ b/src/init/dummy.tw @@ -21,7 +21,7 @@ $ArcologyNamesEugenics, $ArcologyNamesRepopulationist, $ArcologyNamesHedonisticD $LurcherSpeed $$i $activeSlave.bodySwap, $activeSlave.custom.image.format, $activeSlave.custom.hairVector, $activeSlave.shoeColor, $activeSlave.newGamePlus, $activeSlave.nipplesAccessory, $activeSlave.slaveCost, $activeSlave.premature, $activeSlave.missingEyes, $activeSlave.missingArms, $activeSlave.missingLegs, -$activeSlave.noun, $activeSlave.pronoun, $activeSlave.possessive, $activeSlave.possessivePronoun, $activeSlave.object, $activeSlave.objectReflexive +$activeSlave.pronoun, $activeSlave.sexAmount, $activeSlave.sexQuality $activeSlave.fertKnown $activeSlave.cum diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 13b0aa9e271da18e5d88c65ee8a1b123a14caa70..dbdbcf65d100d1dbcc6783c13ca46f28fc044d20 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -887,8 +887,8 @@ You should have received a copy of the GNU General Public License along with thi /* assistant FS appearance variable */ <<set $assistantFSAppearance = "default">> -<<set $assistantPronouns = {pronoun: "it", possessivePronoun: "its", possessive: "its", object: "it", objectReflexive: "itself", noun: "program"}>> -<<set $marketAssistantPronouns = {pronoun: "it", possessivePronoun: "its", possessive: "its", object: "it", objectReflexive: "itself", noun: "program"}>> +<<set $assistantPronouns = {pronoun: App.Data.Pronouns.Kind.ai}>> +<<set $marketAssistantPronouns = {pronoun: App.Data.Pronouns.Kind.ai}>> /*pregmod variables */ <<set $specialSlavesPriceOverride = 0>> diff --git a/src/interaction/main/mainLinks.js b/src/interaction/main/mainLinks.js index 887c184cd398bd5a536a994d09a8b40aa2c38b84..edbfebc73cc2d88c9edc7288c63c0c5f87d84f71 100644 --- a/src/interaction/main/mainLinks.js +++ b/src/interaction/main/mainLinks.js @@ -24,8 +24,8 @@ App.UI.View.MainLinks = function() { case "HG": r += `You plan to support your Head Girl this week, `; if (V.HeadGirl) { - const pronouns = getPronouns(V.HeadGirl); - r += `so ${pronouns.pronoun} can give more slaves ${pronouns.possessive} attention.`; + const {he, his} = getPronouns(V.HeadGirl); + r += `so ${he} can give more slaves ${his} attention.`; } else { r += `should you assign one.`; } diff --git a/src/interaction/main/toychest.js b/src/interaction/main/toychest.js index e476515b86456f95ac31dfc834b0615a736512ad..d71a23e8175af593f976b1c26dc8f7a159be59e0 100644 --- a/src/interaction/main/toychest.js +++ b/src/interaction/main/toychest.js @@ -4,15 +4,9 @@ App.Interact.ToyChest = function(slave) { const V = State.variables; let r = ``; /* eslint-disable no-unused-vars*/ - let pronouns = getPronouns(slave); - let he = pronouns.pronoun; - let him = pronouns.object; - let his = pronouns.possessive; - let hers = pronouns.possessivePronoun; - let himself = pronouns.objectReflexive; - let boy = pronouns.noun; - let He = capFirstChar(he); - let His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave); /* eslint-enable */ r = `${slave.slaveName} `; diff --git a/src/interaction/main/useGuard.js b/src/interaction/main/useGuard.js index 4d8dd404cc60096017777ac14df7c1356cb9358e..86a563220e86ea860f6f8b745e0f6135472635e2 100644 --- a/src/interaction/main/useGuard.js +++ b/src/interaction/main/useGuard.js @@ -4,15 +4,10 @@ App.Interact.UseGuard = function(slave) { "use strict"; let r = ``; /* eslint-disable no-unused-vars*/ - let pronouns = getPronouns(slave); - let he = pronouns.pronoun; - let him = pronouns.object; - let his = pronouns.possessive; - let hers = pronouns.possessivePronoun; - let himself = pronouns.objectReflexive; - let boy = pronouns.noun; - let He = capFirstChar(he); - let His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); /* eslint-enable */ r = `${slave.slaveName} is standing behind your left shoulder, guarding your person. `; diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index db4dab32ba0ac8927d52e4e2d83e7cdeb5b6587a..6be91a867373c9a90a2bafdbf7559654daf810ed 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -4,7 +4,6 @@ window.DefaultRules = (function() { "use strict"; let V; let r; - let pronouns; let he; let him; let his; @@ -18,10 +17,7 @@ window.DefaultRules = (function() { V = State.variables; r = ""; - pronouns = getPronouns(slave); - he = pronouns.pronoun; - him = pronouns.object; - his = pronouns.possessive; + ({he, him, his} = getPronouns(slave)); let rule = MergeRules(slave); if (Object.keys(rule).length === 0) { return r; } // no rules apply diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index f6bd01962f5a77326420211b7892644a378b2635..1df8d1515decba29d98e3f4b61e2d9e0087d59b3 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -306,12 +306,8 @@ App.Entity.SlaveState = class SlaveState { this.birthSurname = 0; /** slave sex ("XX", "XY") */ this.genes = "XX"; - this.pronoun = "she"; - this.possessive = "her"; - this.possessivePronoun = "hers"; - this.objectReflexive = "herself"; - this.object = "her"; - this.noun = "girl"; + /** @type {number} */ + this.pronoun = App.Data.Pronouns.Kind.female; /** game week slave was acquired. * * _0: Obtained prior to game start / at game start_ */ diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 83d5f4c1048d08d284ae4c91184e84a34e232573..571916fabcdef6825e861a6172382e78fb42b9e5 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -308,26 +308,11 @@ window.newChild = function newChild(child) { } if (child.fuckdoll > 0) { - child.pronoun = "it"; - child.possessivePronoun = "its"; - child.possessive = "its"; - child.object = "it"; - child.objectReflexive = "itself"; - child.noun = "toy"; + child.pronoun = App.Data.Pronouns.Kind.toy; } else if (child.dick > 0 && child.vagina === -1 && V.diversePronouns === 1) { - child.pronoun = "he"; - child.possessivePronoun = "his"; - child.possessive = "his"; - child.object = "him"; - child.objectReflexive = "himself"; - child.noun = "boy"; + child.pronoun = App.Data.Pronouns.Kind.male; } else { - child.pronoun = "she"; - child.possessivePronoun = "hers"; - child.possessive = "her"; - child.object = "her"; - child.objectReflexive = "herself"; - child.noun = "girl"; + child.pronoun = App.Data.Pronouns.Kind.female; } State.variables.cribs.push(child); State.variables.nurseryBabies++; @@ -374,18 +359,21 @@ window.getChild = function getChild(ID) { App.Utils.Pronouns = class { /** - * @param {App.Entity.SlaveState} slave + * @param {{pronoun: number}} obj */ - constructor(slave) { - this._slave = slave; + constructor(obj) { + /** @type {App.Data.Pronouns.Definition} */ + this._pronouns = obj.pronoun < App.Data.Pronouns.Kind.custom ? + App.Data.Pronouns.Std[obj.pronoun] : + State.variables.customPronouns[obj.pronoun]; } - get pronoun() { return this._slave.pronoun; } - get possessivePronoun() { return this._slave.possessivePronoun; } - get possessive() { return this._slave.possessive; } - get object() { return this._slave.object; } - get objectReflexive() { return this._slave.objectReflexive; } - get noun() { return this._slave.noun; } + get pronoun() { return this._pronouns.pronoun; } + get possessivePronoun() { return this._pronouns.possessivePronoun; } + get possessive() { return this._pronouns.possessive; } + get object() { return this._pronouns.object; } + get objectReflexive() { return this._pronouns.objectReflexive; } + get noun() { return this._pronouns.noun; } get Pronoun() { return capFirstChar(this.pronoun); } get PossessivePronoun() { return capFirstChar(this.possessivePronoun); } @@ -394,7 +382,6 @@ App.Utils.Pronouns = class { get ObjectReflexive() { return capFirstChar(this.objectReflexive); } get Noun() { return capFirstChar(this.noun); } - get he() { return this.pronoun; } get him() { return this.object; } get his() { return this.possessive; } @@ -422,14 +409,31 @@ App.Utils.Pronouns = class { get woman() { return this.noun === "girl" ? "woman" : "man"; } get women() { return this.noun === "girl" ? "women" : "men"; } get loli() { return this.noun === "girl" ? "loli" : "shota"; } + + get Woman() { return capFirstChar(this.woman); } + get Women() { return capFirstChar(this.women); } + get Loli() { return capFirstChar(this.loli); } + + /** + * @param {string} suffix + * @returns {Object.<string, string>} + */ + appendSuffix(suffix) { + const r = {}; + for (const prop in this) { + r[prop + suffix] = this[prop]; + } + // @ts-ignore + return r; + } }; /** - * @param {App.Entity.SlaveState} slave + * @param {{pronoun: number}} obj * @returns {App.Utils.Pronouns} */ -window.getPronouns = function(slave) { - return new App.Utils.Pronouns(slave); +window.getPronouns = function(obj) { + return new App.Utils.Pronouns(obj); }; /** diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 71104c7abbfc7c38503cfaed1eb6e836a8379368..35d9b8a7bc4f6458848a63c40c6cdc4d89b256f6 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -585,15 +585,16 @@ App.UI.jobLinks = function() { function assignmentLinks(index, passage, callback) { let penthouseJobs = App.Entity.facilities.penthouse.assignmentLinks(index, undefined, passage, callback); const slave = App.Utils.slaveByIndex(index); + const sp = getPronouns(slave); if (slave.fuckdoll === 0) { const assignment = "choose her own job"; if (slave.assignment !== assignment) { const linkAction = callback !== undefined ? callback(assignment) : ''; - penthouseJobs.push(`<<link "Let ${slave.object} choose" ${passage !== undefined ? `"${passage}"` : ''}>><<= assignJob(${App.Utils.slaveRefString(index)}, "${assignment}")>>${linkAction}<</link>>`); + penthouseJobs.push(`<<link "Let ${sp.object} choose" ${passage !== undefined ? `"${passage}"` : ''}>><<= assignJob(${App.Utils.slaveRefString(index)}, "${assignment}")>>${linkAction}<</link>>`); } } else { - penthouseJobs.push(App.UI.disabledLink(`Let ${slave.object} choose`, ["Fuckdolls can't choose their job"])); + penthouseJobs.push(App.UI.disabledLink(`Let ${sp.object} choose`, ["Fuckdolls can't choose their job"])); } return penthouseJobs.join(" | "); @@ -623,6 +624,7 @@ App.UI.SlaveInteract = { let res = ""; /** @type {App.Entity.SlaveState} */ const slave = State.variables.activeSlave; + const {his} = getPronouns(slave); if ((slave.assignment === "please you") || (slave.assignment === "serve in the master suite") || (slave.assignment === "be your Concubine")) { res += `__Fucktoy use preference__: <strong><span id = "hole">${slave.toyHole}</span></strong>.`; /** @type {string[]} */ @@ -633,18 +635,18 @@ App.UI.SlaveInteract = { links.push('<<link "Pussy">><<set $activeSlave.toyHole = "pussy">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>'); } else if (slave.vagina === 0) { links.push(App.UI.disabledLink("Pussy", - [`Take ${slave.possessive} virginity before giving ${slave.possessive} pussy special attention`])); + [`Take ${his} virginity before giving ${his} pussy special attention`])); } if ((slave.anus > 0) && canDoAnal(slave)) { links.push('<<link "Ass">><<set $activeSlave.toyHole = "ass">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>'); } else { links.push(App.UI.disabledLink("Ass", - [`Take ${slave.possessive} anal virginity before giving ${slave.possessive} ass special attention`])); + [`Take ${his} anal virginity before giving ${his} ass special attention`])); } if ((slave.dick > 0) && canPenetrate(slave)) { links.push('<<link "Dick">><<set $activeSlave.toyHole = "dick">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>'); } - links.push(`<<link "No Preference">><<set $activeSlave.toyHole = "all ${slave.possessive} holes">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>`); + links.push(`<<link "No Preference">><<set $activeSlave.toyHole = "all ${his} holes">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>`); res += links.join(' | ') + '<br>'; } App.UI.replace('#fucktoypref', res); diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index 7cecca0938cfa2d605eb690e62959f1ce17f24af..d23b9c0807e145a8e92e0a66fad7c9911bb33b60 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -18,6 +18,7 @@ App.Entity.Utils.SlaveDataSchemeCleanup = (function() { migrateCounters(slave); migrateCustomProperties(slave); migrateBrand(slave); + App.Entity.Utils.migratePronouns(slave); } /** @@ -1572,6 +1573,7 @@ window.PCDatatypeCleanup = function PCDatatypeCleanup() { PC.mpreg = 0; /* So knockMeUp() may be used with the PC */ PC.lactation = Math.max(+PC.lactation, 0) || 0; PC.lactationDuration = Math.max(+PC.lactationDuration, 0) || 0; + App.Entity.Utils.migratePronouns(PC); generatePlayerPronouns(PC); if (PC.age !== undefined) { @@ -1695,6 +1697,8 @@ window.ArcologyDatatypeCleanup = function ArcologyDatatypeCleanup() { if (typeof V.marketAssistantPronouns !== "object") { V.marketAssistantPronouns = {}; } + App.Entity.Utils.migratePronouns(V.assistantPronouns); + App.Entity.Utils.migratePronouns(V.marketAssistantPronouns); generateAssistantPronouns(); V.foodCost = Math.trunc(2500 / V.economy); @@ -1749,6 +1753,12 @@ window.FacilityDatatypeCleanup = (function() { CellblockDatatypeCleanup(); MasterSuiteDatatypeCleanup(); HeadGirlSuiteDatatypeCleanup(); + + V.Recruiter = V.slaves.find(s => s.assignment === "recruit girls") || 0; + V.Bodyguard = V.slaves.find(s => s.assignment === "guard you") || 0; + if (V.Lurcher) { + V.Lurcher = V.slaves[V.slaveIndices[V.Lurcher.ID]]; + } } function FacilityIDArrayCleanup() { @@ -2172,3 +2182,33 @@ App.Entity.Utils.validateRules = function() { } } }; + +/** @param {Object} subject */ +App.Entity.Utils.migratePronouns = function(subject) { + if (subject.pronoun === undefined || typeof subject.pronoun === 'number') { + return; + } + + switch (subject.pronoun) { + case "she": + subject.pronoun = App.Data.Pronouns.Kind.female; + break; + case "he": + subject.pronoun = App.Data.Pronouns.Kind.male; + break; + case "it": + subject.pronoun = App.Data.Pronouns.Kind.neutral; + break; + default: + throw `Unrecognized custom pronoun "${subject.pronoun}"`; + } + + /* eslint-disable dot-notation */ + delete subject["possessive"]; + delete subject["possessivePronoun"]; + delete subject["possessivePronoun"]; + delete subject["objectReflexive"]; + delete subject["object"]; + delete subject["noun"]; + /* eslint-enable dot-notation */ +} diff --git a/src/js/descriptionWidgets.js b/src/js/descriptionWidgets.js index 2c86ce38da9d8d0718292c2a4d536c0d5696ba2b..dbf13f0b5f3f11506c5667191257055aa115d8ef 100644 --- a/src/js/descriptionWidgets.js +++ b/src/js/descriptionWidgets.js @@ -7,15 +7,9 @@ App.Desc.eyes = function(slave) { const V = State.variables; let r = ``; /* eslint-disable no-unused-vars*/ - let pronouns = getPronouns(slave); - let he = pronouns.pronoun; - let him = pronouns.object; - let his = pronouns.possessive; - let hers = pronouns.possessivePronoun; - let himself = pronouns.objectReflexive; - let boy = pronouns.noun; - let He = capFirstChar(he); - let His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave); /* eslint-enable */ if (slave.eyes <= -2) { @@ -577,15 +571,9 @@ App.Desc.brand = function(slave, surface) { let r = ``; let bellyAccessory; /* eslint-disable no-unused-vars*/ - let pronouns = getPronouns(slave); - let he = pronouns.pronoun; - let him = pronouns.object; - let his = pronouns.possessive; - let hers = pronouns.possessivePronoun; - let himself = pronouns.objectReflexive; - let boy = pronouns.noun; - let He = capFirstChar(he); - let His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave); /* eslint-enable */ if (State.variables.showBodyMods === 1) { if (surface) { @@ -625,15 +613,9 @@ App.Desc.amputee = function(slave) { "use strict"; let r = ``; /* eslint-disable no-unused-vars*/ - let pronouns = getPronouns(slave); - let he = pronouns.pronoun; - let him = pronouns.object; - let his = pronouns.possessive; - let hers = pronouns.possessivePronoun; - let himself = pronouns.objectReflexive; - let boy = pronouns.noun; - let He = capFirstChar(he); - let His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave); /* eslint-enable */ if (slave.amp) { diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js index 4f31a143868d853b25eaf0c50b6fdebf29432d61..6151aeca4ff49eda5a563b94a1779d3522b1fb96 100644 --- a/src/js/generateGenetics.js +++ b/src/js/generateGenetics.js @@ -9,6 +9,13 @@ window.generateGenetics = (function() { let activeFather; let V; + // intelligence and face parameters are the same so we can use the intelligence distribution for face values + const fuzzy = (a, b, spread=20, min=-100, max=100) => Intelligence.random({ + mean: (a+b)/2, + spread: spread, + limitIntelligence: [min, max] + }); + function generateGenetics(actor1, actor2, x) { V = State.variables; genes = { @@ -563,26 +570,14 @@ window.generateGenetics = (function() { if (actor2 === -6) { smarts = jsRandom(90, 100); } else if (father !== 0) { - if (father.intelligence < mother.intelligence) { - smarts = jsRandom(father.intelligence, mother.intelligence); - } else { - smarts = jsRandom(mother.intelligence, father.intelligence); - } - if (smarts <= 50) { - smarts += 30; - } + // player is considered "good stock" + smarts = fuzzy(father.intelligence, mother.intelligence, 20, 50, 100); } else { smarts = jsRandom(50, 100); } } else if (father !== 0) { - if (father.intelligence < mother.intelligence) { - smarts = jsRandom(father.intelligence, mother.intelligence); - } else { - smarts = jsRandom(mother.intelligence, father.intelligence); - } - if (activeMother.breedingMark === 1 && smarts <= 50) { - smarts = jsRandom(60, 100); - } + // elite slaves are also considered "good stock" + smarts = fuzzy(father.intelligence, mother.intelligence, 20, activeMother.breedingMark ? 50 : -100, 100); } else { smarts = mother.intelligence; } @@ -621,26 +616,14 @@ window.generateGenetics = (function() { if (actor2 === -6) { face = jsRandom(90, 100); } else if (father !== 0) { - if (father.face < mother.face) { - face = jsRandom(father.face, mother.face); - } else { - face = jsRandom(mother.face, father.face); - } - if (face <= 40) { - face += jsRandom(5, 20); - } + // player is considered "good stock" + face = fuzzy(father.face, mother.face, 20, 50, 100); } else { face = jsRandom(20, 100); } } else if (father !== 0) { - if (father.face < mother.face) { - face = jsRandom(father.face, mother.face); - } else { - face = jsRandom(mother.face, father.face); - } - if (activeMother.breedingMark === 1 && face < 60) { - face = jsRandom(60, 100); - } + // elite slaves are also considered "good stock" + face = fuzzy(father.face, mother.face, 20, activeMother.breedingMark ? 50 : -100, 100); } else { face = mother.face; } diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 7277bd981bc6c6580b3f57a3448e37e0ee878786..167587a6b475149173c1d12b14811315b970d3ce 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -414,12 +414,10 @@ window.setPregType = function(actor) { */ window.knockMeUp = function(target, chance, hole, fatherID, displayOverride) { const V = State.variables; - let pronouns; let He; let r = ``; if (target.ID !== -1) { - pronouns = getPronouns(target); - He = capFirstChar(pronouns.pronoun); + ({He} = getPronouns(target)); } if (V.seePreg !== 0) { // eslint-disable-next-line no-nested-ternary diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js index d7413c56fbd0a66938d0b1b3be32947f76894496..04a3c5e82ba5ddac781dfe197cb9e3d879b9ef8c 100644 --- a/src/js/rulesAutosurgery.js +++ b/src/js/rulesAutosurgery.js @@ -141,6 +141,8 @@ window.rulesAutosurgery = (function() { * @param {string[]} surgeries */ function CommitSurgery(slave, thisSurgery, surgeries) { + const {his} = getPronouns(slave); + /** * Performs an individual surgery procedure * @param {string} desc @@ -166,7 +168,7 @@ window.rulesAutosurgery = (function() { let sorter; if (shallShrink) { if (target.val === 0) { - commitProcedure(`surgery to remove ${slave.possessive} ${bodyPart} implants`, slave => { + commitProcedure(`surgery to remove ${his} ${bodyPart} implants`, slave => { slave[bodyPart] -= slave[`${bodyPart}Implant`]; slave[`${bodyPart}Implant`] = 0; slave[`${bodyPart}ImplantType`] = 0; @@ -200,26 +202,26 @@ window.rulesAutosurgery = (function() { // (reading properties of the 'null' object) if (slave.health > 20 && surgeries.length < 3) { if (slave.eyes === -1 && thisSurgery.eyes === 1) { - commitProcedure(`surgery to correct ${slave.possessive} vision`, s => { s.eyes = 1; }); + commitProcedure(`surgery to correct ${his} vision`, s => { s.eyes = 1; }); } else if (slave.eyes === 1 && thisSurgery.eyes === -1) { - commitProcedure(`surgery to blur ${slave.possessive} vision`, s => { s.eyes = -1; }); + commitProcedure(`surgery to blur ${his} vision`, s => { s.eyes = -1; }); } else if (slave.hears === -1 && thisSurgery.hears === 0) { - commitProcedure(`surgery to correct ${slave.possessive} hearing`, s => { s.hears = 0; }); + commitProcedure(`surgery to correct ${his} hearing`, s => { s.hears = 0; }); } else if (slave.hears === 0 && thisSurgery.hears === -1) { - commitProcedure(`surgery to muffle ${slave.possessive} hearing`, s => { s.hears = -1; }); + commitProcedure(`surgery to muffle ${his} hearing`, s => { s.hears = -1; }); } else if (slave.smells === -1 && thisSurgery.smells === 0) { - commitProcedure(`surgery to correct ${slave.possessive} sense of smell`, s => { s.smells = 0; }); + commitProcedure(`surgery to correct ${his} sense of smell`, s => { s.smells = 0; }); } else if (slave.smells === 0 && thisSurgery.smells === -1) { - commitProcedure(`surgery to muffle ${slave.possessive} sense of smell`, s => { s.smells = -1; }); + commitProcedure(`surgery to muffle ${his} sense of smell`, s => { s.smells = -1; }); } else if (slave.tastes === -1 && thisSurgery.tastes === 0) { - commitProcedure(`surgery to correct ${slave.possessive} sense of taste`, s => { s.tastes = 0; }); + commitProcedure(`surgery to correct ${his} sense of taste`, s => { s.tastes = 0; }); } else if (slave.tastes === 0 && thisSurgery.tastes === -1) { - commitProcedure(`surgery to muffle ${slave.possessive} sense of taste`, s => { s.tastes = -1; }); + commitProcedure(`surgery to muffle ${his} sense of taste`, s => { s.tastes = -1; }); } } if (slave.health > 20 && surgeries.length < 3) { if (slave.lactation === 2 && thisSurgery.lactation === 0) { - commitProcedure(`surgery to remove ${slave.possessive} lactation implants`, s => { s.lactation = 0; }); + commitProcedure(`surgery to remove ${his} lactation implants`, s => { s.lactation = 0; }); } else if (slave.lactation !== 2 && (thisSurgery.lactation === 1)) { commitProcedure("lactation inducing implanted drugs", s => { s.lactation = 2; }); } else if ((slave.boobShape === "saggy" || slave.boobShape === "downward-facing") && thisSurgery.cosmetic > 0 && slave.breastMesh !== 1) { @@ -286,7 +288,7 @@ window.rulesAutosurgery = (function() { } if (slave.health > 20 && surgeries.length < 3) { if (slave.prostate === 2 && thisSurgery.prostate === 0) { - commitProcedure(`surgery to remove ${slave.possessive} prostate implant`, s => { s.prostate = 0; }); + commitProcedure(`surgery to remove ${his} prostate implant`, s => { s.prostate = 0; }); } else if (slave.prostate === 1 && thisSurgery.prostate === 1) { commitProcedure("a precum production enhancing drug implant", s => { s.prostate = 2; }); } else if (slave.balls > 0 && slave.vasectomy === 0 && thisSurgery.vasectomy === true) { @@ -338,7 +340,7 @@ window.rulesAutosurgery = (function() { slave.voiceImplant += 1; }); } else if (App.RA.shallShrink(slave.lipsImplant, thisSurgery.lips) && thisSurgery.lips.val === 0) { - commitProcedure(`surgery to remove ${slave.possessive} lip implants`, slave => { + commitProcedure(`surgery to remove ${his} lip implants`, slave => { slave.lips -= slave.lipsImplant; slave.lipsImplant = 0; if (slave.skill.oral > 10) { diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js index bdd59596724ba861a4e606a172314f2e687dc1f3..79f31c38772d6e908354732ac6e99379394f66c2 100644 --- a/src/js/sexActsJS.js +++ b/src/js/sexActsJS.js @@ -20,17 +20,9 @@ window.VCheck = (function() { }; function setScopedPronouns(slave) { - const pronouns = getPronouns(slave); - /* eslint-disable no-unused-vars*/ - he = pronouns.pronoun; - him = pronouns.object; - his = pronouns.possessive; - hers = pronouns.possessivePronoun; - himself = pronouns.objectReflexive; - boy = pronouns.noun; - He = capFirstChar(he); - His = capFirstChar(his); - /* eslint-enable */ + ({ + he, him, his, hers, himself, boy, He, His + } = getPronouns(slave)); } /** call as VCheck.Anal() diff --git a/src/js/slaveGenerationJS.js b/src/js/slaveGenerationJS.js index 6a73a072c8d656a454ddb5a675c976d50eb1c50c..b765aa01035e99ff71a8c9c4c2c81c4a7b95cb39 100644 --- a/src/js/slaveGenerationJS.js +++ b/src/js/slaveGenerationJS.js @@ -1321,12 +1321,7 @@ Called from lawCompliance window.checkForGingering = function checkForGingering() { const V = State.variables; let r = ""; - const pronouns = getPronouns(V.activeSlave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const He = capFirstChar(he); - const His = capFirstChar(his); + const {he, him, his, He, His} = getPronouns(V.activeSlave); /* reset in case gingered slaves were viewed but not purchased (no newSlaveIntro) */ V.gingering = 0; @@ -1506,26 +1501,11 @@ window.BaseSlave = function BaseSlave() { * @param {App.Entity.SlaveState} slave*/ window.generatePronouns = function generatePronouns(slave) { if (slave.fuckdoll > 0) { - slave.pronoun = "it"; - slave.possessivePronoun = "its"; - slave.possessive = "its"; - slave.object = "it"; - slave.objectReflexive = "itself"; - slave.noun = "toy"; + slave.pronoun = App.Data.Pronouns.Kind.toy; } else if (slave.dick > 0 && slave.vagina === -1 && State.variables.diversePronouns === 1) { - slave.pronoun = "he"; - slave.possessivePronoun = "his"; - slave.possessive = "his"; - slave.object = "him"; - slave.objectReflexive = "himself"; - slave.noun = "boy"; + slave.pronoun = App.Data.Pronouns.Kind.male; } else { - slave.pronoun = "she"; - slave.possessivePronoun = "hers"; - slave.possessive = "her"; - slave.object = "her"; - slave.objectReflexive = "herself"; - slave.noun = "girl"; + slave.pronoun = App.Data.Pronouns.Kind.female; } }; diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js index 665d43b32eb9f9d71c78db1888b7360c5db26c26..7f9b9d32fdd7d5e2be395fb70d666404782911ea 100644 --- a/src/js/slaveListing.js +++ b/src/js/slaveListing.js @@ -382,7 +382,7 @@ App.UI.SlaveList.listSJFacilitySlaves = function(facility, facilityPassage, show SlaveSort.indices(facilitySlaves); r += App.UI.tabbar.makeTab("remove", App.UI.SlaveList.render(facilitySlaves, [], App.UI.SlaveList.SlaveInteract.stdInteract, - (slave, index) => App.UI.passageLink(`Retrieve ${slave.object} from ${facility.name}`, "Retrieve", `$i = ${index}`))); + (slave, index) => App.UI.passageLink(`Retrieve ${getPronouns(slave).object} from ${facility.name}`, "Retrieve", `$i = ${index}`))); } else { r += App.UI.tabbar.makeTab("remove", `<em>${capFirstChar(facility.name)} is empty for the moment</em>`); } @@ -406,7 +406,7 @@ App.UI.SlaveList.listSJFacilitySlaves = function(facility, facilityPassage, show }, []); return App.UI.SlaveList.render(passedSlaves, rejectedSlaves, App.UI.SlaveList.SlaveInteract.stdInteract, - (slave, index) => App.UI.passageLink(`Send ${slave.object} to ${facility.name}`, "Assign", `$i = ${index}`)); + (slave, index) => App.UI.passageLink(`Send ${getPronouns(slave).object} to ${facility.name}`, "Assign", `$i = ${index}`)); } if (facility.hasFreeSpace) { // slaves from the penthouse can be transferred here diff --git a/src/js/storyJS.js b/src/js/storyJS.js index 3e2cc54152927f9f21a046914318edfc8ef0768a..55e6e47285906ba896e9d0d72deb05f01630e247 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -595,68 +595,28 @@ window.SoftenSexualFlaw = function SoftenSexualFlaw(slave) { */ window.generatePlayerPronouns = function(PC) { if (PC.title === 0) { - PC.pronoun = "she"; - PC.possessivePronoun = "hers"; - PC.possessive = "her"; - PC.object = "her"; - PC.objectReflexive = "herself"; - PC.noun = "woman"; + PC.pronoun = App.Data.Pronouns.Kind.female; } else { - PC.pronoun = "he"; - PC.possessivePronoun = "his"; - PC.possessive = "his"; - PC.object = "him"; - PC.objectReflexive = "himself"; - PC.noun = "man"; + PC.pronoun = App.Data.Pronouns.Kind.male; } }; window.generateAssistantPronouns = function() { const V = State.variables; if (V.assistant === 0) { - V.assistantPronouns.pronoun = "it"; - V.assistantPronouns.possessivePronoun = "its"; - V.assistantPronouns.possessive = "its"; - V.assistantPronouns.object = "it"; - V.assistantPronouns.objectReflexive = "itself"; - V.assistantPronouns.noun = "program"; + V.assistantPronouns.pronoun = App.Data.Pronouns.Kind.ai; } else if ((V.assistantAppearance === "incubus") && (V.diversePronouns === 1)) { - V.assistantPronouns.pronoun = "he"; - V.assistantPronouns.possessivePronoun = "his"; - V.assistantPronouns.possessive = "his"; - V.assistantPronouns.object = "him"; - V.assistantPronouns.objectReflexive = "himself"; - V.assistantPronouns.noun = "boy"; + V.assistantPronouns.pronoun = App.Data.Pronouns.Kind.male; } else { - V.assistantPronouns.pronoun = "she"; - V.assistantPronouns.possessivePronoun = "hers"; - V.assistantPronouns.possessive = "her"; - V.assistantPronouns.object = "her"; - V.assistantPronouns.objectReflexive = "herself"; - V.assistantPronouns.noun = "girl"; + V.assistantPronouns.pronoun = App.Data.Pronouns.Kind.female; } if (V.assistant === 0) { - V.marketAssistantPronouns.pronoun = "it"; - V.marketAssistantPronouns.possessivePronoun = "its"; - V.marketAssistantPronouns.possessive = "its"; - V.marketAssistantPronouns.object = "it"; - V.marketAssistantPronouns.objectReflexive = "itself"; - V.marketAssistantPronouns.noun = "program"; + V.marketAssistantPronouns.pronoun = App.Data.Pronouns.Kind.ai; } else if ((V.assistantAppearance === "succubus") && (V.diversePronouns === 1)) { - V.marketAssistantPronouns.pronoun = "he"; - V.marketAssistantPronouns.possessivePronoun = "his"; - V.marketAssistantPronouns.possessive = "his"; - V.marketAssistantPronouns.object = "him"; - V.marketAssistantPronouns.objectReflexive = "himself"; - V.marketAssistantPronouns.noun = "boy"; + V.marketAssistantPronouns.pronoun = App.Data.Pronouns.Kind.male; } else { - V.marketAssistantPronouns.pronoun = "she"; - V.marketAssistantPronouns.possessivePronoun = "hers"; - V.marketAssistantPronouns.possessive = "her"; - V.marketAssistantPronouns.object = "her"; - V.marketAssistantPronouns.objectReflexive = "herself"; - V.marketAssistantPronouns.noun = "girl"; + V.marketAssistantPronouns.pronoun = App.Data.Pronouns.Kind.female; } }; diff --git a/src/js/utilJS.js b/src/js/utilJS.js index 1fe4ca0f8e7762c0471dca9dfb95b69b25872d56..4d882f6b04656b6e5f013bb6f631753d1d4ff196 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -1068,37 +1068,29 @@ window.num = function(x) { } } - if (V.showNumbers !== 2) { + if (V.showNumbers === 2) { + return commaNum(x); + } else { if (x === 0) { return "zero"; } - let numberAsString = chunk(x) + if (V.showNumbers === 1 && Math.abs(x) > max) { + return commaNum(x); + } + + let numberAsString = chunk(Math.abs(x)) .map(inEnglish) .map(appendScale) .filter(isTruthy) .reverse() .join(" "); - if (V.showNumbers === 1) { - if (x <= max) { - if (x > 0) { - return numberAsString; - } else { - return `negative ${numberAsString}`; - } - } else { - return commaNum(x); - } + if (x > 0) { + return numberAsString; } else { - if (x > 0) { - return numberAsString; - } else { - return `negative ${numberAsString}`; - } + return `negative ${numberAsString}`; } - } else { - return commaNum(x); } }; @@ -1703,8 +1695,7 @@ window.removeDuplicates = function removeDuplicates(array) { * @returns {string} */ window.induceLactation = function induceLactation(slave) { - let pronouns = getPronouns(slave); - let His = capFirstChar(pronouns.possessive); + const {His} = getPronouns(slave); let r = ""; if (slave.induceLactation >= 10) { if (jsRandom(1, 100) < slave.induceLactation) { @@ -2442,8 +2433,7 @@ window.SkillIncrease = (function() { * @returns {string} */ function OralSkillIncrease(slave, skillIncrease = 1) { - const He = capFirstChar(slave.pronoun); - const his = slave.possessivePronoun; + const {He, his} = getPronouns(slave) let r = ""; if (slave.skill.oral <= 10) { @@ -2471,10 +2461,10 @@ window.SkillIncrease = (function() { /** * @param {App.Entity.SlaveState} slave * @param {number} skillIncrease // I think - * @returns {number} + * @returns {string} */ function VaginalSkillIncrease(slave, skillIncrease = 1) { - const He = capFirstChar(slave.pronoun); + const {He} = getPronouns(slave); let r = ""; if (slave.skill.vaginal <= 10) { @@ -2505,8 +2495,7 @@ window.SkillIncrease = (function() { * @returns {string} */ function AnalSkillIncrease(slave, skillIncrease = 1) { - const He = capFirstChar(slave.pronoun); - const his = slave.possessivePronoun; + const {He, his} = getPronouns(slave); let r = ""; if (slave.skill.anal <= 10) { @@ -2537,8 +2526,7 @@ window.SkillIncrease = (function() { * @returns {string} */ function WhoreSkillIncrease(slave, skillIncrease = 1) { - const He = capFirstChar(slave.pronoun); - const his = slave.possessivePronoun; + const {He, his} = getPronouns(slave); let r = ""; if (slave.skill.whoring <= 10) { @@ -2569,7 +2557,7 @@ window.SkillIncrease = (function() { * @returns {string} */ function EntertainSkillIncrease(slave, skillIncrease = 1) { - const He = capFirstChar(slave.pronoun); + const {He} = getPronouns(slave); let r = ""; if (slave.skill.entertainment <= 10) { @@ -3044,7 +3032,8 @@ App.Utils.setLocalPronouns = function(slave, suffix, pronouns) { 'He', 'Him', 'His', 'Himself', 'Boy', 'she', 'her', 'hers', 'herself', 'girl', 'She', 'Her', 'Hers', 'Herself', 'Girl', - 'woman', 'women', 'loli' + 'woman', 'women', 'loli', + 'Woman', 'Women', 'Loli' ]; const scope = pSuffix.length === 0 ? State.variables : State.temporary; diff --git a/src/js/vignettes.js b/src/js/vignettes.js index 62c816f5308882296ab16af0bdb8fa127f5b7956..9af90ca99027c912f77b6dfb384b143862485ac8 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -6,15 +6,7 @@ window.GetVignette = function GetVignette(slave) { const V = State.variables; let vignettes = []; - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - const him = pronouns.object; - const his = pronouns.possessive; - const hers = pronouns.possessivePronoun; - const himself = pronouns.objectReflexive; - const boy = pronouns.noun; - const He = capFirstChar(he); - // const His = capFirstChar(his); + const {he, him, his, hers, himself, boy, He/* , His */} = getPronouns(slave); if (slave.assignment === "whore" || slave.assignment === window.Job.BROTHEL || slave.assignment === window.Job.MADAM) { let seed = jsRandom(1, 10); diff --git a/src/js/walkPastJS.js b/src/js/walkPastJS.js index 658d348f7be1db077033760a248b0559e096833f..e2d2031ad5e63c5e2b4e30236129f65af0ce8623 100644 --- a/src/js/walkPastJS.js +++ b/src/js/walkPastJS.js @@ -4,9 +4,9 @@ window.primeSlave = function(activeSlave, seed) { /* will be moved up once this becomes a single, contained function. */ const V = State.variables; - const pronouns = getPronouns(activeSlave); - const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - const He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(activeSlave); let _target = ""; let t = ""; let race = (V.seeRace ? activeSlave.race : ""); @@ -23,9 +23,9 @@ window.primeSlave = function(activeSlave, seed) { window.rivalSlave = function(activeSlave, seed) { const V = State.variables; - const pronouns = getPronouns(activeSlave); - const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - const He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(activeSlave); let _partnerSlave = getSlave(activeSlave.rivalryTarget); let t = ""; let _target = ""; @@ -58,9 +58,9 @@ window.loverSlave = function(activeSlave) { let race; if (V.seeRace === 1) { race = activeSlave.race; } else { race = ""; } let name = activeSlave.slaveName; - const pronouns = getPronouns(activeSlave); - const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - const He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, He, His + } = getPronouns(activeSlave); let _partnerSlave = getSlave(activeSlave.relationshipTarget); let _fuckSeed = jsRandom(1, 100); @@ -68,9 +68,11 @@ window.loverSlave = function(activeSlave) { let _fuckSpot; if (_partnerSlave !== undefined) { - let pronouns2 = getPronouns(_partnerSlave); - let he2 = pronouns2.pronoun, him2 = pronouns2.object, his2 = pronouns2.possessive, hers2 = pronouns2.possessivePronoun, himself2 = pronouns2.objectReflexive, boy2 = pronouns2.noun; - let He2 = capFirstChar(he2), His2 = capFirstChar(his2); + /* eslint-disable no-unused-vars */ + const { + he2, him2, his2, hers2, himself2, boy2, He2, His2 + } = getPronouns(_partnerSlave).appendSuffix('2'); + /* /* eslint-enable no-unused-vars */ let race2; if (V.seeRace === 1) { race2 = _partnerSlave.race; } else { race2 = ""; } let partnerName = _partnerSlave.slaveName; @@ -1233,9 +1235,10 @@ window.loverSlave = function(activeSlave) { window.relatedSlave = function(activeSlave) { const V = State.variables; - const pronouns = getPronouns(activeSlave); - const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - const He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(activeSlave); let t = ""; let partnerSlave, activeSlaveRel; @@ -1277,9 +1280,10 @@ window.relatedSlave = function(activeSlave) { window.walkPasts = function(slave, _seed) { /* will be moved up once this becomes a single, contained function. */ const V = State.variables; - const pronouns = getPronouns(slave); - const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - const He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); let _target = ""; let t = ""; let race = (V.seeRace ? slave.race : ""); @@ -2282,9 +2286,10 @@ window.buttWatch = function(slave) { let t = ""; let V = State.variables; - let pronouns = getPronouns(slave); - let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - let He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); V.target = "FButt"; @@ -2618,9 +2623,10 @@ window.anusWatch = function(slave) { let t = ""; let V = State.variables; - let pronouns = getPronouns(slave); - let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - let He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); V.target = "FAnus"; @@ -2927,9 +2933,10 @@ window.lipWatch = function(slave) { let t = ""; let V = State.variables; - let pronouns = getPronouns(slave); - let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - let He = capFirstChar(he), His = capFirstChar(his); + const { + he, him, his, hers, himself, boy, + He, His + } = getPronouns(slave); t += `<<faceDescription>>`; t += `<<mouthDescription>>`; diff --git a/src/npc/fFeelings.tw b/src/npc/fFeelings.tw index 3f10306a37b30cf3b54aeac39757f20dcc236808..382aff296a0e977d6e0be7111fd16a32b289f8ee 100644 --- a/src/npc/fFeelings.tw +++ b/src/npc/fFeelings.tw @@ -1133,7 +1133,7 @@ My favorite part of my body i<<s>> <<elseif $activeSlave.relationship <= 4>> I really love _partnerName." $He blushes. "Thank you for letting u<<s>> be together, <<Master>>. <<else>> - I'm <<s>>o happy with _partnerName." $He blushes. "Thank you for $slaves[_partner].object, <<Master>>. + I'm <<s>>o happy with _partnerName." $He blushes. "Thank you for _him2, <<Master>>. <</if>> <<if $activeSlave.relationship >= 3>> <<if $activeSlave.mother == $slaves[_partner].ID>> diff --git a/src/pregmod/incubatorRetrievalWorkaround.tw b/src/pregmod/incubatorRetrievalWorkaround.tw index 083cf594fdb28358487502ec4a4bdf17eed6c26f..e05ee222b889eaae7e7d77714e39b2c032e749f2 100644 --- a/src/pregmod/incubatorRetrievalWorkaround.tw +++ b/src/pregmod/incubatorRetrievalWorkaround.tw @@ -100,4 +100,4 @@ <</for>> <<set $newSlavePool = 0>> -<</if>> \ No newline at end of file +<</if>> diff --git a/src/pregmod/rePregInventorText.tw b/src/pregmod/rePregInventorText.tw index 30421c5e3d66fab2b3a4e60fbccceda91a55fa17..08bc838ef68b283b22d6fcf533e35091497ff4ab 100644 --- a/src/pregmod/rePregInventorText.tw +++ b/src/pregmod/rePregInventorText.tw @@ -113,7 +113,7 @@ <<elseif $activeSlave.amp < 1>> $He signs that $he'd like to give her a "hands-on demonstration" instead. <<else>> - One of $his menials pushes _hisU body into the breeder's enormous stomach in a possessive manner, then turns to regard Millie. "My <<if $activeSlave.noun == "girl">>mistress<<else>>master<</if>> would like to give you a 'hands-on' demonstration, instead," _heU says. + One of $his menials pushes _hisU body into the breeder's enormous stomach in a possessive manner, then turns to regard Millie. "My <<if getPronouns($activeSlave).noun == "girl">>mistress<<else>>master<</if>> would like to give you a 'hands-on' demonstration, instead," _heU says. <</if>> <br><br> The host quirks an eyebrow, then nods. "Alright," she says. "How about we start with that pool of yours?" She then strips her outer layer of clothing, showing off her own famously heavily pregnant figure in an inadequate bra and panties. She makes her way to the curative jelly filled pool, after your slave has been situated within it. Millie dips a toe into the substance and giggles. "Oh my, it tingles!" diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index fe2bd89bad2f932198862daeba53bf8b0de85006..e60b8737ce34bd24cbfedf7e2b92c160cfa5a14c 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -209,118 +209,34 @@ <</widget>> <<widget "setNonlocalPronouns">> + /* a fake slave object, we need the .pronoun attribute only */ + <<set _fSlave = {pronoun: App.Data.Pronouns.Kind.female}>> /* Used for generic slaves, citizens, security, etc. */ - <<if $diversePronouns != 1>> - <<set _gendernl = 1>> - <<elseif $args[0] == 100>> - <<set _gendernl = 2>> - <<elseif $args[0] == 0>> - <<set _gendernl = 1>> - <<elseif (random(1,100) <= $args[0])>> - <<set _gendernl = 2>> - <<else>> - <<set _gendernl = 1>> - <</if>> - <<if _gendernl == 2>> - <<set _heU = "he">> - <<set _hisU = "his">> - <<set _hersU = "his">> - <<set _himU = "him">> - <<set _himselfU = "himself">> - <<set _girlU = "boy">> - <<set _womanU = "man">> - <<set _loliU = "shota">> - <<set _womenU = "men">> - <<set _HeU = "He">> - <<set _HisU = "His">> - <<set _HersU = "His">> - <<set _HimU = "Him">> - <<set _HimselfU = "Himself">> - <<set _GirlU = "Boy">> - <<set _WomanU = "Man">> - <<set _LoliU = "Shota">> - <<set _WomenU = "Men">> - <<else>> - <<set _heU = "she">> - <<set _hisU = "her">> - <<set _hersU = "hers">> - <<set _himU = "her">> - <<set _himselfU = "herself">> - <<set _girlU = "girl">> - <<set _womanU = "woman">> - <<set _loliU = "loli">> - <<set _womenU = "women">> - <<set _HeU = "She">> - <<set _HisU = "Her">> - <<set _HersU = "Hers">> - <<set _HimU = "Her">> - <<set _HimselfU = "Herself">> - <<set _GirlU = "Girl">> - <<set _WomanU = "Woman">> - <<set _LoliU = "Loli">> - <<set _WomenU = "Women">> + <<if $diversePronouns == 1>> + <<if $args[0] === 100>> + <<set _fSlave.pronoun = App.Data.Pronouns.Kind.male>> + <<elseif ($args[0] > 0) && (random(1,100) <= $args[0])>> + <<set _fSlave.pronoun = App.Data.Pronouns.Kind.male>> + <</if>> <</if>> + <<run App.Utils.setLocalPronouns(_fSlave, 'U')>> <</widget>> <<widget "setPlayerPronouns">> - <<set _heP = $PC.pronoun>> - <<set _hisP = $PC.possessive>> - <<set _hersP = $PC.possessivePronoun>> - <<set _himP = $PC.object>> - <<set _himselfP = $PC.objectReflexive>> - <<set _womanP = $PC.noun>> - <<if _womanP == "woman">> - <<set _girlP = "girl", _loliP = "loli", _womenP = "women">> - <<else>> - <<set _girlP = "boy", _loliP = "shota", _womenP = "men">> - <</if>> - - <<set _HeP = capFirstChar(_heP)>> - <<set _HisP = capFirstChar(_hisP)>> - <<set _HersP = capFirstChar(_hersP)>> - <<set _HimP = capFirstChar(_himP)>> - <<set _HimselfP = capFirstChar(_himselfP)>> - <<set _WomanP = capFirstChar(_womanP)>> + <<set _pl = ["he", "his", "hers", "him", "himself", "woman", "girl", + "He", "His", "Hers", "Him", "Himself", "Woman"]>> + <<run App.Utils.setLocalPronouns($PC, 'P', _pl)>> + <<unset _pl>> <</widget>> <<widget "setAssistantPronouns">> - <<set _girlA = $assistantPronouns.noun>> - <<set _hisA = $assistantPronouns.possessive>> - <<set _hersA = $assistantPronouns.possessivePronoun>> - <<set _heA = $assistantPronouns.pronoun>> - <<set _himA = $assistantPronouns.object>> - <<set _himselfA = $assistantPronouns.objectReflexive>> - <<if _girlA == "girl">> - <<set _womanA = "woman", _loliA = "loli", _womenA = "women">> - <<else>> - <<set _womanA = "man", _loliA = "shota", _womenA = "men">> - <</if>> - - <<set _GirlA = capFirstChar(_girlA)>> - <<set _HisA = capFirstChar(_hisA)>> - <<set _HersA = capFirstChar(_hersA)>> - <<set _HeA = capFirstChar(_heA)>> - <<set _HimA = capFirstChar(_himA)>> - <<set _HimselfA = capFirstChar(_himselfA)>> - - <<set _girlM = $marketAssistantPronouns.noun>> - <<set _hisM = $marketAssistantPronouns.possessive>> - <<set _hersM = $marketAssistantPronouns.possessivePronoun>> - <<set _heM = $marketAssistantPronouns.pronoun>> - <<set _himM = $marketAssistantPronouns.object>> - <<set _himselfM = $marketAssistantPronouns.objectReflexive>> - <<if _girlM == "girl">> - <<set _womanM = "woman", _loliM = "loli", _womenM = "women">> - <<else>> - <<set _womanM = "man", _loliM = "shota", _womenM = "men">> - <</if>> + <<set _apl = ["he", "his", "him", "himself", + "hers", "girl", "woman", + "Girl", "His", "Hers", "He", "Him", "Himself"]>> - <<set _GirlM = capFirstChar(_girlM)>> - <<set _HisM = capFirstChar(_hisM)>> - <<set _HersM = capFirstChar(_hersM)>> - <<set _HeM = capFirstChar(_heM)>> - <<set _HimM = capFirstChar(_himM)>> - <<set _HimselfM = capFirstChar(_himselfM)>> + <<run App.Utils.setLocalPronouns($assistantPronouns, 'A', _apl)>> + <<run App.Utils.setLocalPronouns($marketAssistantPronouns, 'M', _apl)>> + <<unset _apl>> <</widget>> /* diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 0750592ebf71adb909b78e1de08effd887e59696..2c6d17e4ab4d54631b556222b69392a1af65b28d 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -264,11 +264,7 @@ <<set $PC.markings = "none">> <</if>> <<if ndef $PC.pronoun>> - <<if $PC.title == 1>> - <<set $PC.pronoun = "he", $PC.possessive = "his", $PC.object = "him">> - <<else>> - <<set $PC.pronoun = "she", $PC.possessive = "her", $PC.object = "her">> - <</if>> + <<run generatePlayerPronouns($PC)>> <</if>> <<if ndef $PC.pregKnown>> <<if $PC.preg > 0>> @@ -3449,6 +3445,10 @@ Setting missing slave variables: <<set $leaders[_leaderIdx] = _Slave>> <</if>> <</for>> +<<run App.Entity.Utils.SlaveDataSchemeCleanup($hostage)>> +<<run SlaveDatatypeCleanup($hostage)>> +<<run App.Entity.Utils.SlaveDataSchemeCleanup($slaveAfterRA)>> +<<run SlaveDatatypeCleanup($slaveAfterRA)>> Done<br> <<if $tanks.length > 0>> diff --git a/src/uncategorized/seWeddingDouble.tw b/src/uncategorized/seWeddingDouble.tw index 86fa63b160fda5f73ff75a7428471f54b3714757..f8386ee015e2270b53e209d4e66a1acffa25911d 100644 --- a/src/uncategorized/seWeddingDouble.tw +++ b/src/uncategorized/seWeddingDouble.tw @@ -1008,7 +1008,7 @@ <<elseif _slave1.devotion < -20 && _slave1.trust > 20>> The slaves are unwilling, so you gather _slave1.slaveName up and hold $him in front of you, pulling $his panties off as you do. $He was crying before, but this causes $him to tremble and tear up in anticipation of what's next. Ignoring this, you maneuver your dick inside $him while holding $him against your <<if $PC.boobs == 1>>breasts<<elseif $PC.title == 0>>flat chest<<else>>strong chest<</if>>.<<if _slave1.amp != 1>> Then you pull $his knees up to give your guests a good view of the consummation.<</if>> $He is left to face them, watching sullenly as you fuck $his fertile <<if _slave1.mpreg == 1>>asshole<<else>>cunt<</if>>. Though $his face is towards the crowd, $his mind is concentrated on your hard cock, pumping in and out of $him at an angle; to $him, this is torture. $He gasps when your seed flows into $him, faking an orgasm to @@.green;applause from your guests.@@ At this, $he shoots you a dirty look, blaming you for this indignity. You've already moved on to _slave2.slaveName, however. _He2 had watched timidly as you had fucked _slave1.slaveName, but when you grab _him2, _he2 begins to cry softly. You ignore this, of course, and instead focus on pushing your already-hard cock into _his2 <<if _slave2.mpreg == 1>>asshole<<else>>pussy<</if>>. You can tell _he2 is trying _his2 hardest not to sob outright, and sure enough, a small sob escapes _his2 lips when you fill _him2 to the brim to the @@.green;applause of your guests.@@ You'll fuck them repeatedly over the next few days, ensuring impregnation, despite their efforts to defy you. <<elseif _slave1.devotion < -20>> - The <<if _slave1.noun == _slave2.noun>><<= $girl>>s<<else>>slaves<</if>> are unwilling, so you gather _slave1.slaveName up and hold $him in front of you, pulling $his panties off as you do. $He was crying before, but this causes $him to tremble and sob loudly in anticipation of what's next. Ignoring this, you maneuver your dick inside $him while holding $him against your <<if $PC.boobs == 1>>breasts<<elseif $PC.title == 0>>flat chest<<else>>strong chest<</if>>.<<if _slave1.amp != 1>> Then you pull $his knees up to give your guests a good view of the consummation.<</if>> $He is left to face them, watching sullenly as you fuck $his fertile <<if _slave1.mpreg == 1>>asshole<<else>>cunt<</if>>. Though $his face is towards the crowd, $his mind is concentrated on your hard cock, pumping in and out of $him at an angle; to $him, this is torture. $He gasps when your seed flows into $him, orgasming unwillingly to @@.green;applause from your guests.@@ At this, $he completely breaks down, blubbering like a child at the unwelcome warmth in $his lower belly. You then turn your attention to _slave2.slaveName. _He2 had watched timidly as you had fucked _slave1.slaveName, but when you grab _him2, _he2 begins to cry softly. You ignore this, of course, and instead focus on pushing your already-hard cock into _his2 <<if _slave2.mpreg == 1>>asshole<<else>>pussy<</if>>. You can tell _he2 is trying _his2 hardest not to sob outright, and sure enough, a small sob escapes _his2 lips when you fill _him2 to the brim to the @@.green;applause of your guests.@@ You'll fuck them repeatedly over the next few days, ensuring impregnation, despite their protesting. + The <<if _slave1.pronoun == _slave2.pronoun>><<= $girl>>s<<else>>slaves<</if>> are unwilling, so you gather _slave1.slaveName up and hold $him in front of you, pulling $his panties off as you do. $He was crying before, but this causes $him to tremble and sob loudly in anticipation of what's next. Ignoring this, you maneuver your dick inside $him while holding $him against your <<if $PC.boobs == 1>>breasts<<elseif $PC.title == 0>>flat chest<<else>>strong chest<</if>>.<<if _slave1.amp != 1>> Then you pull $his knees up to give your guests a good view of the consummation.<</if>> $He is left to face them, watching sullenly as you fuck $his fertile <<if _slave1.mpreg == 1>>asshole<<else>>cunt<</if>>. Though $his face is towards the crowd, $his mind is concentrated on your hard cock, pumping in and out of $him at an angle; to $him, this is torture. $He gasps when your seed flows into $him, orgasming unwillingly to @@.green;applause from your guests.@@ At this, $he completely breaks down, blubbering like a child at the unwelcome warmth in $his lower belly. You then turn your attention to _slave2.slaveName. _He2 had watched timidly as you had fucked _slave1.slaveName, but when you grab _him2, _he2 begins to cry softly. You ignore this, of course, and instead focus on pushing your already-hard cock into _his2 <<if _slave2.mpreg == 1>>asshole<<else>>pussy<</if>>. You can tell _he2 is trying _his2 hardest not to sob outright, and sure enough, a small sob escapes _his2 lips when you fill _him2 to the brim to the @@.green;applause of your guests.@@ You'll fuck them repeatedly over the next few days, ensuring impregnation, despite their protesting. <<else>> Your wives-to-be aren't particularly excited about what's coming, but they're fully prepared for it and have accepted it as a fact of life. There are worse things one can be than the slave-wife of a wealthy arcology owner. You <<if _slave1.amp == 1>>gather _slave1.slaveName.slaveName up and hold $him in front of you, pulling $his panties off as you do. Showing considerable dexterity, you maneuver your dick inside $him while holding $him against your <<if $PC.boobs == 1>>breasts<<elseif $PC.title == 0>>flat chest<<else>>strong chest<</if>><<else>>take _slave1.slaveName's hand and pull $him to $his feet while $he shimmies out of $his panties. $He cocks $his hips for you and you slide your cock inside $him before taking $his knees and drawing them up to hold $him in midair, impaled on you<</if>>. Though $his face is towards the crowd, their mind is concentrated on your hard cock, pumping in and out of $him at an angle; to $him, it's just another part of being your slave. $He gasps when your seed flows into $him, orgasming shortly after to @@.green;applause from your guests.@@ Next, you turn your attention to _slave2.slaveName. You <<if (_slave1.amp == 1 && _slave2.amp == 1)>>also <</if>><<if _slave2.amp == 1>>pick _him2 up, then <<else>>pull _him2 to _his2 feet and <</if>>pull _his2 g-string off in one swift motion, then maneuver your already-hard cock into _his2 <<if _slave2.mpreg == 1>>asshole<<else>>pussy<</if>>. You fuck _him2, hard, then fill _him2 to the brim @@.green;while your audience gives another round of applause.@@ You'll fuck them repeatedly over the next few days, ensuring impregnation. <</if>> diff --git a/src/uncategorized/slaveStats.tw b/src/uncategorized/slaveStats.tw index 320d6cf54277e396c9cc46fde7444f708c78e58d..d6f58b5b1d12e2a2cb26631d2d69c15750708ad5 100644 --- a/src/uncategorized/slaveStats.tw +++ b/src/uncategorized/slaveStats.tw @@ -11,11 +11,6 @@ slaveName: $activeSlave.slaveName /* TODO: figure out why this is being inden <br>birthSurname: $activeSlave.birthSurname <br>genes: $activeSlave.genes <br>pronoun: $activeSlave.pronoun -<br>possessive: $activeSlave.possessive -<br>possessivePronoun: $activeSlave.possessivePronoun -<br>objectReflexive: $activeSlave.objectReflexive -<br>object: $activeSlave.object -<br>noun: $activeSlave.noun <br>weekAcquired: $activeSlave.weekAcquired <br>origin: $activeSlave.origin <br>career: $activeSlave.career