diff --git a/.eslintrc.json b/.eslintrc.json index 6be7f200842659a5c386755a791dd90f1b90971d..c50f403a8694dd5fb40484aa72555416d00e013e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -32,10 +32,14 @@ "semi-spacing": "warn", "semi-style": "warn", "block-spacing": ["warn", "always"], - "curly": ["warn", "all"], + "curly": ["warn", "all"], "eqeqeq": "warn", "no-fallthrough": "error", - "space-before-function-paren": ["warn", "never"], + "space-before-function-paren": ["warn", { + "anonymous": "always", + "named": "never", + "asyncArrow": "always" + }], "template-curly-spacing": ["warn", "never"], "no-trailing-spaces": "warn", "no-unneeded-ternary": "warn", @@ -43,7 +47,7 @@ "padded-blocks": ["warn", "never"], "comma-spacing": "warn", "comma-style": "warn", - "object-curly-newline": ["warn", + "object-curly-newline": ["warn", { "minProperties": 4, "consistent": true diff --git a/Changelog.txt b/Changelog.txt index 8164570f79a9583df5f82d870e766484e394159b..8e9b2a4095a900be412e0f637203c5e853cd1b03 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -11,6 +11,8 @@ Pregmod -aphrodisiacs counter erectile dysfunction -added birth tracking tattoo -added event to revive FCNN + -added upgrade to gene lab allowing further genetic quirk detection and control + -dwarfism genetic quirk added -breast implants now impact milk production based on % implant -many new names added to lacking name pools -restored chem summary to the clinic diff --git a/devNotes/Pronouns.md b/devNotes/Pronouns.md index 0a58ecc3045d67dbe57703e7b60f8a704b2e330a..070af441658192682bf0ecc78af2c080cbe5206a 100644 --- a/devNotes/Pronouns.md +++ b/devNotes/Pronouns.md @@ -17,22 +17,22 @@ const s = getPronouns(aSlave); ## Extending the pronouns system. ## -Consider a degradationalism-based society where a slave is a thing. To extend the pronouns system, we create a successor of the `App.Utils.Pronouns` class: +Consider a degradationism-based society where a slave is a thing. To extend the pronouns system, we create a successor of the `App.Utils.Pronouns` class: ```js App.Utils.ThingPronouns = class extends App.Utils.Pronouns { - get pronoun() { return "it" } - get possessivePronoun() { return "its"; } - get possessive() { return "its"; } - get object() { return "its"; } - get objectReflexive() { return "itself"; } - get noun() { return "thing"; } + get pronoun() { return "it" } + get possessivePronoun() { return "its"; } + get possessive() { return "its"; } + get object() { return "its"; } + get objectReflexive() { return "itself"; } + get noun() { return "thing"; } }; ``` Notice, we override only the basic gender-neutral properties, and the rest of them use these values. Then we modify the `getPronouns()` code: ```js -if (/*degradationalist society condition*/) { +if (/*degradationist society condition*/) { return new App.Utils.ThingPronouns(slave); } return new App.Utils.Pronouns(slave); diff --git a/devNotes/Useful JS Function Documentation.txt b/devNotes/Useful JS Function Documentation.txt index eafa5e09cb42a6b481885d0b473e616fa15279bc..164361af93a49faa1314d714f8cdf68c89ed4872 100644 --- a/devNotes/Useful JS Function Documentation.txt +++ b/devNotes/Useful JS Function Documentation.txt @@ -98,7 +98,11 @@ canSee(slave) - Returns if the slave can see. canHear(slave) - Returns if the slave can hear. -canWalk(slave) - Returns if the slave can walk. +canSmell(slave) - Returns if the slave can smell. + +canTaste(slave) - Returns if the slave can taste. + +canWalk(slave) - Returns if the slave can walk unassisted. canTalk(slave) - Returns if the slave can talk. diff --git a/devNotes/slaveListing.md b/devNotes/slaveListing.md new file mode 100644 index 0000000000000000000000000000000000000000..d0b061580cc506feb47dda71f877a704b81e47da --- /dev/null +++ b/devNotes/slaveListing.md @@ -0,0 +1,144 @@ +# Producing slave lists + +The namespace `App.UI.SlaveList` provides functions for displaying lists of slaves and interacting with the slaves in those lists. These functions supersede (and extend) the `Slave Summary` passage. They provide a way to display a list, select a slave from a list, generate standard lists for a facility or a leader selection, as well as provide a way to customize output and interaction. + +## General concept + +The core function is `App.UI.SlaveList.render()`. It renders the list, assembling it from four pieces. The function is declared as follows: + +```js +/** + * @param {number[]} indices + * @param {Array.<{index: number, rejects: string[]}>} rejectedSlaves + * @param {slaveTextGenerator} interactionLink + * @param {slaveTextGenerator} [postNote] + * @returns {string} + */ +function (indices, rejectedSlaves, interactionLink, postNote) +``` + +and the type of the `slaveTextGenerator` callback is: + +```js +/** + * @callback slaveTextGenerator + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +``` + +To build the output, the `render()` function iterates over the `indices` array, which must contain indices from the `$slaves` array, and outputs each slave using the two callbacks. The first one (`interactionLink`) is used to generate the hyperlink for the slave name. Output from the second callback (if defined) will be printed after each slave summary. The array of rejected slaves is processed after that and its contents are printed out in a simple fashion. The function *does not sort* both arrays, neither `indices` nor `rejectedSlaves`; their elements are printed in the order, specified by the caller. The function' output has to be passed via the SugarCube wikifier, for example by printing in out using the `<<print>>` macro. + +Let's consider a few examples. + +## Implementation examples + +### Basic printing + +The most common behavior for the slave name links is to go to the `Slave Interact` passage after clicking its name. This is implemented by the `App.UI.SlaveList.SlaveInteract.stdInteract` function: + +```js +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.stdInteract = (slave, index) => + App.UI.passageLink(SlaveFullName(slave), 'Slave Interact', `$activeSlave = $slaves[${index}]`); +``` + +The function gets both the slave object and its index in the `$slaves` array for convenience, and outputs a hyperlink in the HTML markup. which points to the `Slave Interact` passage and sets active slave to the slave with the given index, because `Slave Interact` operates with the current slave. In the SugarCube markup the function could look as follows: + +```js +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.stdInteract = (slave, index) => + `<<link "${SlaveFullName(slave)}" "Slave Interact">><<set $activeSlave = $slaves[${index}]`; +``` +Now we can print slave lists. Let's print first three from the `$slaves` array: + +``` +<<print App.UI.SlaveList.render( + [0, 1, 2], []. + App.UI.SlaveList.SlaveInteract.stdInteract +)>> +``` + +Let's print them in the reverse order: + +``` +<<print App.UI.SlaveList.render( + [2, 1, 0], []. + App.UI.SlaveList.SlaveInteract.stdInteract +)>> +``` + +and one more time omitting the second slave: + +``` +<<print App.UI.SlaveList.render( + [0, 2], + [{index: 1, rejects: ['Omitted for testing purposes']}]. + App.UI.SlaveList.SlaveInteract.stdInteract +)>> +``` + +### Post-notes + +The post notes are little text pieces, printed after each slave. They can contain simple text, for example to inform that particular slave is special in a way, or provide additional action hyperlinks. The most common type of the post notes is a hyperlink for assigning or retrieving s slave from a facility. Here are their implementations: + +```js +(slave, index) => App.UI.passageLink(`Send ${slave.object} to ${facility.name}`, "Assign", `$i = ${index}`); + +(slave, index) => App.UI.passageLink(`Retrieve ${slave.object} from ${facility.name}`, "Retrieve", `$i = ${index}`); +``` + +With these blocks we can easily produce a list of slaves, working at a given facility `facility`. + +First, let's get the indices of the workers: + +```js +let facilitySlaves = facility.job().employeesIndices(); +``` + +The `App.Entity.Facilities.Facility.job()` call returns a named job if it was given an argument, or the default job when argument was omitted. Pretty much every facility except the penthouse provides only a single job and we can safely omit the job name here. + +Now just call the `render()` function: + +```js +App.UI.SlaveList.render(facilitySlaves, [], + App.UI.SlaveList.SlaveInteract.stdInteract, + (slave, index) => App.UI.passageLink(`Retrieve ${slave.object} from ${facility.name}`, "Retrieve", `$i = ${index}`)); +``` + +That's it, works with any facility. + +Here we omitted a few details, like setting the `$returnTo` bookmark for the `Assign` and `Retrieve` passages, sorting the slaves lists, and a few more. + +### Templates for common use cases + +There are functions in the `App.UI.SlaveList` namespace for a few typical use cases. + +Function | Purpose +----- | ---- +`listSJFacilitySlaves()` | Creates a tabbed list for assigning and retrieving slaves t0/from a facility with a single job +`displayManager()` | Displays a facility manager with a link to change it or a note with a link to assign a manager +`stdFacilityPage()` | Combines the previous two functions to render the manager and employees +`penthousePage()` | Displays tabs with workers for the penthouse +`slaveSelectionList()` | Displays a list with filtering and sorting links for selecting a slave +`facilityManagerSelection()` | Specialization of the `slaveSelectionList()` to select a manager for a facility, which implements position requirements tests and highlights experienced slaves + +### Fully custom lists + +There are use cases that stand apart from all other, and there is no point in providing a template for them. In that case you can generate a totally custom list. Here is an example: + +``` +<<print App.UI.SlaveList.slaveSelectionList( + s => !ruleSlaveExcluded(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Exclude Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` +)>> +``` diff --git a/devNotes/sugarcube stuff/building sugarcube.txt b/devNotes/sugarcube stuff/building sugarcube.txt index 83a18a070072c414d39537534932aefb07f18d67..e0ae54e0f31e705ee007d14e135c77e9411f8c5c 100644 --- a/devNotes/sugarcube stuff/building sugarcube.txt +++ b/devNotes/sugarcube stuff/building sugarcube.txt @@ -38,7 +38,6 @@ Run the node package manager (npm) in the repository: CAUTION: dependencies list (located in the package.json file in the repository root) may change from commit to commit and it differs between branches! Make sure to install correct dependencies after switching working branch. - Patching and building SugarCube. 3a. If you opted to use Mercurial, use it to apply the patch: diff --git a/devTools/sugarcube.d.ts b/devTools/sugarcube.d.ts index eb6c41221c6189eed979215c160f377ba31ced22..ab02ab3683a558c1c23b60d8e8604270b04fe307 100644 --- a/devTools/sugarcube.d.ts +++ b/devTools/sugarcube.d.ts @@ -2034,6 +2034,12 @@ declare global { */ static trunc(num: number): number; } + + interface JQuery { + wikiWithOptions(options: any, ...sources): JQuery; + wiki(...sources): JQuery; + }; + } export { }; diff --git a/src/002-config/fc-js-init.js b/src/002-config/fc-js-init.js index 1e53f5b290ce1f863f6491486185bc04e73da730..db6fa2d707a9b7db2146d4b5cd9f65e8c04a336b 100644 --- a/src/002-config/fc-js-init.js +++ b/src/002-config/fc-js-init.js @@ -4,8 +4,8 @@ * does not work. */ window.App = { }; -// the same declaration for code parsers that don't line the line above -let App = window.App || {}; +// the same declaration for code parsers that don't like the line above +var App = window.App || {}; App.Data = {}; App.Debug = {}; @@ -18,18 +18,18 @@ App.Interact = {}; App.Desc = {}; App.ExtendedFamily = {}; App.Facilities = { - Brothel: {}, - Club: {}, - Dairy: {}, - Farmyard: {}, - ServantsQuarters: {}, - MasterSuite: {}, - Spa: {}, - Nursery: {}, - Clinic: {}, - Schoolroom: {}, - Cellblock: {}, - Arcade: {}, - HGSuite: {} + Brothel: {}, + Club: {}, + Dairy: {}, + Farmyard: {}, + ServantsQuarters: {}, + MasterSuite: {}, + Spa: {}, + Nursery: {}, + Clinic: {}, + Schoolroom: {}, + Cellblock: {}, + Arcade: {}, + HGSuite: {} }; App.SF = {}; diff --git a/src/002-config/mousetrapConfig.js b/src/002-config/mousetrapConfig.js index a2a99786b0c3ac330eaa2cbf5e30f16258ca5ec6..b9a4777df342dc25c94783024359336a9042b1f8 100644 --- a/src/002-config/mousetrapConfig.js +++ b/src/002-config/mousetrapConfig.js @@ -50,7 +50,7 @@ Mousetrap.bind("f", function() { $("#walkpast a.macro-link").trigger("click"); }); Mousetrap.bind("h", function() { - $("#manageHG a.macro-link").trigger("click"); + $("#manageHG a").trigger("click"); }); Mousetrap.bind("s", function() { $("#buySlaves a.macro-link").trigger("click"); @@ -59,10 +59,10 @@ Mousetrap.bind("a", function() { $("#managePA a.macro-link").trigger("click"); }); Mousetrap.bind("b", function() { - $("#manageBG a.macro-link").trigger("click"); + $("#manageBG a").trigger("click"); }); Mousetrap.bind("u", function() { - $("#manageRecruiter a.macro-link").trigger("click"); + $("#manageRecruiter a").trigger("click"); }); Mousetrap.bind("o", function() { $("#story-caption #optionsButton a.macro-link").trigger("click"); diff --git a/src/004-base/facility.js b/src/004-base/facility.js index f65205771c54210ec1301432260f0a97ecb0a7c0..ad3095f1f5a7ae25535d6252ed53bc2b38e961cb 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -5,6 +5,7 @@ App.Data.JobDesc = class { this.assignment = ""; this.publicSexUse = false; this.fuckdollAccepted = false; + /** @type {boolean|undefined} */ this.broodmotherAccepted = false; } }; @@ -96,7 +97,6 @@ App.Entity.Facilities.Job = class { } /** - * * @callback linkCallback * @param {string} assignment new assignment * @returns {string} code to include into the <<link>><</link>> @@ -116,6 +116,23 @@ App.Entity.Facilities.Job = class { return `<<link "${linkText}"${passage !== undefined ? ' "' + passage + '"' : ''}>><<= assignJob(${App.Utils.slaveRefString(i)}, "${this.desc.assignment}")>>${linkAction}<</link>>`; } + /** + * all slaves that are employed at this job + * @returns {App.Entity.SlaveState[]} + */ + employees() { + return State.variables.slaves.filter( s => s.assignment === this.desc.assignment); + } + + /** + * Indices in the slaves array for all slaves that are employed at this job + * @returns {number[]} + */ + employeesIndices() { + return State.variables.slaves.reduce( + (acc, cur, idx) => { if (cur.assignment === this.desc.assignment) { acc.push(idx); } return acc; }, []); + } + /** * Tests if slave is broken enough * @protected @@ -146,9 +163,7 @@ App.Entity.Facilities.Job = class { return `${slave.slaveName} must be either more fearful of you or devoted to you.`; } - /** - * @private - */ + /** @private */ get _facilityHasFreeSpace() { return this.facility.hasFreeSpace; } @@ -198,9 +213,13 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job { (typeof slave.career === 'string' && this.desc.careers.includes(slave.career)); } - /** - * @private - */ + /** @returns {App.Entity.SlaveState} */ + get currentEmployee() { + const obj = State.variables[capFirstChar(this.desc.position)]; + return obj === undefined ? null : obj; + } + + /** @private */ get _facilityHasFreeSpace() { return true; } @@ -218,13 +237,11 @@ App.Entity.Facilities.Facility = class { /** @private @type {Object.<string, App.Entity.Facilities.Job>} */ this._jobs = {}; - // if this facility provides only a single job - const singleJobFacility = Object.keys(this.desc.jobs).length === 1; for (const jn in this.desc.jobs) { if (jobs[jn] !== undefined) { this._jobs[jn] = jobs[jn]; } else { - this._jobs[jn] = singleJobFacility ? new App.Entity.Facilities.FacilitySingleJob() : new App.Entity.Facilities.Job(); + this._jobs[jn] = this._createJob(jn); } this._jobs[jn].facility = this; this._jobs[jn].desc = desc.jobs[jn]; @@ -264,11 +281,11 @@ App.Entity.Facilities.Facility = class { /** * Returns job description - * @param {string} name + * @param {string} [name] job name; the default job will be used if omitted * @returns {App.Entity.Facilities.Job} */ job(name) { - return this._jobs[name]; + return this._jobs[name || this.desc.defaultJob]; } get manager() { @@ -296,7 +313,6 @@ App.Entity.Facilities.Facility = class { } /** - * * @param {string} name * @returns {number} */ @@ -305,7 +321,6 @@ App.Entity.Facilities.Facility = class { } /** - * * @param {string} name * @returns {number} */ @@ -386,6 +401,48 @@ App.Entity.Facilities.Facility = class { job = job || this.desc.defaultJob; return this._jobs[job].assignmentLink(i, passage, callback, this.genericName); } + + /** + * all slaves that are employed at this job + * @returns {App.Entity.SlaveState[]} + */ + employees() { + if (Object.keys(this._jobs).length === 1) { + return this.job().employees(); + } + /** @type {App.Entity.Facilities.Job[]} */ + let jobArray = []; + for (const jn in this._jobs) { + jobArray.push(this._jobs[jn]); + } + return State.variables.slaves.filter(s => jobArray.some(j => j.isEmployed(s))); + } + + /** + * Indices in the slaves array for all slaves that are employed at this job + * @returns {number[]} + */ + employeesIndices() { + if (Object.keys(this._jobs).length === 1) { + return this.job().employeesIndices(); + } + /** @type {App.Entity.Facilities.Job[]} */ + let jobArray = []; + for (const jn in this._jobs) { + jobArray.push(this._jobs[jn]); + } + return State.variables.slaves.reduce( + (acc, cur, idx) => { if (jobArray.some(j => j.isEmployed(cur))) { acc.push(idx); } }, []); + } + + /** + * @protected + * @param {string} jobName + * @returns {App.Entity.Facilities.Job} + */ + _createJob(jobName) { /* eslint-disable-line no-unused-vars*/ + return new App.Entity.Facilities.Job(); + } }; /** @@ -406,6 +463,37 @@ App.Entity.Facilities.FacilitySingleJob = class extends App.Entity.Facilities.Jo const psg = passage === undefined ? '' : `, $returnTo = "${passage}"`; return `<<link "${linkText}" "Assign">><<set $assignTo = "${this.facility.genericName}", $i = ${i}${psg}>>${linkAction}<</link>>`; } + + /** @returns {number[]} */ + employeesIndices() { + const V = State.variables; + const si = V.slaveIndices; + const ids = V[this._employeeIDsVariableName]; // updated by assignJob()/removeJob() + return ids.map(id => si[id]); + } + + /** @returns {App.Entity.SlaveState[]} */ + employees() { + /** @type {App.Entity.SlaveState[]} */ + const slaves = State.variables.slaves; + return this.employeesIndices().map(ind => slaves[ind]); + } + + /** @private */ + get _employeeIDsVariableName() { + return this.facility.genericName + "iIDs"; + } +}; + +App.Entity.Facilities.SingleJobFacility = class extends App.Entity.Facilities.Facility { + /** + * @override + * @protected + * @returns {App.Entity.Facilities.FacilitySingleJob} + */ + _createJob() { + return new App.Entity.Facilities.FacilitySingleJob(); + } }; /** Instances of all facility objects */ diff --git a/src/Mods/DinnerParty/dinnerPartyPreparations.tw b/src/Mods/DinnerParty/dinnerPartyPreparations.tw index fd37212d85e2c3a018137e47eac4d6659ef87929..091bd34d39c71c5b79acb9540388eed509db9d65 100644 --- a/src/Mods/DinnerParty/dinnerPartyPreparations.tw +++ b/src/Mods/DinnerParty/dinnerPartyPreparations.tw @@ -29,9 +29,12 @@ Your assistant will take care of the invitations and all the arrangements; all y __Select Your Meat:__ <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<= App.UI.SlaveList.slaveSelectionList( + s => s.assignmentVisible === 1 && s.fuckdoll === 0, + App.UI.SlaveList.SlaveInteract.stdInteract, + null, + (s, i) => { + const p = getPronouns(s); + return App.UI.passageLink(`Make ${p.her} the main course`, "Dinner Party Execution", `$activeSlave = $slaves[${i}]`) + } + )>> diff --git a/src/SecExp/propagandaHub.tw b/src/SecExp/propagandaHub.tw index e41b41fabe345596a4ae8443d5cfb36f1bae6444..d54051f59bfaef9b4eaa4c5e5586e61877716abd 100644 --- a/src/SecExp/propagandaHub.tw +++ b/src/SecExp/propagandaHub.tw @@ -13,14 +13,18 @@ Propaganda Hub The propaganda hub is a surprisingly inconspicuous building, dimly lit from the outside. You are well aware however of its role and its importance. You confidently enter its unassuming doorway and calmly review the work being done here. -<<if $Recruiter != 0>><br><br> -<<if $RecuriterOffice == 0>> - <<link "Give ''__@@.pink;<<= SlaveFullName($Recruiter)>>@@__'' an office.""propagandaHub">> - <<set $RecuriterOffice = 1>> <</link>> -<<else>> - <<link "Remove ''__@@.pink;<<= SlaveFullName($Recruiter)>>@@__'' from her office.""propagandaHub">> - <<set $RecuriterOffice = 0>> <</link>> -<</if>> +<<if $Recruiter != 0>> + <<setLocalPronouns $Recruiter>> + <br><br> + <<if $RecuriterOffice == 0>> + <<link "Give ''__@@.pink;<<= SlaveFullName($Recruiter)>>@@__'' an office.""propagandaHub">> + <<set $RecuriterOffice = 1>> + <</link>> + <<else>> + <<link "Remove ''__@@.pink;<<= SlaveFullName($Recruiter)>>@@__'' from $his office.""propagandaHub">> + <<set $RecuriterOffice = 0>> + <</link>> + <</if>> <</if>> /* classic propaganda */ <br><br><<if $propCampaign == 0>> diff --git a/src/SecExp/secBarracks.tw b/src/SecExp/secBarracks.tw index a9df19c45e13b576d68d071310bb5b358d18923b..6ab4d6fa7795ba1885fdb09d427513874837cf1e 100644 --- a/src/SecExp/secBarracks.tw +++ b/src/SecExp/secBarracks.tw @@ -166,7 +166,7 @@ Your current maximum number of units is <<print $maxUnits>> (<<print num($secBot <br><br>__Slaves__ <br>/* slaves */ You are free to organize your menial slaves into fighting units. Currently you have <<print num($menials)>> slaves available, while <<print num($slavesEmployedManpower)>> are already employed as soldiers. During all your battles you lost a total of <<print num($slavesTotalCasualties)>>. -<<silently>><<= MenialPopCap()>><</silently>> +<<run MenialPopCap()>> <<set _menialPrice = menialSlaveCost()>> <<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> <<if $cash > _menialPrice>> diff --git a/src/SecExp/secExpOptions.tw b/src/SecExp/secExpOptions.tw index afb86b792bce0b9ccf4b6d59e893159aa8a6f1a2..e11f72560a22eefbb2a1e03627be06570a7c6aa9 100644 --- a/src/SecExp/secExpOptions.tw +++ b/src/SecExp/secExpOptions.tw @@ -424,7 +424,7 @@ __Rebellions buildup speed__: <br> __Debug/cheats:__ -<<silently>><<= MenialPopCap()>><</silently>> +<<run MenialPopCap()>> <br> <<link "Set loyalty high" "secExpOptions">> <<for _i = 0; _i < $militiaUnits.length; _i++>> diff --git a/src/SecExp/securityHQ.tw b/src/SecExp/securityHQ.tw index a274dcd2f87b18e1908aae774e2dfaa44e7d25ce..f93cac2b134fa47b4073f3caccde98e550726b4b 100644 --- a/src/SecExp/securityHQ.tw +++ b/src/SecExp/securityHQ.tw @@ -20,7 +20,7 @@ You have <span id="secHel"> <<print num($secMenials)>> </span> slaves working in <<else>> You have enough slaves to man all security systems. <</if>> -<<silently>><<= MenialPopCap()>><</silently>> +<<run MenialPopCap()>> <<set _menialPrice = menialSlaveCost()>> <<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> <<if $cash > _menialPrice>> @@ -227,7 +227,7 @@ Considering the current upgrades the resting level for security is <<print $secR You have bought advanced cybersecurity algorithms that will defend your arcology against hack attempts or cyber frauds. <</if>> <br> -<<if $rep > 10000>> +<<if $authority > 10000>> <<if $secUpgrades.eyeScan == 0>> [[Install invisible eye scanners|securityHQ][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.eyeScan = 1, $secRestPoint += 20, $reqMenials += 10, $secHQUpkeep += $upgradeUpkeep]] <br>//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will raise rest point of security by 15 points, but will require 10 extra slaves in the headquarters and increases upkeep.// @@ -280,7 +280,7 @@ Considering the current upgrades the maximum level of crime is <<print $crimeCap You have installed auto-curating archiver software, which will update in real time your data archives with any new relevant information on criminals residing in your arcology. <</if>> <br> -<<if $rep > 10000>> +<<if $authority > 10000>> <<if $crimeUpgrades.autoTrial == 0>> [[Install automated trials software|securityHQ][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $crimeUpgrades.autoTrial = 1, $crimeCap -= 15, $reqMenials += 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will bring down the crime level cap by 15 points, but will require 10 extra slaves in the headquarters and increases upkeep.// @@ -330,7 +330,7 @@ Considering the current upgrades the maximum level of crime is <<print $crimeCap You have installed advanced signal interception equipment. <</if>> <br> -<<if $rep > 10000>> +<<if $authority > 10000>> <<if $intelUpgrades.radar == 0>> [[Install advanced radar equipment|securityHQ][cashX(forceNeg(Math.trunc(15000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $intelUpgrades.radar = 1, $recon += 1, $reqMenials += 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(15000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will increase recon capabilities, but will require 10 extra slaves in the headquarters and increases upkeep.// @@ -373,7 +373,7 @@ Considering the current upgrades the maximum level of crime is <<print $crimeCap You have bought rapid armored transport vehicles able to bring your troops to battle much quicker than before. <</if>> <br> -<<if $rep > 10000>> +<<if $authority > 10000>> <<if $readinessUpgrades.rapidPlatforms == 0>> [[Build rapid deployment platforms|securityHQ][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount)), "capEx"), $readinessUpgrades.rapidPlatforms = 1, $readiness += 2, $reqMenials += 5, $secHQUpkeep += $upgradeUpkeep]] <br>//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount))>>. Will increase readiness by 2, but will require 5 extra slaves in the headquarters and increases upkeep.// @@ -394,39 +394,39 @@ Considering the current upgrades the maximum level of crime is <<print $crimeCap <br> <br> -<<if $rep > 12000>> +<<if $authority > 12000>> <br>__Cold Data Storage Facility__: - <<if $secUpgrades.coldstorage == 6 && $rep >= 19500 && $reqMenials > 10>> + <<if $secUpgrades.coldstorage == 6 && $authority >= 19500 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of two years. <br> [[Expand the cold storage facility to increase data retention to three years|securityHQ][cashX(forceNeg(Math.trunc(2400000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(2400000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 5 && $rep >= 19500 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 5 && $authority >= 19500 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of one year. <br> [[Expand the cold storage facility to increase data retention to two years|securityHQ][cashX(forceNeg(Math.trunc(1200000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(1200000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 4 && $rep >= 19500 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 4 && $authority >= 19500 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of nine months. <br> [[Expand the cold storage facility to increase data retention to one year|securityHQ][cashX(forceNeg(Math.trunc(900000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(900000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 3 && $rep > 18000 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 3 && $authority > 18000 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of six months. <br> [[Expand the cold storage facility to increase data retention to nine months|securityHQ][cashX(forceNeg(Math.trunc(600000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(600000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 2 && $rep > 16000 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 2 && $authority > 16000 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of three months. <br> [[Expand the cold storage facility to increase data retention to six months|securityHQ][cashX(forceNeg(Math.trunc(300000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(300000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 1 && $rep > 14000 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 1 && $authority > 14000 && $reqMenials > 10>> <br>You have installed a cold storage facility for the Security HQ's archives with a data retention capability of one month. <br> [[Expand the cold storage facility to increase data retention to three months|securityHQ][cashX(forceNeg(Math.trunc(100000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(100000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by a further 10, but will increase upkeep.// - <<elseif $secUpgrades.coldstorage == 0 && $rep > 12000 && $reqMenials > 10>> + <<elseif $secUpgrades.coldstorage == 0 && $authority > 12000 && $reqMenials > 10>> [[Install a cold storage facility|securityHQ][cashX(forceNeg(Math.trunc(50000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier)), "capEx"), $secUpgrades.coldstorage++, $reqMenials -= 10, $secHQUpkeep += $upgradeUpkeep, $PC.hacking += 1]] <br>//Costs <<print cashFormat(Math.trunc(50000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will lower the amount of required slaves by 10, but will increase upkeep.// <<elseif $secUpgrades.coldstorage > 6>> diff --git a/src/SecExp/securityReport.tw b/src/SecExp/securityReport.tw index 404278bb89e462571405fb823893f87f6b999ec8..d20b50277339d79463c27694894a8d13dbc25145 100644 --- a/src/SecExp/securityReport.tw +++ b/src/SecExp/securityReport.tw @@ -22,11 +22,11 @@ <strong>Security</strong>: <<if $terrain === "oceanic">> - Due to the @@.green;massive economic and logistical challenges@@ of attacking an oceanic arcology, your security force(s) has + Due to the @@.green;massive economic and logistical challenges@@ of attacking an oceanic arcology, your security force(s) <<else>> - The @@.red;economic and logistical challenges@@ of attacking a $terrain arcology, ensures that your security force(s) do not + The @@.red;easily manangable economic and logistical challenges@@ of attacking an $terrain arcology ensure that your security force(s) do not <</if>> - the luxury of focusing exclusively on internal matters.<br> + have the luxury of focusing exclusively on internal matters.<br> <<if $secMenials > 0>> <<print num($secMenials)>> slaves work to improve the security of your arcology, <<if $mercenaries >= 1 && $arcologyUpgrade.drones == 1>> @@ -174,10 +174,11 @@ <<else>> <<set _secGrowth -= ($airport + $docks - $hubSecurity * 3) / 2>> <</if>> + The transport hub, for all its usefulness, is a hotspot of malicious <<if $airport + $docks > $hubSecurity * 3>> - The transport hub, for all its usefulness, is a hotspot of malicious activity and hub security forces are not sufficient to keep up with all threats. + activity and hub security forces are not sufficient to keep up with all threats. <<else>> - The transport hub, for all its usefulness, is a hotspot of malicious activity, but the hub security forces are up to the task. + activity, but the hub security forces are up to the task. <</if>> <</if>> @@ -216,17 +217,19 @@ <<elseif _secRest < $secRestPoint>> The limited infrastructure available slowly erodes away the security level of the arcology. <</if>> + +The security level of the arcology is <<if $security > (_secRest + 5)>> - The security level of the arcology is over its effective resting point, limiting the achievable growth this week. + over its effective resting point, limiting the achievable growth this week. <<set _secGrowth *= 0.5>> <<elseif $security < (_secRest - 5)>> - The security level of the arcology is under its effective resting point, speeding up its growth. + under its effective resting point, speeding up its growth. <<set _secGrowth *= 1.5>> <<elseif $security == _secRest>> - The security level of the arcology is at its effective resting point, this severely limits the influence of external factors on the change achievable this week. + at its effective resting point, this severely limits the influence of external factors on the change achievable this week. <<set _secGrowth *= 0.3>> <<else>> - The security level of the arcology is near its effective resting point, this severely limits the influence of external factors on the change achievable this week. + near its effective resting point, this severely limits the influence of external factors on the change achievable this week. <<if _secGrowth < 0>> <<set _secGrowth *= 0.3>> <</if>> @@ -245,22 +248,25 @@ <br><br> <strong>Crime</strong>: /* crime modifiers */ +Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a <<if $week < 30>> - Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a small impact on the growth of criminal activities in your arcology. + small <<set _crimeGrowth += 0.5>> <<elseif $week < 60>> - Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a noticeable impact on the growth of criminal activities in your arcology. + noticeable <<set _crimeGrowth += 1>> <<elseif $week < 90>> - Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a moderate impact on the growth of criminal activities in your arcology. + moderate <<set _crimeGrowth += 1.5>> <<elseif $week < 120>> - Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a big impact on the growth of criminal activities in your arcology. + big <<set _crimeGrowth += 2>> <<else>> - Due to the deterioration of the old world countries, organized crime focuses more and more on the prosperous free cities, yours included. This has a huge impact on the growth of criminal activities in your arcology. + huge <<set _crimeGrowth += 2.5>> <</if>> + impact on the growth of criminal activities in your arcology. + <<if $arcologies[0].prosperity < 50>> The low prosperity of the arcology facilitates criminal recruitment and organization. <<set _crimeGrowth += 1>> @@ -347,7 +353,7 @@ <strong> Military</strong>: /* militia */ <<if $SF.Toggle && $SF.Active >= 1 && $SF.Size > 10>> Having a powerful special force attracts a lot of citizens, hopeful that they may be able to fight along side it. - <<set _recruitsMultiplier *= 1 + (random(0, (Math.round($SF.Size / 10))) / 20)>> /* not sure how high $SF.Size goes, so I hope this makes sense */ + <<set _recruitsMultiplier *= 1 + (random(1, (Math.round($SF.Size / 10))) / 20)>> /* not sure how high $SF.Size goes, so I hope this makes sense */ <</if>> <<if $propCampaign >= 1 && $propFocus == "recruitment">> <<if $RecuriterOffice == 0 || $Recruiter == 0>> @@ -495,7 +501,7 @@ <</if>> <<if $SF.Toggle && $SF.Active >= 1 && $SF.Size > 10>> Having a powerful special force attracts a lot of mercenaries, hopeful that they may be able to fight along side it. - <<set _newMercs += random(0,Math.round($SF.Size/10))>> + <<set _newMercs += random(1,Math.round($SF.Size/10))>> <</if>> <<if $discountMercenaries > 0>> More mercenaries are attracted to your arcology as a result of the reduced rent. diff --git a/src/SecExp/weaponsManufacturing.tw b/src/SecExp/weaponsManufacturing.tw index cb2a130ffb8ca70e0c29aca2a21c2081c2b30533..fd1a5d996ed63eadaed1db42943ca2eaf7f4b043 100644 --- a/src/SecExp/weaponsManufacturing.tw +++ b/src/SecExp/weaponsManufacturing.tw @@ -31,7 +31,7 @@ many small old world nations as the advanced technology that free cities have av <<if $weapMenials> 0>>Assigned here are $weapMenials slaves working to produce as much equipment as possible.<<else>>There are no assigned menial slaves here. The spaces is manned exclusively by low rank citizens.<</if>> You own <<print num($menials)>> free menial slaves. This manufacturing complex can house 500 at most, with <<print 500 - $weapMenials>> free slots. <br> -<<silently>><<= MenialPopCap()>><</silently>> +<<run MenialPopCap()>> <<set _menialPrice = menialSlaveCost()>> <<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> <<if $cash > _menialPrice>> diff --git a/src/SpecialForce/NamingColonel.tw b/src/SpecialForce/NamingColonel.tw index a6b7a33715803eece6215752456f74d325c7cb8f..fce7e25c0681dfd708bee56a24dec80f7ab8f683 100644 --- a/src/SpecialForce/NamingColonel.tw +++ b/src/SpecialForce/NamingColonel.tw @@ -69,10 +69,11 @@ <br><br>You feel your climax approaching and hold up a finger. The merc pauses while you grab the slave's head <<if $PC.dick > 0>> - then force your cock roughly down her throat while you cum. She swallows as much as she can before pulling + then force your cock roughly down _hisU throat while you cum. _HeU swallows as much as _heU can before pulling <<else>> - tightly with your thighs, pressing her face tightly against your pussy as you cum. When you release her, she pulls - <</if>> away, coughing. + tightly with your thighs, pressing _hisU face tightly against your pussy as you cum. When you release _himU, _heU pulls + <</if>> + away, coughing. <br><br> <<if $SF.Colonel.Core === "shell shocked">> diff --git a/src/SpecialForce/Proposal.tw b/src/SpecialForce/Proposal.tw index 72ca2c8bb32f7ad3d7694ec5aa4d74a9951ab7cb..fd04ace1eb007934f4453ade086258277c914d85 100644 --- a/src/SpecialForce/Proposal.tw +++ b/src/SpecialForce/Proposal.tw @@ -1,34 +1,21 @@ :: Security Force Proposal [nobr] -<<set $nextButton = " ">> -<span id="result"> +<<set $nextButton = " ", _price = 20000>> +The Free Cities were founded on the principles of unrestrained anarcho-capitalism. To those with such beliefs, the very idea of possessing an armed force, a key tool of government control, or weapons at all, was anathema. +<br><br> +In the period since, however, your citizens have seen the value in weaponry. They watched on their news-feed as some Free Cities were sacked by the armies and mobs of the old world, driven by their hatred of the citizens' luxurious lifestyles. They've seen other Cities toppled from within, by slave conspiracies or infighting among citizen groupings with differing beliefs. They've witnessed the distressingly rapid rise of fanatical anti-slavery organizations, who would like nothing more than to see them slowly bled by their own chattel. They are learned people, and they know what happens to slaveowners who lose their power. +<br><br> +They've also seen the results of your policies. Your actions towards the arming of both yourself and the arcology proved critical, and ensured their safety when the old world came for them. And your victory over the Daughters of Liberty, who the citizens know would have executed every single one of them, has created an opportunity. If you insisted upon the creation of a standing 'special' force for the arcology, many would support you and, more importantly, nobody of note would object. +<br><br> +Such a force would solve many problems. More soldiers would mean more control, which is very good for you. More soldiers would mean more security for the arcology and the approaches to it, which is very good for business. More soldiers would mean more obedience from rebellious slaves who can see how powerless they truly are, which is very good for everybody. The force would be tiny compared to the old world militaries that still exist, but money and technology can, of course, overcome massive numerical inferiority. This being the Free Cities, they would have other uses besides security. Perhaps, in time, you could exert some manner of influence on the old world itself. +<br><br> +''This is a unique and very important opportunity'', and is possible only because of your recent victory over the Daughters. If you do not seize it, the memories and fears of your citizens will fade,and you will not be able to raise the matter again. - The Free Cities were founded on the principles of unrestrained anarcho-capitalism. To those with such beliefs, the very idea of possessing an armed force, a key tool of government control, or weapons at all, was anathema. - <br><br> - In the period since, however, your citizens have seen the value in weaponry. They watched on their news-feed as some Free Cities were sacked by the armies and mobs of the old world, driven by their hatred of the citizens' luxurious lifestyles. They've seen other Cities toppled from within, by slave conspiracies or infighting among citizen groupings with differing beliefs. They've witnessed the distressingly rapid rise of fanatical anti-slavery organizations, who would like nothing more than to see them slowly bled by their own chattel. They are learned people, and they know what happens to slaveowners who lose their power. - <br><br> - They've also seen the results of your policies. Your actions towards the arming of both yourself and the arcology proved critical, and ensured their safety when the old world came for them. And your victory over the Daughters of Liberty, who the citizens know would have executed every single one of them, has created an opportunity. If you insisted upon the creation of a standing 'special' force for the arcology, many would support you and, more importantly, nobody of note would object. - <br><br> - Such a force would solve many problems. More soldiers would mean more control, which is very good for you. More soldiers would mean more security for the arcology and the approaches to it, which is very good for business. More soldiers would mean more obedience from rebellious slaves who can see how powerless they truly are, which is very good for everybody. The force would be tiny compared to the old world militaries that still exist, but money and technology can, of course, overcome massive numerical inferiority. This being the Free Cities, they would have other uses besides security. Perhaps, in time, you could exert some manner of influence on the old world itself. - <br><br> - ''This is a unique and very important opportunity'', and is possible only because of your recent victory over the Daughters. If you do not seize it, the memories and fears of your citizens will fade,and you will not be able to raise the matter again. - - <<set _price = 20000>> - <<if $PC.warfare >= 100>> - <<set _price *= .5>> - <<elseif $PC.warfare >= 50||$PC.career === "arcology owner">> - <<set _price *= .75>> - <</if>> - <br><<link "Prepare for an announcement." "Security Force Naming-Colonel">> - <<replace "#result">> - <<= App.SF.Init()>> - <<set $SF.IntroProgress = -1>> - <<run cashX(forceNeg(_price), "specialForces")>> - <</replace>> - <</link>><br>//Initial costs are @@.yellowgreen;<<print cashFormat(_price)>>@@ and upon establishment the force will have significant support costs until it is self-sufficient.// - <br><<link "The current measures are enough." "RIE Eligibility Check">> - <<replace "#result">> - <<set $SF.Active = 0>> - <</replace>> - <</link>> -</span> \ No newline at end of file +<<if $PC.warfare >= 100>> + <<set _price *= 0.5>> +<<elseif $PC.warfare >= 50||$PC.career === "arcology owner">> + <<set _price *= 0.75>> +<</if>> +<br>[[Prepare for an announcement.|Security Force Naming-Colonel][$SF.Active = 1, $SF.IntroProgress = -1, App.SF.Init(), cashX(-_price, "specialForces")]] +<br> //Initial costs are @@.yellowgreen;<<print cashFormat(_price)>>@@ and upon establishment the force will have significant support costs until it is self-sufficient.// +<br>[[The current measures are enough|RIE Eligibility Check][$SF.Active = 0]] \ No newline at end of file diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js index ee3e6c6540e24fa721f3da5119bc17d889fa2513..57f05c859dc42e3aacc0174aa5f1f609892c2395 100644 --- a/src/SpecialForce/SpecialForce.js +++ b/src/SpecialForce/SpecialForce.js @@ -1,61 +1,66 @@ // V=SugarCube.State.variables, T=SugarCube.State.temporary; App.SF.Init = function() { const V = State.variables; - if (V.SF === undefined) V.SF = {}; - if (V.SF.UC === undefined) V.SF.UC = {}; - V.SF.Depravity = V.SF.Depravity || 0; - V.SF.Size = V.SF.Size || 0; - V.SF.Upgrade = V.SF.Upgrade || 0; - V.SF.Gift = V.SF.Gift || 0; - V.SF.UC.Assign = V.SF.UC.Assign || 0; - V.SF.UC.Lock = V.SF.UC.Lock || 0; - V.SF.UC.num = V.SF.UC.num || 0; - V.SF.ROE = V.SF.ROE || "hold"; - V.SF.Target = V.SF.Target || "recruit"; - V.SF.Regs = V.SF.Regs || "strict"; - V.SF.Caps = V.SF.Caps || "The Special Force"; - V.SF.Lower = V.SF.Lower || "the special force"; - - if (V.SF.Squad === undefined) V.SF.Squad = {}; - V.SF.Squad.Troops = V.SF.Squad.Troops || 40; - V.SF.Squad.Armoury = V.SF.Squad.Armoury || 0; - V.SF.Squad.Firebase = V.SF.Squad.Firebase || 0; - V.SF.Squad.AV = V.SF.Squad.AV || 0; - V.SF.Squad.TV = V.SF.Squad.TV || 0; - V.SF.Squad.Drones = V.SF.Squad.Drones || 0; - V.SF.Squad.Drugs = V.SF.Squad.Drugs || 0; - V.SF.Squad.PGT = V.SF.Squad.PGT || 0; - V.SF.Squad.AA = V.SF.Squad.AA || 0; - V.SF.Squad.TA = V.SF.Squad.TA || 0; - V.SF.Squad.SpacePlane = V.SF.Squad.SpacePlane || 0; - V.SF.Squad.GunS = V.SF.Squad.GunS || 0; - - if (V.SF.Squad.Satellite === undefined) V.SF.Squad.Satellite = {}; - V.SF.Squad.Satellite.lv = V.SF.Squad.Satellite.lv || 0; - V.SF.Squad.Satellite.InOrbit = V.SF.Squad.Satellite.InOrbit || 0; - V.SF.Squad.GiantRobot = V.SF.Squad.GiantRobot || 0; - V.SF.Squad.MissileSilo = V.SF.Squad.MissileSilo || 0; - V.SF.Squad.AircraftCarrier = V.SF.Squad.AircraftCarrier || 0; - V.SF.Squad.Sub = V.SF.Squad.HAT || 0; - - if (V.SF.Colonel === undefined) V.SF.Colonel = {}; - V.SF.Colonel.Core = V.SF.Colonel.Core || ""; - V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; - V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; - V.SF.Colonel.Status = V.SF.Colonel.Status || 0; - - if (V.SF.MercCon === undefined) V.SF.MercCon = {}; - V.SF.MercCon.History = V.SF.MercCon.History || 0; - V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || -2; - V.SF.MercCon.Income = V.SF.MercCon.Income || 0; - V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; - V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; - V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; - V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; - + if (passage() === "init" || passage() === "New Game Plus") V.SF = {Active: -1}; + V.SF.Toggle = V.SF.Toggle || 0; + V.SF.FS = V.SF.FS || {}; V.SF.FS.Tension = V.SF.FS.Tension || -1; - App.SF.AAR(0); + if (V.SF.Toggle && V.SF.Active >= 1) { + V.SF.UC = V.SF.UC || {}; + V.SF.Depravity = V.SF.Depravity || 0; + V.SF.Size = V.SF.Size || 0; + V.SF.Upgrade = V.SF.Upgrade || 0; + V.SF.Gift = V.SF.Gift || 0; + V.SF.UC.Assign = V.SF.UC.Assign || 0; + V.SF.UC.Lock = V.SF.UC.Lock || 0; + V.SF.UC.num = V.SF.UC.num || 0; + V.SF.ROE = V.SF.ROE || "hold"; + V.SF.Target = V.SF.Target || "recruit"; + V.SF.Regs = V.SF.Regs || "strict"; + V.SF.Caps = V.SF.Caps || "The Special Force"; + V.SF.Lower = V.SF.Lower || "the special force"; + + V.SF.Squad = V.SF.Squad || {}; + V.SF.Squad.Troops = V.SF.Squad.Troops || 40; + V.SF.Squad.Armoury = V.SF.Squad.Armoury || 0; + V.SF.Squad.Firebase = V.SF.Squad.Firebase || 0; + V.SF.Squad.AV = V.SF.Squad.AV || 0; + V.SF.Squad.TV = V.SF.Squad.TV || 0; + V.SF.Squad.Drones = V.SF.Squad.Drones || 0; + V.SF.Squad.Drugs = V.SF.Squad.Drugs || 0; + V.SF.Squad.PGT = V.SF.Squad.PGT || 0; + V.SF.Squad.AA = V.SF.Squad.AA || 0; + V.SF.Squad.TA = V.SF.Squad.TA || 0; + V.SF.Squad.SpacePlane = V.SF.Squad.SpacePlane || 0; + V.SF.Squad.GunS = V.SF.Squad.GunS || 0; + + V.SF.Squad.Satellite = V.SF.Squad.Satellite || {}; + V.SF.Squad.Satellite.lv = V.SF.Squad.Satellite.lv || 0; + V.SF.Squad.Satellite.InOrbit = V.SF.Squad.Satellite.InOrbit || 0; + V.SF.Squad.GiantRobot = V.SF.Squad.GiantRobot || 0; + V.SF.Squad.MissileSilo = V.SF.Squad.MissileSilo || 0; + V.SF.Squad.AircraftCarrier = V.SF.Squad.AircraftCarrier || 0; + V.SF.Squad.Sub = V.SF.Squad.sub || 0; + V.SF.Squad.HAT = V.SF.Squad.HAT || 0; + + V.SF.Colonel = V.SF.Colonel || {}; + V.SF.Colonel.Core = V.SF.Colonel.Core || ""; + V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; + V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; + V.SF.Colonel.Status = V.SF.Colonel.Status || 0; + + V.SF.MercCon = V.SF.MercCon || {}; + V.SF.MercCon.History = V.SF.MercCon.History || 0; + V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || -2; + V.SF.MercCon.Income = V.SF.MercCon.Income || 0; + V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; + V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; + V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; + V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; + + App.SF.AAR(0); + } // V.arcologies[0].SFRaid = 1; V.arcologies[0].SFRaidTarget = -1; /* if (typeof V.SF.Facility === "undefined") { V.SF.Facility = { @@ -260,62 +265,55 @@ App.SF.BC = function() { App.SF.Init(); } } else if (typeof V.SF === "object") { - if (V.SF.MercCon && V.SF.MercCon.View) { delete V.SF.MercCon.View; } - if (V.SF.UC === undefined) { - if (V.SF.SpecOps !== undefined && V.SF.SpecOpsLock !== undefined) { - V.SF.UC = {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}; - } else { - V.SF.UC = {Assign: 0, Lock: 0}; + App.SF.Init(); + + if (V.SF.MercCon !== undefined) { + if( V.SF.MercCon.View !== undefined) { + delete V.SF.MercCon.View; } - delete V.SF.SpecOps; - delete V.SF.SpecOpsLock; + if (V.SF.MercCon.Helots !== undefined) { + V.SF.MercCon.Menials = V.SF.MercCon.Helots; + delete V.SF.MercCon.Helots; + } + if (V.SF.MercCon.TotalHelots !== undefined) { + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; + delete V.SF.MercCon.TotalHelots; + } + } + + if (V.SF.SpecOps !== undefined && V.SF.SpecOpsLock !== undefined) { + V.SF.UC = {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}; } - if (V.SF.UC.num === undefined) { + delete V.SF.SpecOps; + delete V.SF.SpecOpsLock; + if (V.SFUC !== undefined) { V.SF.UC.num = V.SFUC || 0; } delete V.SFUC; - if (V.SF.Active === -1) { - App.SF.Init(); - } - if (V.SF.MWU) { + + if (V.SF.MWU !== undefined) { delete V.SF.MWU; } if (V.SpecOpsLock !== undefined) { V.SF.SpecOpsLock = V.SpecOpsLock; } delete V.SpecOpsLock; - if (V.SF.Upgrade === undefined) { + if (V.SF.U !== undefined) { V.SF.Upgrade = V.SF.U || 0; } delete V.SF.U; - if (V.SF.Gift === undefined) { + if (V.SF.WG !== undefined) { V.SF.Gift = V.SF.WG || 0; } delete V.SF.WG; - if (V.SF.MercCon === undefined) { - App.SF.Init(); - } - if (V.SF.MercCon.Helots !== undefined) { - V.SF.MercCon.Menials = V.SF.MercCon.Helots; - delete V.SF.MercCon.Helots; - } else { - V.SF.MercCon.Menials = 0; - } - if (V.SF.MercCon.TotalHelots !== undefined) { - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; - delete V.SF.MercCon.TotalHelots; - } else { - V.SF.MercCon.TotalMenials = 0; - } - if (V.SF.Bonus !== undefined) { delete V.SF.Bonus; } if (V.SF.Depravity < 0) { V.SF.Depravity = 0; } - if (V.SF.Size === undefined) { + if (V.SF.Units !== undefined) { V.SF.Size = V.SF.Units; } delete V.SF.Units; @@ -331,27 +329,14 @@ App.SF.BC = function() { V.SF.Colonel = V.SFColonel; } delete V.SFColonel; - if (V.SF.Squad.Satellite !== undefined && V.SatLaunched === undefined) { - V.SF.Squad.Sat = {lv: 0, InOrbit: 0}; + if (V.SF.Squad !== undefined && V.SF.Squad.Satellite !== undefined && V.SatLaunched !== undefined) { + V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: V.SatLaunched}; V.SF.Squad.Satellite = V.SF.Squad.Sat; delete V.SF.Squad.Sat; delete V.SatLaunched; delete V.SFUnit; } } - if (V.SF.Squad !== undefined && V.SF.Squad.Satellite.lv === undefined) { - V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: 0}; - V.SF.Squad.Satellite = V.SF.Squad.Sat; - delete V.SF.Squad.Sat; - } - // if (V.SF.Facility === undefined) App.SF.Init(); - if (V.SF.Squad.Satellite === undefined) { - V.SF.Squad.Satellite = {lv: 0, InOrbit: 0}; - } - if (V.SF.FS === undefined) { - V.SF.FS = {Tension: -1}; - } - if (V.SF.Toggle && V.SF.Active >= 1) App.SF.Init(); } InitClean(); MainClean(); @@ -1297,7 +1282,7 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) break; case 'Degradationism': if (textDisplay === -1 && V.SF.FS[FS_OPTIONS[i]].gift > 0) { - text += `\nDegredationism is all about belittling or destroying others' lives for one's own benefit, and you are proud to have granted The Colonel a direct manifestation of this powerful ideal via air power. The Colonel has been delivered her very own ALPHA-series STARSCREAM fighter-bomber aircraft. This flying behemoth is very difficult to manufacture, for it is designed to reach and dominate contested air spaces very quickly despite its massive weight and make rapid & precise bombing runs landings in tight urban environments despite its massive bulk. This variant of the ALPHA-series can rake in hundreds of casualties per minute with the help of its onboard targeting AI's, numerous swiveling autocannons & missile bays, and its wide onboard assortment of modern multi-munitions payloads for truly intensive carnage. Given its prestige, ease of use, and tremendous lethality, the Colonel has been known to occasionally use it to personally strike exposed enemy platoons in the field or sometimes even desperate refugees that get just a little too close to the Free City.\n`; + text += `\nDegradationism is all about belittling or destroying others' lives for one's own benefit, and you are proud to have granted The Colonel a direct manifestation of this powerful ideal via air power. The Colonel has been delivered her very own ALPHA-series STARSCREAM fighter-bomber aircraft. This flying behemoth is very difficult to manufacture, for it is designed to reach and dominate contested air spaces very quickly despite its massive weight and make rapid & precise bombing runs landings in tight urban environments despite its massive bulk. This variant of the ALPHA-series can rake in hundreds of casualties per minute with the help of its onboard targeting AI's, numerous swiveling autocannons & missile bays, and its wide onboard assortment of modern multi-munitions payloads for truly intensive carnage. Given its prestige, ease of use, and tremendous lethality, the Colonel has been known to occasionally use it to personally strike exposed enemy platoons in the field or sometimes even desperate refugees that get just a little too close to the Free City.\n`; } if (textDisplay === 5 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) { text += `\nFirebase cuisine is prepared with exceptional care; after all, human meat is no joke, and cannibalism in the Free Cities is a very controversial and esoteric topic as is. Regardless, the troops love the food they get, even after they learn the truth about the food they consume. As such the Firebase is one of the rare testbeds around the world for this daring new frontier of diet. `; @@ -1354,7 +1339,7 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) text += `\nDominance and Greed are sacrosanct in your Firebase, and this is making the "esprit de corps" very fearsome as the months pass by. This clan places great importance on the community's violence of action, and more personnel than ever are stacking the odds in their favor with close quarters combat regimens or advanced interrogation courses. Because of this, new recruits are accorded with hostility and careful scrutiny; the priority is weeding out aspirants too squeamish for the Firebase's good, and instilling ferocity and determination into those that are left. Staff and Soldiers alike are bound to their strict and highly competitive social totem poles, where esteem and respect comes strictly from each member's skills, kills, or wealth. Politeness and Compassion are seen as signs of weakness, of course. At the bottom of it all are the slaves; bar the Colonel and her top dogs, nearly everyone here is getting taken advantage of by those higher up, and thus everyone in need of a release valve for their rage will simply snatch up the nearest available slave. Therefore, unproved beatings, torturings, and rapings of the many slaves present are so common that they are ignored. At any time, one can see a few off duty veterans hazing the shit out of a new recruit. Over by the bars, two troopers are brawling in front of a jeering crowd, duking it out over some perceived slight or another. Elsewhere, a group of slaves is huddling together for warmth in the last few minutes of their sleep time. A predatory mindset has taken hold of the Firebase, and you doubt it will lt go anytime soon.\n`; } if (textDisplay === 100 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) { - text += `\nDegredationism: The Colonel is on the prowl; she is more reckless, impulsive, and aggressive than before, as if there is some demanding beast inside of her that she can't quite satisfy. Her personality itself hasn't changed; she speaks with you just as affably as before... Her actions are what's different: Prisoners of war, slave captives, and civilians are treated with no dignity at all, and she seems to greatly enjoy punishing her troops harshly for transgressions and failures. She still generously rewards successes, however.\n`; + text += `\nDegradationism: The Colonel is on the prowl; she is more reckless, impulsive, and aggressive than before, as if there is some demanding beast inside of her that she can't quite satisfy. Her personality itself hasn't changed; she speaks with you just as affably as before... Her actions are what's different: Prisoners of war, slave captives, and civilians are treated with no dignity at all, and she seems to greatly enjoy punishing her troops harshly for transgressions and failures. She still generously rewards successes, however.\n`; } break; case 'Physical_Idealism': @@ -2753,6 +2738,9 @@ App.SF.Count = function() { V.SF.Size = C(V.SF.Size, 0, T.max); T.T1 = 0; + T.SFSubsidy = 5000 * (1 + ((S.Troops / 100) + (V.SF.Size / 100))); + App.SF.NameCapsCheck(); + if (E > 100) { T.Env = 4; } else if (E > 67) { @@ -2764,33 +2752,33 @@ App.SF.Count = function() { if (V.SF.Size >= 30) { T.T1 = 1; } - T.SFSubsidy = 5000 * (1 + ((V.SF.Squad.Troops / 100) + (V.SF.Size / 100))); - App.SF.NameCapsCheck(); + if (V.SF.IntroProgress > -1) { delete V.SF.IntroProgress; } - if (V.SF.MercCon === undefined) { - App.SF.Init(); - } + if (V.SF.Size === T.max) { delete V.SF.Upgrade; } + if (V.SF.BadOutcome !== undefined) { delete V.SF.BadOutcome; } - if (V.SF.FS === undefined) { - V.SF.FS = {Tension: -1}; - } - if (V.SF.tour === undefined) { + + if (V.Tour !== undefined) { V.SF.tour = V.Tour || 0; + delete V.Tour; } - delete V.Tour; + V.SF.tour = V.SF.tour || 0; + if (V.arcologies[0].SFRaid !== undefined) { delete V.arcologies[0].SFRaid; } + if (V.arcologies[0].SFRaidTarget !== undefined) { delete V.arcologies[0].SFRaidTarget; } + if (V.SF.Facility !== undefined) { delete V.SF.Facility; } @@ -2816,7 +2804,7 @@ App.SF.UpgradeCost = function(cost, unit) { return Math.ceil(value); }; -window.progress = function(x, max) { +App.SF.progress = function(x, max) { "use strict"; let out = `⏐`, z, i; diff --git a/src/SpecialForce/Upgrades.tw b/src/SpecialForce/Upgrades.tw index b9b91790c0a8d8dfc481d1f761f59f1c550c4159..bf1659e52816786f336b22b4caa42df033e38549 100644 --- a/src/SpecialForce/Upgrades.tw +++ b/src/SpecialForce/Upgrades.tw @@ -1,7 +1,8 @@ :: Upgrades [nobr] + <br><br> <<if $SF.Size !== _max>> - Total upgrade progress: <<print progress($SF.Size,_max)>> $SF.Size/_max(<<print ($SF.Size/_max).toFixed(2)*100>>%) <<if $SF.Size < 30>> <br>//<<print (30-$SF.Size )>> more upgrades is needed until the next tier unlocks.// <</if>> + Total upgrade progress: <<print App.SF.progress($SF.Size,_max)>> $SF.Size/_max(<<print ($SF.Size/_max).toFixed(2)*100>>%) <<if $SF.Size < 30>> <br>//<<print (30-$SF.Size )>> more upgrades is needed until the next tier unlocks.// <</if>> <<else>> There are no more upgrades available. <</if>> @@ -21,7 +22,7 @@ <<else>> //Cannot afford to upgrade the Firebase.// <</if>> - //Costs @@.red;<<print cashFormat(_cF)>>@@// <span style="float:right;"> <<print progress($SF.Squad.Firebase)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cF)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Firebase)>> </span> <br> <<elseif $SF.Squad.Firebase === _FU>> //The Firebase has been fully upgraded.// <br> <</if>> @@ -33,7 +34,7 @@ <<else>> //Cannot afford to upgrade the Armory.// <</if>> - //Costs @@.red;<<print cashFormat(_cA)>>@@// <span style="float:right;"> <<print progress($SF.Squad.Armoury)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Armoury)>> </span> <br> <<elseif $SF.Squad.Armoury === _AU>> //The Armory has been fully upgraded.// <br> <</if>> @@ -45,7 +46,7 @@ <<else>> //Cannot afford to upgrade the Drug Lab.// <</if>> - //Costs @@.red;<<print cashFormat(_cDrugs)>>@@// <span style="float:right;"> <<print progress($SF.Squad.Drugs)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cDrugs)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Drugs)>> </span> <br> <<elseif $SF.Squad.Drugs === _DrugsU>> //The Drug Lab has been fully upgraded.// <br> <</if>> @@ -57,7 +58,7 @@ <<else>> //Cannot afford to upgrade the Drone Bay.// <</if>> - //Costs @@.red;<<print cashFormat(_cDrones)>>@@// <span style="float:right;"> <<print progress($SF.Squad.Drones)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cDrones)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Drones)>> </span> <br> <<elseif $SF.Squad.Drones === _DU>> //The Drone Bay has been fully upgraded.// <br> <</if>> @@ -71,7 +72,7 @@ <<else>> //Cannot afford to upgrade the Attack Vehicle Fleet.// <</if>> - //Costs @@.red;<<print cashFormat(_cAV)>>@@// <span style="float:right;"> <<print progress($SF.Squad.AV)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cAV)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.AV)>> </span> <br> <<elseif $SF.Squad.AV === _AVU>> //The Attack Vehicle Fleet has been fully upgraded.// <br> <</if>> @@ -85,7 +86,7 @@ <<else>> //Cannot afford to upgrade Transport Vehicle Fleet.// <</if>> - //Costs @@.red;<<print cashFormat(_cTV)>>@@// <span style="float:right;"> <<print progress($SF.Squad.TV)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cTV)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.TV)>> </span> <br> <<elseif $SF.Squad.TV === _TVU>> //The Transport Vehicle Fleet has been fully upgraded.// <br> <</if>> @@ -99,9 +100,9 @@ <<else>> //Cannot afford to upgrade Prototype Goliath Tank.// <</if>> - //Costs @@.red;<<print cashFormat(_cPGT)>>@@// <span style="float:right;"> <<print progress($SF.Squad.PGT)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cPGT)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.PGT)>> </span> <br> <<elseif $SF.Squad.PGT === _PGTU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.PGT)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.PGT)>> </span> <br> <<elseif $SF.Squad.PGT === _PGTU>> //The Prototype Goliath Tank has been fully upgraded.// <br> <</if>> @@ -117,7 +118,7 @@ <<else>> //Cannot afford to upgrade Attack Aircraft Fleet.// <</if>> - //Costs @@.red;<<print cashFormat(_cAA)>>@@// <span style="float:right;"> <<print progress($SF.Squad.AA)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cAA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.AA)>> </span> <br> <<elseif $SF.Squad.AA === _AAU>> //The Attack Aircraft Fleet has been fully upgraded.// <br> <</if>> @@ -131,7 +132,7 @@ <<else>> //Cannot afford to upgrade the Transport Aircraft Fleet.// <</if>> - //Costs @@.red;<<print cashFormat(_cTA)>>@@// <span style="float:right;"> <<print progress($SF.Squad.TA)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cTA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.TA)>> </span> <br> <<elseif $SF.Squad.TA === _TAU>> //The Transport Aircraft Fleet has been fully upgraded.// <br> <</if>> @@ -145,9 +146,9 @@ <<else>> //Cannot afford to upgrade the Spaceplane.// <</if>> - //Costs @@.red;<<print cashFormat(_cSP)>>@@//<span style="float:right;"> <<print progress($SF.Squad.SpacePlane)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cSP)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.SpacePlane)>> </span> <br> <<elseif $SF.Squad.SpacePlane === _SPU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.SpacePlane)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.SpacePlane)>> </span> <br> <<elseif $SF.Squad.SpacePlane === _SPU>> //The Spaceplane has been fully upgraded.// <br> <</if>> @@ -161,9 +162,9 @@ <<else>> //Cannot afford to upgrade Gunship.// <</if>> - //Costs @@.red;<<print cashFormat(_cGunS)>>@@//<span style="float:right;"> <<print progress($SF.Squad.GunS)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cGunS)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GunS)>> </span> <br> <<elseif $SF.Squad.GunS === _GunSU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.GunS)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GunS)>> </span> <br> <<elseif $SF.Squad.GunS === _GunSU>> //The Gunship has been fully upgraded.// <br> <</if>> @@ -179,9 +180,9 @@ <<else>> //Cannot afford to upgrade Satellite.// <</if>> - //Costs @@.red;<<print cashFormat(_cSat)>>@@//<span style="float:right;"> <<print progress($SF.Squad.Satellite.lv)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cSat)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Satellite.lv)>> </span> <br> <<elseif $SF.Squad.Satellite.lv === _SatU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.Satellite.lv)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Satellite.lv)>> </span> <br> <<else>> //The Satellite has been fully upgraded.// <br> <</if>> @@ -196,9 +197,9 @@ <<else>> //Cannot afford to upgrade the Giant Robot.// <</if>> - //Costs @@.red;<<print cashFormat(_cGR)>>@@//<span style="float:right;"> <<print progress($SF.Squad.GiantRobot)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cGR)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GiantRobot)>> </span> <br> <<elseif $SF.Squad.GiantRobot === _GRU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.GiantRobot)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GiantRobot)>> </span> <br> <<else>> //The Giant Robot has been fully upgraded.// <br> <</if>> @@ -212,9 +213,9 @@ <<else>> //Cannot afford to upgrade Cruise Missile.// <</if>> - //Costs @@.red;<<print cashFormat(_cMS)>>@@//<span style="float:right;"> <<print progress($SF.Squad.MissileSilo)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cMS)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.MissileSilo)>> </span> <br> <<elseif $SF.Squad.MissileSilo === _MSU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.MissileSilo)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.MissileSilo)>> </span> <br> <<else>> //The Cruise Missile has been fully upgraded.// <br> <</if>> @@ -230,9 +231,9 @@ <<else>> //Cannot afford to upgrade Aircraft Carrier.// <</if>> - //Costs @@.red;<<print cashFormat(_cAC)>>@@//<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span> <br> + //Costs @@.red;<<print cashFormat(_cAC)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.AircraftCarrier)>> </span> <br> <<elseif $SF.Squad.AircraftCarrier === _ACU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.AircraftCarrier)>> </span> <br> <<else>> //The Aircraft Carrier has been fully upgraded.// <br> <</if>> @@ -246,9 +247,9 @@ <<else>> //Cannot afford to upgrade Submarine// <</if>> - //Costs @@.red;<<print cashFormat(_cSub)>>@@//<span style="float:right;"> <<print progress($SF.Squad.Sub)>> </span> + //Costs @@.red;<<print cashFormat(_cSub)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Sub)>> </span> <<elseif $SF.Squad.Sub === _SubU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.Sub)>> </span> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Sub)>> </span> <<else>> //The Submarine has been fully upgraded.// <br> <</if>> @@ -262,9 +263,9 @@ <<else>> //Cannot afford to upgrade Amphibious Transport.// <</if>> - //Costs @@.red;<<print cashFormat(_cHAT)>>@@//<span style="float:right;"> <<print progress($SF.Squad.HAT)>> </span> + //Costs @@.red;<<print cashFormat(_cHAT)>>@@//<span style="float:right;"> <<print App.SF.progress($SF.Squad.HAT)>> </span> <<elseif $SF.Squad.HAT === _HATU && $PC.warfare < 75>> - //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.HAT)>> </span> <br> + //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.HAT)>> </span> <br> <<else>> //The Amphibious Transport has been fully upgraded.// <br> <</if>> diff --git a/src/SpecialForce/WeeklyChoices.tw b/src/SpecialForce/WeeklyChoices.tw index 6456bc9a421ca7d1047b54412a48b8d5d9ab888e..3452dad0f8a196eb5b5fcd72348c465f809733e5 100644 --- a/src/SpecialForce/WeeklyChoices.tw +++ b/src/SpecialForce/WeeklyChoices.tw @@ -83,8 +83,8 @@ Your minor skill in warfare convinces the Colonel that <<if $Bodyguard != 0>>in addition to $Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers and an armored car escort for a simple walk around the arcology. <<else>> Your complete lack of combat skill convinces the Colonel that <<if $Bodyguard != 0>>in addition to $Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers, an armored car escort, and a sniper overwatch for a simple walk around the arcology. - <</if>> - + <</if>> + <br>As you make your way through the arcology you stop at a <<if $arcologies[0].FSPaternalist != "unset">> paternalist shop, <<if $SF.Colonel.Core == "cruel">>earning a sneer from the Colonel.<<else>>helping the Colonel select some luxurious and relaxing slave treatments.<</if>> diff --git a/src/cheats/mod_EditNeighborArcologyCheatWidget.tw b/src/cheats/mod_EditNeighborArcologyCheatWidget.tw index 2143602b253485603f15ed60da71da1a418778ac..25012d357518216583f7c641e53f914cb706bd0b 100644 --- a/src/cheats/mod_EditNeighborArcologyCheatWidget.tw +++ b/src/cheats/mod_EditNeighborArcologyCheatWidget.tw @@ -1,7 +1,7 @@ :: MOD_Edit Neighbor Arcology Cheat Widget [widget nobr] /% - Call as <<EditNeighborCheat>> +Call as <<EditNeighborCheat>> %/ <<widget "EditNeighborCheat">> <<set _i = $args[0]>> diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index fa223b5be6c9182c68152081be0e5293ce01366e..409f750c85f5c249365391899dc97ef0919372a7 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -23,9 +23,7 @@ window.saChoosesOwnClothes = (function() { V = State.variables; player = V.PC; r = ""; - if (slave.choosesOwnClothes !== 1) { - return r; - } + if (slave.choosesOwnClothes !== 1) { return r; } pronouns = getPronouns(slave); he = pronouns.pronoun; him = pronouns.object; @@ -221,8 +219,7 @@ window.saChoosesOwnClothes = (function() { } else { if (V.arcologies[0].FSChattelReligionist > 0) { clothing.push({text: `and wears a chattel habit to conform to your arcology's culture.`, clothes: "a chattel habit"}); - /* Chooses clothes according to assignment (no exceptions)*/ - } else if (slave.assignment === "be the Nurse") { + } else if (slave.assignment === "be the Nurse") { /* Chooses clothes according to assignment (no exceptions)*/ if (slave.energy > 95 || slave.need > 100) { wardrobeAssignment.push({text: `and wears a slutty nurse outfit to make it clear just how much this nurse needs ${his} daily lay.`, clothes: "a slutty nurse outfit"}); } else if (slave.energy > 80) { diff --git a/src/facilities/arcade/arcadeFramework.js b/src/facilities/arcade/arcadeFramework.js index 94a45cb9507cf7c2ba5be7ede767095e94d08d2d..1b171533a51691353348a57c554d82f4cd7ee2e8 100644 --- a/src/facilities/arcade/arcadeFramework.js +++ b/src/facilities/arcade/arcadeFramework.js @@ -28,7 +28,7 @@ App.Entity.Facilities.ArcadeJob = class extends App.Entity.Facilities.FacilitySi } }; -App.Entity.facilities.arcade = new App.Entity.Facilities.Facility( +App.Entity.facilities.arcade = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.arcade, { assignee: new App.Entity.Facilities.ArcadeJob() diff --git a/src/facilities/armory/armoryFramework.js b/src/facilities/armory/armoryFramework.js index a29228bbf9599e64ba131ebac90ee4636bfb22f2..a7ce091028e44c676b1103707404b889e520190e 100644 --- a/src/facilities/armory/armoryFramework.js +++ b/src/facilities/armory/armoryFramework.js @@ -20,6 +20,6 @@ App.Data.Facilities.armory = { } }; -App.Entity.facilities.armory = new App.Entity.Facilities.Facility( +App.Entity.facilities.armory = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.armory ); diff --git a/src/facilities/brothel/brothelFramework.js b/src/facilities/brothel/brothelFramework.js index f473d68dfdb6e67e68adda358543d1f6f99b9e5a..1b36b3c1fd13492799ac7a68395b311632a5b3fb 100644 --- a/src/facilities/brothel/brothelFramework.js +++ b/src/facilities/brothel/brothelFramework.js @@ -29,6 +29,7 @@ App.Data.Facilities.brothel = { App.Entity.Facilities.BrothelJob = class extends App.Entity.Facilities.FacilitySingleJob { /** + * @override * @param {App.Entity.SlaveState} slave * @returns {string[]} */ @@ -41,6 +42,11 @@ App.Entity.Facilities.BrothelJob = class extends App.Entity.Facilities.FacilityS } return r; } + + /** @private @override */ + get _employeeIDsVariableName() { + return "BrothiIDs"; + } }; App.Entity.Facilities.MadamJob = class extends App.Entity.Facilities.ManagingJob { @@ -57,7 +63,7 @@ App.Entity.Facilities.MadamJob = class extends App.Entity.Facilities.ManagingJob } }; -App.Entity.facilities.brothel = new App.Entity.Facilities.Facility( +App.Entity.facilities.brothel = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.brothel, { assignee: new App.Entity.Facilities.BrothelJob() diff --git a/src/facilities/cellblock/cellblockFramework.js b/src/facilities/cellblock/cellblockFramework.js index e6842c356dac68e339eb9b5e9b6bf496695d5ed0..d046dd39b9b16c5282640702e6599957c5918764 100644 --- a/src/facilities/cellblock/cellblockFramework.js +++ b/src/facilities/cellblock/cellblockFramework.js @@ -42,9 +42,14 @@ App.Entity.Facilities.CellblockJob = class extends App.Entity.Facilities.Facilit return r; } + + /** @private @override */ + get _employeeIDsVariableName() { + return "CellBiIDs"; + } }; -App.Entity.facilities.cellblock = new App.Entity.Facilities.Facility( +App.Entity.facilities.cellblock = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.cellblock, { assignee: new App.Entity.Facilities.CellblockJob() diff --git a/src/facilities/clinic/clinicFramework.js b/src/facilities/clinic/clinicFramework.js index 8a434b156811e41d74ce17f1928c6459e907ac8a..676e9956afd0de0e7b63e247ef91acc32b689c78 100644 --- a/src/facilities/clinic/clinicFramework.js +++ b/src/facilities/clinic/clinicFramework.js @@ -47,7 +47,7 @@ App.Entity.Facilities.ClinicPatientJob = class extends App.Entity.Facilities.Fac } }; -App.Entity.facilities.clinic = new App.Entity.Facilities.Facility( +App.Entity.facilities.clinic = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.clinic, { patient: new App.Entity.Facilities.ClinicPatientJob() diff --git a/src/facilities/club/clubFramework.js b/src/facilities/club/clubFramework.js index f6ae8529c44c0b32305989bb2498c0f0a1ccf3a4..d797c0a2a3cafc087fa6a46178b6e1086c82263a 100644 --- a/src/facilities/club/clubFramework.js +++ b/src/facilities/club/clubFramework.js @@ -55,7 +55,7 @@ App.Entity.Facilities.ClubDJJob = class extends App.Entity.Facilities.ManagingJo } }; -App.Entity.facilities.club = new App.Entity.Facilities.Facility( +App.Entity.facilities.club = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.club, { slut: new App.Entity.Facilities.ClubSlutJob() diff --git a/src/facilities/dairy/dairyFramework.js b/src/facilities/dairy/dairyFramework.js index bc9610fba9387d227043668f8288ddecdd1b4035..0aaf95e3fa6459219f0717b9f5aafdaa5ded4a61 100644 --- a/src/facilities/dairy/dairyFramework.js +++ b/src/facilities/dairy/dairyFramework.js @@ -71,7 +71,7 @@ App.Entity.Facilities.DairyCowJob = class extends App.Entity.Facilities.Facility } }; -App.Entity.Facilities.Dairy = class extends App.Entity.Facilities.Facility { +App.Entity.Facilities.Dairy = class extends App.Entity.Facilities.SingleJobFacility { constructor() { super(App.Data.Facilities.dairy, { diff --git a/src/facilities/farmyard/farmerSelect.tw b/src/facilities/farmyard/farmerSelect.tw index 13c285477727f7eb52709eab86b1b3ee31301f06..0ba102d974ca9897a6603d2920c634332c32698b 100644 --- a/src/facilities/farmyard/farmerSelect.tw +++ b/src/facilities/farmyard/farmerSelect.tw @@ -1,7 +1,6 @@ :: Farmer Select [nobr] <<set $nextButton = "Back", $nextLink = "Farmyard", $showEncyclopedia = 1, $encyclopedia = "Farmer">> -<<showallAssignmentFilter>> <<if ($Farmer != 0)>> <<set $Farmer = getSlave($Farmer.ID)>> <<setLocalPronouns $Farmer>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Farmer from your obedient slaves:'' <br><br>[[None|Farmer Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.farmyard)>> diff --git a/src/facilities/farmyard/farmyard.tw b/src/facilities/farmyard/farmyard.tw index ff47e477539b9191d95a20226e4a05477775b560..a731363f184b18d0dc96099b8448bfa1509020b6 100644 --- a/src/facilities/farmyard/farmyard.tw +++ b/src/facilities/farmyard/farmyard.tw @@ -11,7 +11,6 @@ <<set _CL = $canines.length, _HL = $hooved.length, _FL = $felines.length>> -<<farmyardAssignmentFilter>> $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and concrete that is $arcologies[0].name. Animals are kept in pens, tended to by your slaves, while <<if $farmyardUpgrade.hydroponics == 1>>rows of hydroponics equipment<<else>>makeshift fields<</if>> grow crops. <<switch $farmyardDecoration>> <<case "Roman Revivalist">> @@ -163,7 +162,7 @@ $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and <</if>> <<if $farmMenialsSpace > 0>> - <<silently>><<= MenialPopCap()>><</silently>> + <<run MenialPopCap()>> <<set _menialPrice = menialSlaveCost()>> <<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> <<if $cash > _menialPrice>> @@ -462,52 +461,7 @@ $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and </span> <br><hr><br> -<<if $Farmer != 0>> -<<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a Farmer. [[Appoint one|Farmer Select]] -<</if>> -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($farmyard <= $farmyardSlaves)>> - ''$farmyardNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $farmyardSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $farmyardSlaves > 0>> - <<farmyardAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$farmyardNameCaps is empty for the moment.// - <</if>> - </div> -</div> - -<<if ($tabChoice.Farmyard == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.farmyard)>> <br><br>Rename $farmyardName: <<textbox "$farmyardName" $farmyardName "Farmyard">> //Use a noun or similar short phrase// diff --git a/src/facilities/farmyard/farmyardFramework.js b/src/facilities/farmyard/farmyardFramework.js index d5075570cdfb6dfcea0cac080d183bfa5560a482..3d7496571ae1ad1b7bbf4cd3c6f9ca2c11ba3386 100644 --- a/src/facilities/farmyard/farmyardFramework.js +++ b/src/facilities/farmyard/farmyardFramework.js @@ -27,6 +27,6 @@ App.Data.Facilities.farmyard = { } }; -App.Entity.facilities.farmyard = new App.Entity.Facilities.Facility( +App.Entity.facilities.farmyard = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.farmyard ); diff --git a/src/facilities/headGirlSuite/headGirlSuiteFramework.js b/src/facilities/headGirlSuite/headGirlSuiteFramework.js index fc8270e292afa40613c3e4ffb858c75875d62fd0..7e1827b931885d821eb9be949e48ca53b30d9afd 100644 --- a/src/facilities/headGirlSuite/headGirlSuiteFramework.js +++ b/src/facilities/headGirlSuite/headGirlSuiteFramework.js @@ -27,6 +27,6 @@ App.Data.Facilities.headGirlSuite = { } }; -App.Entity.facilities.headGirlSuite = new App.Entity.Facilities.Facility( +App.Entity.facilities.headGirlSuite = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.headGirlSuite ); diff --git a/src/facilities/masterSuite/masterSuiteFramework.js b/src/facilities/masterSuite/masterSuiteFramework.js index 640ea2361bc4e4302e961d0d5d2ef9732934610c..e2cd09cac5bb4ff3b4999e5d439505fe3f55d507 100644 --- a/src/facilities/masterSuite/masterSuiteFramework.js +++ b/src/facilities/masterSuite/masterSuiteFramework.js @@ -40,6 +40,10 @@ App.Entity.Facilities.MasterSuiteFuckToyJob = class extends App.Entity.Facilitie return r; } + + get _employeeIDsVariableName() { + return "MastSiIDs"; + } }; App.Entity.Facilities.ConcubineJob = class extends App.Entity.Facilities.ManagingJob { @@ -52,7 +56,7 @@ App.Entity.Facilities.ConcubineJob = class extends App.Entity.Facilities.Managin } }; -App.Entity.facilities.masterSuite = new App.Entity.Facilities.Facility( +App.Entity.facilities.masterSuite = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.masterSuite, { fucktoy: new App.Entity.Facilities.MasterSuiteFuckToyJob() diff --git a/src/facilities/nursery/childInteract.tw b/src/facilities/nursery/childInteract.tw index 1f61401755fb1d0e9b442473efca4df611a0d00b..6b173d6bb1f222c0188756610b46576e1c07aa02 100644 --- a/src/facilities/nursery/childInteract.tw +++ b/src/facilities/nursery/childInteract.tw @@ -8,7 +8,7 @@ <<setLocalPronouns $activeChild>> <<run Enunciate($activeChild)>> /* TODO: the encyclopedia will most likely need to be updated for children as well */ -<<set $encyclopedia = either("Drugs and Their Effects", "From Rebellious to Devoted", "Costs Summary", "Disease in the Free Cities", "Slave Couture", "Nymphomania", "Gender", "Independent Slaves", "Modern Anal")>> +<<set $encyclopedia = either("Costs Summary", "Disease in the Free Cities", "Drugs and Their Effects", "From Rebellious to Devoted", "Gender", "Independent Slaves", "Modern Anal", "Nymphomania", "Slave Couture")>> <<if $activeChild.dick > 0>><<set $showEncyclopedia = 1, $encyclopedia = "Gender">><</if>> <center> diff --git a/src/facilities/nursery/matronSelect.tw b/src/facilities/nursery/matronSelect.tw index a51bca44fa9ec762d41b38c9adaadc5312e6a208..a6d934a53ca0b954bf38d2b4bc03df3ff6241cb0 100644 --- a/src/facilities/nursery/matronSelect.tw +++ b/src/facilities/nursery/matronSelect.tw @@ -1,7 +1,6 @@ :: Matron Select [nobr] <<set $nextButton = "Back", $nextLink = "Nursery", $showEncyclopedia = 1, $encyclopedia = "Matron">> -<<showallAssignmentFilter>> <<if ($Matron != 0)>> <<set $Matron = getSlave($Matron.ID)>> <<setLocalPronouns $Matron>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Matron from your devoted slaves:'' <br><br>[[None|Matron Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.nursery)>> diff --git a/src/facilities/nursery/nursery.tw b/src/facilities/nursery/nursery.tw index 715258fee35ae053ec813070f6fe09fd5651e5cb..567bf19cda7aefd74a63b225e0c33650e093500b 100644 --- a/src/facilities/nursery/nursery.tw +++ b/src/facilities/nursery/nursery.tw @@ -1,6 +1,6 @@ :: Nursery [nobr] -<<set $nextButton = "Back to Main", $nextLink = "Main", $returnTo = "Nursery", $showEncyclopedia = 1, $encyclopedia = "Nursery", $nurserySlaves = $NurseryiIDs.length, $SlaveSummaryFiler = "assignable">> +<<set $nextButton = "Back to Main", $nextLink = "Main", $returnTo = "Nursery", $showEncyclopedia = 1, $encyclopedia = "Nursery", $nurserySlaves = $NurseryiIDs.length>> <<set $targetAgeNursery = Number($targetAgeNursery) || $minimumSlaveAge>> <<set $targetAgeNursery = Math.clamp($targetAgeNursery, $minimumSlaveAge, 42)>> @@ -10,7 +10,6 @@ <<set $nurseryBabies = $cribs.length, $freeCribs = $nursery - $nurseryBabies, _SL = $slaves.length, _eligibility = 0, $reservedChildren = FetusGlobalReserveCount("incubator"), $reservedChildrenNursery = FetusGlobalReserveCount("nursery")>> -<<nurseryAssignmentFilter>> $nurseryNameCaps <<switch $nurseryDecoration>> <<case "Roman Revivalist">> @@ -117,52 +116,7 @@ $nurseryNameCaps <</if>> <br><br> -<<if $Matron != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a Matron. [[Appoint one|Matron Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $nurserySlaves > 0>> - <<nurseryAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$nurseryNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($nurseryNannies <= $nurserySlaves)>> - ''$nurseryNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $nurserySlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Nursery == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.nursery)>> <br><br>It can support $nursery child<<if $nursery != 1>>ren<</if>>. There <<if $nurseryBabies == 1>>is<<else>>are<</if>> currently $nurseryBabies room<<if $nurseryBabies != 1>>s<</if>> in use in $nurseryName. <<if $nursery < 50>> @@ -385,9 +339,9 @@ Reserve an eligible mother-to-be's child to be placed in a room upon birth. Of $ <br><br> Target age for release: <<textbox "$targetAgeNursery" $targetAgeNursery "Nursery">> [[Minimum Legal Age|Nursery][$targetAgeNursery = $minimumSlaveAge]] - | [[Average Age of Fertility|Nursery][$targetAgeNursery = $fertilityAge]] - | [[Average Age of Potency|Nursery][$targetAgeNursery = $potencyAge]] - | [[Legal Adulthood|Nursery][$targetAgeNursery = 18]] +| [[Average Age of Fertility|Nursery][$targetAgeNursery = $fertilityAge]] +| [[Average Age of Potency|Nursery][$targetAgeNursery = $potencyAge]] +| [[Legal Adulthood|Nursery][$targetAgeNursery = 18]] //Setting will not be applied to rooms in use.// /*TODO: Rework these buttons to allow management that makes sense*/ @@ -487,8 +441,8 @@ Target age for release: <<textbox "$targetAgeNursery" $targetAgeNursery "Nursery <body> <div class="tab"> - <button class="tablinks" onclick="opentab(event, 'resting')">Resting</button> - <button class="tablinks" onclick="opentab(event, 'all')" id="defaultButton">All</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'resting')">Resting</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'all')" id="defaultButton">All</button> </div> <div id="resting" class="tabcontent"> @@ -508,7 +462,7 @@ Target age for release: <<textbox "$targetAgeNursery" $targetAgeNursery "Nursery </div> <script> - function opentab(evt, tabName) { + function App.UI.tabbar.openTab(evt, tabName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("tabcontent"); for (i = 0; i < tabcontent.length; i++) { diff --git a/src/facilities/nursery/nurseryFramework.js b/src/facilities/nursery/nurseryFramework.js index ec47485e7ac99e5180b424baf8a073caebb019eb..563c74245b26aa3bee87c3978ecd6e060c25f939 100644 --- a/src/facilities/nursery/nurseryFramework.js +++ b/src/facilities/nursery/nurseryFramework.js @@ -43,7 +43,7 @@ App.Entity.Facilities.NurseryNannyJob = class extends App.Entity.Facilities.Faci } }; -App.Entity.facilities.nursery = new App.Entity.Facilities.Facility( +App.Entity.facilities.nursery = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.nursery, { nanny: new App.Entity.Facilities.NurseryNannyJob() diff --git a/src/facilities/nursery/nurseryReport.tw b/src/facilities/nursery/nurseryReport.tw index cf6603bfa0bd969f8cb6cb72ba0f655ac76c4ebd..625ee08ab13cd3a2515b1dd454ce48227cc1430a 100644 --- a/src/facilities/nursery/nurseryReport.tw +++ b/src/facilities/nursery/nurseryReport.tw @@ -95,7 +95,7 @@ ''<<if (_NL > 1)>>There are _NL slaves<<else>>There is one slave<</if>> resting and recuperating in the nursery.'' <<if ($arcologies[0].FSHedonisticDecadence > 0) && (_NL == 0)>> Society @@.green;approves@@ of your slaves being pampered this way, greatly advancing your laid back culture. - <<= FSChange("Hedonism", 1)>> + <<= FutureSocieties.Change("Hedonistic", 1)>> <</if>> <</if>> diff --git a/src/facilities/nursery/nurseryWorkaround.tw b/src/facilities/nursery/nurseryWorkaround.tw index 0a0cfd46d6f934bb7c94584079f7af039a036a1d..2a06020421d630cb9177aa88d6afdc1c412fb726 100644 --- a/src/facilities/nursery/nurseryWorkaround.tw +++ b/src/facilities/nursery/nurseryWorkaround.tw @@ -150,7 +150,7 @@ <</replace>> <</link>> <<elseif _tempMom.ID == $HeadGirl.ID>> - <br><<link "Permit your headgirl to name _his2 daughter">> + <br><<link "Permit your Head Girl to name _his2 daughter">> <<replace "#naming">> <<ParentNames _tempMom $activeSlave>> <<set $activeSlave.birthName = $activeSlave.slaveName>> @@ -209,7 +209,7 @@ <</replace>> <</link>> <<elseif _tempDad.ID == $HeadGirl.ID>> - <br><<link "Permit your headgirl to name _his2 daughter">> + <br><<link "Permit your Head Girl to name _his2 daughter">> <<replace "#naming">> <<ParentNames _tempDad $activeSlave>> <<set $activeSlave.birthName = $activeSlave.slaveName>> diff --git a/src/facilities/penthouse/penthouseFramework.js b/src/facilities/penthouse/penthouseFramework.js index 686669d7aed2528dcfeef7c603741c8061608908..0b4403e8d697b3361bbe922b3a6e8b776a07dd73 100644 --- a/src/facilities/penthouse/penthouseFramework.js +++ b/src/facilities/penthouse/penthouseFramework.js @@ -9,6 +9,12 @@ App.Data.Facilities.penthouse = { publicSexUse: false, fuckdollAccepted: false }, + chooseOwn: { + position: "Choose own", + assignment: "choose her own job", + publicSexUse: false, + fuckdollAccepted: false + }, fucktoy: { position: "Fucktoy", assignment: "please you", @@ -81,9 +87,25 @@ App.Data.Facilities.penthouse = { requiredDevotion: 51 } }; - App.Entity.Facilities.PenthouseJob = class extends App.Entity.Facilities.Job { + /** + * @override + * @returns {number[]} */ + employeesIndices() { + const employees = State.variables.JobIDArray[this.desc.assignment]; + if (!employees) { return []; } + const si = State.variables.slaveIndices; + return employees.map(id => si[id]); + } + /** + * @override + * @returns {App.Entity.SlaveState[]} + */ + employees() { + const slaves = State.variables.slaves; + return this.employeesIndices().map(idx => slaves[idx]); + } }; App.Entity.Facilities.PenthouseJobs = { @@ -156,7 +178,7 @@ App.Entity.Facilities.Penthouse = class extends App.Entity.Facilities.Facility { classes: new App.Entity.Facilities.PenthouseJobs.Classes(), houseServant: new App.Entity.Facilities.PenthouseJobs.HouseServant(), subordinateSlave: new App.Entity.Facilities.PenthouseJobs.SubordinateSlave(), - cow: new App.Entity.Facilities.PenthouseJobs.Cow() + cow: new App.Entity.Facilities.PenthouseJobs.Cow(), }); } @@ -171,6 +193,36 @@ App.Entity.Facilities.Penthouse = class extends App.Entity.Facilities.Facility { get hostedSlaves() { return State.variables.dormitoryPopulation; } + + /** + * + * @param {App.Entity.SlaveState} slave + * @returns {boolean} + */ + isHosted(slave) { + return slave.assignmentVisible === 1; + } + + /** + * all slaves that are at the penthouse + * @returns {App.Entity.SlaveState[]} + */ + employees() { + return State.variables.slaves.filter( s => s.assignmentVisible === 1); + } + + /** + * Indices in the slaves array for all slaves that are at the penthouse + * @returns {number[]} + */ + employeesIndices() { + return State.variables.slaves.reduce( + (acc, cur, idx) => { if (cur.assignmentVisible === 1) { acc.push(idx); } return acc; }, []); + } + + _createJob() { + return new App.Entity.Facilities.PenthouseJob(); + } }; App.Entity.facilities.penthouse = new App.Entity.Facilities.Penthouse(); diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js index cffe4e9e00ec770663e394fd135c2961d32ff518..42bec475f68033b5856c16efad19db8c024fc68e 100644 --- a/src/facilities/pit/pitFramework.js +++ b/src/facilities/pit/pitFramework.js @@ -35,9 +35,15 @@ App.Entity.Facilities.PitFighterJob = class extends App.Entity.Facilities.Facili isEmployed(slave) { return State.variables.fighterIDs.includes(slave.ID); } + + employeesIndices() { + const V = State.variables; + const si = V.slaveIndices; + return V.fighterIDs.map(id => si[id]); + } }; -App.Entity.Facilities.Pit = class extends App.Entity.Facilities.Facility { +App.Entity.Facilities.Pit = class extends App.Entity.Facilities.SingleJobFacility { constructor() { super(App.Data.Facilities.pit, { @@ -45,8 +51,12 @@ App.Entity.Facilities.Pit = class extends App.Entity.Facilities.Facility { }); } + get capacity() { + return State.variables[this.desc.baseName] > 0 ? Number.MAX_VALUE : 0; + } + get hostedSlaves() { - return 0; // does not host anyone + return State.variables.fighterIDs.length; } }; diff --git a/src/facilities/schoolroom/schoolroomFramework.js b/src/facilities/schoolroom/schoolroomFramework.js index 707d7989a66cc9a791206b7998310ac1683f7f90..da0a7493e7d4a6393a6b64668a1817b48847b1fa 100644 --- a/src/facilities/schoolroom/schoolroomFramework.js +++ b/src/facilities/schoolroom/schoolroomFramework.js @@ -52,9 +52,14 @@ App.Entity.Facilities.SchoolroomStudentJob = class extends App.Entity.Facilities return r; } + + /** @private @override */ + get _employeeIDsVariableName() { + return "SchlRiIDs"; + } }; -App.Entity.facilities.schoolroom = new App.Entity.Facilities.Facility( +App.Entity.facilities.schoolroom = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.schoolroom, { student: new App.Entity.Facilities.SchoolroomStudentJob() diff --git a/src/facilities/servantsQuarters/servantsQuartersFramework.js b/src/facilities/servantsQuarters/servantsQuartersFramework.js index af38738066e090a5de3bdd6ff10cb5aaf71b229c..0afe7f14167529063337e2f22178e71d2ce3cab2 100644 --- a/src/facilities/servantsQuarters/servantsQuartersFramework.js +++ b/src/facilities/servantsQuarters/servantsQuartersFramework.js @@ -46,6 +46,11 @@ App.Entity.Facilities.ServantsQuartersServantJob = class extends App.Entity.Faci } return r; } + + /** @private @override */ + get _employeeIDsVariableName() { + return "ServQiIDs"; + } }; App.Entity.Facilities.ServantsQuartersStewardessJob = class extends App.Entity.Facilities.ManagingJob { @@ -62,7 +67,7 @@ App.Entity.Facilities.ServantsQuartersStewardessJob = class extends App.Entity.F } }; -App.Entity.facilities.servantsQuarters = new App.Entity.Facilities.Facility( +App.Entity.facilities.servantsQuarters = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.servantsQuarters, { servant: new App.Entity.Facilities.ServantsQuartersServantJob() diff --git a/src/facilities/spa/spaFramework.js b/src/facilities/spa/spaFramework.js index 45f7049be1653aed2430ff16901b10b2a3152037..c9210b976ca51cb6e93fc485040d7f61fa223d8f 100644 --- a/src/facilities/spa/spaFramework.js +++ b/src/facilities/spa/spaFramework.js @@ -43,7 +43,7 @@ App.Entity.Facilities.SpaAssigneeJob = class extends App.Entity.Facilities.Facil } }; -App.Entity.facilities.spa = new App.Entity.Facilities.Facility( +App.Entity.facilities.spa = new App.Entity.Facilities.SingleJobFacility( App.Data.Facilities.spa, { assignee: new App.Entity.Facilities.SpaAssigneeJob() diff --git a/src/init/dummy.tw b/src/init/dummy.tw index 5f1d6258ca5476bf97be27cedfdf84f19aa2f3ae..795c1885c88fb1dde265b0f832f3c6abd8b6d7ae 100644 --- a/src/init/dummy.tw +++ b/src/init/dummy.tw @@ -32,4 +32,8 @@ $Girl $corpPeopleEnslaved, $slaveAssets, $slaveAssetPrice, $corpProfit, $corpValue, $sharePrice, $oldSharePrice, $generalAssetPrice, $generalAssets, $entrapmentAssets, $entrapmentAssetPrice, $captureAssets, $captureAssetPrice, $trainingAssets, $trainingAssetPrice, $surgicalAssets, $surgicalAssetPrice, $drugAssets, $drugAssetPrice $TradeShowMenials $readySlaves +$mammaryUseWeight +$activeSlave.readyLimbs, _Slave.readyLimbs, $args[0].readyLimbs +$brothelSpots +$JobIDArray */ diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw index 2794b19672b3fe1e233de19820884478e01f776d..e571dc0647712639ab72818b243a4e4b95af3a1f 100644 --- a/src/init/setupVars.tw +++ b/src/init/setupVars.tw @@ -1979,10 +1979,10 @@ Then pick _namePool.random(), or display those names as possible choices, or do "Roman Revivalist": setup.romanSlaveSurnames }>> /* - * Male surname pools work differently: Most nationalities/races use the same so don't have any. - * Others have them not as arrays, but as objects, associating a female surname with the - * corresponding (and as far as the nationality/culture is concerned, identical) male surname. - */ +* Male surname pools work differently: Most nationalities/races use the same so don't have any. +* Others have them not as arrays, but as objects, associating a female surname with the +* corresponding (and as far as the nationality/culture is concerned, identical) male surname. +*/ <<set setup.maleSurnamePoolSelector = { "Azerbaijani": setup.azerbaijaniMaleSurnames, "Belarusian": setup.belarusianMaleSurnames, @@ -2037,13 +2037,13 @@ Then pick _namePool.random(), or display those names as possible choices, or do <<set setup.ArcologyNamesGenderRadicalist = ["Admah", "Aphroditus", "Bacchanalia", "Boeotia", "Brumalia", "Catamitus", "City of the Plain", "Crete", "Dionysia", "Ermenosity", "Gomorrah", "Hermaphroditus", "Impudicitia", "Liberalia", "Pessinus", "Saturnalia", "Sodom", "The Rosebud", "Thebes", "Vine of Sodom", "Zeboim"]>> <<set setup.ArcologyNamesGenderFundamentalist = ["The Arbor", "The Center", "The Core", "The Cradle", "The Entrance", "The Essence", "The Flower", "The Fruit", "The Jewel", "The Lily", "The Love", "The Origin", "The Pearl", "The Petal", "The Rose", "The Sheath", "The Source", "The Warmth"]>> <<set setup.ArcologyNamesPaternalist = ["Asylum", "Benevolence", "City of Refuge", "Fatherhood", "Glory", "Greater Good", "Haven", "Humanitaria", "Nanny State", "New Springfield", "Paterfamilias", "Paternalis", "Refuge", "Safe Harbor", "Safe Haven", "Safehouse", "Safety", "Sanctuary", "Sanctum", "Shelter", "The Sanctuary", "Welfare"]>> -<<set setup.ArcologyNamesDegradationist = ["Akelarre", "Armageddon", "Bald Mountain", "Black Sabbath", "Blåkulla", "Château de Silling", "Cruelty", "Damnation", "Degradation", "Diabolica", "Doomsday", "Golgotha", "Hell on Earth", "Hell", "Inferno", "Misery", "Pain", "Slaughterhouse", "Suffering", "The Pit", "The Tower", "Torment", "Torture Chamber", "Well to Hell"]>> -<<set setup.ArcologyNamesBodyPurist = ["Antiplasto", "Au Naturel", "Elysium", "Injection Rejection", "Natural State", "Nature Reserve", "New Eden", "Organics", "Pure Land", "Pure Shores", "Purification", "Purity Balls", "Purity Ring", "Purity", "Sanctity", "Scarless Fever", "Surgical Strike", "The Ark", "The Garden", "The Repository", "Unblemisht", "Walden"]>> +<<set setup.ArcologyNamesDegradationist = ["Akelarre", "Apocalyptica", "Armageddon", "Bald Mountain", "Black Sabbath", "Blåkulla", "Château de Silling", "Cruelty", "Damnation", "Degradation", "Diabolica", "Doomsday", "Dukkha", "Golgotha", "Hell on Earth", "Hell", "Inferno", "Misery", "Pain", "Schadenfreude", "Slaughterhouse", "Suffering", "The Pit", "The Tower", "Torment", "Torture Chamber", "Well to Hell"]>> +<<set setup.ArcologyNamesBodyPurist = ["Antiplasto", "Au Naturel", "Elysium", "Injection Rejection", "L'Esprit Nouveau", "Natural Selection", "Natural State", "Nature Reserve", "New Eden", "Organics", "Pure Land", "Pure Shores", "Purification", "Purity Balls", "Purity Ring", "Purity", "Sanctity", "Scarless Fever", "Surgical Strike", "The Ark", "The Garden", "The Repository", "Unblemisht", "Walden"]>> <<set setup.ArcologyNamesTransformationFetishist = ["Arion Laboratory", "Barbie World", "Bimboden", "Bimboland", "Dow Corning", "Gillies Suite", "Guinea Pig Club", "Implantation Station", "Mad Mods", "Modding Community", "Mods Nexus", "Niptuck", "Plastic Beach", "Plasticland", "Silicone Valley", "Silicone Zone", "Stacy Malibu", "Strained Silicone", "Surgeon Generality", "The Dollhouse", "The Hospital", "Transformation Station", "Transformational Festival", "Under-Knife"]>> -<<set setup.ArcologyNamesYouthPreferentialist = ["Cumfullton", "Dick U.", "Ephebophily", "Frat Party", "Fuck High", "Hebephily", "Homecoming", "Kid Row", "Prom Night", "Sex College", "Sorority Row", "Spring Break", "Sunnyside", "Teen Scene", "Teen Spirit", "Teenage Wasteland", "Teenybop", "Undergrad Pad", "Young Earth", "Youngling", "Youngtown", "Youth", "Youthanasia"]>> +<<set setup.ArcologyNamesYouthPreferentialist = ["Cumfullton", "Dick U.", "Ephebophily", "Frat Party", "Fuck High", "Hebephily", "Homecoming", "Kid Row", "Prom Night", "Sex College", "Sorority Row", "Spring Break", "Sunnyside", "Teen Scene", "Teen Spirit", "Teenage Wasteland", "Teenybop", "Undergrad Pad", "Young Earth", "Youngling", "Youngtown", "Youth Culture", "Youth", "Youthanasia"]>> <<set setup.ArcologyNamesYouthPreferentialistLow = ["Cherry Fields", "Cherry Hills", "Comet Ping Pong", "Cummies Kindergarten", "Dick Elementary", "Flatsville", "Groom Range", "Hanson City", "Hebephily", "Hotel Bangkok", "Kiddie Diddlebury", "Lil' Sluts Academy", "Lolita Complex", "Loliville", "Oingo Boingo", "Partyvanistan", "Pedophily", "Pomf Town", "Prepubescence", "Savile Row", "Statutoria", "The Cake Shop"]>> <<set setup.ArcologyNamesMaturityPreferentialist = ["Age Begets Beauty", "Annual Reunion", "Cougar Town", "Experience", "Fine Wine", "Gerontophily", "Mature Theme", "Maturity", "Mesophily", "MILF Haven", "MILF Heights", "MILFtown", "Old Flame", "Old Style", "Park Avenue Tower", "Phaedra Complex", "Robinsonade", "Shady Acres", "Yummy Mummy"]>> -<<set setup.ArcologyNamesSlimnessEnthusiast = ["Aerobica", "Cardiode", "Emaciate State", "Lean Scene", "Less Is More", "Marathon", "Runway Way", "Skin-and-Bones Zone", "Skinny Bop", "Skinny Dip", "Slim City", "The Island", "The Skinny", "The Thinning", "Underweight Way", "Upskirt", "Virginland", "Weigh Down Low"]>> +<<set setup.ArcologyNamesSlimnessEnthusiast = ["Aerobica", "Cardiode", "Emaciate State", "Lean Scene", "Less Is More", "Marathon", "National Diet", "Runway Way", "Size Zero", "Skin-and-Bones Zone", "Skinny Bop", "Skinny Dip", "Skinny House", "Slim City", "Slim Shades", "Slimming World", "The Island", "The Skinny", "The Thinning", "Underweight Way", "Upskirt", "Virginland", "Weigh Down Low"]>> <<set setup.ArcologyNamesAssetExpansionist = ["Asset Holdings", "Biggening", "Blow-Up", "Boobs Tower", "Expand Land", "Expansion Chamber", "Expansion Pack", "Inflation Station", "Tangible Assets", "The Bouncy Castle", "The Expanse", "The Mounds", "Twin Peaks", "Voluptuousity"]>> <<set setup.ArcologyNamesPastoralist = ["Abundance", "Big Milk", "Bounty", "Bucolica", "Cornucopia", "Dairy Farm", "Dairy Kingdom", "Friesland", "God's Country", "Green Acres", "Greener Pastures", "Lactophily", "Lactopia", "Land of Plenty", "Pastoral Romance", "Pasturelands", "Plenty", "Schleswig-Holstein", "The Dairy", "The Ranch"]>> <<set setup.ArcologyNamesPhysicalIdealist = ["Aegina", "Amazonia", "Athletica", "Buff Riders", "Buffton", "Cardiode", "Dahomey", "Exercise Ball", "Exercise Bend", "Exercism", "Fitness Center", "Gargarei", "Gymnasiade", "Iron Pumps", "Midgard", "Muscle Beach", "Muscle Shoals", "Olympia", "Performance Peak", "Protein Lake", "Skid Row", "Sparta", "Sthenolagny", "The Gymnasium", "Them Gains", "Themyscira", "Valhalla", "Work Out"]>> diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 000471db9ae0d906bdc45cd370dd7f6b022feab9..fabe80df7a936194dce5a37e6dad0b5491ba46af 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -1092,6 +1092,7 @@ You should have received a copy of the GNU General Public License along with thi <<set $geneticMappingUpgrade = 0>> <<set $pregnancyMonitoringUpgrade = 0>> <<set $cloningSystem = 0>> +<<set $geneticFlawLibrary = 0>> <<set $surgeryUpgrade = 0>> @@ -1511,7 +1512,6 @@ You should have received a copy of the GNU General Public License along with thi <<set $DefaultBirthDestination = "individually decided fates">> <<set $abbreviateHormoneBalance = 2>> -<<if def $SF.Toggle>> <<set $SF = {Toggle:$SF.Toggle}>> <<else>> <<set $SF = {Toggle:0}>> <</if>> -<<set $SF.Active=-1, $SF.FS = {Tension:-1}>> +<<= App.SF.Init()>> <<goto "Alpha disclaimer">> diff --git a/src/interaction/main/mainLinks.js b/src/interaction/main/mainLinks.js index caa845c9500337c6b9a4374c8060528ec1ad8a03..80a9153ca67bbc43c82f6024ed878c23aa38fa9a 100644 --- a/src/interaction/main/mainLinks.js +++ b/src/interaction/main/mainLinks.js @@ -1,10 +1,8 @@ /* OPEN MAIN */ -App.UI.View.MainLinks = function() { +App.UI.View.MainLinks = function () { "use strict"; const V = State.variables; - const PA = Array.isArray(V.personalAttention) ? V.personalAttention.map(function(x) { - return getSlave(x.ID); - }) : []; + const PA = Array.isArray(V.personalAttention) ? V.personalAttention.map(x => getSlave(x.ID)) : []; let r = ''; if (V.PCWounded === 1) { @@ -124,11 +122,7 @@ App.UI.View.MainLinks = function() { /* cycle through slaves, for each slave cycle through completed organs and track how many are of the interrogated slave (and if organs have a slaves to be implanted on) */ for (let i = 0; i < V.slaves.length; i++) { let slaveOrgans = 0; - V.completedOrgans.forEach(organ => { - if (organ.ID === V.slaves[i].ID) { - slaveOrgans++; - } - }); + V.completedOrgans.forEach(organ => { if (organ.ID === V.slaves[i].ID) { slaveOrgans++; } }); /* if the interrogated slave has one or more organs ready: */ if (slaveOrgans > 0) { r += '<br><span class="yellow">The fabricator has completed '; @@ -151,7 +145,7 @@ App.UI.View.MainLinks = function() { if (V.adjustProstheticsCompleted > 0) { for (let j = 0; j < V.adjustProsthetics.length; j++) { if (getSlave(V.adjustProsthetics[j].slaveID) !== undefined) { - let i = V.slaveIndices[V.adjustProsthetics[j].slaveID]; + const i = V.slaveIndices[V.adjustProsthetics[j].slaveID]; if (V.adjustProsthetics[j].workLeft <= 0) { r += `<br><span class="yellow">The lab has completed <<= addA(setup.prosthetics[$adjustProsthetics[${j}].id].name)>> for</span> <span id="name"><<= "[[SlaveFullName($slaves[${i}])|Slave Interact][$activeSlave = $slaves[${i}]]]">>,</span> <span class="yellow"> which is ready to be attached.</span>`; } diff --git a/src/interaction/prostheticConfig.tw b/src/interaction/prostheticConfig.tw index 3756a951d1a0242ddba28aaae0de07978817de20..354439c24b53a319874e9dd37291e15703cd2af9 100644 --- a/src/interaction/prostheticConfig.tw +++ b/src/interaction/prostheticConfig.tw @@ -166,7 +166,7 @@ This room is lined with shelves and cabinets, it could be easily mistaken for a <</switch>> installed.//<br> <<link "Detach <<= $his>> limbs" "Prosthetics Config">> - <<set $activeSlave.amp = 0, $prostheticsConfig = "removeLimbs">> + <<set $activeSlave.amp = 1, $prostheticsConfig = "removeLimbs">> <</link>> <br><br> <</if>> diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 2c8afafdfa6e600f0a45395dce9c8596a0615b66..90ed3d4ce5e15732d65c95663fee18ee48d31239 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -14,9 +14,7 @@ window.DefaultRules = (function() { * @returns {object} */ function DefaultRules(slave) { - if (slave.useRulesAssistant === 0) { - return r; - } // exempted + if (slave.useRulesAssistant === 0) { return r; } // exempted V = State.variables; r = ""; @@ -25,9 +23,7 @@ window.DefaultRules = (function() { him = pronouns.object; his = pronouns.possessive; let rule = MergeRules(slave); - if (Object.keys(rule).length === 0) { - return r; - } // no rules apply + if (Object.keys(rule).length === 0) { return r; } // no rules apply AssignJobToSlave(slave, rule); if (slave.fuckdoll === 0) { diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 31dafd4a64e0b8b1c1a705f687b0ad5fcb1f9a5b..ee02b1fc6e58dd9925bb064715a14bbc2c4f64c3 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -302,7 +302,7 @@ App.Entity.SlaveState = class SlaveState { /** slave's original name */ this.birthName = "blank"; /** slave's original surname - * @type {string|number} */ + * @type {string|number} */ this.birthSurname = 0; /** slave sex ("XX", "XY") */ this.genes = "XX"; @@ -313,47 +313,47 @@ App.Entity.SlaveState = class SlaveState { this.object = "her"; this.noun = "girl"; /** game week slave was acquired. - * - * _0: Obtained prior to game start / at game start_ */ + * + * _0: Obtained prior to game start / at game start_ */ this.weekAcquired = 0; /** slave's origin - * @type {string|number} */ + * @type {string|number} */ this.origin = 0; /** career prior to enslavement - * @type {string|number} */ + * @type {string|number} */ this.career = 0; /** slave's ID */ this.ID = 0; /** slave's prestige */ this.prestige = 0; /** is the studio outputting porn of her? - * 0: no; 1: yes */ + * 0: no; 1: yes */ this.pornFeed = 0; /** how famous her porn is? */ this.pornFame = 0; /** how much money is being spent on promoting her porn */ this.pornFameSpending = 0; /** - * how famous she is in porn - * * 0: not - * * 1: some - * * 2: recognized - * * 3: world renowned - */ + * how famous she is in porn + * * 0: not + * * 1: some + * * 2: recognized + * * 3: world renowned + */ this.pornPrestige = 0; /** description to go with @see pornPrestige - * @type {string|number} */ + * @type {string|number} */ this.pornPrestigeDesc = 0; /** porn fame */ this.porn = new App.Entity.SlavePornPerformanceState(); /** reason for prestige - * @type {string|number} */ + * @type {string|number} */ this.prestigeDesc = 0; /** slave's relation to recruited slave? (used in some events) - * @type {string|number} */ + * @type {string|number} */ this.recruiter = 0; /** relation to relationTarget - * @type {string|number} */ + * @type {string|number} */ this.relation = 0; /** target of relation (ID) */ this.relationTarget = 0; @@ -373,12 +373,12 @@ App.Entity.SlaveState = class SlaveState { /** target of relationship (ID) */ this.relationshipTarget = 0; /** - * slave's rivalry - * * 0: none - * * 1: dislikes rivalryTarget - * * 2: rival of rivalryTarget - * * 3: bitterly hates rivalryTarget - */ + * slave's rivalry + * * 0: none + * * 1: dislikes rivalryTarget + * * 2: rival of rivalryTarget + * * 3: bitterly hates rivalryTarget + */ this.rivalry = 0; /** target of rival (ID) */ this.rivalryTarget = 0; @@ -390,9 +390,9 @@ App.Entity.SlaveState = class SlaveState { this.sisters = 0; this.canRecruit = 0; /** - * can slave choose own assignment - * - * 0: no; 1: yes */ + * can slave choose own assignment + * + * 0: no; 1: yes */ this.choosesOwnAssignment = 0; /** slave's assignment */ this.assignment = "rest"; @@ -405,9 +405,9 @@ App.Entity.SlaveState = class SlaveState { /** which hole to focus on when serving you */ this.toyHole = "all her holes"; /** - * How long her servitude will be. - * - * -1: not; 0+: number of weeks remaining */ + * How long her servitude will be. + * + * -1: not; 0+: number of weeks remaining */ this.indenture = -1; /** 2: complete protection; 1: some protection; 0: no protection */ this.indentureRestrictions = 0; @@ -424,43 +424,43 @@ App.Entity.SlaveState = class SlaveState { /** has had facial surgery to reduce age. 0: no, 1: yes */ this.ageImplant = 0; /** - * slave's health - * * -90 - : On the edge of death - * * -90 - -51: Extremely unhealthy - * * -50 - -21: Unhealthy - * * -20 - 20: Healthy - * * 21 - 50: Very healthy - * * 50 - 90: Extremely healthy - * * 90 - : Unnaturally healthy - */ + * slave's health + * * -90 - : On the edge of death + * * -90 - -51: Extremely unhealthy + * * -50 - -21: Unhealthy + * * -20 - 20: Healthy + * * 21 - 50: Very healthy + * * 50 - 90: Extremely healthy + * * 90 - : Unnaturally healthy + */ this.health = 0; /** - * slave has a minor injury ("black eye", "bruise", "split lip") - * @type {number | string} - */ + * slave has a minor injury ("black eye", "bruise", "split lip") + * @type {number | string} + */ this.minorInjury = 0; /** - * slave 's trust. - * * -96-: abjectly terrified - * * -95 - -51: terrified - * * -50 - -21: frightened - * * -20 - 20: fearful - * * 21 - 50: careful - * * 51 - 95: trusting - * * 96+: profoundly trusting - */ + * slave 's trust. + * * -96-: abjectly terrified + * * -95 - -51: terrified + * * -50 - -21: frightened + * * -20 - 20: fearful + * * 21 - 50: careful + * * 51 - 95: trusting + * * 96+: profoundly trusting + */ this.trust = 0; /** used to calculate trust loss/gain */ this.oldTrust = 0; /** - * slave 's devotion - * * -96 - : hate-filled - * * -95 - -51: hateful - * * -50 - -21: reluctant - * * -20 - 20: careful - * * 21 - 50: accepting - * * 51 - 95: devoted - * * 96+: worshipful */ + * slave 's devotion + * * -96 - : hate-filled + * * -95 - -51: hateful + * * -50 - -21: reluctant + * * -20 - 20: careful + * * 21 - 50: accepting + * * 51 - 95: devoted + * * 96+: worshipful */ this.devotion = 0; /** used to calculate devotion loss/gain */ this.oldDevotion = 0; @@ -479,27 +479,27 @@ App.Entity.SlaveState = class SlaveState { */ this.weight = 0; /** - * slave 's muscles - * * 96+ : extremely muscular - * * 31 - 95: muscular - * * 6 - 30: toned - * * -5 - 5: none - * * -30 - -6: weak - * * -95 - -31: very weak - * * -96- : frail - */ + * slave 's muscles + * * 96+ : extremely muscular + * * 31 - 95: muscular + * * 6 - 30: toned + * * -5 - 5: none + * * -30 - -6: weak + * * -95 - -31: very weak + * * -96- : frail + */ this.muscles = 0; /** - * slave's height in cm - * * < 150: petite - * * 150 - 159: short - * * 160 - 169: average - * * 170 - 185: tall - * * 186+ : very tall - */ + * slave's height in cm + * * < 150: petite + * * 150 - 159: short + * * 160 - 169: average + * * 170 - 185: tall + * * 186+ : very tall + */ this.height = 170; /** slave has height implant - * -1: -10 cm, 0: none, 1: +10 cm */ + * -1: -10 cm, 0: none, 1: +10 cm */ this.heightImplant = 0; /** slave's nationality */ this.nationality = "slave"; @@ -508,12 +508,12 @@ App.Entity.SlaveState = class SlaveState { /** slave's original race */ this.origRace = "white"; /** - * slave markings - * * "beauty mark" - * * "birthmark" - * * "freckles" - * * "heavily freckled" - */ + * slave markings + * * "beauty mark" + * * "birthmark" + * * "freckles" + * * "heavily freckled" + */ this.markings = "none"; /** * slave eyesight @@ -539,13 +539,13 @@ App.Entity.SlaveState = class SlaveState { /** "none", "glasses", "blurring glasses", "corrective glasses", "blurring contacts", "corrective contacts" */ this.eyewear = "none"; /** slave hearing - * - * -2: deaf; -1: hard of hearing; 0: normal */ + * + * -2: deaf; -1: hard of hearing; 0: normal */ this.hears = 0; /** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs" */ this.earwear = "none"; /** is there an inner ear implant device - * 0: no; 1: yes */ + * 0: no; 1: yes */ this.earImplant = 0; /** the shape of their outer ears * "none", "damaged", "normal", "pointy", "elven", "ushi" */ @@ -596,24 +596,24 @@ App.Entity.SlaveState = class SlaveState { /** skin color */ this.skin = "light"; /** - * hair length - * * 150: calf-length - * * 149-100: ass-length - * * 99-30: long - * * 29-10: shoulder-length - * * 9-0: short - */ + * hair length + * * 150: calf-length + * * 149-100: ass-length + * * 99-30: long + * * 29-10: shoulder-length + * * 9-0: short + */ this.hLength = 60; /** - * eyebrow thickness - * * "pencil-thin" - * * "thin" - * * "threaded" - * * "natural" - * * "tapered" - * * "thick" - * * "bushy" - */ + * eyebrow thickness + * * "pencil-thin" + * * "thin" + * * "threaded" + * * "natural" + * * "tapered" + * * "thick" + * * "bushy" + */ this.eyebrowFullness = "natural"; /** hair style */ this.hStyle = "short"; @@ -624,15 +624,15 @@ App.Entity.SlaveState = class SlaveState { /** eyebrowHStyle */ this.eyebrowHStyle = "natural"; /** - * slave waist - * * 96+: masculine - * * 95 - 41: ugly - * * 40 - 11: unattractive - * * 10 - -10: average - * * -11 - -40: feminine - * * -40 - -95: hourglass - * * -96-: absurd - */ + * slave waist + * * 96+: masculine + * * 95 - 41: ugly + * * 40 - 11: unattractive + * * 10 - -10: average + * * -11 - -40: feminine + * * -40 - -95: hourglass + * * -96-: absurd + */ this.waist = 0; /** series of rings up the back that can be tied together. 0: no, 1: yes */ this.corsetPiercing = 0; @@ -644,56 +644,56 @@ App.Entity.SlaveState = class SlaveState { */ this.PLimb = 0; /** - * is slave amputee - * * -5: swiss army limbs - * * -4: artificial limbs - Combat - * * -3: artificial limbs - Beauty - * * -2: artificial limbs - Sex - * * -1: artificial limbs - * * 0: no; - * * 1: yes - */ + * is slave amputee + * * -5: swiss army limbs + * * -4: artificial limbs - Combat + * * -3: artificial limbs - Beauty + * * -2: artificial limbs - Sex + * * -1: artificial limbs + * * 0: no; + * * 1: yes + */ this.amp = 0; /** are heels clipped - * - * 0: no, 1: yes */ + * + * 0: no, 1: yes */ this.heels = 0; /** slave voice - * - * 0: mute, 1: deep, 2: feminine, 3: high, girly */ + * + * 0: mute, 1: deep, 2: feminine, 3: high, girly */ this.voice = 2; /** has voice implant - * - * 0: no; 1: yes, high; -1: yes, low */ + * + * 0: no; 1: yes, high; -1: yes, low */ this.voiceImplant = 0; /** has cybernetic voicebox - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.electrolarynx = 0; /** - * slave accent - * * 0: none - * * 1: attractive - * * 2: heavy - * * 3: does not speak language - */ + * slave accent + * * 0: none + * * 1: attractive + * * 2: heavy + * * 3: does not speak language + */ this.accent = 0; /** - * shoulder width - * * -2: very narrow - * * -1: narrow - * * 0: feminine - * * 1: broad - * * 2: very broad - */ + * shoulder width + * * -2: very narrow + * * -1: narrow + * * 0: feminine + * * 1: broad + * * 2: very broad + */ this.shoulders = 0; /** - * has shoulder implant - * - * * -1: shoulders -1 - * * 0: none - * * 1: shoulders +1 - */ + * has shoulder implant + * + * * -1: shoulders -1 + * * 0: none + * * 1: shoulders +1 + */ this.shouldersImplant = 0; /** * slave boob size (in cc) @@ -723,41 +723,41 @@ App.Entity.SlaveState = class SlaveState { /** breast engorgement from unmilked tits */ this.boobsMilk = 0; /** - * slave implant size - * * 0: no implants; - * * 1-199: small implants; - * * 200-399: normal implants; - * * 400-599: large implants; - * * 600+: boobsImplant size fillable implants - */ + * slave implant size + * * 0: no implants; + * * 1-199: small implants; + * * 200-399: normal implants; + * * 400-599: large implants; + * * 600+: boobsImplant size fillable implants + */ this.boobsImplant = 0; /** Implants type. 0: normal/none; 1: string */ this.boobsImplantType = 0; /** - * breast shape - * * "normal" - * * "perky" - * * "saggy" - * * "torpedo-shaped" - * * "downward-facing" - * * "wide-set" - */ + * breast shape + * * "normal" + * * "perky" + * * "saggy" + * * "torpedo-shaped" + * * "downward-facing" + * * "wide-set" + */ this.boobShape = "normal"; /** - * nipple shape - * * "huge" - * * "puffy" - * * "inverted" - * * "tiny" - * * "cute" - * * "partially inverted" - * * "fuckable" - */ + * nipple shape + * * "huge" + * * "puffy" + * * "inverted" + * * "tiny" + * * "cute" + * * "partially inverted" + * * "fuckable" + */ this.nipples = "cute"; /** - * nipple are pierced - * @default 0 - * 0: none; 1: yes; 2: heavily */ + * nipple are pierced + * @default 0 + * 0: none; 1: yes; 2: heavily */ this.nipplesPiercing = 0; /** what accessory, if any, or on her nipples */ this.nipplesAccessory = "none"; @@ -766,246 +766,246 @@ App.Entity.SlaveState = class SlaveState { * 0: normal; 1: large; 2: unusually wide; 3: huge, 4: massive */ this.areolae = 0; /** edge of areolae are pierced - * @default 0 - * 0: none; 1: yes; 2: heavy */ + * @default 0 + * 0: none; 1: yes; 2: heavy */ this.areolaePiercing = 0; /** slave areolae shape ("heart"; "star"; "circle") */ this.areolaeShape = "circle"; /** - * boobs tattoo - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string | number} - */ + * boobs tattoo + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string | number} + */ this.boobsTat = 0; /** slave lactation - * - * 0: none; 1: natural; 2: implant */ + * + * 0: none; 1: natural; 2: implant */ this.lactation = 0; /** how many more weeks until lactation dries up - * - * usually 2 as interactions and lact. implant reset it to 2 */ + * + * usually 2 as interactions and lact. implant reset it to 2 */ this.lactationDuration = 0; /** - * odds of inducing lactation - * - * begins trying on breast play if over 10 */ + * odds of inducing lactation + * + * begins trying on breast play if over 10 */ this.induceLactation = 0; /** 0: 10: not used to producing milk(no bonuses); - * 11: 50: used to producing milk; - * 51: 100: heavily adapted to producing milk(big bonus) */ + * 11: 50: used to producing milk; + * 51: 100: heavily adapted to producing milk(big bonus) */ this.lactationAdaptation = 0; /** - * hip size - * * -2: very narrow - * * -1: narrow - * * 0: normal - * * 1: wide hips - * * 2: very wide hips - * * 3: inhumanly wide hips - */ + * hip size + * * -2: very narrow + * * -1: narrow + * * 0: normal + * * 1: wide hips + * * 2: very wide hips + * * 3: inhumanly wide hips + */ this.hips = 0; /** slave has hip implant - * - * -1: hips -1; 0: none; 1: hips +1 */ + * + * -1: hips -1; 0: none; 1: hips +1 */ this.hipsImplant = 0; /** - * butt size - * * 0 : flat - * * 1 : small - * * 2 : plump * - * * 3 : big bubble butt - * * 4 : huge - * * 5 : enormous - * * 6 : gigantic - * * 7 : ridiculous - * * 8 - 10: immense - * * 11 - 20: inhuman - * - * _* Descriptions vary for just how big 2 is, as such, it may be better to just go with 3_ - */ + * butt size + * * 0 : flat + * * 1 : small + * * 2 : plump * + * * 3 : big bubble butt + * * 4 : huge + * * 5 : enormous + * * 6 : gigantic + * * 7 : ridiculous + * * 8 - 10: immense + * * 11 - 20: inhuman + * + * _* Descriptions vary for just how big 2 is, as such, it may be better to just go with 3_ + */ this.butt = 0; /** - * butt implant type and size - * - * * 0: none - * * 1: butt implant - * * 2: big butt implant - * * 3: fillable butt implants - * * 5 - 8: advanced fillable implants - * * 9+: hyper fillable implants - */ + * butt implant type and size + * + * * 0: none + * * 1: butt implant + * * 2: big butt implant + * * 3: fillable butt implants + * * 5 - 8: advanced fillable implants + * * 9+: hyper fillable implants + */ this.buttImplant = 0; /** butt implant type - * - * 0: normal/none; 1: string */ + * + * 0: normal/none; 1: string */ this.buttImplantType = 0; /** - * butt tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * butt tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.buttTat = 0; /** - * face attractiveness - * - * * -96 - : very ugly - * * -95 - -41: ugly - * * -40 - -11: unattractive - * * -10 - 10: attractive - * * 11 - 40: very pretty - * * 41 - 95: gorgeous - * * 96+: mind blowing - */ + * face attractiveness + * + * * -96 - : very ugly + * * -95 - -41: ugly + * * -40 - -11: unattractive + * * -10 - 10: attractive + * * 11 - 40: very pretty + * * 41 - 95: gorgeous + * * 96+: mind blowing + */ this.face = 0; /** - * facial surgery degree - * - * * 0 - 14: none - * * 15 - 34: Subtle Improvements - * * 35 - 64: Noticeable Work - * * 65 - 99: Heavily Reworked - * * 100: Uncanny Valley - */ + * facial surgery degree + * + * * 0 - 14: none + * * 15 - 34: Subtle Improvements + * * 35 - 64: Noticeable Work + * * 65 - 99: Heavily Reworked + * * 100: Uncanny Valley + */ this.faceImplant = 0; /** - * accepts string (will be treated as "normal") - * * "normal" - * * "masculine" - * * "androgynous" - * * "cute" - * * "sensual" - * * "exotic" - */ + * accepts string (will be treated as "normal") + * * "normal" + * * "masculine" + * * "androgynous" + * * "cute" + * * "sensual" + * * "exotic" + */ this.faceShape = "normal"; /** - * lip size (0 - 100) - * * 0 - 10: thin - * * 11 - 20: normal - * * 21 - 40: pretty - * * 41 - 70: plush - * * 71 - 95: huge(lisps) - * * 96 - 100: facepussy(mute) - */ + * lip size (0 - 100) + * * 0 - 10: thin + * * 11 - 20: normal + * * 21 - 40: pretty + * * 41 - 70: plush + * * 71 - 95: huge(lisps) + * * 96 - 100: facepussy(mute) + */ this.lips = 15; /** - * how large her lip implants are - * @see lips - */ + * how large her lip implants are + * @see lips + */ this.lipsImplant = 0; /** - * lips pierced - * - * 0: no; 1: yes; 2: heavy */ + * lips pierced + * + * 0: no; 1: yes; 2: heavy */ this.lipsPiercing = 0; /** - * lip tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "permanent makeup" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * lip tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "permanent makeup" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.lipsTat = 0; /** - * teeth type - * * "normal" - * * "crooked" - * * "straightening braces" - * * "cosmetic braces" - * * "removable" - * * "pointy" - * * "baby" - * * "mixed" - */ + * teeth type + * * "normal" + * * "crooked" + * * "straightening braces" + * * "cosmetic braces" + * * "removable" + * * "pointy" + * * "baby" + * * "mixed" + */ this.teeth = "normal"; /** - * has tongue piercing - * - * 0: no; 1: yes; 2: heavy */ + * has tongue piercing + * + * 0: no; 1: yes; 2: heavy */ this.tonguePiercing = 0; /** - * vagina type - * * -1: no vagina - * * 0: virgin - * * 1: tight - * * 2: reasonably tight - * * 3: loose - * * 4: cavernous - * * 10: ruined - */ + * vagina type + * * -1: no vagina + * * 0: virgin + * * 1: tight + * * 2: reasonably tight + * * 3: loose + * * 4: cavernous + * * 10: ruined + */ this.vagina = 0; /** how wet she is - * - * 0: dry; 1: wet; 2: soaking wet */ + * + * 0: dry; 1: wet; 2: soaking wet */ this.vaginaLube = 0; /** has vagina piercing - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.vaginaPiercing = 0; /** - * vagina tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * vagina tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.vaginaTat = 0; /** - * pregnancy time or state.See Pregnancy Control section for more. - * * -3: sterilized - * * -2: sterile - * * -1: contraceptives - * * 0: fertile - * * 1 - 10: pregnant, not showing - * * 11 - 20: showing - * * 21 - 30: pregnant - * * 30 - 35: very pregnant - */ + * pregnancy time or state.See Pregnancy Control section for more. + * * -3: sterilized + * * -2: sterile + * * -1: contraceptives + * * 0: fertile + * * 1 - 10: pregnant, not showing + * * 11 - 20: showing + * * 21 - 30: pregnant + * * 30 - 35: very pregnant + */ this.preg = -1; /** * accepts ID See Pregnancy Control section for more. @@ -1014,40 +1014,44 @@ App.Entity.SlaveState = class SlaveState { * * -9: a futanari sister * * -8: an animal * * -7: designer baby - * * -2: Citizen of your arcology - * * -1: You + * * -6: a member of the Societal Elite + * * -5: one of your clients + * * -4: another arcology owner + * * -3: your former Master + * * -2: citizen of your arcology + * * -1: you * * 0: Unidentifiable */ this.pregSource = 0; /** - * Number of children. - * - * **Warning!** Should be not changed after initial impregnation setup. - * See Pregnancy Control section for more. - */ + * Number of children. + * + * **Warning!** Should be not changed after initial impregnation setup. + * See Pregnancy Control section for more. + */ this.pregType = 0; /** - * Number of ready to be impregnated ova (override normal cases), - * - * For delayed impregnations with multiples.Used onetime on next call of the SetPregType - * widget. After SetPregType use it to override .pregType, it set back to 0 automatically. - */ + * Number of ready to be impregnated ova (override normal cases), + * + * For delayed impregnations with multiples.Used onetime on next call of the SetPregType + * widget. After SetPregType use it to override .pregType, it set back to 0 automatically. + */ this.pregAdaptation = 50; /** - * Ovary implant type. - * - * * 0: no implants - * * "fertility": higher chance of twins (or more) - * * "sympathy": doubles eggs released - * * "asexual": self-fertilizing - */ + * Ovary implant type. + * + * * 0: no implants + * * "fertility": higher chance of twins (or more) + * * "sympathy": doubles eggs released + * * "asexual": self-fertilizing + */ this.ovaImplant = 0; /** - * Womb focused enhancements. - * - * * "none" - * * "restraint": Provides structural support for extremely oversized pregnancies - */ + * Womb focused enhancements. + * + * * "none" + * * "restraint": Provides structural support for extremely oversized pregnancies + */ this.wombImplant = "none"; /** * Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period @@ -1081,164 +1085,164 @@ App.Entity.SlaveState = class SlaveState { */ this.broodmotherFetuses = 0; /** - * If broodmother implant set to pause it 's work. - * - * 1: implant on pause !1: working. - * - * If broodmother birth her last baby and her implant is on pause, she will be in contraception like state. - */ + * If broodmother implant set to pause it 's work. + * + * 1: implant on pause !1: working. + * + * If broodmother birth her last baby and her implant is on pause, she will be in contraception like state. + */ this.broodmotherOnHold = 0; /** - * Number of weeks left until last baby will be birthed. - * - * Mainly informative only. Updated automatically at birth process based on remaining fetuses. 0 - 37 - */ + * Number of weeks left until last baby will be birthed. + * + * Mainly informative only. Updated automatically at birth process based on remaining fetuses. 0 - 37 + */ this.broodmotherCountDown = 0; /** - * variable used to set off the birth events - * - * 1: birth this week; 0: not time yet */ + * variable used to set off the birth events + * + * 1: birth this week; 0: not time yet */ this.labor = 0; /** does she have a c-section scar - * - * 1: yes; 0: no */ + * + * 1: yes; 0: no */ this.cSec = 0; /** - * may accept strings, use at own risk - * - * * "none" - * * "a small empathy belly" - * * "a medium empathy belly" - * * "a large empathy belly" - * * "a huge empathy belly" - * * "a corset" - * * "an extreme corset" - */ + * may accept strings, use at own risk + * + * * "none" + * * "a small empathy belly" + * * "a medium empathy belly" + * * "a large empathy belly" + * * "a huge empathy belly" + * * "a corset" + * * "an extreme corset" + */ this.bellyAccessory = "none"; /** - * labia type - * * 0: minimal - * * 1: big - * * 2: huge - * * 3: huge dangling - */ + * labia type + * * 0: minimal + * * 1: big + * * 2: huge + * * 3: huge dangling + */ this.labia = 0; /** - * clit size - * * 0: normal - * * 1: large - * * 2: huge - * * 3: enormous - * * 4: penis-like - * * 5: like a massive penis - */ + * clit size + * * 0: normal + * * 1: large + * * 2: huge + * * 3: enormous + * * 4: penis-like + * * 5: like a massive penis + */ this.clit = 0; /** - * is clit pierced - * * 0: no - * * 1: yes - * * 2: heavy - * * 3: smart - */ + * is clit pierced + * * 0: no + * * 1: yes + * * 2: heavy + * * 3: smart + */ this.clitPiercing = 0; /** - * smart piercing setting - * * "off" - * * "none" - * * "all" - * * "no default setting" - * * "women" - * * "men" - * * "vanilla" - * * "oral" - * * "anal" - * * "boobs" - * * "submissive" - * * "humiliation" - * * "pregnancy" - * * "dom" - * * "masochist" - * * "sadist" - */ + * smart piercing setting + * * "off" + * * "none" + * * "all" + * * "no default setting" + * * "women" + * * "men" + * * "vanilla" + * * "oral" + * * "anal" + * * "boobs" + * * "submissive" + * * "humiliation" + * * "pregnancy" + * * "dom" + * * "masochist" + * * "sadist" + */ this.clitSetting = "vanilla"; /** 0: circumcised; 1+:uncut, also affects foreskin size */ this.foreskin = 0; /** - * anus size - * * 0: virgin - * * 1: tight - * * 2: loose - * * 3: very loose - * * 4: gaping - */ + * anus size + * * 0: virgin + * * 1: tight + * * 2: loose + * * 3: very loose + * * 4: gaping + */ this.anus = 0; /** - * dick size - * * 0: none - * * 1: tiny - * * 2: little - * * 3: normal - * * 4: big - * * 5: huge - * * 6: gigantic - * * 7: massive/gigantic - * * 8: truly imposing/titanic - * * 9: monstrous/absurd - * * 10: awe-inspiring/inhuman - * * 11+: hypertrophied - */ + * dick size + * * 0: none + * * 1: tiny + * * 2: little + * * 3: normal + * * 4: big + * * 5: huge + * * 6: gigantic + * * 7: massive/gigantic + * * 8: truly imposing/titanic + * * 9: monstrous/absurd + * * 10: awe-inspiring/inhuman + * * 11+: hypertrophied + */ this.dick = 0; /** used to calculate size of area around anus. */ this.analArea = 1; /** - * is dick pierced - * * 0: no - * * 1: yes - * * 2: heavy - */ + * is dick pierced + * * 0: no + * * 1: yes + * * 2: heavy + */ this.dickPiercing = 0; /** - * dick tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * dick tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.dickTat = 0; /** - * does the slave have a prostate? - * * 0: no - * * 1: normal - * * 2: hyperstimulated +20% - * * 3: modified hyperstimulated +50% - */ + * does the slave have a prostate? + * * 0: no + * * 1: normal + * * 2: hyperstimulated +20% + * * 3: modified hyperstimulated +50% + */ this.prostate = 0; /** - * ball size - * * 0: none - * * 1: vestigial - * * 2: small - * * 3: average - * * 4: large - * * 5: massive - * * 6: huge - * * 7: giant - * * 8: enormous - * * 9: monstrous - * * 10: inhuman - * * 11+: hypertrophied - */ + * ball size + * * 0: none + * * 1: vestigial + * * 2: small + * * 3: average + * * 4: large + * * 5: massive + * * 6: huge + * * 7: giant + * * 8: enormous + * * 9: monstrous + * * 10: inhuman + * * 11+: hypertrophied + */ this.balls = 0; /** * scrotum size @@ -1249,186 +1253,186 @@ App.Entity.SlaveState = class SlaveState { */ this.scrotum = 0; /** has ovaries - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.ovaries = 0; /** has anus piercing - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.anusPiercing = 0; /** - * anus tattoo - * - * takes one of the following strings or 0 - * * "bleached" - * * "tribal patterns" - * * "flowers" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * anus tattoo + * + * takes one of the following strings or 0 + * * "bleached" + * * "tribal patterns" + * * "flowers" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.anusTat = 0; /** - * has makeup - * * 0: none - * * 1: minimal - * * 2: expensive, luxurious - * * 3: color-coordinated with hair - * * 4: heavy - * * 5: neon - * * 6: color-coordinated neon - * * 7: metallic - * * 8: color-coordinated metallic - */ + * has makeup + * * 0: none + * * 1: minimal + * * 2: expensive, luxurious + * * 3: color-coordinated with hair + * * 4: heavy + * * 5: neon + * * 6: color-coordinated neon + * * 7: metallic + * * 8: color-coordinated metallic + */ this.makeup = 0; /** - * nail type - * * 0: neatly clipped - * * 1: long and elegant - * * 2: color-coordinated with hair - * * 3: sharp and claw-like - * * 4: bright and glittery - * * 5: very long and garish - * * 6: neon - * * 7: color-coordinated neon - * * 8: metallic - * * 9: color-coordinated metallic - */ + * nail type + * * 0: neatly clipped + * * 1: long and elegant + * * 2: color-coordinated with hair + * * 3: sharp and claw-like + * * 4: bright and glittery + * * 5: very long and garish + * * 6: neon + * * 7: color-coordinated neon + * * 8: metallic + * * 9: color-coordinated metallic + */ this.nails = 0; /** - * has brand - * - * accepts 0 or string - * * 0: no brand - * * string: brand description */ + * has brand + * + * accepts 0 or string + * * 0: no brand + * * string: brand description */ this.brand = 0; /** - * brand location - * - * accepts string - * * "back" - * * "chest" - * * "ankles" - * * "wrists" - * * "thighs" - * @type {string|number} */ + * brand location + * + * accepts string + * * "back" + * * "chest" + * * "ankles" + * * "wrists" + * * "thighs" + * @type {string|number} */ this.brandLocation = 0; /** has pierced ears - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.earPiercing = 0; /** has pierced nose - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.nosePiercing = 0; /** has eyebrow piercing - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.eyebrowPiercing = 0; /** has navel piercing - * - * 0: no; 1: yes; 2: heavy */ + * + * 0: no; 1: yes; 2: heavy */ this.navelPiercing = 0; /** - * shoulder tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * shoulder tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.shouldersTat = 0; /** - * arm tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * arm tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.armsTat = 0; /** - * leg tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * leg tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.legsTat = 0; /** - * back tattoo - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * back tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.backTat = 0; /** - * tramp stamp - * - * takes one of the following strings or 0 - * * "tribal patterns" - * * "flowers" - * * "scenes" - * * "Asian art" - * * "degradation" - * * "counting" - * * "advertisements" - * * "rude words" - * * "bovine patterns" - * * "sacrament" - * * "Sacrilege" - * * "Possessive" - * * "Paternalist" - * @type {string|number} */ + * tramp stamp + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ this.stampTat = 0; /** * * "spare" @@ -1437,117 +1441,117 @@ App.Entity.SlaveState = class SlaveState { */ this.livingRules = "spare"; /** - * * "restrictive" - * * "permissive" - * * "accent elimination" - * * "language lessons" - */ + * * "restrictive" + * * "permissive" + * * "accent elimination" + * * "language lessons" + */ this.speechRules = "restrictive"; /** - * * "permissive" - * * "sapphic" - * * "masturbation" - * * "restrictive" - * * "chastity" - */ + * * "permissive" + * * "sapphic" + * * "masturbation" + * * "restrictive" + * * "chastity" + */ this.releaseRules = "restrictive"; /** - * * "restrictive" - * * "just friends" - * * "permissive" - */ + * * "restrictive" + * * "just friends" + * * "permissive" + */ this.relationshipRules = "restrictive"; /** - * * "none" - * * "induce" - * * "maintain" - */ + * * "none" + * * "induce" + * * "maintain" + */ this.lactationRules = "none"; /** - * * "confinement" - * * "whipping" - * * "chastity" - * * "situational" - */ + * * "confinement" + * * "whipping" + * * "chastity" + * * "situational" + */ this.standardPunishment = "situational"; /** - * * "relaxation" - * * "drugs" - * * "orgasm" - * * "situational" - */ + * * "relaxation" + * * "drugs" + * * "orgasm" + * * "situational" + */ this.standardReward = "situational"; /** follows rules or is exempt from them - * - * 0: exempt; 1: obeys */ + * + * 0: exempt; 1: obeys */ this.useRulesAssistant = 1; /** - * * "healthy" - * * "restricted" - * * "muscle building" - * * "fattening" - * * "slimming" - * * "XX" - * * "XY" - * * "XXY" - * * "cum production" - * * "cleansing" - * * "fertility" - */ + * * "healthy" + * * "restricted" + * * "muscle building" + * * "fattening" + * * "slimming" + * * "XX" + * * "XY" + * * "XXY" + * * "cum production" + * * "cleansing" + * * "fertility" + */ this.diet = "healthy"; /** how much of her diet is cum - * - * 0: none; 1: supplemented; 2: nearly entirely */ + * + * 0: none; 1: supplemented; 2: nearly entirely */ this.dietCum = 0; /** how much of her diet is milk - * - * 0: none; 1: supplemented; 2: nearly entirely */ + * + * 0: none; 1: supplemented; 2: nearly entirely */ this.dietMilk = 0; /** affects work performance, i.e. decreased pay for whoring - * caused by poor/overcrowded sleeping conditions - * - * 0: not tired; 1: tired */ + * caused by poor/overcrowded sleeping conditions + * + * 0: not tired; 1: tired */ this.tired = 0; /** - * * -2: heavy male hormones - * * -1: male hormones - * * 0: none - * * 1: female hormones - * * 2: heavy female hormones - */ + * * -2: heavy male hormones + * * -1: male hormones + * * 0: none + * * 1: female hormones + * * 2: heavy female hormones + */ this.hormones = 0; /** - * * "no drugs" - * * "breast injections" - * * "butt injections" - * * "lip injections" - * * "fertility drugs" - * * "penis enhancement" - * * "testicle enhancement" - * * "psychosuppressants" - * * "steroids" - * * "hormone enhancers" - * * "hormone blockers" - * * "super fertility drugs" - * * "hyper breast injections" - * * "hyper butt injections" - * * "hyper penis enhancement" - * * "hyper testicle enhancement" - * * "female hormone injections" - * * "male hormone injections" - * * "anti-aging cream" - * * "appetite suppressors" - * * "penis atrophiers" - * * "testicle atrophiers" - * * "clitoris atrophiers" - * * "labia atrophiers" - * * "nipple atrophiers" - * * "lip atrophiers" - * * "breast redistributors" - * * "butt redistributors" - * * "sag-B-gone" - * * "growth stimulants" - */ + * * "no drugs" + * * "breast injections" + * * "butt injections" + * * "lip injections" + * * "fertility drugs" + * * "penis enhancement" + * * "testicle enhancement" + * * "psychosuppressants" + * * "steroids" + * * "hormone enhancers" + * * "hormone blockers" + * * "super fertility drugs" + * * "hyper breast injections" + * * "hyper butt injections" + * * "hyper penis enhancement" + * * "hyper testicle enhancement" + * * "female hormone injections" + * * "male hormone injections" + * * "anti-aging cream" + * * "appetite suppressors" + * * "penis atrophiers" + * * "testicle atrophiers" + * * "clitoris atrophiers" + * * "labia atrophiers" + * * "nipple atrophiers" + * * "lip atrophiers" + * * "breast redistributors" + * * "butt redistributors" + * * "sag-B-gone" + * * "growth stimulants" + */ this.drugs = "no drugs"; /** 0: none; 1: preventatives; 2: curatives */ this.curatives = 0; @@ -1556,12 +1560,12 @@ App.Entity.SlaveState = class SlaveState { /** 0: none; 1: standard; 2: powerful */ this.aphrodisiacs = 0; /** - * how addict to aphrodisiacs slave is - * * 0: not - * * 1-2: new addict - * * 3-9: confirmed addict - * * 10+: dependent - */ + * how addict to aphrodisiacs slave is + * * 0: not + * * 1-2: new addict + * * 3-9: confirmed addict + * * 10+: dependent + */ this.addict = 0; /** Fuckdoll degree * @@ -1711,14 +1715,14 @@ App.Entity.SlaveState = class SlaveState { */ this.collar = "none"; /** - * may accept strings, use at own risk - * * "none" - * * "heels" - * * "pumps" - * * "extreme heels" - * * "boots" - * * "flats" - */ + * may accept strings, use at own risk + * * "none" + * * "heels" + * * "pumps" + * * "extreme heels" + * * "boots" + * * "flats" + */ this.shoes = "none"; /** * may accept strings, use at own risk @@ -1772,54 +1776,54 @@ App.Entity.SlaveState = class SlaveState { */ this.legAccessory = "none"; /** - * may accept strings, use at own risk - * * "none" - * * "plug" - * * "large plug" - * * "huge plug" - * * "long plug" - * * "long, large plug" - * * "long, huge plug" - */ + * may accept strings, use at own risk + * * "none" + * * "plug" + * * "large plug" + * * "huge plug" + * * "long plug" + * * "long, large plug" + * * "long, huge plug" + */ this.buttplug = "none"; /** - * Does the slave have an attachment on their buttplug - * - * may accept strings, use at own risk - * * "none" - * * "tail" - * * "fox tail" - * * "cat tail" - */ + * Does the slave have an attachment on their buttplug + * + * may accept strings, use at own risk + * * "none" + * * "tail" + * * "fox tail" + * * "cat tail" + */ this.buttplugAttachment = "none"; /** - * slave intelligence - * * -100 - -96: borderline retarded - * * -95 - -51: very slow - * * -50 - -16: slow - * * -15 - 15: average - * * 16 - 50: smart - * * 51 - 95: very smart - * * 96 - 100: brilliant - */ + * slave intelligence + * * -100 - -96: borderline retarded + * * -95 - -51: very slow + * * -50 - -16: slow + * * -15 - 15: average + * * 16 - 50: smart + * * 51 - 95: very smart + * * 96 - 100: brilliant + */ this.intelligence = 0; /** - * Degree of slave 's education - * * 0: uneducated - * * 1+: partial education (not really used) - * * 15+: educated - * * 30: well educated - */ + * Degree of slave 's education + * * 0: uneducated + * * 1+: partial education (not really used) + * * 15+: educated + * * 30: well educated + */ this.intelligenceImplant = 0; /** - * sex drive - * * 0 - 20: no sex drive - * * 21 - 40: poor sex drive - * * 41 - 60: average sex drive - * * 61 - 80: good sex drive - * * 81 - 95: powerful sex drive - * * 96+: nymphomaniac - */ + * sex drive + * * 0 - 20: no sex drive + * * 21 - 40: poor sex drive + * * 41 - 60: average sex drive + * * 61 - 80: good sex drive + * * 81 - 95: powerful sex drive + * * 96+: nymphomaniac + */ this.energy = 50; /** * The amount of sex the slave had with customers for certain jobs during a week @@ -1836,19 +1840,19 @@ App.Entity.SlaveState = class SlaveState { */ this.need = 0; /** - * attraction to women - * * 0 - 5: disgusted by women - * * 6 - 15: turned off by women - * * 15 - 35: not attracted to women - * * 36 - 65: indifferent to women - * * 66 - 85: attracted to women - * * 86 - 95: aroused by women - * * 96+: passionate about women - * - * *if both attrXX and attrXY > 95, slave will be omnisexual* - * - * *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac* - */ + * attraction to women + * * 0 - 5: disgusted by women + * * 6 - 15: turned off by women + * * 15 - 35: not attracted to women + * * 36 - 65: indifferent to women + * * 66 - 85: attracted to women + * * 86 - 95: aroused by women + * * 96+: passionate about women + * + * *if both attrXX and attrXY > 95, slave will be omnisexual* + * + * *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac* + */ this.attrXX = 0; /** * attraction to men @@ -1868,87 +1872,87 @@ App.Entity.SlaveState = class SlaveState { /** 0: no; 1: yes */ this.attrKnown = 0; /** - * * "none" - * * "mindbroken" - * * "submissive" - * * "cumslut" - * * "humiliation" - * * "buttslut" - * * "boobs" - * * "sadist" - * * "masochist" - * * "dom" - * * "pregnancy" - */ + * * "none" + * * "mindbroken" + * * "submissive" + * * "cumslut" + * * "humiliation" + * * "buttslut" + * * "boobs" + * * "sadist" + * * "masochist" + * * "dom" + * * "pregnancy" + */ this.fetish = "none"; /** how strong her fetish is (10-100) - * - * 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */ + * + * 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */ this.fetishStrength = 70; /** is fetish known to player - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.fetishKnown = 0; /** - * * "none" - * * "arrogant": clings to her dignity, thinks slavery is beneath her - * * "bitchy": can 't keep her opinions to herself - * * "odd": says and does odd things - * * "hates men": hates men - * * "hates women": hates women - * * "gluttonous": likes eating, gains weight - * * "anorexic": dislikes eating and being forced to eat, loses weight - * * "devout": resistance through religious faith - * * "liberated": believes slavery is wrong - */ + * * "none" + * * "arrogant": clings to her dignity, thinks slavery is beneath her + * * "bitchy": can 't keep her opinions to herself + * * "odd": says and does odd things + * * "hates men": hates men + * * "hates women": hates women + * * "gluttonous": likes eating, gains weight + * * "anorexic": dislikes eating and being forced to eat, loses weight + * * "devout": resistance through religious faith + * * "liberated": believes slavery is wrong + */ this.behavioralFlaw = "none"; /** - * * "none" - * * "confident": believes she has value as a slave - * * "cutting": often has as witty or cunning remark ready, knows when to say it - * * "funny": is funny - * * "fitness": loves working out - * * "adores women": likes spending time with women - * * "adores men": likes spending time with men - * * "insecure": defines herself on the thoughts of others - * * "sinful": breaks cultural norms - * * "advocate": advocates slavery - */ + * * "none" + * * "confident": believes she has value as a slave + * * "cutting": often has as witty or cunning remark ready, knows when to say it + * * "funny": is funny + * * "fitness": loves working out + * * "adores women": likes spending time with women + * * "adores men": likes spending time with men + * * "insecure": defines herself on the thoughts of others + * * "sinful": breaks cultural norms + * * "advocate": advocates slavery + */ this.behavioralQuirk = "none"; /** - * * "none" - * * "hates oral": hates oral sex - * * "hates anal": hates anal sex - * * "hates penetration": dislikes penetrative sex - * * "shamefast": nervous when naked - * * "idealistic": believes sex should be based on love and consent - * * "repressed": dislikes sex - * * "apathetic": inert during sex - * * "crude": sexually crude and has little sense of what partners find disgusting during sex - * * "judgemental": sexually judgemental and often judges her sexual partners' performance - * * "neglectful": disregards herself in sex - * * "cum addict": addicted to cum - * * "anal addict": addicted to anal - * * "attention whore": addicted to being the center of attention - * * "breast growth": addicted to her own breasts - * * "abusive": sexually abusive - * * "malicious": loves causing pain and suffering - * * "self hating": hates herself - * * "breeder": addicted to being pregnant - */ + * * "none" + * * "hates oral": hates oral sex + * * "hates anal": hates anal sex + * * "hates penetration": dislikes penetrative sex + * * "shamefast": nervous when naked + * * "idealistic": believes sex should be based on love and consent + * * "repressed": dislikes sex + * * "apathetic": inert during sex + * * "crude": sexually crude and has little sense of what partners find disgusting during sex + * * "judgemental": sexually judgemental and often judges her sexual partners' performance + * * "neglectful": disregards herself in sex + * * "cum addict": addicted to cum + * * "anal addict": addicted to anal + * * "attention whore": addicted to being the center of attention + * * "breast growth": addicted to her own breasts + * * "abusive": sexually abusive + * * "malicious": loves causing pain and suffering + * * "self hating": hates herself + * * "breeder": addicted to being pregnant + */ this.sexualFlaw = "none"; /** - * * "none" - * * "gagfuck queen": can take a facefucking - * * "painal queen": knows how far she can go without getting hurt - * * "strugglefuck queen": knows how much resistance her partners want - * * "tease": is a tease - * * "romantic": enjoys the closeness of sex - * * "perverted": enjoys breaking sexual boundaries - * * "caring": enjoys bring her partners to orgasm - * * "unflinching": willing to do anything - * * "size queen": prefers big cocks - */ + * * "none" + * * "gagfuck queen": can take a facefucking + * * "painal queen": knows how far she can go without getting hurt + * * "strugglefuck queen": knows how much resistance her partners want + * * "tease": is a tease + * * "romantic": enjoys the closeness of sex + * * "perverted": enjoys breaking sexual boundaries + * * "caring": enjoys bring her partners to orgasm + * * "unflinching": willing to do anything + * * "size queen": prefers big cocks + */ this.sexualQuirk = "none"; /** 0: does not have; 1: carrier; 2: active * * heterochromia is an exception. String = active @@ -1957,14 +1961,14 @@ App.Entity.SlaveState = class SlaveState { /** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */ macromastia: 0, /** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. - * - * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */ + * + * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */ gigantomastia: 0, /** is prone to having twins, shorter pregnancy recovery rate */ fertility: 0, /** is prone to having multiples, even shorter pregnancy recovery rate - * - * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */ + * + * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */ hyperFertility: 0, /** pregnancy does not block ovulation, slave can become pregnant even while pregnant */ superfetation: 0, @@ -1998,17 +2002,17 @@ App.Entity.SlaveState = class SlaveState { /** Values provided by players */ this.custom = new App.Entity.SlaveCustomAddonsState(); /** Does this slave refer to you rudely? - * - * 0: not being rude; 1: insists on calling you a rude title */ + * + * 0: not being rude; 1: insists on calling you a rude title */ this.rudeTitle = 0; /** @type {number[]} */ this.currentRules = []; /** - * Slave has a tattoo that is only recognizable when she has a big belly. - * * "a heart" - * * "a star" - * * "a butterfly" - * @type {string|number} */ + * Slave has a tattoo that is only recognizable when she has a big belly. + * * "a heart" + * * "a star" + * * "a butterfly" + * @type {string|number} */ this.bellyTat = 0; /** * Slave has a series of tattoos to denote how many abortions she has had. @@ -2025,54 +2029,54 @@ App.Entity.SlaveState = class SlaveState { */ this.birthsTat = -1; /** Slave will give birth this week. - * - * 1: true; 0: false */ + * + * 1: true; 0: false */ this.induce = 0; /** Male slave has an anal womb and can get pregnant. - * - * 1: true; 0: false */ + * + * 1: true; 0: false */ this.mpreg = 0; /** How much fluid is distending the slave. - * - * 1: 2L; 2: 4L; 3: 8L */ + * + * 1: 2L; 2: 4L; 3: 8L */ this.inflation = 0; /** - * What kind of fluid is in the slave. - * * "none" - * * "water" - * * "cum" - * * "milk" - * * "food" - * * "aphrodisiac" - * * "curative" - * * "tightener" - */ + * What kind of fluid is in the slave. + * * "none" + * * "water" + * * "cum" + * * "milk" + * * "food" + * * "aphrodisiac" + * * "curative" + * * "tightener" + */ this.inflationType = "none"; /** - * How she is being filled. - * * 0: not - * * 1: oral - * * 2: anal - * * 3: orally by another slave - */ + * How she is being filled. + * * 0: not + * * 1: oral + * * 2: anal + * * 3: orally by another slave + */ this.inflationMethod = 0; /** If inflationMethod === 3, ID of the slave filling her with milk. */ this.milkSource = 0; /** If inflationMethod 3, ID of the slave filling her with cum. */ this.cumSource = 0; /** Slave's internals have ruptured. Used with poor health and overinflation. - * - * 1: true; 0: false */ + * + * 1: true; 0: false */ this.burst = 0; /** Do you and the slave know she is pregnant. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.pregKnown = 0; /** How long she has been pregnant - * - * used in place of .preg when pregnancy speed up and slow down are used on a slave - * - * if negative, designates postpartum. */ + * + * used in place of .preg when pregnancy speed up and slow down are used on a slave + * + * if negative, designates postpartum. */ this.pregWeek = 0; /** * how big their belly is in CCs @@ -2123,15 +2127,15 @@ App.Entity.SlaveState = class SlaveState { */ this.bellyPreg = 0; /** - * how big their belly is in CCs (fluid distension only) - * - * ||thresholds| - * |-|-| - * 100 | bloated - * 2000 | clearly bloated (2 L) - * 5000 | very full (~1 gal) - * 10000 | full to bursting (~2 gal) - */ + * how big their belly is in CCs (fluid distension only) + * + * ||thresholds| + * |-|-| + * 100 | bloated + * 2000 | clearly bloated (2 L) + * 5000 | very full (~1 gal) + * 10000 | full to bursting (~2 gal) + */ this.bellyFluid = 0; /** * Does the slave have a fillable abdominal implant. @@ -2145,87 +2149,87 @@ App.Entity.SlaveState = class SlaveState { */ this.bellyImplant = -1; /** How saggy her belly is after being distended for too long. - * - * 1+ changes belly description */ + * + * 1+ changes belly description */ this.bellySag = 0; /** How saggy her belly is from being too pregnant. - * - * 1+ changes belly description and overrides/coincides with bellySag */ + * + * 1+ changes belly description and overrides/coincides with bellySag */ this.bellySagPreg = 0; /** - * Has the slave 's belly implant been filled this week. Causes health damage for overfilling. - * - * 0: no pain; 1: will experience pain; 2: cannot be filled this week */ + * Has the slave 's belly implant been filled this week. Causes health damage for overfilling. + * + * 0: no pain; 1: will experience pain; 2: cannot be filled this week */ this.bellyPain = 0; /** Does the slave have a cervical implant that slowly feeds cum from being fucked into a fillable implant. - * - * 0: no; 1: vaginal version only; 2: anal version only; 3: both vaginal and anal */ + * + * 0: no; 1: vaginal version only; 2: anal version only; 3: both vaginal and anal */ this.cervixImplant = 0; /** Target .physicalAge for female puberty to occur. */ this.pubertyAgeXX = 13; /** Has the slave gone through female puberty. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.pubertyXX = 0; /** Target .physicalAge for male puberty to occur. */ this.pubertyAgeXY = 13; /** Has the slave gone through male puberty. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.pubertyXY = 0; /** - * not fully implemented. - * * 0: no scars - * * 1: light scarring - * * 2: heavy scarring - * * 3: fresh scarring - * * 4: burns - * * 5: menacing scar - * * 6: exotic scar - */ + * not fully implemented. + * * 0: no scars + * * 1: light scarring + * * 2: heavy scarring + * * 3: fresh scarring + * * 4: burns + * * 5: menacing scar + * * 6: exotic scar + */ this.scars = 0; /** - * In a eugenics society, this slave is a designated breeder. - * - * 1: yes; 0: no */ + * In a eugenics society, this slave is a designated breeder. + * + * 1: yes; 0: no */ this.breedingMark = 0; /** Is the Head Girl permitted to fuck this slave pregnant. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.HGExclude = 0; /** - * What species of sperm she produces. - * * "human" - * * "sterile" - * * "dog" - * * "pig" - * * "horse" - * * "cow" - */ + * What species of sperm she produces. + * * "human" + * * "sterile" + * * "dog" + * * "pig" + * * "horse" + * * "cow" + */ this.ballType = "human"; /** - * What species of ovum she produces. - * * "human" - * * "dog" - * * "pig" - * * "horse" - * * "cow" - */ + * What species of ovum she produces. + * * "human" + * * "dog" + * * "pig" + * * "horse" + * * "cow" + */ this.eggType = "human"; /** Eugenics variable. Is the slave allowed to choose to wear chastity. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.choosesOwnChastity = 0; /** - * Is she on gestation altering drugs? - * * "none" - * * "slow gestation" - * * "speed up" - * * "labor suppressors" - */ + * Is she on gestation altering drugs? + * * "none" + * * "slow gestation" + * * "speed up" + * * "labor suppressors" + */ this.pregControl = "none"; /** - * Array that holds a slaves fitted prosthetics. Opjects are used to ensure easier expansion later (tatoos for limbs and similar). + * Array that holds a slaves fitted prosthetics. Objects are used to ensure easier expansion later (tattoos for limbs and similar). * * Elements of the array should be objects. * * .id: ID of the prosthetic, see setup.prostheticIDs @@ -2234,8 +2238,8 @@ App.Entity.SlaveState = class SlaveState { /** */ this.ageAdjust = 0; /** Slave has undergone hair removal surgery - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.bald = 0; /** Slave is in original body. * @@ -2266,50 +2270,50 @@ App.Entity.SlaveState = class SlaveState { */ this.hormoneBalance = 0; /** Whether a slave is permitted to eat Hedonistic Decadence's specialized slave food. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.onDiet = 0; /** Does the slave have the breast shape maintaining mesh implant. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.breastMesh = 0; /** Used to denote a slave giving birth prematurely. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.prematureBirth = 0; /** Was the slave born prematurely? - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.premature = 0; /** Has the slave had a vasectomy? - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.vasectomy = 0; /** Is the slave's hair under constant maintenance? - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.haircuts = 0; /** Used to tell if the slave is from this game or a previous. - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ this.newGamePlus = 0; /** Her skills */ this.skill = new App.Entity.SlaveSkillsState(); /** Whether she was put in the incubator at birth - * - * 0: no; 1: yes, comforting; 2: yes, terrifying */ + * + * 0: no; 1: yes, comforting; 2: yes, terrifying */ this.tankBaby = 0; /** */ this.clone = 0; /** */ this.geneMods = { /** Does slave have induced NCS? - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ NCS: 0, /** Has the slave undergone the elasticity (plasticity) treatment? - * - * 0: no; 1: yes */ + * + * 0: no; 1: yes */ rapidCellGrowth: 0 }; /* eslint-disable */ @@ -2324,33 +2328,33 @@ App.Entity.SlaveState = class SlaveState { this.albinismOverride = 0; /* eslint-enable */ /** are eyes missing? - * - * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ + * + * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ this.missingEyes = 0; /** are arms missing? - * - * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ + * + * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ this.missingArms = 0; /** are legs missing? - * - * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ + * + * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */ this.missingLegs = 0; /** Amount of cash paid to acquire the slave - * - * accepts negative numbers, 0, or 1. - * 1: unknown price; 0: free; negative: amount paid */ + * + * accepts negative numbers, 0, or 1. + * 1: unknown price; 0: free; negative: amount paid */ this.slaveCost = 0; /** Amount of cash you have spent because of this slave - * - * accepts negative numbers or 0 */ + * + * accepts negative numbers or 0 */ this.lifetimeCashExpenses = 0; /** Total amount of cash you have earned because of this slave - * - * accepts positive numbers or 0 */ + * + * accepts positive numbers or 0 */ this.lifetimeCashIncome = 0; /** Amount of cash you have earned because of this slave last week - * - * accepts positive numbers or 0 */ + * + * accepts positive numbers or 0 */ this.lastWeeksCashIncome = 0; /** Not currently used, will work similarly to the cash variables above */ this.lifetimeRepExpenses = 0; diff --git a/src/js/assayJS.js b/src/js/assayJS.js index e798219b8228fb3d97953b3cae722d97cb0372ce..3bfeba99d3f3b76faa7768942a647630c99dc191 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -319,19 +319,19 @@ window.removeSlave = function removeSlave(index) { State.variables.slaveIndices = slaves2indices(); return ret; }; + window.removeChild = function removeChild(index) { - const ret = State.variables.cribs.deleteAt(index); - return ret; + return State.variables.cribs.deleteAt(index); }; /** * @param {App.Entity.SlaveState[]} [slaves] * @returns {Object.<number, number>} */ -window.slaves2indices = function slaves2indices(slaves) { - slaves = slaves || State.variables.slaves; +window.slaves2indices = function slaves2indices(slaves = State.variables.slaves) { return slaves.reduce((acc, slave, i) => { acc[slave.ID] = i; return acc; }, {}); }; + /** * @param {number} ID * @returns {App.Entity.SlaveState} @@ -340,9 +340,9 @@ window.getSlave = function getSlave(ID) { const index = State.variables.slaveIndices[ID]; return index === undefined ? undefined : State.variables.slaves[index]; }; + window.getChild = function getChild(ID) { - const V = State.variables; - return V.cribs.find(function(s) { return s.ID === ID; }); + return State.variables.cribs.find(s => s.ID === ID); }; App.Utils.Pronouns = class { diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 0a7f16647ef5914194e41002b4ee7762b87c880e..0134fafc38bde0a1e7a385de1cbadd8148d6355e 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -634,8 +634,6 @@ App.UI.jobLinks = function() { App.UI.SlaveInteract = { fucktoyPref: function() { - let elem = jQuery('#fucktoypref'); - elem.empty(); let res = ""; /** @type {App.Entity.SlaveState} */ const slave = State.variables.activeSlave; @@ -663,9 +661,7 @@ App.UI.SlaveInteract = { links.push(`<<link "No Preference">><<set $activeSlave.toyHole = "all ${slave.possessive} holes">><<replace "#hole">>$activeSlave.toyHole<</replace>><</link>>`); res += links.join(' | ') + '<br>'; } - let ins = jQuery(document.createDocumentFragment()); - ins.wiki(res); - elem.append(ins); + App.UI.replace('#fucktoypref', res); }, assignmentBlock: function(blockId) { diff --git a/src/js/colorinput.js b/src/js/colorinput.js index 4e9a61d1e70fb97d7da8521eb040a4721ffa3c6f..b97711b59ca92104febaa67be13e31c62d3f4ebc 100644 --- a/src/js/colorinput.js +++ b/src/js/colorinput.js @@ -4,13 +4,9 @@ Macro.add("colorinput", { let e = []; return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("default value"), this.error("no " + e.join(" or ") + " specified"); } - if ("string" !== typeof this.args[0]) { - return this.error("variable name argument is not a string"); - } + if ("string" !== typeof this.args[0]) { return this.error("variable name argument is not a string"); } let varName = this.args[0].trim(); - if ("$" !== varName[0] && "_" !== varName[0]) { - return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)'); - } + if ("$" !== varName[0] && "_" !== varName[0]) { return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)'); } Config.debug && this.debugView.modes({ block: true }); diff --git a/src/js/dTree.min.js b/src/js/dTree.min.js index b29089b88995fe7df6cab432f07f2e71d7f2e090..763229745b4f0a14cca35e4266268d9882de2a77 100644 --- a/src/js/dTree.min.js +++ b/src/js/dTree.min.js @@ -2,9 +2,9 @@ ; (function (window, define, exports) { /** - * @license - * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE - */ +* @license +* Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE +*/ ;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function i(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n);); return n}function o(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function f(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function c(n,t){return!(null==n||!n.length)&&-1<d(n,t,0)}function a(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function l(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function s(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r]; return n}function h(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function p(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function _(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function g(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function d(n,t,r){if(t===t)n:{ diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index e52e5d8c00b2541fab9aab439abd3ae320ab87c2..0fcc266f1b98cae9238c5791aca57e66ea26e45e 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -30,7 +30,7 @@ App.Entity.Utils.SlaveDataSchemeCleanup = (function() { for (let prop in slave) { if (prop.startsWith("pornType")) { let fameName = prop.substr(pornTypeLength); - // lowercase firs charachter + // lowercase first character fameName = fameName.charAt(0).toLowerCase() + fameName.substr(1); slave.porn.fame[fameName] = slave[prop]; delete slave[prop]; @@ -201,11 +201,11 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { /** * @param {App.Entity.SlaveState} slave - * @param {number} isIncubatorSlave + * @param {boolean} [isIncubatorSlave] */ - function SlaveDatatypeCleanup(slave, isIncubatorSlave) { + function SlaveDatatypeCleanup(slave, isIncubatorSlave = false) { V = State.variables; - if (isIncubatorSlave !== true) { + if (!isIncubatorSlave) { slaveAgeDatatypeCleanup(slave); } slavePhysicalDatatypeCleanup(slave); @@ -1516,7 +1516,7 @@ window.EconomyDatatypeCleanup = function EconomyDatatypeCleanup() { V.ASlaves = Math.max(+V.ASlaves, 0) || 0; V.shelterAbuse = Math.max(+V.shelterAbuse, 0) || 0; - V.arcologies[0].prosperity = Math.clamp(+V.arcologies[0].prosperity, 1, 300) || 1; + V.arcologies[0].prosperity = Math.clamp(+V.arcologies[0].prosperity, 1, V.AProsperityCap) || 1; V.AProsperityCap = Math.max(+V.AProsperityCap, 0) || 0; V.arcologies[0].ownership = Math.clamp(+V.arcologies[0].ownership, 0, 100) || 0; V.arcologies[0].minority = Math.clamp(+V.arcologies[0].minority, 0, 100) || 0; @@ -1672,9 +1672,7 @@ window.FacilityDatatypeCleanup = (function() { if (!Array.isArray(facilityIDArray)) { facilityIDArray = []; } else if (typeof facilityIDArray[0] === "object") { - facilityIDArray = facilityIDArray.map(function(a) { - return a.ID; - }); + facilityIDArray = facilityIDArray.map(a => a.ID); } } helperFunction(V.BrothiIDs); diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 0c92b469acd7ad1f7ef1e18f0094dce7e0524106..56df0d3ff6874c551a49f057fc9ecd36f32e95d0 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -1399,8 +1399,7 @@ window.getSlaveStatisticData = function(s, facility) { return data; }; -window.initFacilityStatistics = function(facility) { - facility = facility || {}; +window.initFacilityStatistics = function(facility = {}) { facility.adsIncome = 0; facility.maintenance = 0; facility.totalIncome = 0; diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 0da9de9f17661dd952ac24e1dd78d72120fe83cb..bb9d91a2f3f676c44c97405d66e06b84d089efdc 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -1233,7 +1233,7 @@ window.generateRandomEventPoolStandard = function(eventSlave) { if (eventSlave.skill.entertainment >= 100) { if (eventSlave.trust > 50) { - if (["serve the public", "serve in the club"].includes(eventSlave.assignment)) { + if (["serve in the club", "serve the public"].includes(eventSlave.assignment)) { State.variables.RESSevent.push("masterful entertainer"); } } @@ -1289,7 +1289,7 @@ window.generateRandomEventPoolStandard = function(eventSlave) { } } - if (["large plug", "long, large plug", "huge plug", "long, huge plug"].includes(eventSlave.buttplug)) { + if (["huge plug", "large plug", "long, huge plug", "long, large plug"].includes(eventSlave.buttplug)) { if (eventSlave.assignment !== "stay confined" && isSlaveAvailable(eventSlave)) { if (eventSlave.devotion <= 20) { if (eventSlave.trust >= -50) { @@ -1732,7 +1732,7 @@ window.generateRandomEventPoolStandard = function(eventSlave) { if (eventSlave.fetishKnown === 1) { if (eventSlave.fetish === "cumslut" || eventSlave.energy > 95) { - if (["whore", "serve the public", "work in the brothel", "serve in the club", "work a glory hole"].includes(eventSlave.assignment)) { + if (["serve in the club", "serve the public", "whore", "work a glory hole", "work in the brothel"].includes(eventSlave.assignment)) { if (eventSlave.devotion > 20) { if (State.variables.PC.dick !== 0) { State.variables.RESSevent.push("cumslut whore"); diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js index ddebef151e41ad86542cfbe583a34e220f96e14a..03dc2cdece4d59e73b6cfd65b988ab89aa830a1f 100644 --- a/src/js/futureSocietyJS.js +++ b/src/js/futureSocietyJS.js @@ -1,7 +1,39 @@ window.FutureSocieties = (function() { + "use strict"; + const FSString2Property = { // blame Hedonism and Eugenics for this + Supremacist: "FSSupremacist", + Subjugationist: "FSSubjugationist", + GenderRadicalist: "FSGenderRadicalist", + GenderFundamentalist: "FSGenderFundamentalist", + Degradationist: "FSDegradationist", + Paternalist: "FSPaternalist", + BodyPurist: "FSBodyPurist", + TransformationFetishist: "FSTransformationFetishist", + YouthPreferentialist: "FSYouthPreferentialist", + MaturityPreferentialist: "FSMaturityPreferentialist", + SlimnessEnthusiast: "FSSlimnessEnthusiast", + AssetExpansionist: "FSAssetExpansionist", + Pastoralist: "FSPastoralist", + PhysicalIdealist: "FSPhysicalIdealist", + Hedonistic: "FSHedonisticDecadence", + ChattelReligionist: "FSChattelReligionist", + RomanRevivalist: "FSRomanRevivalist", + EgyptianRevivalist: "FSEgyptianRevivalist", + EdoRevivalist: "FSEdoRevivalist", + ArabianRevivalist: "FSArabianRevivalist", + ChineseRevivalist: "FSChineseRevivalist", + AztecRevivalist: "FSAztecRevivalist", + RepopulationFocus: "FSRepopulationFocus", + Eugenics: "FSRestart" + }; + const SocietyList = Object.keys(FSString2Property).map(key => FSString2Property[key]); // This returns an array containing the values of FSString2Property. E.g. "FSSupremacist" and "FSSubjugationist" + return { remove: removeFS, - DecorationCleanup: DecorationCleanup + DecorationCleanup: DecorationCleanup, + Change: FSChange, + ChangePorn: FSChangePorn, + HighestDecoration: FSHighestDecoration }; // call as FutureSocieties.remove(FS) @@ -18,12 +50,8 @@ window.FutureSocieties = (function() { return; } - if (FS === "FSSupremacist" || FS === "FSSubjugationist") { - FSLaw += "ME"; - } - if (FS !== "FSNull") { - arcology[FSDecoration] = 20; - } + if (FS === "FSSupremacist" || FS === "FSSubjugationist") { FSLaw += "ME"; } + if (FS !== "FSNull") { arcology[FSDecoration] = 20; } arcology[FS] = "unset"; switch (FS) { case "FSPaternalist": @@ -94,24 +122,21 @@ window.FutureSocieties = (function() { /* helper function, not callable */ function resetFSCredits() { const V = State.variables; + const arcology = V.arcologies[0]; let activeFS = 0; - for (let i = 0; i < setup.FutureSocieties.length; i++) { - if (V.arcologies[0][setup.FutureSocieties[i]] > 0) { + for (let i = 0; i < SocietyList.length; i++) { + if (arcology[SocietyList[i]] > 0) { activeFS++; } } - if (V.arcologies[0].FSNull > 0) { - // possibly recalculate for multiculturalism - activeFS--; + if (arcology.FSNull > 0) { // multiculturalism is accounted for separately if (V.FSCreditCount === 4) { - activeFS += V.arcologies[0].FSNull / 25; + activeFS += arcology.FSNull / 25; } else if (V.FSCreditCount === 6) { - activeFS += V.arcologies[0].FSNull / 17; + activeFS += arcology.FSNull / 17; } else if (V.FSCreditCount === 7) { - activeFS += V.arcologies[0].FSNull / 15; - } else { - activeFS += V.arcologies[0].FSNull / 20; - } + activeFS += arcology.FSNull / 15; + } else { activeFS += arcology.FSNull / 20; } } V.FSCredits = Math.max(Math.trunc(V.FSGotRepCredits - activeFS), 0); } @@ -136,36 +161,10 @@ window.FutureSocieties = (function() { /* decoration should be passed as "facilityDecoration" in quotes. For example, ValidateFacilityDecoration("brothelDecoration"). The quotes are important, do not pass it as a story variable. */ function ValidateFacilityDecoration(decoration) { const V = State.variables; - const decorationToFSName = { - standard: "standard", - Supremacist: "FSSupremacist", - Subjugationist: "FSSubjugationist", - 'Gender Radicalist': "FSGenderRadicalist", - 'Gender Fundamentalist': "FSGenderFundamentalist", - Degradationist: "FSDegradationist", - Paternalist: "FSPaternalist", - 'Body Purist': "FSBodyPurist", - 'Transformation Fetishist': "FSTransformationFetishist", - 'Youth Preferentialist': "FSYouthPreferentialist", - 'Maturity Preferentialist': "FSMaturityPreferentialist", - 'Slimness Enthusiast': "FSSlimnessEnthusiast", - 'Asset Expansionist': "FSAssetExpansionist", - Pastoralist: "FSPastoralist", - 'Physical Idealist': "FSPhysicalIdealist", - Hedonistic: "FSHedonisticDecadence", - 'Chattel Religionist': "FSChattelReligionist", - 'Roman Revivalist': "FSRomanRevivalist", - 'Egyptian Revivalist': "FSEgyptianRevivalist", - 'Edo Revivalist': "FSEdoRevivalist", - 'Arabian Revivalist': "FSArabianRevivalist", - 'Chinese Revivalist': "FSChineseRevivalist", - 'Aztec Revivalist': "FSAztecRevivalist", - 'Repopulation Focus': "FSRepopulationFocus", - Eugenics: "FSRestart" - }; - const activeFS = decorationToFSName[V[decoration]]; + const FSString = V[decoration].replace(/ /g, ''); // removes spaces + const activeFS = FSString2Property[FSString]; // gets the property name - if (activeFS === "standard") { + if (FSString === "standard") { // nothing to do } else if (activeFS === undefined) { // eslint-disable-next-line no-console @@ -179,259 +178,46 @@ window.FutureSocieties = (function() { V[decoration] = "standard"; } } -})(); -window.FSChange = function FSChange(FS, magnitude, bonusMultiplier = 1) { - const V = State.variables; - let errorMessage = ''; + /* call as FutureSocieties.Change() */ + /* FSString should be in the FSString2Property object above */ + function FSChange(FSString, magnitude, bonusMultiplier = 1) { + const V = State.variables; + const arcology = V.arcologies[0]; + const activeFS = FSString2Property[FSString]; - switch (FS) { - case 'Supremacist': - if (Number.isFinite(V.arcologies[0].FSSupremacist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSupremacist / V.FSLockinLevel) / 3, 'futureSocieties'); // Reducing the reputation impact of slaves that are not adhering to societal ideals properly - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSupremacist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSSupremacist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Subjugationist': - if (Number.isFinite(V.arcologies[0].FSSubjugationist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSubjugationist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSubjugationist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSSubjugationist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'GenderRadicalist': - if (Number.isFinite(V.arcologies[0].FSGenderRadicalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderRadicalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderRadicalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSGenderRadicalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'GenderFundamentalist': - if (Number.isFinite(V.arcologies[0].FSGenderFundamentalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSGenderFundamentalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Paternalist': - if (Number.isFinite(V.arcologies[0].FSPaternalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSPaternalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Degradationist': - if (Number.isFinite(V.arcologies[0].FSDegradationist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSDegradationist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSDegradationist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSDegradationist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'AssetExpansionist': - if (Number.isFinite(V.arcologies[0].FSAssetExpansionist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAssetExpansionist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAssetExpansionist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSAssetExpansionist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'SlimnessEnthusiast': - if (Number.isFinite(V.arcologies[0].FSSlimnessEnthusiast)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSlimnessEnthusiast / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSlimnessEnthusiast / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSSlimnessEnthusiast += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'TransformationFetishist': - if (Number.isFinite(V.arcologies[0].FSTransformationFetishist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSTransformationFetishist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSTransformationFetishist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSTransformationFetishist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'BodyPurist': - if (Number.isFinite(V.arcologies[0].FSBodyPurist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSBodyPurist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSBodyPurist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSBodyPurist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'MaturityPreferentialist': - if (Number.isFinite(V.arcologies[0].FSMaturityPreferentialist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSMaturityPreferentialist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSMaturityPreferentialist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSMaturityPreferentialist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'YouthPreferentialist': - if (Number.isFinite(V.arcologies[0].FSYouthPreferentialist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSYouthPreferentialist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSYouthPreferentialist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSYouthPreferentialist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Pastoralist': - if (Number.isFinite(V.arcologies[0].FSPastoralist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPastoralist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPastoralist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSPastoralist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'PhysicalIdealist': - if (Number.isFinite(V.arcologies[0].FSPhysicalIdealist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPhysicalIdealist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPhysicalIdealist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSPhysicalIdealist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'ChattelReligionist': - if (Number.isFinite(V.arcologies[0].FSChattelReligionist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChattelReligionist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChattelReligionist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSChattelReligionist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'RomanRevivalist': - if (Number.isFinite(V.arcologies[0].FSRomanRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSRomanRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'AztecRevivalist': - if (Number.isFinite(V.activeArcology.FSAztecRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAztecRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAztecRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSAztecRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'EgyptianRevivalist': - if (Number.isFinite(V.arcologies[0].FSEgyptianRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSEgyptianRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'EdoRevivalist': - if (Number.isFinite(V.arcologies[0].FSEdoRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEdoRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEdoRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSEdoRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'ArabianRevivalist': - if (Number.isFinite(V.arcologies[0].FSArabianRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSArabianRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSArabianRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSArabianRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'ChineseRevivalist': - if (Number.isFinite(V.arcologies[0].FSChineseRevivalist)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChineseRevivalist / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChineseRevivalist / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSChineseRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Repopulationist': - if (Number.isFinite(V.arcologies[0].FSRepopulationFocus)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRepopulationFocus / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRepopulationFocus / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSRepopulationFocus += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Eugenics': - if (Number.isFinite(V.arcologies[0].FSRestart)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRestart / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRestart / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSRestart += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; - } - break; - case 'Hedonism': - if (Number.isFinite(V.arcologies[0].FSHedonisticDecadence)) { - if (magnitude < 0) { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSHedonisticDecadence / V.FSLockinLevel) / 3, 'futureSocieties'); - } else { - repX(magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSHedonisticDecadence / V.FSLockinLevel), 'futureSocieties'); - } - V.arcologies[0].FSHedonisticDecadence += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; + if (activeFS === undefined) { + return "<span class='red'>ERROR: bad FS reference</span>"; + } else if (Number.isFinite(arcology[activeFS])) { + if (magnitude < 0) { + repX(magnitude * V.FSSingleSlaveRep * (arcology[activeFS] / V.FSLockinLevel) / 3, 'futureSocieties'); // Reducing the reputation impact of slaves that are not adhering to societal ideals properly + } else { + repX(magnitude * V.FSSingleSlaveRep * (arcology[activeFS] / V.FSLockinLevel), 'futureSocieties'); } - break; - default: - errorMessage += `<span class="red">ERROR: bad FS reference</span>`; + arcology[activeFS] += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier; + } + } + + /* call as FutureSocieties.ChangePorn() */ + /* FSString should be in the FSString2Property object above */ + function FSChangePorn(FSString, magnitude) { + return FSChange(FSString, magnitude, State.variables.pornFameBonus); } - return errorMessage; -}; -window.FSChangePorn = function FSChangePorn(FS, magnitude) { - return FSChange(FS, magnitude, State.variables.pornFameBonus); -}; + /** + * Returns the highest decoration level of active future societies, call as FutureSocieties.HighestDecoration() + * @returns {number} + */ + function FSHighestDecoration() { + const arcology = State.variables.arcologies[0]; + const decorationList = SocietyList.map(FS => FS + "Decoration"); + let level = 20; // All decorations start at 20 + + for (let i = 0; i < decorationList.length; i++) { + if (arcology[decorationList[i]] > level) { + level = arcology[decorationList[i]]; + } + } + return level; + } +})(); diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js index fae8eb733bba840b0d3eb35d83971e011a63f84a..9079faea8a30a2eab885efbddd3e2829e191115a 100644 --- a/src/js/generateGenetics.js +++ b/src/js/generateGenetics.js @@ -306,12 +306,8 @@ window.generateGenetics = (function() { let prop = ""; for (prop in skinToMelanin) { - if (!skinToMelanin.hasOwnProperty(prop)) { - continue; - } - if (skinIndex >= skinToMelanin[prop]) { - return prop; - } + if (!skinToMelanin.hasOwnProperty(prop)) { continue; } + if (skinIndex >= skinToMelanin[prop]) { return prop; } } return prop; // skinIndex can be zero - now false? } @@ -564,9 +560,7 @@ window.generateGenetics = (function() { } else { fetish = jsEither(["none", "none", "none", "none", "none", mother.fetish, mother.fetish]); } - if (fetish === "mindbroken") { - fetish = "none"; - } + if (fetish === "mindbroken") { fetish = "none"; } return fetish; } @@ -1559,38 +1553,6 @@ window.generateChild = function(mother, ova, destination) { child.cloneID = genes.cloneID; } - if (child.geneticQuirks.dwarfism === 2 && child.geneticQuirks.gigantism !== 2) { - if (child.actualAge === 3) { - child.height = jsRandom(74, 79); - } else if (child.actualAge === 4) { - child.height = jsRandom(77, 87); - } else if (child.actualAge === 5) { - child.height = jsRandom(83, 93); - } else if (child.actualAge === 6) { - child.height = jsRandom(85, 97); - } else if (child.actualAge === 7) { - child.height = jsRandom(93, 102); - } else if (child.actualAge === 8) { - child.height = jsRandom(95, 105); - } else if (child.actualAge === 9) { - child.height = jsRandom(100, 110); - } else if (child.actualAge === 10) { - child.height = jsRandom(102, 115); - } else if (child.actualAge === 11) { - child.height = jsRandom(105, 120); - } else if (child.actualAge === 12) { - child.height = jsRandom(106, 122); - } else if (child.actualAge === 13) { - child.height = jsRandom(110, 127); - } else if (child.actualAge === 14) { - child.height = jsRandom(113, 130); - } else if (child.actualAge === 15) { - child.height = jsRandom(117, 133); - } else { - child.height = jsRandom(120, 135); - } - } - child.mother = genes.mother; child.father = genes.father; child.nationality = genes.nationality; @@ -1623,21 +1585,11 @@ window.generateChild = function(mother, ova, destination) { child.birthWeek = 0; child.energy = 0; child.anus = 0; - if (child.vagina > 0) { - child.vagina = 0; - } - if (child.fetish !== "none") { - child.fetishStrength = 20; - } - if (child.dick > 0) { - child.foreskin = 1; child.balls = 1; child.scrotum = 1; - } - if (genes.faceShape !== undefined) { - child.faceShape = genes.faceShape; - } - if (mother.addict > 0) { - child.addict = Math.trunc(mother.addict / 2); - } + if (child.vagina > 0) { child.vagina = 0; } + if (child.fetish !== "none") { child.fetishStrength = 20; } + if (child.dick > 0) { child.foreskin = 1; child.balls = 1; child.scrotum = 1; } + if (genes.faceShape !== undefined) { child.faceShape = genes.faceShape; } + if (mother.addict > 0) { child.addict = Math.trunc(mother.addict / 2); } child.career = "a slave since birth"; child.birthName = child.slaveName; child.birthSurname = child.slaveSurname; diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js index 548250a01afe75cb414361bf79c05068f67b83ab..e09b3b93bc8be739ace39a6678137c8dcc2d4444 100644 --- a/src/js/generateNewSlaveJS.js +++ b/src/js/generateNewSlaveJS.js @@ -112,7 +112,13 @@ window.GenerateNewSlave = (function() { } function generateXXBodyProportions() { - slave.height = Math.round(Height.random(slave)); + if (slave.geneticQuirks.dwarfism === 2 && slave.geneticQuirks.gigantism !== 2) { + slave.height = Math.round(Height.random(slave, {limitMult: [-4, -1], spread: 0.15})); + } else if (slave.geneticQuirks.gigantism === 2) { + slave.height = Math.round(Height.random(slave, {limitMult: [3, 10], spread: 0.15})); + } else { + slave.height = Math.round(Height.random(slave)); + } if (slave.height >= Height.mean(slave) * 170 / 162.5) { slave.hips = jsEither([-1, 0, 0, 1, 1, 2, 2]); slave.shoulders = jsEither([-1, -1, 0, 0, 0, 1]); @@ -139,7 +145,13 @@ window.GenerateNewSlave = (function() { } function generateXYBodyProportions() { - slave.height = Math.round(Height.random(slave)); + if (slave.geneticQuirks.dwarfism === 2 && slave.geneticQuirks.gigantism !== 2) { + slave.height = Math.round(Height.random(slave, {limitMult: [-4, -1], spread: 0.15})); + } else if (slave.geneticQuirks.gigantism === 2) { + slave.height = Math.round(Height.random(slave, {limitMult: [3, 10], spread: 0.15})); + } else { + slave.height = Math.round(Height.random(slave)); + } if (slave.physicalAge <= 13) { if (slave.height > Height.mean(slave) * 170 / 172.5) { slave.hips = jsEither([-2, -1, -1, 0, 1]); @@ -1138,6 +1150,20 @@ window.GenerateNewSlave = (function() { } else if (chance >= 19500) { slave.geneticQuirks.macromastia = 1; } + chance = jsRandom(1, 20000); + if (chance >= 19975) { + slave.geneticQuirks.dwarfism = 2; + } else if (chance >= 19900) { + slave.geneticQuirks.dwarfism = 1; + } + /* + chance = jsRandom(1, 20000); + if (chance >= 19995) { + slave.geneticQuirks.gigantism = 2; + } else if (chance >= 19950) { + slave.geneticQuirks.gigantism = 1; + } + */ } function generateXYGeneticQuirks() { diff --git a/src/js/hTagMacroJS.js b/src/js/hTagMacroJS.js index 4389817df10a6034a323a131aafa4601e9df71cf..6918db8d6270cf5814f550071268aa1d61710645 100644 --- a/src/js/hTagMacroJS.js +++ b/src/js/hTagMacroJS.js @@ -1,17 +1,18 @@ -/* - * <<htag>> macro - * A simple macro which allows to create wrapping html elements with dynamic IDs. - * idea blatantly robbed from the spanMacroJS.tw but expanded to a more generic - * case, allowing <div>, <button> or whatever you want. elements, default is for - * the div though. In addition, you can pass an object in as the first argument - * instead of an id, and each of the object's attributes will become attributes - * of the generate tag. - * - * Usage: <<htag id>>...<</htag>> - * Usage: <<htag id tag>>...<</htag>> - * Usage: <<htag attributes>>...<</htag>> - * Usage: <<htag attributes tag>>...<</htag>> - */ + + /* +* <<htag>> macro +* A simple macro which allows to create wrapping html elements with dynamic IDs. +* idea blatantly robbed from the spanMacroJS.tw but expanded to a more generic +* case, allowing <div>, <button> or whatever you want. elements, default is for +* the div though. In addition, you can pass an object in as the first argument +* instead of an id, and each of the object's attributes will become attributes +* of the generate tag. +* +* Usage: <<htag id>>...<</htag>> +* Usage: <<htag id tag>>...<</htag>> +* Usage: <<htag attributes>>...<</htag>> +* Usage: <<htag attributes tag>>...<</htag>> +*/ Macro.add('htag', { tags: null, handler() { @@ -23,22 +24,19 @@ Macro.add('htag', { return `${key}="${val}"`; } - if (1 > this.args.length) { - return this.error('invalid syntax, format: <<htag [id [ tag ] | attributes [ tag ] >>'); - } - if (1 < this.args.length) { - htag = String(this.args[1]).trim(); - } + if (1 > this.args.length) { return this.error('invalid syntax, format: <<htag [id [ tag ] | attributes [ tag ] >>'); } + if (1 < this.args.length) { htag = String(this.args[1]).trim(); } if ("object" === typeof this.args[0]) { attributes = $.map(this.args[0], munge).join(" "); } else { attributes = `id="${String(this.args[0]).trim()}"`; } - if (Config.debug) { - this.debugView.modes({ + if (Config.debug) + { +this.debugView.modes({ block: true - }); - } + }); +} jQuery(`<${htag} ${attributes} />`) .wiki(payload) diff --git a/src/js/heroCreator.js b/src/js/heroCreator.js index a385497f115ab1367ed20506a0440e9b32a17556..1200dc10bd31b2393952563c997c3e0f336eb2fa 100644 --- a/src/js/heroCreator.js +++ b/src/js/heroCreator.js @@ -11,13 +11,9 @@ App.Utils.getHeroSlave = function(heroSlave, baseHeroSlave) { function deepAssign(target, source) { if (isObject(target) && isObject(source)) { for (const key in source) { - if (!source.hasOwnProperty(key)) { - continue; - } + if (!source.hasOwnProperty(key)) { continue; } if (isObject(source[key])) { - if (!target.hasOwnProperty(key)) { - target[key] = {}; - } + if (!target.hasOwnProperty(key)) { target[key] = {}; } deepAssign(target[key], source[key]); } else { Object.assign(target, { diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 32d9ae02155eecc21c0bb725112f9ae40029d23e..f9417498ebfff33d1ef0725f6b9d566bb37bdf39 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -22,7 +22,6 @@ window.getPregBellySize = function(s) { * @returns {string} */ window.bellyAdjective = function(slave) { - slave = slave || State.variables.activeSlave; if (slave.belly >= 1500) { if (slave.belly >= 1000000) { if (slave.preg > slave.pregData.normalBirth / 4) { diff --git a/src/js/rbuttonJS.js b/src/js/rbuttonJS.js index b9dfb4e8e9ebe0c9b413be9d40ad27d564bfd168..2f2df1d7ca5b21c6f159e1b82f9d82935ec337f0 100644 --- a/src/js/rbuttonJS.js +++ b/src/js/rbuttonJS.js @@ -12,12 +12,8 @@ Macro.add('rbutton', { handler() { if (this.args.length < 2) { const errors = []; - if (this.args.length < 1) { - errors.push('variable name'); - } - if (this.args.length < 2) { - errors.push('checked value'); - } + if (this.args.length < 1) { errors.push('variable name'); } + if (this.args.length < 2) { errors.push('checked value'); } return this.error(`no ${errors.join(' or ')} specified`); } diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js index 573f3b7ba71fc3218ebc36aba22c15708c6fac05..f9ec0a9bf527548dc7156f6a082006c35631cee7 100644 --- a/src/js/sexActsJS.js +++ b/src/js/sexActsJS.js @@ -1,185 +1,61 @@ -/** - * @param {number} [times=1] is how many times to increment the anal counts. - * @returns {string} - */ -window.AnalVCheck = function AnalVCheck(times = 1) { - const V = State.variables; - const slave = V.activeSlave; - const pronouns = getPronouns(slave); - const he = pronouns.pronoun; - // him = pronouns.object, - const his = pronouns.possessive; - // hers = pronouns.possessivePronoun, - // himself = pronouns.objectReflexive, - // boy = pronouns.noun; - const He = capFirstChar(he); - const His = capFirstChar(his); - let r = ``; - if (canDoAnal(slave) && slave.anus === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. Before long ${he}'s moaning loudly as you continue working away at ${his} butthole. `; - if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} anal virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; - } else { - r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. `; - if ((slave.fetishKnown && slave.fetish === "buttslut") || (slave.energy > 95) || (slave.attrXX >= 85 && V.PC.dick === 0)) { - r += `${He} can't wait to be fucked in the ass by you again.`; - } else { - r += `${He} looks forward to having ${his} asshole fucked by you again.`; - } - } - slave.devotion += 4; - } else if (slave.devotion > 20) { - r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${His} moans become louder and louder as you continue working away at ${his} butthole. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; - } else if (slave.devotion >= -20) { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; - slave.trust -= 5; - } else { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; - slave.trust -= 5; - slave.devotion -= 5; - } - slave.anus = 1; - } - if (canDoAnal(slave)) { - if (canImpreg(slave, V.PC)) { - r += knockMeUp(slave, 10, 1, -1, 1); - } - V.analTotal += times; - slave.counter.anal += times; - } - return r; -}; +window.VCheck = (function () { + "use strict"; + let he; + let him; + let his; + let hers; + let himself; + let boy; + let He; + let His; -/** - * @param {number} [times=1] is how many times to increment the vaginal counts. - * @returns {string} - */ -window.VaginalVCheck = function VaginalVCheck(times = 1) { - const V = State.variables; - const slave = V.activeSlave; - /* eslint-disable */ - 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); - /* eslint-enable */ - let r = ``; - if (canDoVaginal(slave) && slave.vagina === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; - if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; - } else { - r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you.</span> `; - if ((slave.fetishKnown && slave.fetish === "pregnancy") || (slave.energy > 95) || (slave.attrXY >= 85 && V.PC.dick === 1)) { - r += `${He} can't wait to have ${his} pussy fucked by you again.`; - } else { - r += `${He} looks forward to having ${his} pussy fucked by you again.`; - } - } - slave.devotion += 4; - } else if (slave.devotion > 20) { - r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; - } else if (slave.devotion >= -20) { - r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue thrusting into ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity this way and <span class="gold">fears</span> the next time you'll conquer ${him}. ${He} dreads getting violated by you again.`; - slave.trust -= 5; - slave.devotion -= 5; - } else { - r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} tries to struggle, but you only pound harder. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for robbing ${his} of ${his} virginity. ${He} dreads getting fucked by you again.`; - slave.trust -= 10; - slave.devotion -= 15; - } - slave.vagina = 1; - } - if (canDoVaginal(slave)) { - if (canImpreg(slave, V.PC)) { - r += knockMeUp(slave, 10, 0, -1, 1); - } - V.vaginalTotal += times; - slave.counter.vaginal += times; + return { + Anal: AnalVCheck, + Vaginal: VaginalVCheck, + Both: BothVCheck, + Simple: SimpleVCheck, + Partner: PartnerVCheck + }; + + function setScopedPronouns(slave) { + const 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); } - return r; -}; -/** - * @param {number} [analTimes=1] how many times to increment the anal counts, if there is no vagina available. - * @param {number} [bothTimes=1] how many times to increment both holes counts (usually it is half of analTimes). - * @returns {string} -*/ -window.BothVCheck = function BothVCheck(analTimes = 1, bothTimes = 1) { - const V = State.variables; - const slave = V.activeSlave; - /* eslint-disable */ - 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); - /* eslint-enable */ - let r = ``; - if (canDoVaginal(slave)) { - if (slave.vagina === 0) { - if (canDoAnal(slave) && slave.anus === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin holes.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} moans. `; - if (slave.tankBaby === 2) { - r += `${He} believes you taking ${his} virgin holes <span class="hotpink">will keep ${him} from suffering.</span> ${He} expects you to require ${his} holes as tribute again soon.`; - } else { - r += `<span class="hotpink">${He}'s so devoted ${he} enjoys being fucked in both holes for the first time.</span> ${He} looks forward to having ${his} holes fucked by you again.`; - } - slave.devotion += 4; - } else if (slave.devotion <= 20) { - r += `You force yourself into ${his} pussy before working your way into ${his} ass. ${He} sobs and cries with disgust while you alternate between the two holes. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity and anal virginity in one <span class="gold">brutal</span> incident. ${He} dreads having ${his} holes violated by you again.`; - slave.trust -= 5; - slave.devotion -= 5; - } else { - r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} moans. ${He} accepts being fucked in both holes for the first time. ${He} looks forward to having ${his} holes fucked by you again.`; - } - slave.anus = 1; - } else { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `As it's ${his} first time, you ease yourself into ${his} pussy and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; - if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; - } else { - r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you.</span> ${He} looks forward to having ${his} pussy fucked by you again.`; - } - slave.devotion += 4; - } else if (slave.devotion <= 20) { - r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for taking ${his} virginity. ${He} dreads having ${his} pussy violated by you again.`; - slave.trust -= 5; - slave.devotion -= 5; - } else { - r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually increasing the intensity of your thrusts while ${he} softly moans. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; - } - } - slave.vagina = 1; - } else if (canDoAnal(slave) && slave.anus === 0) { + /** call as VCheck.Anal() + * @param {number} [times=1] is how many times to increment the anal counts. + * @returns {string} + */ + function AnalVCheck(times = 1) { + const V = State.variables; + const slave = V.activeSlave; + let r = ''; + setScopedPronouns(slave); + + if (canDoAnal(slave) && slave.anus === 0) { r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. Before long ${he}'s moaning loudly as you continue working away at ${his} butthole. `; if (slave.tankBaby === 2) { r += `${He} thinks of losing ${his} anal virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; } else { - r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. ${He} looks forward to having ${his} asshole fucked by you again.`; + r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. `; + if ((slave.fetishKnown && slave.fetish === "buttslut") || (slave.energy > 95) || (slave.attrXX >= 85 && V.PC.dick === 0)) { + r += `${He} can't wait to be fucked in the ass by you again.`; + } else { + r += `${He} looks forward to having ${his} asshole fucked by you again.`; + } } slave.devotion += 4; } else if (slave.devotion > 20) { - r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; + r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${His} moans become louder and louder as you continue working away at ${his} butthole. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; } else if (slave.devotion >= -20) { r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; slave.trust -= 5; @@ -191,135 +67,256 @@ window.BothVCheck = function BothVCheck(analTimes = 1, bothTimes = 1) { slave.anus = 1; } if (canDoAnal(slave)) { - V.vaginalTotal += bothTimes; - V.analTotal += bothTimes; - slave.counter.vaginal += bothTimes; - slave.counter.anal += bothTimes; - if (canImpreg(slave, V.PC)) { - r += knockMeUp(slave, 10, 2, -1, 1); - } - } else { - V.vaginalTotal += bothTimes; - slave.counter.vaginal += bothTimes; if (canImpreg(slave, V.PC)) { - r += knockMeUp(slave, 10, 0, -1, 1); + r += knockMeUp(slave, 10, 1, -1, 1); } + V.analTotal += times; + slave.counter.anal += times; } - } else if (canDoAnal(slave)) { - if (slave.anus === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; + return r; + } + + /** call as VCheck.Vaginal() + * @param {number} [times=1] is how many times to increment the vaginal counts. + * @returns {string} + */ + function VaginalVCheck(times = 1) { + const V = State.variables; + const slave = V.activeSlave; + let r = ''; + setScopedPronouns(slave); + + if (canDoVaginal(slave) && slave.vagina === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} anal virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; + r += `${He} thinks of losing ${his} virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; } else { - r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. ${He} looks forward to having ${his} asshole fucked by you again.`; + r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you.</span> `; + if ((slave.fetishKnown && slave.fetish === "pregnancy") || (slave.energy > 95) || (slave.attrXY >= 85 && V.PC.dick === 1)) { + r += `${He} can't wait to have ${his} pussy fucked by you again.`; + } else { + r += `${He} looks forward to having ${his} pussy fucked by you again.`; + } } slave.devotion += 4; } else if (slave.devotion > 20) { - r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; + r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; } else if (slave.devotion >= -20) { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; - slave.trust -= 5; - } else { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; + r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue thrusting into ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity this way and <span class="gold">fears</span> the next time you'll conquer ${him}. ${He} dreads getting violated by you again.`; slave.trust -= 5; slave.devotion -= 5; + } else { + r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} tries to struggle, but you only pound harder. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for robbing ${his} of ${his} virginity. ${He} dreads getting fucked by you again.`; + slave.trust -= 10; + slave.devotion -= 15; } - slave.anus = 1; + slave.vagina = 1; } - V.analTotal += analTimes; - slave.counter.anal += analTimes; - if (canImpreg(slave, V.PC)) { - r += knockMeUp(slave, 10, 1, -1, 1); + if (canDoVaginal(slave)) { + if (canImpreg(slave, V.PC)) { + r += knockMeUp(slave, 10, 0, -1, 1); + } + V.vaginalTotal += times; + slave.counter.vaginal += times; } + return r; } - return r; -}; -/** - * @param {number} [times=1] how many times to increment either the Vaginal or the Anal counts, if there is no Vagina available. - * @returns {string} -*/ -window.SimpleVCheck = function SimpleVCheck(times=1) { - let r = ``; - if (canDoVaginal(State.variables.activeSlave)) { - r += VaginalVCheck(times); - } else if (canDoAnal(State.variables.activeSlave)) { - r += AnalVCheck(times); + /** call as VCheck.Both() + * @param {number} [analTimes=1] how many times to increment the anal counts, if there is no vagina available. + * @param {number} [bothTimes=1] how many times to increment both holes counts (usually it is half of analTimes). + * @returns {string} + */ + function BothVCheck(analTimes = 1, bothTimes = 1) { + const V = State.variables; + const slave = V.activeSlave; + let r = ''; + setScopedPronouns(slave); + + if (canDoVaginal(slave)) { + if (slave.vagina === 0) { + if (canDoAnal(slave) && slave.anus === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin holes.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} moans. `; + if (slave.tankBaby === 2) { + r += `${He} believes you taking ${his} virgin holes <span class="hotpink">will keep ${him} from suffering.</span> ${He} expects you to require ${his} holes as tribute again soon.`; + } else { + r += `<span class="hotpink">${He}'s so devoted ${he} enjoys being fucked in both holes for the first time.</span> ${He} looks forward to having ${his} holes fucked by you again.`; + } + slave.devotion += 4; + } else if (slave.devotion <= 20) { + r += `You force yourself into ${his} pussy before working your way into ${his} ass. ${He} sobs and cries with disgust while you alternate between the two holes. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity and anal virginity in one <span class="gold">brutal</span> incident. ${He} dreads having ${his} holes violated by you again.`; + slave.trust -= 5; + slave.devotion -= 5; + } else { + r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} moans. ${He} accepts being fucked in both holes for the first time. ${He} looks forward to having ${his} holes fucked by you again.`; + } + slave.anus = 1; + } else { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `As it's ${his} first time, you ease yourself into ${his} pussy and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + if (slave.tankBaby === 2) { + r += `${He} thinks of losing ${his} virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; + } else { + r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you.</span> ${He} looks forward to having ${his} pussy fucked by you again.`; + } + slave.devotion += 4; + } else if (slave.devotion <= 20) { + r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for taking ${his} virginity. ${He} dreads having ${his} pussy violated by you again.`; + slave.trust -= 5; + slave.devotion -= 5; + } else { + r += `As it's ${his} first time, you ease yourself into ${his} pussy before gradually increasing the intensity of your thrusts while ${he} softly moans. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; + } + } + slave.vagina = 1; + } else if (canDoAnal(slave) && slave.anus === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + if (slave.tankBaby === 2) { + r += `${He} thinks of losing ${his} anal virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; + } else { + r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. ${He} looks forward to having ${his} asshole fucked by you again.`; + } + slave.devotion += 4; + } else if (slave.devotion > 20) { + r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; + } else if (slave.devotion >= -20) { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; + slave.trust -= 5; + } else { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; + slave.trust -= 5; + slave.devotion -= 5; + } + slave.anus = 1; + } + if (canDoAnal(slave)) { + V.vaginalTotal += bothTimes; + V.analTotal += bothTimes; + slave.counter.vaginal += bothTimes; + slave.counter.anal += bothTimes; + if (canImpreg(slave, V.PC)) { + r += knockMeUp(slave, 10, 2, -1, 1); + } + } else { + V.vaginalTotal += bothTimes; + slave.counter.vaginal += bothTimes; + if (canImpreg(slave, V.PC)) { + r += knockMeUp(slave, 10, 0, -1, 1); + } + } + } else if (canDoAnal(slave)) { + if (slave.anus === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + if (slave.tankBaby === 2) { + r += `${He} thinks of losing ${his} anal virginity to ${his} ${WrittenMaster(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; + } else { + r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${WrittenMaster(slave)}. ${He} looks forward to having ${his} asshole fucked by you again.`; + } + slave.devotion += 4; + } else if (slave.devotion > 20) { + r += `As it's ${his} first time, you ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; + } else if (slave.devotion >= -20) { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; + slave.trust -= 5; + } else { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; + slave.trust -= 5; + slave.devotion -= 5; + } + slave.anus = 1; + } + V.analTotal += analTimes; + slave.counter.anal += analTimes; + if (canImpreg(slave, V.PC)) { + r += knockMeUp(slave, 10, 1, -1, 1); + } + } + return r; } - return r; -}; -/* - Before using this function, set $partner to the index of the partner in the $slaves array - analTimes is how many times to increment the Anal counts, if there is no Vagina available. - bothTimes is how many times to increment both holes counts (usually it is half of Anal). - In both cases if left undefined it will assume it to be 1. - This also checks for a valid Vagina/Accessory, though most code I've seen does this already, you - never know when someone might use the routine and forget to do such. -*/ -window.PartnerVCheck = function PartnerVCheck(analTimes = 1, bothTimes = 1) { - const V = State.variables; - const partner = V.slaves[V.partner]; - /* eslint-disable */ - const pronouns = getPronouns(partner); - 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); - /* eslint-enable */ - let r = ``; + /** call as VCheck.Simple() + * @param {number} [times=1] how many times to increment either the Vaginal or the Anal counts, if there is no Vagina available. + * @returns {string} + */ + function SimpleVCheck(times = 1) { + if (canDoVaginal(State.variables.activeSlave)) { + return VaginalVCheck(times); + } else if (canDoAnal(State.variables.activeSlave)) { + return AnalVCheck(times); + } + } - if (V.partner < 0 || V.partner >= V.slaves.length) { - r += `<span class="red">PartnerVCheck called with invalid partner '$partner' from passage ${passage()}.</span>`; - } else if (canDoVaginal(partner)) { - if (partner.vagina === 0) { - if (canDoAnal(partner) && partner.anus === 0) { - r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} pussy before gradually working your way into ${his} butthole, alternating between ${his} holes. <span class="lime">This breaks in ${partner.slaveName}'s virgin holes.</span> `; - partner.vagina = 1; + /* call as VCheck.Partner() + Before using this function, set $partner to the index of the partner in the $slaves array + analTimes is how many times to increment the Anal counts, if there is no Vagina available. + bothTimes is how many times to increment both holes counts (usually it is half of Anal). + In both cases if left undefined it will assume it to be 1. + This also checks for a valid Vagina/Accessory, though most code I've seen does this already, you + never know when someone might use the routine and forget to do such. + */ + function PartnerVCheck(analTimes = 1, bothTimes = 1) { + const V = State.variables; + const partner = V.slaves[V.partner]; + let r = ''; + if (partner === undefined) { + return `<span class="red">PartnerVCheck called with invalid partner '${V.partner}' from passage ${passage()}.</span>`; + } + setScopedPronouns(partner); + + if (canDoVaginal(partner)) { + if (partner.vagina === 0) { + if (canDoAnal(partner) && partner.anus === 0) { + r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} pussy before gradually working your way into ${his} butthole, alternating between ${his} holes. <span class="lime">This breaks in ${partner.slaveName}'s virgin holes.</span> `; + partner.vagina = 1; + partner.anus = 1; + } else { + r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} pussy before gradually increasing the intensity of your thrusts. <span class="lime">This breaks in ${partner.slaveName}'s virgin pussy.</span> `; + partner.vagina = 1; + } + } else if (canDoAnal(partner) && partner.anus === 0) { + r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} butthole before gradually increasing the intensity of your thrusts into ${his} ass. <span class="lime">This breaks in ${partner.slaveName}'s virgin ass.</span> `; partner.anus = 1; - } else { - r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} pussy before gradually increasing the intensity of your thrusts. <span class="lime">This breaks in ${partner.slaveName}'s virgin pussy.</span> `; - partner.vagina = 1; } - } else if (canDoAnal(partner) && partner.anus === 0) { - r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} butthole before gradually increasing the intensity of your thrusts into ${his} ass. <span class="lime">This breaks in ${partner.slaveName}'s virgin ass.</span> `; - partner.anus = 1; - } - if (canDoAnal(partner)) { - V.vaginalTotal += bothTimes; - V.analTotal += bothTimes; - partner.counter.vaginal += bothTimes; - partner.counter.anal += bothTimes; - if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 2, -1); + if (canDoAnal(partner)) { + V.vaginalTotal += bothTimes; + V.analTotal += bothTimes; + partner.counter.vaginal += bothTimes; + partner.counter.anal += bothTimes; + if (canImpreg(partner, V.PC)) { + r += knockMeUp(partner, 10, 2, -1); + } + } else { + V.vaginalTotal += bothTimes; + partner.counter.vaginal += bothTimes; + if (canImpreg(partner, V.PC)) { + r += knockMeUp(partner, 10, 0, -1); + } } - } else { - V.vaginalTotal += bothTimes; - partner.counter.vaginal += bothTimes; + } else if (canDoAnal(partner)) { + if (partner.anus === 0) { + r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} butthole before gradually increasing the intensity of your thrusts into ${his} ass. <span class="lime">This breaks in ${partner.slaveName}'s virgin ass.</span> `; + partner.anus = 1; + } + V.analTotal += analTimes; + partner.counter.anal += analTimes; if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 0, -1); + r += knockMeUp(partner, 10, 1, -1); } } - } else if (canDoAnal(partner)) { - if (partner.anus === 0) { - r += `Since it's ${partner.slaveName}'s first time, you take your time and gently ease yourself into ${his} butthole before gradually increasing the intensity of your thrusts into ${his} ass. <span class="lime">This breaks in ${partner.slaveName}'s virgin ass.</span> `; - partner.anus = 1; - } - V.analTotal += analTimes; - partner.counter.anal += analTimes; - if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 1, -1); - } + return r; } - return r; -}; + +})(); /** * fuckCount is how many times to increment either the Vaginal, Anal, or Oral counts, depending on availability of slave. diff --git a/src/js/slaveGenerationJS.js b/src/js/slaveGenerationJS.js index 5bfd070558b506ccbe30fd36c27820bd37dd486d..6b084d970c4e0331b40bff2b49497ec3adb0f5cc 100644 --- a/src/js/slaveGenerationJS.js +++ b/src/js/slaveGenerationJS.js @@ -27,11 +27,9 @@ window.raceToNationality = function raceToNationality(slave) { * @param {string | Object} nationality * @param {string | Object} race * @param {boolean} male - * @param {undefined} [filter] - * @returns {string} + * @param {undefined} [filter] Default: allow all */ -window.generateName = function generateName(nationality, race, male, filter) { - filter = filter || _.stubTrue; /* default: allow all */ +window.generateName = function generateName(nationality, race, male, filter = _.stubTrue) { const lookup = (male ? setup.malenamePoolSelector : setup.namePoolSelector); const result = jsEither( (lookup[`${nationality}.${race}`] || lookup[nationality] || @@ -48,11 +46,9 @@ window.generateName = function generateName(nationality, race, male, filter) { * @param {string | number} nationality * @param {any} race * @param {any} male - * @param {() => true} filter - * @returns {string} + * @param {() => true} [filter] Default: allow all */ -window.generateSurname = function generateSurname(nationality, race, male, filter) { - filter = filter || _.stubTrue; /* default: allow all */ +window.generateSurname = function generateSurname(nationality, race, male, filter = _.stubTrue) { const result = jsEither( (setup.surnamePoolSelector[`${nationality}.${race}`] || setup.surnamePoolSelector[nationality] || diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js new file mode 100644 index 0000000000000000000000000000000000000000..b76da962f4a9f0a14fdfe1d5eed1ef27afe5eede --- /dev/null +++ b/src/js/slaveListing.js @@ -0,0 +1,916 @@ +/** + * @file Functions for rendering lists of slave summaries for various purposes. This includes + * lists for the penthouse/facilities, selecting a slaves, facility leaders. + * + * For documentation see devNotes/slaveListing.md + */ + +App.UI.SlaveList = {}; + +/** + * @callback slaveTextGenerator + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.render = function() { + 'use strict'; + let V; + /** @type {string} */ + let passageName; + /** @type {App.Entity.SlaveState[]} */ + let slaves; + /** @type {boolean} */ + let slaveImagePrinted; + + return renderList; + + /** + * @param {number[]} indices + * @param {Array.<{index: number, rejects: string[]}>} rejectedSlaves + * @param {slaveTextGenerator} interactionLink + * @param {slaveTextGenerator} [postNote] + * @returns {string} + */ + function renderList(indices, rejectedSlaves, interactionLink, postNote) { + V = State.variables; + passageName = passage(); + slaves = V.slaves; + V.assignTo = passageName; // would be passed to the "Assign" passage + slaveImagePrinted = (V.seeImages === 1) && (V.seeSummaryImages === 1); + + let res = []; + if (V.useSlaveListInPageJSNavigation === 1) { + res.push(createQuickList(indices)); + } + + const fcs = App.Entity.facilities; + + // can't simply loop over fcs attributes, as there is the penthouse among them, which always exists + const anyFacilityExists = fcs.brothel.established || fcs.club.established || fcs.dairy.established || fcs.farmyard.established || fcs.servantsQuarters.established || fcs.masterSuite.established || fcs.spa.established || fcs.clinic + fcs.schoolroom.established || fcs.cellblock.established || fcs.arcade.established || fcs.headGirlSuite.established; + + let showTransfers = false; + if (anyFacilityExists) { + if (passageName === "Main" || passageName === "Head Girl Suite" || passageName === "Spa" || passageName === "Brothel" || passageName === "Club" || passageName === "Arcade" || passageName === "Clinic" || passageName === "Schoolroom" || passageName === "Dairy" || passageName === "Farmyard" || passageName === "Servants' Quarters" || passageName === "Master Suite" || passageName === "Cellblock") { + V.returnTo = passageName; + showTransfers = true; + } + } + + for (const _si of indices) { + let ss = renderSlave(_si, interactionLink, showTransfers, postNote); + res.push(`<div id="slave_${slaves[_si].ID}" style="clear:both">${ss}</div>`); + } + + for (const rs of rejectedSlaves) { + const slave = slaves[rs.index]; + const rejects = rs.rejects; + const slaveName = SlaveFullName(slave); + let rejectString = rejects.length === 1 ? + rejects[0] : + `${slaveName}: <ul>${rejects.map(e => `<li>${e}</li>`).join('')}</ul>`; + res.push(`<div id="slave_${slave.ID}" style="clear:both">${rejectString}</div>`); + } + + $(document).one(':passagedisplay', function() { + $("[data-quick-index]").click(function() { + let which = this.attributes["data-quick-index"].value; + let quick = $("div#list_index" + which); + quick.toggleClass("hidden"); + }); + quickListBuildLinks(); + }); + + return res.join(""); + } + + + /** + * @param {number} index + * @param {slaveTextGenerator} interactionLink + * @param {boolean} showTransfers + * @param {slaveTextGenerator} [postNote] + * @returns {string} + */ + function renderSlave(index, interactionLink, showTransfers, postNote) { + let res = []; + const slave = slaves[index]; + + res.push(dividerAndImage(slave)); + res.push(interactionLink(slave, index)); + + if ((slave.choosesOwnClothes === 1) && (slave.clothes === "choosing her own clothes")) { + const _oldDevotion = slave.devotion; + saChoosesOwnClothes(slave); + slave.devotion = _oldDevotion; /* restore devotion value so repeatedly changing clothes isn't an exploit */ + } + + SlaveStatClamp(slave); + slave.trust = Math.trunc(slave.trust); + slave.devotion = Math.trunc(slave.devotion); + slave.health = Math.trunc(slave.health); + res.push(' will '); + if ((slave.assignment === "rest") && (slave.health >= -20)) { + res.push(`<strong><u><span class="lawngreen">rest</span></u></strong>`); + } else if ((slave.assignment === "stay confined") && ((slave.devotion > 20) || ((slave.trust < -20) && (slave.devotion >= -20)) || ((slave.trust < -50) && (slave.devotion >= -50)))) { + res.push(`<strong><u><span class="lawngreen">stay confined.</span></u></strong>`); + if (slave.sentence > 0) { + res.push(` (${slave.sentence} weeks)`); + } + } else if (slave.choosesOwnAssignment === 1) { + res.push('choose her own job'); + } else { + res.push(slave.assignment); + if (slave.sentence > 0) { + res.push(` ${slave.sentence} weeks`); + } + } + res.push('. '); + + if ((V.displayAssignments === 1) && (passageName === "Main") && (slave.ID !== V.HeadGirl.ID) && (slave.ID !== V.Recruiter.ID) && (slave.ID !== V.Bodyguard.ID)) { + res.push(App.UI.jobLinks.assignments(index, "Main")); + } + if (showTransfers) { + res.push('<br>Transfer to: ' + App.UI.jobLinks.transfers(index)); + } + res.push('<br/>'); + + if (slaveImagePrinted) { + res.push(' '); + } + + clearSummaryCache(); + res.push(SlaveSummary(slave)); + + if (postNote !== undefined) { + res.push('<br>'); + res.push(postNote(slave, index)); + } + + return res.join(''); + } + + /** + * @param {number[]} indices + * @return {string} + */ + function createQuickList(indices) { + let res = ""; + let _tableCount = 0; + + /* Useful for finding weird combinations — usages of this passage that don't yet generate the quick index. + * <<print 'pass/count/indexed/flag::[' + passageName + '/' + _Count + '/' + _indexed + '/' + $SlaveSummaryFiler + ']'>> + */ + + if (((indices.length > 1) && ((passageName === "Main") && ((V.useSlaveSummaryTabs === 0) || (V.slaveAssignmentTab === "all"))))) { + const _buttons = []; + let _offset = -50; + if (/Select/i.test(passageName)) { + _offset = -25; + } + res += "<br />"; + _tableCount++; + /* + * we want <button data-quick-index="<<= _tableCount>>">... + */ + const _buttonAttributes = { + 'data-quick-index': _tableCount + }; + res += App.UI.htag("Quick Index", _buttonAttributes, 'button'); + /* + * we want <div id="list_index3" class=" hidden">... + */ + let listIndexContent = ""; + + for (const _ssii of indices) { + const _IndexSlave = slaves[_ssii]; + const _indexSlaveName = SlaveFullName(_IndexSlave); + const _devotionClass = getSlaveDevotionClass(_IndexSlave); + const _trustClass = getSlaveTrustClass(_IndexSlave); + _buttons.push({ + "data-name": _indexSlaveName, + "data-scroll-to": `#slave-${_IndexSlave.ID}`, + "data-scroll-offset": _offset, + "data-devotion": _IndexSlave.devotion, + "data-trust": _IndexSlave.trust, + "class": `${_devotionClass} ${_trustClass}` + }); + } + if (_buttons.length > 0) { + V.sortQuickList = V.sortQuickList || 'Devotion'; + listIndexContent += `//Sorting:// ''<span id="qlSort">$sortQuickList</span>.'' `; + listIndexContent += '<<link "Sort by Devotion">>' + + '<<set $sortQuickList = "Devotion" >>' + + '<<replace "#qlSort">> $sortQuickList <</replace>>' + + '<<run' + '$("#qlWrapper").removeClass("trust").addClass("devotion");' + 'sortButtonsByDevotion();' + '>>' + + '<</link>> | ' + + '<<link "Sort by Trust">>' + + '<<set $sortQuickList = "Trust">>' + + '<<replace "#qlSort">> $sortQuickList <</replace>>' + + '<<run' + '$("#qlWrapper").removeClass("devotion").addClass("trust");' + 'sortButtonsByTrust();' + '>>' + + '<</link>>' + + '<br/>'; + listIndexContent += '<div id="qlWrapper" class="quicklist devotion">'; + for (const _button of _buttons) { + const _buttonSlaveName = _button['data-name']; + listIndexContent += App.UI.htag(_buttonSlaveName, _button, 'button'); + } + listIndexContent += '</div>'; + } + res += App.UI.htag(listIndexContent, { + id: `list_index${_tableCount}`, + class: 'hidden' + }); + } + return res; + } + + function SlaveArt(slave, option) { + return `<<SlaveArtById ${slave.ID} ${option}>>`; + } + + function slaveImage(s) { + return `<div class="imageRef smlImg">${SlaveArt(s, 1)}</div>`; + } + + function dividerAndImage(s, showImage) { + showImage = showImage || true; + const r = [V.lineSeparations === 0 ? "<br>" : "<hr style=\"margin:0\">"]; + if (showImage && (V.seeImages === 1) && (V.seeSummaryImages === 1)) { + r.push(slaveImage(s)); + } + return r.join(""); + } +}(); + +App.UI.SlaveList.Decoration = {}; +/** + * returns "HG", "BG", "PA", and "RC" prefixes + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ +App.UI.SlaveList.Decoration.penthousePositions = (slave) => { + if (App.Data.Facilities.headGirlSuite.manager.assignment === slave.assignment) { + return '<strong><span class="lightcoral">HG</span></strong>'; + } + if (App.Data.Facilities.penthouse.manager.assignment === slave.assignment) { + return '<strong><span class="lightcoral">RC</span></strong>'; + } + if (App.Data.Facilities.armory.manager.assignment === slave.assignment) { + return '<strong><span class="lightcoral">BG</span></strong>'; + } + if (Array.isArray(State.variables.personalAttention) && State.variables.personalAttention.findIndex(s => s.ID === slave.ID) !== -1) { + return '<strong><span class="lightcoral">PA</span></strong>'; + } + return ''; +}; + +App.UI.SlaveList.SlaveInteract = {}; + +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.stdInteract = (slave, index) => + App.UI.passageLink(SlaveFullName(slave), 'Slave Interact', `$activeSlave = $slaves[${index}]`); + + +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.penthouseInteract = (slave, index) => { + return App.UI.SlaveList.Decoration.penthousePositions(slave) + ' ' + App.UI.SlaveList.SlaveInteract.stdInteract(slave, index); +}; + +/** + * @param {App.Entity.SlaveState} slave + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.personalAttention = (slave) => + App.UI.passageLink(SlaveFullName(slave), undefined, `App.UI.selectSlaveForPersonalAttention(${slave.ID});`); + +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.subordinateTarget = (slave, index) => + App.UI.passageLink(SlaveFullName(slave), "Subordinate Targeting", `$activeSlave.subTarget = $slaves[${index}].ID`); + +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.assign = (slave, index) => + App.UI.passageLink(SlaveFullName(slave), "Assign", `$i = ${index}`); + +/** + * @param {App.Entity.SlaveState} slave + * @param {number} index + * @return {string} + */ +App.UI.SlaveList.SlaveInteract.retrieve = (slave, index) => + App.UI.passageLink(SlaveFullName(slave), "Retrieve", `$i = ${index}`); + +/** + * Adds/removes a slave with the given id to/from the personal attention array + * @param {number} id slave id + */ +App.UI.selectSlaveForPersonalAttention = function(id) { + const V = State.variables; + + if (!Array.isArray(V.personalAttention)) { + /* first PA target */ + V.personalAttention = [{ + ID: id, + trainingRegimen: "undecided" + }]; + } else { + const _pai = V.personalAttention.findIndex(function(s) { + return s.ID === id; + }); + if (_pai === -1) { + /* not already a PA target; add */ + V.activeSlave = getSlave(id); + V.personalAttention.push({ + ID: id, + trainingRegimen: "undecided" + }); + } else { + /* already a PA target; remove */ + V.personalAttention.deleteAt(_pai); + if (V.personalAttention.length === 0) { + V.personalAttention = "sex"; + } + } + } + SugarCube.Engine.play("Personal Attention Select"); +}; + +/** + * Generates fragment with sorting options, that link to the given pasage + * @param {string} passage The passage to link to + * @returns {string} + */ +App.UI.SlaveList.sortingLinks = function (passage) { + const V = State.variables; + let r = ' Sort by: '; + r += ["devotion", "name", "assignment", "seniority", "actualAge", "visualAge", "physicalAge"] + .map(so => V.sortSlavesBy !== so ? + App.UI.passageLink(capFirstChar(so.replace(/([A-Z])/g, " $1")), passage, `$sortSlavesBy = "${so}"`) : capFirstChar(so)) + .join(" | "); + + r += ' Sort: '; + r += ["descending", "ascending"].map(so => V.sortSlavesOrder !== so ? + App.UI.passageLink(capFirstChar(so), passage, `$sortSlavesOrder = "${so}"`) : capFirstChar(so)) + .join(" | "); + return r; +}; + +/** + * Standard tabs for a facility with a single job (SJ) + * @param {App.Entity.Facilities.Facility} facility + * @param {string} facilityPassage + * @param {boolean} [showTransfersTab=false] + * @param {{assign: string, remove: string, transfer: (string| undefined)}} [tabCaptions] + * @returns {string} + */ +App.UI.SlaveList.listSJFacilitySlaves = function (facility, facilityPassage, showTransfersTab = false, tabCaptions = undefined) { + const V = State.variables; + tabCaptions = tabCaptions || { + assign: 'Assign a slave', + remove: 'Remove a slave', + transfer: 'Transfer from Facility' + }; + let r = ''; + if (V.sortSlavesMain) { + r += this.sortingLinks(facilityPassage) + '<br>'; + } + r += '<div class="tab">' + + App.UI.tabbar.tabButton('assign', tabCaptions.assign) + + App.UI.tabbar.tabButton('remove', tabCaptions.remove) + + (showTransfersTab ? App.UI.tabbar.tabButton('transfer', tabCaptions.transfer) : '')+ + '</div>'; + + if (facility.hostedSlaves > 0) { + let facilitySlaves = facility.job().employeesIndices(); + 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}`))); + } else { + r += App.UI.tabbar.makeTab("remove", `<em>${capFirstChar(facility.name)} is empty for the moment</em>`); + } + + /** + * @param {number[]} slaveIdxs + * @returns {string} + */ + function assignableTabContent(slaveIdxs) { + SlaveSort.indices(slaveIdxs); + const slaves = V.slaves; + let rejectedSlaves = []; + let passedSlaves = []; + slaveIdxs.forEach((idx) => { + const rejects = facility.canHostSlave(slaves[idx]); + if (rejects.length > 0) { + rejectedSlaves.push({index: idx, rejects: rejects}); + } else { + passedSlaves.push(idx); + } + }, []); + 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}`)); + } + if (facility.hasFreeSpace) { + // slaves from the penthouse can be transferred here + r += App.UI.tabbar.makeTab("assign", assignableTabContent(App.Entity.facilities.penthouse.employeesIndices())); + } else { + r += App.UI.tabbar.makeTab("assign", `<strong>${capFirstChar(facility.name)} is full and cannot hold any more slaves</strong>`); + } + + if (showTransfersTab) { + if (facility.hasFreeSpace) { + // slaves from other facilities can be transferred here + const transferableIndices = V.slaves.reduce((acc, slave, ind) => { + if (slave.assignmentVisible === 0 && !facility.isHosted(slave)) { + acc.push(ind); + } + return acc; + }, []); + r += App.UI.tabbar.makeTab("transfer", assignableTabContent(transferableIndices)); + } else { + r += App.UI.tabbar.makeTab("transfer", `<strong>${capFirstChar(facility.name)} is full and cannot hold any more slaves</strong>`); + } + } + App.UI.tabbar.handlePreSelectedTab(); + + return r; +}; + +/** + * @returns {string} + */ +App.UI.SlaveList.listNGPSlaves = function () { + const V = State.variables; + const thisPassage = 'New Game Plus'; + let r = this.sortingLinks(thisPassage) + '<br>'; + + r += '<div class="tab">' + + App.UI.tabbar.tabButton('assign', 'Import a slave') + + App.UI.tabbar.tabButton('remove', 'Remove from impor') + + '</div>'; + + const NGPassignment = "be imported"; + /** @type {App.Entity.SlaveState[]} */ + const slaves = V.slaves; + + if (V.slavesToImport > 0) { + const importedSlavesIndices = slaves.reduce((acc, s, i) => { if (s.assignment === NGPassignment) { acc.push(i); } return acc; }, []); + SlaveSort.indices(importedSlavesIndices); + r += App.UI.tabbar.makeTab("remove", App.UI.SlaveList.render(importedSlavesIndices, [], + (s) => `<u><strong><span class="pink">${SlaveFullName(s)}</span></strong></u>`, + (s) => App.UI.passageLink('Remove from import list', thisPassage, `$slavesToImport -= 1, removeJob(${s}, "${NGPassignment}")`))); + } else { + r += App.UI.tabbar.makeTab("remove", `<em>No slaves will go with you to the new game</em>`); + } + + if (V.slavesToImport < V.slavesToImportMax) { + const slavesToImportIndices = slaves.reduce((acc, s, i) => { if (s.assignment !== NGPassignment) { acc.push(i); } return acc; }, []); + SlaveSort.indices(slavesToImportIndices); + r += App.UI.tabbar.makeTab("assign", App.UI.SlaveList.render(slavesToImportIndices, [], + (s) => `<u><strong><span class="pink">${SlaveFullName(s)}</span></strong></u>`, + (s) => App.UI.passageLink('Add to import list', thisPassage, `$slavesToImport += 1, assignJob(${s}, "${NGPassignment}")`))); + } else { + r += App.UI.tabbar.makeTab("assign", `<strong>Slave import limit reached</strong>`); + } + + App.UI.tabbar.handlePreSelectedTab(); + return r; +}; + +/** + * Renders facility manager summary or a note with a link to select one + * @param {App.Entity.Facilities.Facility} facility + * @param {string} [selectionPassage] passage name for manager selection. "${Manager} Select" if omitted + * @returns {string} + */ +App.UI.SlaveList.displayManager = function (facility, selectionPassage) { + const managerCapName = capFirstChar(facility.desc.manager.position); + selectionPassage = selectionPassage || `${managerCapName} Select`; + const manager = facility.manager.currentEmployee; + if (manager) { + return this.render([App.Utils.slaveIndexForId(manager.ID)], [], + App.UI.SlaveList.SlaveInteract.stdInteract, + () => App.UI.passageLink(`Change or remove ${managerCapName}`, selectionPassage, "")); + } else { + return `You do not have a slave serving as a ${managerCapName}. ${App.UI.passageLink(`Appoint one`, selectionPassage, "")}`; + } +}; + +/** + * Displays standard facility page with manager and list of workers + * @param {App.Entity.Facilities.Facility} facility + * @param {boolean} [showTransfersPage] + * @returns {string} + */ +App.UI.SlaveList.stdFacilityPage = function (facility, showTransfersPage) { + return this.displayManager(facility) + '<br><br>' + this.listSJFacilitySlaves(facility, passage(), showTransfersPage); +}; + +App.UI.SlaveList.penthousePage = function () { + const V = State.variables; + const ph = App.Entity.facilities.penthouse; + const listElementId = 'summarylist'; // for the untabbed mode only + + function span(text, cls, id) { + return `<span${cls ? ` class="${cls}"` : ''}${id ? ` id="${id}"` : ''}>${text}</span>`; + } + + function overviewTabContent() { + let r = ''; + const thisArcology = V.arcologies[0]; + + /** @type {App.Entity.SlaveState} */ + const HG = V.HeadGirl; + if (HG) { + r += `<strong><u>${span(SlaveFullName(HG), "pink")}</u></strong> is serving as your Head Girl`; + if (thisArcology.FSEgyptianRevivalistLaw === 1) { + r += ' and Consort'; + } + r += `. <strong> ${span(App.UI.passageLink("Manage Head Girl", "HG Select"), null, "manageHG")}</strong> ${span("[H]", "cyan")}`; + r += App.UI.SlaveList.render([App.Utils.slaveIndexForId(HG.ID)], [], + App.UI.SlaveList.SlaveInteract.penthouseInteract); + } else { + if (V.slaves.length > 1) { + r += `You have ${span("not", "red")} selected a Head Girl`; + if (thisArcology.FSEgyptianRevivalistLaw === 1) { + r += ' and Consort'; + } + r += `. <strong>${span(App.UI.passageLink("Select One", "HG Select"), null, "manageHG")}</strong> ${span("[H]", "cyan")}`; + } else { + r += '<em>You do not have enough slaves to keep a Head Girl</em>'; + } + } + r += '<br>'; + + /** @type {App.Entity.SlaveState} */ + const RC = V.Recruiter; + if (RC) { + const p = getPronouns(RC); + r += `<strong><u>${span(SlaveFullName(RC), "pink")}</u></strong> is working `; + if (V.recruiterTarget !== "other arcologies") { + r += 'to recruit girls.'; + } else { + r += 'as a Sexual Ambassador'; + if (thisArcology.influenceTarget === -1) { + r += ', but ' + span(p.object + ' has no target to influence', "red"); + } else { + const targetName = V.arcologies.find(a => a.direction === thisArcology.influenceTarget).name; + r += ' to ' + targetName + '.'; + } + } + r += `${span('<strong>' + App.UI.passageLink("Manage Recruiter", "Recruiter Select") + '</strong>', null, "manageRecruiter")} ${span("[U]", "cyan")}`; + r += App.UI.SlaveList.render([App.Utils.slaveIndexForId(RC.ID)], [], + App.UI.SlaveList.SlaveInteract.penthouseInteract); + } else { + r += `You have ${span("not", "red")} selected a Recruiter. `; + r += `${span('<strong>' + App.UI.passageLink("Select one", "Recruiter Select") + '</strong>', null, "manageRecruiter")} ${span("[U]", "cyan")}`; + } + + if (V.dojo) { + r += '<br>'; + /** @type {App.Entity.SlaveState} */ + const BG = V.Bodyguard; + if (BG) { + r += `<strong><u>${span(SlaveFullName(RC), "pink")}</u></strong> is serving as your bodyguard. `; + r += span(`<strong>${App.UI.passageLink("Manage Bodyguard", "BG Select")}</strong>`, null, "manageBG") + + span("[B]", "cyan"); + r += App.UI.SlaveList.render([App.Utils.slaveIndexForId(BG.ID)], [], + App.UI.SlaveList.SlaveInteract.penthouseInteract); + } else { + r += `You have ${span("not", "red")} selected a Bodyguard. `; + r += span(`<strong>${App.UI.passageLink("Select one", "BG Select")}</strong>`, null, "manageBG") + + span("[B]", "cyan"); + } + + /* Start Italic event text */ + if (BG && BG.assignment === "guard you") { + const p = getPronouns(BG); + V.i = App.Utils.slaveIndexForId(BG.ID); + const interactLinkSetters = `$activeSlave = $slaves[${V.i}], $nextButton = "Back", $nextLink = "AS Dump", $returnTo = "Main"`; + r += '<br>'; + // <<= App.Interact.UseGuard($slaves[$i])>>// + let useHimLinks = []; + useHimLinks.push(App.UI.passageLink(`Use ${p.his} mouth`, "Flips", interactLinkSetters)); + useHimLinks.push(App.UI.passageLink(`Play with ${p.his} tits`, "FBoobs", interactLinkSetters)); + if (canDoVaginal(BG)) { + useHimLinks.push(App.UI.passageLink(`Fuck ${p.him}`, "FVagina", interactLinkSetters)); + if (canDoAnal(BG)) { + useHimLinks.push(App.UI.passageLink(`Use ${p.his} holes`, "FButt", interactLinkSetters)); + } + if (BG.belly >= 300000) { + useHimLinks.push(App.UI.passageLink(`Fuck ${p.him} over ${p.his} belly`, "FBellyFuck", interactLinkSetters)); + } + } + /* check */ + if (canPenetrate(BG)) { + useHimLinks.push(App.UI.passageLink(`Ride ${p.him}`, "FDick", interactLinkSetters)); + } + if (canDoAnal(BG)) { + useHimLinks.push(App.UI.passageLink(`Fuck ${p.his} ass`, "FAnus", interactLinkSetters)); + } + useHimLinks.push(App.UI.passageLink(`Abuse ${p.him}`, "Gameover", '$gameover ="idiot ball"')); + + r += `<br> ${useHimLinks.join(' | ')}`; + /* End Italic event text */ + } + r += "<br/>"; + } + return r; + } + + /** + * @param {string} job + * @returns {{n: number, text: string}} + */ + function _slavesForJob(job) { + const employeesIndices = job === 'all' ? ph.employeesIndices() : ph.job(job).employeesIndices(); + if (employeesIndices.length === 0) { return {n: 0, text: ''}; } + + SlaveSort.indices(employeesIndices); + return { + n: employeesIndices.length, + text: App.UI.SlaveList.render(employeesIndices, [], App.UI.SlaveList.SlaveInteract.penthouseInteract) + }; + } + + /** + * Displays job filter links, whose action are generated by the callback + * @param {assignmentFilterGenerateCallback} callback + * @returns {string} + */ + function _jobFilter(callback) { + const jd = App.Data.Facilities.penthouse.jobs; + let links = []; + links.push(`<<link "All">>${callback('all')}<</link>>`); + // seems like SC2 does not process data-setter when data-passage is not set + for (const jn in jd) { + links.push(`<<link "${capFirstChar(jd[jn].position)}">>${callback(jn)}<</link>>`); + } + + return links.join(' | '); + } + + function _updateList(job) { + State.temporary.mainPageUpdate.job = job; + App.UI.replace('#' + listElementId, _slavesForJob(job).text); + } + + /** + * @typedef tabDesc + * @property {string} tabName + * @property {string} caption + * @property {string} content + */ + + /** + * @param {string} tabName + * @param {string} caption + * @param {string} content + * @returns {tabDesc} + */ + function makeTabDesc(tabName, caption, content) { + return { + tabName: tabName, + caption: caption, + content: content + }; + } + + let r = ''; + + if (V.positionMainLinks >= 0) { + r += '<center>' + App.UI.View.MainLinks() + '</center><br>'; + } + + if (V.sortSlavesMain) { + r += '<br>' + this.sortingLinks("Main") + '<br>'; + } + + if (V.useSlaveSummaryTabs) { + /** @type {tabDesc[]} */ + let tabs = []; + + if (V.useSlaveSummaryOverviewTab) { + tabs.push(makeTabDesc('overview', 'Overview', overviewTabContent())); + } + + for (const jn of ph.jobsNames) { + const slaves = _slavesForJob(jn); + if (slaves.n > 0) { + tabs.push(makeTabDesc(jn, `${ph.desc.jobs[jn].position} (${slaves.n})`, slaves.text)); + } + } + + // now generate the "All" tab + const penthouseSlavesIndices = ph.employeesIndices(); + SlaveSort.indices(penthouseSlavesIndices); + tabs.push(makeTabDesc('all', `All (${penthouseSlavesIndices.length})`, + this.render(penthouseSlavesIndices, [], App.UI.SlaveList.SlaveInteract.penthouseInteract))); + + + r += '<div class="tab">'; + for (const tab of tabs) { + r += App.UI.tabbar.tabButton(tab.tabName, tab.caption); + } + r += '</div>'; + + for (const tab of tabs) { + r += App.UI.tabbar.makeTab(tab.tabName, tab.content); + } + } else { + State.temporary.mainPageUpdate = { + job: State.temporary.mainPageUpdate ? State.temporary.mainPageUpdate.job : 'all', + update: _updateList + }; + + $(document).one(':passagedisplay', () => { _updateList(State.temporary.mainPageUpdate.job); }); + r += `<div>${_jobFilter(s => `<<run _mainPageUpdate.update("${s}")>>`)} <div id=${listElementId}></div></div>`; + } + + if (V.positionMainLinks <= 0) { + r += '<br><center>' + App.UI.View.MainLinks() + '</center>'; + } + + App.UI.tabbar.handlePreSelectedTab(); + return r; +}; + +/** + * @callback assignmentFilterGenerateCallback + * @param {string} value + * @returns {string} + */ + +/** + * @callback slaveFilterCallbackReasoned + * @param {App.Entity.SlaveState} slave + * @returns {string[]} + */ + + /** + * @callback slaveFilterCallbackSimple + * @param {App.Entity.SlaveState} slave + * @returns {boolean} + */ + + /** + * @callback slaveTestCallback + * @param {App.Entity.SlaveState} slave + * @returns {boolean} + */ + +App.UI.SlaveList.slaveSelectionList = function () { + const selectionElementId = "slaveSelectionList"; + + return selection; + + /** + * @typedef ListOptions + * @property {slaveFilterCallbackReasoned|slaveFilterCallbackSimple} filter + * @property {slaveTestCallback} [expCheck] + * @property {slaveTextGenerator} interactionLink + * @property {slaveTextGenerator} [postNote] + */ + + /** + * @param {slaveFilterCallbackReasoned|slaveFilterCallbackSimple} filter + * @param {slaveTextGenerator} interactionLink + * @param {slaveTestCallback} [experianceChecker] + * @param {slaveTextGenerator} [postNote] + * @returns {string} + */ + function selection(filter, interactionLink, experianceChecker, postNote) { + if (experianceChecker === null) { experianceChecker = undefined; } + State.temporary.slaveSelection = { + filter: filter, + expCheck: experianceChecker, + interactionLink: interactionLink, + postNote: postNote, + update: _updateList + }; + + $(document).one(':passagedisplay', () => { _updateList('all'); }); + return `<div>${_assignmentFilter(s => `<<run _slaveSelection.update('${s}')>>`, experianceChecker !== undefined)} <div id=${selectionElementId}></div></div>`; + } + + function _updateList(assignment) { + App.UI.replace('#' + selectionElementId, _listSlaves(assignment, State.temporary.slaveSelection)); + } + /** + * Displays assignment filter links, whose action are generated by the callback + * @param {assignmentFilterGenerateCallback} callback + * @param {boolean} includeExperienced + * @returns {string} + */ + function _assignmentFilter(callback, includeExperienced) { + let filters = { + all: "All" + }; + let fNames = Object.keys(App.Entity.facilities); + fNames.sort(); + for (const fn of fNames) { + /** @type {App.Entity.Facilities.Facility} */ + const f = App.Entity.facilities[fn]; + if (f.established && f.hostedSlaves > 0) { + filters[fn] = f.name; + } + } + let links = []; + /* seems like SC2 does not process data-setter when data-passage is not set + for (const f in filters) { + links.push(App.UI.passageLink(filters[f], passage, callback(f))); + } + if (includeExperienced) { + links.push(`<span class="lime">${App.UI.passageLink('Experienced', passage, callback('experienced'))}</span>`); + }*/ + for (const f in filters) { + links.push(`<<link "${filters[f]}">>${callback(f)}<</link>>`); + } + if (includeExperienced) { + links.push(`<span class="lime"><<link "Experienced">>${callback('experienced')}<</link>></span>`); + } + + return links.join(' | '); + } + + /** + * + * @param {string} assignmentStr + * @param {ListOptions} options + * @returns {string} + */ + function _listSlaves(assignmentStr, options) { + /** @type {App.Entity.SlaveState[]} */ + const slaves = State.variables.slaves; + let unfilteredIndices = []; + switch (assignmentStr) { + case 'all': + unfilteredIndices = Array.from({length: slaves.length}, (v, i) => i); + break; + case 'experienced': + unfilteredIndices = slaves.reduce((acc, s, idx) => { + if (options.expCheck(s)) { + acc.push(idx); + } + return acc; + }, []); + break; + default: + unfilteredIndices = App.Entity.facilities[assignmentStr].employeesIndices(); + break; + } + SlaveSort.indices(unfilteredIndices); + let passingIndices = []; + let rejects = []; + + unfilteredIndices.forEach(idx => { + const fr = options.filter(slaves[idx]); + if (fr === true || (Array.isArray(fr) && fr.length === 0)) { + passingIndices.push(idx); + } else { + if (Array.isArray(fr)) { rejects.push({index: idx, rejects: fr}); } + } + }); + + // clamsi fragment to create a function which combines results of two optional tests + // done this way to test for tests presense only once + const listPostNote = options.expCheck ? + (options.postNote ? + (s, i) => options.expCheck(s) ? '<span class="lime">Has applicable career experience.</span><br>' : '' + options.postNote(s, i) : + (s) => options.expCheck(s) ? '<span class="lime">Has applicable career experience.</span>' : '') : + options.postNote ? + (s, i) => options.postNote(s, i) : + () => ''; + + return App.UI.SlaveList.render(passingIndices, rejects, options.interactionLink, listPostNote); + } +}(); + +/** + * @param {App.Entity.Facilities.Facility} facility + * @param {string} [passage] one of the *Workaround passages. Will be composed from the position name if omitted + * @returns {string} + */ +App.UI.SlaveList.facilityManagerSelection = function (facility, passage) { + passage = passage || capFirstChar(facility.manager.desc.position) + " Workaround"; + return this.slaveSelectionList(slave => facility.manager.canEmploy(slave), + (slave, index) => App.UI.passageLink(SlaveFullName(slave), passage, `$i = ${index}`), + slave => facility.manager.slaveHasExperience(slave)); +}; diff --git a/src/js/slaveStatsChecker.js b/src/js/slaveStatsChecker.js index de7badb7d0a543f212eb5ee471184475c62cea9b..0310f8ba49c0bd9b1685c4b51a65f70a7295127f 100644 --- a/src/js/slaveStatsChecker.js +++ b/src/js/slaveStatsChecker.js @@ -653,8 +653,7 @@ window.tooBigButt = function(slave) { * @param {App.Entity.SlaveState} slave * @returns {boolean} */ -window.isVegetable = function(slave) { - slave = slave || State.variables.activeSlave; +window.isVegetable = function (slave) { if (!slave) { return false; } diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index 201c7535ec7ae6420a892feb01898872efc38163..36078ce9ff62c2f5788b9c2f514e9ff48d054511 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -4996,619 +4996,3 @@ window.SlaveSummaryUncached = (function() { return SlaveSummaryUncached; })(); - -App.UI.PassageSlaveFilers = { - "Main": s => (s.assignmentVisible === 1), - "Personal Attention Select": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0), - "Agent Select": s => ((s.fuckdoll === 0 && s.devotion > 20 && s.intelligence + s.intelligenceImplant > 15 && s.intelligenceImplant >= 15 && canWalk(s) && canSee(s) && canHear(s) && canTalk(s) && s.broodmother < 2 && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.arcologyAgent.manager.slaveHasExperience(s)))), - "BG Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.assignment !== "guard you" && canWalk(s) && canSee(s) && canHear(s) && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.armory.manager.slaveHasExperience(s)))), - "Recruiter Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.assignment !== "recruit girls" && canWalk(s) && canSee(s) && canTalk(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.penthouse.manager.slaveHasExperience(s)))), - "HG Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.assignment !== "be your Head Girl" && canWalk(s) && canHear(s) && canSee(s) && canTalk(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.headGirlSuite.manager.slaveHasExperience(s)))), - "Head Girl Suite": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be your Head Girl" && s.indentureRestrictions <= 0 && (s.breedingMark !== 1 || State.variables.propOutcome === 0) && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler !== "assignable" && s.assignment === "live with your Head Girl")), - "Subordinate Targeting": s => (s.devotion >= -20 && s.fuckdoll === 0 && State.variables.activeSlave.ID !== s.ID && (State.variables.activeSlave.amp !== 1 || s.amp !== 1)), - "Spa": s => ( - (s.fuckdoll <= 0 && s.assignment !== "rest in the spa" && ( - (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || - (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable"))) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "rest in the spa") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Attendant.ID)), - "Attendant Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.spa.manager.slaveHasExperience(s)))), - "Nursery": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a nanny" && s.assignmentVisible === 1 && s.fuckdoll <= 0 && (s.devotion > 20 || s.trust > 20)) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a nanny") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Matron.ID)), - "Matron Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.nursery.manager.slaveHasExperience(s)))), - "Brothel": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the brothel" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work in the brothel") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Madam.ID)), - "Madam Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canWalk(s) && canSee(s) && canHear(s) && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.brothel.manager.slaveHasExperience(s)))), - "Club": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the club" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "serve in the club") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.DJ.ID)), - "DJ Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canTalk(s) && canHear(s) && canWalk(s) && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.club.manager.slaveHasExperience(s)))), - "Clinic": s => ( - (s.fuckdoll <= 0 && s.assignment !== "get treatment in the clinic" && ( - (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || - (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable"))) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "get treatment in the clinic") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Nurse.ID)), - "Nurse Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.clinic.manager.slaveHasExperience(s)))), - "Schoolroom": s => ( - ((s.fuckdoll <= 0 && s.fetish !== "mindbroken" && s.assignment !== "learn in the schoolroom") && - (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || - (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable") - ) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "learn in the schoolroom") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Schoolteacher.ID)), - "Schoolteacher Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canTalk(s) && canHear(s) && canSee(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.schoolroom.manager.slaveHasExperience(s)))), - "Dairy": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the dairy" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work in the dairy") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Milkmaid.ID)), - "Milkmaid Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 20 && canWalk(s) && canSee(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.dairy.manager.slaveHasExperience(s)))), - "Farmyard": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a farmhand" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a farmhand") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Farmer.ID)), - "Farmer Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.farm.manager.slaveHasExperience(s)))), - "Servants' Quarters": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a servant" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a servant") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Stewardess.ID)), - "Stewardess Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canWalk(s) && canSee(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.servantsQuarters.manager.slaveHasExperience(s)))), - "Master Suite": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the master suite" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "serve in the master suite") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Concubine.ID)), - "Concubine Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.amp !== 1) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.masterSuite.manager.slaveHasExperience(s)))), - "Cellblock": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the cellblock" && s.assignmentVisible === 1 && s.fuckdoll <= 0 && s.fetish !== "mindbroken") || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be confined in the cellblock") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Wardeness.ID)), - "Wardeness Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s) && canHear(s)) && - ((State.variables.SlaveSummaryFiler !== "experienced") || - (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.cellblock.manager.slaveHasExperience(s)))), - "Arcade": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the arcade" && s.assignmentVisible === 1 && (State.variables.arcade >= State.variables.arcadeSlaves || State.variables.arcadeUpgradeFuckdolls === 1)) || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be confined in the arcade")), - "Pit": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && !State.variables.fighterIDs.includes(s.ID) && canWalk(s) && (s.assignment !== "guard you") && (s.assignment !== "work in the dairy" || State.variables.dairyRestraintsSetting < 2) && (s.assignmentVisible === 1 && s.fuckdoll === 0) || - (State.variables.SlaveSummaryFiler === "occupying" && State.variables.fighterIDs.includes(s.ID)))), - "Coursing Association": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && canWalk(s) && State.variables.Lurcher.ID !== s.ID && (s.assignmentVisible === 1 && s.fuckdoll === 0) || - (State.variables.SlaveSummaryFiler === "occupying" && State.variables.Lurcher.ID === s.ID))), - "New Game Plus": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be imported") || - (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be imported")), - "Rules Slave Select": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveSelected(s, State.variables.currentRule)) || - (State.variables.SlaveSummaryFiler === "occupying" && ruleSlaveSelected(s, State.variables.currentRule))), - "Rules Slave Exclude": s => ( - (State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveExcluded(s, State.variables.currentRule)) || - (State.variables.SlaveSummaryFiler === "occupying" && ruleSlaveExcluded(s, State.variables.currentRule))), - "Matchmaking": s => (s.devotion >= 100 && s.relationship === State.variables.activeSlave.relationship && s.ID !== State.variables.activeSlave.ID), - "Dinner Party Preparations": s => (s.assignmentVisible === 1 && s.fuckdoll === 0), -}; - -/** - * Slave filtering predicate - * - * @callback slaveFilter - * @param {App.Entity.SlaveState} slave - * @returns {boolean} - */ -/** - * @param {string} passageName - * @returns {string} - */ -App.UI.slaveSummaryList = function(passageName) { - 'use strict'; - const V = State.variables; - - const _indexed = 0; - /** - * @type {App.Entity.SlaveState[]} - */ - const slaves = V.slaves; - - V.assignTo = passageName; // would be passed to the "Assign" passage - - /** - * @param {App.Entity.SlaveState} s - * @returns {boolean} - */ - function _passagePreFilter(s) { - return s.assignment !== "be your agent" && s.assignment !== "live with your agent" && - (!App.UI.PassageSlaveFilers.hasOwnProperty(passageName) || App.UI.PassageSlaveFilers[passageName](s)); - } - - /** - * A simple macro which allows to create wrapping html elements with dynamic IDs. - * - * idea blatantly robbed from the spanMacroJS.tw but expanded to a more generic case, allowing <div>, - * <button> or whatever you want elements, default is for the div though. - * In addition, you can pass an object in as the first argument instead of an id, and each of the - * object's attributes will become attributes of the generate tag. - * - * Usage: << htag id >> ... << /htag>> - * Usage: << htag id tag >> ... << /htag>> - * Usage: << htag attributes >> ... << /htag>> - * Usage: << htag attributes tag >> ... << /htag>> - * @param {string} text - * @param {object} attributes - * @param {string} tag - * @returns {string} - */ - function htag(text, attributes, tag) { - const payload = text.replace(/(^\n+|\n+$)/, ""); - const htag = tag || "div"; - - if ("object" === typeof attributes) { - attributes = $.map(attributes, (val, key) => `${key}="${val}"`).join(" "); - } else { - attributes = `id="${String(this.args[0]).trim()}"`; - } - - return `<${htag} ${attributes}>${payload}</${htag}>`; - } - - function SlaveArt(slave, option) { - return `<<SlaveArtById ${slave.ID} ${option}>>`; - } - - function slaveImage(s) { - return `<div class="imageRef smlImg">${SlaveArt(s, 1)}</div>`; - } - - function dividerAndImage(s, showImage) { - showImage = showImage || true; - const r = [V.lineSeparations === 0 ? "<br>" : "<hr style=\"margin:0\">"]; - if (showImage && (V.seeImages === 1) && (V.seeSummaryImages === 1)) { - r.push(slaveImage(s)); - } - return r.join(""); - } - - const _filteredSlaveIdxs = slaves.map(function(slave, idx) { - return _passagePreFilter(slave) ? idx : null; - }).filter(function(idx) { - return idx !== null; - }); - - const _indexSlavesIdxs = slaves.map(function(slave, idx) { - return _passagePreFilter(slave) ? idx : null; - }).filter(function(idx) { - return idx !== null; - }); - - const res = []; - const tabName = V.slaveAssignmentTab; - - let _tableCount = 0; - if (V.useSlaveListInPageJSNavigation === 1) { - const _Count = _indexSlavesIdxs.length; - /* Useful for finding weird combinations — usages of this passage that don't yet generate the quick index. - * <<print 'pass/count/indexed/flag::[' + passageName + '/' + _Count + '/' + _indexed + '/' + $SlaveSummaryFiler + ']'>> - */ - - if (((_Count > 1) && (_indexed === 0) && (((passageName === "Main") && (V.SlaveSummaryFiler === undefined) && ((V.useSlaveSummaryTabs === 0) || (V.slaveAssignmentTab === "all"))) || (V.SlaveSummaryFiler === "occupying")))) { - const _buttons = []; - let _offset = -50; - if (/Select/i.test(passageName)) { - _offset = -25; - } - res.push("<br />"); - _tableCount++; - /* - * we want <button data-quick-index="<<= _tableCount>>">... - */ - const _buttonAttributes = { - 'data-quick-index': _tableCount - }; - res.push(htag("Quick Index", _buttonAttributes, 'button')); - /* - * we want <div id="list_index3" class=" hidden">... - */ - let listIndexContent = ""; - - for (const _ssii of _indexSlavesIdxs) { - const _IndexSlave = slaves[_ssii]; - const _indexSlaveName = SlaveFullName(_IndexSlave); - const _devotionClass = getSlaveDevotionClass(_IndexSlave); - const _trustClass = getSlaveTrustClass(_IndexSlave); - _buttons.push({ - "data-name": _indexSlaveName, - "data-scroll-to": `#slave-${_IndexSlave.ID}`, - "data-scroll-offset": _offset, - "data-devotion": _IndexSlave.devotion, - "data-trust": _IndexSlave.trust, - "class": `${_devotionClass} ${_trustClass}` - }); - } - if (_buttons.length > 0) { - V.sortQuickList = V.sortQuickList || 'Devotion'; - listIndexContent += `<i>Sorting:</i> <strong><span id="qlSort">$sortQuickList</span>.</strong> `; - listIndexContent += '<<link "Sort by Devotion">>' + - '<<set $sortQuickList = "Devotion" >>' + - '<<replace "#qlSort">> $sortQuickList <</replace>>' + - '<<run' + '$("#qlWrapper").removeClass("trust").addClass("devotion");' + 'sortButtonsByDevotion();' + '>>' + - '<</link>> | ' + - '<<link "Sort by Trust">>' + - '<<set $sortQuickList = "Trust">>' + - '<<replace "#qlSort">> $sortQuickList <</replace>>' + - '<<run' + '$("#qlWrapper").removeClass("devotion").addClass("trust");' + 'sortButtonsByTrust();' + '>>' + - '<</link>>' + - '<br/>'; - listIndexContent += '<div id="qlWrapper" class="quicklist devotion">'; - for (const _button of _buttons) { - const _buttonSlaveName = _button['data-name']; - listIndexContent += htag(_buttonSlaveName, _button, 'button'); - } - listIndexContent += '</div>'; - } - res.push(htag(listIndexContent, { - id: `list_index${_tableCount}`, - class: 'hidden' - })); - } - } - - const passageToFacilityMap = { - "Arcade": App.Entity.facilities.arcade, - "Brothel": App.Entity.facilities.brothel, - "Cellblock": App.Entity.facilities.cellblock, - "Clinic": App.Entity.facilities.clinic, - "Club": App.Entity.facilities.club, - "Dairy": App.Entity.facilities.dairy, - "Farmyard": App.Entity.facilities.farmyard, - "Head Girl Suite": App.Entity.facilities.headGirlSuite, - "Master Suite": App.Entity.facilities.masterSuite, - "Nursery": App.Entity.facilities.nursery, - "Pit": App.Entity.facilities.pit, - "Schoolroom": App.Entity.facilities.schoolroom, - "Servants' Quarters": App.Entity.facilities.servantsQuarters, - "Spa": App.Entity.facilities.spa - }; - - function makeSelectionPassageInfo(f, wp) { - return { - facility: f, - passage: wp - }; - } - - const selectionPassageToFacilityMap = { - "HG Select": makeSelectionPassageInfo(App.Entity.facilities.headGirlSuite, "HG Workaround"), - "BG Select": makeSelectionPassageInfo(App.Entity.facilities.armory, "Bodyguard Workaround"), - "Attendant Select": makeSelectionPassageInfo(App.Entity.facilities.spa, "Attendant Workaround"), - "Concubine Select": makeSelectionPassageInfo(App.Entity.facilities.masterSuite, "Concubine Workaround"), - "Matron Select": makeSelectionPassageInfo(App.Entity.facilities.nursery, "Matron Workaround"), - "Madam Select": makeSelectionPassageInfo(App.Entity.facilities.brothel, "Madam Workaround"), - "Milkmaid Select": makeSelectionPassageInfo(App.Entity.facilities.dairy, "Milkmaid Workaround"), - "Nurse Select": makeSelectionPassageInfo(App.Entity.facilities.clinic, "Nurse Workaround"), - "DJ Select": makeSelectionPassageInfo(App.Entity.facilities.club, "DJ Workaround"), - "Farmer Select": makeSelectionPassageInfo(App.Entity.facilities.farmyard, "Farmer Workaround"), - "Stewardess Select": makeSelectionPassageInfo(App.Entity.facilities.servantsQuarters, "Stewardess Workaround"), - "Schoolteacher Select": makeSelectionPassageInfo(App.Entity.facilities.schoolroom, "Schoolteacher Workaround"), - "Wardeness Select": makeSelectionPassageInfo(App.Entity.facilities.cellblock, "Wardeness Workaround"), - "Agent Select": makeSelectionPassageInfo(App.Entity.facilities.arcologyAgent, "Agent Workaround"), - "Recruiter Select": makeSelectionPassageInfo(App.Entity.facilities.penthouse, "Recruiter Workaround") - }; - - /** @type {App.Entity.Facilities.Facility} */ - const passageFacility = passageToFacilityMap[passageName]; - /** @type {{facility: App.Entity.Facilities.Facility, passage: string}} */ - const slaveSelect = passageFacility === undefined ? selectionPassageToFacilityMap[passageName] : undefined; - - for (const _ssi of _filteredSlaveIdxs) { - let _Slave = slaves[_ssi]; - - if (passageName === "Main" && V.useSlaveSummaryTabs === 1) { - if (tabName === "overview") { - if (V.showOneSlave === "Head Girl" && _Slave.assignment !== App.Data.Facilities.headGirlSuite.manager.assignment) { - continue; - } - if (V.showOneSlave === "recruit girls" && _Slave.assignment !== App.Data.Facilities.penthouse.manager.assignment) { - continue; - } - if (V.showOneSlave === "guard you" && _Slave.assignment !== App.Data.Facilities.armory.manager.assignment) { - continue; - } - } else { - if (tabName === "resting") { - if (_Slave.assignment !== "rest") { - continue; - } - } else { - if (tabName !== "all" && _Slave.assignment !== tabName) { - continue; - } - } - } - } - - const _slaveName = SlaveFullName(_Slave); - - // const _tableCount = 0; - let slaveImagePrinted = (V.seeImages === 1) && (V.seeSummaryImages === 1); - - res.push(`<div id="slave_${_Slave.ID}" style="clear:both">`); - - if (passageFacility !== undefined) { - if (V.SlaveSummaryFiler === "assignable" || V.SlaveSummaryFiler === "transferable") { - if (!passageFacility.hasFreeSpace) { - res.pop(); - continue; - } - const rejects = passageFacility.canHostSlave(_Slave); - if (rejects.length > 0) { - let rejectString = rejects.length === 1 ? - rejects[0] : - `${_slaveName}: <ul>${rejects.map(e => `<li>${e}</li>`).join('')}</ul>`; - res.push(`${rejectString}</div>`); - continue; - } else { - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Slave Interact][$activeSlave = $slaves[${_ssi}]]]`); - } - } else if (V.SlaveSummaryFiler === "occupying") { - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Slave Interact][$activeSlave = $slaves[${_ssi}]]]`); - } else { - if ((V.seeImages === 1) && (V.seeSummaryImages === 1)) { - res.push(slaveImage(_Slave)); - } - res.push(`[[${_slaveName}|Slave Interact][$activeSlave = $slaves[${_ssi}]]]`); - } - } else if (slaveSelect !== undefined && slaveSelect.passage !== "") { - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|${slaveSelect.passage}][$i = ${_ssi}]]`); - } - switch (passageName) { - case "Main": - if ((_Slave.choosesOwnClothes === 1) && (_Slave.clothes === "choosing her own clothes")) { - const _oldDevotion = _Slave.devotion; - saChoosesOwnClothes(_Slave); - slaves[_ssi].devotion = _oldDevotion; - _Slave = slaves[_ssi]; /* restore devotion value so repeatedly changing clothes isn't an exploit */ - } - res.push(dividerAndImage(_Slave)); - if (App.Data.Facilities.headGirlSuite.manager.assignment === _Slave.assignment) { - res.push('<strong><span class="lightcoral">HG</span></strong> '); - } else if (App.Data.Facilities.penthouse.manager.assignment === _Slave.assignment) { - res.push('<strong><span class="lightcoral">RC</span></strong> '); - } else if (App.Data.Facilities.armory.manager.assignment === _Slave.assignment) { - res.push('<strong><span class="lightcoral">BG</span></strong> '); - } - - if (Array.isArray(V.personalAttention) && V.personalAttention.findIndex(s => s.ID === _Slave.ID) !== -1) { - res.push('<strong><span class="lightcoral"> PA</span></strong> '); - } - res.push(this.passageLink(_slaveName, 'Slave Interact', `$activeSlave = $slaves[${_ssi}]`)); /* lists their names */ - break; - - case "Personal Attention Select": - res.push(dividerAndImage(_Slave)); - res.push(`<<link "${_slaveName}">> <<run App.UI.selectSlaveForPersonalAttention(${_Slave.ID})>><</link>>`); - break; - case "Subordinate Targeting": - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Subordinate Targeting][$activeSlave.subTarget = $slaves[${_ssi}].ID]]`); - break; - case "Coursing Association": - if (V.SlaveSummaryFiler === "assignable") { - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Assign][$i = ${_ssi}]]`); - } else { - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Retrieve][$i = ${_ssi}]]`); - } - break; - case "New Game Plus": - res.push(dividerAndImage(_Slave)); - if (V.SlaveSummaryFiler === "assignable") { - res.push(`__''<span class="pink">${_Slave.slaveName}</span>''__`); - } else { - res.push(`__''<span class="pink">${_Slave.slaveName}</span>''__`); - } - break; - case "Rules Slave Select": - slaveImagePrinted = false; - if (V.SlaveSummaryFiler === "assignable") { - res.push(`__''[[${_slaveName}|Rules Slave Select Workaround][$activeSlave = $slaves[${_ssi}]]]''__`); - } else { - res.push(`__''[[${_slaveName}|Rules Slave Deselect Workaround][$activeSlave = $slaves[${_ssi}]]]''__`); - } - break; - case "Rules Slave Exclude": - slaveImagePrinted = false; - if (V.SlaveSummaryFiler === "assignable") { - res.push(`__''[[${_slaveName}|Rules Slave Exclude Workaround][$activeSlave = $slaves[${_ssi}]]]''__`); - } else { - res.push(`__''[[${_slaveName}|Rules Slave NoExclude Workaround][$activeSlave = $slaves[${_ssi}]]]''__`); - } - break; - case "Matchmaking": - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Slave Interact][$activeSlave = $slaves[${_ssi}]]]`); - break; - case "Dinner Party Preparations": - res.push(dividerAndImage(_Slave)); - res.push(`[[${_slaveName}|Slave Interact][$activeSlave = $slaves[${_ssi}]]]`); - break; - } - - SlaveStatClamp(_Slave); - _Slave.trust = Math.trunc(_Slave.trust); - _Slave.devotion = Math.trunc(_Slave.devotion); - _Slave.health = Math.trunc(_Slave.health); - V.slaves[_ssi] = _Slave; - - res.push(' will '); - if ((_Slave.assignment === "rest") && (_Slave.health >= -20)) { - res.push(`<strong><u><span class="lawngreen">rest</span></u></strong>`); - } else if ((_Slave.assignment === "stay confined") && ((_Slave.devotion > 20) || ((_Slave.trust < -20) && (_Slave.devotion >= -20)) || ((_Slave.trust < -50) && (_Slave.devotion >= -50)))) { - res.push(`<strong><u><span class="lawngreen">stay confined.</span></u></strong>`); - if (_Slave.sentence > 0) { - res.push(` (${_Slave.sentence} weeks)`); - } - } else if (_Slave.choosesOwnAssignment === 1) { - res.push('choose her own job'); - } else { - res.push(_Slave.assignment); - if (_Slave.sentence > 0) { - res.push(` ${_Slave.sentence} weeks`); - } - } - res.push('. '); - - if ((V.displayAssignments === 1) && (passageName === "Main") && (_Slave.ID !== V.HeadGirl.ID) && (_Slave.ID !== V.Recruiter.ID) && (_Slave.ID !== V.Bodyguard.ID)) { - res.push(App.UI.jobLinks.assignments(_ssi, "Main")); - } - - const _numFacilities = V.brothel + V.club + V.dairy + V.farmyard + V.servantsQuarters + V.masterSuite + V.spa + V.clinic + V.schoolroom + V.cellblock + V.arcade + V.HGSuite; - - if (_numFacilities > 0) { - if (passageName === "Main" || passageName === "Head Girl Suite" || passageName === "Spa" || passageName === "Brothel" || passageName === "Club" || passageName === "Arcade" || passageName === "Clinic" || passageName === "Schoolroom" || passageName === "Dairy" || passageName === "Farmyard" || passageName === "Servants' Quarters" || passageName === "Master Suite" || passageName === "Cellblock") { - V.returnTo = passageName; - - res.push('<br>Transfer to: '); - res.push(App.UI.jobLinks.transfers(_ssi)); - } - } /* closes _numFacilities */ - - if ((passageName !== 'Main') || (V.SlaveSummaryFiler !== undefined) || (V.useSlaveSummaryTabs === 0) || (tabName === "all")) { - res.push(`<span id="slave-${slaves[_ssi].ID}"> </span>`); - } - res.push('<br/>'); - - if (slaveImagePrinted) { - res.push(' '); - } - - clearSummaryCache(); - res.push(SlaveSummary(_Slave)); - - V.slaves[_ssi] = _Slave; - res.push('</div>'); - - if (passageFacility !== undefined) { - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - if (V.SlaveSummaryFiler === "assignable") { - res.push(`<<link "Send ${_Slave.object} to ${passageFacility.name}" "Assign">><<set $i = ${_ssi}>><</link>>`); - } else if (V.SlaveSummaryFiler === "transferable") { - res.push(`<<link "Send ${_Slave.object} to ${passageFacility.name}" "Assign">><<set $i = ${_ssi}>><</link>>`); - } else if (V.SlaveSummaryFiler === "occupying") { - res.push(`<<link "Remove ${_Slave.object} from ${passageFacility.name}" "Retrieve">><<set $i = ${_ssi}>><</link>>`); - } else if (passageFacility.desc.manager !== null) { - const managerCapName = capFirstChar(passageFacility.desc.manager.position); - res.push(`[[Change or remove ${managerCapName}|${managerCapName} Select]]`); - } - } else if (slaveSelect !== undefined) { - if (slaveSelect.facility.manager.slaveHasExperience(_Slave)) { - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - res.push('<span class="lime">Has applicable career experience.</span>'); - } - } - switch (passageName) { - case "Main": - continue; - case "Recruiter Select": - if (setup.recruiterCareers.includes(_Slave.career) || (_Slave.skill.recruiter >= V.masteredXP)) { - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - res.push('<span class="lime">Has applicable career experience.</span>'); - } - break; - case "New Game Plus": - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - if (V.SlaveSummaryFiler === "assignable") { - res.push(`<<link "Add to import list" "New Game Plus">> - <<set $slavesToImport += 1,$SlaveSummaryFiler = "occupying">> - <<= assignJob($slaves[${_ssi}], "be imported")>> - <</link>>`); - } else { - res.push(`<<link "Remove from import list" "New Game Plus">> - <<set $slavesToImport -= 1,$SlaveSummaryFiler = "assignable">> - <<= removeJob($slaves[${_ssi}], $slaves[${_ssi}].assignment)>> - <</link>>`); - } - break; - case "Matchmaking": - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - res.push(`[[Match them|Matchmaking][$subSlave = $slaves[${_ssi}]]]`); - break; - case "Dinner Party Preparations": - res.push(`<br>${V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1}` ? ' ' : ''); - res.push(`[[Make her the main course|Dinner Party Execution][$activeSlave = $slaves[${_ssi}]]]`); - break; - } - } - return res.join(""); -}; - -/** - * Adds/removes a slave with the given id to/from the personal attention array - * @param {number} id slave id - */ -App.UI.selectSlaveForPersonalAttention = function(id) { - const V = State.variables; - - if (!Array.isArray(V.personalAttention)) { - /* first PA target */ - V.personalAttention = [{ - ID: id, - trainingRegimen: "undecided" - }]; - } else { - const _pai = V.personalAttention.findIndex(function(s) { - return s.ID === id; - }); - if (_pai === -1) { - /* not already a PA target; add */ - V.activeSlave = getSlave(id); - V.personalAttention.push({ - ID: id, - trainingRegimen: "undecided" - }); - } else { - /* already a PA target; remove */ - V.personalAttention.deleteAt(_pai); - if (V.personalAttention.length === 0) { - V.personalAttention = "sex"; - } - } - } - SugarCube.Engine.play("Personal Attention Select"); -}; diff --git a/src/js/spanMacroJS.js b/src/js/spanMacroJS.js index a6c57219fe0a31965832292cd2fe81936713ff49..61760b318d2d82c24865279255ce48018f846033 100644 --- a/src/js/spanMacroJS.js +++ b/src/js/spanMacroJS.js @@ -1,9 +1,9 @@ /* - * <<span>> macro - * A minimal macro which allows to create <span> elements with dynamic IDs. - * - * Usage: <<span $variable>>...<</span>> - */ +* <<span>> macro +* A minimal macro which allows to create <span> elements with dynamic IDs. +* +* Usage: <<span $variable>>...<</span>> +*/ Macro.add('span', { skipArgs: true, tags: null, diff --git a/src/js/storyJS.js b/src/js/storyJS.js index 3fa38d04f6417d5992e5f84e797e5da33f148c44..51fc7dd346f8c14f596d68940c4161d7a7cfd976 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -364,12 +364,10 @@ window.lispReplace = function(text) { /** * @param {App.Entity.SlaveState} slave - * @param {Object} arcology // I think + * @param {Object} arcology * @returns {number} */ window.repGainSacrifice = function(slave, arcology) { - slave = slave || State.variables.activeSlave; - arcology = arcology || State.variables.arcologies[0]; if (!slave || !arcology || arcology.FSAztecRevivalist === "unset" || arcology.FSAztecRevivalist <= 0) { return 0; } @@ -436,8 +434,7 @@ window.toJson = function(obj) { * @param {App.Entity.SlaveState} slave * @returns {string} */ -window.nippleColor = function(slave) { - slave = slave || State.variables.activeSlave; +window.nippleColor = function (slave) { if (skinToneLevel(slave.skin) < 8) { if (slave.preg > slave.pregData.normalBirth / 4 || (slave.counter.birthsTotal > 0 && slave.lactation > 0)) { return "brown"; @@ -493,10 +490,10 @@ window.overpowerCheck = function(slave, PC) { }; /** - * returns array of IDs of all characters who impregnated slave - * @param {App.Entity.SlaveState} slave - * @returns {number[]} - */ +* returns array of IDs of all characters who impregnated slave +* @param {App.Entity.SlaveState} slave +* @returns {number[]} +*/ window.impregnatedBy = function(slave) { const IDArray = []; if (!Array.isArray(slave.womb)) { diff --git a/src/js/textbox2.js b/src/js/textbox2.js index 94611fc8d5ad0d4a9cac60b143797fbaa1e21704..cebb01edecd516ec0c1e319a9e5a37ffac76051f 100644 --- a/src/js/textbox2.js +++ b/src/js/textbox2.js @@ -4,13 +4,9 @@ Macro.add("textbox2", { const e = []; return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("default value"), this.error(`no ${e.join(" or ")} specified`); } - if ("string" !== typeof this.args[0]) { - return this.error("variable name argument is not a string"); - } + if ("string" !== typeof this.args[0]) { return this.error("variable name argument is not a string"); } const t = this.args[0].trim(); - if ("$" !== t[0] && "_" !== t[0]) { - return this.error(`variable name "${this.args[0]}" is missing its sigil ($ or _)`); - } + if ("$" !== t[0] && "_" !== t[0]) { return this.error(`variable name "${this.args[0]}" is missing its sigil ($ or _)`); } Config.debug && this.debugView.modes({ block: true }); diff --git a/src/js/utilJS.js b/src/js/utilJS.js index 1893f46800fc4bf8563ce5f368fd5030cb21e6e2..f6c8365573b189209ddc804cb2f00f0a921b9688 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -1806,20 +1806,80 @@ window.HackingSkillMultiplier = function() { } }; -window.opentab = function(evt, tabName) { - const V = State.variables; - /* var passage = passage().trim().replace(/ /g,"+");*/ - const tabcontent = document.getElementsByClassName("tabcontent"); - for (let i = 0; i < tabcontent.length; i++) { - tabcontent[i].style.display = "none"; +App.UI.tabbar = function() { + return { + openTab: openTab, + tabButton: tabButton, + makeTab: makeTab, + handlePreSelectedTab: handlePreSelectedTab + }; + + function openTab(evt, tabName) { + const V = State.variables; + /* var passage = passage().trim().replace(/ /g,"+");*/ + const tabcontent = document.getElementsByClassName("tabcontent"); + for (let i = 0; i < tabcontent.length; i++) { + tabcontent[i].style.display = "none"; + } + const tablinks = document.getElementsByClassName("tablinks"); + for (let i = 0; i < tablinks.length; i++) { + tablinks[i].className = tablinks[i].className.replace(" active", ""); + } + V.tabChoice[_tabChoiceVarName()] = tabName; /* The regex strips spaces and " ' " from passage names, making "Servants' Quarters" into "ServantsQuarters" and allowing it to be used as a label in this object. */ + document.getElementById(tabName).style.display = "block"; + evt.currentTarget.className += " active"; + } + + /** + * @param {string} name + * @param {string} text + * @returns {string} + */ + function tabButton(name, text) { + return `<button class="tablinks" onclick="App.UI.tabbar.openTab(event, '${name}')" id="tab ${name}">${text}</button>`; + } + + /** + * @param {string} name + * @param {string} content + * @returns {string} + */ + function makeTab(name, content) { + return `<div id="${name}" class="tabcontent"><div class="content">` + content + '</div></div>'; } - const tablinks = document.getElementsByClassName("tablinks"); - for (let i = 0; i < tablinks.length; i++) { - tablinks[i].className = tablinks[i].className.replace(" active", ""); + + function handlePreSelectedTab() { + let selectedTab = State.variables.tabChoice[_tabChoiceVarName()]; + if (!selectedTab) { selectedTab = "assign"; } + $(document).one(':passagedisplay', function () { + let tabBtn = document.getElementById(`tab ${selectedTab}`); + if (!tabBtn) { + tabBtn = document.getElementsByClassName('tablinks').item(0); + } + if (tabBtn) { tabBtn.click(); } + }); + } + + function _tabChoiceVarName() { + return passage().trim().replace(/ |'/g, ''); } - V.tabChoice[passage().trim().replace(/ |'/g, "")] = tabName; /* The regex strips spaces and " ' " from passage names, making "Servants' Quarters" into "ServantsQuarters" and allowing it to be used as a label in this object. */ - document.getElementById(tabName).style.display = "block"; - evt.currentTarget.className += " active"; +}(); + + +/** + * replaces special HTML charachters with their '&xxx' forms + * @param {string} text + * @returns {string} + */ +App.Utils.escapeHtml = function(text) { + const map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return text.replace(/[&<>"']/g, m => map[m]); }; /** @@ -1838,19 +1898,59 @@ window.opentab = function(evt, tabName) { * // equal to [[Go to town|Town]] * App.UI.passageLink("Go to town", "Town") */ -App.UI.passageLink = function(linkText, passage, setter, elementType) { - if (!elementType) { - elementType = "a"; -} - +App.UI.passageLink = function(linkText, passage, setter, elementType = 'a') { let res = `<${elementType} data-passage="${passage}"`; if (setter) { - res += ` data-setter="${setter}"`; + res += ` data-setter="${App.Utils.escapeHtml(setter)}"`; } res += `>${linkText}</${elementType}>`; return res; }; +/** + * Replaces contents of the element, identified by the given selector, with wiki'ed new content + * + * The function is an analogue to the SugarCube <<replace>> macro (and is a simplified version of it) + * @param {string} selector + * @param {string} newContent + */ +App.UI.replace = function (selector, newContent) { + let ins = jQuery(document.createDocumentFragment()); + ins.wiki(newContent); + const target = $(selector); + target.empty(); + target.append(ins); +}; + +/** + * A simple macro which allows to create wrapping html elements with dynamic IDs. + * + * idea blatantly robbed from the spanMacroJS.tw but expanded to a more generic case, allowing <div>, + * <button> or whatever you want elements, default is for the div though. + * In addition, you can pass an object in as the first argument instead of an id, and each of the + * object's attributes will become attributes of the generate tag. + * + * @example + * htag('test', "red") // <div id="red">test</div> + * htag('test', {class: red}); // <div class="red">test</div> + * htag('test', {class: red, id: green}); // <div class="red" id="green">test</div> + * @param {string} text + * @param {string|object} attributes + * @param {string} [tag='div'] + * @returns {string} + */ +App.UI.htag = function (text, attributes, tag = 'div') { + const payload = text.replace(/(^\n+|\n+$)/, ""); + + if ("object" === typeof attributes) { + attributes = $.map(attributes, (val, key) => `${key}="${val}"`).join(" "); + } else { + attributes = `id="${attributes.trim()}"`; + } + + return `<${tag}${attributes}>${payload}</${tag}>`; +}; + window.SkillIncrease = (function() { return { Oral: OralSkillIncrease, @@ -2411,41 +2511,6 @@ window.changeSkinTone = function(skin, value) { return prop; }; -/** - * Determines if FS Decor level is above or equal to value - * @param {number} value - * @returns {boolean} - */ -window.FSDecorLevel = function(value) { - "use strict"; - const V = State.variables, - FS = [ - 'Supremacist', 'Subjugationist', 'GenderRadicalist', 'GenderFundamentalist', - 'Paternalist', 'Degradationist', 'BodyPurist', 'TransformationFetishist', - 'YouthPreferentialist', 'MaturityPreferentialist', 'SlimnessEnthusiast', 'AssetExpansionist', - 'Pastoralist', 'PhysicalIdealist', 'ChattelReligionist', 'RomanRevivalist', - 'AztecRevivalist', 'EgyptianRevivalist', 'EdoRevivalist', 'ArabianRevivalist', - 'ChineseRevivalist', 'RepopulationFocus', 'Restart', 'HedonisticDecadence' - ]; - let valid = 0; - if (!value) { - return null; - } - - for (let i = 0; i < FS.length; i++) { - const tail = 'FS' + FS[i] + 'Decoration'; - if (V.arcologies[0][tail] >= value) { - valid += 1; - } - } - - if (valid > 0) { - return true; - } else { - return false; - } -}; - /** * Creates a span for an link with tooltip containing the reasons why it is disabled * @param {string} link @@ -2486,3 +2551,12 @@ App.Utils.setActiveSlaveByIndex = function(index) { State.variables.activeSlave = State.variables.slaves[index]; } }; + +/** + * Returns index in the slave array for the given ID + * @param {number} id slave ID + * @returns {number} + */ +App.Utils.slaveIndexForId = function (id) { + return State.variables.slaveIndices[id]; +}; diff --git a/src/js/vignettes.js b/src/js/vignettes.js index 9a0a02890bde0a0026a48e3d0f20ea09aa97656d..6d838de1586d3deff3439e9a76711be29482a0c6 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -325,7 +325,7 @@ window.GetVignette = function GetVignette(slave) { break; case "bitchy": vignettes.push({ - text: `${he} makes an emasculating remark to a customer right after they fuck ${him},`, + text: `${he} made an emasculating remark to a customer right after they fuck ${him},`, type: "rep", effect: -1, }); @@ -512,35 +512,35 @@ window.GetVignette = function GetVignette(slave) { switch (slave.behavioralQuirk) { case "confident": vignettes.push({ - text: `${he} confidently presses forward with a wavering potential customer, and makes the sale,`, + text: `${he} confidently pressed forward with a wavering potential customer, and made the sale,`, type: "cash", effect: 1, }); break; case "cutting": vignettes.push({ - text: `${he} makes such a gloriously cutting remark to a male customer that a female bystander comes to ${him} for repeat business,`, + text: `${he} made such a gloriously cutting remark to a male customer that a female bystander came to ${him} for repeat business,`, type: "cash", effect: 1, }); break; case "funny": vignettes.push({ - text: `${he} makes a group of citizens laugh so hard, one of them comes to ${him} for repeat business,`, + text: `${he} made a group of citizens laugh so hard, one of them came to ${him} for repeat business,`, type: "cash", effect: 1, }); break; case "fitness": vignettes.push({ - text: `${he} continues a marathon gangbang past the point where most would have passed out,`, + text: `${he} continued a marathon gangbang past the point where most would have passed out,`, type: "cash", effect: 1, }); break; case "adores women": vignettes.push({ - text: `${he} strikes up a personal friendship with a regular female customer,`, + text: `${he} struck up a personal friendship with a regular female customer,`, type: "rep", effect: 1, }); @@ -552,19 +552,19 @@ window.GetVignette = function GetVignette(slave) { break; case "adores men": vignettes.push({ - text: `${he} strikes up a personal friendship with a regular male customer,`, + text: `${he} struck up a personal friendship with a regular male customer,`, type: "rep", effect: 1, }); vignettes.push({ - text: `${he} practically worships a minor celebrity, eagerly slobbering over his cock and covering ${himself} with his cum,`, + text: `${he} practically worshipped a minor celebrity, eagerly slobbering over his cock and covering ${himself} with his cum,`, type: "rep", effect: 1, }); break; case "insecure": vignettes.push({ - text: `${he} successfully convinces a regular customer that ${he}'s reliant on them emotionally,`, + text: `${he} successfully convinced a regular customer that ${he}'s reliant on them emotionally,`, type: "cash", effect: 1, }); @@ -578,7 +578,7 @@ window.GetVignette = function GetVignette(slave) { break; case "advocate": vignettes.push({ - text: `${he} successfully convinces a wavering potential customer that there's nothing wrong with banging a whore,`, + text: `${he} successfully convinced a wavering potential customer that there's nothing wrong with banging a whore,`, type: "cash", effect: 1, }); @@ -597,28 +597,28 @@ window.GetVignette = function GetVignette(slave) { switch (slave.sexualQuirk) { case "gagfuck queen": vignettes.push({ - text: `${he} earns repeat business from a citizen who's obsessed with gagfucks,`, + text: `${he} earned repeat business from a citizen who's obsessed with gagfucks,`, type: "cash", effect: 1, }); break; case "painal queen": vignettes.push({ - text: `${he} earns repeat business from a citizen who's obsessed with painal,`, + text: `${he} earned repeat business from a citizen who's obsessed with painal,`, type: "cash", effect: 1, }); break; case "strugglefuck queen": vignettes.push({ - text: `${he} earns repeat business from a citizen who's obsessed with strugglefucking,`, + text: `${he} earned repeat business from a citizen who's obsessed with strugglefucking,`, type: "cash", effect: 1, }); break; case "tease": vignettes.push({ - text: `${he} convinces a citizen who's never had sex with a prostitute to patronize ${him} with some truly inspired flirting,`, + text: `${he} convinced a citizen who'd never had sex with a prostitute to patronize ${him} with some truly inspired flirting,`, type: "cash", effect: 1, }); @@ -684,7 +684,7 @@ window.GetVignette = function GetVignette(slave) { } if (slave.counter.vaginal > 500 && slave.vagina > 0) { vignettes.push({ - text: `a customer into degradation becomes obsessed with driving ${his} pussy mileage as high as possible,`, + text: `a customer into degradation became obsessed with driving ${his} pussy mileage as high as possible,`, type: "cash", effect: 1, }); @@ -1945,7 +1945,7 @@ window.GetVignette = function GetVignette(slave) { }); if (slave.nipples === "fuckable") { vignettes.push({ - text: `${he} left lasting impression on a pair of citizens after nearly passing out from a series of intense orgasms from getting ${his} nipples fucked,`, + text: `${he} left a lasting impression on a pair of citizens after nearly passing out from a series of intense orgasms from getting ${his} nipples fucked,`, type: "rep", effect: 2, }); @@ -2016,7 +2016,7 @@ window.GetVignette = function GetVignette(slave) { break; case "bitchy": vignettes.push({ - text: `${he} makes an emasculating remark to a citizen right after they fuck ${him},`, + text: `${he} made an emasculating remark to a citizen right after they fucked ${him},`, type: "rep", effect: -1, }); @@ -2187,7 +2187,7 @@ window.GetVignette = function GetVignette(slave) { break; case "self hating": vignettes.push({ - text: `the way ${he} takes everything thrown at ${him} like nothing disturbs group of citizens, though one of them enjoys it more than they let on and comes to ${him} for sex later,`, + text: `the way ${he} takes everything thrown at ${him} like nothing disturbed a group of citizens, though one of them enjoyed it more than they let on and came to ${him} for sex later,`, type: "rep", effect: 3, }); @@ -2210,71 +2210,71 @@ window.GetVignette = function GetVignette(slave) { break; case "cutting": vignettes.push({ - text: `${he} makes such a gloriously cutting remark to a male citizen that a female bystander takes ${him} right there,`, + text: `${he} made such a gloriously cutting remark to a male citizen that a female bystander takes ${him} right there,`, type: "rep", effect: 1, }); break; case "funny": vignettes.push({ - text: `${he} makes a group of citizens laugh so hard, one of them comes to ${him} for sex later,`, + text: `${he} made a group of citizens laugh so hard, one of them came to ${him} for sex later,`, type: "rep", effect: 1, }); break; case "fitness": vignettes.push({ - text: `${he} continues a marathon gangbang past the point where most would have passed out,`, + text: `${he} continued a marathon gangbang well past the point where most would have passed out,`, type: "rep", effect: 1, }); break; case "adores women": vignettes.push({ - text: `${he} strikes up a personal friendship with a regular female patron,`, + text: `${he} struck up a personal friendship with a regular female patron,`, type: "rep", effect: 1, }); vignettes.push({ - text: `${he} adoringly kisses the feet of a local socialite who leaves ${him} a generous tip,`, + text: `${he} adoringly kissed the feet of a local socialite who leaves ${him} a generous tip,`, type: "cash", effect: 1, }); break; case "adores men": vignettes.push({ - text: `${he} strikes up a personal friendship with a regular male patron,`, + text: `${he} struck up a personal friendship with a regular male patron,`, type: "rep", effect: 1, }); vignettes.push({ - text: `${he} practically worships a minor celebrity, eagerly slobbering over his cock and covering ${himself} with his cum,`, + text: `${he} practically worshipped a minor celebrity, eagerly slobbering over his cock and covering ${himself} with his cum,`, type: "rep", effect: 1, }); break; case "insecure": vignettes.push({ - text: `${he} successfully convinces a regular patron that they are reliant on ${him} emotionally,`, + text: `${he} successfully convinced a regular patron that they are reliant on ${him} emotionally,`, type: "rep", effect: 1, }); break; case "sinful": vignettes.push({ - text: `${he} helps a citizen get past their religious hang-ups through sex with the friendly neighborhood slut,`, + text: `${he} helped a citizen get past their religious hang-ups through sex with the friendly neighborhood slut,`, type: "rep", effect: 1, }); break; case "advocate": vignettes.push({ - text: `${he} successfully convinces a wavering potential citizen that there's nothing wrong with banging a public slut,`, + text: `${he} successfully convinced a wavering potential citizen that there's nothing wrong with banging a public slut,`, type: "rep", effect: 1, }); vignettes.push({ - text: `${he} manages to convince a skeptical businessman about the merits of using slaves,`, + text: `${he} managed to convince a skeptical businessman about the merits of using slaves,`, type: "rep", effect: 1, }); @@ -2288,14 +2288,14 @@ window.GetVignette = function GetVignette(slave) { switch (slave.sexualQuirk) { case "gagfuck queen": vignettes.push({ - text: `${he} earns extra gratitude from a citizen who's obsessed with gagfucks,`, + text: `${he} earned extra gratitude from a citizen who's obsessed with gagfucks,`, type: "rep", effect: 1, }); break; case "painal queen": vignettes.push({ - text: `${he} earns extra gratitude from a citizen who's obsessed with painal,`, + text: `${he} earned extra gratitude from a citizen who's obsessed with painal,`, type: "rep", effect: 1, }); @@ -2309,7 +2309,7 @@ window.GetVignette = function GetVignette(slave) { break; case "tease": vignettes.push({ - text: `${he} convinced a citizen who's never had sex with a street slut to patronize ${him} with some truly inspired flirting,`, + text: `${he} convinced a citizen who'd never had sex with a street slut to patronize ${him} with some truly inspired flirting,`, type: "rep", effect: 1, }); @@ -2333,7 +2333,7 @@ window.GetVignette = function GetVignette(slave) { break; case "perverted": vignettes.push({ - text: `${he} earns some momentary notoriety by engaging in a previously unheard-of sex act,`, + text: `${he} earned some momentary notoriety by engaging in a previously unheard-of sex act,`, type: "rep", effect: 1, }); @@ -3545,8 +3545,22 @@ window.GetVignette = function GetVignette(slave) { type: "rep", effect: 1, }); + vignettes.push({ + text: `a few containers of ${his} milk turned sour by accident,`, + type: "cash", + effect: -1, + }); } if (slave.balls > 0) { + switch (slave.fetish) { + case "pregnancy": + vignettes.push({ + text: `the thought of ${his} cum knocking someone up inspired ${him} to produce more of it,`, + type: "cash", + effect: 1, + }); + break; + } vignettes.push({ text: `an eccentric celebrity chef used ${his} cum in a new pudding recipe,`, type: "rep", @@ -3586,12 +3600,12 @@ window.GetVignette = function GetVignette(slave) { effect: 1, }); vignettes.push({ - text: `${he} dreamt that you decided to have ${him} do nothing but animals for the rest of ${his} life,`, + text: `${he} dreamt that you decided to have ${him} do nothing but fuck animals for the rest of ${his} life,`, type: "devotion", effect: -1 }); vignettes.push({ - text: `${he} dreamt that you wouldn't come to ${his} aid when one of ${his} bestial partners was getting overeager,`, + text: `${he} dreamt that you wouldn't come to ${his} aid when one of ${his} bestial partners became overeager,`, type: "trust", effect: -1 }); @@ -3623,6 +3637,11 @@ window.GetVignette = function GetVignette(slave) { effect: 1, }); } + vignettes.push({ + text: `${he} felt energized by the simulated outdoor environment`, + type: "health", + effect: 1, + }); vignettes.push({ text: `the pesticides ${he} accidentally inhaled made ${him} feel nauseous,`, type: "health", diff --git a/src/npc/agent/agentSelect.tw b/src/npc/agent/agentSelect.tw index 85b4792f88b08ab34bf35add786ec5ce2fee4991..cbf4d513f7618cd35c6f9add72293838ea1939c1 100644 --- a/src/npc/agent/agentSelect.tw +++ b/src/npc/agent/agentSelect.tw @@ -2,4 +2,9 @@ <<set $nextButton = "Back", $nextLink = "Neighbor Interact", $showEncyclopedia = 1, $encyclopedia = "Agents">> ''Appoint an Agent from your devoted slaves:'' -<<include "Slave Summary">> + +<<= App.UI.SlaveList.slaveSelectionList( + s => (s.fuckdoll === 0 && s.devotion > 20 && s.intelligence + s.intelligenceImplant > 15 && s.intelligenceImplant >= 15 && canWalk(s) && canSee(s) && canHear(s) && canTalk(s) && s.broodmother < 2 && (s.breedingMark !== 1 || State.variables.propOutcome === 0)), + (slave, index) => App.UI.passageLink(SlaveFullName(slave), 'Agent Workaround', `$i = ${index}`), + s => App.Entity.facilities.arcologyAgent.manager.slaveHasExperience(s) + )>> diff --git a/src/npc/databases/ddSlavesDatabase.tw b/src/npc/databases/ddSlavesDatabase.tw index 591b2c40ef706f41a3d2f225526640d80a8c31de..f0a85e08bb34c18f7730ac41511c13b3976cea6b 100644 --- a/src/npc/databases/ddSlavesDatabase.tw +++ b/src/npc/databases/ddSlavesDatabase.tw @@ -28,7 +28,7 @@ /*Added origin, removed anal virginity -BoneyM*/ <<set _HS = App.Entity.SlaveState.makeSkeleton()>> -<<set _HS.slaveName = "'Mrs.' Maria", _HS.birthName = "Maria", _HS.genes = "XY", _HS.origin = "She was once a successful drug lord, but was turned into her current self after making too many enemies.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 28, _HS.physicalAge = 28, _HS.visualAge = 28, _HS.ovaryAge = 28, _HS.health = 100, _HS.devotion = 75, _HS.muscles = 20, _HS.height = 175, _HS.hColor = "blonde", _HS.pubicHColor = "blonde", _HS.override_Skin = 1, _HS.skin = "spray tanned", _HS.hLength = 10, _HS.boobs = 1000, _HS.boobsImplant = 600, _HS.nipplesPiercing = 1, _HS.lips = 55, _HS.lipsImplant = 10, _HS.vagina = -1, _HS.preg = -2, _HS.clitPiercing = 3, _HS.clitSetting = "anal", _HS.dick = 5, _HS.anus = 2, _HS.prostate = 1, _HS.balls = 2, _HS.scrotum = 2, _HS.skill.oral = 100, _HS.skill.anal = 100, _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXX = 40, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.custom.tattoo = "She has a brand of a former master on her left testicle.", _HS.brand = "a brand of a former master", _HS.stampTat = "She has a fairly generic tramp stamp.", _HS.career = "a gang leader">> +<<set _HS.slaveName = "'Mrs.' Maria", _HS.birthName = "Maria", _HS.genes = "XY", _HS.origin = "She was once a successful drug lord, but was turned into her current self after making too many enemies.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 28, _HS.physicalAge = 28, _HS.visualAge = 28, _HS.ovaryAge = 28, _HS.health = 100, _HS.devotion = 75, _HS.muscles = 20, _HS.height = 175, _HS.hColor = "blonde", _HS.pubicHColor = "blonde", _HS.override_Skin = 1, _HS.skin = "spray tanned", _HS.hLength = 10, _HS.boobs = 1000, _HS.boobsImplant = 600, _HS.nipplesPiercing = 1, _HS.lips = 55, _HS.lipsImplant = 10, _HS.vagina = -1, _HS.preg = -2, _HS.clitPiercing = 3, _HS.clitSetting = "anal", _HS.dick = 5, _HS.anus = 2, _HS.prostate = 1, _HS.balls = 2, _HS.scrotum = 2, _HS.skill.oral = 100, _HS.skill.anal = 100, _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXX = 40, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.brand = "a brand of a former master", , _HS.brandLocation = "left testicle", _HS.stampTat = "She has a fairly generic tramp stamp.", _HS.career = "a gang leader">> <<set $heroSlaves.push(_HS)>> /*branded nut*/ /*Added brand to customtat, added origin -BoneyM*/ diff --git a/src/npc/descriptions/fAssistedSex.tw b/src/npc/descriptions/fAssistedSex.tw index ca49872ce5c50e74153fc91b62d836e5746b8068..dbafd0ce25d369375bbf3a56cf83db27af1ed957 100644 --- a/src/npc/descriptions/fAssistedSex.tw +++ b/src/npc/descriptions/fAssistedSex.tw @@ -64,11 +64,11 @@ $he draws toward you, half-floating on a river of silent, groping hands. When $h level with your erection. Two of $his servants reach around $his inflated profile and push $his cheeks together, wrapping your dick in a firm layer of butt cleavage. $He lifts $his ass, then drops it, again and again, smacking your chest on the downswing as $his servants manipulate $his hotdogging to maximize your pleasure. <<if canDoVaginal($activeSlave)>> When you feel the tension within you reaching its apex, you signal to $his servants to hold $him in place. With $his silent menials, still as statues, anchoring $his bloated body at the perfect angle for fucking while contorting their anonymous bodies to frame $him in a manner that maximizes $his visual attractiveness, you grab hold of $his flanks and ram into $his pregnant pussy, driving $him to the first of many orgasms in just a few casual thrusts. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> When you feel your own orgasm approaching, you pull out, ejaculating <<elseif canDoAnal($activeSlave)>> When you feel the tension within you reaching its apex, you signal to $his servants to hold $him in place. With $his silent menials, still as statues, anchoring $his bloated body at the perfect angle for fucking while contorting their anonymous bodies to frame $him in a manner that maximizes $his visual attractiveness, you grab hold of $his flanks and ram into $his asshole, driving $him to the first of many orgasms with just a few casual thrusts. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> When you feel your own orgasm approaching, you pull out, ejaculating <<else>> When you feel the tension with your reaching its apex, you signal to $his servants and they pull $him forward. You ejaculate diff --git a/src/npc/descriptions/fBellyFuck.tw b/src/npc/descriptions/fBellyFuck.tw index c0077c46cd0924f7d6726cb794353c33bf860eaa..fd4c04afbcbb6f775d1a148af23a03a71ebe53e9 100644 --- a/src/npc/descriptions/fBellyFuck.tw +++ b/src/npc/descriptions/fBellyFuck.tw @@ -82,7 +82,7 @@ When you get to $his rear, you slap $his <<else>> pert ass, <</if>> -and then spread $his cheeks for easier access to $his <<if canDoVaginal($activeSlave)>>cunt. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Heaving upward, you push $him fully onto $his belly, then lean into $him, fucking $him in a unique spin on the wheelbarrow position<<if $PC.dick == 0>> with your strap-on<</if>> and setting $his tightly packed gut to jiggling. $He moans in mixed pain and pleasure as you bring $him over the edge and, by the time you finish with $him and allow $him to return to $his duties, it's clear +and then spread $his cheeks for easier access to $his <<if canDoVaginal($activeSlave)>>cunt. <<= VCheck.Vaginal()>><<else>>asshole. <<= VCheck.Anal()>><</if>> Heaving upward, you push $him fully onto $his belly, then lean into $him, fucking $him in a unique spin on the wheelbarrow position<<if $PC.dick == 0>> with your strap-on<</if>> and setting $his tightly packed gut to jiggling. $He moans in mixed pain and pleasure as you bring $him over the edge and, by the time you finish with $him and allow $him to return to $his duties, it's clear <<if $activeSlave.belly > $activeSlave.pregAdaptation*2000>> that your recent escapades @@.red;have done lasting damage to $his body.@@ <<set $activeSlave.health -= 10>> diff --git a/src/npc/descriptions/fBoobs.tw b/src/npc/descriptions/fBoobs.tw index 820f0ca632034adedca0e4f6c4ee242eaec2171b..34a3602038f5f56f6176a3e1674611f16bca7b68 100644 --- a/src/npc/descriptions/fBoobs.tw +++ b/src/npc/descriptions/fBoobs.tw @@ -199,7 +199,7 @@ tits. <<= induceLactation($activeSlave)>> <</if>> -<<if ($activeSlave.amp !== 1)>> +<<if ($activeSlave.amp != 1)>> <<switch $activeSlave.assignment>> <<case "work in the dairy">> $He goes off to carefully wash $his <<if $activeSlave.boobs > 1500>>acre of cleavage<<elseif $activeSlave.boobs > 500>>generous cleavage<<else>>chest<</if>> to keep production in $dairyName nice and sanitary. diff --git a/src/npc/descriptions/fButt.tw b/src/npc/descriptions/fButt.tw index 16e29748d2235a138e17b91460af9c30177e29eb..45c8f27112f37a13f8704815788d4ef58f9548de 100644 --- a/src/npc/descriptions/fButt.tw +++ b/src/npc/descriptions/fButt.tw @@ -72,7 +72,7 @@ You call $him over so you can <<set $activeSlave.devotion -= 10, $activeSlave.trust -= 10>> <</if>> <<set $activeSlave.vagina++, $activeSlave.anus++>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif ($activeSlave.vagina == 0) && canDoVaginal($activeSlave)>> <<if ($activeSlave.devotion > 20)>> $He accepts your orders without comment and presents $his virgin pussy for defloration<<if ($PC.dick == 0)>>, watching with some small trepidation as you don a strap-on<</if>>. You gently ease into $his pussy before gradually increasing the intensity of your thrusts into $him. Before long, $he's moaning loudly as you pound away. Since $he is already well broken, this new connection with $his <<= WrittenMaster($activeSlave)>> @@.hotpink;increases $his devotion to you.@@ @@.lime;$His pussy has been broken in.@@ @@ -85,7 +85,7 @@ You call $him over so you can <<set $activeSlave.devotion -= 5>> <</if>> <<set $activeSlave.vagina++>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif ($activeSlave.anus == 0)>> <<if ($activeSlave.devotion > 20)>> $He accepts your orders without comment and presents $his virgin anus for defloration. You<<if ($PC.dick == 0)>> don a strap-on and<</if>> gently sodomize $him. You gently ease yourself into $his butthole and gradually speed up your thrusts while $he slowly learns to move $his hips along with you. Since $he is already well broken, this new connection with $his <<= WrittenMaster($activeSlave)>> @@.hotpink;increases $his devotion to you.@@ @@.lime;$His tight little ass has been broken in.@@ @@ -93,11 +93,11 @@ You call $him over so you can <<elseif ($activeSlave.devotion >= -20)>> $He is clearly unhappy at the idea of taking a dick up $his butt. $He obeys orders anyway, and lies there wincing and moaning as you<<if ($PC.dick == 0)>> don a strap-on and<</if>> fuck $his ass. @@.lime;$His tight little ass has been broken in,@@ and $he @@.gold;fears further anal pain.@@ <<else>> - $He is appalled at the idea of taking it up the ass<<if ($PC.dick == 0)>> and cries with fear as you don a strap-on<</if>>. $He does anyway though, sobbing into the cushions<<if $activeSlave.amp !== 1>> while you hold $his arms behind $him<</if>>. You force yourself into $his butthole. $He sobs and cries with disgust while you continue thrusting into $his ass. The painful anal rape @@.mediumorchid;decreases $his devotion to you.@@ @@.lime;$His tight little ass has been broken in,@@ and $he is @@.gold;terrified of further anal pain.@@ + $He is appalled at the idea of taking it up the ass<<if ($PC.dick == 0)>> and cries with fear as you don a strap-on<</if>>. $He does anyway though, sobbing into the cushions<<if $activeSlave.amp != 1>> while you hold $his arms behind $him<</if>>. You force yourself into $his butthole. $He sobs and cries with disgust while you continue thrusting into $his ass. The painful anal rape @@.mediumorchid;decreases $his devotion to you.@@ @@.lime;$His tight little ass has been broken in,@@ and $he is @@.gold;terrified of further anal pain.@@ <<set $activeSlave.devotion -= 5>> <</if>> <<set $activeSlave.anus++>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif $activeSlave.devotion < -20>> <<if ($PC.dick == 0)>>You don a cruelly large strap-on, and you do it so $he can see it. <</if>>$He tries to refuse you, so you throw $his across the back of the couch next to your desk with $his <<if $seeRace == 1>>$activeSlave.race <</if>>ass in the air. You finger $his anus <<if ($activeSlave.vagina != -1)>>while fucking $his pussy<<elseif ($activeSlave.amp != 1)>>while frotting $his thighs<</if>> for a bit and then switch to $his now-ready anus. $He sobs as you penetrate $his rectum. <<if ($activeSlave.dick != 0) && canAchieveErection($activeSlave)>> @@ -113,7 +113,7 @@ You call $him over so you can <<elseif ($activeSlave.dick !== 0)>> $His flaccid dick is ground into the back of the couch as you rape $him. <</if>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif $activeSlave.devotion <= 50>> You throw $him across the back of the couch next to your desk with $his ass in the air<<if ($PC.dick == 0)>>, and don a strap-on<</if>>. You finger $his <<if $seeRace == 1>>$activeSlave.race <</if>>ass while <<if ($activeSlave.vagina !== -1)>>fucking $his pussy<<else>>frotting $his thighs<</if>> for a bit and then switch to $his now-ready anus. <<if ($activeSlave.anus == 1)>>$His ass is so tight that you have to work yourself in.<<elseif ($activeSlave.anus == 2)>>Your <<if ($PC.dick == 0)>>fake dick<<else>>cock<</if>> slides easily up $his ass.<<else>>You slide into $his already-gaping asspussy with ease.<</if>> $He gasps as you penetrate $his rectum, but you timed the switch so that $he was on the verge of orgasm, and $he comes immediately. <<if ($activeSlave.dick !== 0) && canAchieveErection($activeSlave)>> @@ -125,7 +125,7 @@ You call $him over so you can <<elseif ($activeSlave.clit > 2)>> $His clit is so large that it bobs slightly with each thrust. <</if>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<else>> <<if ($activeSlave.amp != 1)>>$He kneels on the floor<<else>>You lay $him on the floor<</if>> so you can take $him at will<<if ($PC.dick == 0)>>, and don a strap-on<</if>>. You finger $his <<if $seeRace == 1>>$activeSlave.race <</if>>ass while <<if canDoVaginal($activeSlave)>> @@ -157,7 +157,7 @@ You call $him over so you can <<elseif ($activeSlave.clit > 2)>> $His clit is so large that it bobs slightly with each thrust. <</if>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</if>> <<if ($activeSlave.bellyPreg >= 1500)>> diff --git a/src/npc/descriptions/fLips.tw b/src/npc/descriptions/fLips.tw index 06d1e97a537d30267c8f1bfe0f0edff1f0596e4e..a40d774e8b239f9042c177ccd71c5c9736bb37e3 100644 --- a/src/npc/descriptions/fLips.tw +++ b/src/npc/descriptions/fLips.tw @@ -1,6 +1,5 @@ :: FLips [nobr] - <<set $activeSlave.counter.oral++, $oralTotal++>> <<run clearSummaryCache($activeSlave)>> <<setLocalPronouns $activeSlave>> diff --git a/src/npc/descriptions/fMaternitySwing.tw b/src/npc/descriptions/fMaternitySwing.tw index 2fed6e3226a1a557177730c7e2ff253bdb19e0f6..ce2f83c6a9a06ea172c5dd437101066a79f19e28 100644 --- a/src/npc/descriptions/fMaternitySwing.tw +++ b/src/npc/descriptions/fMaternitySwing.tw @@ -42,7 +42,7 @@ You strap into your own customized version of the device, then elevate your body glorified belly balloon <</if>> into a string of mutual orgasms with some truly astounding aerial sex. -<<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> +<<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> The sight of $his swollen body wobbling in mid-air as you pound away at $him never gets old, <<if $activeSlave.devotion > 95>> and $he certainly seems to enjoy your ministrations, too. diff --git a/src/npc/descriptions/fPoolSex.tw b/src/npc/descriptions/fPoolSex.tw index 72bf898d9b182c15f4f8187c7041c31be2a99800..1b8bf3d9332a615d29ef5e0427ac86ac4ffd9f27 100644 --- a/src/npc/descriptions/fPoolSex.tw +++ b/src/npc/descriptions/fPoolSex.tw @@ -48,7 +48,7 @@ You order $him to meet you in the spa for some quality time in the penthouse's r back <</if>> and the pool's silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> <<else>> ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> @@ -57,7 +57,7 @@ You order $him to meet you in the spa for some quality time in the penthouse's r rolls sideways and rubs your vulva as best $he can. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VCheck.Vaginal()>><<else>>asshole. <<= VCheck.Anal()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. <<else>> When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $hers, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.counter.vaginal++, $vaginalTotal++>> @@ -97,7 +97,7 @@ You order $him to meet you in the spa for some quality time in the penthouse's r back <</if>> and the pool's silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> <<else>> ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> @@ -106,7 +106,7 @@ You order $him to meet you in the spa for some quality time in the penthouse's r rolls sideways and rubs your vulva as best $he can. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VCheck.Vaginal()>><<else>>asshole. <<= VCheck.Anal()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. <<else>> When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $hers, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.counter.vaginal++, $vaginalTotal++>> @@ -151,7 +151,7 @@ You order $him to meet you in the spa for some quality time in the penthouse's r back <</if>> and the pool's silk lined walls. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and rub one hand back and forth along the line of $his tensed shoulders as $he slowly gives in to lust. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> <<else>> ooze stimulated quim is in need of $his tender care. You force $him back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> @@ -160,8 +160,8 @@ You order $him to meet you in the spa for some quality time in the penthouse's r set $him to rubbing your vulva with $his belly button. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. - <<= AnalVCheck()>> + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VCheck.Vaginal()>><<else>>asshole. <<= VCheck.Anal()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strap-on to $his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + <<= VCheck.Anal()>> <<else>> When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $hers, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.counter.vaginal++, $vaginalTotal++>> diff --git a/src/npc/descriptions/fVagina.tw b/src/npc/descriptions/fVagina.tw index 65cef5c1e94377b61f4b637a8aebcd8918a068ee..5cf1995cc7b3e38dd4c72be3a53df6bf0b7e8404 100644 --- a/src/npc/descriptions/fVagina.tw +++ b/src/npc/descriptions/fVagina.tw @@ -474,7 +474,7 @@ You call $him over so you can <</if>> <</if>> -<<= VaginalVCheck()>> +<<= VCheck.Vaginal()>> <<if ($activeSlave.bellyPreg >= 1500)>> The poor slave's belly gets in the way, but the added perversion of fucking a pregnant hole makes the inconvenience worthwhile. diff --git a/src/npc/fAbuse.tw b/src/npc/fAbuse.tw index eb216b1abe8940144ed03ecf5df8e7c0a8c6c2f3..ec696c4513bf7767731b18021c5eabc9c37b546b 100644 --- a/src/npc/fAbuse.tw +++ b/src/npc/fAbuse.tw @@ -338,7 +338,7 @@ from your victim. <</if>> <</if>> -<<if ($dyedSkin.indexOf($activeSlave) != -1)>> +<<if ($dyedSkin.indexOf($activeSlave.skin) != -1)>> $His dyed<<if $seeRace == 1>>, $activeSlave.race<</if>> ass barely shows the spanking. <<elseif (skinToneLevel($activeSlave) < 5)>> $His $activeSlave.skin<<if $seeRace == 1>>, $activeSlave.race<</if>> ass shows the spanking extremely well. @@ -359,41 +359,41 @@ from your victim. <<set $activeSlave.counter.oral++, $oralTotal++>> <<elseif ($activeSlave.chastityVagina) && canDoAnal($activeSlave)>> The bitch's wearing a chastity belt, so $he isn't surprised when you shove <<if ($PC.dick == 0)>>the strap-on<<else>>your dick<</if>> up $his butt. What surprises $him is when you slide a finger or two in alongside your dick to stretch $him to the point of pain. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set _asspain = 1>> <<elseif ($activeSlave.vagina == 0)>> The bitch's still a virgin and you don't mean to take that now, but you torture $him with the threat of raping $his virgin pussy for a while before settling for $his gagging throat. <<set $activeSlave.counter.oral++, $oralTotal++>> <<elseif $activeSlave.bellyPreg >= 600000>> The bitch is on the brink of bursting, so hard intercourse will be painful and terrifying to $him. You thrust hard into $him causing $his taut belly to bulge and making $his children squirm within $his straining womb.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> You brutally fuck $him as $he pleads for you to stop until you're at your edge. More cum won't make the bitch more pregnant, but you cum inside $him anyway. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif $activeSlave.bellyPreg >= 120000>> The bitch is hugely pregnant, so hard intercourse will be uncomfortable and worrying for $him. You have hard intercourse. $He sobs as you rock the huge weight of $his belly back and forth without mercy, forcing $his already straining belly to bulge further, and whines as $he feels your cockhead batter $his womb.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> More cum won't make the bitch more pregnant, but you cum inside $him anyway. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif ($activeSlave.preg > $activeSlave.pregData.normalBirth/2)>> The bitch is pregnant, so hard intercourse will be uncomfortable and even worrying for $him. You have hard intercourse. $He sobs as you saw the huge weight of $his belly back and forth without mercy, and whines as $he feels your cockhead batter $his womb.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> More cum won't make the bitch more pregnant, but you cum inside $him anyway. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif ($activeSlave.pregKnown == 1)>> The bitch knows $he is pregnant, even if it isn't obvious yet, so hard intercourse will be uncomfortable and even worrying for $him. You have hard intercourse. $He sobs as you pound $his vagina without mercy, and whines as $he feels your cockhead batter $his womb.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> More cum won't make the bitch more pregnant, but you cum inside $him anyway. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif ($activeSlave.vagina == 1)>> The bitch's pussy is tight, so you ram <<if ($PC.dick == 0)>>the strap-on<<else>>your dick<</if>> into $him without preamble and fuck $him hard and fast.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> $His cunt spasms with the pain of the rape. You cum in no time. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif ($activeSlave.anus == 1)>> The bitch's butt is tight, so you ram <<if ($PC.dick == 0)>>the strap-on<<else>>your dick<</if>> into $him without lubricant and sodomize $him as hard as you can without damaging your property.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> $His asshole spasms with the pain of the rape. You cum explosively. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set _asspain = 1>> <<elseif ($activeSlave.dick > 0) && ($activeSlave.balls > 0)>> You ram <<if ($PC.dick == 0)>>the strap-on<<else>>your dick<</if>> into $his sissy butt without lubricant. As $he flinches you announce that $he'll be taking part in giving $himself anal pain. $He humps into you lamely, so you administer a truly agonizing slap to $his balls<<if ($PC.dick == 0)>><<else>> that makes $his anal ring stiffen deliciously around your dick<</if>>. To avoid further punishment $he fucks $himself against you almost hard enough to hurt $himself.<<if ($PC.vagina == 1) && ($PC.dick == 1)>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> You orgasm explosively. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set _asspain = 1>> <<elseif ($activeSlave.dick > 0)>> You ram <<if ($PC.dick == 0)>>the strap-on<<else>>your dick<</if>> into $his gelded butt without lubricant and sodomize $him as hard as you can without damaging your property.<<if $PC.vagina == 1>> Fortunately for $him, this gets you so wet that some of your pussyjuice makes it down onto your shaft and serves as improvised lube.<</if>> $He's such a slut that $he shows signs of enjoyment, but you put a stop to that whenever it happens by slapping and flicking $his cock. You cum explosively. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set _asspain = 1>> <<else>> $He's got no special physical targets for abuse, so you just rape $him hard and fast, raining stinging slaps down on $him as you do. $He cries and whimpers; you finish. - <<= BothVCheck()>> + <<= VCheck.Both()>> <</if>> <<if ($activeSlave.ID !== $Bodyguard.ID)>> This leaves $him sobbing on the floor <<if ($PC.dick == 0)>>as you shuck off the strap-on and drop it on $his face<<else>>with cum dripping out of $him<</if>>. diff --git a/src/npc/fBeg.tw b/src/npc/fBeg.tw index d542ec325e59e7af2debb1ce08eabe543084a156..00ed32a385697ee713f5bebbf9a27597b8a9cfcc 100644 --- a/src/npc/fBeg.tw +++ b/src/npc/fBeg.tw @@ -34,7 +34,7 @@ You call $him over to you for inspection. <<BoobsDescription>> You look at $him <</if>> <<if ($activeSlave.devotion > -20)>> $He begins to undress with - <<if ($activeSlave.entertainSkill >= 100)>> + <<if ($activeSlave.skill.entertainment >= 100)>> masterful skill, teasing and taunting all the way down. $He rolls $his hips and most sexual parts as $he removes $his clothing. <<elseif ($activeSlave.skill.entertainment >= 80)>> arousing skill. Even though the goal is just to get $him naked, your slave knows that $his job is to entertain you with $his every move. diff --git a/src/npc/fFeelings.tw b/src/npc/fFeelings.tw index cce7d7018b494faeb1c440c52b72164bd7b89fe0..802c572cf08ca27cc12369835b8faf6a2f406f46 100644 --- a/src/npc/fFeelings.tw +++ b/src/npc/fFeelings.tw @@ -87,7 +87,7 @@ <</if>> <<if $activeSlave.devotion > 50 && $activeSlave.health < -20>> - I feel <<if $activeSlave.health < -50>>really <</if>>sick, <<Master>>. + I feel <<if $activeSlave.health < -50>>really <</if>><<s>>ick, <<Master>>. <<if $activeSlave.trust > 20>> I wi<<sh>> you could give me <<s>>omething to ea<<s>>e the pain. <</if>> @@ -1191,7 +1191,7 @@ My favorite part of my body i<<s>> A<<s>> far a<<s>> relation<<sh>>ip<<s>> go, <<Master>>," $he laughs, "I'm <<s>>uch a fucking <<s>>lut. It'<<s>> <<s>>o liberating, not having to worry about any of that crap anymore. <</if>> -<<if (FSDecorLevel(50))>> +<<if FutureSocieties.HighestDecoration() >= 60>> <<if ($activeSlave.devotion > 75)>> I'll do everything I can to <<s>>upport your vi<<s>>ion for the future. diff --git a/src/npc/fRelation.tw b/src/npc/fRelation.tw index 01c9f487c419efa48eda3fbf8cdf43a82887cf0f..a570465c95d94515d51136d6bdcc667ae8f815c3 100644 --- a/src/npc/fRelation.tw +++ b/src/npc/fRelation.tw @@ -58,16 +58,16 @@ You call both $activeSlave.slaveName and $slaves[$partner].slaveName to your off <<elseif ($slaves[$partner].devotion - $activeSlave.devotion > 20) && ($slaves[$partner].devotion <= 50)>> $slaves[$partner].slaveName is a lot more ready and willing for this than $activeSlave.slaveName, so<<if ($PC.dick == 0)>>while getting into a strap-on,<</if>> you sit _him2 on the couch and make $activeSlave.slaveName sit on _his2 lap, facing _him2. In this position, $slaves[$partner].slaveName can reach around and spread _his2 _activeSlaveRel's <<if $seeRace == 1>>$slaves[$partner].race <</if>>buttocks for $him, controlling $him all the while in case $he has hesitations about this. $activeSlave.slaveName knows that $he's trapped, and lets $his _partnerRel hold $his ass wide so you can use $him. They're face to face, and it's not hard to tell that $activeSlave.slaveName is glaring daggers at $slaves[$partner].slaveName. You reward $slaves[$partner].slaveName for _his2 obedience and punish $activeSlave.slaveName for $his resistance by forcing $him to orally service $slaves[$partner].slaveName while you finish using $activeSlave.slaveName. <<set $activeSlave.counter.oral++, $slaves[$partner].counter.oral++, $oralTotal++>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif ($activeSlave.devotion - $slaves[$partner].devotion > 20) && ($slaves[$partner].devotion <= 50)>> $activeSlave.slaveName is a lot more ready and willing for this than $slaves[$partner].slaveName, so<<if ($PC.dick == 0)>>while getting into a strap-on,<</if>> you sit $him on the couch and make $slaves[$partner].slaveName sit on $his lap, facing $him. In this position, $activeSlave.slaveName can reach around and spread $his _partnerRel's <<if $seeRace == 1>>$activeSlave.race <</if>>buttocks for _him2, controlling _him2 all the while in case _he2 has hesitations about this. $slaves[$partner].slaveName knows that _he2's trapped, and lets _his2 _activeSlaveRel hold _his2 ass wide so you can use _him2. They're face to face, and it's not hard to tell that $slaves[$partner].slaveName is glaring daggers at $activeSlave.slaveName. You reward $activeSlave.slaveName for $his obedience and punish $slaves[$partner].slaveName for _his2 resistance by forcing _him2 to suck $activeSlave.slaveName off while you finish using $slaves[$partner].slaveName. <<set $activeSlave.counter.oral++, $slaves[$partner].counter.oral++, $oralTotal++>> - <<= PartnerVCheck()>> + <<= VCheck.Partner()>> <<elseif canWalk($activeSlave) && canWalk($slaves[$partner]) && ($activeSlave.devotion > 50) && ($slaves[$partner].devotion > 20) && (_activeSlaveRel == "mother" || _activeSlaveRel == "father")>> $activeSlave.slaveName gives you a little smile when $he <<if canHear($activeSlave)>>hears<<else>>learns<</if>> you wish to fuck $him and $his daughter $slaves[$partner].slaveName<<if ($PC.dick == 0)>> and <<if canSee($activeSlave)>>sees<<else>>acknowledges<</if>> your strap-on<</if>>. On your direction, $activeSlave.slaveName sits on the couch. When $slaves[$partner].slaveName enters, _his2 _activeSlaveRel spreads $his arms and tells _him2 to sit on $his lap. $slaves[$partner].slaveName gets the idea and straddles $him so they're face to face. You take $slaves[$partner].slaveName from behind; _he2 gasps as _he2 feels _his2 _activeSlaveRel's hands stimulate _him2 from the front. They make out shamelessly while you take your pleasure. When you finish, $activeSlave.slaveName lies down on the couch so $slaves[$partner].slaveName can ride $his <<if $seeRace == 1>>$activeSlave.race <</if>>face. As $he sucks the cum out of $his daughter's sopping fuckhole, $slaves[$partner].slaveName sucks you hard again. In the mood for something harder this time, you jam yourself into the older $activeSlave.slaveName. $slaves[$partner].slaveName gets off $activeSlave.slaveName's face so _he2 can offer _himself2 for fondling and groping while you pound $activeSlave.slaveName. After you're done, $slaves[$partner].slaveName returns _his2 _activeSlaveRel's affection and gives $him some gentle oral as the older slave lies there exhausted. <<set $activeSlave.counter.oral += 2, $slaves[$partner].counter.oral += 2, $oralTotal += 2>> - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<elseif canWalk($activeSlave) && canWalk($slaves[$partner]) && ($activeSlave.devotion > 50) && ($slaves[$partner].devotion > 20) && (_activeSlaveRel == "daughter")>> $activeSlave.slaveName is enthusiastic when $he <<if canHear($activeSlave)>>hears<<else>>notices<</if>> you order $slaves[$partner].slaveName to come over. $His total immersion in sexual slavery has clearly uncovered a willingness to get very close to $his _partnerRel. You<<if ($PC.dick == 0)>> don a strap-on,<</if>> lie on the floor and instruct $slaves[$partner].slaveName to ride you. _He2 complies, and finds _his2 daughter $activeSlave.slaveName <<if ($slaves[$partner].dick > 0)>> @@ -77,33 +77,33 @@ You call both $activeSlave.slaveName and $slaves[$partner].slaveName to your off <</if>> Your use of $slaves[$partner].slaveName's <<if $slaves[$partner].physicalAge >= 24>>mature<<else>>surprisingly young<</if>> body is the focus. _He2 finds _himself2 caught up in a miasma of sexual pleasure and perversion, moaning and blushing as your <<if ($PC.dick == 0)>>strap-on and fingers<<else>>cock<</if>> and $activeSlave.slaveName's mouth tour _his2 body. When you finish in _his2 <<if ($slaves[$partner].dick > 0)>>asshole, _his2 daughter hastens to lavish attention on $his _partnerRel's well fucked, cum filled butt.<<else>>pussy, _his2 daughter hastens to lavish attention on $his _partnerRel's well fucked, cum filled cunt.<</if>> <<set $activeSlave.counter.oral += 2, $slaves[$partner].counter.oral += 2, $oralTotal += 2>> - <<= PartnerVCheck()>> + <<= VCheck.Partner()>> <<elseif canDoVaginal($activeSlave) && canDoVaginal($slaves[$partner]) && canWalk($activeSlave) && canWalk($slaves[$partner]) && ($activeSlave.devotion > 50) && ($slaves[$partner].devotion > 50) && (_activeSlaveRel == "twin")>> $activeSlave.slaveName and $slaves[$partner].slaveName are such devoted sex slaves that they've long since lost any hesitations about their partnership, and generally approach sex as though their bodies were interchangeable. (This means that they almost never masturbate, for one thing, preferring to have sex with each other, instead.) Giggling and kissing each other, they eagerly kneel before your chair and give you simultaneous oral sex, making an effort to play with their symmetry. They kiss around your <<if ($PC.dick == 0)>>pussy<<else>>cock, making a complete seal around you with their lips<</if>>, one on each side. Then they jump up on your desk and press their <<if ($activeSlave.dick > 0) && ($slaves[$partner].dick > 0)>>cocks<<elseif ($activeSlave.dick > 0) || ($slaves[$partner].dick > 0)>>cock and pussy<<else>>pussies<</if>> against one another<<if ($PC.dick == 0)>> while you don a strap-on<</if>>, spreading their legs to offer you everything. You switch back and forth, with the twin you're not in rubbing and grinding against their <<print relativeTerm($activeSlave, $slaves[$partner])>>, until both of $slaves[$partner].slaveName and $activeSlave.slaveName are lying on the desk<<if ($PC.dick == 1)>> with cum dripping out of them<</if>>, making out tiredly. <<set $slaves[$partner].counter.oral++, $activeSlave.counter.oral++, $oralTotal++>> - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<elseif canWalk($activeSlave) && canWalk($slaves[$partner]) && ($activeSlave.devotion > 50) && ($slaves[$partner].devotion > 20) && (_activeSlaveRel == "sister" || _activeSlaveRel == "half-sister")>> You call $activeSlave.slaveName's _activeSlaveRel $slaves[$partner].slaveName in for some incestuous fun, but see no reason to wait for _him2. When _he2 arrives, it's to the <<if canSee($slaves[$partner])>>sight<<else>>scene<</if>> of $activeSlave.slaveName sitting on the couch with $his legs spread with you <<if ($activeSlave.vagina > -1)>>gently fucking $his pussy<<else>>using $his asshole<</if>><<if ($PC.dick == 0)>> with a strap-on<</if>>. You pull out and order $slaves[$partner].slaveName to orally service _his2 <<print relativeTerm($slaves[$partner], $activeSlave)>>. _He2 gets down before the spread-eagled slave $girl to get to work. After watching $activeSlave.slaveName enjoy the attention for a while, you move behind the busy $slaves[$partner].slaveName and pull _him2 into a good position so you can fuck _him2 while _he2 sucks. After a few thrusts, $activeSlave.slaveName's eyes roll back. <<if ($activeSlave.voice == 0) || ($activeSlave.accent >= 3)>>$He gestures that it feels really good when you make $his <<print relativeTerm($activeSlave, $slaves[$partner])>> moan into $him.<<else>>"Oh <<Master>>," $he squeals, "it feel<<s>> <<s>>o good when you make _him2 moan into me!"<</if>> <<set $slaves[$partner].counter.oral++, $activeSlave.counter.oral++, $oralTotal++>> - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<elseif ["daughter", "father", "half-sister", "mother", "sister", "twin"].includes(_activeSlaveRel)>> Since between them they aren't able to enthusiastically perform an incestuous threesome, you simply line $activeSlave.slaveName and $slaves[$partner].slaveName up next to one another on the couch next to your desk,<<if ($PC.dick == 0)>> don a strap-on,<</if>> and fuck <<if $seeRace == 1>>$activeSlave.race holes <</if>>at will. Whenever a hole begins to pall you just switch to another. $activeSlave.slaveName tries hard to ignore the fact that $he's getting fucked next to $his _partnerRel, and $slaves[$partner].slaveName pretends the cock getting shoved into _him2 isn't slick from _his2 _activeSlaveRel's fuckhole. - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<elseif ((_activeSlaveRel == "friend") || (_activeSlaveRel == "best friend")) && ($activeSlave.devotion > 20) && ($slaves[$partner].devotion > 20)>> $activeSlave.slaveName and $slaves[$partner].slaveName line up next to one another on the couch next to your desk<<if ($PC.dick == 0)>> while you don a strap-on,<</if>> and offer you their holes. They're just friends, but they're sex slaves and they see nothing wrong with enjoying sex with you, together. They keep up a constant stream of giggling, gasping, and smiling as each of them in turn feels a cock, warm and wet from their friend's body, transferred into them. Each of them does their best to help the other do well, even manually stimulating their friend when necessary<<if ($PC.boobs > 0)>> and spinning around to lavish attention on your nipples<</if>>. - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<elseif ["friend with benefits", "lover", "slave wife"].includes(_activeSlaveRel) && ($activeSlave.devotion > 20) && ($slaves[$partner].devotion > 20)>> $activeSlave.slaveName and $slaves[$partner].slaveName eagerly retire to the couch and arrange themselves face to face so they can make out and enjoy each other's bodies as you enjoy theirs. You decide not to set up an elaborate threesome, and just <<if ($PC.dick == 0)>>engage in a little tribadism with<<else>>fuck<</if>> whatever hole catches your eye next. They rarely break their intimate kissing, forming between the two of them a loving entity on the couch with all sorts of interesting parts to experience. They're sex slaves, and you're fucking them, but they're also lovers who are very comfortable in each others' arms, kissing, fondling each other, and <<if ($PC.dick == 0)>>enjoying your pussy loving<<else>>taking your dick<</if>>. - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <<else>> Since between them they aren't able to enthusiastically perform a threesome, you simply line $activeSlave.slaveName and $slaves[$partner].slaveName up next to one another on the couch next to your desk, and fuck <<if $seeRace == 1>>$activeSlave.race holes <</if>>at will. Whenever a hole begins to pall you just switch to another. $activeSlave.slaveName tries hard to ignore the fact that $he's getting fucked next to $his _partnerRel, and $slaves[$partner].slaveName pretends the <<if ($PC.dick == 0)>>strap-on<<else>>cock<</if>> getting shoved into _him2 isn't slick from _his2 _activeSlaveRel's fuckhole. - <<= BothVCheck()>> - <<= PartnerVCheck()>> + <<= VCheck.Both()>> + <<= VCheck.Partner()>> <</if>> <<if passage() !== "Slave Interact">> diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw index 2d42dbcab3a86379e6d7665794dadd41c30d4861..a19f6a86818a2479741580c8dfe9b1892601ec28 100644 --- a/src/npc/startingGirls/startingGirls.tw +++ b/src/npc/startingGirls/startingGirls.tw @@ -541,6 +541,8 @@ __You are customizing this slave:__ <<option>> [[Resync characteristics to age|Starting Girls][resyncSlaveToAge($activeSlave)]] | [[Resync only height to age|Starting Girls][$activeSlave.height = Height.random($activeSlave)]] + <<if $cheatMode == 1>> | [[Make dwarf|Starting Girls][$activeSlave.height = Height.random($activeSlave, {limitMult: [-4, -1], spread: 0.15})]] <</if>> + <<if $cheatMode == 1>> | [[Make giant|Starting Girls][$activeSlave.height = Height.random($activeSlave, {limitMult: [3, 10], spread: 0.15})]] <</if>> <<comment>> (It is recommended to resync if you change the age significantly) <</options>> diff --git a/src/pregmod/beastFucked.tw b/src/pregmod/beastFucked.tw index 4489ba2707e850874c2db5288a1fbb99a5f9965b..25f0873024daa9c389dbf90a1b7e8f59eaf3c990 100644 --- a/src/pregmod/beastFucked.tw +++ b/src/pregmod/beastFucked.tw @@ -163,7 +163,7 @@ before calling in the _animal.species. The _animal.species slowly saunters up to $activeSlave.slaveName <<if _activeQuirk != 1>>reluctantly<</if>> grabs the _animal.dickSize cock and gives it a tentative lick. <</if>> <<default>> - The _animal.species clambers up to mount $activeSlave.slaveName, eliciting a squeal from the girl as its claws dig into $his flesh. + The _animal.species clambers up to mount $activeSlave.slaveName, eliciting a squeal from the $girl as its claws dig into $his flesh. <</switch>> <<else>> The _animal.species <<if _sexAct != "oral">> takes a few curious sniffs, then <</if>>lines its cock up with $activeSlave.slaveName's <<switch _sexAct>><<case "vaginal" "anal">>_orifice.<<case "oral">>mouth, then, with a mighty shove, begins to thrust rapidly, in the way that only _animal.species can.<</switch>> diff --git a/src/pregmod/fSlaveSlaveDickConsummate.tw b/src/pregmod/fSlaveSlaveDickConsummate.tw index 97f81f25bbbae5561cdf51376797204bc4a9f968..0f48af406a3d5e6689a35899bd9216a4b12e79b1 100644 --- a/src/pregmod/fSlaveSlaveDickConsummate.tw +++ b/src/pregmod/fSlaveSlaveDickConsummate.tw @@ -521,10 +521,10 @@ You call $slaverapistx.slaveName into the room. <</if>> <<elseif canDoVaginal($activeSlave)>> penetrate $activeSlave.slaveName's free pussy with your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>>. With the double stimulus of penetrating a tight vagina and being penetrated while restrained, $he comes indecently hard. The two of them collapse into an exhausted, satisfied pile of slave flesh. - <<= VaginalVCheck(1)>> + <<= VCheck.Vaginal(1)>> <<elseif canDoAnal($activeSlave)>> penetrate $activeSlave.slaveName's free asshole with your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>>. With the double stimulus of penetrating a tight vagina and being penetrated while restrained, $he comes indecently hard. The two of them collapse into an exhausted, satisfied pile of slave flesh. - <<= AnalVCheck(1)>> + <<= VCheck.Anal(1)>> <<else>> pull _his2 face to your crotch. All this penetration has got you horny and there are no free holes to fuck, so a little oral will have to do. It doesn't take long for all three of you to collapse into an exhausted, satisfied pile of flesh. <<set $slaverapistx.counter.oral++, $oralTotal++>> diff --git a/src/pregmod/forceFeeding.tw b/src/pregmod/forceFeeding.tw index 9e4424ad422c7fbaa8d95dcfea011ec7767927f1..804efce856df2f16417cc662ed5f00e28e52c89a 100644 --- a/src/pregmod/forceFeeding.tw +++ b/src/pregmod/forceFeeding.tw @@ -594,9 +594,9 @@ and a little jiggle from $his gut. $He blows you one last kiss and eagerly looks forward to next time. <<if _sexType == "vaginal">> - <<= VaginalVCheck(2)>> + <<= VCheck.Vaginal(2)>> <<else>> - <<= AnalVCheck(2)>> + <<= VCheck.Anal(2)>> <</if>> <</if>> <<else>> diff --git a/src/pregmod/geneLab.tw b/src/pregmod/geneLab.tw index 632badb17e82f15d11e9d90234a32444cbbae02f..5084f806e5eae18f022336e36e858b7ab55e9ebd 100644 --- a/src/pregmod/geneLab.tw +++ b/src/pregmod/geneLab.tw @@ -6,7 +6,16 @@ The Gene Lab <hr> -//The gene lab is fully operational. It is capable of mapping a slave's genes, identifying genetic traits and abnormalities. It can be used to modify a slave's genome should you obtain the data necessary to adjust it.// + + +<<if $geneticMappingUpgrade == 1>> + //The gene lab is fully operational. It is capable of mapping a slave's genes, identifying genetic traits and abnormalities. It can be used to modify a slave's genome should you obtain the data necessary to adjust it.// + <br> + [[Upgrade the genome mapper|Gene Lab][cashX(forceNeg(Math.trunc(500000*$upgradeMultiplierArcology)), "capEx"), $geneticMappingUpgrade = 2]] + //Costs <<print cashFormat(Math.trunc(500000*$upgradeMultiplierArcology))>>// +<<elseif $geneticMappingUpgrade == 2>> + //The gene lab is fully operational. It is capable of fully mapping a slave's genes, identifying genetic traits and abnormalities. It can be used to correct (or flaw) a slave's genome, as well as modify it should you obtain the data necessary to adjust it.// +<</if>> <br><br> Genetic Modification @@ -26,6 +35,17 @@ Genetic Modification The fabricator is capable of producing treatments to accelerate cellular reproduction. <br> <</if>> + <<if $geneticMappingUpgrade >= 2>> + <<if $geneticFlawLibrary != 1>> + [[Purchase designs for inducing genetic anomalies|Gene Lab][cashX(forceNeg(100000*_PCSkillCheck), "capEx"), $geneticFlawLibrary = 1]] + //Costs <<print cashFormat(100000*_PCSkillCheck)>>// + <br> //Will allow genetic flaws and quirks to be injected into a slave's genome// + <br> + <<else>> + The fabricator is capable of producing treatments to induce various genetic anomalies. + <br> + <</if>> + <</if>> <</if>> <br><br> diff --git a/src/pregmod/killSlave.tw b/src/pregmod/killSlave.tw index c0fa9a3683762ea9512e4d6bcf5b2cf164e681af..05cd865d023a80e2750f97e381656cf206a26c3c 100644 --- a/src/pregmod/killSlave.tw +++ b/src/pregmod/killSlave.tw @@ -43,7 +43,7 @@ <<else>> blankly <</if>> - and waits for you to continue. + and waits for you to continue. <<else>> It's hard to tell the expression on the Fuckdoll's face, but your guess is it's <<if $activeSlave.fetish != "mindbroken">> @@ -64,7 +64,7 @@ You tell $him that you've gotten tired of having $him around and that you have decided it is time you got rid of $him. <<if $activeSlave.fuckdoll <= 0>> - <<if $activeSlave.fetish != "mindbroken">> $His expression changes to one of + <<if $activeSlave.fetish != "mindbroken">> $His expression changes to one of <<if $activeSlave.devotion > 50>> pure sorrow <<elseif ($activeSlave.devotion) > 20 && ($activeSlave.devotion <= 50)>> @@ -108,7 +108,7 @@ <<if $activeSlave.fuckdoll <= 0 && $activeSlave.fetish != "mindbroken">> - You simply smile at $him and tell $him not to worry + You simply smile at $him and tell $him not to worry <<else>> You say nothing <</if>> @@ -120,7 +120,7 @@ threading on a suppressor. <</if>> - $activeSlave.slaveName + $activeSlave.slaveName <<if $activeSlave.fuckdoll <= 0 && $activeSlave.fetish != "mindbroken">> gives an audible sigh of relief and begins to thank you profusely, though $his thanks are cut short as the sound of <<else>> @@ -264,7 +264,7 @@ </span> <<else>> <<if $activeSlave.fetish != "mindbroken" || $activeSlave.fuckdoll <= 0>> - You abruptly cut $his begging short once you + You abruptly cut $his begging short once you <<else>> You change your mind as you suddenly <</if>> diff --git a/src/pregmod/manageCorporation.tw b/src/pregmod/manageCorporation.tw index a0471bb6a4c5a91de386f7c97bb6386187869bc0..4af979d3a86b68008bb5c5b09597b1fd37c714c8 100644 --- a/src/pregmod/manageCorporation.tw +++ b/src/pregmod/manageCorporation.tw @@ -1499,7 +1499,7 @@ __Slave specialization__ <br>Slaves are made to be lactating [[Naturally|Manage Corporation][$corpSpecMilk = 1, $corpSpecToken -= 1, $corpSpecTimer = 2]] | [[Through Implant|Manage Corporation][$corpSpecMilk = 2, $corpSpecToken -= 1, $corpSpecTimer = 2]] <</if>> <<if ndef $corpSpecSexEd && $corpDivWhore > 0>> /*This used to be $trainingUpgradeSexEd, it is the escort division specialization*/ - <br>Slaves are sexually [[Clueless|Manage Corporation][$corpSpecSexEd = 0, $corpSpecToken -= 1, $corpSpecTimer = 2]] | [[Competent|Manage Corporation][$corpSpecSexEd = 1, $corpSpecToken -= 1, $corpSpecTimer = 2]] -- //Further specializations possible// + <br>Slaves are sexually [[Clueless|Manage Corporation][$corpSpecSexEd = 0, $corpSpecToken -= 0, $corpSpecTimer = 2]] | [[Competent|Manage Corporation][$corpSpecSexEd = 1, $corpSpecToken -= 1, $corpSpecTimer = 2]] -- //Further specializations possible// <</if>> <</if>> <<else>> @@ -2145,6 +2145,11 @@ __Slave specialization__ <<if $corpSpecTimer == 0>> [[Basic Training|Manage Corporation][$corpSpecSexEd = 1, $corpSpecToken +=1, $corpSpecTimer = 2]] | <<link "No Focus">><<unset $corpSpecSexEd>><<set $corpSpecToken += 1, $corpSpecTimer = 2>><<goto "Manage Corporation">><</link>> <</if>> + <<elseif $corpSpecSexEd == 0>> + <br>The corporation teaches no sexual techniques to its slaves. + <<if $corpSpecTimer == 0>> + [[Basic Training|Manage Corporation][$corpSpecSexEd = 1, $corpSpecToken -=1, $corpSpecTimer = 2]] | <<link "No Focus">><<unset $corpSpecSexEd>><<set $corpSpecToken += 1, $corpSpecTimer = 2>><<goto "Manage Corporation">><</link>> + <</if>> <</if>> <</if>> /*End of activated specializations*/ diff --git a/src/pregmod/newChildIntro.tw b/src/pregmod/newChildIntro.tw index 55b4f22cf87edabd3e3a688aeb47f35266123c3f..1e73311d862ad6c6da0c46fbbcfe00cd860ab58e 100644 --- a/src/pregmod/newChildIntro.tw +++ b/src/pregmod/newChildIntro.tw @@ -649,10 +649,10 @@ You slowly strip down, gauging $his reactions to your show, until you are fully You drag $him to the body modification studio and strap $him down with $his $brandTarget clear and defenseless. $He doesn't understand what's on, becoming even more confused as disinfectant is applied to $his $brandTarget. $He can't see the approaching brand, <<if !canSee($activeSlave)>>of course, <</if>>but eventually $he feels the radiated heat on $his skin and manages to get one inarticulate, wordless noise of terror out before the dreadful sizzling noise and the sweet smell of burning flesh. If $he trusted you at all before, @@.mediumorchid;$he doesn't now,@@ and $he's got the @@.gold;agonizing@@ @@.red;injury@@ to remind $him should $he start to forget. <<if ($arcologies[0].FSSubjugationistRace == $activeSlave.race) && ($arcologies[0].FSSubjugationist > 0)>> Society @@.green;approves@@ of your purchase and branding of an inferior $activeSlave.race person; this advances the idea that $activeSlave.race people ought to be enslaved. - <<= FSChange("Subjugationist", 2)>> + <<= FutureSocieties.Change("Subjugationist", 2)>> <<elseif ($arcologies[0].FSSupremacistRace == $activeSlave.race) && ($arcologies[0].FSSupremacist > 0)>> Society @@.red;disapproves@@ of your purchase and branding of <<if $activeSlave.race == "amerindian" || $activeSlave.race == "asian" || $activeSlave.race == "indo-aryan">>an<<else>>a<</if>> $activeSlave.race person; this reduces support for the idea that $activeSlave.race people are superior. - <<= FSChange("Supremacist", -2)>> + <<= FutureSocieties.Change("Supremacist", -2)>> <</if>> <</replace>> <</link>> @@ -666,7 +666,7 @@ You slowly strip down, gauging $his reactions to your show, until you are fully <<else>> You perform a careful medical examination to verify fertility, and then forcefully take the $girl's virginity. Whenever you feel able, you drain your balls into $his cunt, only allowing $him to wander off when scans verify a fertilized ovum. $He didn't properly understand the scans, so $he just thought it was sex; $he won't realize what happened for some months at least, and in the mean time, will think $he is just getting fat. Though once $his child starts kicking, $he might make the connection between sex and pregnancy. <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<if $arcologies[0].FSRestart != "unset" && $activeSlave.breedingMark == 0 && $eugenicsFullControl != 1>> The Societal Elite @@.red;disapprove@@ of this breach of eugenics. <<set $failedElite += 5>> @@ -675,7 +675,7 @@ You slowly strip down, gauging $his reactions to your show, until you are fully <<set $failedElite -= 5>> <<elseif $arcologies[0].FSGenderFundamentalist != "unset">> Society @@.green;approves@@ of your promptly putting a new slave in $him; this advances the idea that all slaves should bear their masters' babies. - <<= FSChange("GenderFundamentalist", 2)>> + <<= FutureSocieties.Change("GenderFundamentalist", 2)>> <</if>> <<set $activeSlave.preg = 1>> <<set $activeSlave.pregType = setPregType($activeSlave)>> @@ -702,7 +702,7 @@ You slowly strip down, gauging $his reactions to your show, until you are fully <<set $activeSlave.fetish = "humiliation">> <<set $activeSlave.fetishStrength = 20>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>> @@ -714,7 +714,7 @@ You slowly strip down, gauging $his reactions to your show, until you are fully <<set $activeSlave.fetish = "pregnancy">> <<set $activeSlave.fetishStrength = 20>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>> @@ -846,11 +846,11 @@ You slowly strip down, gauging $his reactions to your show, until you are fully Righting yourself, you grab the gloating slave, drag $him to the autosurgery and strap $him face-down with $his legs spread. $He doesn't understand what's happening, but giggles at the sensations running through $his numb body. $He's so drugged and drowsy with @@.red;surgical recovery@@ that it takes a while for $him to figure out what's happened. When $he does, $his poor mind scarcely processes the @@.gold;horror@@ of what's happened. $He spends the rest of the week dimly trying to find where $his balls went. <<if $arcologies[0].FSGenderRadicalist != "unset">> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all societal inferiors can be made female. - <<= FSChange("GenderRadicalist", 2)>> + <<= FutureSocieties.Change("GenderRadicalist", 2)>> <</if>> <<if $arcologies[0].FSRestart != "unset" && $activeSlave.pubertyXY == 1>> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all only the elite should breed. - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <<set $activeSlave.devotion -= 25>> <<set $activeSlave.trust -= 50>> @@ -912,11 +912,11 @@ You beckon the curious $girl to your hefty breasts, having noticed how hungrily Righting yourself, you grab the cowering slave, drag $him to the autosurgery and strap $him face-down with $his legs spread. $He doesn't understand what's happening, but giggles at the sensations running through $his numb body. $He's so drugged and drowsy with @@.red;surgical recovery@@ that it takes a while for $him to figure out what's happened. When $he does, $his poor mind scarcely processes the @@.gold;horror@@ of what's happened. $He spends the rest of the week dimly trying to find where $his balls went. <<if $arcologies[0].FSGenderRadicalist != "unset">> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all societal inferiors can be made female. - <<= FSChange("GenderRadicalist", 2)>> + <<= FutureSocieties.Change("GenderRadicalist", 2)>> <</if>> <<if $arcologies[0].FSRestart != "unset">> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all only the elite should breed. - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <<set $activeSlave.devotion -= 25>> <<set $activeSlave.trust -= 50>> @@ -986,7 +986,7 @@ You beckon the curious $girl to your hefty breasts, having noticed how hungrily Since $he came out of the tank rather unhealthy, you give $him a comprehensive medical exam with the help of the remote surgery. You apply care to @@.green;address@@ some of the most outstanding concerns. After the checkup, $he happily @@.mediumaquamarine;expresses $his thanks@@ for making $him feel better. <<if $arcologies[0].FSPaternalist != "unset">> Society @@.green;approves@@ of your promptly seeing to your stock's health; this advances the idea that all slaveowners should look after their slaves. - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <</if>> <</replace>> <</link>> @@ -1003,11 +1003,11 @@ You beckon the curious $girl to your hefty breasts, having noticed how hungrily You escort $him to the remote surgery and strap $him face-down with $his legs spread. $He doesn't understand what's happening, but giggles at the sensations running through $his numb body. $He's so drugged and drowsy with @@.red;surgical recovery@@ that it takes a while for $him to figure out what's happened. When $he does, $his poor mind scarcely processes the @@.gold;horror@@ of what's happened. $He spends the rest of the week dimly trying to find where $his balls went. <<if $arcologies[0].FSGenderRadicalist != "unset">> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all societal inferiors can be made female. - <<= FSChange("GenderRadicalist", 2)>> + <<= FutureSocieties.Change("GenderRadicalist", 2)>> <</if>> <<if $arcologies[0].FSRestart != "unset" && $activeSlave.pubertyXY == 1>> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all only the elite should breed. - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <</replace>> <</link>> diff --git a/src/pregmod/pRaped.tw b/src/pregmod/pRaped.tw index 9df384125e4469c5cdc11883aa4f7bb58418e551..4a9412c02fa1938575d0e28149e65faf14159388 100644 --- a/src/pregmod/pRaped.tw +++ b/src/pregmod/pRaped.tw @@ -191,7 +191,7 @@ While returning from a meeting with a prospective investor, an unfortunate wrong $He slips $his hand down your pants; "Now there's the money maker!" <<case "capitalist">> <<if $PC.boobs > 0>> - "Ever wonder if they were listening to you or just oggling the man with the breasts?" $he smirks as $he gropes your breasts. + "Ever wonder if they were listening to you or just ogling the man with the breasts?" $he smirks as $he gropes your breasts. <</if>> $He slips $his hand down your pants; "Now that explains how you were so successful!" <<case "engineer">> @@ -223,12 +223,12 @@ While returning from a meeting with a prospective investor, an unfortunate wrong <<if $PC.boobs > 0>> "Nice and supple. What are the odds that I can find these babies on the internet?" $he smirks as $he gropes your breasts. <</if>> - $He slips $his hand down your pants; "You wouldn't mind if I download a few files now yould you? Well, not that it matters." + $He slips $his hand down your pants; "You wouldn't mind if I download a few files now would you? Well, not that it matters." <</switch>> Satisfied, $he pulls your cock out of its increasingly cramped confines. "Look at him grow, he knows what comes next..." $He teases as $he pushes you to the ground and climbs on top of you. <br><br> $He lines $himself up with the tip of your dick before taking its entire length into $himself. $He lets out a lust filled moan as $he begins to bounce on your traitorous member. You can do nothing to stop $him from riding you to climax, so you just enjoy the sight of $his breasts bouncing to $his pace. As you feel your orgasm approaching, you try to time it so you can slip out of $him just before you blow your load, but you have no such luck. - "You really think I'd let you spoil my plans?" $He asks as $he grinds against you, making sure you cum deep in $his pussy. $He leans back and massages $his taut stomach, savoring the sensation of your seed seeping into $him. "That's it, make me a mommy." $He leans in close and you pop free of $his snatch. "Be a good boy and make this arcology a nice place for your bastard. I want to retire in luxury." $He blows you a kiss as $he stuffs a plug up $his vagina, redresses and heads on $his way. By the time you loosen your bindings, $he is long gone. + "You really think I'd let you spoil my plans?" $He asks as $he grinds against you, making sure you cum deep in $his pussy. $He leans back and massages $his <<if $PC.ballsImplant > 2>>taut <</if>>stomach, savoring the sensation of your seed seeping into $him. "That's it, make me a mommy." $He leans in close and you pop free of $his snatch. "Be a good boy and make this arcology a nice place for your bastard. I want to retire in luxury." $He blows you a kiss as $he stuffs a plug up $his vagina, redresses and heads on $his way. By the time you loosen your bindings, $he is long gone. <br><br> It would be prudent to up security in your arcology, that or take a guard along when you leave the penthouse. You can't allow such an indignity to happen again, nor do you need the stress of a bastard trying to seize control of your estate when you want to retire, but you wouldn't mind having your way with $him if you get the chance. <</if>> @@ -320,18 +320,20 @@ While returning from a meeting with a prospective investor, an unfortunate wrong You want $him to suffer for what $he tried to pull on you. You make sure $he is fully awake as $he is strapped into the autosurgery. You take great pleasure in watching $him struggle as $his limbs are taken, one by one. Of course, @@.red;$his health is affected@@ and the horrible experience has left $him @@.red;acting oddly.@@ After $he has stabilized, it's off to the penthouse for basic slave induction. You'd like to see $him try and touch you again without arms and legs. <</replace>> <</link>> - <br><<link "Enslave the criminal and geld $him">> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.balls = 0>> - <<set $activeSlave.devotion -= 25>> - <<set $activeSlave.trust -= 25>> - <<run newSlave($activeSlave)>> - <<run cashX(forceNeg($contractCost), "slaveTransfer", $activeSlave)>> - <<replace "#result">> - You want $him to suffer for what $he tried to pull on you. You make sure $he is fully awake as $he is strapped into the autosurgery, taking the time to roughly fondle $his balls. You take great pleasure in watching $him struggle as $his testicles are removed. Once $he can stand again, it's off to the penthouse for basic slave induction. - <<include "New Slave Intro">> - <</replace>> - <</link>> + <<if $activeSlave.balls > 0>> + <br><<link "Enslave the criminal and geld $him">> + <<set $activeSlave.health -= 20>> + <<set $activeSlave.balls = 0>> + <<set $activeSlave.devotion -= 25>> + <<set $activeSlave.trust -= 25>> + <<run newSlave($activeSlave)>> + <<run cashX(forceNeg($contractCost), "slaveTransfer", $activeSlave)>> + <<replace "#result">> + You want $him to suffer for what $he tried to pull on you. You make sure $he is fully awake as $he is strapped into the autosurgery, taking the time to roughly fondle $his balls. You take great pleasure in watching $him struggle as $his testicles are removed. Once $he can stand again, it's off to the penthouse for basic slave induction. + <<include "New Slave Intro">> + <</replace>> + <</link>> + <</if>> <</if>> <<else>> //You lack the necessary funds to enslave $him.// diff --git a/src/pregmod/reMaleArcologyOwner.tw b/src/pregmod/reMaleArcologyOwner.tw index c1522f5c6a2bfa9a58f22710ebab5fb1009688ef..54a6ecb9b77a253d436b3a9fb51a4b3fb031a608 100644 --- a/src/pregmod/reMaleArcologyOwner.tw +++ b/src/pregmod/reMaleArcologyOwner.tw @@ -26,7 +26,7 @@ He strikes a fine balance in conversation with you, firm enough to not overpower <<set $trinkets.push($desc)>> <</replace>> <</link>> -<<if ($PC.preg >= 28 && $PC.pregMood = 2) || $PC.boobsBonus >= 2 || $PC.butt >= 2>> +<<if ($PC.preg >= 28 && $PC.pregMood == 2) || $PC.boobsBonus >= 2 || $PC.butt >= 2>> <br><<link "Convince him to make the first move">> <<replace "#result">> <<set _randomForeignFS = random(1,100)>> diff --git a/src/pregmod/reMaleCitizenHookup.tw b/src/pregmod/reMaleCitizenHookup.tw index b7855fa4b9976e6720015846fcf56fd7c23fd47e..5ca29cd68efb94dd46a46d12f6deeeab3c2d0c84 100644 --- a/src/pregmod/reMaleCitizenHookup.tw +++ b/src/pregmod/reMaleCitizenHookup.tw @@ -273,7 +273,7 @@ He's clearly attracted to you; even the most consummate actor would have difficu You manage to take nearly three fourths of his load before it begins backflowing out of you. You swear he cums harder as he places his hands to your swelling middle, enjoying the growth until you grow taut and your belly button pops out. By the time you can't take any more, you look like you are ready to burst with triplets. "Damn girl, just how stretchy are you? I'm impressed." He helps you down, making sure to provide extra support for your massive, straining belly. He sensually massages it, coaxing as much cum from your hungry womb that he can. But in the end, he can only get you back to the size of a woman in her final trimester. You likely won't be returning to the party. <<set $PC.cumTap++>> <<else>> - You manage to take his entire load without spilling a drop. You swear he cums harder as he places his hands to your swelling middle, enjoying the growth until you grow taut and your belly button pops out. By the time he's done, you look ready to birth octuplets. "I can't believe you took it all, incredible. Are you going to be ok?" He helps you down, making sure to provide extra support for your immense, straining belly. He sensually massages it, coaxing as much cum from your hungry womb that he can. But in the end, he can only get you back to the size of a woman in her final trimester. You likely won't be returning to the party. + You manage to take his entire load without spilling a drop. You swear he cums harder as he places his hands to your swelling middle, enjoying the growth until you grow taut and your belly button pops out. By the time he's done, you look ready to birth octuplets. "I can't believe you took it all; incredible. Are you going to be OK?" He helps you down, making sure to provide extra support for your immense, straining belly. He sensually massages it, coaxing as much cum from your hungry womb that he can. But in the end, he can only get you back to the size of a woman in her final trimester. You likely won't be returning to the party. <<set $PC.cumTap++>> <</if>> <</if>> diff --git a/src/pregmod/rePregInventor.tw b/src/pregmod/rePregInventor.tw index 21c9224fab9e150de1a9c8c9ba936a9bdd20e2ac..dc80deae15aee593e83e79a824dba8af2a661f40 100644 --- a/src/pregmod/rePregInventor.tw +++ b/src/pregmod/rePregInventor.tw @@ -80,7 +80,7 @@ <<if $activeSlave.trust < -95>> You then rape $him, hard, to get your point across, ignoring $his moans of pain and the loud complaints from $his overfilled womb as it barely holds together under your assault. The bitch is delusional, idolizing $himself and $his position like this. $activeSlave.slaveName has been holding onto sanity by a thread with this idea about loving what $he is, but your rejection breaks something fundamental inside of $him. $He's a baby machine. $His body belongs to you. $His brain is just a vestigial accessory to $his womb and pussy. @@.red;$activeSlave.slaveName is broken.@@ $He will never question $his place again. <<set $activeSlave.fetish = "mindbroken", $activeSlave.sexualQuirk = "none", $activeSlave.sexualFlaw = "none", $activeSlave.behavioralQuirk = "none", $activeSlave.behavioralFlaw = "none">> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif $activeSlave.trust < -20>> You then fuck $him, hard, to get your point across, ignoring $his moans of pain and the loud complaints from $his overfilled womb as it barely holds together under your assault. When you finally get bored and <<if $PC.dick == 1>> @@ -94,7 +94,7 @@ <<else>> surprisingly resilient, tight little pussy, <</if>> - <<run VaginalVCheck()>> + <<run VCheck.Vaginal()>> <<else>> clench your legs around $his slutty head as $he drives your pussy over the edge with $his tongue, <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -127,7 +127,7 @@ You can see tears brimming in $his <<= App.Desc.eyeColor($activeSlave)>> eyes. <</if>> You kiss $him on the head, make sweet love to $him to improve $his mood, then have $him escorted out of your office. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> You are certain you made the right choice. If possible, $activeSlave.slaveName is now more @@.hotpink;devoted.@@ <<set $activeSlave.devotion += 5>> <</if>> @@ -264,7 +264,7 @@ <</if>> <br><br> Despite $his complaints, $he doesn't seem to mind once you start really fucking $him senseless. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> Once you've finished melting your swollen "little" sex slave into a puddle of sexually satisfied goo, <<if $PC.dick == 1>> shooting your load into $his wanting pussy, @@ -308,7 +308,7 @@ as you bring $him to climax. <<set $activeSlave.counter.vaginal++, $vaginalTotal++>> <br><br> - With gentle coaching from your slave, you rotate the two of you in the air so that $he can ride you reverse cowgirl style. <<= VaginalVCheck(2)>> You then switch $him around, allowing $his belly to eclipse your vision entirely as $he rides you in the traditional cowgirl position. The contents of $his womb have exploded its weight to the point that this position would have previously been hazardous to both your health and $hers, if not completely impossible, and the illusion of having sex while perpetually on the knife's edge of being flattened by literal tons of baby packed slave flesh sends you over the edge. You + With gentle coaching from your slave, you rotate the two of you in the air so that $he can ride you reverse cowgirl style. <<= VCheck.Vaginal(2)>> You then switch $him around, allowing $his belly to eclipse your vision entirely as $he rides you in the traditional cowgirl position. The contents of $his womb have exploded its weight to the point that this position would have previously been hazardous to both your health and $hers, if not completely impossible, and the illusion of having sex while perpetually on the knife's edge of being flattened by literal tons of baby packed slave flesh sends you over the edge. You <<if $PC.dick == 1>> ejaculate into $him, your cum dripping out of $his vagina, splattering on the ground below. <<else>> @@ -721,7 +721,7 @@ small, gel-slicked ass, <</if>> and throw your weight backward to bring you both to the ground. $He's far too enormous to make this achievement doable with anything less than superhuman strength, but the mobility assistance devices engage as you move, and the two of you slowly collapse into the warm jelly. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> After you've fucked $him near senseless, enjoying $his struggles to keep abreast of the smothering gel as you abuse $his pussy, you both retire to the side of the pool and $he presses into you, nuzzling your neck and <<if canTalk($activeSlave)>> asking you what you think of $his invention. diff --git a/src/pregmod/seFCNNstation.tw b/src/pregmod/seFCNNstation.tw index c4fc495a19de8a2347a4f828bbbe16cad0d442fe..5194e518edab270ef42cad3ddc15e621c5218aaf 100644 --- a/src/pregmod/seFCNNstation.tw +++ b/src/pregmod/seFCNNstation.tw @@ -20,7 +20,7 @@ and the price certainly seems outrageous, accepting the offer would likely be a <<link "Accept">> <<replace "#result">> You accept the FCNN president's offer. He looks like he's about to burst into tears after hearing this, especially since you offer no caveats as well, but struggles to maintain a professional composure regardless. Before the week is over, FCNN has established their new headquarters in $arcologies[0].name. - <<set cashX(forceNeg(100000), "capEx"), $arcologies[0].prosperity += 2, $FCNNstation = 1>> + <<set cashX(forceNeg(100000), "capEx"), $arcologies[0].prosperity += 2, $FCNNstation = 1>> <</replace>> <</link>> <br><<link "Decline">> diff --git a/src/pregmod/theBlackMarket.tw b/src/pregmod/theBlackMarket.tw index 1cf02234a608eba86ce1a6e52f79d2ca5e04ea2d..6d8e7ce94293438c8528cd3e0ad91b9ca65488ae 100644 --- a/src/pregmod/theBlackMarket.tw +++ b/src/pregmod/theBlackMarket.tw @@ -80,7 +80,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady You have no interest in this pregnancy based research. <<else>> You already possess designs to facilitate anal pregnancy. - <<set _dump = $merchantFSWares.delete("GenderRadicalistResearch")>> + <<run $merchantFSWares.delete("GenderRadicalistResearch")>> <</if>> <</if>> <<if $thisWeeksFSWares[_bm] == "TransformationFetishistResearch">> @@ -96,7 +96,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady <</if>> <<else>> You already possess designs for oversized implants. - <<set _dump = $merchantFSWares.delete("TransformationFetishistResearch")>> + <<run $merchantFSWares.delete("TransformationFetishistResearch")>> <</if>> <</if>> <<if $thisWeeksFSWares[_bm] == "AssetExpansionistResearch">> @@ -112,7 +112,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady <</if>> <<else>> You already possess formulas for extremely powerful growth drugs. - <<set _dump = $merchantFSWares.delete("AssetExpansionistResearch")>> + <<run $merchantFSWares.delete("AssetExpansionistResearch")>> <</if>> <</if>> <<if $thisWeeksFSWares[_bm] == "SlimnessEnthusiastResearch">> @@ -128,7 +128,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady <</if>> <<else>> You already possess formulas for growth reversing drugs. - <<set _dump = $merchantFSWares.delete("SlimnessEnthusiastResearch")>> + <<run $merchantFSWares.delete("SlimnessEnthusiastResearch")>> <</if>> <</if>> <<if $thisWeeksFSWares[_bm] == "YouthPreferentialistResearch">> @@ -144,7 +144,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady <</if>> <<else>> You already possess formulas for extremely effective anti-aging beauty cream. - <<set _dump = $merchantFSWares.delete("YouthPreferentialistResearch")>> + <<run $merchantFSWares.delete("YouthPreferentialistResearch")>> <</if>> <</if>> <<if $thisWeeksFSWares[_bm] == "HedonisticDecadenceResearch">> @@ -160,7 +160,7 @@ Of all the wonders present, the thing that catches your eye the most is a shady <</if>> <<else>> You already possess recipes for highly addictive solid slave food. - <<set _dump = $merchantFSWares.delete("HedonisticDecadenceResearch")>> + <<run $merchantFSWares.delete("HedonisticDecadenceResearch")>> <</if>> <</if>> <</for>> @@ -183,7 +183,7 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if Since the agreed upon minimum age in your Free City is greater than eight, it would draw way too much attention for you to make use of the research recipe for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend). <br> He notices your interest and lets you read the information [[Childhood Fertility Induced NCS|Encyclopedia][$encyclopedia = "Childhood Fertility Induced NCS"]]. - <<set _dump = $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> + <<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> <<else>> <<if $arcologies[0].FSYouthPreferentialist > 0>> <<set _match = "Knowing your arcology, I think you could be happy with the results!">> @@ -211,13 +211,13 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if He notices your interest and lets you read the information [[Childhood Fertility Induced NCS|Encyclopedia][$encyclopedia = "Childhood Fertility Induced NCS"]]. <<else>> You already possess the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br> - <<set _dump = $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> + <<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> <</if>> <</if>> <</if>> <<else>> You have no interest in such a distasteful research. - <<set _dump = $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> + <<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>> <</if>> <</if>> @@ -241,11 +241,11 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <</if>> <<else>> You have no interest in research to support pregnancy. - <<set _dump = $merchantIllegalWares.delete("UterineRestraintMesh")>> + <<run $merchantIllegalWares.delete("UterineRestraintMesh")>> <</if>> <<else>> You already possess blueprints for a supportive uterine mesh. - <<set _dump = $merchantIllegalWares.delete("UterineRestraintMesh")>> + <<run $merchantIllegalWares.delete("UterineRestraintMesh")>> <</if>> <</if>> @@ -269,11 +269,11 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <</if>> <<else>> You have no interest in research that involves pregnancy. - <<set _dump = $merchantIllegalWares.delete("PGHack")>> + <<run $merchantIllegalWares.delete("PGHack")>> <</if>> <<else>> You already possess the broodmother implant hack. - <<set _dump = $merchantIllegalWares.delete("PGHack")>> + <<run $merchantIllegalWares.delete("PGHack")>> <</if>> <</if>> @@ -293,7 +293,7 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if "These injections will loosen up any skin, muscle, organ or whatever living flesh you inject them into. I'm not entirely sure how they work, something about increased cell growth or something. Probably not the safest thing to use, what with it pretty much being cancer in a vial. From what I've gathered, they were originally being developed to use with fillable breast implants. Some rich investor got his rocks off from BE and decided to make his dream a reality. Worked great too, save for the fact that the breasts didn't shrink down when the implant was emptied. Yep, she was left with a big ol' pair of floppy tits after being stretched so much. My take is, if you want to get big, fast, this is the drug for you, but only if you don't care about ever going back." <<else>> You already possess formulas for elasticity increasing injections. - <<set _dump = $merchantIllegalWares.delete("RapidCellGrowthFormula")>> + <<run $merchantIllegalWares.delete("RapidCellGrowthFormula")>> <</if>> <</if>> <</if>> @@ -314,11 +314,11 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <</if>> <<else>> You have no interest in research to support pregnancy. - <<set _dump = $merchantIllegalWares.delete("sympatheticOvaries")>> + <<run $merchantIllegalWares.delete("sympatheticOvaries")>> <</if>> <<else>> You already possess schematics for implants that synchronize ova release. - <<set _dump = $merchantIllegalWares.delete("sympatheticOvaries")>> + <<run $merchantIllegalWares.delete("sympatheticOvaries")>> <</if>> <</if>> @@ -338,11 +338,11 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <</if>> <<else>> You have no interest in research to support pregnancy. - <<set _dump = $merchantIllegalWares.delete("asexualReproduction")>> + <<run $merchantIllegalWares.delete("asexualReproduction")>> <</if>> <<else>> You already possess methods of asexual reproduction. - <<set _dump = $merchantIllegalWares.delete("asexualReproduction")>> + <<run $merchantIllegalWares.delete("asexualReproduction")>> <</if>> <</if>> @@ -394,7 +394,7 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <</if>> <<else>> /* if all schematics have already been purchased */ You already possess all of the schematics for implanting animal organs. - <<set _dump = $merchantIllegalWares.delete("AnimalOrgans")>> + <<run $merchantIllegalWares.delete("AnimalOrgans")>> <</if>> <</if>> <</if>> diff --git a/src/pregmod/widgets/assignmentFilterWidget.tw b/src/pregmod/widgets/assignmentFilterWidget.tw deleted file mode 100644 index 2c47355fb694d3e9d1cf7763cc568473082a3fa0..0000000000000000000000000000000000000000 --- a/src/pregmod/widgets/assignmentFilterWidget.tw +++ /dev/null @@ -1,121 +0,0 @@ -:: assignment-filter widget [widget nobr] - -/* - * filters the list according to the selected Facility - * function(y) is a loop through $slaves to set assignmentVisible to 1 and returns a new array - * function(x) filters the slaves with the given condition ( here its the assignment ) - * so basically function(x) finds the slaves that are selected and function(y) sets them to be visible -*/ - -/* - * These widgets set the visibilities for the different Facilities -*/ - -<<widget "resetAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 1})>><<set $slaves.filter(function(x){return x.assignment.includes("in the") || x.assignment.includes("be the") || x.assignment.includes("live with") || (x.assignment.includes("be your") && x.assignment != "be your Head Girl") || x.assignment.includes("work as a ")}).map(function(y){y.assignmentVisible = 0})>> -<</widget>> - -<<widget "showallAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 1})>><<set $slaves.filter(function(x){return x.assignment.includes("agent")}).map(function(y){y.assignmentVisible = 0})>> -<</widget>> - -<<widget "arcadeAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "be confined in the arcade"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "brothelAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "work in the brothel" || x.assignment == "be the Madam"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "cellblockAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "be confined in the cellblock" || x.assignment == "be the Wardeness"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "clinicAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "get treatment in the clinic" || x.assignment == "be the Nurse"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "clubAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "serve in the club" || x.assignment == "be the DJ"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "dairyAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "work in the dairy" || x.assignment == "be the Milkmaid"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "farmyardAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "work as a farmhand" || x.assignment == "be the Farmer"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "headgirlSuiteAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "live with your Head Girl"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "penthouseAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "rest" || x.assignment == "be a subordinate slave" || x.assignment == "whore" || x.assignment == "serve the public" || x.assignment == "work a glory hole" || x.assignment == "get milked" || x.assignment == "be a servant" || x.assignment == "please you"|| x.assignment == "stay confined" || x.assignment == "take classes" || x.assignment == "choose her own job" || x.assignment == "live with your Head Girl"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "schoolAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "learn in the schoolroom" || x.assignment == "be the Schoolteacher"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "spaAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "rest in the spa" || x.assignment == "be the Attendant"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "nurseryAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "work as a nanny" || x.assignment == "be the Matron"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "suiteAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "serve in the master suite" || x.assignment == "be your Concubine"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -<<widget "quartersAssignmentFilter">> - <<set $slaves.map(function(y){y.assignmentVisible = 0})>><<set $slaves.filter(function(x){return x.assignment == "work as a servant" || x.assignment == "be the Stewardess"}).map(function(y){y.assignmentVisible = 1})>> -<</widget>> - -/* - * Checks from which Facility its get called and removes it from the list - * this is the Main Filter widget used on all Passages atm - * sets SlaveSummaryFiler = "assignable" so slave summary provides send-to-facility links -*/ -<<widget "assignmentFilter">> - <<link All>><<showallAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>> - <<if passage() != "Arcade">><<print " | ">><<link Arcade>><<arcadeAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Brothel">><<print " | ">><<link Brothel>><<brothelAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Cellblock">><<print " | ">><<link Cellblock>><<cellblockAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Clinic">><<print " | ">><<link Clinic>><<clinicAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Club">><<print " | ">><<link Club>><<clubAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Dairy">><<print " | ">><<link Dairy>><<dairyAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Farmyard">><<print " | ">><<link Farmyard>><<farmyardAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<print " | ">><<link Penthouse>><<penthouseAssignmentFilter>><<replace #ComingGoing>><<include 'Slave Summary'>><<set $SlaveSummaryFiler = "assignable">><<resetAssignmentFilter>><</replace>><</link>> - <<if passage() != "Schoolroom">><<print " | ">><<link Schoolroom>><<schoolAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Spa">><<print " | ">><<link Spa>><<spaAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Nursery">><<print " | ">><<link Nursery>><<nurseryAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Master Suite">><<print " | ">><<link Suite>><<suiteAssignmentFilter>><<replace #ComingGoing>><<set $SlaveSummaryFiler = "assignable">><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<if passage() != "Servants' Quarters">><<print " | ">><<link Quarters>><<quartersAssignmentFilter>><<set $SlaveSummaryFiler = "assignable">><<replace #ComingGoing>><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><</link>><</if>> - <<print " | ">><<link @@.lime;Experienced@@>><<showallAssignmentFilter>><<set $SlaveSummaryFiler = "experienced">><<replace #ComingGoing>><<include 'Slave Summary'>><<resetAssignmentFilter>><</replace>><<set $SlaveSummaryFiler = "">><</link>> -<</widget>> - -/* - * undefinedAssignmentFilter serves no purpose atm - * might use it for RA Slave filter and Matchmaking -*/ -<<widget "undefinedAssignmentFilter">> - <<link All>><<showallAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Arcade>><<arcadeAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Brothel>><<brothelAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Cellblock>><<cellblockAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Clinic>><<clinicAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Club>><<clubAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Dairy>><<dairyAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Farmyard>><<farmyardAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Penthouse>><<penthouseAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Schoolroom>><<schoolAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Spa>><<spaAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Nursery>><<nurseryAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Suite>><<suiteAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>><<print " | ">> - <<link Quarters>><<quartersAssignmentFilter>><<replace $args.full>><<include 'Slave Summary'>><</replace>><</link>> - <<resetAssignmentFilter>> -<</widget>> \ No newline at end of file diff --git a/src/pregmod/widgets/bodySwapReaction.tw b/src/pregmod/widgets/bodySwapReaction.tw index 3fcd48d56d2b9a88b2b26c0777b1d71c9e84a453..28182fb3612515329d0e8b99d4432ba41d37d151 100644 --- a/src/pregmod/widgets/bodySwapReaction.tw +++ b/src/pregmod/widgets/bodySwapReaction.tw @@ -3241,7 +3241,7 @@ Now you only have to wait for $him to wake up. <<if $args[1].amp == 1>> /*(was already an amputee)*/ but $he realizes that at least nothing about $his limbs, or lack thereof, has changed. <<else>> - $His eyes seemed to bulge, $his heart monitor begins to beep faster and more insistently. Eventually, your assistant is forced to inject $him with a sedative. $His eyes flutter closed and the heart monitors beeping slows to a steady pulse. Hopefully $he'll be calmer when $he wakes up again, though the memory of waking without limbs will @@.gold;stick with $him.@@ + $His eyes seem to bulge, $his heart monitor begins to beep faster and more insistently. Eventually, your assistant is forced to inject $him with a sedative. $His eyes flutter closed and the heart monitors beeping slows to a steady pulse. Hopefully $he'll be calmer when $he wakes up again, though the memory of waking without limbs will @@.gold;stick with $him.@@ <br> ... <br> diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw index 2b15432488912ceab710541552a99bdd302534a9..3b82bce59326b89c5866d4217ffeb1e22acf1742 100644 --- a/src/pregmod/widgets/bodyswapWidgets.tw +++ b/src/pregmod/widgets/bodyswapWidgets.tw @@ -158,7 +158,7 @@ <<set $args[0].canRecruit = 0>> -<<if $args[2] != 1>> /* swpping NOT gene pool records */ +<<if $args[2] != 1>> /* swapping NOT gene pool records */ <<set $args[0].porn = $args[1].porn>> <<set $args[0].aphrodisiacs = $args[1].aphrodisiacs>> <<set $args[0].curatives = $args[1].curatives>> diff --git a/src/pregmod/widgets/deathWidgets.tw b/src/pregmod/widgets/deathWidgets.tw index 287e9aa7a132b14bda088511a4970fe863d5d37e..f1a1672739bd898e7fdf5379f61603922251bb00 100644 --- a/src/pregmod/widgets/deathWidgets.tw +++ b/src/pregmod/widgets/deathWidgets.tw @@ -142,7 +142,7 @@ <</if>> <<if ($arcologies[0].FSPaternalist != "unset") && ($args[0].actualAge < 75)>> Allowing a slave to die under your care @@.red;severely damages@@ your image as a caring slaveowner and @@.red;calls into question@@ your paternalistic resolve. - <<= FSChange("Paternalist", -10)>> + <<= FutureSocieties.Change("Paternalist", -10)>> <</if>> <</if>> <</widget>> diff --git a/src/pregmod/widgets/marketWidgets.tw b/src/pregmod/widgets/marketWidgets.tw index b568f38367b81882839bfeb336e8b259d8ae36fe..517b15aca8f883299eb460568db41c031265cee1 100644 --- a/src/pregmod/widgets/marketWidgets.tw +++ b/src/pregmod/widgets/marketWidgets.tw @@ -1,12 +1,12 @@ :: Market Widgets [widget nobr] /* - * Look for widgets in passages tagged with "market:marketname" which - * end in "Populate" and calls them all with the second argument - * (an "origins" array) as argument. - * - * Call like <<AddMarketOrigins "marketname" _possibleOrigins>> - */ +* Look for widgets in passages tagged with "market:marketname" which +* end in "Populate" and calls them all with the second argument +* (an "origins" array) as argument. +* +* Call like <<AddMarketOrigins "marketname" _possibleOrigins>> +*/ <<widget "AddMarketOrigins">> <<if _.isString($args[0]) && _.isArray($args[1])>> diff --git a/src/societies/aztec/slaveSacrifice.tw b/src/societies/aztec/slaveSacrifice.tw index 34347e97a1f70bb6ea4dd6f5b46c19652d7bcadd..2de0d8319a3b09b09d6712dbb3fd872a8e103e73 100644 --- a/src/societies/aztec/slaveSacrifice.tw +++ b/src/societies/aztec/slaveSacrifice.tw @@ -4,7 +4,7 @@ <<setLocalPronouns $activeSlave >> <<run Enunciate($activeSlave)>> -<<set _activeSlaveRepSacrifice = repGainSacrifice()>> +<<set _activeSlaveRepSacrifice = repGainSacrifice($activeSlave, $arcologies[0])>> <<if $sacrificeType == "penance">> You inform $activeSlave.slaveName that $he's been chosen to take part in a ritual sacrifice to Xochiquetzal, the goddess of carnal love, excess, and sexual release. diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 00cb66f48fe94069a7d6a29d1e0d135eec19c52c..94b7014a3fa011f47c7bda361340dddb7bd0cab5 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -2047,6 +2047,9 @@ Setting missing global variables: <<if ndef $cloningSystem>> <<set $cloningSystem = 0>> <</if>> +<<if ndef $geneticFlawLibrary>> + <<set $geneticFlawLibrary = 0>> +<</if>> <<if ndef $pregInventor>> <<set $pregInventor = 0>> @@ -3515,9 +3518,14 @@ Updating gene pool records: <<set _Slave.eyes = -4>> <</if>> - <<if ndef _Slave.custom>> - <<set _Slave.custom = {tattoo: _Slave.customTat}>> /* should be the only thing needed */ - <</if>> + <<if ndef _Slave.custom>> <<set _Slave.custom = {}>> <</if>> + <<set _Slave.custom.tattoo = _Slave.customTat || "">> + <<set _Slave.custom.label = _Slave.custom.label || "">> + <<set _Slave.custom.desc = _Slave.custom.desc || "">> + <<set _Slave.custom.title = _Slave.custom.title || "">> + <<set _Slave.custom.titleLisp = _Slave.custom.titleLisp || "">> + <<set _Slave.custom.hairVector = _Slave.custom.hairVector || 0>> + <<set _Slave.custom.image = _Slave.custom.image || null>> <<run App.Entity.Utils.GenePoolRecordCleanup(_Slave)>> <<set $genePool[_bci] = _Slave>> @@ -3680,6 +3688,8 @@ Done! <</for>> <</if>> +<<unset $SlaveSummaryFiler>> + <<if $releaseID < 1044>> <<set $releaseID = 1044>> <</if>> diff --git a/src/uncategorized/PESS.tw b/src/uncategorized/PESS.tw index 090ad0860c471918fd2a522229ccb7cce69b0c62..fafc5a1e6be90e65df5bd948cad92ba87680630e 100644 --- a/src/uncategorized/PESS.tw +++ b/src/uncategorized/PESS.tw @@ -463,16 +463,16 @@ $He sees you examining at $him, and looks back at you submissively, too tired to <<if ($activeSlave.vagina == 0) && !canDoVaginal($activeSlave)>> Since $he's wearing chastity, you take $him out onto the balcony, arm an extra security system so $he can relax, remove $his protection, and have gentle, loving sex with $him until $he's climaxed twice. <<set $activeSlave.chastityVagina = 0>> - <<= VaginalVCheck(1)>> + <<= VCheck.Vaginal(1)>> <<elseif ($activeSlave.anus == 0) && !canDoAnal($activeSlave)>> Since $he's wearing chastity, you take $him out onto the balcony, arm an extra security system so $he can relax, remove $his protection, and have gentle, loving anal sex with $him until $he's climaxed twice. <<set $activeSlave.chastityAnus = 0>> - <<= AnalVCheck(1)>> + <<= VCheck.Anal(1)>> <<elseif !canDoVaginal($activeSlave) && !canDoAnal($activeSlave)>> You take $him out onto the balcony, arm an extra security system so $he can relax, and firmly massage $his neck and shoulders to work out all the tension. <<elseif ($activeSlave.vagina == 0)>> You take $him out onto the balcony, arm an extra security system so $he can relax, and have gentle, loving sex with $him until $he's climaxed twice, once to your gentle massaging of $his mons while you fuck $him, and once to hard rubbing of $his pussy while you have enthusiastic anal sex. - <<= BothVCheck(2, 1)>> + <<= VCheck.Both(2, 1)>> <<elseif canDoAnal($activeSlave)>> <<if $activeSlave.hormoneBalance >= 100>> Since $he's doped up on hormones, you take $him out onto the balcony, arm an extra security system so $he can relax, and have gentle, loving anal sex with $him until $he's climaxed twice. @@ -487,10 +487,10 @@ $He sees you examining at $him, and looks back at you submissively, too tired to <<else>> You take $him out onto the balcony, arm an extra security system so $he can relax, and have gentle, loving anal sex with $him until $he's climaxed twice. <</if>> - <<= AnalVCheck(1)>> + <<= VCheck.Anal(1)>> <<else>> You take $him out onto the balcony, arm an extra security system so $he can relax, and have gentle, loving sex with $him until $he's climaxed twice, once to your gentle massaging of $his mons while you fuck $him, and once to hard rubbing of $his pussy while you have enthusiastic anal sex. - <<= BothVCheck(2, 1)>> + <<= VCheck.Both(2, 1)>> <</if>> @@.hotpink;$He is grateful@@ that you allowed $him to relax in this way and @@.mediumaquamarine;respects your judgment@@ in how you set things up. <<set $activeSlave.devotion += 4>> @@ -553,7 +553,7 @@ $He sees you examining at $him, and looks back at you submissively, too tired to <<set $activeSlave.trust += 4>> <<set $activeSlave.counter.oral += 1>> <<set $oralTotal += 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>><<if $activeSlave.anus == 0>>//This will take anal virginity//<</if>> <</link>> <<if $j >= 0 && canDoAnal($slaves[$j])>> /* $j will be -1 if no eligible victim was found */ diff --git a/src/uncategorized/PETS.tw b/src/uncategorized/PETS.tw index 1424afcebf58b1c3fc8c6920813b823cbd7b94a1..944bc9fa23f163bc645f6d698589b7a3eb0d5618 100644 --- a/src/uncategorized/PETS.tw +++ b/src/uncategorized/PETS.tw @@ -279,7 +279,7 @@ You decide to knit up care's raveled sleave with a break in the spa. You have yo <<EventNameDelink $activeSlave>> <<replace "#result">> In a conversational tone of voice, you tell $activeSlave.slaveName to continue the spanking. You watch the milieu impassively, your presence slightly cramping $his style. The poor beaten servant staggers out of the room when fully punished; $activeSlave.slaveName didn't bring $himself to climax, obviously over concern about why you're taking such an interest. When you tell $him that $he needs to remember that $he is a slave, too, and only superior to $his charges by degree, $his face falls. $He has a few seconds to wonder what $his punishment will be before $he finds $himself shoved roughly up against the wall. When $he feels <<if ($PC.dick == 0)>>a strap-on<<else>>your cockhead<</if>> pressing against $his <<if $activeSlave.anus > 2>>massive<<elseif $activeSlave.anus > 1>>loose<<else>>tight<</if>> anus, $he tries to hike a leg up to save $himself a bit of anal pain, but to little avail. <<if $activeSlave.anus > 2>>Since $his ass is so loose, you push two fingers in alongside <<if ($PC.dick == 0)>>the phallus<<else>>your dick<</if>>, eliciting a shocked whine.<<elseif $activeSlave.anus > 1>>$His butt may be well-used, but you pound $him hard enough to let $him know $he's still your butthole bitch.<<else>>$His ass is so tight that fucking it standing is punishment enough.<</if>> $He submissively takes $his buttfuck, and begs your forgiveness when $he feels you <<if ($PC.dick == 0)>>shoot your load up $his ass<<else>>shudder with orgasm<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>> diff --git a/src/uncategorized/RECI.tw b/src/uncategorized/RECI.tw index b30ccf8b0cd6b09c391551de66bf460debeb2acf..e3f28dbc91b5481668f66641d0a6e922618184a4 100644 --- a/src/uncategorized/RECI.tw +++ b/src/uncategorized/RECI.tw @@ -483,7 +483,7 @@ $He looks pensive, and goes through two false starts before $he clears $his thro <<EventNameDelink $activeSlave>> <<replace "#result">> When $he <<if canSee($activeSlave)>>sees<<elseif canHear($activeSlave)>>hears<<else>>senses<</if>> you stand up from behind your desk<<if ($PC.dick == 0)>> and pull on a strap-on<</if>>, $he smiles invitingly at you and relaxes. But as you approach, $he <<if canSee($activeSlave)>>sees a dangerous glint in your eyes<<elseif canHear($activeSlave)>>hears a menacing cadence to your footstep<<else>>realizes the reason for your delay<</if>>. One corner of $his mouth flaws upward with anticipation, and $he plays along. $He immediately curls up into a ball on the couch, managing to end up with $his <<if ($activeSlave.weight > 30)>>fat ass squashed enticingly against the seat back<<elseif ($activeSlave.butt > 5)>>absurd ass squashed enticingly against the seat back<<elseif ($activeSlave.butt > 2)>>healthy ass pushed against the seat back<<else>>trim ass against the seat back<</if>>. $He looks up at you with feigned terror and begs, "Plea<<s>>e, <<Master>>, I'm ju<<s>>t an inno<<c>>ent little $girl. Plea<<s>>e don't rape my poor little butt!" You grab an ankle and haul $his <<if ($activeSlave.weight > 10)>>plush<<elseif ($activeSlave.muscles > 5)>>toned<<else>>slender<</if>> $activeSlave.skin body toward you, dragging $him across the couch, and then half-fall atop $him, pushing <<if ($PC.dick == 0)>>the strap-on<<else>>your hard cock<</if>> up the wriggling $girl's butt. $He keeps begging and whining, but $he's managed to bring a hand under $himself and is - <<if ($activeSlave.dick > 0) && ($activeSlave.chastityPenis == 1)>> + <<if ($activeSlave.chastityPenis == 1)>> frantically rubbing $his taint. <<elseif ($activeSlave.dick > 0) && canAchieveErection($activeSlave)>> rubbing $his submissive little $girl cock. diff --git a/src/uncategorized/REFI.tw b/src/uncategorized/REFI.tw index 6fa941ed2bab5ef52157c84513316a3003764644..57fbefd70bb0ad44da1c545873bfe5c54c2f5432 100644 --- a/src/uncategorized/REFI.tw +++ b/src/uncategorized/REFI.tw @@ -812,7 +812,7 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<else>> $He hasn't recovered before $he feels the still more urgent pain of rough anal, <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif canDoVaginal($activeSlave)>> <<if $activeSlave.vagina == 0>> $He hasn't recovered before $he feels the still more urgent pain of <<if $PC.dick == 1>>your dick brutally @@.lime;stripping $him of $his virginity@@<<else>>an enormous dildo @@.lime;stealing $his virginity@@<</if>>, followed by rough sex, @@ -820,7 +820,7 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<else>> $He hasn't recovered before $he feels the still more urgent pain of <<if $PC.dick == 1>>your dick<<else>>an enormous dildo<</if>> slamming against $his cervix, <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> $He hasn't recovered before $he feels <<switch $activeSlave.collar>> @@ -949,7 +949,7 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<else>> $He hasn't recovered before $he feels the still more urgent pain of rough anal, <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif canDoVaginal($activeSlave)>> <<if $activeSlave.vagina == 0>> $He hasn't recovered before $he feels the still more urgent pain of <<if $PC.dick == 1>>your dick brutally @@.lime;stripping $him of $his virginity@@<<else>>an enormous dildo @@.lime;stealing $his virginity@@<</if>>, followed by rough sex, @@ -957,7 +957,7 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<else>> $He hasn't recovered before $he feels the still more urgent pain of <<if $PC.dick == 1>>your dick<<else>>an enormous dildo<</if>> slamming against $his cervix, <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> $He hasn't recovered before $he feels <<switch $activeSlave.collar>> @@ -1070,14 +1070,14 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<if $activeSlave.mpreg == 1>> <<if canDoAnal($activeSlave) && $activeSlave.anus > 0>> you slide <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> into $his rear and give $him a pounding that leaves $him begging for what's to come. <<if $PC.dick == 1>>When you start to feel you climax approaching<<else>>Once you've thoroughly enjoyed yourself<</if>>, you tell $him that pregnancy is a very special reward for very good slaves, and you might give it to $him one day — but that $he doesn't deserve it yet. With that, you slide out of $his ass and paint $his back with <<if $PC.dick == 1>>your cum<<else>>a few squirts from the dildo<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> you tell $him that pregnancy is a very special reward for very good slaves, and you might give it to $him one day — but that $he doesn't deserve it yet. With that, you run your hands across the quivering slave's belly; pantomiming it swelling with child and sending $him over the edge. <</if>> <<else>> <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> you slide <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> into $his vagina and give $him a pounding that leaves $him begging for what's to come. <<if $PC.dick == 1>>When you start to feel you climax approaching<<else>>Once you've thoroughly enjoyed yourself<</if>>, you tell $him that pregnancy is a very special reward for very good slaves, and you might give it to $him one day — but that $he doesn't deserve it yet. With that, you slide out of $his pussy and paint the quivering slave's belly with <<if $PC.dick == 1>>your cum<<else>>a few squirts from the dildo<</if>>. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> you tell $him that pregnancy is a very special reward for very good slaves, and you might give it to $him one day — but that $he doesn't deserve it yet. With that, you run your hands across the quivering slave's belly; pantomiming it swelling with child and sending $him over the edge. <</if>> @@ -1139,14 +1139,14 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<if $activeSlave.mpreg == 1>> <<if canDoAnal($activeSlave) && $activeSlave.anus > 0>> slide your <<if $PC.dick == 0>>strap-on<<else>>cock<</if>> into $his rear. You lean in to run your hands across the quivering slave's belly as you focus on breeding the already fecund bitch. <<if $PC.dick == 1>>When you start to feel you climax approaching<<else>>Once you've thoroughly enjoyed yourself<</if>>, you tell $him that pregnancy is a very special reward for very good slaves, and if $he keeps being a good girl you'll be sure to keep $him swollen with child. With that, you hilt yourself and <<if $PC.dick == 1>>flood $his rectum with your cum<<else>>repeatedly pump bursts of cum out of your toy into $his bowels<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> you tell $him that pregnancy is a very special reward for very good slaves, and if $he keeps being a good girl you'll be sure to keep $him swollen with child. With that, you run your hands across the quivering slave's _belly belly; pantomiming it swelling to an obscene size with children and sending $him over the edge. <</if>> <<else>> <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> slide your <<if $PC.dick == 0>>strap-on<<else>>cock<</if>> into $his pussy. You lean in to run your hands across the quivering slave's belly as you focus on breeding the already fecund bitch. <<if $PC.dick == 1>>When you start to feel you climax approaching<<else>>Once you've thoroughly enjoyed yourself<</if>>, you tell $him that pregnancy is a very special reward for very good slaves, and if $he keeps being a good girl you'll be sure to keep $him swollen with child. With that, you hilt yourself and <<if $PC.dick == 1>>flood $his cunt with your cum<<else>>repeatedly pump bursts of cum into $him until it flows out around your toy<</if>>. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> you tell $him that pregnancy is a very special reward for very good slaves, and if $he keeps being a good girl you'll be sure to keep $him swollen with child. With that, you run your hands across the quivering slave's _belly belly; pantomiming it swelling to an obscene size with children and sending $him over the edge. <</if>> @@ -1575,10 +1575,10 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< Good slaves get aroused according to their masters' whim, not their own silly tendencies. You call $activeSlave.slaveName over before $he can give voice to $his interest in domination, and <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> make $him take <<if ($PC.dick == 0)>>a strap-on you've put on<<else>>your dick<</if>>, hard. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> make $him take <<if ($PC.dick == 0)>>a strap-on you've put on<<else>>your dick<</if>>, hard. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<if $PC.dick == 1>>ram your dick down $his throat<<if $PC.vagina == 1>> and make $him eat you out<</if>><<else>>mash your clit in $his face, making $him eat you out<</if>>. <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -1612,10 +1612,10 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< Good slaves get aroused according to their masters' whim, not their own silly tendencies. You call $activeSlave.slaveName over before $he can give voice to $his interest in submission, and make $him <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> ride <<if ($PC.dick == 0)>>a strap-on you're wearing<<else>>your dick<</if>>. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> ride <<if ($PC.dick == 0)>>a strap-on you're wearing<<else>>your dick<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<if $PC.dick == 1>>suck you off<<if $PC.vagina == 1>> and eat you out<</if>><<else>>eat you out<</if>> at $his own pace. <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -1671,7 +1671,7 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <</if>> <<if canDoAnal($activeSlave)>> $He squeaks with surprise as you throw $him on the couch, but $his eagerness is obvious. $He does everything right, relaxing as you <<if ($PC.dick == 0)>>push a strap-on into<<else>>enter<</if>> $his ass and enjoying $himself all the way through. $He climaxes hard to <<if ($PC.dick == 0)>>the phallus<<else>>the cock<</if>> in $his asshole. @@.hotpink;$He has become more devoted to you,@@ and @@.lightcoral;$his sexuality now focuses on $his anus.@@ - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif $PC.dick == 1>> $He squeaks with surprise as you push $him <<if $activeSlave.belly >= 300000>> @@ -1782,9 +1782,9 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <</if>> @@.hotpink;$He has become more obedient,@@ and @@.lightcoral;$his sexuality now focuses on public humiliation.@@ <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<set $activeSlave.devotion += 4>> <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1, $activeSlave.fetishStrength = 65>> @@ -1795,9 +1795,9 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<< <<replace "#result">> Good slaves get aroused according to their masters' whim, not their own silly tendencies. You call $activeSlave.slaveName over before $he can give voice to $his interest in humiliation and fuck $him privately in your office. You'll keep an eye on $him, and with this correction @@.hotpink;$he'll become more obedient.@@ <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<= SimpleSexAct($activeSlave)>> <</if>> diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 0f03cc9220dd1712c3c1281f5428d02cb5076c05..d60d1b287fc671b8e71ce4edf948bbe84644cb1f 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -4597,7 +4597,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.devotion += 5, $activeSlave.preg = 1, $activeSlave.pregWeek = 1, $activeSlave.pregKnown = 1, $activeSlave.pregSource = -1>> <<set $activeSlave.pregType = setPregType($activeSlave)>> <<set WombImpregnate($activeSlave, $activeSlave.pregType, -1, 1)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> <</if>> @@ -4618,7 +4618,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> You snicker, but remind $him that no matter how much $he wants to be knocked up, $his belt will direct all the dicks $he takes into $his rear. You line up and insert your <<if ($PC.dick == 0)>>strap-on<<else>>cock<</if>> with $his ass and begin fucking $him, all the while reminding $him that $he will not be getting pregnant. When $he finally orgasms, <<if ($PC.dick == 0)>>$his unabashed enjoyment<<else>>the strength of $his spasming sphincter<</if>> sends you over as well. $He's left in a confused haze; $his body tells $him to get pregnant, but you tell $him to take it anally. $He @@.hotpink;sides with your decision@@ and vows to be an anal whore for you. <<if $activeSlave.fetish == "none">>@@.coral;Overcoming $his urges to become a mother via anal causes $him to become a buttslut.@@<<set $activeSlave.fetish = "buttslut", $activeSlave.fetishStrength = 10>><</if>> <<set $activeSlave.devotion += 5, $activeSlave.chastityVagina = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his virginity//<</if>> @@ -4800,7 +4800,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> You snicker, but remind $him that $he has no say in $his release. You line up and insert your <<if ($PC.dick == 0)>>strap-on<<else>>cock<</if>> up $his ass and begin slowly fucking $him, making sure to stimulate $his prostate. When $he finally orgasms <<if ($PC.dick == 0)>>$his unabashed enjoyment<<else>>the strength of $his spasming sphincter<</if>> sends you over as well. $He's left in a confused haze; $his body tells $him to fuck, but you tell $him to get fucked. $He @@.hotpink;sides with your decision@@ and vows to be the one taking dick for you. <<if $activeSlave.fetish == "none">>@@.coral;Overcoming $his urges to become a father via anal cause $him to become a buttslut.@@<<set $activeSlave.fetish = "buttslut", $activeSlave.fetishStrength = 10>><</if>> <<set $activeSlave.devotion += 5, $activeSlave.chastityPenis = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <<if $seeExtreme == 1 && $activeSlave.indentureRestrictions <= 0>> @@ -5064,7 +5064,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed the last time $he used $his dick and if it was worth crossing you, because it will not happen again. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a shemale@@ $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his virgin pussy. You use $him until you are satisfied and toss $him to the floor to think about $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 30, $activeSlave.devotion -= 25, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.balls = 0, $activeSlave.scrotum = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.vagina = 1, $activeSlave.chastityPenis = 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*2), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5083,7 +5083,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly finds $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5165,7 +5165,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed the last time $he used $his dick and if it was worth crossing you, because it will not happen again. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a shemale@@ and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his virgin pussy. You use $him until you are satisfied and toss $him to the floor to think about $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 30, $activeSlave.devotion -= 25, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.balls = 0, $activeSlave.scrotum = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.vagina = 1, $activeSlave.chastityPenis = 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*2), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5184,7 +5184,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly finds $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5260,7 +5260,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed the last time $he used $his dick and if it was worth crossing you, because it will not happen again. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a shemale@@ and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $his against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his virgin pussy. You use $him until you are satisfied and toss $him to the floor to think about $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 30, $activeSlave.devotion -= 25, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.balls = 0, $activeSlave.scrotum = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.vagina = 1, $activeSlave.chastityPenis = 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*2), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5279,7 +5279,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly finds $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5330,7 +5330,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed the last time $he used $his dick and if it was worth crossing you, because it will not happen again. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a shemale@@ and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $his against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his virgin pussy. You use $him until you are satisfied and toss $him to the floor to think about $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 30, $activeSlave.devotion -= 25, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.balls = 0, $activeSlave.scrotum = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.vagina = 1, $activeSlave.chastityPenis = 0>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*2), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5349,7 +5349,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You ask $him if $he enjoyed $his last orgasm, because $he won't be getting any more. Restrained as $he is, the most $he can do is cry and beg. Once $he comes to after the surgery, $he faces $his new body; @@.mediumorchid;$he's now a surgical null,@@ though $he retains $his balls, and $he's @@.gold;the only one to blame@@ for $his @@.red;suffering.@@ You waste no time in shoving $him against the wall and forcing your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> into $his anus. As $his arousal grows, $he realizes you not only took $his dick, but $his prostate as well. $He quickly finds $himself desperate for release but lacking any way to do so. You watch $him squirm in sexual frustration. This will be $his new life. Every other rebellious slave is @@.gold;horrified by the example.@@ <<set $activeSlave.trust -= 50, $activeSlave.devotion -= 30, $activeSlave.health -= 20, $activeSlave.dick = 0, $activeSlave.prostate = 0, $activeSlave.dickAccessory = "none", $activeSlave.chastityPenis = 0, $activeSlave.vagina = 0, $activeSlave.ovaries = 0, $activeSlave.clit = 0, $activeSlave.labia = 0, $activeSlave.vaginalAccessory = "none", $activeSlave.vaginalAttachment = "none", $activeSlave.chastityVagina = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } })>> <<run cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave)>> <</replace>> @@ -5369,7 +5369,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<link "Show $him who's in charge">> <<replace "#result2">> You <<if $PC.dick == 0>>grab your biggest strap-on<<else>>stroke your growing erection<</if>> as $activeSlave.slaveName struggles to right $himself, catching $his hips as $he tries to escape. You show no mercy as you force yourself into $his <<if $activeSlave.anus == 0>>virgin<</if>> ass and viciously fuck $him like $he intended to do to you. You savor the sight of your every thrust against $his prostate forcing spurts of precum out $his gigantic, throbbing erection. You pick up the pace as $he climaxes, soaking the sheets beneath $him; $he's not getting out of this until you are satisfied. By the end of things, the master suite reeks of fresh cum and $activeSlave.slaveName's twitching body is the center piece of $his semen puddle. The sheets will definitely need a changing, you note, as $his semi-erect cock twitches and a thick rope of jism sprays forth. - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <br><<link "Just get $him out of here">> @@ -5595,14 +5595,14 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> pace. <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if $activeSlave.anus == 0>> pace, despite having been a @@.lime;virgin@@ moments before. <<else>> pace. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <br><br> Riding certainly is exhausting, especially if you don't offer any assistance. With no hands on $his hips to keep $him steady, $his hands find themselves on your @@ -5927,7 +5927,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> hips one at a time, and then begin to slowly move $his inverted body towards you and away from you, impaling $him. $His whole body shakes with pleasure and exertion, and when $he orgasms, you have to support $him to stop $him crashing to the ground<<if $activeSlave.belly >= 300000>>, a struggle thanks to $his excessive weight<</if>>. You let $him down onto the floor slowly<<if $activeSlave.vagina > -1>>, but tell $him that after a short break, $he's to get back up so you can see to $his anus<</if>>. $He's breathing very hard and still coming down off a terrific head rush, so $he just @@.hotpink;blows you a kiss.@@ <<set $activeSlave.devotion += 4>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take virginity//<</if>> <br><<link "Give $him a massage">> @@ -5992,7 +5992,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result2">> You gently push $his shoulders forward. $He moans as the forward lean stretches $his hip flexors, and then breathes deeply with relief as you pull $his legs back and out of their crossed position. The rush of a completed stretch crashes into $him, and $he relaxes completely. This change of position leaves $him with $his <<if $activeSlave.butt > 6>>massive ass<<elseif $activeSlave.butt > 3>>big butt<<else>>rear<</if>> pointed right at you, and $he knows what's coming next. $His <<if $activeSlave.anus > 2>>loose butthole relaxes completely into a gape that positively begs to be penetrated<<elseif $activeSlave.anus > 1>>relaxed anus opens into a slight gape that positively begs to be penetrated<<else>>tight anus relaxes slightly, $his rosebud begging to be fucked<</if>>. You rise partway to kneel behind $him, <<if $PC.dick == 0>>sliding fingers inside the slave's ass and humping your pussy against the heel of that hand<<else>>using a hand to guide your member inside the slave's ass<<if $PC.vagina == 1>>, not without teasing your own pussylips a bit<</if>><</if>>. $He gasps when your other hand grabs one of $his shoulders and continues the massage. You quickly find that working out a knot in $his muscles produces reflexive reactions across $his whole body, notably including $his anal sphincter. After you've driven $him into a state of @@.hotpink;mindless satiation@@ and climaxed yourself, you let $him slump to the floor and curl up around $his sweaty body. <<set $activeSlave.devotion += 2>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <</if>> @@ -6103,9 +6103,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if $PC.dick == 1>>$He clenches against your dick,<<if $PC.vagina == 1>> so hard that you can feel the rush of blood into your cunt,<</if>><<else>>$He works your pussy harder,<</if>> getting you off in turn, and then rolls over to plant a whole-hearted kiss on your lips. <<set $activeSlave.devotion += 4>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</replace>> <</link>> @@ -6128,9 +6128,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He and then share a shower and a nap. Thus invigorated, you decide to tour the arcology's nightlife, and tell $him $he'll accompany you. $He hurries to get ready, filled with excitement. A lovely day. <<set $activeSlave.trust += 4>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</replace>> <</link>> @@ -6185,9 +6185,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He @@.mediumaquamarine;trusts you more@@ for being witty with $him, for allowing $him the simple pleasure of a little sunbathing — and for sharing fun sex with $him, of course. <<set $activeSlave.trust += 4>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</replace>> <</link>> @@ -6347,9 +6347,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> <</if>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> $He's extremely pleased <<if canSee($activeSlave)>>to see $himself<<elseif canHear($activeSlave)>>to hear $he's<<else>>to learn $he's<</if>> on the inspection schedule for the same time tomorrow, and is almost bouncing with eagerness the next morning. <<if ($activeSlave.fetishStrength == 100) || ($activeSlave.fetishKnown == 0) || ($activeSlave.fetish == "none")>> @@ -6413,10 +6413,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You detail another slave to fetch $him after the public loses interest. A couple of hours later, you catch sight of $him limping towards the showers, thoroughly disheveled. $His $activeSlave.skin face and chest are spattered with cum, $he's got <<if $activeSlave.dick > 0>>$his own ejaculate<<else>>pussyjuice<</if>> all over $his thighs, and $his well-fucked butthole is dripping semen. $He's certainly worked hard @@.green;improving your reputation.@@ <<run repX(1250, "event", $activeSlave)>> <<set $activeSlave.counter.mammary += 10, $mammaryTotal += 10, $activeSlave.counter.oral += 10, $oralTotal += 10>> - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<set $activeSlave.counter.publicUse += 30>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck(10)>> + <<= VCheck.Vaginal(10)>> <<set $activeSlave.counter.publicUse += 10>> <</if>> <</replace>> @@ -6502,9 +6502,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> <</if>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<if ($activeSlave.fetishStrength == 100) || ($activeSlave.fetish == "none")>> Since $he's totally sure of what gets $him off, this public display that you know it too makes $him @@.mediumaquamarine;trust you.@@ @@ -6591,7 +6591,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> the sheets beneath $him. When you climax soon after, $he expects you to get off $him so $he can clean up, but instead, the <<if $PC.dick == 1>>cock up $his butt returns to rock hardness<<if $PC.vagina == 1>> as you use a little manual stimulation of your own cunt to get your cock stiff again<</if>> and<<else>>strap-on up $his butt<</if>> goes back to pumping in and out of $him. $He slides a hand under $himself to <<if $activeSlave.vagina == -1>>jerk off<<else>>rub $himself<</if>> this time. When you finally finish, a long time later, the exhausted slave is lying on a bed wet with lube, <<if ($PC.dick == 1) || ($activeSlave.dick > 0)>> ejaculate,<</if>><<if ($PC.dick == 0) || ($activeSlave.vagina > -1)>> girlcum,<</if>> drool, and sweat. $He doesn't care, and you let $him curl up in $his sex-soaked nest. As you leave, you think $he's asleep already, but <<if !canSee($activeSlave)>>as you go<<else>>$his <<= App.Desc.eyeColor($activeSlave)>> eyes open a slit as you go and<</if>> $he murmurs, @@.hotpink;Thank<<s>>,@@ <<Master>>." <<set $activeSlave.devotion += 5>> - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <</replace>> <</link>> <<if $activeSlave.fetishKnown == 1 && $activeSlave.fetish != "none">> @@ -6689,9 +6689,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set _didAnal = 1>> <</if>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> $He's surprised but not displeased to find you standing over $him the next night at exactly the same time. By the third night, $he's masturbating in anticipation of your visit to $his bed. <<if ($activeSlave.fetishStrength > 95)>> @@ -6811,7 +6811,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You're not close to the penthouse kitchen area, so it takes you some time to make your way there. By the time you<<if $PC.dick == 0>> don a strap-on and<</if>> get there, the poor <<if $activeSlave.pregKnown == 1>>pregnant <</if>>$girl is pounding weakly against the refrigerator door to try to get someone's attention. $He looks relieved when you open the door, but $his relief turns to ashes when you shut the door behind you. $He shivers with cold and fear as you sternly point out the release, high up on the door, and then demand $his hands. You bind them together and loop them over the release before hoisting $his legs off the ground so that $his back is against the cold metal door and all $his weight is hanging off the release by $his arms. $He doesn't struggle until you tell $him $he can leave — if $he can get the release open like this. $He tries, but $he can't get enough leverage; $his spastic efforts get weaker as you pull $his <<if ($activeSlave.butt > 5)>>massive ass<<elseif ($activeSlave.butt > 2)>>big butt<<else>>nice little butt<</if>> away from the door and line <<if $PC.dick == 0>>the strap-on<<else>>your cock<</if>> up with $his <<if ($activeSlave.anus > 2)>>loose asspussy<<elseif ($activeSlave.anus > 1)>>asshole<<else>>tight little asshole<</if>>. Teeth chattering, legs shaking with cold, $he takes a buttfuck in the cold cooler, hanging from what $he should have used to let $himself out. When you finish, you hit it yourself and drop $his legs, letting $him unhook $himself and flee to the warmth outside. $He @@.gold;begs your pardon@@ abjectly as $he rubs $his <<if $activeSlave.belly >= 5000>> _belly $activeSlave.skin belly <<else>>$activeSlave.skin shoulders <</if>>to warm $himself up<<if $PC.dick == 0>><<else>>, ignoring the cum <<if ($activeSlave.anus > 2)>>leaking out of $his fucked-out anus<<elseif ($activeSlave.anus > 1)>>leaking out of $his now-gaped backdoor<<else>>filling $his still-tight anus<</if>><</if>>. <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -6839,7 +6839,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He trim <</if>> bottom sink down into your lap. $He shimmies $himself atop your <<if $PC.dick == 0>>phallus<<else>>dick<</if>>, gently seating it between $his buttocks, and cranes $his neck back to kiss the bottom of your chin. $He gradually comes out of $his heat stupor, riding $himself back and forth more and more until the <<if ($activeSlave.anus > 2)>>slit of $his asspussy<<elseif ($activeSlave.anus > 1)>>opening of $his anus<<else>>pucker of $his butt<</if>> rests against your <<if $PC.dick == 0>>strongly vibrating strap-on<<else>>cock<</if>>. You take $his hips and firmly thrust into $his rectum, eliciting a little whimper, but $he begins to bounce gently in the water, sodomizing $himself, $his gigantic breasts moving up and down and making concentric ripples spread outward. $He's still very relaxed and $his first orgasm takes $him by surprise, <<if ($activeSlave.balls > 0)>>$his cum floating to the surface<<if canSee($activeSlave)>>; $he points at it and giggles<<else>>; $he feels it brush $his skin and giggles<</if>> before getting<<else>>making $him twitch and shudder with aftershocks as $he gets<</if>> $his feet up on the ledge to ride you harder. When you're done you let $him float again, but curiosity about how $his fucked butt feels under the water leads you to reach a hand between $his legs and grope $his anus. $His warm, relaxed <<if ($activeSlave.anus > 2)>>asspussy<<elseif ($activeSlave.anus > 1)>>backdoor<<else>>tightness<</if>> is so enticing you push $him to $his feet and take $him a second time, standing in the shoulder-depth water. By the time you're done $he's so @@.hotpink;sexually exhausted@@ that you carry $him to the shower. - <<= AnalVCheck(2)>> + <<= VCheck.Anal(2)>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -6853,10 +6853,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He insert yourself into the <<if canDoVaginal($activeSlave)>> <<if ($activeSlave.vagina > 3)>>welcoming gape of $his pussy<<elseif ($activeSlave.vagina > 2)>>loose embrace of $his pussy<<elseif ($activeSlave.vagina > 1)>>welcoming embrace of $his pussy<<else>>tight tight embrace of $his pussy<</if>>. $He enjoys the sensation of such an unusual fucking, wriggling against $his weighted feet and moaning through $his snorkel as you gently take $him under water. $His enormous breasts quiver in near-zero gravity with each thrust, until you notice the delicious motion and take one in each hand. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if ($activeSlave.anus > 2)>>loose slit of $his asspussy<<elseif ($activeSlave.anus > 1)>>welcoming pucker of $his anus<<else>>tight pucker of $his butt<</if>>. $He exaggerates $his discomfort, wriggling against $his weighted feet and squealing through $his snorkel as you gently sodomize $him under water. $His enormous breasts quiver in near-zero gravity with each thrust, until you notice the delicious motion and take one in each hand. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</if>> The amount of air you can pull through the snorkel just isn't enough to facilitate the throes of your lovemaking, so by the time you're done, $he's so exhausted $he can barely float to the edge of the pool. Fortunately $his lovely tits make for quite the floatation device, so you gently guide $him to the shallow end<<if $PC.dick || $activeSlave.balls>>, leaving a trail of cum in your wake<</if>>. @@ -6926,7 +6926,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He hikes $himself up on the rail, up on tiptoe, to bring $his asshole to the most comfortable height. <</if>> $He moans a little as you<<if $PC.dick == 0>> pull on your trusty vibrating strap-on and<</if>> enter $his butt, but $he keeps $his gaze on the fiery horizon. $He extricated $his hands from yours to stabilize $himself against the railing, leaving you free to gently massage $his breasts in time with your slow thrusts. $He does not climax, but after you do $he turns halfway within your arms and kisses you impulsively. $He leaves the balcony with a @@.hotpink;small smile@@ on $his face. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his virginity//<</if>> @@ -6966,7 +6966,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He hikes $himself up on the rail, up on tiptoe, to bring $his pussy to the most comfortable height. <</if>> $He moans a little as you<<if $PC.dick == 0>> pull on your trusty vibrating strap-on and<</if>> enter $his depths, but $he keeps $his gaze on the fiery horizon. $He extricated $his hands from yours to stabilize $himself against the railing, leaving you free to gently massage $his breasts in time with your slow thrusts. $He does not climax, but after you do $he turns halfway within your arms and kisses you impulsively. $He leaves the balcony with a @@.hotpink;small smile@@ on $his face. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> @@ -6991,7 +6991,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> The polite thing to do would be to instruct $assistantName to retract a dildo before replacing it with <<if $PC.dick == 0>>a strap-on<<else>>your dick<</if>>. You are not, however, feeling particularly polite. $activeSlave.slaveName writhes in anguish when $he feels an additional phallus forcing its way past $his lips. $He tries to relax but loses control and spasms; the throat fucking continues unmercifully and in short order $he is gagging desperately. Each of $his holes receives the same treatment in turn; all $he manages to do in response is writhe here and there, and squeal incoherently whenever $his mouth isn't totally full. $He has become @@.hotpink;more submissive to you.@@ - <<= BothVCheck()>> + <<= VCheck.Both()>> <<set $activeSlave.devotion += 4>> <<if $activeSlave.vagina == 1 && canDoVaginal($activeSlave)>> $His tight pussy @@.lime;isn't so tight any more.@@ @@ -7067,7 +7067,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You inform $him sternly that you will ensure that $he is not permanently damaged, and that otherwise, $he is to take anal pain like a good buttslave. $He starts to beg and whine as you lean back in your chair and <<if $PC.dick == 0>>hold $him upside down on your chest so $he can lick your pussy while you use a dildo on $his ass.<<else>>set $him on your chest before reaching around to line your cock up with $his sore hole. $He shudders and writhes when you start pushing yourself inside.<</if>> You use hard pinches to $his nipples to punish $his whining, forcing $him to take a long, painful buttfuck in silence. @@.gold;$He has become more afraid of you.@@ <<if ($activeSlave.anus < 3)>>$His week of tough anal experience has @@.lime;permanently loosened $his anus.@@<<set $activeSlave.anus += 1>><</if>> <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Give $him some care">> @@ -7204,7 +7204,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He and @@.mediumaquamarine;asks earnestly,@@ "More plea<<s>>e, <<Master>>." <</if>> <<set $activeSlave.trust += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave))>> //This option will take $his anal virginity//<</if>> <br><<link "Pound that ass">> @@ -7262,7 +7262,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> for stimulation. $His asshole eventually spasms in orgasm, but it's spasmed so frequently during the rough sodomy that you don't realize the slut came to having $his asshole savaged until <<if $activeSlave.dick > 0>>you notice the ejaculate running down $his leg<<else>>an aftershock almost makes $his legs give out<</if>>. You climax in triumph yourself before pulling the bitch off the door frame and flinging $him towards the bathroom to clean $himself up. When $he emerges, $he comes over to sit quietly next to your desk, looking up at you @@.hotpink;obediently,@@ though you do notice $he sits to one side to take a bit of weight off $his poor rear. <<set $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave))>> //This option will take $his anal virginity//<</if>> <</if>> @@ -7320,7 +7320,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> $He eventually shudders and spasms in orgasm, <<if $activeSlave.dick > 0>>the ejaculate running down $his leg<<else>>$his legs almost give out<</if>> making obvious $his pleasure in getting $his pussy fucked by you. You climax in triumph yourself before pulling the bitch off the door frame and flinging $him towards the bathroom to clean $himself up. When $he emerges, $he comes over to sit quietly next to your desk, looking up at you @@.hotpink;obediently.@@ <<set $activeSlave.devotion += 4>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</replace>> <</link>><<if ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -7612,7 +7612,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> As $he takes the pounding sullenly, <<if canSee($activeSlave)>>$he has a direct view of $his own eyes in the mirror, and clearly @@.gold;is disturbed by what $he sees.@@<<elseif canHear($activeSlave)>>$he can hear nothing but the sound of $his brutal rape, and clearly @@.gold;is disturbed by what $he hears.@@<<else>>$his blindness and deafness mean that one of the few things $he can feel is $his own rape, which @@.gold;disturbs $him to no end.@@<</if>> <<set $activeSlave.trust -= 5>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -7624,7 +7624,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> $He turns around as <<if canHear($activeSlave)>>$he hears <</if>>you enter the bathroom, fear and loathing on $his face, but you seize $his shoulder and spin $his back around without a word. You drag $him across the counter until $his face is over the sink, and turn it on. $He struggles in sheer incomprehension as you hold $his head over the filling basin with one hand and roughly grope $his butt with the other. When the sink is full, you tell $him to spread $his buttocks for you like a good butthole bitch. $He hesitates, so you push $his face under the surface of the water and hold it there until $he complies. You shove <<if $PC.dick == 0>>a dildo<<else>>your member<</if>> up $his anus so harshly that $he spasms and reflexively tries to get away, so you push $him under again until $he stops struggling. For the next ten minutes, $he gets shoved under water whenever $he offers the slightest resistance to anal rape. Soon, $his tears are pattering down into the sink. The next time you decide to buttfuck $him, $he's @@.gold;compliant from sheer terror.@@ <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Reassure $him of $his sexual worth">> @@ -7646,7 +7646,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You patiently explain that taking <<if $PC.dick == 0>>anything you feel like inserting into $his backdoor<<else>>your cock<</if>> is $his duty, and begin to massage $his sphincter open with a single gentle finger. $He doesn't enjoy the ensuing assfuck, but $he doesn't truly hate it either and @@.hotpink;begins to hope@@ that being your butt slave won't be so painful after all. <<set $activeSlave.devotion += 4>> <<= SkillIncrease.Anal($activeSlave, 10)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Comfort $him">> @@ -7670,11 +7670,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<run repX(forceNeg(100), "event", $activeSlave)>> <</if>> <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<set $activeSlave.counter.oral++, $oralTotal++>> <</if>> @@ -7844,7 +7844,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You seize $him and begin to bind $him for appropriate punishment. $activeSlave.slaveName does not resist you physically at first. $He finds $himself tied bent over your desk, face-down, with $his arms locked behind $him<<if $activeSlave.belly >= 1500>> and $his _belly <<if $activeSlave.bellyPreg >= 1500>>pregnant <</if>>belly hanging off the edge<</if>>. $He struggles a little when you insert your cock into $his <<if ($activeSlave.anus == 1)>>poor little anus<<elseif ($activeSlave.anus == 2)>>whore's butt<<else>>gaping rear end<</if>>, but $his real agony begins when you place $his arms in an inescapable joint lock and apply a little pressure. It doesn't damage $him, but it easily causes more pain than $he is capable of resisting. $He does a little dance within $his bindings, squealing and involuntarily clenching you nicely with $his anal ring. You require $him to recite the litany "My name i<<s>> <<print _slavename>>!", coaching $him with alternate orders and agonizing correction until $he's screaming every word at the top of $his lungs in an endless wail. $His screeching rises and falls as $he feels the burning sensation of your merciless use of $his ass, but $he works $his lungs hard to avoid as much pain as $he can. When you've climaxed and cast off $his bindings, you make $him repeat $his name one last time as $he stiffly rubs $his abused arms and anus. $He does, @@.gold;without hesitation.@@ <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Allow $him to resume $his birth name">> @@ -7934,13 +7934,13 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You tell $him that you understand, and that you will get $him some new clothing. $He is thrilled, but $his pleasure turns to horror when $he sees that the new clothes are a version of the same slave bondage gear, just with inward-facing dildos for $his <<if $activeSlave.vagina > -1>>pussy and <</if>> asshole. <<if $activeSlave.anus == 0 || $activeSlave.vagina == 0>> You pause before getting $him dressed; there's little reason to waste virginities on plugs. You <<if $PC.dick == 1>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over, opting to start with $his tight pussy. - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif $activeSlave.anus == 0>> You pause before getting $him dressed; there's little reason to waste $his anal virginity on a plug. You <<if $PC.dick == 1>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over before working your way into $his tight anus. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif $activeSlave.vagina == 0>> You pause before getting $him dressed; there's little reason to waste $his virginity on a plug. You <<if $PC.dick == 1>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over before working your way into $his tight pussy. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> For the rest of the week, $he walks around awkwardly, unable to find a comfortable position <<if $activeSlave.belly >= 1500>>between<<else>>since<</if>> $his <<if $seeRace == 1>>$activeSlave.race <</if>>body <<if $activeSlave.belly >= 1500>>is<</if>> being penetrated by $his own clothing<<if $activeSlave.belly >= 1500>> and the straps digging into $his _belly rounded belly<</if>>. @@.hotpink;$He has become more submissive.@@ <</replace>> @@ -8006,10 +8006,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He and then realizes $his mistake and begs for mercy — in vain, of course. You finish $him off with a rough <<if canDoVaginal($activeSlave)>> fuck, with $him jerking against $his restraints every time you stroke into $his sore buttocks. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> assfuck, with $him jerking against $his restraints every time you stroke into $his sore buttocks. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> throatfuck, with $him jerking against $his restraints every time you hilt yourself and slap $his ass. <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -8108,9 +8108,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.devotion += 4>> <<run repX(500, "event", $activeSlave)>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>> @@ -8153,13 +8153,13 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He is surprised <<if canSee($activeSlave)>>to see the box is empty<<else>>when $he reaches into the box and finds nothing<</if>>. By the time $he realizes what this means, you've already confiscated $his old heels and seated yourself at your desk. Ordered to suck, $he comes gingerly over on all fours<<if $activeSlave.belly >= 100000>>, $his belly dragging along the floor,<<elseif $activeSlave.belly >= 10000>>, $his swollen belly getting in $his way,<</if>> and gets you off with $his whore's mouth. The rest of the week is a trying experience for $him. The most comfortable posture for $him to walk along in on all fours displays $his <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> holes nicely and you frequently avail yourself to which ever is more tempting at the time. - <<= BothVCheck(5, 5)>> + <<= VCheck.Both(5, 5)>> <<elseif canDoVaginal($activeSlave)>> pussy nicely, so $he gets it in $his feminine fold a lot. - <<= VaginalVCheck(10)>> + <<= VCheck.Vaginal(10)>> <<else>> anus nicely, so $he gets it up $his <<if $seeRace == 1>>$activeSlave.race <</if>>ass a lot. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <</if>> <<if $activeSlave.dick != 0>>The effort it takes to move usually keeps $his dick soft as $he does, so it flops around beneath $him all week.<</if>> @@.hotpink;$He has become more submissive to you.@@ @@ -8187,7 +8187,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> $activeSlave.slaveName is a little perplexed to find that the heels look quite normal, though they're very tall. When $he tries them on, however, standing requires $him to splay $his hips slightly so that $his <<if $seeRace == 1>>$activeSlave.race <</if>>butt is a little spread even when $he stands upright. What's more, the heels are tall to raise $his butt to the exact level <<if $PC.dick == 0>>a strap-on is at when you wear one and<<else>>your cock is at<</if>> when you stand behind $him. When you start demonstrating the advantages of this to $him, the heels detect that the wearer is being fucked, begin to play a light show, and start playing a heavy beat in time with your thrusts. $He would laugh if $he weren't concentrating on the buttsex. @@.hotpink;$His submission to you has increased.@@ <<set $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -8200,9 +8200,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You order $him to make sure all of $his piercings have rings in them, and then come join you when $he's done. $He enters your office with a mixture of fear and curiosity on $his face. You put $him down on all fours with $his legs spread<<if $activeSlave.belly >= 50000>>, belly brushing the floor<</if>>, <<if canSee($activeSlave)>>blindfold $him, <</if>>and then start clipping little metal weights on short chains to each of $his piercings. Before long, $his nipples are painfully stretched under the tugging, <<if ($activeSlave.dick > 0)>>and the weights up and down $his cock are causing $his considerable discomfort.<<elseif $activeSlave.vagina == -1>>and though $he lacks any external genitalia to weight, you make sure $his ass feels the burn.<<else>>$his pussylips are being pulled downward, and even $his clit is agonizingly tortured.<</if>> You fuck $him thoroughly, pounding $him so the weights swing. $He sobs and begs. @@.hotpink;$He has become more submissive to you.@@ <<set $activeSlave.devotion += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -8323,7 +8323,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> $He's so occupied that $he doesn't <<if canHear($activeSlave)>>hear you<<else>>sense your presence<</if>> until you<<if $PC.dick == 0>> don a strap-on and<</if>> tip $him over face forward. With $him on $his knees, $his dildo-stuffed ass is in the air; $he's still masturbating between $his legs. After a moment's consideration, you slide two exploratory fingers in alongside the dildo. $He gasps and masturbates harder. Thus encouraged, you shove <<if $PC.dick == 0>>the strap-on<<else>>your member<</if>> in alongside the dildo. <<if $activeSlave.voice != 0>>$He screams at the surprise double anal, sobbing and begging,<<else>>$He screams noiselessly at the surprise double anal, waving $his hands in distress,<</if>> but $he doesn't try to stop you and doggedly keeps rubbing. By the time you're finished $his asshole is a gaping hole much bigger than the average pussy. @@.hotpink;$He has become more submissive to you.@@ <<set $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Let $him use a machine">> @@ -8532,7 +8532,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He gets back to $his $activeSlave.skin knees, <</if>> puzzled, and then gasps when $he finds <<if $PC.dick == 0>>your fingers<<else>>your cockhead<</if>> pressing against $his rosebud. You instruct $his imperiously to get on with it, and $he soon understands your intent. $He scrubs back and forth, panting and moaning, as you buttfuck $him in time with $his labors<<if $PC.dick == 0>>, using your other hand to look after yourself<<elseif $PC.vagina == 1>>, using your other hand to schlick your pussy while you pound $him<</if>>. You even carefully scoot along with $him when $he needs to reach new spots. By the time $he's done $his arms and $his anus are very tired. $His submission to you @@.hotpink;has increased.@@ - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -8567,7 +8567,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He gets back to $his $activeSlave.skin knees, <</if>> puzzled, and then gasps when $he finds <<if $PC.dick == 0>>your fingers<<else>>your cockhead<</if>> tracing $his pussy lips. You instruct $him imperiously to get on with it, and $he soon understands your intent. $He scrubs back and forth, panting and moaning, as you fuck $him in time with $his labors<<if $PC.dick == 0>>, using your other hand to look after yourself<<elseif $PC.vagina == 1>>, using your other hand to schlick your pussy while you pound $him<</if>>. You even carefully scoot along with $him when $he needs to reach new spots. By the time $he's done $his arms are very tired and $his legs struggling to hold $him. $His submission to you @@.hotpink;has increased.@@ - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> @@ -8610,7 +8610,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if !canDoVaginal($activeSlave)>>now-slick butthole<<else>>now-slick pussy<<if canDoAnal($activeSlave)>> and then $his relaxing butthole<</if>><</if>><<if $PC.vagina == 1>>, followed by some grinding to coat $his face in your pussyjuice<</if>>. <</if>> $He had fun, though, and $his @@.hotpink;trust in you has increased.@@ - <<= BothVCheck()>> + <<= VCheck.Both()>> <<set $activeSlave.trust += 4>> <</replace>> <</link>><<if ($activeSlave.anus == 0) || ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> @@ -8710,7 +8710,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> You explain that $he will have to find a new way to climax to be a happy little shemale slut. As you do, you push $him against a wall and force $him up on tiptoe so that $his butt is conveniently positioned, and then ram <<if $PC.dick == 0>>a vibrating strap-on<<else>>yourself<</if>> up $his ass. $He squeals and dances against the wall on tiptoe, impaled on your <<if $PC.dick == 0>>fake cock<<else>>member<</if>>. $He doesn't climax to anal then, or the next time you assfuck $him, or the time after that; but some time later a long buttsex session ends when $he gives a little shake and a whimper and dribbles a pathetic squirt of cum from $his still-limp dick. By the end of the week @@.mediumaquamarine;$he's smiling trustingly@@ and offering you $his butt every chance $he gets. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<set $activeSlave.trust += 4>> <<if ($activeSlave.clitSetting != $activeSlave.fetish)>> @@.lightcoral;$He's become a confirmed anal addict.@@ @@ -8755,10 +8755,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He and move over to the couch so you can work lying down. You sit $him on top of you, reversed so $his head is between your legs for a little oral service, and slide a dildo <<if canDoVaginal($activeSlave)>> into $his pussy so you can tease $him at leisure when you have a spare moment. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> up $his butt so you can sodomize $him at leisure when you have a spare moment. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<else>> and sit back down at your desk. You slide $him onto your erect member and carefully secure $him with a few straps so $he can serve as your living cocksleeve as you see to your business. @@ -8782,9 +8782,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.devotion += 4>> <<run repX(500, "event", $activeSlave)>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>> //This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -8795,11 +8795,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You scoop $him up, eliciting whimpers of joy at the impending relief. $He moans with disappointment, however, to find $himself laid unceremoniously across your desk as you return to your work. You surreptitiously set your desk to monitor $his vital signs and gauge $his closeness to orgasm. Whenever you can do so without tipping $his over, you gently run your fingers across a helpless nipple, across $his <<if $activeSlave.vagina == -1>>groin<<else>>moist lips<</if>>,<<if $activeSlave.belly >= 10000>> around the edge of $his <<if $activeSlave.bellyPreg >= 3000>>pregnant <</if>>belly,<<elseif $activeSlave.belly >= 1500>> over the peak of $his <<if $activeSlave.bellyPreg >= 1500>>pregnant <</if>>belly,<</if>> or along $his surgical scars. <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> After so much of this that $he's clearly ready to orgasm at the slightest further touch, you gently massage $his nether lips with a single finger and $he comes spastically, abdominal muscles quivering. $His pussy relaxes and opens naturally; taking the cue, you pick $him up and lower $him, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by moaning <<if $showInches == 2>>inch<<else>>centimeter<</if>>, onto <<if $PC.dick == 0>>a strap-on you put on while playing with $his<<else>>your cock<</if>>. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> After pumping $his helpless torso up and down with your arms, a parody of masturbation with $his helpless body, <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> After so much of this that $he's clearly ready to orgasm at the slightest further touch, you gently massage $his anus with a single finger and $he comes spastically, abdominal muscles quivering. $His sphincter relaxes and opens naturally; taking the cue, you pick $him up and lower $his rectum, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by sobbing <<if $showInches == 2>>inch<<else>>centimeter<</if>>, onto <<if $PC.dick == 0>>a strap-on you put on while playing with $his<<else>>your cock<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> After pumping $his helpless torso up and down with your arms, a parody of masturbation with $his helpless body, <<else>> After so much of this that $he's clearly ready to orgasm at the slightest further touch, you grab $his @@ -9036,9 +9036,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He When you're finally done, $he's fairly tired, but $he manages to give $his <<if $activeSlave.butt > 5>>huge<<elseif $activeSlave.butt > 2>>big<<else>>cute<</if>>, well-fucked butt a little wiggle for you, @@.mediumaquamarine;<<if canSee($activeSlave)>>looking<<else>>smiling<</if>> at you gratefully,@@ as $he skips off to wash. <<set $activeSlave.trust += 4>> <<if _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -9159,7 +9159,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and $he starts humping away. If $he thought you were too tired for sex, you certainly @@.hotpink;impress $him;@@ as you spend an hour exhausting yourself against $his vagina, $he wonders whether $his <<= WrittenMaster()>> is ever too tired to fuck. <<set $activeSlave.devotion += 4>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> <</if>> @@ -9220,7 +9220,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and $he starts humping away. If $he thought you were too tired for sex, you certainly @@.hotpink;impress $him;@@ as you spend an hour exhausting yourself against $his asshole, $he wonders whether $his <<= WrittenMaster()>> is ever too tired to fuck a butt. <<set $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <</if>> @@ -9253,7 +9253,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He @@.hotpink;$He enjoys losing $his cherry to you.@@ <<set $activeSlave.devotion += 4>> <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if ($activeSlave.anus == 0)>> @@.lime;This breaks in $activeSlave.slaveName's virgin ass.@@ @@ -9261,7 +9261,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He @@.hotpink;$He enjoys losing $his butt cherry to you.@@ <<set $activeSlave.devotion += 4>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -9281,9 +9281,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You interrupt $activeSlave.slaveName and make $him lie on a nearby bed. After some preparatory stretching, during which $his frustrated erection flops forlornly around, you manage to get both $his ankles behind $his head. In this position $he manages to resume sucking on the head of $his penis as you slip into $him. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> So contorted, $his <<if canDoVaginal($activeSlave)>> @@ -9414,11 +9414,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if canSee($activeSlave)>>looking with @@.hotpink;adoration@@ and new @@.mediumaquamarine;confidence@@ into your eyes<<else>>gazing with @@.hotpink;adoration@@ and new @@.mediumaquamarine;confidence@@ at your face<</if>>. <<set $activeSlave.devotion += 4, $activeSlave.trust += 4>> <<if _didVaginal == 1 && _didAnal == 1>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>> @@ -9493,11 +9493,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and only then do you help $him back to $his feet. $He drips soap, water, and <<if $PC.dick == 0>>your juices<<else>>ejaculate<</if>>. @@.hotpink;$He has become more submissive.@@ <<if _didVaginal == 1 && _didAnal == 1>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<set $activeSlave.devotion += 4>> <</replace>> @@ -9519,7 +9519,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You patiently explain that you've decided to use $him as an oral and anal slave, and leave $his pussy unfucked. $He's unsurprised, but $he understands your decision. You usually fuck slaves during your inspection, and you don't exempt $him from this, but you do let $him take it easy. Rather than facefucking $him you let $him suckle you gently. Rather that a hard buttfuck, you take $him to the couch and gently spoon $him with your <<if $PC.dick == 0>>strap-on<<else>>dick<</if>> up $his ass while making out with $him and playing with $his nipples. $He understands your forbearance and @@.hotpink;appreciates how kind $his <<= WrittenMaster()>> is.@@ <<set $activeSlave.devotion += 4, $activeSlave.counter.oral++, $oralTotal++>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <<else>> @@ -9543,7 +9543,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He As $he leaves, sore all over, $he's @@.mediumorchid;badly confused@@ that $he was apparently punished for asking questions. <<set $activeSlave.devotion -= 5>> <<if canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $activeSlave.counter.oral++, $oralTotal++>> <<else>> <<set $activeSlave.counter.oral += 4, $oralTotal += 4>> @@ -9646,7 +9646,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> after just a few strokes of your <<if $PC.dick == 0>>strap-on<<else>>dick<</if>> up $his butt. $His <<if ($activeSlave.anus > 2)>>gaping<<elseif ($activeSlave.anus > 1)>>loose<<else>>tight<</if>> ass spasms and tightens with $his climax<<if $PC.dick == 1>>, a wonderful sensation<</if>>. You aren't finished with $him, but $he rubs $himself languidly and enjoys the hard anal reaming more than $he ever has previously. $His devotion to you @@.hotpink;has increased.@@ <<set $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <br><<link "Train $him to be a skilled anal bottom">> @@ -9654,7 +9654,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> $He obeys your orders to keep $his hands off $his dick, but can't hide $his disappointment and frustration. You keep a close watch on $him, and buttfuck $him every chance you get, teaching $him the finer points of taking a <<if $PC.dick == 0>>strap-on<<else>>dick<</if>> up the butt. You focus entirely on your pleasure, teaching $him how to use $his <<if ($activeSlave.anus > 2)>>gaping<<elseif ($activeSlave.anus > 1)>>loose<<else>>tight<</if>> anal ring to extract orgasms from cocks. This experience was hard for $him but has increased $his anal skill. <<= SkillIncrease.Anal($activeSlave, 10)>> - <<= AnalVCheck(9)>> + <<= VCheck.Anal(9)>> <</replace>> <</link>> <<if (($activeSlave.fetish != "buttslut") || ($activeSlave.fetishKnown != 1)) && $activeSlave.prostate > 0>> @@ -9662,7 +9662,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> $He obeys your orders to keep $his hands off $his dick, but can't hide $his disappointment and frustration. You keep a close watch on $him, and fuck $his <<if ($activeSlave.anus > 2)>>gaping<<elseif ($activeSlave.anus > 1)>>loose<<else>>tight<</if>> anus every chance you get, keeping $him desperately aroused and desperately sodomized. After some days of this, $he finally reaches a point of desperate arousal that permits $him to orgasm to prostate stimulation alone. - <<= AnalVCheck(9)>> + <<= VCheck.Anal(9)>> <<if random(1,100) > 50>> <<set $activeSlave.fetishStrength = 10, $activeSlave.fetish = "buttslut", $activeSlave.fetishKnown = 1>> Before $he realizes what's happening, @@.lightcoral;$he's getting aroused at the thought of anal sex.@@ @@ -9719,9 +9719,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You pass $him the pill, and $he continues to weep inconsolably, apologizing all the while, until the drug takes away $his ability to care about anything but getting fucked. When you finish and extract <<if $PC.dick == 0>>yourself from between $his legs<<else>>your cock from $his well-used hole<</if>>, though, you think you can detect a deep sadness in $his eyes that it cannot reach. <<set $activeSlave.devotion += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>> //This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -10048,7 +10048,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> You step into the running water and help $him to $his feet with exaggerated gallantry. $He seems surprised <<if canSee($activeSlave)>>and stares at<<else>>faces<</if>> you through the steam for a moment before looking away with a blush. Before long you have $his back against the shower wall, $his titanic udders<<if $activeSlave.belly >= 5000>> and _belly <<if $activeSlave.bellyPreg >= 3000>>pregnant <</if>> belly<</if>> offering an amusing challenge as they slide soapily between you as you fuck. $He comes in no time at all, and a brief massage of $his huge soapy nipples produces a whimpering aftershock orgasm. <<if canSee($activeSlave)>>$His <<= App.Desc.eyeColor($activeSlave)>> eyes stare straight into yours<<else>>You stare into $his <<= App.Desc.eyeColor($activeSlave)>> eyes<</if>> as $he writhes with overstimulation, @@.mediumaquamarine;$his trust in your stewardship of $his pleasure total.@@ - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal()>><</if>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>> <<if ($activeSlave.vagina == 0) && canDoVaginal($activeSlave)>>//This option will take $his virginity//<<elseif ($activeSlave.vagina == -1) && ($activeSlave.anus == 0) && canDoAnal($activeSlave)>>//This option will take $his anal virginity//<</if>> @@ -10082,11 +10082,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and only then do you help $him back to $his feet. $He drips soap, water, and <<if $PC.dick == 0>>your juices<<else>>ejaculate<</if>>. @@.hotpink;$He has become more submissive.@@ <<if _didVaginal == 1 && _didAnal == 1>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif _didVaginal == 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif _didAnal == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<set $activeSlave.devotion += 4>> <</replace>> @@ -10157,7 +10157,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He leaves your office feeling @@.hotpink;very close to $his <<= WrittenMaster()>> indeed,@@ and seems to have forgotten $his unfucked butthole for now. <<set $activeSlave.devotion += 4>> <<if $activeSlave.vagina > 0 && canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</replace>> <</link>> @@ -10244,12 +10244,12 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He for the rest of the night<<if $PC.vagina == 1>><<if $PC.dick == 1>>; whenever you go soft for a moment, all $he has to do is eat you out, and you're rock hard again<</if>><</if>>. As you move from position to position<<if $activeSlave.belly >= 5000>>, and exploring several unusual ones thanks to $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>><</if>>, $he twists to face you whenever $he can. When $he manages it, $he kisses you when $he can reach your lips, and $he <<if canSee($activeSlave)>>stares deeply into your eyes<<else>>meets your face with $his own<</if>> when $he cannot. $His trust in you @@.mediumaquamarine;has increased.@@ <<set $activeSlave.trust += 4>> <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<set $activeSlave.counter.oral++, $oralTotal++>> <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -10265,7 +10265,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He gets the message: $he's your property and $his desires are entirely subject to your will. $His @@.hotpink;submission@@ to you and @@.gold;fear of you@@ have both increased. <</if>> <<set $activeSlave.devotion += 3, $activeSlave.trust -= 3>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <</if>> @@ -10590,9 +10590,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> touched that you would tell $him something like that so honestly. <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<else>> $He groans with lust as pull $him onto your lap to make out. "Ohh," $he moans as you run your hands across $his @@ -10732,7 +10732,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $he manages to stop $himself from breaking down, and seems to be @@.hotpink;working hard@@ to convince $himself that $he's a girl. <<set $activeSlave.devotion += 4>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <<elseif ($activeSlave.vagina > -1)>> @@ -10749,7 +10749,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He but @@.hotpink;does $his honest best@@ to look grateful. $He knows $he's a sex slave and can't afford to be particular about little things like getting buttfucked. <<set $activeSlave.devotion += 4>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <</if>> @@ -10804,7 +10804,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You agree, on the condition that $he be a good little bitch like $he promised. $He thanks you frantically, following you with mixed relief, gratitude, and deep terror as you lead $him to the surgery. It's a medically simple procedure, but $he's @@.red;retained for recovery@@ for some time, a common precaution in your penthouse where the surgery affects an area that might be reinjured by sexual use without a short break for the curatives to take effect. When the medical equipment verifies that $he can be fucked without pain or danger to $his health, you order $him to come back up to your office. $He is a @@.hotpink;very good little bitch,@@ <<if canDoAnal($activeSlave)>> taking <<if $PC.dick == 1>>a hard buttfuck<<else>>a hard anal fingerfuck<</if>> with apparent enthusiasm and a strong orgasm, though of course $his continued use of a chastity cage conceals almost all the effects. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> enduring all of your teasing without the slightest hint of an erection. Even though $his chastity blocks the use of $his ass, you still focus most of your attention on $his rear for the day the belt comes off. <</if>> @@ -10831,7 +10831,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><br> But $he's to be disappointed. You <<if $PC.dick == 1>>worm a hand down between $his ass and your stomach, and shove a finger up inside $him, alongside your dick<<if $PC.vagina == 1>>, dexterously using the thumb of that hand to stroke your own pussy<</if>><<else>>use the hand that isn't fucking $him to pull one of $his arms around behind $him into a painful joint lock<</if>>. The pain ruins $his building orgasm, and $he cries with frustration and @@.gold;despair@@ as $he realizes that $he won't be getting off today. You force $him to experience this horrible near-release twice more, bringing $him to a terribly uncomfortable state of arousal and then using sudden pain to destroy any chance $he has of getting relief. All the wriggling and jerking around is good for you, though. <<set $activeSlave.trust -= 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <</if>> @@ -10957,7 +10957,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his sore nipples giving $him a jerk as $he does. <</if>> After some continued whining through $his tears, $he gives up and just @@.gold;lets you@@ rape $his sore ass. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> pussy lips. <<if ($activeSlave.vagina > 2)>> @@ -10993,7 +10993,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his sore nipples giving $him a jerk as $he does. <</if>> After some continued whining through $his tears, $he gives up and just @@.gold;lets you@@ rape $his sore vagina. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> When you finally <<if ($PC.dick == 1)>>fill $his <<if canDoAnal($activeSlave)>>butt<<else>>pussy<</if>> with your ejaculate and pull out,<<if $PC.vagina == 1>> the motion releasing a waft of the combined cum and pussyjuice smell of a satisfied futa,<</if>><<else>>shudder with orgasm and withdraw your strap-on,<</if>> $he slumps and turns to go, looking a bit sad for some reason. <<set $activeSlave.trust += 4>> @@ -11159,7 +11159,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He @@.hotpink;$he gets down on $his knees and offers you $his sore butthole again.@@ <</if>> <<set $activeSlave.trust -= 4, $activeSlave.devotion += 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> </span> @@ -11202,15 +11202,15 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He lie down on your desk on $his side in the fetal position. $He clambers up hurriedly and hugs $his knees<<if $activeSlave.belly >= 10000>> as best $he can with $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy <</if>>in the way<</if>>, spinning $himself around on the smooth surface so $his rear is pointing right at you. You stand up and pull $him over, $his $activeSlave.skin skin sliding across the cool glass desktop, until $his <<if canDoAnal($activeSlave) && canDoVaginal($activeSlave)>> butt is right at the edge of the desk. You warm yourself up with a pussy fuck before shifting your attention to $his neglected asshole. - <<= BothVCheck(3)>> + <<= VCheck.Both(3)>> When you finish, you <<elseif canDoAnal($activeSlave)>> butt is right at the edge of the desk. - <<= AnalVCheck(3)>> + <<= VCheck.Anal(3)>> You give it a good fuck and then <<elseif canDoVaginal($activeSlave)>> pussy is right at the edge of the desk. - <<= VaginalVCheck(3)>> + <<= VCheck.Vaginal(3)>> You give it a good fuck and then <<else>> mouth is right at the edge of the desk. You give it a good fuck and then @@ -11265,7 +11265,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> under the desk as an anal cocksleeve for as long as you feel like keeping <<if $PC.dick == 1>>your penis lodged up a compliant butthole<<else>>the happy buttslut trapped under there<</if>>. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> $He climaxes the instant your <<if $PC.dick == 1>>dickhead<<else>>strap-on<</if>> squeezes between $his <<if $activeSlave.butt < 2>> @@ -11380,10 +11380,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> It's $his butt you're fucking, but that doesn't disrupt $his fantasy. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> $He's already pregnant, but that doesn't disrupt $his fantasy of being even more pregnant. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<else>> join you on the couch. <<if $PC.dick == 1>>You orgasm inside $him promptly, and then tell $him you'll be leaving your seed inside $him to do its work while you have $him again.<<else>>You use a strap-on with a fluid reservoir, and you trigger it promptly, releasing a gush of warm fluid into $him. You tell $him you'll be leaving it inside $him to do its work while you have $him again.<</if>> $He gasps at the appeal of the idea and grinds $himself against you hungrily. @@ -11393,10 +11393,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> It's $his butt you're fucking, but that doesn't disrupt $his fantasy. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> $He's eager to get pregnant and intends to put $his pussy to use. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <</if>> <<case "dom">> @@ -11464,7 +11464,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> You tell $him that $he deserves a way to get off for coming to tell you rather than breaking the rules. For the rest of the week, $he can come to you and offer you $his <<if ($activeSlave.vagina > 3)>>hopelessly gaped pussy<<elseif ($activeSlave.vagina > 2)>>loose pussy<<elseif ($activeSlave.vagina > 1)>>nice pussy<<else>>tight pussy<</if>>; $he will be allowed to masturbate while you fill $him with cum. $He nods through $his tears and <<if $activeSlave.belly >= 10000>>struggles to get<<else>>hurriedly gets<</if>> up on your desk, lying on $his side and using one hand to spread $his buttocks apart while the other is poised to touch $himself. $He starts crying a little with relief as $he feels you slowly insert <<if $PC.dick == 0>>a spurting strap-on<<else>>your cock<</if>> into $his spasming cunt. $He masturbates furiously, not even pausing after $his first orgasm; $his acceptance of sexual slavery @@.hotpink;has increased.@@ - <<= VaginalVCheck(5)>> + <<= VCheck.Vaginal(5)>> <<set $activeSlave.devotion += 4>> <<if ($activeSlave.fetish == "pregnancy") && ($activeSlave.fetishKnown == 1)>> <<set $activeSlave.fetishStrength += 4>> @@ -11482,7 +11482,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> You tell $him that $he deserves a way to get off for coming to tell you rather than breaking the rules. For the rest of the week, $he can come to you and offer you $his <<if ($activeSlave.anus > 3)>>hopelessly gaped rectum<<elseif ($activeSlave.anus > 2)>>big slit of an asspussy<<elseif ($activeSlave.anus > 1)>>nice asspussy<<else>>tight asshole<</if>>; $he will be allowed to masturbate while you buttfuck $him. $He nods through $his tears and <<if $activeSlave.belly >= 10000>>struggles to get<<else>>hurriedly gets<</if>> up on your desk, lying on $his side and using one hand to spread $his buttocks apart while the other is poised to touch $himself. $He starts crying a little with relief as $he feels you slowly insert <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> into $his spasming rectum. $He masturbates furiously, not even pausing after $his first orgasm; $his acceptance of sexual slavery @@.hotpink;has increased.@@ - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <<set $activeSlave.devotion += 4>> <<if ($activeSlave.fetish == "buttslut") && ($activeSlave.fetishKnown == 1)>> <<set $activeSlave.fetishStrength += 4>> @@ -11524,7 +11524,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He rolls onto $his face to hump $himself against $his hand, against the desk. <</if>> <<if $PC.dick == 0>>After the momentary pause of your climax, you<<if $PC.vagina == 1>> use a little manual stimulation of your pussy to force yourself to total hardness again and<</if>> resume thrusting<<else>>Your cum leaks out of $his used cunt and onto $his working hand<</if>>; $his acceptance of sexual slavery @@.hotpink;has increased.@@ - <<= VaginalVCheck(5)>> + <<= VCheck.Vaginal(5)>> <<elseif canDoAnal($activeSlave)>> For the rest of the week, $he can come to you and offer you $his <<if ($activeSlave.anus > 3)>>hopelessly gaped rectum<<elseif ($activeSlave.anus > 2)>>big slit of an asspussy<<elseif ($activeSlave.anus > 1)>>nice asspussy<<else>>tight asshole<</if>>; $he will be allowed to masturbate after, but only after, you are finished with $him. $He nods through $his tears and <<if $activeSlave.belly >= 10000>>struggles to get<<else>>hurriedly gets<</if>> up on your desk, lying on $his side and using one hand to spread $his buttocks apart while the other is poised to touch $himself. $He starts crying a little with relief as $he feels you slowly insert <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> into $his spasming rectum. You are not gentle, and despite the anal stimulation $he does not orgasm by the time you <<if $PC.dick == 0>>climax to the vibrations of the strap-on, and the pleasure of buttfucking a bitch<<else>>blow your load in $his ass<</if>>. $He's so eager to get off $he doesn't bother to move, and just <<if $activeSlave.belly >= 1500>> @@ -11533,7 +11533,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He rolls onto $his face to hump $himself against $his hand, against the desk. <</if>> <<if $PC.dick == 0>>After the momentary pause of your climax, you<<if $PC.vagina == 1>> use a little manual stimulation of your pussy to force yourself to total hardness again and<</if>> resume thrusting<<else>>Your cum leaks out of $his used backdoor and onto $his working hand<</if>>; $his acceptance of sexual slavery @@.hotpink;has increased.@@ - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <<else>> For the rest of the week, $he can come to you and politely ask to <<if $PC.dick == 1>>suck you off<<else>>eat you out<</if>>; $he will be allowed to masturbate after, but only after, you are satisfied. $He nods through $his tears and <<if $activeSlave.belly >= 300000>> @@ -11593,17 +11593,17 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He The stimulation of the milking has $his soaking wet, and $he whimpers with pleasure as you enter $his sopping pussy. $He's so wet that $his plentiful vaginal secretions make it <<if canDoAnal($activeSlave)>> very easy for you to switch <<if $PC.dick == 0>>your strap-on<<else>>your dick<</if>> to the cow's butt. - <<= BothVCheck()>> + <<= VCheck.Both()>> <<else>> clear that $he needs a second round. - <<= VaginalVCheck(2)>> + <<= VCheck.Vaginal(2)>> <</if>> <<elseif ($activeSlave.chastityVagina)>> This milk cow's vagina is protected by a chastity belt, but $his butthole isn't. You fuck it<<if $PC.dick == 0>> with a strap-on<</if>> instead as $he bucks and grinds against the chair. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> Perversely, this milk cow has no pussy, so you spit on $his ass and sodomize $his<<if $PC.dick == 0>> with a strap-on<</if>> instead as $he bucks and grinds against the chair. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> When $he comes, the milkers detect $his orgasm to your fucking and shunt the milk into different reservoirs. Though you've never been able to taste much difference, there's a belief out there that 'milk-cum', the squirts of milk a slave milk $girl produces when climaxing with $his <<= WrittenMaster()>>, have special aphrodisiac powers. @@.yellowgreen;It can be sold at a special premium.@@ Naturally, @@.hotpink;$his devotion to you has also increased.@@ <</replace>> @@ -11616,14 +11616,14 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $activeSlave.slaveName obeys <<if $activeSlave.devotion > 20>>without hesitation<<else>>hesitantly<</if>> when you order $him to kneel next to your desk the next time $he tries to go to the milkers. $His equanimity is severely tested over the next hours as you ignore $him. The occasional glance at $him shows $him growing increasingly frantic as $his breasts grow heavier and $his nipples <<if $activeSlave.nipples != "fuckable">>get prouder<<else>>begin to prolapse<</if>>. <<if $activeSlave.preg > $activeSlave.pregData.normalBirth/1.33>>Soon, $his child<<if $activeSlave.pregType > 1>>ren<</if>>'s kicking is forcing milk out of $his swollen breasts.<</if>> Eventually, the slight rising and falling of $his ribcage as $he inhales and exhales induces enough motion in $his overfull breasts that milk spurts out of $him with each breath. Satisfied that $he's ready, you<<if $PC.dick == 0>> don a strap-on and<</if>> lead the whimpering, dripping slave out to a public street. Here, you hold $him upright so you can fuck $him standing. When $he finally comes through the pain of $his overfull udders, you reach forward and squeeze $him so that $he screams in pain and relief, spraying jets of milk. $He continually aftershock orgasms as you continue pounding. You offer $his breasts to the growing crowd, many of whom come forward to taste $his cream. <<if !canDoVaginal($activeSlave)>> You fuck $his butt until they've sucked $him empty. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<if !canDoAnal($activeSlave)>> You fuck $his pussy until they've sucked $him empty. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> You fuck $his pussy and ass, one after the other, until they've sucked $him empty. - <<= BothVCheck()>> + <<= VCheck.Both()>> <</if>> <</if>> @@.hotpink;$His submission to you has increased@@ and the @@.green;public certainly appreciated the service.@@ @@ -11678,10 +11678,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.vagina++>> $He'll eventually realize that $his @@.lime;virginity was taken@@ while $he was distracted by $his breasts. <</if>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <<else>> the pain in $his cunt as you continue to abuse it<<if $activeSlave.anus == 0>><<set $activeSlave.anus++>>, and that $he is @@.lime;no longer a virgin@@<</if>>. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<set $activeSlave.trust -= 4>> <</replace>> @@ -11838,7 +11838,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> <<set $activeSlave.counter.oral += 5, $oralTotal += 5, $activeSlave.counter.publicUse += 5>> <</if>> - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <</replace>> <</link>> <</if>> @@ -11876,9 +11876,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> $He's sore, so you spoon $his<<if $activeSlave.belly >= 5000>> <<if $activeSlave.bellyPreg >= 3000>>gravid<<else>>rounded<</if>> body<</if>> gently in bed, fucking $him slowly to sleep. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $He falls asleep with a serene expression on $his face. @@.mediumaquamarine;$His trust in you has increased.@@ <<set $activeSlave.trust += 4>> @@ -11930,9 +11930,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He hard and fast, doggy style. $He's clearly got a lot of experience, so $he takes the pounding well. Before long $he's happily moaning and begging, pushing $himself back into you<<if $PC.vagina == 1>> and using a hand thrust back between $his own legs to stimulate your pussy<</if>>. You thrust deep inside $him. $He thanks you and wishes you a happy millenary. @@.mediumaquamarine;$He has become much more trusting@@ of $his place with you. <<set $activeSlave.trust += 10>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>> @@ -11961,9 +11961,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.devotion += 10, $activeSlave.counter.oral += ($slaves.length*2), $oralTotal += ($slaves.length*2)>> <<set $slaves.forEach(function(s) { if (s.ID != $activeSlave.ID) { s.counter.oral++; } })>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>> @@ -12042,13 +12042,13 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You bake a simple cake while patiently explaining birthdays. $He slowly remembers, and <<if canSee($activeSlave)>>looks repeatedly at the date display<<else>>focuses intently on the date as $he repeats it to $himself<</if>> to ingrain $his birthday back in $his mind. When the cake is done, you quickly dust it with confectionary sugar, stand a hot wax candle in the middle of it, and invite $him to think of a wish and blow it out. $He sits on your lap and the two of you take turns feeding each other warm cake. When the cake is gone $he gets up to do the dishes and you turn to go. As you go, $he asks <<if ($activeSlave.lips > 70)>>through $his massive dick-sucking lips, <<elseif ($activeSlave.lipsPiercing+$activeSlave.tonguePiercing > 2)>>through $his inconvenient oral piercings, <</if>>"<<Master>>, may I tell you what my wi<<sh>> wa<<s>>?" You nod, and $he kneels on the kitchen chair with $his eyes closed, <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> $his hands spreading $his buttocks; $his pussy moist and inviting and $his anus begging for penetration. "Take me, <<Master>>." - <<= BothVCheck()>> + <<= VCheck.Both()>> <<elseif canDoVaginal($activeSlave)>> $his hands spreading $his buttocks; $his pussy moist and inviting. "Take me, <<Master>>." - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> $his hands spreading $his buttocks, and $his mouth open. "Butt<<s>>e<<x>>, <<Master>>." - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> hands to $his breasts, and mouth wide open. "To ta<<s>>te you, <<Master>>." <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -12152,7 +12152,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He stiff prick.<<if $activeSlave.preg > $activeSlave.pregData.normalBirth/2>> You move your hands under $him to better support $his <<if $activeSlave.bellyPreg >= 3000>>gravid bulk<<else>>distended body<</if>>.<</if>> $He gasps in pain as you press past $his sore pussylips, <</if>> but before long $he's grinding against you with $his back propped against the wall, using the embrace of $his strong legs to provide the power for a vigorous fuck. When $he finally slides down the wall to stand again, a look of @@.hotpink;profound pleasure@@ on $his face, $he lets you know that $he understands your meaning and that $he'll put up with sore petals, since $his <<= WrittenMaster()>> prefers $him that way. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> @@ -12223,7 +12223,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> $He opens $his mouth, closes it again, grunts at the burning sensation of your rough use of $his poor ass, and then shuts up. You ask $him if $he's sure $he doesn't have anything to say, and $he makes $his one verbal comment of the day: "No, <<Master>>." $He understands the lesson here: fail to @@.hotpink;conform,@@ @@.gold;get assraped.@@ It's as simple as that. <<set $activeSlave.devotion += 3, $activeSlave.trust -= 3>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his virginity//<</if>> <</if>> @@ -12271,7 +12271,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> $He opens $his mouth, closes it again, groaning at the sensation of your rough use of $his body, and then stops trying. You ask $him if $he's sure $he doesn't have anything to say, and $he lets off an orgasmic moan. There's @@.hotpink;no need to talk@@ when your owner is @@.mediumaquamarine;fucking your brains out.@@ <<set $activeSlave.devotion += 3, $activeSlave.trust += 3>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</replace>> <</link>><<if ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> <</if>> @@ -12371,9 +12371,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> lest you misunderstand. You could hold $him down and fuck $him, and you do. <<if canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<else>> "Plea<<s>>e, would you hold me down and <<if $PC.dick == 1>>fuck my throat<<else>>grind again<<s>>t my fa<<c>>e<</if>>, <<Master>>?" $He drapes $himself submissively @@ -12400,9 +12400,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if (canDoAnal($activeSlave) || canDoVaginal($activeSlave))>> "Plea<<s>>e, would you fuck me in public, <<Master>>?" $He edges towards the door, lest you misunderstand. You could fuck $him in public, and you do. <<if canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<else>> "Plea<<s>>e, may I <<if $PC.dick == 1>>give you a blowjob<<if $PC.vagina == 1>> and <</if>><</if>><<if $PC.vagina == 1>>eat you out<</if>> in public, <<Master>>?" $He edges towards the door, lest you misunderstand. You could <<if $PC.dick == 1>>give you a blowjob<<if $PC.vagina == 1>> and <</if>><</if>><<if $PC.vagina == 1>>eat you out<</if>> in public, and you do. @@ -12411,7 +12411,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<case "buttslut">> <<if canDoAnal($activeSlave)>> "Plea<<s>>e, would you fuck my butt, <<Master>>?" $He turns halfway and shakes $his rear enticingly, lest you misunderstand. You could fuck $his butt, and you do. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> "Plea<<s>>e, would you play with my butt, <<Master>>?" $He turns halfway and shakes $his rear enticingly, lest you misunderstand. You could play with $his butt, and you do, managing intercourse several ways without penetrating $him. <</if>> @@ -12440,9 +12440,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if canDoVaginal($activeSlave) || canDoAnal($activeSlave)>> "Plea<<s>>e, would you <<if $PC.dick == 1>>fill me with your <<s>>eed<<else>>fuck me<</if>>, <<Master>>?" $He reclines on the couch and offers $himself to you, lest you misunderstand. You could <<if $PC.dick == 1>>fill $him with your seed<<else>>fuck $him<</if>>, and you do. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<elseif $activeSlave.pregKnown == 1>> "Plea<<s>>e, would you play with my pregnan<<c>>y, <<Master>>?" $He pokes out $his belly and sways it enticingly, lest you misunderstand. You could play with $his pregnancy, and you do, managing to get off several ways. @@ -12465,9 +12465,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> "Plea<<s>>e, would you fuck my brain<<s>> out, <<Master>>?" $He bounces on $his heels, biting $his lip with anticipation. You could fuck $his brains out, and you do, enjoying the dominant slave's constant sexual one-upmanship. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<set $activeSlave.counter.oral++, $oralTotal++>> <</if>> @@ -12497,9 +12497,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> "Plea<<s>>e, would you rape me, <<Master>>?" $His eyes are hungry. You could rape $him, and you do, throwing $him across the couch and fucking $him so hard $he begs for mercy as $he orgasms. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<set $activeSlave.counter.oral++, $oralTotal++>> <</if>> @@ -12871,52 +12871,52 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You'd like to lift $him up into a standing fuck, but there is so much distended stomach between the both of you that it's impossible so you opt for a position where you can both penetrate $him and continue your work out. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> After a while, you shift positions, freeing your member, and force yourself up $his butt despite the slave's anxious begging. - <<= BothVCheck()>> + <<= VCheck.Both()>> It doesn't take long before you fill $his ass with cum. <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It doesn't take long before you fill $his pussy with cum. <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It doesn't take long before you fill $his ass with cum. <</if>> <<elseif $PC.belly >= 5000>> You'd like to lift $him up into a standing fuck, but you are far too pregnant to manage. Instead, you lie on your back and have $him work your legs as you fuck $him. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> After a while, you lift $him up as high as you can, freeing your member, and then lower $him back down again, forcing yourself up $his butt instead despite the slave's anxious begging. - <<= BothVCheck()>> + <<= VCheck.Both()>> It doesn't take long before you fill $his ass with cum. <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It doesn't take long before you fill $his pussy with cum. <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It doesn't take long before you fill $his ass with cum. <</if>> <<elseif $activeSlave.belly >= 300000>> You'd like to lift $him up into a standing fuck, but even you aren't strong enough to lift $his extreme weight. Instead, you choose to have $him ride you; supporting $his _belly middle is a workout in its own right. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> After a while, you push $him up as high as you can, freeing your member, and then lower $him back down again, forcing yourself up $his butt instead despite the slave's anxious begging. - <<= BothVCheck()>> + <<= VCheck.Both()>> It doesn't take long before you fill $his ass with cum. <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It doesn't take long before you fill $his pussy with cum. <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It doesn't take long before you fill $his ass with cum. <</if>> <<elseif $activeSlave.belly >= 100000>> Once you're hilted, you hoist $him up by the underarms, shifting your stance to handle $his _belly stomach's weight, and hold $him in midair, impaled on your dick. You can't pound $him all that hard in this challenging position, but the effort of holding $him this way forces you to work out hard, producing an excellent sensation.<<if $PC.vagina == 1>> The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of $him.<</if>> <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> After a while, you lift $him up as high as you can, freeing your member, and then lower $him back down again, forcing yourself up $his butt instead despite the slave's anxious begging. - <<= BothVCheck()>> + <<= VCheck.Both()>> It doesn't take long before you fill $his ass with cum. <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It doesn't take long before you fill $his pussy with cum. <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It doesn't take long before you fill $his ass with cum. <</if>> You're going to be feeling this tomorrow. @@ -12924,13 +12924,13 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He Once you're hilted, you bring $his hands up on either side of $his head to grasp your shoulders behind $him, and then scoop $his legs up and hoist $him to rest against your chest, held in midair and impaled on your dick. You can't pound $him all that hard in this challenging position, but the effort of holding $himself this way forces $him to tighten $his muscles down hard, producing an excellent sensation.<<if $PC.vagina == 1>> The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of $him.<</if>> <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> After a while, you lift $him up as high as you can, freeing your member, and then lower $him back down again, forcing yourself up $his butt instead despite the slave's anxious begging. - <<= BothVCheck()>> + <<= VCheck.Both()>> It doesn't take long before you fill $his ass with cum. <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It doesn't take long before you fill $his pussy with cum. <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It doesn't take long before you fill $his ass with cum. <</if>> <</if>> @@ -13200,9 +13200,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> but $he's very aware of it. You tell $him to do $his best to watch, and begin thrusting. $He groans from the awkward position, internal fullness, and sexual confusion. Turned as much as $he can, $he stares, transfixed by the sight of you thrusting into $his body. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck(7)>> + <<= VCheck.Vaginal(7)>> <<else>> - <<= AnalVCheck(7)>> + <<= VCheck.Anal(7)>> <</if>> <br><br> You snake a hand under $him and begin to stimulate $him manually. $He whimpers pathetically, seeing and feeling $himself build towards an inevitable orgasm. You manage $him skillfully, bringing $him to the point of climax before shooting your cum deep inside $him. The internal sensation of heat, the tightening and twitching of your member inside $him, and your obvious pleasure force $him over the edge, and $he comes so hard that $he wriggles involuntarily against you. You release $him, and $he barely manages to catch $himself from collapsing, the motion sending a blob of $his owner's semen running down $his thigh. @@ -13244,9 +13244,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> You tell $him to do $his best to watch, and begin thrusting. $He groans from the awkward position, internal fullness, and sexual confusion. Bent almost in half, $he stares, transfixed by the sight of your penis delving inside $his body. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck(7)>> + <<= VCheck.Vaginal(7)>> <<else>> - <<= AnalVCheck(7)>> + <<= VCheck.Anal(7)>> <</if>> <br><br> You push a hand between the two of you and begin to stimulate $him manually. $He whimpers pathetically, seeing and feeling $himself build towards an inevitable orgasm. You manage $him skillfully, bringing $him to the point of climax before shooting your cum deep inside $him. The internal sensation of heat, the tightening and twitching of your member inside $him, and your obvious pleasure force $him over the edge, and $he comes so hard that $he wriggles involuntarily within your grasp. You drop $him, and $he barely manages to catch $himself on shaking legs, the motion sending a blob of $his owner's semen running down $his thigh. @@ -13375,7 +13375,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $activeSlave.slaveName finds $himself standing in front of you, feeling you roughly using two fingers to finger $his <<if $activeSlave.mpreg == 1>>asspussy<<else>>pussy<</if>>. $He gasps out: "Oh <<Master>>, owner, protector, and father of my children, forgive my <<s>>in<<s>>, ju<<s>>t a<<s>> you forgave my <<s>>i<<s>>ter<<s>> in <<s>>lavery before me. Count not my tran<<s>>gre<<ss>>ion<<s>> again<<s>>t your rule<<s>>, but, rather, the tear<<s>> of my womb. Remember not my iniquitie<<s>> but my willingne<<ss>> to be bred by you. I long to <<s>>erve your <<if $PC.vagina == 1>>futa <</if>>dick, and beg that you will u<<s>>e me and ble<<ss>> my body with your off<<s>>pring. I promi<<s>>e to <<s>>ubmit to you a<<s>> your breeding <<s>>lut all the day<<s>> of my <<s>>ervitude, and to grow heavy with child, again and again." $He moans with relief when $he feels you withdraw your penetrating digits partway through $his recitation, but by the time $he's finished, you've shoved your dick up $his waiting <<if $activeSlave.mpreg == 1>>asshole<<else>>pussy<</if>> and are close so blessing $him with a load of cum. $He @@.hotpink;does $his best@@ to relax and resumes, "Oh <<Master>>..." - <<if $activeSlave.mpreg == 1>><<= AnalVCheck()>><<else>><<= VaginalVCheck()>><</if>> + <<if $activeSlave.mpreg == 1>><<= VCheck.Anal()>><<else>><<= VCheck.Vaginal()>><</if>> <<= knockMeUp($activeSlave, 100, 2, -1, 1)>> <<if ($activeSlave.fetish != "humiliation") && (random(1,100) > 50)>> <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1, $activeSlave.fetishStrength = 10>> @@ -13399,7 +13399,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $activeSlave.slaveName finds $himself standing in front of you, feeling you roughly using two fingers to finger $his pussy. $He gasps out: "Oh <<Master>>, owner and protector, forgive my <<s>>in<<s>>, ju<<s>>t a<<s>> you forgave my <<s>>i<<s>>ter<<s>> in <<s>>lavery before me. Count not my tran<<s>>gre<<ss>>ion<<s>> again<<s>>t your rule<<s>>, but, rather, my tear<<s>> of <<s>>ervi<<c>>e. Remember not my iniquitie<<s>> but my willingne<<ss>> to be raped by you. I long to <<s>>erve your <<if $PC.dick == 0>>pu<<ss>>y<<else>><<if $PC.vagina == 1>>futa <</if>>dick<</if>>, and beg that you will u<<s>>e me and make your dwelling pla<<c>>e within my <<if $activeSlave.vagina == 0>>virgin fold<<s>><<else>>feminine <<s>>lit<</if>>. I promi<<s>>e to <<s>>ubmit to you a<<s>> your vaginal <<s>>lut all the day<<s>> of my <<s>>ervitude." $He moans with relief when $he feels you withdraw your penetrating digits partway through $his recitation, but by the time $he's finished, you've shoved <<if $PC.dick == 0>>a strap-on<<else>>your dick<</if>> up $his waiting pussy. $He @@.hotpink;does $his best@@ to relax and resumes, "Oh <<Master>>..." - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<if ($activeSlave.fetish != "humiliation") && (random(1,100) > 50)>> <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1, $activeSlave.fetishStrength = 10>> $He has come to associate @@.lightcoral;humiliation@@ with sexual fulfillment. @@ -13418,7 +13418,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $activeSlave.slaveName finds $himself standing in front of you, feeling you roughly probe $his ass with two fingers. $He gasps out: "Oh <<Master>>, owner and protector, forgive my <<s>>in<<s>>, ju<<s>>t a<<s>> you forgave my <<s>>i<<s>>ter<<s>> in <<s>>lavery before me. Count not my tran<<s>>gre<<ss>>ion<<s>> again<<s>>t your rule<<s>>, but, rather, my tear<<s>> of anal <<s>>ervi<<c>>e. Remember not my iniquitie<<s>> but my willingne<<ss>> to be a<<ss>>raped by you. I long to <<s>>erve your <<if $PC.dick == 0>>pu<<ss>>y<<else>><<if $PC.vagina == 1>>futa <</if>>dick<</if>>, and beg that you will u<<s>>e me and make your dwelling pla<<c>>e within my butthole. I promi<<s>>e to <<s>>ubmit to you a<<s>> your anal <<s>>lut all the day<<s>> of my <<s>>ervitude." $He moans with relief when $he feels you withdraw your penetrating digits partway through $his recitation, but by the time $he's finished, you've shoved <<if $PC.dick == 0>>a strap-on<<else>>your dick<</if>> up $his loosened ass. $He @@.hotpink;does $his best@@ to relax and resumes, "Oh <<Master>>..." - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<if ($activeSlave.fetish != "humiliation") && (random(1,100) > 50)>> <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1, $activeSlave.fetishStrength = 10>> $He has come to associate @@.lightcoral;humiliation@@ with sexual fulfillment. @@ -13460,7 +13460,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> the couch, telling $him to keep working the dildo with $his hands or suffer another whipping. After $he's had $his ass filled for a good while, $he has no trouble taking a <<if $PC.dick == 0>>strap-on<<else>>real dick<</if>> for the first time, and is by this point too exhausted to do anything but lie there and be a good little anal slave. @@.gold;$He fears you,@@ and @@.lime;$his butthole has been broken in.@@ <<set $activeSlave.trust -= 5, $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> //This option will take $his anal virginity// <<if $activeSlave.vagina == 0>> @@ -13485,11 +13485,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if $activeSlave.trust < 20>> @@.lime;$His butthole has been broken in.@@ <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> @@.lime;$His pussy has been broken in.@@ <<set $activeSlave.vagina = 1>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<set $activeSlave.trust -= 5, $activeSlave.devotion += 3>> <</replace>> @@ -13540,18 +13540,18 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He This can be applied during sex many ways. First, $he sits on the bathroom counter and bends $himself almost double for <<if canDoAnal($activeSlave)>> anal. Your control over the pace is perfected by your grip around $his tiny middle. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> vaginal. Your control over the pace is perfected by your grip around $his tiny middle. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> Finally, $he goes down on all fours for a hard <<if canDoVaginal($activeSlave)>> pounding, doggy style, losing $himself in the intense penetration as you use your hold around $him to give it to $him even harder. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> buttfuck, doggy style, losing $himself in the intense anal as you use your hold around $him to give it to $him even harder. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> By the end $he's tired but @@.mediumaquamarine;confident in $his sexual uniqueness.@@ <<set $activeSlave.trust += 4>> @@ -13593,9 +13593,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>> $activeSlave.slaveName's gown allows you to take $him in a <<if $activeSlave.belly >= 5000>>tight<<else>>close<</if>> lotus position on the cleared table, face to face. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<else>> you and $activeSlave.slaveName enjoy the sights while fooling around. While you'd love to use $him, $his chastity keeps you at bay. @@ -13628,11 +13628,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He you slowly push your cock into $his <<if canDoVaginal($activeSlave)>> pussy; $he's so relaxed from the massage that it slides in easily. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently penetrate $him. $He comes in no time at all. When $he does you happen to be halfway inside $him; $he wraps $his legs around you and pulls you into $his depths. You explode into $him as $he holds you in place with $his vicelike thighs. <<else>> ass; $he's so relaxed from the massage that it slides in easily. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently take $his ass. $He comes in no time at all. When $he does you happen to be halfway inside $him; $his sphincter mercilessly squeezes your head while $his muscular buttocks clench your shaft between them. You explode into $him. <</if>> <</if>> @@ -13650,10 +13650,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You climax repeatedly, mixing your pussy juice with $his sweat all across $his body. <<else>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> You come repeatedly, and before long cum is dripping out of $his pussy as you continue. <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> You come repeatedly, and before long cum is dripping out of $his ass as you continue. <<else>> You come repeatedly, leaving ropes of your cum all across $his sweaty body. @@ -13732,9 +13732,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $he's wet and ready and moans happily as you enter $him. <</if>> <<if ($activeSlave.vagina > -1)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> There's no hesitation or fear at all on $his face when $he <<if canSee($activeSlave)>>sees<<else>>notices<</if>> you're returning $him to your penthouse; @@.mediumaquamarine;$his trust in you has increased.@@ <<set $activeSlave.trust += 4>> @@ -13766,7 +13766,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He lie face-down on the couch<<if $PC.dick == 0>> while you don a strap-on<</if>>. <</if>> $He does doubtfully, only realizing what you intend when $he feels <<if $PC.dick == 0>>the strap-on<<else>>your dickhead<</if>> forcing its way between $his narrow buttcheeks. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He whimpers and moans <<if $activeSlave.belly < 300000>>into the couch<</if>> as you roughly sodomize $him. It's true, $he's pretty androgynous from this angle, especially while $he takes it up the butthole. @@.hotpink;$He has become more submissive to you,@@ but there's @@.gold;some fear there, too.@@ @@ -13802,13 +13802,13 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> leaving $him open for use from behind. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> - <<= BothVCheck(3, 3)>> + <<= VCheck.Both(3, 3)>> <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck(6)>> + <<= VCheck.Vaginal(6)>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck(6)>> + <<= VCheck.Anal(6)>> <</if>> - You're careful to avoid associating pleasure with misbehavior by taking $his cruelly every time $he eats, pinching $his nipples, and slapping $him <<if $seeRace == 1>>$activeSlave.race <</if>> ass as you ride $him. This is so effective that @@.gold;$he learns to obey@@ and @@.orange;loses weight@@ both. + You're careful to avoid associating pleasure with misbehavior by taking $his cruelly every time $he eats, pinching $his nipples, and slapping $his <<if $seeRace == 1>>$activeSlave.race <</if>> ass as you ride $him. This is so effective that @@.gold;$he learns to obey@@ and @@.orange;loses weight@@ both. <<set $activeSlave.trust -= 5, $activeSlave.weight -= 10, $activeSlave.diet = "healthy">> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -13910,7 +13910,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> @@.hotpink;$He has become more submissive.@@ <<set $activeSlave.devotion += 4>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -13978,14 +13978,14 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> $His poor tight pussy can barely take the pounding you're administering. <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if ($activeSlave.anus > 1)>> $His loose butthole can take a hard pounding, so you give it to $him. <<else>> $His poor tight butthole can barely take the pounding you're administering. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $He loses all composure, gasping and panting as the massive weight of $his chest bounces up and down, making an audible clap with each stroke as $his huge tits slap painfully together. Despite this, or perhaps partly because of it, $he begins to orgasm, <<if ($activeSlave.chastityPenis == 1)>> @@ -14062,9 +14062,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He slowly kneels down with you into a comfortable lotus position on the bathroom floor. <</if>> <<if $activeSlave.mpreg == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> Coupling like this, you can't <<if $PC.dick == 0>>scissor<<else>>fuck<</if>> $him all that hard, but that's just fine given <<if $PC.preg >= 5000>> @@ -14100,7 +14100,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> $He's absorbed enough with $his application that $he starts with surprise when you seize $his hips and bend $him over the sink for a quick assfuck. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<if ($activeSlave.amp != 1)>> $He does $his best to brace $himself against the sink, but $his hands are slick from the lotion and $he slides around for a while before $he gives up and accepts that $he's in for an uncomfortable time. <</if>> @@ -14119,7 +14119,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> $He's absorbed enough with $his application that $he starts with surprise when you seize $his hips and bend $him over the sink for a quick assfuck. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<if ($activeSlave.amp != 1)>> $He does $his best to brace $himself against the sink, but $his hands are slick from the lotion and $he slides around for a while before $he gives up and accepts that $he's in for an uncomfortable time. <</if>> @@ -14141,9 +14141,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> $He's absorbed enough with $his application that $he starts with surprise when you seize $his hips and shove $him onto $his _belly stomach for a quick fuck. <<if $activeSlave.mpreg == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<if ($activeSlave.amp != 1)>> $He does $his best to steady $himself atop the squirming mass, but $his hands are slick from the lotion and $he slides around for a while before $he gives up and accepts that $he's in for an uncomfortable time. @@ -14190,7 +14190,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if ($activeSlave.fetish == "buttslut") && ($activeSlave.fetishKnown) == 1>> $He shivers with delight as $he feels $his anal ring stretch to accommodate your <<if $PC.dick == 0>>strap-on<<else>>dick<</if>>. <<set $activeSlave.devotion += 1>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> Fucking a slave with <<if $activeSlave.prostate > 0>>prostate <</if>>stimulation from your <<if $PC.dick == 0>>phallus<<else>>cock<</if>> in $his <<if $seeRace == 1>>$activeSlave.race <</if>>ass makes $him cum with indecent speed. You let $him slide down so $he can finish the other slave with $his mouth while you continue using $his anus. The other slave definitely enjoys $activeSlave.slaveName's moaning into _hisU pussy as you use $activeSlave.slaveName's ass. The hard buttfucking $activeSlave.slaveName is getting keeps $his dick stiff all the way through. @@.hotpink;$His submission to you has increased.@@ <<set $activeSlave.devotion += 4, $activeSlave.counter.penetrative++, $penetrativeTotal++>> <</replace>> @@ -14201,7 +14201,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> $activeSlave.slaveName's hermaphroditic genitalia is a little crammed together; it's busy down there. $He obediently stops fucking so you can maneuver into $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> Having a <<if $PC.dick == 0>>strap-on<<else>>dick<</if>> in $his pussy reduces $his erection a little, so the slave beneath $him helps $his penetration as much as _heU can. It's not the most convenient of fucks, but that's to be expected when a <<= properMaster()>> and two slaves successfully have two separate instances of vaginal intercourse running at once.<<if $PC.vagina == 1>><<if $PC.dick == 1>> You add a third by grabbing a free hand and guiding it to your own pussy; its owner gets the idea and strokes it as best they can.<</if>><</if>> $activeSlave.slaveName's orgasm is general and intense. @@.hotpink;$His devotion to you has increased.@@ <<set $activeSlave.devotion += 4, $activeSlave.counter.penetrative++, $penetrativeTotal++>> <</replace>> @@ -14222,7 +14222,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> Since $activeSlave.slaveName is on top, it's a trivial matter to<<if $PC.dick == 0>> don a strap-on,<</if>> come up behind the fucking slaves, stop $his thrusting for a moment, and insert yourself into $his anus. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<if ($activeSlave.fetish == "buttslut") && ($activeSlave.fetishKnown == 1)>> $He shivers with delight as $he feels $his anal ring stretch to accommodate your <<if $PC.dick == 0>>strap-on<<else>>dick<</if>>. <<set $activeSlave.devotion += 1>> <</if>> @@ -14236,7 +14236,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<EventNameDelink $activeSlave>> <<replace "#result">> Since $activeSlave.slaveName is on top, it's a trivial matter to<<if $PC.dick == 0>> don a strap-on,<</if>> come up behind the fucking slaves, stop $his thrusting for a moment, and insert yourself into $his pussy. $He obediently stops fucking so you can maneuver into $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> Having a <<if $PC.dick == 0>>strap-on<<else>>dick<</if>> in $his pussy reduces $his ability to use $his engorged clit like a penis a little, so the slave beneath $him helps $his penetration as much as _heU can. It's not the most convenient of fucks, but that's to be expected when a <<= properMaster()>> and two slaves successfully have two separate instances of vaginal intercourse running at once. $His orgasm is general and intense. @@.hotpink;$His devotion to you has increased.@@ <<set $activeSlave.devotion += 4, $activeSlave.counter.penetrative++, $penetrativeTotal++>> <</replace>> @@ -14310,7 +14310,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his tight little pussy completely vulnerable. <</if>> As <<if $PC.dick == 1>><<if $PC.vagina == 1>>use manual stimulation of your pussy to get your dick<<else>>stroke yourself<</if>> rapidly back to full mast<<else>>don a strap-on<</if>>, $assistantName opines helpfully, "Hey $activeSlave.slaveName! You're about to get fucked!" The slave reacts by obediently reaching back to spread $his buttocks and relaxing, but $assistantName ruins $his attempt at graceful submission." <<if $PC.title == 1>>Siiir,<<else>>Ma'aaam,<</if>> $he's bluuuushing," $he says tauntingly, and the slave stiffens with renewed embarrassment, not to mention stimulation, as you penetrate $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if $activeSlave.anus > 2>> $his big asspussy practically begging for a pounding. @@ -14320,7 +14320,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his tight little rosebud completely vulnerable. <</if>> As <<if $PC.dick == 1>><<if $PC.vagina == 1>>use manual stimulation of your pussy to get your dick<<else>>stroke yourself<</if>> rapidly back to full mast<<else>>don a strap-on<</if>>, $assistantName opines helpfully, "Hey $activeSlave.slaveName! You're about to get buttfucked!" The slave reacts by obediently reaching back to spread $his buttocks, and relaxes $his anus, but $assistantName ruins $his attempt at graceful anal submission." <<if $PC.title == 1>>Siiir,<<else>>Ma'aaam,<</if>> $he's bluuuushing," $he says tauntingly, and the slave stiffens with renewed embarrassment, not to mention discomfort, as you penetrate $him. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $He keeps licking away, cleaning up the mess you made as $assistantName does everything $he can to make it seem like the slave is pleasuring $him. Partway through, $assistantName sticks out a hand for a high-five from you, producing a gurgle of indignation @@.mediumaquamarine;or perhaps even laughter@@ as $his owner and $his owner's personal assistant program high-five over $his back. <<set $activeSlave.trust += 4, $activeSlave.counter.oral++, $oralTotal++>> @@ -14388,17 +14388,17 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He feminine <</if>> thighs quivering a little from supporting $his body in its perch atop the machine, and from the fullness of $his anus. - <<= AnalVCheck(3)>> + <<= VCheck.Anal(3)>> $He knows this is going to be challenging, and is breathing deeply, doing $his best to stay relaxed. You cannot resist slapping your <<if $PC.dick == 1>>big cock lightly<<else>>lubricated strap-on<</if>> against $his cheek, producing a groan of apprehension. <br><br> You push $him gently backward, letting $him get accustomed to the new angle.<<if $activeSlave.boobs > 2000>> $His monstrous tits spread to either side of $his <<if $activeSlave.belly >= 5000>>_belly <<if $activeSlave.bellyPreg >= 3000>>pregnant <</if>>belly<<else>>now upright torso<</if>>, and you take a moment to play with them as $he prepares $himself.<</if>> <<if canDoVaginal($activeSlave)>> $He gasps as $he feels <<if $PC.dick == 1>>your hot dickhead<<else>>the slick head of your strap-on<</if>> part $his pussylips, no doubt feeling full already. - <<= VaginalVCheck(3)>> + <<= VCheck.Vaginal(3)>> When you're all the way in, the <<if $assistantAppearance == "monstergirl">>dildos in $his butt begin<<else>>dildo in $his butt begins<</if>> to fuck $him, harder and harder, as $assistantName moans happily. The all-encompassing feeling of fullness as $his cunt and ass are fucked to the very limit of their capacities <<else>> $He gasps as $he feels you push a finger up $his already-full butt and pull $his sphincter a bit wider. You withdraw it and replace it with <<if $PC.dick == 1>>your turgid cock<<else>>your strap-on<</if>>; the slave writhes involuntarily, $his body trying to refuse the invasion of yet another phallus. - <<= AnalVCheck(3)>> + <<= VCheck.Anal(3)>> When you're all the way in, the <<if $assistantAppearance == "monstergirl">>dildos alongside your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> in $his butt begin<<else>>dildo alongside your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> in $his butt begins<</if>> to fuck $him, harder and harder, as $assistantName moans happily. The all-encompassing feeling of fullness as $his ass is fucked to the very limit of its capacity <</if>> quickly drives all feminine grace, presence of mind, or really, @@.hotpink;conscious thought out of the poor slave.@@ After begging for mercy for a short while, $he lapses into animal groans, drooling and leaking tears out the corner of $his eyes as you and $assistantName fuck $him into insensibility. When you climax, $assistantName ejaculates, filling the slave's anus with warm fluid. @@ -14473,15 +14473,15 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his rear pointing at you, but hesitates for an instant, unsure of what to do next. You help $him understand by shoving $him down so $his collarbone is resting on the back of the couch and $his ass is at just the right height.<<if $PC.vagina == 1>> You ensure that you're fully hard and get $him in the right frame of mind by grinding the pussy beneath your dick against $him.<</if>> You fuck <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> $his pussy and then $his ass in quick succession, plundering $his holes without much regard for $his pleasure. - <<= BothVCheck()>> + <<= VCheck.Both()>> $He gasps and bucks at all the right parts, and even manages to moan almost authentically when you blow your load up $his butt. <<elseif canDoVaginal($activeSlave)>> $his pussy hard, without much regard for $his pleasure. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> $He gasps and bucks at all the right parts, and even manages to moan almost authentically when you blow your load up deep inside $him. <<else>> $his ass hard, without cruelty but without much concern for $his pleasure, either. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He takes it obediently, and does $his best to act like $he's enjoying being sodomized. <</if>> $He stumbles off to wash, looking oddly proud of $himself. It seems $he got something out of that: @@.mediumaquamarine;a confidence boost,@@ at least. @@ -14523,15 +14523,15 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He forcing $his back to arch in involuntary response, and then grinding $his face into the couch cushions. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> $His cunt isn't all that wet, and $he has cause to regret this, first when you fuck it without mercy, and then when you switch your barely-lubricated dick to $his anus. - <<= BothVCheck()>> + <<= VCheck.Both()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you assrape $him into inelegant, tearful begging for you to take your dick out of $his butt, because it hurts. <<elseif canDoVaginal($activeSlave)>> $His cunt isn't all that wet, and $he has cause to regret this as you waste no time with foreplay. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you rape $him into inelegant, tearful begging for you to take your dick out of $his cunt because it hurts<<if canGetPregnant($activeSlave)>>, followed by desperate pleas to not cum inside $him since it's a danger day<</if>>. <<else>> You spit on $his asshole and then give $him some anal foreplay, if slapping your dick against $his anus twice before shoving it inside $him counts as anal foreplay. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you assrape $him into inelegant, tearful begging for you to take your dick out of $his butt, because it hurts. <</if>> It isn't the first time you've heard that, or the hundredth. @@ -14594,15 +14594,15 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $his rear pointing at you, but hesitates for an instant, unsure of what to do next. You help $him understand by shoving $him down so $his collarbone is resting on the back of the couch and $his ass is at just the right height. You fuck <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> $his pussy and then $his ass in quick succession, plundering $his holes without much regard for $his pleasure. - <<= BothVCheck()>> + <<= VCheck.Both()>> $He gasps and bucks at all the right parts, and even manages to moan almost authentically when you blow your load up $his butt. <<elseif canDoVaginal($activeSlave)>> $his pussy hard, without much regard for $his pleasure. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> $He gasps and bucks at all the right parts, and even manages to moan almost authentically when you blow your load up deep inside $him. <<else>> $his ass hard, without cruelty but without much concern for $his pleasure, either. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He takes it obediently, and does $his best to act like $he's enjoying being sodomized. <</if>> $He stumbles off to wash, @@ -14644,15 +14644,15 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He forcing $his back to arch in involuntary response, and then grinding $his face into the couch cushions. <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> $His cunt isn't all that wet, and $he has cause to regret this, first when you fuck it without mercy, and then when you switch your barely-lubricated dick to $his anus. - <<= BothVCheck()>> + <<= VCheck.Both()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you assrape $him into inelegant, tearful begging for you to take your dick out of $his butt, because it hurts. <<elseif canDoVaginal($activeSlave)>> $His cunt isn't all that wet, and $he has cause to regret this as you waste no time with foreplay. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you rape $him into inelegant, tearful begging for you to take your dick out of $his cunt because it hurts<<if canGetPregnant($activeSlave)>>, followed by desperate pleas to not cum inside $him since it's a danger day<</if>>. <<else>> You spit on $his asshole and then give $him some anal foreplay, if slapping your dick against $his anus twice before shoving it inside $him counts as anal foreplay. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He tries to be brave and relax, but those are contradictory goals and $he manages neither as you assrape $him into inelegant, tearful begging for you to take your dick out of $his butt, because it hurts. <</if>> It isn't the first time you've heard that, or the hundredth. @@ -14779,7 +14779,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> to repetition of "Anal, butt<<s>>e<<x>>, unh, a<<ss>>fucking, <<s>>odomy, um, buttfucking," and so on. Just when the eavesdropping _girlU decides that this has become monotonous and turns to go about _hisU business, $activeSlave.slaveName's voice rises sharply in pitch. "Aaah! "@@.gold;A<<ss>>rape!@@ Oh plea<<s>>e, <<Master>>, ohh, a<<ss>>rape, a<<ss>>rape," followed by much tearful repetition of what's happening to $him, and a final, sad <<if $PC.dick == 1>>"C-creampie,"<<else>>"Gape,"<</if>> in a defeated little voice. <<set $activeSlave.trust -= 2, $activeSlave.devotion += 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <</if>> @@ -14915,7 +14915,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> lips are quivering, to come see you after $he's done here. About an hour later, $he hobbles into your office, and you tell $him to show you $his anus. $His longtime targets for mealtime molestation were not merciful; they weren't stupid enough to damage $him, but that's one well-gaped butthole. You fuck it anyway, and $he's too tired and desensitized to care. Your less trusting slaves carefully consider the rules, and realize that there's a @@.mediumaquamarine;built-in mechanism for correction:@@ if anyone gets too rapey, they can rape them right back. <<set $activeSlave.trust -= 5>> - <<= AnalVCheck(20)>> + <<= VCheck.Anal(20)>> <<if canGetPregnant($activeSlave) && $activeSlave.mpreg == 1>> <<set _sourceSeed = random(0,$slaves.length-1)>> <<for _ress = _sourceSeed + 1; _ress != _sourceSeed; _ress++>> @@ -15068,7 +15068,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> <</if>> and spank $his $activeSlave.skin buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, $activeSlave.slaveName has cried $himself out and is limp in your hands. You pull $him up to face you and give $him your instructions: from now on, $he can come to you and ask you to assrape $him, and masturbate while $he takes <<if $PC.dick == 0>>anal penetration<<else>>cock<</if>>. $He nods through $his tears and flees. In an hour or so, though, $he finds you and haltingly asks you to buttfuck $him. When you pretend indifference, $he offers you $his anus and abjectly begs you to stick <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> up $his butt. Soon, $he's down on all fours, crying a little with mixed shame and anal pain as $he masturbates furiously. - <<= AnalVCheck(5)>> + <<= VCheck.Anal(5)>> <<if ($activeSlave.fetish == "buttslut") && ($activeSlave.fetishKnown == 1)>> <<set $activeSlave.fetishStrength += 4>> @@.lightcoral;$His enjoyment of anal has increased.@@ @@ -15167,7 +15167,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You make a show of considering, and then tell $him that if $he's extra obedient, you might let $him earn a break for $his throat — for now. <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> You tell $him to lie back and spread $his legs, because you're going to give $him a good old fashioned missionary-position pounding. $He does so with unusual obedience<<if $activeSlave.belly >= 5000>>, $his legs hanging off the couch to give you a better angle with $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> in the way<</if>>, and as you're giving $him a thorough pounding, whether out of relief, gratitude, or a desire to put on a good performance, $he certainly seems to be enjoying it more than usual. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> You tell $him to bend over and spread $his ass for you, because if $he doesn't want you going in one end you're going to go in the other. $He does so with unusual obedience, and as you <<if ($activeSlave.anus == 1)>> @@ -15178,7 +15178,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He mercilessly jackhammer $his gaping hole <</if>> $he actively tries to match the rhythm of your thrusts. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> You tell $him that if $he's going to hesitate to use $his mouth when <<if !canDoAnal($activeSlave) && !canDoVaginal($activeSlave)>> @@ -15426,7 +15426,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He tight little pussy <</if>> is already moist in expectation, making entry easy. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> for anal. $He relaxes $his <<if ($activeSlave.anus > 2)>> @@ -15437,7 +15437,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He tight little asshole <</if>> completely, making entry easy. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> Your hands rove, teasing $his $activeSlave.nipples nipples, <<if ($activeSlave.boobs > 1000)>> @@ -15567,9 +15567,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<= knockMeUp($PC, 20, 0, $activeSlave.ID)>> <</if>> <<elseif canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif $activeSlave.boobs >= 1000>> <<set $activeSlave.counter.mammary++, $mammaryTotal++>> <<else>> @@ -15895,7 +15895,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He needy <</if>> channel. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> You're here to rut, not make love, and you give it to $his hard, forcing <<if $activeSlave.voice >= 3>>high squeals<<else>>animal grunts<</if>> out of $him. $He climaxes strongly, and the glorious feeling finishes you as well, bringing rope after rope of your cum jetting into $him. $He groans at the feeling, and as $he <<if $activeSlave.belly >= 5000 || $activeSlave.weight > 190>>slowly <</if>>gets to $his feet $he uses a hand to transfer a <<if canTaste($activeSlave)>>taste<<else>>bit<</if>> of the mixture of your seed and <<if $PC.vagina == 1>>both of your<<else>>$his<</if>> pussyjuice to $his mouth. <<if $activeSlave.belly >= 750000>> "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me... Oh god, it feel<<s>> like I'm going to bur<<s>>t! <<S>>o many... <<Master>> <<s>>ure i<<s>> potent! I hope _heP can handle them all!" $He groans, cradling $his _belly belly and pretending to be forced to the ground by $his pregnancy growing ever larger. "<<Master>>! They won't <<s>>top! Oh... <<S>>o full... I can't <<s>>top con<<c>>eiving!" $He roles onto $his back and clutches $his absurd stomach. "<<S>>o tight! <<S>>o full! <<S>>o Good! I need more! Oh, <<Master>>..." $He may be getting a little too into the fantasy. @@ -15995,7 +15995,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> <<set $activeSlave.counter.oral++, $oralTotal++>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> <</if>> @@ -16473,10 +16473,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He <<if $activeSlave.voice == 0>>tries to groan<<else>>groans<</if>> with anticipation of the coming relief as you slide <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> past $his <<if canDoVaginal($activeSlave)>> pussylips and inside $his womanhood. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> sphincter and inside $his asspussy. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <br><br> It doesn't take long. $His <<if $activeSlave.scrotum == 0>>invisible but overfull balls<<else>>balls tighten and<</if>> shoot cum into $his soft python of a dick, but not a drop appears at its tip. Gasping at the mixed relief and discomfort, $he lets $his butt go and wriggles around to grab $his dick around its base with both hands. $He squeezes it from base to tip to bring out its contents. $He's so huge that $he's able to reach down with $his lips and get $his cockhead into $his mouth, the meat filling it entirely. $He sucks industriously, swallowing $his own load. $He was just trying to relieve the pressure, but the added stimulation brings $him to climax again. Silenced by $his own dickhead, $he shudders deliciously and starts over, wringing more cum into $his own mouth. You change angles, bringing the hard head of <<if $PC.dick == 1>>your own penis<<else>>your phallus<</if>> against $his prostate and forcing an agonizing third climax. @@ -16510,10 +16510,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He and then shove <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> <<if canDoVaginal($activeSlave)>> inside $his cunt. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> up $his butt. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $His cock is so long that it drags along the floor as you pound <<if $activeSlave.belly >= 300000>> @@ -16670,11 +16670,11 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You swing a bucket under $his nipples and milk $him by hand, as though $he were a cow. This isn't exactly what $he had in mind, but the feeling of your hands on $his nipples, tugging the streams of milk out of $him and into the bucket beneath <<if $activeSlave.fetish == "boobs">>brings $his very close to orgasm<<else>>eventually relaxes $his<</if>>. Seeing this, you muse aloud, as though to yourself, that a little farmyard bestiality wouldn't hurt, since there's no one here but you and a dairy cow. Pawing the cow's behind possessively, you finger $him aggressively before deciding on <<if canDoVaginal($activeSlave) && $PC.dick == 1>> a little cow pussy. You walk around behind $him and fuck $him hard enough to shake the drops of milk still clinging to $his sore nipples down and into the bucket below. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> When you're finished, you step away, leaving your cum to run out of $his cunt and down $his thighs, <<elseif canDoAnal($activeSlave) && $PC.dick == 1>> some cow ass. You walk around behind $him and buttfuck $his hard enough to shake the drops of milk still clinging to $his sore nipples down and into the bucket below. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> When you're finished, you step away, leaving your cum to drip out of $his gaped asshole, <<else>> a little cow tongue action. @@ -16884,7 +16884,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You give $him no orders at all, since $his helplessness makes $him <<if $activeSlave.devotion > 20>>cooperation<<else>>consent<</if>> completely unnecessary for what you're planning. $He makes to turn as you come around behind $him, but $he can manage only a partial crane of $his shoulders and neck to <<if canSee($activeSlave)>>see<<else>>figure out<</if>> what you're doing. Seizing $his ankles, you haul $his legs out from under $his boobs and body, and then push $him forward, balancing $his body atop $his tits as though they were an exercise ball. <<if $activeSlave.devotion > 20>>$He giggles at this<<else>>$He struggles a little at the sudden discomfort<</if>>, and tries to steady $himself with $his hands, so you pull them around behind $him and pin $his arms to $his $activeSlave.skin back with one of your hands. You <<if $PC.dick == 1>>shove your dick up<<else>>pull on a strap-on with your other hand and insert it into<</if>> $his defenseless <<if canDoVaginal($activeSlave)>>pussy<<else>>asshole<</if>>. Then you fuck $him. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <br><br> You're physically fit to begin with, and between that and all the practice you get, you pride yourself on your <<if $PC.dick == 1>><<if $PC.vagina == 1>>master level futa skills<<else>>cocksmanship<</if>><<else>>power with a strap-on<</if>>. You can fuck hard, and $activeSlave.slaveName gets fucked hard. Having all of $his weight on $his tits, and being sawed back and forth on top of those tits, is not comfortable. <<if canDoVaginal($activeSlave)>> @@ -17010,7 +17010,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><br> @@.mediumorchid;Sometimes dreams do come true.@@ <br><br> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<set $activeSlave.trust -= 4, $activeSlave.devotion -= 4>> <</replace>> <</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -17093,7 +17093,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You step forward and take gentle hold of the slave's throat, telling $him to get down on $his knees like a good little $desc. You make no threat, but give $him the order in a voice of brass. $He knows what you can do to $him, and hurries to obey, @@.gold;terribly frightened.@@ $His fear is justified. You announce that $he's avoided serious punishment, but $he still needs correction for $his hesitation and insolence. $He's concerned when $he <<if canSee($activeSlave)>>sees<<elseif canHear($activeSlave)>>hears<<else>>feels<</if>> you <<if $PC.dick == 1>>get your dick<<if $PC.vagina == 1>>and pussy<</if>> out<<else>>don a strap-on<</if>>, though $he's distracted by the rapidly accelerating buttfuck $he's getting from the machine. $He tries to offer you $his throat, but $his hopes are dashed when you walk around behind $him, swing a leg over the machine pistoning in and out of $his asshole, and command it to stop for a moment. Then you work <<if $PC.dick == 1>>yourself<<else>>your own dildo<</if>> up $his ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as $activeSlave.slaveName takes double penetration up $his <<if $activeSlave.anus > 2>>gaping anus<<elseif $activeSlave.anus == 2>>big butthole<<else>>poor, abused little butt<</if>>. <<if ($suppository != 0) && ($activeSlave.drugs != "none")>>When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills $his throat, muffling the noise somewhat.<</if>> <<set $activeSlave.trust -= 4>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>> @@ -17315,7 +17315,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He making $him shudder. <</if>> When you're done, you let $him down, and the first thing $he does is spin in your embrace to give you an @@.hotpink;earnest kiss.@@ - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<set $activeSlave.devotion += 4>> <</replace>> <</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>> @@ -17457,10 +17457,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if $PC.dick == 1>> <<if canDoVaginal($activeSlave)>> slide yourself inside $him and start fucking $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> push yourself up $his butt and start fucking $him. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<else>> straddle $his face, riding $his eager mouth while you use your hands on $his <<if canDoVaginal($activeSlave)>>cunt<<else>>hole<</if>>. @@ -17531,7 +17531,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> tight pucker. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He shivers with pleasure as you lower $him onto it and $he feels the pressure <<if $activeSlave.prostate > 0>> against $his prostate. @@ -17762,7 +17762,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He leaving $him to climb down $himself, @@.gold;fearfully@@ watching your receding back as $he gets off the counter, favoring $his battered breasts. <<set $activeSlave.trust -= 4>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -17954,7 +17954,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if ($activeSlave.anus == 0)>> <<set $activeSlave.anus += 1>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<if $activeSlave.dietCum == 1>> <<set $activeSlave.dietCum = 2, $activeSlave.dietMilk = 0>> <</if>> @@ -18059,7 +18059,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.fetishKnown = 1>> <</if>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> Not long after you penetrate $him, $he <<if $activeSlave.balls > 0>> squirts a weak ejaculation onto the couch. @@ -18073,7 +18073,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <br><<link "Rape $him">> <<replace "#result2">> You grab $his hips, getting a good grip, and spear the poor $desc without any hint of mercy. $He <<if $activeSlave.voice > 0>>screams in pain and fear<<else>>sucks in a great sobbing gasp<</if>>, and tries to wriggle away despite $his intention of submitting to your use, but you hold $him in place and rape $his ass. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> $He tries to maintain $his position, crying openly, but eventually slides off $his perch on the couch, pulling $his hole off your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>>. You grab $him by <<if $activeSlave.hLength > 20>>hair<<else>>neck<</if>> and smash $his face into the angle of the couch, leaving $his poor butt completely vulnerable. $He can't see you line up to ream $him again, but $he knows it's coming and cries, quivering. After a while, you haul $him up to $his feet and keep fucking $him, the uncomfortable angle of standing anal forcing new <<if $activeSlave.voice > 0>>squeals<<else>>rasps<</if>> out of $him. You pour degradation into $his ear as you take your pleasure from $his unhappy body, telling $him that $he's your fuckmeat. $He believes you, and when you finally orgasm and let $him slide off your hateful <<if $PC.dick == 1>>penis<<else>>strap-on<</if>>, $he's @@.gold;already terrified@@ of the next time you feel like fucking $him. <<set $activeSlave.trust -= 5>> <</replace>> @@ -18190,7 +18190,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You take your other hand and place a firm but loving grip under $his chin, lifting $his <<= App.Desc.eyeColor($activeSlave)>>-eyed gaze to meet yours before kissing $him again. All the while, you <<if $PC.dick == 1>> fuck $him powerfully, withdrawing your dick almost all the way and then hilting yourself in $his soaked slit. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> trib $him with assurance, grinding your hips against $hers and making $him feel your heat. <<set $activeSlave.counter.vaginal++, $vaginalTotal++>> @@ -18244,7 +18244,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.fetishKnown = 1>> <</if>> <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<set $activeSlave.devotion += 5>> <</replace>> <</link>><<if $activeSlave.vagina == 0>> //This option will take $his virginity//<</if>> @@ -18437,9 +18437,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> as $he struggles to lift $his swollen breasts from the floor. <<if $activeSlave.mpreg == 1>> - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> - <<= VaginalVCheck(10)>> + <<= VCheck.Vaginal(10)>> <</if>> $He <<if $activeSlave.voice > 0>>squeals<<else>>rasps<</if>> with displeasure as you roughly plow $him into $his distended breasts until you cum deep inside $his fertile hole. You return to your desk, leaving $him to sob into $his unwelcome bust as cum pools from $his abused <<if $activeSlave.mpreg == 1>>ass<<else>>pussy<</if>>. $He knows full well what you meant now, and @@.hotpink;lets you have your way@@ with $his body every time you catch $him in a vulnerable moment or complaining about $his tits. By the week's end, scans reveal that your seed has taken root; @@.lime;$he's pregnant.@@ As $his breasts grow to feed $his coming child, $he will likely be too distracted by $his swelling middle to complain about their added weight. <<set $activeSlave.trust -= 5, $activeSlave.devotion += 5>> @@ -18558,7 +18558,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and push three of your fingers into $his mouth. $He gags, surprised, but you shove them in farther, collecting as much spit as you can reach. Then you let $him fall back down again. $He knows what you're going to do, and moans as you slide your fingers in alongside your <<if $PC.dick == 1>>cock<<else>>strap-on<</if>>, taking huge shuddering gasps as $he feels $his sphincter accommodate the abuse. Slowly, you slide your thumb in as well, pushing it around <<if $PC.dick == 1>>your stiff prick<<else>>the unyielding phallus<</if>> until you're holding it as if masturbating. And then you masturbate. Inside $his ass. $He begins to scream, but manages to prevent $himself from resisting. $He does $his desperate best to take your crushing abuse of $his worn-out hole, and collapses when you finally orgasm and let $him go. $He does $his best to offer some sort of @@.hotpink;submissive thanks,@@ but is barely coherent, and crawls off to shower again, $his lewd sphincter pulsing as $he goes. <<set $activeSlave.devotion += 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<EventFetish $activeSlave "buttslut">> <<EventFetish $activeSlave "masochist">> <</replace>> @@ -18584,7 +18584,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> your trusty Head Girl whispers that @@.hotpink;_he2 loves you.@@ $activeSlave.slaveName makes an inarticulate noise of anal distress that probably means @@.hotpink;approximately the same thing.@@ <<set $activeSlave.devotion += 4>> - <<= AnalVCheck(2)>> + <<= VCheck.Anal(2)>> <<if canImpreg($activeSlave, $HeadGirl)>> <<= knockMeUp($activeSlave, 5, 1, $HeadGirl.ID, 1)>> <</if>> @@ -18792,10 +18792,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if $PC.dick == 1 && (canDoVaginal($activeSlave) || canDoAnal($activeSlave))>> <<if canDoVaginal($activeSlave)>> you've decided to fuck $his pussy. $He starts at the sudden vulgarity, even with your cock resting against the soft skin between the bottom of $his vulva and $his anus, and shudders with sudden pleasure as you use a hand to guide yourself inside $his welcoming channel. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> $his ass is yours. $He starts at the sudden vulgarity, even though <<if canHear($activeSlave)>>hearing<<else>>discovering<</if>> that the cock that's pressing against $his butt will be going inside it soon can't be that surprising. $He cocks $his hips obediently, letting you force your dick up $his asshole. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> You take $him standing, <<else>> @@ -18956,10 +18956,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You tell $him not to worry, because you're still pretty wet from the last slave you fucked, so this shouldn't hurt too much. Then you ram your cock <<if $activeSlave.vagina > 0>> inside $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> up $his spasming ass. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $He whines and bucks, but $he's entirely at your mercy. $He doesn't like dicks, and to go by $his facial expression as you piston in and out of $him, this experience isn't going to make $him reconsider. When you fill $him with cum, pull out, and let $him retreat to clean $himself up, $he's relieved to go. <<set $activeSlave.trust -= 5>> @@ -19004,10 +19004,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He turns around and carefully perches $himself on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> letting $his weight slide it inside $his wet pussy. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> letting $his weight push it up $his asshole. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> putting it between $his thighs. <</if>> @@ -19021,10 +19021,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He turns around and sits on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, leaning back against you and making sure all the other slaves who pass by can see <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> where it penetrates $his cunt. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> where it's lodged up $his butt. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> where it's rubbing $him intimately between $his thighs. <</if>> @@ -19033,7 +19033,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<case "buttslut">> <<if canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> turns around and shivers with pleasure as $he hilts $his anal sphincter around the base of <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>. $He bounces on it happily, reaming $his own ass, - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> turns around and shivers with pleasure as $he feels <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>> slip between $his buttcheeks. $He rubs against it, happy to share $his butt with you, <</if>> @@ -19045,7 +19045,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<case "pregnancy">> <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> turns around and lovingly lowers $his pussy onto you. <<if $PC.dick == 1>><<if $activeSlave.pregKnown == 1>>$He's already pregnant, so this isn't a direct satisfaction of $his impregnation fetish, but being fucked while pregnant is almost as good as far as $he's concerned.<<elseif canGetPregnant($activeSlave)>>This might be the moment $he gets pregnant, and $he's quivering with anticipations.<<else>>$He knows $he isn't fertile, but $he's good at fantasizing.<</if>><<else>>Your strap-on might not be able to impregnate anyone, but $he's good at fantasizing.<</if>> $He rides you hungrily, - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<if canImpreg($activeSlave, $PC)>> <<= knockMeUp($activeSlave, 40, 0, -1)>> <</if>> @@ -19057,10 +19057,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He turns around and sits right down on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, eagerly <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> taking it into $his cunt. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> getting it shoved up $his butt. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> squeezing it between $his thighs. <</if>> @@ -19070,10 +19070,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He turns around and hesitantly sits on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, letting <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> it slide into $his cunt. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> it slide up $his butt. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> it slide between $his thighs. <</if>> @@ -19083,10 +19083,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He turns around and carefully perches $himself on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> letting $his weight slide it inside $his wet pussy at an uncomfortable angle. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> letting $his weight push it up $his asshole at an uncomfortable angle. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> putting it between $his thighs at an uncomfortable angle. <</if>> @@ -19100,10 +19100,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<if $activeSlave.fetishKnown == 1>>$He can't really think of how to accommodate the situation to $his own preferred approach to sex,<<else>>$He isn't well versed in how $his own sexual needs might fit into the situation,<</if>> so $he just services you like a good $girl. $He turns around and sits on <<if $PC.dick == 1>>your cock<<else>>the phallus<</if>>, <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> squatting to bounce $his cunt up and down on it. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> squatting to bounce $his butthole up and down on it. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> putting it between $his thighs for some intercrural sex, since $his <<if $activeSlave.vagina > -1>>holes aren't<<else>>hole isn't<</if>> appropriate. <</if>> @@ -19118,10 +19118,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You order $him to sit on your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> and get you off like a good $girl, but not to disturb you while you're working. $He <<if canTalk($activeSlave)>>shuts up immediately<<else>>obediently drops $his hands to $his sides and stops communicating with them<</if>>, and approaches you carefully. Meanwhile, you go back to your tablet, ignoring $him completely. $He gingerly straddles your legs, positioning $his intimate areas directly over the pointing head of <<if $PC.dick == 1>>your erection<<else>>the phallus<</if>><<if $activeSlave.belly >= 5000>>, all while delicately trying to not bump into you with $his <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>><</if>>. Deciding that $he shouldn't use $his hands to guide it, $he lowers $himself slowly, <<if canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> breathing a little harder as $he feels its head spread $his pussylips and then slide inside $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> letting out a breath and relaxing as $he feels its head press past $his sphincter and then all the way up $his butt. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> getting it situated between $his thighs, since that's the best option $he has available. <</if>> @@ -19215,10 +19215,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.counter.oral++, $oralTotal++>> <<elseif canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> pull $him up to the right height and slide your dick inside $him, keeping both of you on your feet so you can take $him standing. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> shove your cock roughly up $his asshole, letting $him struggle a little as $he finds the right angle to take standing anal here. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> slide your stiff prick up between the virgin's thighs for some intercrural sex. <</if>> @@ -19251,10 +19251,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<set $activeSlave.counter.oral++, $oralTotal++>> <<elseif canDoVaginal($activeSlave) && ($activeSlave.vagina > 0)>> giving it to $him. So, you shove $him down to sit on the couch, nudge $his legs apart, kneel between them, and pound $his pussy. You fuck $him so hard that $he doesn't have the attention for further whimsies, and $he accepts - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && ($activeSlave.anus > 0)>> fucking $his butt. So, you shove $him down to kneel on the couch facing away from you, and ram your cock up $his asshole. You assfuck $him so hard that $he doesn't have the attention for further whimsies, and $he accepts - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> $him sucking your dick. So, you shove $him down to sit on the couch and give $him your cock to keep $his mouth occupied, cutting off any further whimsies. $He blows you obediently, accepting <<set $activeSlave.counter.oral++, $oralTotal++>> @@ -19298,7 +19298,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He Finding the situation simply too good to pass up, you wait until $he's not <<if canSee($activeSlave)>>looking at<<else>>paying attention to<</if>> you, and then approach $him from behind. <<if ($activeSlave.fetishKnown == 1) && ($activeSlave.fetish == "buttslut") && canDoAnal($activeSlave)>> $He gasps wantonly as $he feels the familiar sensation of <<if $PC.dick == 1>>your dick<<else>>a strap-on<</if>> infiltrating between $his cheeks and towards $his <<if $activeSlave.anus >= 3>>loose<<elseif $activeSlave.anus >= 2>>relaxed<<else>>tight little<</if>> anus. $He releases $his grip on the constricting clothing that's binding $his thighs together and grinds $his ass back against you, making sure every <<if $showInches == 2>>inch<<else>>centimeter<</if>> of your <<if $PC.dick == 1>>hard member<<else>>phallus<</if>> that will fit gets inside $his asshole. Some time later, the hard pounding dislodges the clothing and it slides down $his legs to gather around $his ankles. @@.hotpink;$He doesn't notice.@@ - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<elseif $activeSlave.energy > 80>> $He's so horny that $he doesn't need any foreplay. Nor does $he get any. You grab $his hips and smack your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> against $his jiggling buttocks a couple of times, making $his bounce with eagerness and frustration at the anticipation of imminent sexual release. Exercising mercy, you pull $his ass back against you and maneuver <<if $PC.dick == 1>>yourself<<else>>your instrument<</if>> inside $him, enjoying $his shiver at the @@.hotpink;satisfaction of $his hopes.@@ The constricting clothes pin $his legs together, and you hold $his arms against $his sides, keeping $his back pressed against your <<if $PC.belly > 1500>> @@ -19311,18 +19311,18 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He muscular chest <</if>> as you take $him. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> <<elseif $activeSlave.trust > 20>> $He relaxes submissively when $he feels you take hold of $his huge ass and slide your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> between $his asscheeks and then inside $his <<if canDoVaginal($activeSlave)>>pussy<<else>>anus<</if>>. $His legs are already in effect bound, by the constricting clothing that's still holding them together, and you enhance the effect by taking hold of $his wrists and hugging $him from behind as you fuck $him, holding $his arms crossed across $his <<if $activeSlave.boobs > 2000>>massive breasts<<elseif $activeSlave.boobs > 300>>boobs<<else>>chest<</if>>. Helpless in your embrace, $he @@.hotpink;relaxes completely and lets it happen.@@ - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal()>><<else>><<= VCheck.Anal()>><</if>> <<else>> $He stiffens fearfully when $he feels you take hold of $his huge ass, but $he knows not to resist. $He stays still as you slide your <<if $PC.dick == 1>>dick<<else>>strap-on<</if>> between $his asscheeks and then inside $his <<if canDoVaginal($activeSlave)>>pussy<<else>>anus<</if>>, trying to angle $his hips to make the standing penetration less uncomfortable. The clothing binds $his legs together, reducing $him to simply sticking $his butt out as best $he can to ease the stroking of your <<if $PC.dick == 1>>cock<<else>>phallus<</if>>, invading $his helpless <<if canDoVaginal($activeSlave)>> cunt. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> asshole. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> When you're done, you extract yourself and stalk off, leaving $him to struggle free<<if $PC.dick == 1>> and try to keep the cum dripping out of $him off $his clothing<</if>>. $He stumbles back to fetch the right size, @@.hotpink;thoroughly fucked.@@ <</if>> @@ -19342,7 +19342,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<link "Clean out $his ass with an enema and fuck it">> <<replace "#result2">> You tell $activeSlave.slaveName that $he forgot to clean one thing in $his office — $himself. As $he looks at you in confusion, you rise from your chair and lightly press $his chest down on your desk. $He lays there obediently, only letting out a gasp as the cold tip of an enema bulb penetrates $his ass. As a result of $his slave diet and daily anal preparation, the insertion of the enema is little more a bit of roleplaying spectacle. When you retrieve the enema from $his rectum you remark, <<if $PC.dick == 0>>as you don a strap-on, <</if>>that you'll need to inspect $his asshole personally with a vigorous assfucking. Soon $activeSlave.slaveName finds $himself being pounded so forcefully that a small pool of drool begins to form beneath $his open mouth, staining the surface of your desk that $he so meticulously cleaned. $He @@.mediumaquamarine;resolves to trust you more in the future,@@ since you took a personal interest in $his cleanliness. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<set $activeSlave.trust += 4>> <</replace>> <</link>><<if $activeSlave.anus == 0>> //This option will take $his anal virginity//<</if>> @@ -19406,9 +19406,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $he <<if canSee($activeSlave)>>looks<<else>>gazes sightlessly<</if>> up at you with @@.hotpink;adoration@@ and a new @@.mediumaquamarine;trust@@ in $his young <<= WrittenMaster($activeSlave)>>. <<set $activeSlave.devotion += 4, $activeSlave.trust += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -19451,9 +19451,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He of your coupling. Judging by the empty look in $his eyes that persists past $his dismissal from your office, $he might @@.gold;not feel any better@@ about the age difference but you've definitely @@.hotpink;fucked $him into compliance.@@ <<set $activeSlave.devotion += 4, $activeSlave.trust -= 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -19571,9 +19571,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $he <<if canSee($activeSlave)>>looks<<else>>gazes sightlessly<</if>> up at you with @@.hotpink;adoration@@ and a new @@.mediumaquamarine;trust@@ in $his aged <<= WrittenMaster($activeSlave)>>. <<set $activeSlave.devotion += 4, $activeSlave.trust += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -19616,9 +19616,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He of your coupling. Judging by the empty look in $his eyes that persists past $his dismissal from your office, $he might @@.gold;not feel any better@@ about the age difference but you've definitely @@.hotpink;fucked $him into compliance.@@ <<set $activeSlave.devotion += 4, $activeSlave.trust -= 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -19711,9 +19711,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He pushes $him over the edge into orgasm, robbing the thrust of $his defense of any gravitas it once had. $He doesn't seem to mind however, choosing to instead wrap up $his remarks by @@.hotpink;blowing you a kiss.@@ <<set $activeSlave.devotion += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> @@ -19982,9 +19982,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He breasts<<if $activeSlave.belly >= 1500>> and _belly belly<</if>> bouncing with every deep thrust upwards. $His small body spasms with the force of $his immense pleasure, and when $he orgasms, you have to wrap your arms beneath $his breasts and pull $him up against you to stop $his limp body from crashing to the ground. Eventually, you lower $him back down onto the ground level, watching with bemusement as $he curls up, breathing heavily from $his exertions. Eventually $he recovers $his composure somewhat, rising from $his stupor to @@.hotpink;blow you a kiss.@@ <<set $activeSlave.devotion += 4>> <<if $activeSlave.belly >= 10000>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</if>> <</replace>> <</link>><<if ($activeSlave.anus == 0) || ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>> @@ -20023,7 +20023,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<replace "#result">> You inform $him that you find shorter slaves easier to abuse, smiling widely as an expression of horror spreads across $his face. This expression soon changes to one of shock and pain as you slap $him open-handed across the face, the sheer force of the strike sending $him reeling. A few slaps later and you have $activeSlave.slaveName on all fours begging for mercy as you punish the cheeks of $his ass with spank after spank. When you suddenly shove <<if $PC.dick == 0>>a dildo<<else>>your cock<</if>> up $his ass $he spasms so harshly from the pain that $he reflexively tries to get away, only to be subdued by the weight and strength of your larger, more powerful form. For the next ten minutes, $he gets beaten and choked if $he offers even token resistance to the brutal anal rape. Soon, tears run down the short length of $his body as $he shakes from the force of each excessive thrust into $his anus. The next time you decide to buttfuck $him, $he's @@.gold;terrified into compliance@@ by the knowledge of how little physical resistance $he can muster against you. <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if $activeSlave.anus == 0>>//This option will take $his anal virginity//<</if>> <</if>> @@ -20071,7 +20071,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> You make love to $him until $he's satisfied, and then carry $him to the shower to wash $him off. Under the warm water, $he @@.mediumaquamarine;stays trustingly close to your naked body,@@ without even thinking about it. <<set $activeSlave.trust += 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if $activeSlave.anus == 0>>//This option will take $his anal virginity//<</if>> <br><<link "Assrape $him">> @@ -20093,7 +20093,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He $He knows $he shouldn't wriggle, that fighting will make it even worse for $him, but you assrape $him so mercilessly that $his body revolts, trying to escape the invading phallus. You have $his arms pinioned securely, so all this struggling does is add to the fun. When you're done, you<<if $PC.dick == 1>> fill $his insides with your cum and<</if>> drop $him, ordering $him to clean $himself up. "Y-ye<<s>> <<Master>>," $he sniffles @@.gold;fearfully,@@ and hurries to obey, a little bent from $his burning backdoor. Only later does $he remember that $he still hasn't gotten off. <<set $activeSlave.trust -= 5>> <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</replace>> <</link>><<if $activeSlave.anus == 0>>//This option will take $his anal virginity//<</if>> <br><<link "Ignore $his pleas">> @@ -20202,9 +20202,9 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> You order $him to get down on all fours and stick $his butt up in the air, a position $he assumes with the practiced efficiency of a veteran sex slave. $He's expecting doggystyle and only lets out a perfunctory moan when you<<if $PC.dick == 0>> don a strap-on and<</if>> mount $his ass from behind. <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> However, $he is caught off guard when you half sit on $his ass while fucking it, using it like an exercise ball as you bounce up and down. $His <<if ($activeSlave.butt > 12)>> @@ -20275,7 +20275,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> and $his well fucked butt lewdly relaxed. @@.hotpink;$He has become more submissive.@@ <<set $activeSlave.devotion += 4>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</replace>> <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> @@ -20343,14 +20343,14 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <<else>> $His poor tight pussy can barely take the pounding you're administering. <</if>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> <<if ($activeSlave.anus > 1)>> $His loose butthole can take a hard pounding, so you give it to $him. <<else>> $His poor tight butthole can barely take the pounding you're administering. <</if>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> $He loses all composure, gasping and panting as the massive weight of $his augmented chest weighs $him down, causing $him to all but collapse against you. Despite this, or perhaps partly because of it, $he begins to orgasm, <<if ($activeSlave.chastityPenis == 1)>> @@ -20382,7 +20382,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> The crowd that surrounds you during this noisy spectacle @@.green;is suitably impressed.@@ <<run repX(1250, "event", $activeSlave)>> - <<= BothVCheck()>> + <<= VCheck.Both()>> <</replace>> <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && canDoAnal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> <</if>> @@ -20734,10 +20734,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He off again, because <<if canDoVaginal($activeSlave) && $activeSlave.vagina != 0>> you're going to <<if $PC.dick>>fuck<<else>>trib<</if>> $his senseless. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave) && $activeSlave.anus != 0>> you're going to fuck $his butt<<if $activeSlave.balls>> until $he cums<</if>>. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> $he's going to <<if $PC.dick>>suck your dick until you cover $him in cum<<else>>eat you out until $he's got your pussyjuice running down $his chin<</if>>. <<set $activeSlave.counter.oral += 1, $oralTotal += 1>> @@ -20857,10 +20857,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He <</if>> <<if canDoVaginal($activeSlave)>> you hilt yourself in $his pregnant pussy and begin pounding. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> you hilt yourself in $his butthole and begin pounding. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> you push them together around your cock and begin pounding. <</if>> @@ -20927,10 +20927,10 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He You let your hand wander downward <<if canDoVaginal($activeSlave)>> and then push down on the base of $his clit with finger and thumb, making $him whimper, before removing your hand and burying your cock inside $him. - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> and circle $his anus with a finger, making $him whimper, before removing your hand and burying your cock inside $him. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> and trace the edge of $his chastity with a finger, making $him whimper, before removing your hand and squeezing $his rear around your cock. <</if>> diff --git a/src/uncategorized/RETS.tw b/src/uncategorized/RETS.tw index 4862e5ae98a333e4d73eba54b956211bc9d7b146..3fba6f0acde72a6c555999d176d20b84967039a9 100644 --- a/src/uncategorized/RETS.tw +++ b/src/uncategorized/RETS.tw @@ -1715,7 +1715,7 @@ $he adds impishly. <<if canHear($subSlave)>>Hearing this<<else>>Realizing your p Beneath _him2, $activeSlave.slaveName shifts uncomfortably at the resumed sex and the extra weight. To relieve $him, you haul $his <<if $activeSlave.relationship > 4>>wife<<else>>lover<</if>> into a more upright position so _he2 can fuck and be fucked while straddling $activeSlave.slaveName's pressed-together thighs. You fuck $subSlave.slaveName just as hard as _he2 was fucking $activeSlave.slaveName, taking your pleasure from _him2 without mercy. Despite this, the sexed-out slave orgasms again. <<if ($PC.dick == 1) && (canPenetrate($subSlave))>>Deciding to really fill $activeSlave.slaveName, you shove $subSlave.slaveName's quivering body off to one side without ceremony, shove yourself inside the $desc on the bottom, and add your cum to the two loads already inside $him.<<else>>You climax yourself, and then stand.<</if>> Pleased, you head off to find more amusement, leaving the sex-stained slaves dozing in each other's arms, @@.hotpink;not thinking for a moment@@ about how profoundly sexual pleasure dominates their lives. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<set $activeSlave.devotion += 4>> <<if canPenetrate($subSlave)>> <<if canImpreg($activeSlave, $subSlave)>> @@ -1741,20 +1741,20 @@ $he adds impishly. <<if canHear($subSlave)>>Hearing this<<else>>Realizing your p <<switch $activeSlave.fetish>> <<case "submissive">> holding the submissive $desc up against the shower wall and giving $him a second reaming. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<case "cumslut">> giving the cumslut a soapy massage as $he <<if $PC.dick == 1>>sucks your cock<<if $PC.vagina == 1>> and <</if>><</if>><<if $PC.vagina == 1>>eats you out<</if>>. <<set $activeSlave.counter.oral += 1>> <<set $oralTotal += 1>> <<case "humiliation">> holding the humiliation slut up against the shower wall so passing slaves can see $him get fucked. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<case "buttslut">> holding the submissive $desc up against the shower wall and giving $him a second anal reaming. - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<case "boobs">> fucking the boob fetishist from behind so you can play with $his nipples, - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<case "pregnancy">> <<if $activeSlave.bellyPreg >= 1500>> massaging the pregnant slut's belly as you fuck $him. @@ -1763,19 +1763,19 @@ $he adds impishly. <<if canHear($subSlave)>>Hearing this<<else>>Realizing your p <<else>> pushing the impregnation slut into a corner and pretending you're knocking $him up. <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<case "dom" "sadist">> holding the sexually aggressive $desc against the wall so $he can push $himself back against you. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<case "masochist">> pushing the pain slut into a corner and spanking $him while you fuck $him. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<default>> pushing the vanilla $girl's back against the wall and kissing $him lovingly. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</switch>> As $activeSlave.slaveName orgasms in your arms, you feel $subSlave.slaveName hug your thighs lightly before starting to <<if $PC.dick == 1>>blow you<<else>>lick your pussy<</if>> _himself2. Afterward, you bring the tired pair back to their bed and get them tucked in. They @@.mediumaquamarine;find the gesture comforting,@@ and are asleep in an instant. - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <<set $activeSlave.trust += 4>> <<set $subSlave.counter.oral++, $subSlave.counter.penetrative++, $subSlave.trust += 4>> <<set $oralTotal++, $penetrativeTotal++>> diff --git a/src/uncategorized/arcade.tw b/src/uncategorized/arcade.tw index 690eb1335dfb15dc1a900c70184408491e3d9b46..b7688d666ae33c69af7a24237a43f9602e85127e 100644 --- a/src/uncategorized/arcade.tw +++ b/src/uncategorized/arcade.tw @@ -5,7 +5,6 @@ <<if $arcadeName != "the Arcade">> <<set $arcadeNameCaps = $arcadeName.replace("the ", "The ")>> <</if>> -<<arcadeAssignmentFilter>> $arcadeNameCaps <<switch $arcadeDecoration>> <<case "Roman Revivalist">> @@ -138,44 +137,6 @@ $arcadeNameCaps <br><br> -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $arcadeSlaves > 0>> - <<arcadeAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$arcadeNameCaps is empty for the moment.<br> // - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($arcade <= $arcadeSlaves) && $arcadeUpgradeFuckdolls == 0>> - ''$arcadeNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $arcadeSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Arcade == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.arcade, passage())>> <br><br>Rename $arcadeName: <<textbox "$arcadeName" $arcadeName "Arcade">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/arcadeReport.tw b/src/uncategorized/arcadeReport.tw index af620cc43c4023d98263d00a24035a95eca628a7..cdac14be5d53faf74d051fd29ae5198d5b9390d9 100644 --- a/src/uncategorized/arcadeReport.tw +++ b/src/uncategorized/arcadeReport.tw @@ -216,7 +216,7 @@ <<if ($arcadeUpgradeFuckdolls == 2)>> <<set $activeSlave = 0, _Age = -1, _FD = -1, _MB = -1, _Con = -1>> <<for _dI = 0; _dI < _DL; _dI++>> - <<if $slaves[$i].sentence == 0>> /* lets not convert slaves we are punishing into Fuckdolls */ + <<if $slaves[$i].sentence == 0>> /* let's not convert slaves we are punishing into Fuckdolls */ <<set $i = $slaveIndices[$ArcadeiIDs[_dI]]>> <<if ($slaves[$i].fetish == "mindbroken")>> <<if ($slaves[$i].fuckdoll == 0)>> diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw index a61e10b75963c3c2d0cd108edff3efce338b07d0..c99e068353f2d3231bd2d0ec310f62f023990776 100644 --- a/src/uncategorized/arcmgmt.tw +++ b/src/uncategorized/arcmgmt.tw @@ -1684,7 +1684,7 @@ Your ''business assistant'' manages the menial slave market. <<else>> Prices are average, so _heM does not make any significant moves. <</if>> -<<silently>><<= MenialPopCap()>><</silently>> +<<run MenialPopCap()>> <</if>> <br> diff --git a/src/uncategorized/arcologyDescription.tw b/src/uncategorized/arcologyDescription.tw index f052a555883e1677997a86bcea61a61db6bea1e1..d46bb83cc103c047de15a967b53fc1b4044ce1fb 100644 --- a/src/uncategorized/arcologyDescription.tw +++ b/src/uncategorized/arcologyDescription.tw @@ -37,7 +37,7 @@ Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<el The entrances of the arcology are guarded by bronze statues of traditional Chinese guardian spirits. <</if>> -<<if (FSDecorLevel(100))>> +<<if FutureSocieties.HighestDecoration() >= 100>> <<setPlayerPronouns>> Outside the main entrance, there is an enormous statue of an idealized <<if ($PC.dick == 1)>><<if ($PC.vagina == 1)>>futanari<<elseif ($PC.boobs == 1)>>shemale<<else>>male<</if>><<else>>female<</if>> figure with several statues of nude slaves at its feet. @@ -139,7 +139,7 @@ Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<el <</if>> <</if>> -<<if (FSDecorLevel(40))>> +<<if FutureSocieties.HighestDecoration() >= 40>> <br> The entryway features the first of $arcologies[0].name's many banks of public screens. <<if $arcologies[0].FSSupremacistDecoration >= 40>> @@ -372,7 +372,7 @@ Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<el <</if>> <</if>> -<<if (FSDecorLevel(60))>> +<<if FutureSocieties.HighestDecoration() >= 60>> <br> The central plaza is a large open atrium lined with banners. <<if $arcologies[0].FSSupremacistDecoration >= 60>> @@ -452,7 +452,7 @@ Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<el <<if $arcologyUpgrade.drones == 1>>The central plaza is a large atrium; a security drone occasionally flies across the open space.<</if>> <</if>> -<<if (FSDecorLevel(80))>> +<<if FutureSocieties.HighestDecoration() >= 80>> There are numerous slaves stationed down on the plaza to greet visitors. <<if $arcologies[0].FSPaternalistDecoration >= 80>> They're intelligent and articulate. diff --git a/src/uncategorized/attendantSelect.tw b/src/uncategorized/attendantSelect.tw index 18e7dd6c10afe581edda308b5f3a01b0d27ae9ec..e9c6661f6128d969d89a1c0b2ce203ca06bc30c5 100644 --- a/src/uncategorized/attendantSelect.tw +++ b/src/uncategorized/attendantSelect.tw @@ -1,7 +1,6 @@ :: Attendant Select [nobr] <<set $nextButton = "Back", $nextLink = "Spa", $showEncyclopedia = 1, $encyclopedia = "Attendant">> -<<showallAssignmentFilter>> <<if ($Attendant != 0)>> <<set $Attendant = getSlave($Attendant.ID)>> <<setLocalPronouns $Attendant>> @@ -13,9 +12,4 @@ <br><br>''Appoint an Attendant from your devoted slaves:'' <br><br>[[None|Attendant Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.spa)>> diff --git a/src/uncategorized/bgSelect.tw b/src/uncategorized/bgSelect.tw index dca3c18ad31bd7c2750199aeb389177e4f3372a8..118ae1a2bb5b47846a6075d0530d4c13761c577a 100644 --- a/src/uncategorized/bgSelect.tw +++ b/src/uncategorized/bgSelect.tw @@ -1,7 +1,6 @@ :: BG Select [nobr] <<set $nextButton = "Back to Main", $nextLink = "Main", $showEncyclopedia = 1, $encyclopedia = "Bodyguard">> -<<showallAssignmentFilter>> <<if ($Bodyguard != 0)>> <<set $Bodyguard = getSlave($Bodyguard.ID)>> <<setLocalPronouns $Bodyguard>> @@ -13,9 +12,4 @@ <br><br>''Appoint a bodyguard from your devoted slaves:'' <br><br>[[None|Bodyguard Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.armory, "Bodyguard Workaround")>> diff --git a/src/uncategorized/brothel.tw b/src/uncategorized/brothel.tw index bb80d9b4f8f0b3b9f8e83dbaf4ea8d5add533c24..5dd2b021612a63395837a60ab941b651785ad08c 100644 --- a/src/uncategorized/brothel.tw +++ b/src/uncategorized/brothel.tw @@ -1,11 +1,10 @@ :: Brothel [nobr] -<<set $nextButton = "Back to Main", $nextLink = "Main", $returnTo = "Brothel", $showEncyclopedia = 1, $encyclopedia = "Brothel", $brothelSlaves = $BrothiIDs.length, $SlaveSummaryFiler = "assignable">> +<<set $nextButton = "Back to Main", $nextLink = "Main", $returnTo = "Brothel", $showEncyclopedia = 1, $encyclopedia = "Brothel", $brothelSlaves = $BrothiIDs.length>> <<if $brothelName != "the Brothel">> <<set $brothelNameCaps = $brothelName.replace("the ", "The ")>> <</if>> -<<brothelAssignmentFilter>> $brothelNameCaps <<switch $brothelDecoration>> <<case "Roman Revivalist">> @@ -206,53 +205,6 @@ Last week this <<BrothelStatistics 1>> <br><br> -<<if $Madam != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a Madam. [[Appoint one|Madam Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $brothelSlaves > 0>> - <<brothelAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$brothelNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($brothel <= $brothelSlaves)>> - ''$brothelNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $brothelSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Brothel == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.brothel)>> <br><br>Rename $brothelName: <<textbox "$brothelName" $brothelName "Brothel">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/brothelReport.tw b/src/uncategorized/brothelReport.tw index 6f372e433b9a4934bb8f18f3d9ce6e27d1a866c2..10be96250b7ce29b91cfc2f074750e12258a7c64 100644 --- a/src/uncategorized/brothelReport.tw +++ b/src/uncategorized/brothelReport.tw @@ -158,7 +158,7 @@ $He uses $slaves[$i].slaveName as an example of how even a huge-balled freak like _him2 can be restored to proper femininity. <<set $madamCashBonus += 0.20>> <<else>> - $He tries to hide $slaves[$i].slaveName, "her" body being notorious for defiance of conventional femininity. + $He tries to hide $slaves[$i].slaveName, 'her' body being notorious for defiance of conventional femininity. <</if>> <<else>> <<if (($slaves[$i].balls > 5) && ($slaves[$i].dick != 0)) || (($slaves[$i].balls > 4) && ($slaves[$i].dick != 0) && ($slaves[$i].prostate > 1))>> diff --git a/src/uncategorized/buildingWidgets.tw b/src/uncategorized/buildingWidgets.tw index 384355f5569d1a8aab4cce98ae075818dc59326d..207dc5f6a51229cb383078cc96494a73c1e3d377 100644 --- a/src/uncategorized/buildingWidgets.tw +++ b/src/uncategorized/buildingWidgets.tw @@ -208,8 +208,8 @@ Selling this sector would relinquish a 4% interest in $arcologies[0].name. Such <</widget>> /% - Call as <<SectorCounts>> - Updates $AProsperityCap, $Sweatshops. +Call as <<SectorCounts>> +Updates $AProsperityCap, $Sweatshops. %/ <<widget "SectorCounts">> @@ -239,9 +239,7 @@ Selling this sector would relinquish a 4% interest in $arcologies[0].name. Such <</for>> <</if>> <<for _i = 8; _i <= 19; _i++>> - <<if $sectors[_i].type == "DenseApartments">> - <<set $AProsperityCap += 10>> - <<elseif $sectors[_i].type == "LuxuryApartments">> + <<if $sectors[_i].type == "LuxuryApartments">> <<set $AProsperityCap += 15>> <<else>> <<set $AProsperityCap += 10>> @@ -256,8 +254,8 @@ Selling this sector would relinquish a 4% interest in $arcologies[0].name. Such <</widget>> /% - Call as <<UpdateOwnership>> - Updates $arcologies[0].ownership. +Call as <<UpdateOwnership>> +Updates $arcologies[0].ownership. %/ <<widget "UpdateOwnership">> diff --git a/src/uncategorized/cellblock.tw b/src/uncategorized/cellblock.tw index 424333eabcf931fea40b22aa14857c8f3b70860e..11897c9de6c846c26126fa65507dc7dac0e693eb 100644 --- a/src/uncategorized/cellblock.tw +++ b/src/uncategorized/cellblock.tw @@ -5,7 +5,6 @@ <<if $cellblockName != "the Cellblock">> <<set $cellblockNameCaps = $cellblockName.replace("the ", "The ")>> <</if>> -<<cellblockAssignmentFilter>> $cellblockNameCaps <<switch $cellblockDecoration>> <<case "Roman Revivalist">> @@ -111,53 +110,6 @@ $cellblockNameCaps <</if>> <br><br> -<<if $Wardeness != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a Wardeness. [[Appoint one|Wardeness Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $cellblockSlaves > 0>> - <<cellblockAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$cellblockNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($cellblock <= $cellblockSlaves)>> - ''$cellblockNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $cellblockSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Cellblock == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.cellblock)>> <br><br>Rename $cellblockName: <<textbox "$cellblockName" $cellblockName "Cellblock">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/clinic.tw b/src/uncategorized/clinic.tw index a7ba5923f44e830088050518c1e6ab29c9f3b72d..a4ca2c6402832211b9e886b1d13142b828cd66be 100644 --- a/src/uncategorized/clinic.tw +++ b/src/uncategorized/clinic.tw @@ -5,7 +5,6 @@ <<if $clinicName != "the Clinic">> <<set $clinicNameCaps = $clinicName.replace("the ", "The ")>> <</if>> -<<clinicAssignmentFilter>> $clinicNameCaps <<switch $clinicDecoration>> <<case "Roman Revivalist">> @@ -140,68 +139,6 @@ $clinicNameCaps <</if>> <br><br> -<<if $Nurse != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a clinical Nurse. [[Appoint one|Nurse Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> - <button class="tablinks" onclick="opentab(event, 'transfer')" id="tab transfer">Transfer from Facility</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $clinicSlaves > 0>> - <<clinicAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$clinicNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($clinic <= $clinicSlaves)>> - ''$clinicNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $clinicSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<div id="transfer" class="tabcontent"> - <div class="content"> - <<if ($clinic <= $clinicSlaves)>> - ''$clinicNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $clinicSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "transferable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Clinic == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<elseif ($tabChoice.Clinic == "remove")>> - <script>document.getElementById("tab remove").click();</script> -<<elseif ($tabChoice.Clinic == "transfer")>> - <script>document.getElementById("tab transfer").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.clinic, true)>> <br><br>Rename $clinicName: <<textbox "$clinicName" $clinicName "Clinic">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/club.tw b/src/uncategorized/club.tw index 2e69d4f5c9f95385189cbbb697e6f5329c0dde19..30ef287ee0ae59dc6feb16777975a22f3c35a517 100644 --- a/src/uncategorized/club.tw +++ b/src/uncategorized/club.tw @@ -5,7 +5,6 @@ <<if $clubName != "the Club">> <<set $clubNameCaps = $clubName.replace("the ", "The ")>> <</if>> -<<clubAssignmentFilter>> $clubNameCaps <<switch $clubDecoration>> <<case "Roman Revivalist">> @@ -250,53 +249,6 @@ $clubNameCaps <<ClubStatistics 1>> <br><br> -<<if $DJ != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a DJ. [[Appoint one|DJ Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $clubSlaves > 0>> - <<clubAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$clubNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($club <= $clubSlaves)>> - ''$clubNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $clubSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Club == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.club)>> <br><br>Rename $clubName: <<textbox "$clubName" $clubName "Club">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/concubineSelect.tw b/src/uncategorized/concubineSelect.tw index b4242ad2b21d37ecee7a40e5c5b7616bf1d00d03..5bc559bd4337a06dd66880b0aa6be1758875a1ae 100644 --- a/src/uncategorized/concubineSelect.tw +++ b/src/uncategorized/concubineSelect.tw @@ -1,7 +1,6 @@ :: Concubine Select [nobr] <<set $nextButton = "Back", $nextLink = "Master Suite", $showEncyclopedia = 1, $encyclopedia = "Concubine">> -<<showallAssignmentFilter>> <<if ($Concubine != 0)>> <<set $Concubine = getSlave($Concubine.ID)>> <<setLocalPronouns $Concubine>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Concubine from your devoted slaves:'' <br><br>[[None|Concubine Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.masterSuite)>> diff --git a/src/uncategorized/coursingAssociation.tw b/src/uncategorized/coursingAssociation.tw index e774b3188ffc25a08a3afa395a058ac16ddeecc1..03276693f817dfb1893463bcd208c156c21ea3bc 100644 --- a/src/uncategorized/coursingAssociation.tw +++ b/src/uncategorized/coursingAssociation.tw @@ -3,13 +3,11 @@ <<set $nextButton = "Back to Main">> <<set $nextLink = "Main">> <<set $returnTo = "Coursing Association">> -<<showallAssignmentFilter>> You are a member of $arcologies[0].name's Coursing Association. Coursing is a Free Cities revival of the old sport of hunting rabbits and hares with sighthounds, with the typically Free Cities amendments that the hares are replaced by newly enslaved people, the sighthounds are replaced by trained slaves, and the killing of the hare is replaced by rape. Truly, a sport of gentlemen. <br><br> The chasing slaves are known as lurchers, the term once used for the sighthounds. They require speed most of all, but must also be able to tackle their quarry; lurchers with the ability and willingness to make a spectacle of molesting the hares can improve their owners' reputations. -<<showallAssignmentFilter>> <<if $Lurcher != 0>> <<= SlaveFullName($Lurcher)>> is assigned to compete as your lurcher. <<else>> @@ -20,16 +18,13 @@ The chasing slaves are known as lurchers, the term once used for the sighthounds <<if $Lurcher != 0>> <br><br>''Fire your Lurcher:'' - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> + <<= App.UI.SlaveList.render([App.Utils.slaveIndexForId($Lurcher.ID)], [], + (slave, index) => App.UI.passageLink(SlaveFullName(slave), 'Retrieve', `$i = ${App.Utils.slaveIndexForId($Lurcher.ID)}`))>> <</if>> <br><br>''Select a slave to course as a Lurcher:'' <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<set $SlaveSummaryFiler = "assignable">> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> +<<= App.UI.SlaveList.slaveSelectionList( + s => $Lurcher.ID !== s.ID && canWalk(s) && (s.assignmentVisible === 1 && s.fuckdoll === 0), + (slave, index) => App.UI.passageLink(SlaveFullName(slave), 'Assign', `$i = ${index}`) + )>> diff --git a/src/uncategorized/dairy.tw b/src/uncategorized/dairy.tw index 5032ffbcf13584e0ed5f7e416711a718d643cd02..dbab451e0032464f0a2c6393fcc7d56413b732d3 100644 --- a/src/uncategorized/dairy.tw +++ b/src/uncategorized/dairy.tw @@ -4,7 +4,6 @@ <<SlaveIDSort $DairyiIDs>> <<set _DL = $DairyiIDs.length, $dairySlaves = _DL>> -<<dairyAssignmentFilter>> <<if $dairyName != "the Dairy">> <<set $dairyNameCaps = $dairyName.replace("the ", "The ")>> <</if>> @@ -500,9 +499,9 @@ $dairyNameCaps <<DairyStatistics 1>> <br><br> +<<set _facility = App.Entity.facilities.dairy>> <<if ($Milkmaid != 0)>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.displayManager(_facility)>> <<if canAchieveErection($Milkmaid) && $Milkmaid.pubertyXY == 1>> <<setLocalPronouns $Milkmaid>> <br> @@ -528,44 +527,6 @@ $dairyNameCaps <</if>> <br><br> -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $dairySlaves > 0>> - <<dairyAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$dairyNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($dairy <= $dairySlaves+_seed)>> - ''$dairyNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $dairySlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Dairy == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.listSJFacilitySlaves(_facility, passage())>> <br><br>Rename $dairyName: <<textbox "$dairyName" $dairyName "Dairy">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw index fd571cf5566b59b161350306d90afb710bd59576..2fc3c52ec65a81687e1016f150049a9c6f22cd24 100644 --- a/src/uncategorized/dairyReport.tw +++ b/src/uncategorized/dairyReport.tw @@ -370,7 +370,7 @@ <<set $slaves[$i].collar = "none", $slaves[$i].choosesOwnClothes = 0, $slaves[$i].clothes = "no clothing", $slaves[$i].vaginalAccessory = "none", $slaves[$i].vaginalAttachment = "none", $slaves[$i].dickAccessory = "none", $slaves[$i].buttplug = "none", $slaves[$i].chastityAnus = 0, $slaves[$i].chastityPenis = 0, $slaves[$i].chastityVagina = 0>> <</if>> <<switch $dairyDecoration>> - <<case "Roman Revivalist" "Aztec Revivalist" "Chinese Revivalist" "Chattel Religionist" "Edo Revivalist" "Arabian Revivalist" "Egyptian Revivalist" "Supremacist" "Subjugationist" "Degradationist">> + <<case "Arabian Revivalist" "Aztec Revivalist" "Chattel Religionist" "Chinese Revivalist" "Degradationist" "Edo Revivalist" "Egyptian Revivalist" "Roman Revivalist" "Subjugationist" "Supremacist">> <<set $slaves[$i].livingRules = "spare">> <<default>> <<set $slaves[$i].livingRules = "normal">> diff --git a/src/uncategorized/djSelect.tw b/src/uncategorized/djSelect.tw index f4a6bf3cfcce042d96fa172fda860d559f846c6a..e84f616be37a1f4d1b6071633a89c4dd743d5b9a 100644 --- a/src/uncategorized/djSelect.tw +++ b/src/uncategorized/djSelect.tw @@ -1,7 +1,6 @@ :: DJ Select [nobr] <<set $nextButton = "Back", $nextLink = "Club", $showEncyclopedia = 1>><<set $encyclopedia = "DJ">> -<<showallAssignmentFilter>> <<if ($DJ != 0)>> <<set $DJ = getSlave($DJ.ID)>> <<setLocalPronouns $DJ>> @@ -13,9 +12,4 @@ <br><br>''Appoint a DJ from your devoted slaves:'' <br><br>[[None|DJ Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.club)>> diff --git a/src/uncategorized/economics.tw b/src/uncategorized/economics.tw index d4cad0118a67f176cf76ea6006b5f88c8d3841ba..17a8703cfde0b40470facd63936f9b4de5c748fc 100644 --- a/src/uncategorized/economics.tw +++ b/src/uncategorized/economics.tw @@ -56,22 +56,22 @@ <body> <div class="tab"> - <button class="tablinks" onclick="opentab(event, 'Arcologies')" id="defaultOpen">Arcologies</button> - <button class="tablinks" onclick="opentab(event, 'Management')">Arcology Management</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Arcologies')" id="defaultOpen">Arcologies</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Management')">Arcology Management</button> <<if $FSAnnounced > 0>> - <button class="tablinks" onclick="opentab(event, 'Societies')">Society Development</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Societies')">Society Development</button> <</if>> <<if $corpIncorporated == 1>> - <button class="tablinks" onclick="opentab(event, 'Corporation')">Corporation Developments</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Corporation')">Corporation Developments</button> <</if>> <<if $secExp == 1>> - <button class="tablinks" onclick="opentab(event, 'Authority')">Authority</button> - <button class="tablinks" onclick="opentab(event, 'securityReport')">Security</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Authority')">Authority</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'securityReport')">Security</button> <</if>> - <button class="tablinks" onclick="opentab(event, 'Reputation')">Reputation</button> - <button class="tablinks" onclick="opentab(event, 'Business')">Personal Business</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Reputation')">Reputation</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Business')">Personal Business</button> <<if ($PC.boobs == 1 && $PC.boobsBonus > 0) || $PC.pregKnown == 1 || $playerAging != 0>> - <button class="tablinks" onclick="opentab(event, 'Personal')">Personal Notes</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Personal')">Personal Notes</button> <</if>> </div> diff --git a/src/uncategorized/fsDevelopments.tw b/src/uncategorized/fsDevelopments.tw index 22c7ada6eaa006024dcc0baae2951aaf3d10a8ab..c11d0e860b302238a95a02f3e3db4d7e5b493bb8 100644 --- a/src/uncategorized/fsDevelopments.tw +++ b/src/uncategorized/fsDevelopments.tw @@ -285,27 +285,27 @@ <<if $secExp == 1>> <<if $slaveWatch == 1>> The Slave Mistreatment Watch helps many slaves, easing your citizens into the paternalist ideals it represents. - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <</if>> <<if $noSubhumansInArmy == 1>> Your army is free of subhumans, further cementing their lower status in the eyes of your citizens. - <<= FSChange("Subjugationist", 2)>> + <<= FutureSocieties.Change("Subjugationist", 2)>> <</if>> <<if $pregExemption == 1>> Pregnant citizens are allowed and encouraged to avoid military service, making their value evident to all citizens. - <<= FSChange("Repopulationist", 2)>> + <<= FutureSocieties.Change("RepopulationFocus", 2)>> <</if>> <<if $eliteOfficers == 1>> Purity in leadership is fundamental in your army, helping eugenics ideals spread in the populace. - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <<if $liveTargets == 1>> Disobedient slaves are used in shooting ranges and military drills as live targets, furthering degradationist ideals. - <<= FSChange("Degradationist", 2)>> + <<= FutureSocieties.Change("Degradationist", 2)>> <</if>> <</if>> @@ -316,7 +316,7 @@ <<if $sectors[_i].type != "Club">> The $sectors[_i].type establishments on the Promenade help develop society. <<set _changed_fs = $sectors[_i].type.replace(" ","")>> - <<= FSChange(_changed_fs, 4)>> + <<= FutureSocieties.Change(_changed_fs, 4)>> <<continue>> <</if>> <</if>> diff --git a/src/uncategorized/genericPlotEvents.tw b/src/uncategorized/genericPlotEvents.tw index b6c5d2fcd87618a3d2d921accf668c57a049b096..71c21c3e27d65cc9b51243bca968a44720e8bc42 100644 --- a/src/uncategorized/genericPlotEvents.tw +++ b/src/uncategorized/genericPlotEvents.tw @@ -24,7 +24,7 @@ Early one morning, you hear convulsive dry heaving coming from one of the bathrooms. On investigation, it seems that $slaves[_genPlot].slaveName woke up feeling terribly nauseous. $He's in no danger, but you've hardly checked $him over before more slaves stagger in. Every one of your slaves on curatives has been struck by the mysterious malady and has @@.red;sickened.@@ <br><br> -It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate Pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel a bit better, but begin to report discomfort in their breasts. Apparently the problem has to do with contamination of the curative production line with A-HGH production reactants. +It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel a bit better, but begin to report discomfort in their breasts. Apparently the problem has to do with contamination of the curative production line with A-HGH production reactants. <br><br> The firm promptly pays @@.yellowgreen;fair compensation@@ for the minor damage to your slaves' health. However, you're left with the matter of the boobs to deal with. Over the week, all your slaves on curatives experience at least a little @@.lime;breast growth,@@ and some gain several cup sizes.<<if $medicalEnema == 1>> Those with bellies full of curative mixture, on the other hand, have not stopped growing yet and won't until they completely absorb their load. They will likely end up @@.lime;sporting enormous tits@@ by the end of this.<</if>> @@ -44,7 +44,7 @@ The firm promptly pays @@.yellowgreen;fair compensation@@ for the minor damage t Early one morning, you hear heaving coming from one of the bathrooms. On investigation, it seems that $slaves[_genPlot].slaveName woke up feeling terribly nauseous. $He's in no danger, but you've hardly checked $him over before more slaves stagger in. Every one of your slaves on breast focused A-HGH has been struck by the mysterious malady and has @@.red;sickened.@@ <br><br> -It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate Pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel much better, and appear positively glowing. However, their breasts swell slightly and their bellies bulge, pointing to the issue being the contamination of the A-HGH production line with fertility agents. +It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel much better, and appear positively glowing. However, their breasts swell slightly and their bellies bulge, pointing to the issue being the contamination of the A-HGH production line with fertility agents. <br><br> The firm promptly pays @@.yellowgreen; a large compensation@@ for potentially ruining your slaves. However, you're left with the matter of all the growing bellies to deal with. Over the week, all of your slaves on breast injections show signs of @@.yellow;early pregnancy,@@ and hyper pregnancy at that, save those who aren't fertile. They just experienced some hip and ass growth. You have no idea how much fertility agent was in the enhancers but you feel they may become a problem if left alone! diff --git a/src/uncategorized/headGirlSuite.tw b/src/uncategorized/headGirlSuite.tw index 8a42b0aac0057103c5a91c9d9fe6502d1343a9c4..00868d6255150c8203caa5dec28af7d26be1846b 100644 --- a/src/uncategorized/headGirlSuite.tw +++ b/src/uncategorized/headGirlSuite.tw @@ -5,7 +5,6 @@ <<if $HGSuiteName != "the Head Girl Suite">> <<set $HGSuiteNameCaps = $HGSuiteName.replace("the ", "The ")>> <</if>> -<<headgirlSuiteAssignmentFilter>> <<set _i = $slaves.findIndex(function(s) { return s.assignment == "live with your Head Girl"; })>> <<if $HeadGirl == 0>> @@ -46,43 +45,6 @@ <</if>> <br><br> -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave to the Head Girl</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Bring the Head Girl's girl out of $HGSuiteName</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $HGSuiteSlaves > 0>> - <<headgirlSuiteAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($slaves.length > $HGSuiteSlaves) && ($HGSuiteSlaves < 1)>> - <<assignmentFilter>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <<else>> - ''Head Girl already has a girl.'' - <</if>> - </div> -</div> - -<<if ($tabChoice.HeadGirlSuite == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.headGirlSuite)>> <br><br>Rename $HGSuiteName: <<textbox "$HGSuiteName" $HGSuiteName "Head Girl Suite">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/hgSelect.tw b/src/uncategorized/hgSelect.tw index 86cd389140391f0d6a426310efb82285aa40204b..3072a46099cb15eafaa6b419efee535991c9b0af 100644 --- a/src/uncategorized/hgSelect.tw +++ b/src/uncategorized/hgSelect.tw @@ -1,7 +1,6 @@ :: HG Select [nobr] <<set $nextButton = "Back to Main", $nextLink = "Main", $showEncyclopedia = 1, $encyclopedia = "Head Girl">> -<<showallAssignmentFilter>> <h1>Head Girl Management</h1> @@ -89,9 +88,4 @@ _HGName <br><br>''Appoint a Head Girl from among your devoted slaves:'' <br><br>[[None|HG Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.headGirlSuite, "HG Workaround")>> diff --git a/src/uncategorized/madamSelect.tw b/src/uncategorized/madamSelect.tw index 2e541d6d7468bdc17895d49d2087d75e29049a24..85f07ad835122415b43b8bb14d877b54a616a1e2 100644 --- a/src/uncategorized/madamSelect.tw +++ b/src/uncategorized/madamSelect.tw @@ -1,7 +1,6 @@ :: Madam Select [nobr] <<set $nextButton = "Back", $nextLink = "Brothel", $showEncyclopedia = 1, $encyclopedia = "Madam">> -<<showallAssignmentFilter>> <<if ($Madam != 0)>> <<set $Madam = getSlave($Madam.ID)>> <<setLocalPronouns $Madam>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Madam from your devoted slaves:'' <br><br>[[None|Madam Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.brothel)>> diff --git a/src/uncategorized/main.tw b/src/uncategorized/main.tw index 40702a3a48979d8b6d9e1470751735ac33f85e56..28935922ea8fdf877f238432e92ca9dbe47191f9 100644 --- a/src/uncategorized/main.tw +++ b/src/uncategorized/main.tw @@ -1,7 +1,5 @@ :: Main [nobr] -<<unset $SlaveSummaryFiler>> -<<resetAssignmentFilter>> <<if $releaseID >= 1000 || $ver.includes("0.9") || $ver.includes("0.8") || $ver.includes("0.7") || $ver.includes("0.6")>> <<if $releaseID >= 1031>> <<elseif $releaseID < 1031>> @@ -114,469 +112,9 @@ __''MAIN MENU''__ //[[Summary Options]]// | //<<if $rulesError>>@@.yellow; WARNING: some custom rules will change slave variables @@<</if>><<link "Re-apply Rules Assistant now (this will only check slaves in the Penthouse)" "Main">><<for _i = 0;_i < _SL;_i++>><<if $slaves[_i].assignmentVisible == 1 && $slaves[_i].useRulesAssistant == 1>><<= DefaultRules($slaves[_i])>><</if>><</for>><</link>>// <</if>> -<<if $useSlaveSummaryTabs == 1>> - <<if $positionMainLinks >= 0>> - <center> - <<= App.UI.View.MainLinks()>> - </center> - <br> - <</if>> - <<set _j = "Back", _k = "AS Dump", _l = "Main">> - - <body> - - <div class="tab"> - <<set _penthouseSlaves = 0>> - <<run Object.keys($JobIDArray).forEach((job) => _penthouseSlaves += $JobIDArray[job].length)>> - <<if $useSlaveSummaryOverviewTab == 1>> - <button class="tablinks" onclick="opentab(event, 'overview')" id="tab overview">Overview</button> - <</if>> - <button class="tablinks" onclick="opentab(event, 'resting')" id="tab resting"> /*leaving resting always on as it changes a lot from week to week. */ - Resting - <<if $JobIDArray['rest'].length > 0>> - ($JobIDArray['rest'].length) - <</if>> - </button> - <<if $JobIDArray['stay confined'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'stay confined')" id="tab stay confined"> - Confined - ($JobIDArray['stay confined'].length) - </button> - <</if>> - <<if $JobIDArray['take classes'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'take classes')" id="tab take classes"> - Students - ($JobIDArray['take classes'].length) - </button> - <</if>> - <<if $JobIDArray['please you'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'please you')" id="tab please you"> - Fucktoys - ($JobIDArray['please you'].length) - </button> - <</if>> - <<if $JobIDArray['whore'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'whore')" id="tab whore"> - Whores - ($JobIDArray['whore'].length) - </button> - <</if>> - <<if $JobIDArray['serve the public'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'serve the public')" id="tab serve the public"> - Public Servants - ($JobIDArray['serve the public'].length) - </button> - <</if>> - <<if $JobIDArray['be a servant'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'be a servant')" id="tab be a servant"> - Servants - ($JobIDArray['be a servant'].length) - </button> - <</if>> - <<if $JobIDArray['get milked'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'get milked')" id="tab milked"> - Cows - ($JobIDArray['get milked'].length) - </button> - <</if>> - <<if $JobIDArray['work a glory hole'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'work a glory hole')" id="tab work a glory hole"> - Gloryhole - ($JobIDArray['work a glory hole'].length) - </button> - <</if>> - <<if $JobIDArray['be a subordinate slave'].length > 0>> - <button class="tablinks" onclick="opentab(event, 'be a subordinate slave')" id="tab be a subordinate slave"> - Subordinate slaves - ($JobIDArray['be a subordinate slave'].length) - </button> - <</if>> - - <button class="tablinks" onclick="opentab(event, 'all')" id="tab all"> - All - <<if _penthouseSlaves > 0>> - <<if $HeadGirl != 0>> - <<set _penthouseSlaves++>> - <</if>> - <<if $Recruiter != 0>> - <<set _penthouseSlaves++>> - <</if>> - <<if $Bodyguard != 0>> - <<set _penthouseSlaves++>> - <</if>> - (_penthouseSlaves) - <</if>> - </button> - </div> - - <div id="overview" class="tabcontent"> - <div class="content"> - <<set $slaveAssignmentTab = "overview">> - <<if def _HG>> - ''__@@.pink;<<= SlaveFullName($HeadGirl)>>@@__'' is serving as your Head Girl<<if $arcologies[0].FSEgyptianRevivalistLaw == 1>> and Consort<</if>>. - <span id="manageHG"><strong><<link "Manage Head Girl" "HG Select">><</link>></strong></span> @@.cyan;[H]@@ - <<set $showOneSlave = "Head Girl">> - <<include "Slave Summary">> - <<elseif (ndef _HG) && ($slaves.length > 1)>> - You have @@.red;not@@ selected a Head Girl<<if $arcologies[0].FSEgyptianRevivalistLaw == 1>> and Consort<</if>>. <span id="manageHG"><strong><<link "Select one" "HG Select">><</link>></strong></span> @@.cyan;[H]@@ - <<elseif (ndef _HG)>> - //You do not have enough slaves to keep a Head Girl// - <</if>> - <br> - <<if def _RC>> - <<setLocalPronouns $slaves[_RC]>> - ''__@@.pink;<<= SlaveFullName($Recruiter)>>@@__'' is working - <<if $recruiterTarget != "other arcologies">> - to recruit girls. - <<else>> - as a Sexual - <<if $arcologies[0].influenceTarget == -1>> - Ambassador, but @@.red;$he has no target to influence.@@ - <<else>> - Ambassador to <<for $i = 0; $i < $arcologies.length; $i++>><<if $arcologies[$i].direction == $arcologies[0].influenceTarget>>$arcologies[$i].name<<break>><</if>><</for>>. - <</if>> - <</if>> - <span id="manageRecruiter"><strong><<link "Manage Recruiter" "Recruiter Select">><</link>></strong></span> @@.cyan;[U]@@ - <<set $showOneSlave = "recruit girls">> - <<include "Slave Summary">> - <<else>> - You have @@.red;not@@ selected a Recruiter. - <span id="manageRecruiter"><strong><<link "Select one" "Recruiter Select">><</link>></strong></span> @@.cyan;[U]@@ - <</if>> - <<if ($dojo != 0)>> - <br> - <<if def _BG>> - ''__@@.pink;<<= SlaveFullName($Bodyguard)>>@@__'' is serving as your bodyguard. <span id="manageBG"><strong><<link "Manage Bodyguard" "BG Select">><</link>></strong></span> @@.cyan;[B]@@ - <<set $showOneSlave = "guard you">> - <<include "Slave Summary">> - <<else>> - You have @@.red;not@@ selected a Bodyguard. <span id="manageBG"><strong><<link "Select one" "BG Select">><</link>></strong></span> @@.cyan;[B]@@ - <</if>> - - /* Start Italic event text */ - <<if (def _BG) && ($slaves[_BG].assignment == "guard you")>> - <<setLocalPronouns $slaves[_BG]>> - <<set $i = _BG>> - <<set _GO = "idiot ball">> - <br> - //<<= App.Interact.UseGuard($slaves[$i])>>// - <br> [["Use "+$his+" mouth"|FLips][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - | [["Play with "+$his+" tits"|FBoobs][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <<if canDoVaginal($slaves[_BG])>> - | [["Fuck "+$him|FVagina][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <<if canDoAnal($slaves[_BG])>> - | [["Use "+$his+" holes"|FButt][$activeSlave = $slaves[_BG],$nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <<if $slaves[_BG].belly >= 300000>> - | [["Fuck "+$him+" over "+$his+" belly"|FBellyFuck][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <</if>> - /*check*/ - <<if canPenetrate($slaves[_BG])>> - | [["Ride "+$him|FDick][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <<if canDoAnal($slaves[_BG])>> - | [["Fuck "+$his+" ass"|FAnus][$activeSlave = $slaves[_BG], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - | [["Abuse "+$him|Gameover][$gameover = _GO]] - <</if>> - /* End Italic event text */ - - <</if>> - </div> - </div> - - <div id="resting" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryRest>> - Associated facilities: - <<if $spa>>[[Spa]],<<else>>Spa,<</if>> - <<if $clinic>>[[Clinic]]<<else>>Clinic<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "resting">> - <<include "Slave Summary">> - </div> - </div> - - <div id="stay confined" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryConfinement>> - Associated facility: <<if $cellblock>>[[Cellblock]]<<else>>Cellblock<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "stay confined">> - <<include "Slave Summary">> - </div> - </div> - - <div id="take classes" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryAttendingClasses>> - Associated facility: <<if $schoolroom>>[[Schoolroom]]<<else>>Schoolroom<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "take classes">> - <<include "Slave Summary">> - </div> - </div> - - <div id="please you" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryFucktoy>> - Associated facility: <<if $masterSuite>>[[Master Suite]]<<else>>Master Suite<</if>> // - <</if>> - <br> - /* Start Italic event text */ - <<for $i = 0; $i < _SL; $i++>> - <<capture $i>> - <<setLocalPronouns $slaves[$i]>> - <<if ($slaves[$i].assignment == "please you")>> - <br> - //<<= App.Interact.ToyChest($slaves[$i])>>// - //In the coming week you plan to concentrate on - <<if $slaves[$i].fuckdoll == 0>> - <<if $slaves[$i].toyHole != "all her holes">> - $his $slaves[$i].toyHole, but for now:// - <<else>> - all of $his holes equally, but for now:// - <</if>> - <br> [["Use "+$his+" mouth"|FLips][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] | [["Play with "+$his+" tits"|FBoobs][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <<if canDoVaginal($slaves[$i])>> - | [["Fuck "+$him|FVagina][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <<if canDoAnal($slaves[$i])>> - | [["Use "+$his+" holes"|FButt][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <</if>> - <<if canDoAnal($slaves[$i])>> - | [["Fuck "+$his+" ass"|FAnus][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <<if canDoVaginal($slaves[$i]) || canDoAnal($slaves[$i])>> - <<if $slaves[$i].belly >= 300000>> - | [["Fuck "+$him+" over "+$his+" belly"|FBellyFuck][$activeSlave = $slaves[$i], $nextButton = _j, $nextLink = _k, $returnTo = _l]] - <</if>> - <</if>> - /*check*/ - <<if canPenetrate($slaves[$i])>> - | [["Ride "+$him|FDick][$activeSlave = $slaves[$i],$nextButton = _j,$nextLink = _k,$returnTo = _l]] - <</if>> - | [["Abuse "+$him|FAbuse][$activeSlave = $slaves[$i],$nextButton = _j,$nextLink = _k,$returnTo = _l]] - <<else>> - <<if $slaves[$i].toyHole != "all her holes">> - $his $slaves[$i].toyHole. - <<else>> - all of $his holes. - <</if>> - <</if>> - <</if>> - <</capture>> - <</for>> - /* End Italic event text */ - <br> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "please you">> - <<include "Slave Summary">> - </div> - </div> - - <div id="whore" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryWhoring>> - Associated facility: <<if $brothel>>[[Brothel]]<<else>>Brothel<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "whore">> - <<include "Slave Summary">> - </div> - </div> - - <div id="serve the public" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryPublicService>> - Associated facility: <<if $club>>[[Club]]<<else>>Club<</if>> // - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "serve the public">> - <<include "Slave Summary">> - </div> - </div> - - <div id="be a servant" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryServitude>> - Associated facility: <<if $servantsQuarters>>[[Servants' Quarters]]<<else>>Servant's Quarters<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "be a servant">> - <<include "Slave Summary">> - </div> - </div> - - <div id="get milked" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryMilking>> - Associated facility: <<if $dairy>>[[Dairy]]<<else>>Dairy<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "get milked">> - <<include "Slave Summary">> - </div> - </div> - - <div id="work as a farmhand" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryFarming>> - Associated facility: <<if $farmyard>>[[Farmyard]]<<else>>Farmyard<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "work as a farmhand">> - <<include "Slave Summary">> - </div> - </div> - - <div id="work a glory hole" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntryGloryHole>> - Associated facility: <<if $arcade>>[[Arcade]]<<else>>Arcade<</if>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "work a glory hole">> - <<include "Slave Summary">> - </div> - </div> - - <div id="be a subordinate slave" class="tabcontent"> - <div class="content"> - <<if $showTipsFromEncy != 0>> - //<<encyclopediaEntrySexualServitude>>// - <</if>> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "be a subordinate slave">> - <<include "Slave Summary">> - </div> - </div> +<<print App.UI.SlaveList.penthousePage()>> - <div id="all" class="tabcontent"> - <div class="content"> - //<<OptionsSortAsAppearsOnMain>>// - <<set $slaveAssignmentTab = "all">> - <<include "Slave Summary">> - </div> - <br> - <div class="content"> - <<if (ndef _HG) && ($slaves.length > 1)>> - You have @@.red;not@@ selected a Head Girl<<if $arcologies[0].FSEgyptianRevivalistLaw == 1>> and Consort<</if>>. <span id="manageHG"><strong><<link "Select one" "HG Select">><</link>></strong></span> @@.cyan;[H]@@ - <<elseif (ndef _HG)>> - //You do not have enough slaves to keep a Head Girl// - <</if>> - <br> - <<if ndef _RC>> - You have @@.red;not@@ selected a Recruiter. - <span id="manageRecruiter"><strong><<link "Select one" "Recruiter Select">><</link>></strong></span> @@.cyan;[U]@@ - <</if>> - <<if ($dojo != 0)>> - <br> - <<if ndef _BG>> - You have @@.red;not@@ selected a Bodyguard. <span id="manageBG"><strong><<link "Select one" "BG Select">><</link>></strong></span> @@.cyan;[B]@@ - <</if>> - <</if>> - </div> - </div> - - <<if ($tabChoice.Main == "overview")>> - <script>document.getElementById("tab overview").click();</script> - <<elseif ($tabChoice.Main == "resting")>> - <script>document.getElementById("tab resting").click();</script> - <<elseif ($tabChoice.Main == "stay confined" && $JobIDArray['stay confined'].length)>> - <script>document.getElementById("tab stay confined").click();</script> - <<elseif ($tabChoice.Main == "take classes") && $JobIDArray['take classes'].length>> - <script>document.getElementById("tab take classes").click();</script> - <<elseif ($tabChoice.Main == "please you") && $JobIDArray['please you'].length>> - <script>document.getElementById("tab please you").click();</script> - <<elseif ($tabChoice.Main == "whore" && $JobIDArray['whore'].length)>> - <script>document.getElementById("tab whore").click();</script> - <<elseif ($tabChoice.Main == "serve the public") && $JobIDArray['serve the public'].length>> - <script>document.getElementById("tab serve the public").click();</script> - <<elseif ($tabChoice.Main == "be a servant") && $JobIDArray['be a servant'].length>> - <script>document.getElementById("tab be a servant").click();</script> - <<elseif ($tabChoice.Main == "get milked") && $JobIDArray['get milked'].length>> - <script>document.getElementById("tab get milked").click();</script> - <<elseif ($tabChoice.Main == "work a glory hole") && $JobIDArray['work a glory hole'].length>> - <script>document.getElementById("tab work a glory hole").click();</script> - <<elseif ($tabChoice.Main == "be a subordinate slave") && $JobIDArray['be a subordinate slave'].length>> - <script>document.getElementById("tab be a subordinate slave").click();</script> - <<elseif ($tabChoice.Main == "all")>> - <script>document.getElementById("tab all").click();</script> - <<else>> - <script>document.getElementById("tab all").click();</script> - <</if>> - - </body> - <<if $positionMainLinks <= 0>> - <br><center> - <<= App.UI.View.MainLinks()>> - </center> - <</if>> - -<<else>> /*Display traditionally, without tabs*/ - -//<<if $sortSlavesMain != 0>> - <br> - Sort by: - <<if $sortSlavesBy != "devotion">>[[Devotion|Main][$sortSlavesBy = "devotion"]]<<else>>Devotion<</if>> | - <<if $sortSlavesBy != "name">>[[Name|Main][$sortSlavesBy = "name"]]<<else>>Name<</if>> | - <<if $sortSlavesBy != "assignment">>[[Assignment|Main][$sortSlavesBy = "assignment"]]<<else>>Assignment<</if>> | - <<if $sortSlavesBy != "seniority">>[[Seniority purchased|Main][$sortSlavesBy = "seniority"]]<<else>>Seniority<</if>> | - <<if $sortSlavesBy != "actualAge">>[[Age|Main][$sortSlavesBy = "actualAge"]]<<else>>Age<</if>> | - <<if $sortSlavesBy != "visualAge">>[[Apparent Age|Main][$sortSlavesBy = "visualAge"]]<<else>>Apparent Age<</if>> | - <<if $sortSlavesBy != "physicalAge">>[[Bodily Age|Main][$sortSlavesBy = "physicalAge"]]<<else>>Bodily Age<</if>> - - Sort: <<if $sortSlavesOrder != "descending">>[[Descending|Main][$sortSlavesOrder = "descending"]]<<else>>Descending<</if>> | - <<if $sortSlavesOrder != "ascending">>[[Ascending|Main][$sortSlavesOrder = "ascending"]]<<else>>Ascending<</if>> -<</if>>// - -<<if $positionMainLinks >= 0>> - <center> - <<= App.UI.View.MainLinks()>> - </center> -<</if>> - -/* TASK ARRAY */ -<<set $jobTypes = [{title: "Rest", asgn: "rest"}, {title: "Subordinate", asgn: "be a subordinate slave"}, {title: "Whore", asgn: "whore"}, {title: "Public Servant", asgn: "serve the public"}, {title: "Hole", asgn: "work a glory hole"}, {title: "Milking", asgn: "get milked"}, {title: "House Servant", asgn: "be a servant"}, {title: "Fucktoy", asgn: "please you"}, {title: "Confinement", asgn: "stay confined"}, {title: "Classes", asgn: "take classes"}, {title: "Choose own", asgn: "choose her own job"}]>> -<br> -<<link Reset>><<resetAssignmentFilter>><<replace '#summarylist'>><<include "Slave Summary">><</replace>><</link>> -Filter by assignment: | -<<for _i = 0; _i < $jobTypes.length; _i++>> - <<set _title = $jobTypes[_i].title>> - <<if $slaves.filter(function(x){return x.assignment == ($jobTypes[_i].asgn)}).length > 0>> - <<print " - <<link _title>> - <<set $slaves.filter(function(x){return x.assignment == ($jobTypes[" + _i + "].asgn)}).map(function(y){y.assignmentVisible = 1})>> - <<set $slaves.filter(function(x){return x.assignment != ($jobTypes[" + _i + "].asgn)}).map(function(y){y.assignmentVisible = 0})>> - <<replace '#summarylist'>><<include 'Slave Summary'>><</replace>> - <</link>> - ">> | - <</if>> -<</for>> - -<span id='summarylist'><<include "Slave Summary">></span> - -<<if $lineSeparations == 0>><br><<else>><hr style="margin:0"><</if>> -<<if $positionMainLinks <= 0>> - <br><center> - <<= App.UI.View.MainLinks()>> - </center> -<</if>> +<<if $useSlaveSummaryTabs === 0>> /*Display traditionally, without tabs*/ <<set _j = "Back", _k = "AS Dump", _l = "Main">> <<for $i = 0; $i < _SL; $i++>> diff --git a/src/uncategorized/masterSuite.tw b/src/uncategorized/masterSuite.tw index 363deb44f62094f2df64c1d832b8e792f5c78222..45f86f62680dac92e167a0acfe534578826b01b2 100644 --- a/src/uncategorized/masterSuite.tw +++ b/src/uncategorized/masterSuite.tw @@ -4,7 +4,6 @@ <<SlaveIDSort $MastSiIDs>> <<set _DL = $MastSiIDs.length, $masterSuiteSlaves = _DL>> -<<suiteAssignmentFilter>> <<if $masterSuiteName != "the Master Suite">> <<set $masterSuiteNameCaps = $masterSuiteName.replace("the ", "The ")>> @@ -345,53 +344,6 @@ $masterSuiteNameCaps is furnished <</if>> <br><br> -<<if $Concubine != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as your Concubine. [[Appoint one|Concubine Select]] -<</if>> - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $masterSuiteSlaves > 0>> - <<suiteAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$masterSuiteNameCaps is empty for the moment// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($masterSuite <= $masterSuiteSlaves)>> - ''$masterSuiteNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $masterSuiteSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.MasterSuite == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.masterSuite)>> <br><br>Rename $masterSuiteName: <<textbox "$masterSuiteName" $masterSuiteName "Master Suite">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/masterSuiteReport.tw b/src/uncategorized/masterSuiteReport.tw index fef272985d3aab7d8d040bb0ee1cbdfd55f0c0da..243d63bb27355d0e16a1dfd67c136589695062db 100644 --- a/src/uncategorized/masterSuiteReport.tw +++ b/src/uncategorized/masterSuiteReport.tw @@ -47,7 +47,7 @@ seeing to your pleasure in the master suite.'' Such sexual opulence @@.green;improves@@ your reputation. <<if ($arcologies[0].FSEgyptianRevivalist > 0) && (_DL >= 5)>> Society @@.green;approves@@ of your keeping a large number of women. This advances the Egyptian revivalist ideal of multiple concubinage. - <<= FSChange("EgyptianRevivalist", 2)>> + <<= FutureSocieties.Change("EgyptianRevivalist", 2)>> <</if>> <<if (_masterSuitePregnantSlaves >= 1)>> The suite is supporting the pregnancies of the slaves @@ -63,7 +63,7 @@ <</if>> <<if ($arcologies[0].FSHedonisticDecadence > 0)>> Society @@.green;approves@@ of the pampering your pregnant harem receives. This advances the ideal that everyone's desires should be fulfilled. - <<= FSChange("Hedonism", 1)>> + <<= FutureSocieties.Change("Hedonistic", 1)>> <</if>> <</if>> <<if _DL > 1>> @@ -408,7 +408,8 @@ <<if $Concubine != 0 && def _FLs>> /% Remove the Concubine from the $MastSiIDs list %/ - <<set $Concubine = $slaves[_FLs], _dump = $MastSiIDs.deleteAt(0), _DL-->> + <<set $Concubine = $slaves[_FLs]>> + <<run $MastSiIDs.deleteAt(0), _DL-->> <</if>> <br><br> diff --git a/src/uncategorized/matchmaking.tw b/src/uncategorized/matchmaking.tw index b6fe91ee68b3ee6ecd8285bd63b48d749b237d5e..11d7ff4ebabdeb9fa286cceccca1b43f372d4913 100644 --- a/src/uncategorized/matchmaking.tw +++ b/src/uncategorized/matchmaking.tw @@ -381,9 +381,12 @@ Despite $his devotion and trust, $he is still a slave, and probably knows that $ <<if $seeImages == 1>><br style="clear:both"><</if>> <br><br>__Put $him with another worshipful <<if $eventSlave.relationship == -2>>emotionally bonded slave<<else>>emotional slut<</if>>:__ -<<set $SlaveSummaryFiler = "occupying">> -<<include "Slave Summary">> - +<<print App.UI.SlaveList.slaveSelectionList( + s => s.devotion >= 100 && s.relationship === $activeSlave.relationship && s.ID !== $activeSlave.ID, + App.UI.SlaveList.SlaveInteract.stdInteract, + null, + (s, i) => App.UI.passageLink('Match them', 'Matchmaking', `$subSlave = $slaves[${i}]`) +)>> </span> <<else>> diff --git a/src/uncategorized/milkmaidSelect.tw b/src/uncategorized/milkmaidSelect.tw index aa43ca7b82515e77fa74500f392c6eea77ec9310..f85d344ca00a98fb90cf826a5189400e67043b25 100644 --- a/src/uncategorized/milkmaidSelect.tw +++ b/src/uncategorized/milkmaidSelect.tw @@ -1,7 +1,6 @@ :: Milkmaid Select [nobr] <<set $nextButton = "Back", $nextLink = "Dairy", $showEncyclopedia = 1, $encyclopedia = "Milkmaid">> -<<showallAssignmentFilter>> <<if ($Milkmaid != 0)>> <<set $Milkmaid = getSlave($Milkmaid.ID)>> <<setLocalPronouns $Milkmaid>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Milkmaid from your obedient slaves:'' <br><br>[[None|Milkmaid Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.dairy)>> diff --git a/src/uncategorized/newGamePlus.tw b/src/uncategorized/newGamePlus.tw index a4ddbdd8642f80350869c8c727a61841f0db61ae..739c8960d2ba26576c344adb9b70dd2b6d1386ca 100644 --- a/src/uncategorized/newGamePlus.tw +++ b/src/uncategorized/newGamePlus.tw @@ -53,47 +53,4 @@ You <<if $cash >= _fee>>have<<else>>lack<</if>> the funds to bring more than $sl Select up to $slavesToImportMax slaves to be imported into a new game and then click [[here.|init][$saveImported = 1,$oldCareer = "undefined",$slavesToImport = 0]] -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Import a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove from import</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $slavesToImport > 0>>'' - <<if $slavesToImport === 1>> - This slave - <<else>> - These slaves - <</if>> - will be imported into the new game'': - <<if $slavesToImport >= $slavesToImportMax>> - //Current slave import capacity exceded.// - <</if>> - <<set $SlaveSummaryFiler = "occupying">> <<include "Slave Summary">> - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if $slavesToImport >= $slavesToImportMax>> - <<else>> - <<if $slaves.length > $slavesToImport>> - ''These slaves are available to be imported into the new game:'' - <<set $SlaveSummaryFiler = "assignable">> <<include "Slave Summary">> - <</if>> - <</if>> - </div> -</div> - - -<<if ($tabChoice.NewGamePlus == "remove")>> - <script>document.getElementById("tab remove").click();</script> -<<else>> - <script>document.getElementById("tab assign").click();</script> -<</if>> - -</body> \ No newline at end of file +<<print App.UI.SlaveList.listNGPSlaves()>> diff --git a/src/uncategorized/newSlaveIntro.tw b/src/uncategorized/newSlaveIntro.tw index 2a0ed85522b43c46812a9b2978808c498e8b3c69..395467952034710b6ec366463620d5f84a264d5d 100644 --- a/src/uncategorized/newSlaveIntro.tw +++ b/src/uncategorized/newSlaveIntro.tw @@ -589,10 +589,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 10>> <<set $activeSlave.health -= 10>> <<if canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</link>> - <br> +<br> <<case "She submitted to enslavement to get access to modern prenatal care.">> //and since $he's worried about $his child...// @@ -606,7 +606,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.counter.oral += 1>> <<set $oralTotal += 1>> <</link>> - <br> +<br> <<case "She offered herself as a slave to escape the horrors a blind girl faces on the streets.">> //and since $he loathes $his pregnancy...// @@ -625,7 +625,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.pregWeek = -4>> <<run SetBellySize($activeSlave)>> <</link>> - <br> +<br> <<case "She submitted to enslavement for a better chance at survival than she had as a migrant.">> //and since $he's trying to do better than life as a migrant...// @@ -639,7 +639,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust += 4>> <<set $activeSlave.anus += 1>> <<set $activeSlave.skill.anal += 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> | <<link "Initiate $him with anal pain">> @@ -649,10 +649,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> <<set $activeSlave.anus += 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She submitted to enslavement as her only way to obtain surgery to transform her into a woman.">> //and since $he came here for surgery...// @@ -674,9 +674,9 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion += 4>> <<set $activeSlave.anus += 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> - <br> +<br> <<case "She submitted to enslavement out of a misguided desire to join a sexually libertine society.">> //and since $he's looking for a sexually libertine society...// @@ -688,7 +688,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <<if ($activeSlave.indentureRestrictions <= 0) && ($seeExtreme == 1)>> @@ -700,10 +700,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= -10>> <<set $activeSlave.health -= 10>> <<set $activeSlave.balls = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She asked to be enslaved out of naïve infatuation with you.">> //and since $he is already infatuated with you...// @@ -716,9 +716,9 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set _temp = 0>> <</if>> <<if _temp > 50>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<else>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <<replace "#introResult">> You tell $him that slaves working in your penthouse are all expected to please you, and $he'll have to impress you. $He smiles and even giggles a little, standing to strip off $his clothes, taking $his time and showing off $his fresh body. $He gets lewder and lewder, displaying youthful libido basking in the gaze of $his crush. $He slowly becomes more and more desperate to entice you, so you let $him keep going out of curiosity, to see how far $he'll go. $He goes to the point of reclining on the couch with $his legs back, spreading $himself and masturbating, and when that fails to get you out of your chair, $he begins to wink $his <<if _temp > 50>>pussy<<else>>anus<</if>> meaningfully. $He's clearly got a good idea of what many men like, and you head over and take $his tight <<if _temp > 50>>pussy<<else>>asshole<</if>>. You do it gently, making sure $he enjoys $himself, and $he becomes @@.mediumaquamarine;very hopeful@@ that $he was wrong to doubt you, and that $he really can @@.hotpink;be close to@@ the object of $his infatuation. $He bounces up off the couch afterward to wiggle $his butt at you, and even blows you a kiss as you get back to work. @@ -734,10 +734,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She asked to be enslaved in the hope you'd treat a fellow woman well.">> //and since $he's hoping to protect someone...// @@ -757,10 +757,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She asked to be enslaved since she felt you were her only hope of becoming a prettier woman.">> //and since $he desperately wants to be a prettier woman...// @@ -773,7 +773,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust += 4>> <<set $activeSlave.voice += 1>> <<set $activeSlave.health -= 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <<if canDoAnal($activeSlave)>> | <<link "Let $him know $he'll have to earn $his rewards">> @@ -781,10 +781,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << You complete the induction and then perform a thorough inspection, noting down each area in which surgery or drugs could improve $his body. $He understands what you're doing and can barely contain $his excitement, but you tell $him that $he'll have to earn such improvements. $His face falls. You reassure $him that it won't take the years $he would have had to work to afford such things $himself, but that $he needs to be a good slave, and soon, for you to spend resources on $him. You let $him start by taking a rough buttfuck, bent over the desk. $His ass is tight and you are not merciful. $He gasps and moans but takes it all the same, @@.mediumaquamarine;trusting@@ that $he'll eventually be rewarded with transformation. <</replace>> <<set $activeSlave.trust += 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She was transformed and enslaved after she fell into debt to you.">> //and since $he's so deeply in debt to you...// @@ -797,10 +797,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 5>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She offered herself to you as a slave to escape a life of boredom.">> //and since $he was so bored...// @@ -812,10 +812,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.trust += 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She sold herself into slavery out of fear that life on the streets was endangering her pregnancy.">> //and since $he is here to protect $his pregnancy...// @@ -827,10 +827,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.trust += 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> - <br> +<br> <<case "She offered herself to you as a slave to escape the hard life of a free whore.">> //and since $he is trying to escape the hard life of a free whore...// @@ -857,7 +857,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.hStyle = "neat">> <<set $activeSlave.custom.tattoo = " ">> <</link>> - <br> +<br> <<case "She sold herself into slavery to escape life on the streets.">> //and since $he is trying to escape life on the streets...// @@ -876,7 +876,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</if>> <</replace>> <</link>> - <br> +<br> /*Written by DrPill, coded by Boney M*/ <<case "She was recruited into your service by her older sister.">> @@ -889,7 +889,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <<case "She was recruited into your service by her younger sister.">> //and since $he was recruited by $his younger sister...// @@ -901,7 +901,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <<case "She was recruited into your service by her twin sister.">> //and since $he was recruited by $his twin...// @@ -913,7 +913,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <<case "She was recruited into your service by her mother.">> //and since $he was recruited by $his mother...// @@ -925,7 +925,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <<case "She was recruited into your service by her parent.">> //and since $he was recruited by $his parent...// @@ -937,7 +937,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <<case "She was recruited into your service by her daughter.">> //and since $he was recruited by $his daughter...// @@ -949,7 +949,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion += 4>> <<set $activeSlave.trust += 4>> <</link>> - <br> +<br> <</switch>> <br>//Have $him changed...// @@ -961,7 +961,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << Since $he's in rough shape, you give $him a comprehensive medical exam with the help of the remote surgery. You apply care to @@.green;address@@ some of the most outstanding concerns. Whatever gratitude $he might have felt for prompt medical attention is balanced by fear of the remote surgery and the nagging (and accurate) feeling that $he's being treated like livestock, but $he does @@.mediumaquamarine;begin to hope@@ $he'll be well treated. <<if $arcologies[0].FSPaternalist != "unset">> Society @@.green;approves@@ of your promptly seeing to your stock's health; this advances the idea that all slaveowners should look after their slaves. - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <</if>> <</replace>> <<set $activeSlave.health += 10>> @@ -1015,10 +1015,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << You drag $him to the body modification studio and strap $him down with $his $brandTarget clear and defenseless. $He doesn't understand what's coming for a while, even as disinfectant is applied to $his $brandTarget. $He can't see the approaching brand, <<if !canSee($activeSlave)>>of course, <</if>>but eventually $he feels the radiated heat on $his skin and manages to get one inarticulate, wordless noise of terror out before the dreadful sizzling noise and the sweet smell of burning flesh. If $he didn't know $he was a slave before, @@.mediumorchid;$he does now,@@ and $he's got the @@.gold;agonizing@@ @@.red;injury@@ to prove it. <<if ($arcologies[0].FSSubjugationistRace == $activeSlave.race) && ($arcologies[0].FSSubjugationist > 0)>> Society @@.green;approves@@ of your purchase and branding of an inferior $activeSlave.race person; this advances the idea that $activeSlave.race people ought to be enslaved. - <<= FSChange("Subjugationist", 2)>> + <<= FutureSocieties.Change("Subjugationist", 2)>> <<elseif ($arcologies[0].FSSupremacistRace == $activeSlave.race) && ($arcologies[0].FSSupremacist > 0)>> Society @@.red;disapproves@@ of your purchase and branding of <<if $activeSlave.race == "amerindian" || $activeSlave.race == "asian" || $activeSlave.race == "indo-aryan">>an<<else>>a<</if>> $activeSlave.race person; this reduces support for the idea that $activeSlave.race people are superior. - <<= FSChange("Supremacist", -2)>> + <<= FutureSocieties.Change("Supremacist", -2)>> <</if>> <</replace>> <<set $activeSlave.brand = $brandDesign>> @@ -1092,10 +1092,10 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 20, $activeSlave.devotion -= 50>> <</if>> Society @@.green;approves@@ of your promptly rendering $him sterile; this advances the idea that only the elite should breed. - <<= FSChange("Eugenics", 1)>> + <<= FutureSocieties.Change("Eugenics", 1)>> <<if $activeSlave.pregKnown == 1>> Since you snuffed out an unworthy life in the process, the sterilization has an even @@.green;bigger impact.@@ - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <</replace>> <<set $activeSlave.preg = -3>> @@ -1129,11 +1129,11 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << You drag $him to the remote surgery and strap $him face-down with $his legs spread. $He doesn't understand what's happening, since the anesthetics totally deprive $him of any sensation. $He's so drugged and drowsy with @@.red;surgical recovery@@ that it takes a while for $him to figure out what's happened. When $he does, $his poor mind scarcely processes the @@.gold;horror@@ of what's happened. $He numbly carries on, terrified. <<if $arcologies[0].FSGenderRadicalist != "unset">> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all societal inferiors can be made female. - <<= FSChange("GenderRadicalist", 2)>> + <<= FutureSocieties.Change("GenderRadicalist", 2)>> <</if>> <<if $arcologies[0].FSRestart != "unset" && $activeSlave.pubertyXY == 1>> Society @@.green;approves@@ of your promptly gelding $him; this advances the idea that all only the elite should breed. - <<= FSChange("Eugenics", 2)>> + <<= FutureSocieties.Change("Eugenics", 2)>> <</if>> <</replace>> <<set $activeSlave.balls = 0, $activeSlave.scrotum = 0>> @@ -1147,7 +1147,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << $He almost passes out from @@.gold;sheer horror.@@ Instead, $he collapses and tries desperately to vomit. Fortunately, $he doesn't have anything to bring up. $He's reduced to impotent weeping and retching as $he begins to process the stress of having had $his parts cut off. <<if $arcologies[0].FSRestart != "unset">> Society @@.green;approves@@ of you stripping away everything from society's inferiors. - <<= FSChange("Eugenics", 3)>> + <<= FutureSocieties.Change("Eugenics", 3)>> <</if>> <</replace>> <<set $activeSlave.chastityVagina = 0,$activeSlave.dick = 0,$activeSlave.foreskin = 0,$activeSlave.ovaries = 0,$activeSlave.preg = -2,$activeSlave.pregKnown = 0,$activeSlave.pregSource = 0,$activeSlave.pregType = 0,$activeSlave.pregWeek = -4,$activeSlave.vagina = -1,$activeSlave.skill.vaginal = 0>> @@ -1286,7 +1286,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 4>> <</if>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>> <</if>> @@ -1337,19 +1337,19 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<if $activeSlave.mpreg == 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</if>> <<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> The Societal Elite @@.green;disapprove@@ of this breach of eugenics. <<set $failedElite += 5>> <<elseif $arcologies[0].FSGenderFundamentalist != "unset" && $activeSlave.mpreg == 0>> Society @@.green;approves@@ of your promptly putting a new slave in $him; this advances the idea that all slaves should bear their masters' babies. - <<= FSChange("GenderFundamentalist", 2)>> + <<= FutureSocieties.Change("GenderFundamentalist", 2)>> <<elseif $arcologies[0].FSGenderFundamentalist != "unset">> Society @@.red;is disgusted@@ by you promptly knocking up $his ass; babies come from women, not men. - <<= FSChange("GenderFundamentalist", -2)>> + <<= FutureSocieties.Change("GenderFundamentalist", -2)>> <</if>> <</replace>> <<set $activeSlave.preg = 1>> @@ -1402,7 +1402,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <<elseif ($activeSlave.anus == 0)>> <br> @@ -1418,7 +1418,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> @@ -1475,7 +1475,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 4>> <</if>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>> <</if>> @@ -1505,7 +1505,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << You introduce $him to obedience and proper manners regarding $his <<= WrittenMaster($activeSlave)>> before sending $him off for a physical. That night, $he's returned to your room, and finds you doing business on a tablet in bed. $He looks doubtful, but obeys when you direct $him to get into bed<<if $PC.dick == 0>>, even after $he realizes you're wearing a strap-on<</if>>. You turn out the light and spoon $him from behind, kissing $his neck and ears, cupping $his swollen breasts, and running your hands across $his pregnant belly with its taut $activeSlave.skin skin. $He's awkward at first but $his body responds to the tenderness. Before long $he's humping $his pussy back and forth against <<if $PC.dick == 1>>your cock<<else>>the strap-on<</if>>. You begin to gently work <<if $PC.dick == 1>>your dickhead<<else>>its tip<</if>> up $his used pussy. $He's unsure of $himself, but you keep $him nice and relaxed. After several minutes of gentle loving, $he's nothing but a satisfied puddle in your arms. $He believes that $he can @@.mediumaquamarine;trust@@ you won't harm $him or $his child. <</replace>> <<set $activeSlave.trust += 5>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<if $activeSlave.fetish == "none" && random(1,100) > 60>> <<set $activeSlave.fetish = "pregnancy", $activeSlave.fetishStrength = 10>> <</if>> diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw index 9e04cfb6cd3badc42e999ec4ad83577c910e10af..bbfd96a84677f4b6f9b96edcaefb0cac90b12649 100644 --- a/src/uncategorized/nextWeek.tw +++ b/src/uncategorized/nextWeek.tw @@ -1,6 +1,8 @@ :: Next Week [nobr] -<<if def $storedReturn>> <<run delete $storedReturn>> <</if>> +<<if def $storedReturn>> + <<run delete $storedReturn>> +<</if>> <<run delete $storedLink>> <<run delete $storedButton>> <<set $HackingSkillMultiplier = HackingSkillMultiplier()>> @@ -94,7 +96,7 @@ <<set $surgeryCost = Math.trunc(30000/$localEcon)>> <</if>> -<<set $arcologies[0].prosperity = Math.clamp($arcologies[0].prosperity, 1, 300)>> +<<set $arcologies[0].prosperity = Math.clamp($arcologies[0].prosperity, 1, $AProsperityCap)>> <<set $averageTrust = 0, $averageDevotion = 0, _slavesContributing = 0, _OldHG = -1, _NewHG = -1, _SL = $slaves.length>> <<if $studio == 1>> @@ -186,6 +188,7 @@ <<set $slaves[_i].missingArms = 3, $slaves[_i].missingLegs = 3>> <</if>> <<if $slaves[_i].missingArms == 3>> + <<set $slaves[_i].armsTat = 0, $slaves[_i].nails = 0>> <<if (["hands", "left hand", "left lower arm", "left upper arm", "left wrist", "lower arms", "right hand", "right lower arm", "right upper arm", "right wrist", "upper arms", "wrists"].includes($slaves[_i].brandLocation))>> <<set $slaves[_i].brand = 0>> <<set $slaves[_i].brandLocation = 0>> @@ -426,7 +429,7 @@ /% These are variables that either should be made into _temp vars or should be Zeroed out once done with them instead of here. This can also interfere with debugging or hide NaN's as zeroing things out would clear a NaN. Also could stop from NaN's getting worse? %/ /% Integer and float variables. No real need to zero them out but doesn't hurt to have them in a known state, though this might mask variables NaN'ing out. Takes up the least amount of Memory besides a "" string. %/ -<<set $i = 0, $j = 0, $x = 0, $r = 0, $opinion = 0, $influenceBonus = 0, $averageProsperity = 0, $beauty = 0, $beautyMultiplier = 0, $FResult = 0, $groomSlave = -1, $brideSlave = -1, $mother = -1, $daughter = -1, $devMother = -1, $devDaughter = -1, $alphaTwin = -1, $betaTwin = -1, $youngerSister = -1, $olderSister = -1, $recruiterSlave = -1>> +<<set $i = 0, $j = 0, $x = 0, $r = 0, $opinion = 0, $influenceBonus = 0, $averageProsperity = 0, $beauty = 0, $FResult = 0, $groomSlave = -1, $brideSlave = -1, $mother = -1, $daughter = -1, $devMother = -1, $devDaughter = -1, $alphaTwin = -1, $betaTwin = -1, $youngerSister = -1, $olderSister = -1, $recruiterSlave = -1>> <<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestTargetID = -1, $subID = -1, $submissiveInterestTargetID = -1>> /% Other arrays %/ diff --git a/src/uncategorized/nonRandomEvent.tw b/src/uncategorized/nonRandomEvent.tw index 7d2ed0fe284f90905d77266275c13914ca042083..535585fb780803d70830bb62555095de90452a7c 100644 --- a/src/uncategorized/nonRandomEvent.tw +++ b/src/uncategorized/nonRandomEvent.tw @@ -122,7 +122,7 @@ <<goto "P peacekeepers intro">> <<elseif ($arcologies[0].prosperity > 80) && ($TSS.schoolPresent+$GRI.schoolPresent+$SCP.schoolPresent+$LDE.schoolPresent+$TGA.schoolPresent+$HA.schoolPresent+$TFS.schoolPresent+$TCR.schoolPresent+$NUL.schoolPresent == 0) && ($schoolSuggestion == 0)>> <<goto "P school suggestion">> -<<elseif ($assistantFSOptions == 0) && ($assistant > 0) && ($assistantAppearance != "normal") && (FSDecorLevel(20))>> +<<elseif ($assistantFSOptions == 0) && ($assistant > 0) && ($assistantAppearance != "normal") && (FutureSocieties.HighestDecoration() >= 40)>> <<set $Event = "assistant FS">> <<goto "Assistant Events">> <<elseif ($assistant > 0) && ($assistantNameAnnounced == 0) && ($assistantPower > 0)>> diff --git a/src/uncategorized/nurseSelect.tw b/src/uncategorized/nurseSelect.tw index 028cd08d534da1043b35aca3a5a702eaa05abed6..20b5a750ecb47d47cf5563cc1ca869084a175c4f 100644 --- a/src/uncategorized/nurseSelect.tw +++ b/src/uncategorized/nurseSelect.tw @@ -1,7 +1,6 @@ :: Nurse Select [nobr] <<set $nextButton = "Back", $nextLink = "Clinic", $showEncyclopedia = 1, $encyclopedia = "Nurse">> -<<showallAssignmentFilter>> <<if ($Nurse != 0)>> <<set $Nurse = getSlave($Nurse.ID)>> <<setLocalPronouns $Nurse>> @@ -13,9 +12,5 @@ <br><br>''Appoint a Nurse from your devoted slaves:'' <br><br>[[None|Nurse Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file + +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.clinic)>> diff --git a/src/uncategorized/pRivalryActions.tw b/src/uncategorized/pRivalryActions.tw index c98ffbc6cc9e47ea5eca054c534d5af56239fd6b..983dc2e0274e34d9373aa433f2c1a60cb1d71902 100644 --- a/src/uncategorized/pRivalryActions.tw +++ b/src/uncategorized/pRivalryActions.tw @@ -4010,7 +4010,7 @@ You remind yourself that success in this conflict will not be defined by the tra <<include "P rivalry capture">> <</if>> <</replace>> - <</link>> //This option is available due to your @@.springgreen;your hacking mastery,.@@ This will immediately end the conflict with a chance of enslaving your rival// + <</link>> //This option is available due to your @@.springgreen;your hacking mastery,@@ and will immediately end the conflict with a chance of enslaving your rival// <</if>> <</if>> </span> diff --git a/src/uncategorized/pRivalryVictory.tw b/src/uncategorized/pRivalryVictory.tw index 9bb1ce5487475915a5e28cc417db10277a3ce7b1..78fc92dd07b22637f45a648308641bb89e7b10d6 100644 --- a/src/uncategorized/pRivalryVictory.tw +++ b/src/uncategorized/pRivalryVictory.tw @@ -75,7 +75,7 @@ For the first time, you receive a direct call from your rival. You pictured the <br><<link "Refuse, and place a bounty of <<print cashFormat(50000)>> on your rival's death">> <<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */ <<replace "#result">> - You coldly decline. "That was a mistake," your rival replies, entering a computer command. "All my remaining liquid assets have just been @@.red;expended in an attack on the value of your holdings,@@ and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world - but only for a few days. + You coldly decline. "That was a mistake," your rival replies, entering a computer command. "All my remaining liquid assets have just been @@.red;expended in an attack on the value of your holdings,@@ and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world — but only for a few days. <br><br> Your bounty is quickly claimed, and you are treated to the delicious moment of finding your rival's head delivered to your doorstep. It might not have done much good, but damn did it feel good. <<run cashX(-50000, "war")>> diff --git a/src/uncategorized/peCombatTraining.tw b/src/uncategorized/peCombatTraining.tw index 4d1f3c917df9a2a087b53e5fffbc3ce2cb123ecb..c10641ee1c182b992ee4c00cdb077f063cc9de68 100644 --- a/src/uncategorized/peCombatTraining.tw +++ b/src/uncategorized/peCombatTraining.tw @@ -36,9 +36,9 @@ The feed from the small armory next door shows $him doing the latter. $He has fi Over the feed, you tell $activeSlave.slaveName that $he can have $his choice of sexual release if $he scores well on the next set of targets. $He concentrates desperately, trying to ignore $his mounting arousal as $he imagines enjoying <<if $activeSlave.fetish == "none">>passionate sexual<<elseif $activeSlave.fetish == "boobs">>breast<<else>>$activeSlave.fetish<</if>> play. $He barely makes the stated score, and hurries smiling in for $his reward. $He feels @@.hotpink;closer to you,@@ but is distracted from any real learning and does not become a better fighter. <<set $activeSlave.devotion += 4>> <<if canDoVaginal($activeSlave)>> - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <<elseif canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <<else>> <<set $activeSlave.counter.oral += 1>> <<set $oralTotal += 1>> diff --git a/src/uncategorized/persBusiness.tw b/src/uncategorized/persBusiness.tw index 7116025fa293a938e9eb642a3fa966cebe65b51e..a38442bde710fdbb69ff261c6eeb6ff59c277596 100644 --- a/src/uncategorized/persBusiness.tw +++ b/src/uncategorized/persBusiness.tw @@ -24,7 +24,7 @@ @@.red;You are in debt.@@ This week, interest came to <<print cashFormat(_cashX, "personalBusiness")>>. <<if $arcologies[0].FSRomanRevivalist != "unset">> Society @@.red;very strongly disapproves@@ of your being in debt; this damages the idea that you model yourself on what a Roman leader should be. - <<= FSChange("RomanRevivalist", -10)>> + <<= FutureSocieties.Change("RomanRevivalist", -10)>> <</if>> <<if $cash < 0 && $cash > -25000 && $arcologies[0].FSRestartDecoration == 100>> <<if $eugenicsFullControl != 1>> @@ -353,14 +353,14 @@ You focus on business and leverage your @@.springgreen;Free Cities experience@@ to make good money: <<set _income += random(5000,10000) + Math.trunc(Math.min(4000 * Math.log($cash), $cash * 0.07))>> <<else>> - You focus on business this week and make money + You focus on business this week and make some money: <<set _income += Math.trunc(Math.min(3500 * Math.log($cash), $cash * 0.07))>> <</if>> @@.yellowgreen;<<print cashFormat(_income)>>.@@ <<run cashX(_income, "personalBusiness")>> <<if $arcologies[0].FSRomanRevivalist != "unset">> Society @@.green;approves@@ of your close attention to your own affairs; this advances your image as a <<if $PC.title == 1>>well-rounded Roman man<<else>>responsible Roman lady<</if>>. - <<= FSChange("RomanRevivalist", 2)>> + <<= FutureSocieties.Change("RomanRevivalist", 2)>> <</if>> <<elseif ($cash > 1000)>> <<set _income = Math.trunc(Math.min(3000 * Math.log($cash), $cash * 0.07))>> diff --git a/src/uncategorized/personalAssistantAppearance.tw b/src/uncategorized/personalAssistantAppearance.tw index 0154aa62ebe54a65003c102ded2cb30d9871bce6..01b21a175f1d2aa19fc5399279bbe23b152debd8 100644 --- a/src/uncategorized/personalAssistantAppearance.tw +++ b/src/uncategorized/personalAssistantAppearance.tw @@ -5,7 +5,7 @@ <<set _paSeed = random(1,8)>> <<switch $assistantAppearance>> <<case "monstergirl">> -_HeA's a cute little <<if $assistantFSAppearance == "supremacist">>$arcologies[0].FSSupremacistRace <<elseif $assistantFSAppearance == "subjugationist">>$arcologies[0].FSSubjugationistRace <</if>>monstergirl with <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">><<if $arcologies[0].FSSupremacistRace == "black">><<print either("black", "brown", "dark brown")>><<elseif $arcologies[0].FSSupremacistRace == "white">><<print either("fair", "light", "pale")>><<elseif $arcologies[0].FSSupremacistRace == "latina">><<print either("brown", "dark brown", "dark olive")>><<elseif ["amerindian", "indo-aryan", "malay", "pacific islander"].includes($arcologies[0].FSSupremacistRace)>><<print either("dark", "light")>><<elseif $arcologies[0].FSSupremacistRace == "asian">><<print either("dark olive", "light olive", "light")>><<elseif ["middle eastern", "semitic", "southern european"].includes($arcologies[0].FSSupremacistRace)>><<print either("dark olive", "light olive", "tan")>><<else>>pale<</if>><<elseif $assistantFSAppearance == "subjugationist">><<if $arcologies[0].FSSubjugationistRace == "black">><<print either("black", "brown", "dark brown")>><<elseif $arcologies[0].FSSubjugationistRace == "white">><<print either("fair", "light", "pale")>><<elseif $arcologies[0].FSSubjugationistRace == "latina">><<print either("brown", "dark brown", "dark olive")>><<elseif ["amerindian", "indo-aryan", "malay", "pacific islander"].includes($arcologies[0].FSSubjugationistRace)>><<print either("dark", "light")>><<elseif $arcologies[0].FSSubjugationistRace == "asian">><<print either("dark olive", "light olive", "light")>><<elseif ["middle eastern", "semitic", "southern european"].includes($arcologies[0].FSSubjugationistRace)>><<print either("dark olive", "light olive", "tan")>><<else>>pale<</if>><<else>>pale<</if>> skin, perky breasts, green tentacles instead of hair, and two dicks. _HisA eyes are large, expressive, and surprisingly innocent. +_HeA's a cute little <<if $assistantFSAppearance == "supremacist">>$arcologies[0].FSSupremacistRace <<elseif $assistantFSAppearance == "subjugationist">>$arcologies[0].FSSubjugationistRace <</if>>monstergirl with <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">><<print randomRaceSkin($arcologies[0].FSSupremacistRace)>><<elseif $assistantFSAppearance == "subjugationist">><<print randomRaceSkin($arcologies[0].FSSubjugationistRace)>><<else>>pale<</if>> skin, perky breasts, green tentacles instead of hair, and two dicks. _HisA eyes are large, expressive, and surprisingly innocent. <<if $assistantFSOptions>> <<switch $assistantFSAppearance>> <<case "paternalist">> @@ -87,7 +87,7 @@ _HeA's a cute little <<if $assistantFSAppearance == "supremacist">>$arcologies[0 <<case "shemale">> -_HeA's a cute little <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">>$arcologies[0].FSSupremacistRace <<elseif $assistantFSAppearance == "subjugationist">>$arcologies[0].FSSubjugationistRace <</if>>bimbo shemale with bleached blonde hair, <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">><<if $arcologies[0].FSSupremacistRace == "black">><<print either("black", "brown", "dark brown")>><<elseif $arcologies[0].FSSupremacistRace == "white">><<print either("fair", "pale")>><<elseif $arcologies[0].FSSupremacistRace == "latina">><<print either("brown", "dark brown", "dark olive")>><<elseif ["amerindian", "indo-aryan", "malay", "pacific islander"].includes($arcologies[0].FSSupremacistRace)>><<print either("dark", "light")>><<elseif $arcologies[0].FSSupremacistRace == "asian">><<print either("dark olive", "light olive")>><<elseif ["middle eastern", "semitic", "southern european"].includes($arcologies[0].FSSupremacistRace)>><<print either("dark olive", "tan")>><<else>>tanned<</if>><<elseif $assistantFSAppearance == "subjugationist">><<if $arcologies[0].FSSubjugationistRace == "black">><<print either("black", "brown", "dark brown")>><<elseif $arcologies[0].FSSubjugationistRace == "white">><<print either("fair", "pale")>><<elseif $arcologies[0].FSSubjugationistRace == "latina">><<print either("brown", "dark brown", "dark olive")>><<elseif ["amerindian", "indo-aryan", "malay", "pacific islander"].includes($arcologies[0].FSSubjugationistRace)>><<print either("dark", "light")>><<elseif $arcologies[0].FSSubjugationistRace == "asian">><<print either("dark olive", "light olive")>><<elseif ["middle eastern", "semitic", "southern european"].includes($arcologies[0].FSSubjugationistRace)>><<print either("dark olive", "tan")>><<else>>tanned<</if>><<else>>tanned<</if>> skin, huge lips, and ridiculous tits. _HisA cock hangs past _hisA knees when limp. +_HeA's a cute little <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">>$arcologies[0].FSSupremacistRace <<elseif $assistantFSAppearance == "subjugationist">>$arcologies[0].FSSubjugationistRace <</if>>bimbo shemale with bleached blonde hair, <<if $arcologies[0].FSSupremacist != "unset" && $assistantFSAppearance != "subjugationist">><<print randomRaceSkin($arcologies[0].FSSupremacistRace)>><<elseif $assistantFSAppearance == "subjugationist">><<print randomRaceSkin($arcologies[0].FSSubjugationistRace)>><<else>>tanned<</if>> skin, huge lips, and ridiculous tits. _HisA cock hangs past _hisA knees when limp. <<if $assistantFSOptions>> <<switch $assistantFSAppearance>> <<case "paternalist">> diff --git a/src/uncategorized/personalAttentionSelect.tw b/src/uncategorized/personalAttentionSelect.tw index 2f0d636e14039d596a368aa7a7f6b790e7ec3367..433c9d972d0361d37762fec9ffc51f9b37c2ccd2 100644 --- a/src/uncategorized/personalAttentionSelect.tw +++ b/src/uncategorized/personalAttentionSelect.tw @@ -351,6 +351,7 @@ <</if>> /* CLOSES NO SLAVE SELECTED */ <br><br>__Select a slave to train:__ <<if $PC.slaving >= 100>>//Your @@.springgreen;slaving experience@@ allows you to divide your attention between more than one slave each week, with slightly reduced efficiency//<</if>> -<<include "Slave Summary">> - -<br> +<<= App.UI.SlaveList.slaveSelectionList( + s => s.assignmentVisible === 1 && s.fuckdoll === 0, + s => `<<link "${SlaveFullName(s)}">><<run App.UI.selectSlaveForPersonalAttention(${s.ID})>><</link>>` + )>> diff --git a/src/uncategorized/pit.tw b/src/uncategorized/pit.tw index e8a3332ad6807ea6af78a10f5f55d6b8c9dd15bc..ca708feebf5de7873308896a9ac0f1bb739d617b 100644 --- a/src/uncategorized/pit.tw +++ b/src/uncategorized/pit.tw @@ -1,7 +1,6 @@ :: Pit [nobr] <<set $nextButton = "Back to Main", $nextLink = "Main", $returnTo = "Pit", $showEncyclopedia = 1, $encyclopedia = "Pit", _DL = $fighterIDs.length, _SL = $slaves.length, _CL = $canines.length, _HL = $hooved.length, _FL = $felines.length>> -<<showallAssignmentFilter>> <<if $pitName != "the Pit">> <<set $pitNameCaps = $pitName.replace("the ", "The ")>> <</if>> @@ -333,39 +332,7 @@ $pitNameCaps is clean and ready, <</if>> <br><br> -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Select a slave to fight</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Cancel a slave's fight</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if _DL > 0>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<else>> - <br><br>//$pitNameCaps is empty for the moment// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if (_SL > _DL)>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Pit == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, +{assign: "Select a slave to fight", remove: "Cancel a slave's fight"})>> <br><br>Rename $pitName: <<textbox "$pitName" $pitName "Pit">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/ptWorkaround.tw b/src/uncategorized/ptWorkaround.tw index d7bad0c4257b1d8e2253a3cefa811e984eab0cd2..d515160f148545aebe5b57850a5f8de257713a6e 100644 --- a/src/uncategorized/ptWorkaround.tw +++ b/src/uncategorized/ptWorkaround.tw @@ -32,7 +32,7 @@ <<elseif ($activeSlave.fetishKnown == 1) && ($activeSlave.fetishStrength > 60) && ($activeSlave.fetish == "humiliation") && ((canDoVaginal($activeSlave) && $activeSlave.vagina > 0) || (canDoAnal($activeSlave) && $activeSlave.anus > 0))>> Since $activeSlave.slaveName has an unusual sexuality, you @@.hotpink;build $his devotion to you@@ by indulging $his perversions. Since $he's an absolute slut for humiliation, you let $him whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you bring $him on a leash and fuck $him in public. $He comes harder than ever when you push $his naked body up against the wall of a crowded public arcology elevator and molest $him. <<set $activeSlave.counter.oral += 4, $oralTotal += 4>> - <<= BothVCheck(4, 2)>> + <<= VCheck.Both(4, 2)>> <<elseif ($activeSlave.fetishKnown == 1) && ($activeSlave.fetishStrength > 60) && ($activeSlave.fetish == "humiliation")>> Since $activeSlave.slaveName has an unusual sexuality, you @@.hotpink;build $his devotion to you@@ by indulging $his perversions. Since $he's an absolute slut for humiliation, you let $him whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you <<if ($activeSlave.amp != 1)>> @@ -54,7 +54,7 @@ <<elseif ($activeSlave.anus == 0) && ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> You fuck $activeSlave.slaveName, of course, but you do it slowly and lovingly, and keep well clear of $his still-virgin asshole in the process. $He's accustomed to the slave life, so the experience is almost novel for $him and $he is affectingly @@.hotpink;touched by the affection.@@ $He isn't used to being kissed, teased and massaged before $he takes cock. Slaves are usually used without regard to their orgasm, so $he's also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with $his own. $He's a puddle on the sheets under your hands. <<set $activeSlave.counter.oral += 4, $oralTotal += 4>> - <<= VaginalVCheck(4)>> + <<= VCheck.Vaginal(4)>> <<elseif $activeSlave.anus == 0>> $activeSlave.slaveName's accustomed to the slave life, so the experience is almost novel for $him and $he is @@.hotpink;touched by the affection.@@ $He isn't used to being kissed, teased and massaged. $He's almost disappointed when it becomes clear that you don't mean to take $his anal virginity. You gently stimulate $his <<if $activeSlave.dick>>dick<<elseif $activeSlave.clit>>clit<<else>>nipples<</if>> while $he sucks you off, bringing $him to a moaning climax as you cum in $his mouth. <<set $activeSlave.counter.oral += 5, $oralTotal += 5>> @@ -62,9 +62,9 @@ You fuck $activeSlave.slaveName, of course, but you do it slowly and lovingly. $He's accustomed to the slave life, so the experience is almost novel for $him and $he is affectingly @@.hotpink;touched by the affection.@@ $He isn't used to being kissed, teased and massaged before $he takes cock. Slaves are usually used without regard to their orgasm, so $he's also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with $his own. $He's a puddle on the sheets under your hands. <<set $activeSlave.counter.oral += 4, $oralTotal += 4>> <<if $activeSlave.vagina == 0>> - <<= VaginalVCheck(4)>> + <<= VCheck.Vaginal(4)>> <<else>> - <<= BothVCheck(4, 2)>> + <<= VCheck.Both(4, 2)>> <</if>> <</if>> <<if ($PC.slaving >= 100)>> @@ -224,7 +224,7 @@ <<case "hates anal">> does not like it up the butt. Though it would be simpler to train $him out of it, you do your best to train $him to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears. <<if canDoAnal($activeSlave)>> - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> The inability to actually penetrate $his ass hinders your efforts, however. <<set $activeSlave.training -= 20>> /* more difficult training */ @@ -232,10 +232,10 @@ <<case "hates penetration">> <<if ($activeSlave.vagina > -1) && canDoVaginal($activeSlave)>> does not like sex. Though it would be simpler to train $him out of it, you do your best to train $him to safely take a hard pounding without losing the fun aspects of forced sex, like the struggles, the whining, and the tears. - <<= VaginalVCheck(10)>> + <<= VCheck.Vaginal(10)>> <<elseif canDoAnal($activeSlave)>> does not like it up the butt. Though it would be simpler to train $him out of it, you do your best to train $him to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> does not dicks in $his mouth. Though it would be simpler to train $him out of it, you do your best to train $him to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears. <<set $activeSlave.counter.oral += 10, $oralTotal += 10>> @@ -250,10 +250,10 @@ has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to $his pretensions of standards. You do your best to train $him to perform regardless of $his partners' endowments, aiming for a delicate balance that will allow $him to get off with anyone while permitting $him to retain and even build on $his appetite for big dicks. You permit $him to achieve release only when $he's done well with <<if $PC.dick == 1>>your thick cock<<else>>a fat dildo<</if>> <<if $activeSlave.vagina > 0 && canDoVaginal($activeSlave)>> lodged up $his cunt. - <<= VaginalVCheck(10)>> + <<= VCheck.Vaginal(10)>> <<elseif $activeSlave.anus > 0 && canDoAnal($activeSlave)>> lodged up $his butt. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> down $his throat. <<set $activeSlave.counter.oral += 10, $oralTotal += 10>> @@ -410,19 +410,19 @@ <</if>> <<if ($activeSlave.devotion < -80)>> You bind $him securely to a special chair in your office<<if !canDoAnal($activeSlave) || ($activeSlave.vagina > -1 && !canDoVaginal($activeSlave))>> with $his holes exposed and vulnerable<</if>>. Yours is a busy week, with a lot of business interviews, so whenever the interviewee has pleased you, you offer him or her the use of the poor slave's body on the way out. The chair is specially designed so that the seat, back and armrests can rotate vertically relative to the ground, so $his body can be spun to make any of $his available holes convenient. Fortunately, it also has a pan beneath it to stop the generous stream of ejaculate and lubricant that drips from $him from besmirching the floor. $He can't help but @@.gold;become used to the abuse@@ despite $his @@.mediumorchid;resentment.@@ - <<= BothVCheck(10, 5)>> + <<= VCheck.Both(10, 5)>> <<elseif ($activeSlave.devotion < -60) && ($activeSlave.anus != 0)>> $activeSlave.slaveName is really wild and stern measures must be taken. So, $he is<<if !canDoAnal($activeSlave) || ($activeSlave.vagina > -1 && !canDoVaginal($activeSlave))>> stripped of $his protective chastity and<</if>> forced, struggling and screaming, into a latex suit that completely blinds, deafens, and immobilizes $him. So attired, the only places where $he can feel any sensations at all other than endless latex darkness are $his <<if ($activeSlave.dick != 0) && ($activeSlave.vagina != -1)>>pussy, and cock<<elseif ($activeSlave.dick != 0)>>cock<<else>>pussy<</if>> and backdoor. For $him, time becomes a featureless, torturous boredom broken only by occasional rape. Eventually, $he becomes so @@.mediumorchid;desperate@@ for something, anything, to break the monotony that $he begins to look forward to the next time a phallus will @@.gold;force@@ its way into $him. - <<= BothVCheck(6, 3)>> + <<= VCheck.Both(6, 3)>> <<elseif ($activeSlave.devotion < -50) && ($activeSlave.hStyle != "shaved") && (random(1,100) > 90)>> $activeSlave.slaveName needs to be taken down a peg. Fortunately, you know just the thing. You bring $him into a bathroom, place a chair in the tub, and tie $him securely to the chair. $He isn't too perturbed — $he probably expects a facefuck under running water or something like that — but $he begins to cry when $he <<if canHear($activeSlave)>>hears you switch on<<elseif canSee($activeSlave)>>sees you pull out<<else>>feels the cool touch of<</if>> an electric shaver. $He luxuriates in $his hair, flaunting it every chance $he gets; it's something of value in a bleak slave world and $he sobs as you shave it off $him. Afterward, $he sniffles and @@.gold;looks at you in fear@@ and @@.mediumorchid;unhappiness@@ when you rub $his newly bald scalp. Of course, there's always the body modification studio if you ever feel like $he's earned $his hair back. <<set $activeSlave.hStyle = "shaved", $activeSlave.hLength = 0>> <<elseif canDoAnal($activeSlave) && (random(1,100) < 10)>> Sometimes, there's no need to be clever. The first indication $he gets that you've decided to train $him this week is when $he wakes suddenly in the middle of the night to the burning sensation of a <<if $PC.dick == 1>>cock<<else>>strap-on<</if>> being shoved up $his ass. Not knowing what is happening, $he struggles, but since $he was already lying in $his bed you just lie on top of $him and press $his wriggling body into the sheets as you assrape $him. For the rest of the week, $he finds $himself grabbed and fucked. $He can't help but @@.gold;become used to the abuse@@ despite $his @@.mediumorchid;resentment.@@ - <<= AnalVCheck(6)>> + <<= VCheck.Anal(6)>> <<elseif canDoVaginal($activeSlave) && (random(1,100) < 10)>> Sometimes, there's no need to be clever. The first indication $he gets that you've decided to train $him this week is when $he wakes suddenly in the middle of the night to the filling sensation of a <<if $PC.dick == 1>>cock<<else>>strap-on<</if>> being shoved up into $his pussy. Not knowing what is happening, $he struggles, but since $he was already lying in $his bed you just lie on top of $him and press $his wriggling body into the sheets as you assrape $him. For the rest of the week, $he finds $himself grabbed and fucked. $He can't help but @@.gold;become used to the abuse@@ despite $his @@.mediumorchid;resentment.@@ - <<= VaginalVCheck(6)>> + <<= VCheck.Vaginal(6)>> <<else>> $activeSlave.slaveName violently resists you whenever $he can. This cannot be permitted, so after a particularly severe bout of physical resistance, you decide to employ an old method of breaking a mind without damaging a body. You secure $him to a board and gently wash $his face with a wet cloth. $He spits in defiance, only to be surprised when you lower the board so that $his feet are higher than $his head. You tie the cloth around $his face. A thin stream of water onto the cloth produces all the feeling and none of the reality of a slow death by drowning. Waterboarding isn't much use for extracting information, but it works well for @@.gold;slavebreaking.@@ <</if>> @@ -461,7 +461,7 @@ <<elseif ($activeSlave.devotion < -50) && canDoAnal($activeSlave)>> <<set $activeSlave.minorInjury = either("black eye", "bruise", "split lip")>> $activeSlave.slaveName is willing to physically defend $himself against sexual abuse. Training $him out of this rebelliousness is a nice sexual change of pace. For the entire week, whenever $he commits some minor sin, you fight $him into a state of physical submission and then sodomize $him. This usually requires an extended beating to render $him quiescent, followed by holding $him down so that $his struggles do not dislodge your <<if $PC.dick == 1>>cock<<else>>strap-on<</if>> from $his delightfully spasming butthole. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the extreme stress @@.red;affects $his health, leaving $him with a $activeSlave.minorInjury.@@ - <<= AnalVCheck(6)>> + <<= VCheck.Anal(6)>> <<elseif ($activeSlave.scrotum > 0)>> <<set $activeSlave.minorInjury = either("black eye", "bruise", "split lip")>> $activeSlave.slaveName has indefensible, obvious targets for harsh breaking. Whenever $he falls short in the smallest way, you bind $him in such a way that $his <<if $activeSlave.dick>>cock and <</if>>balls are dangling defenseless, and $he cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to $his <<if $activeSlave.dick>>member and <</if>>sack, while beating the rest of $him thoroughly. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the beatings @@.red;affect $his health, leaving $him with a $activeSlave.minorInjury.@@ @@ -601,7 +601,7 @@ <<case "hates anal">> <<if canDoAnal($activeSlave)>> $activeSlave.slaveName does not like it up the butt. $He views $his rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up $his behind, and when you bore of that, you require $him to assfuck $himself with a dildo instead. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> $activeSlave.slaveName does not like it up the butt. $He views $his rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to toy with $his rear. The inability to actually penetrate $his ass hinders your efforts, however. <<set $activeSlave.training -= 20>> /* more difficult training */ @@ -611,7 +611,7 @@ $activeSlave.slaveName does not like sex. In earlier times, it was accepted and understood that some, particularly some women, had a low sex drive. No Free Cities sex slave is allowed to engage in such foolishness. It's a hard flaw to fix, and for now you substitute obedience for honest enjoyment, and just get $him used to strong stimulation without putting anything in $him. <<elseif canDoAnal($activeSlave)>> $activeSlave.slaveName does not like it up the butt. $He views $his rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up $his behind, and when you bore of that, you require $him to assfuck $himself instead. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> $activeSlave.slaveName does not like it up the butt. $He views $his rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. It's a hard flaw to fix when you can't introduce $his anus to things, but for now you substitute obedience for honest enjoyment, and just get $him used to strong stimulation without putting anything in $him. <</if>> @@ -625,7 +625,7 @@ $activeSlave.slaveName has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to $his pretensions of standards. To $his regret, $he frequently implies that $he prefers partners with big dicks: regret, because whenever $he's caught doing this, you have $him brought to you and <<if $PC.dick == 1>>apply your big dick<<else>>apply a big dildo<</if>> <<if ($activeSlave.anus > 0) && canDoAnal($activeSlave)>> to $his anus without mercy. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<else>> to $his gagging throat. <<set $activeSlave.counter.oral += 10, $oralTotal += 10>> @@ -643,30 +643,30 @@ $activeSlave.slaveName is utterly addicted to cum. You keep $him in your office whenever you can, and subject $him to a strict sexual diet of <<if canDoVaginal($activeSlave)>>sex,<<elseif canDoAnal($activeSlave)>>buttsex,<<else>>breast play,<</if>> no oral allowed, no matter how much $he begs to be permitted to <<if $PC.dick == 1>>suck you off<<else>>eat you out<</if>>. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "anal addict">> $activeSlave.slaveName is utterly addicted to buttsex. You keep $him in your office whenever you can, and subject $him to a strict sexual diet of <<if canDoVaginal($activeSlave)>>vanilla sex,<<else>>oral and manual intercourse,<</if>> no anal allowed, no matter how much $he begs you to stick something, anything, up $his ass. - <<if ($activeSlave.vagina > -1) && canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if ($activeSlave.vagina > -1) && canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<case "attention whore">> $activeSlave.slaveName is an obnoxious attention whore. You keep $him in your office and make love to $him whenever you can, but only whenever you're alone in the office. You even instruct $assistantName not to bother you while the slave is receiving $his therapy. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "breast growth">> $activeSlave.slaveName is completely devoted to $his own tits. You keep $him in your office whenever you can, <<if canDoVaginal($activeSlave)>>fucking $him<<elseif canDoAnal($activeSlave)>>fucking $his ass<<else>>fucking $his face<</if>> in positions that offer $his boobs no stimulation at all. When you're not broadening $his sexual horizons, $he's restrained to keep $him from touching $his own nipples, despite piteous begging. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "abusive" "malicious">> $activeSlave.slaveName seems to have forgotten that $he's your bitch, so you remind $him. You keep $him in your office whenever $he's not otherwise occupied, and hold $him down and fuck $him whenever you feel like it. It's been a long time since $he was on the bottom this regularly. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "self hating">> $activeSlave.slaveName hates $himself much more than is normal for a well trained sex slave, to the point where $he actively seeks out unhealthy and destructive assignments. You build up $his sexual self esteem with a steady diet of <<if canDoVaginal($activeSlave)>>missionary lovemaking,<<elseif canDoAnal($activeSlave)>>gentle anal loving,<<else>>gentle oral sex,<</if>> and make sure to praise $him and keep $his spirits up as much as you can. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "neglectful">> $activeSlave.slaveName has given up on $his own sexual pleasure to an extent, focusing only on getting others off. You keep $him in your office and play with $him regularly, making a game of getting $him off as often as possible. You're careful to use other slaves for your own pleasure. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><</if>> <<case "breeder">> $activeSlave.slaveName has become so sexually obsessed with pregnancy that impregnation holds less interest for $him than being pregnant. <<if $activeSlave.pregKnown == 1>> @@ -682,7 +682,7 @@ <<else>> Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy. So, you address the situation by fucking $him up the ass, and making sure $he gets off to it, too. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <</if>> <</switch>> <<set $activeSlave.training += 40>> /* fixing is easier than softening */ @@ -892,7 +892,7 @@ <<case "induce odd behavior">> Since you've decided to abuse $him into odd behavior, you target $him for a campaign of surprise sex. You constantly ambush $him, shove $him onto the ground, and fuck $him. Sometimes $he wakes up from bad dreams to find you penetrating $him. <<InduceFlawAbuseEffects>> - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He does $his best to tolerate the abuse. <<else>> @@ -904,7 +904,7 @@ <<case "induce hatred of men">> In order to make $him hate men, you sometimes simply <<if $PC.dick == 1>>stick your dick in $him without asking<<else>>stuff a strap-on inside $him without asking<</if>>, and sometimes force shockingly juvenile pranks on $him. $He is regularly smacked in the face with floppy dildos. <<InduceFlawAbuseEffects>> - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He focuses more on you than on the masculine aspects of this. You'll need to be more subtle next week. <<else>> @@ -984,7 +984,7 @@ Since you've decided to force $him to dislike anal sex, you're forced to use a complicated and refined slave breaking technique: constantly raping $his ass. <<if !canDoAnal($activeSlave)>>Every time you catch $him with $his chastity off, you're there to penetrate $his rectum<</if>>. <<InduceFlawAbuseEffects>> - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<if $activeSlave.training < 100>> $He does $his best to comply with your abuse of $his butthole, unknowingly condemning $himself to more assrape. <<else>> @@ -996,7 +996,7 @@ <<case "induce hatred of penetration">> Since you've decided to force $him to dislike penetration, you're forced to use a complicated and refined slave breaking technique: constantly raping $him. <<InduceFlawAbuseEffects>> - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He does $his best to comply with your abuse, unknowingly condemning $himself to more of it. <<else>> @@ -1041,7 +1041,7 @@ <<case "induce sexual apathy">> Since you've decided to force sexual apathy on $him, you keep $him in your office whenever $he's not otherwise occupied. You use $him regularly, and punish $him whenever $he shows any sign of enjoyment. <<InduceFlawAbuseEffects>> - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He continues to experience arousal when fucked, and will need more of this treatment. <<else>> @@ -1052,7 +1052,7 @@ <<if $activeSlave.training < 100>> <<= IncreasePCSkills('slaving', 0.2)>> <<else>> <<= IncreasePCSkills('slaving', 0.5)>> <</if>> <<case "induce crudity">> Since you've decided to force sexual crudeness on $him, you keep $him in your office whenever $he's not otherwise occupied, and degrade $him cruelly. You relax the normal cleanliness rules, and require $him to leave $his used holes as they are until $he's too disgusting to fuck. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<InduceFlawAbuseEffects>> <<if $activeSlave.training < 100>> $He does $his best to tolerate the unclean feelings, condemning $himself to more of this. @@ -1086,7 +1086,7 @@ <<if $activeSlave.training < 100>> <<= IncreasePCSkills('slaving', 0.2)>> <<else>> <<= IncreasePCSkills('slaving', 0.5)>> <</if>> <<case "induce anal addiction">> The buttslut is quite pleased when you order $him to stay in your office<<if !canDoAnal($activeSlave)>>and remove $his chastity<</if>> whenever $he can for use as one of your personal anal toys. You make $his anal orgasms predictably regular, doing your best to inculcate reliance on them. - <<= AnalVCheck(10)>> + <<= VCheck.Anal(10)>> <<if $activeSlave.training < 100>> $He enjoys all the anal attention, but will need more training to develop psychological addiction to buttsex. <<else>> @@ -1097,7 +1097,7 @@ <<if $activeSlave.training < 100>> <<= IncreasePCSkills('slaving', 0.2)>> <<else>> <<= IncreasePCSkills('slaving', 0.5)>> <</if>> <<case "induce attention whoring">> The humiliation slut is quite pleased when you order $him to stay in your office whenever $he can, and fucking $him whenever other slaves are present. You do your best to focus $his attention on how the others react to the spectacle. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He enjoys all the humiliation, but will need more training to become a true attention whore. <<else>> @@ -1140,7 +1140,7 @@ <<if $activeSlave.training < 100>> <<= IncreasePCSkills('slaving', 0.2)>> <<else>> <<= IncreasePCSkills('slaving', 0.5)>> <</if>> <<case "induce self hatred">> You order the masochist to stay in your office whenever $he's not working or resting. You fuck $him cruelly, going beyond the pain $he enjoys into harsh degradation. And every time you use $him, you make sure to tell $him how useless $he is. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He gets off on the pain, but $his sense of self isn't seriously affected this week. <<else>> @@ -1151,7 +1151,7 @@ <<if $activeSlave.training < 100>> <<= IncreasePCSkills('slaving', 0.2)>> <<else>> <<= IncreasePCSkills('slaving', 0.5)>> <</if>> <<case "induce sexual self neglect">> You order the sub to stay in your office whenever $he's not working or resting, and use $his body for your pleasure. The instant you climax, you go back to your work or to another slave, treating $him like a piece of used tissue. - <<if canDoVaginal($activeSlave)>><<= VaginalVCheck(10)>><<elseif canDoAnal($activeSlave)>><<= AnalVCheck(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> + <<if canDoVaginal($activeSlave)>><<= VCheck.Vaginal(10)>><<elseif canDoAnal($activeSlave)>><<= VCheck.Anal(10)>><<else>><<set $activeSlave.counter.oral += 10, $oralTotal += 10>><</if>> <<if $activeSlave.training < 100>> $He accepts $his utterly submissive role, but $his sense of self isn't seriously affected this week. <<else>> diff --git a/src/uncategorized/reRecruit.tw b/src/uncategorized/reRecruit.tw index 4c343cf623ab2adde78f3a642762958de38852dc..1c7305ca85d28ee6bd6a36ae2cd3e744e74ca352 100644 --- a/src/uncategorized/reRecruit.tw +++ b/src/uncategorized/reRecruit.tw @@ -442,8 +442,8 @@ <<set $activeSlave.nosePiercing = random(0,1)>> <<set $activeSlave.clitPiercing = random(0,1)>> <<set $activeSlave.nipplesPiercing = random(0,1)>> -<<set $activeSlave.shouldersTat = either(0, 0, "flowers", "tribal patterns")>> -<<set $activeSlave.stampTat = either(0, 0, "flowers", "tribal patterns")>> +<<set $activeSlave.shouldersTat = either("flowers", "tribal patterns", 0, 0)>> +<<set $activeSlave.stampTat = either("flowers", "tribal patterns", 0, 0)>> <<case "shemale PC">> @@ -483,7 +483,7 @@ <<set $activeSlave.lipsPiercing = random(0,1)>> <<set $activeSlave.clitPiercing = random(0,1)>> <<set $activeSlave.nipplesPiercing = random(0,1)>> -<<set $activeSlave.stampTat = either(0, 0, "tribal patterns", "flowers", "advertisements", "degradation", "rude words")>> +<<set $activeSlave.stampTat = either("advertisements", "degradation", "flowers", "rude words", "tribal patterns", 0, 0)>> <<set $activeSlave.anusTat = either("bleached")>> <<set $activeSlave.pubicHStyle = "waxed">> @@ -2059,7 +2059,7 @@ Not every day in the arcology is calm and this one is most certainly more energe <<elseif $terrain == "oceanic">> canal extending from the front gate as a small convoy of luxury yachts sails in. Your arcology isn't immune to outside old world influences, and the person on the center yacht <</if>> - so happens to be such a force. +so happens to be such a force. Recently, a young musical prodigy has taken both the old world and the free cities by storm. Their rising popularity has gained them quite a following and the attention of some very powerful people. You look at the schedule of events for citizens tonight and, sure enough, they are to appear, live in concert, tonight. You tell $assistantName to set up a live feed of the performance for you so as not to interrupt your work. Several hours later, the young artist comes out on stage to a full house. They perform their latest hits and some fan favorites, but it's the crowd suddenly going silent that disturbs you from your paperwork. You look at the feed to see the artist standing there, a sullen expression on their face, tears streaming down their cheeks, and their body jerking, obviously wracked by occasional sobbing. They take a very quick bow and run off stage, before the feed gets cut. You shrug — artists have breakdowns — and return to your tasks. Surprisingly, $assistantName chimes in to tell you that an unexpected guest has arrived. You have them sent in and are surprised to see the young, visibly distressed prodigy. "I wa<<s>> told by my produ<<c>>er to come here; they <<s>>ay I have earned enough of a debt to be en<<s>>laved. I heard that <<s>>lave<<s>> <<s>>eem to be treated well here and thought that, ju<<s>>t maybe, if I convin<<c>>ed them to let my final performan<<c>>e be here, I would have a chan<<c>>e at a better life than at another arcology owned by a crueler ma<<s>>ter. Plea<<s>>e, would you con<<s>>ider taking me in?" diff --git a/src/uncategorized/reShelterInspection.tw b/src/uncategorized/reShelterInspection.tw index 7fdafd9edbf825aa1385c9054c557253ef41355c..cb46a234557a34e952276d68fd68a8f31a0b91f5 100644 --- a/src/uncategorized/reShelterInspection.tw +++ b/src/uncategorized/reShelterInspection.tw @@ -44,8 +44,8 @@ <<set _Inspectee = getSlave(_slave)>> <<set _originSlave = $genePool.find(function(s) { return s.ID == _slave; })>> /* - * this check is currently unnecessary but if in the future the shelter girl IDs list is changed to updated only when acquiring shelter girls, this should be enabled - * +* this check is currently unnecessary but if in the future the shelter girl IDs list is changed to updated only when acquiring shelter girls, this should be enabled +* <<if (ndef _Inspectee)>> <<set $shelterGirlsIDs.delete(_slave)>> <<goto "Random Nonindividual Event">> @@ -423,7 +423,7 @@ Not waiting to be greeted, the inspector looks up at the nearest camera and dema "Hey," $he protests, "that'<<s>> normal." The inspector looks incredulous. "What!?" The slave looks insulted and replies, "I love <<s>>e<<x>>! Don't judge me. I take cock in all my hole<<s>>, and I like it. I'm going to beg for butt<<s>>e<<x>> the moment you leave, you bitch." $He defiantly sticks $his rump out at you. The inspector looks deflated, and reluctantly makes a positive note on _his2 tablet. <<set $shelterAbuse -= 1>> <<else>> - "I'm a <<s>>lave," $he says confidently. The inspector frowns. "What does that have to do with it?" The slave beams and replies, "It'<<s>> a hole. I'm a good _girl2, <<s>>o I get fucked in all my hole<<s>>." The inspector looks deflated, and reluctantly makes a positive note on _his2 tablet. + "I'm a <<s>>lave," $he says confidently. The inspector frowns. "What does that have to do with it?" The slave beams and replies, "It'<<s>> a hole. I'm a good $girl, <<s>>o I get fucked in all my hole<<s>>." The inspector looks deflated, and reluctantly makes a positive note on _his2 tablet. <<set $shelterAbuse -= 1>> <</if>> <</if>> diff --git a/src/uncategorized/recruiterSelect.tw b/src/uncategorized/recruiterSelect.tw index 716748044db1564f13dfb90311d399fd4b78008a..f21248fbc81048d60eeebc97f319a867f1474b6a 100644 --- a/src/uncategorized/recruiterSelect.tw +++ b/src/uncategorized/recruiterSelect.tw @@ -1,7 +1,6 @@ :: Recruiter Select [nobr] <<set $nextButton = "Back to Main", $nextLink = "Main", $showEncyclopedia = 1, $encyclopedia = "Recruiter">> -<<showallAssignmentFilter>> <<if ($Recruiter != 0)>> <<set $Recruiter = getSlave($Recruiter.ID)>> <<setLocalPronouns $Recruiter>> @@ -66,9 +65,4 @@ <br><br>''Appoint a recruiter from among your devoted slaves:'' <br>[[None|Recruiter Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.penthouse)>> diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 50bdc8a4c0db51facdf74e0990e167ca78281670..2806cc33d3cd3ed9668cb54e096951d11e80a14a 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -1408,7 +1408,7 @@ $He has <<if $arcologies[0].childhoodFertilityInducedNCSResearch == 1>> <br> <<if $activeSlave.geneMods.NCS == 0>> - [[Induced NCS Treatment|Surgery Degradation][$activeSlave.geneMods.NCS = 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave) * 4, $activeSlave.health -= 80, $activeSlave.chem += 40,$surgeryType = "retrograde virus injection NCS"]] //This will induce @@.orange;NCS@@ in $his genetic code// + [[Induced NCS treatment|Surgery Degradation][$activeSlave.geneMods.NCS = 1,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 80, $activeSlave.chem += 40,$surgeryType = "retrograde virus injection NCS"]] //This will induce @@.orange;NCS@@ in $his genetic code// <<else>> //$He already has Induced @@.orange;NCS@@// <</if>> @@ -1416,7 +1416,7 @@ $He has <<if $RapidCellGrowthFormula == 1>> <br> <<if $activeSlave.geneMods.rapidCellGrowth == 0>> - [[Increased Elasticity Treatment|Surgery Degradation][$activeSlave.geneMods.rapidCellGrowth = 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave) * 4, $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "elasticity treatment"]] //This will alter $his genetic code to encourage $his body to stretch// + [[Increased elasticity treatment|Surgery Degradation][$activeSlave.geneMods.rapidCellGrowth = 1,cashX(forceNeg($surgeryCost * 4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "elasticity treatment"]] //This will alter $his genetic code to encourage $his body to stretch// <<else>> //$He already has received the plasticity increasing elasticity treatment// <</if>> @@ -1424,14 +1424,32 @@ $He has <<if $activeSlave.geneticQuirks.albinism == 2>> <br> [[Albinism prevention treatment|Surgery Degradation][$activeSlave.geneticQuirks.albinism = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.albinism == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Albinism activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.albinism = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] //Will not have an active effect// + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced albinism treatment|Surgery Degradation][$activeSlave.geneticQuirks.albinism = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;albinism@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.dwarfism == 2>> <br> [[Dwarfism correction treatment|Surgery Degradation][$activeSlave.geneticQuirks.dwarfism = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.dwarfism == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Dwarfism activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.dwarfism = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced dwarfism treatment|Surgery Degradation][$activeSlave.geneticQuirks.dwarfism = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;dwarfism@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.gigantism == 2>> <br> [[Gigantism correction treatment|Surgery Degradation][$activeSlave.geneticQuirks.gigantism = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.gigantism == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Gigantism activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.gigantism = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + /*[[Induced gigantism treatment|Surgery Degradation][$activeSlave.geneticQuirks.gigantism = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]]*/ //This will induce @@.orange;gigantism@@ in $his genetic code// // Offline pending growth charting // <</if>> <<if $activeSlave.geneticQuirks.pFace == 2>> <br> @@ -1444,30 +1462,72 @@ $He has <<if $activeSlave.geneticQuirks.hyperFertility == 2>> <br> [[Correct genetic hyper fertility|Surgery Degradation][$activeSlave.geneticQuirks.hyperFertility = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.hyperFertility == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Hyper fertility activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.hyperFertility = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced hyper fertility treatment|Surgery Degradation][$activeSlave.geneticQuirks.hyperFertility = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;inhumanly high fertility@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.fertility == 2>> <br> [[Correct heightened fertility|Surgery Degradation][$activeSlave.geneticQuirks.fertility = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.fertility == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Heightened fertility activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.fertility = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced heightened fertility treatment|Surgery Degradation][$activeSlave.geneticQuirks.fertility = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;heightened fertility@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.superfetation == 2>> <br> [[Correct ova release during pregnancy|Surgery Degradation][$activeSlave.geneticQuirks.superfetation = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.superfetation == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Superfetation activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.superfetation = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced superfetation treatment|Surgery Degradation][$activeSlave.geneticQuirks.superfetation = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;superfetation@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.gigantomastia >= 2>> <br> [[Correct gigantomastia|Surgery Degradation][$activeSlave.geneticQuirks.gigantomastia = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.gigantomastia == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Gigantomastia activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.gigantomastia = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.gigantomastia == 0 && $geneticFlawLibrary == 1>> + <br> + [[Induced gigantomastia treatment|Surgery Degradation][$activeSlave.geneticQuirks.gigantomastia = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;gigantomastia@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.macromastia >= 2>> <br> [[Correct macromastia|Surgery Degradation][$activeSlave.geneticQuirks.macromastia = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.macromastia == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Macromastia activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.macromastia = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.macromastia == 0 && $geneticFlawLibrary == 1>> + <br> + [[Induced macromastia treatment|Surgery Degradation][$activeSlave.geneticQuirks.macromastia = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;macromastia@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.rearLipedema == 2>> <br> [[Correct lipedema|Surgery Degradation][$activeSlave.geneticQuirks.rearLipedema = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.rearLipedema == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Lipedema activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.rearLipedema = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced lipedema treatment|Surgery Degradation][$activeSlave.geneticQuirks.rearLipedema = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;lipedema@@ in $his genetic code// <</if>> <<if $activeSlave.geneticQuirks.wellHung == 2>> <br> [[Correct genetic predisposition for large genitals|Surgery Degradation][$activeSlave.geneticQuirks.wellHung = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $activeSlave.geneticQuirks.wellHung == 1 && $geneticMappingUpgrade >= 2>> + <br> + [[Enhanced penile development activation treatment|Surgery Degradation][$activeSlave.geneticQuirks.wellHung = 2,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]] + <<elseif $geneticFlawLibrary == 1>> + <br> + [[Induced penile development treatment|Surgery Degradation][$activeSlave.geneticQuirks.wellHung = 2,cashX(forceNeg($surgeryCost*10), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 40,$surgeryType = "gene treatment"]] //This will induce @@.orange;penile development@@ in $his genetic code// <</if>> <</if>> <br><br> diff --git a/src/uncategorized/reputation.tw b/src/uncategorized/reputation.tw index da4ea4c2e3beaebe5f7261688efa0034e0ff0b67..d207c15a33f3effd992fda9d2d999096acfdcaca 100644 --- a/src/uncategorized/reputation.tw +++ b/src/uncategorized/reputation.tw @@ -13,10 +13,10 @@ On formal occasions, you are announced as $PCTitle. <<if $nicaeaAchievement == "slaves">> <<if $slaves.length > 50>> @@.green;strongly approve@@ of the large - <<= FSChange("ChattelReligionist", 5)>> + <<= FutureSocieties.Change("ChattelReligionist", 5)>> <<elseif $slaves.length > 20>> @@.green;approve@@ of the good - <<= FSChange("ChattelReligionist", 2)>> + <<= FutureSocieties.Change("ChattelReligionist", 2)>> <<else>> are not impressed by the <</if>> @@ -24,10 +24,10 @@ On formal occasions, you are announced as $PCTitle. <<elseif $nicaeaAchievement == "devotion">> <<if $averageDevotion > 80>> @@.green;strongly approve@@ of the worshipfulness - <<= FSChange("ChattelReligionist", 5)>> + <<= FutureSocieties.Change("ChattelReligionist", 5)>> <<elseif $averageDevotion > 50>> @@.green;approve@@ of the devotion - <<= FSChange("ChattelReligionist", 2)>> + <<= FutureSocieties.Change("ChattelReligionist", 2)>> <<else>> are not impressed by the devotion <</if>> @@ -35,10 +35,10 @@ On formal occasions, you are announced as $PCTitle. <<else>> <<if $averageTrust > 50>> @@.green;strongly approve@@ of the great trust your slaves place in you. - <<= FSChange("ChattelReligionist", 5)>> + <<= FutureSocieties.Change("ChattelReligionist", 5)>> <<elseif $averageTrust > 20>> @@.green;approve@@ of the trust your slaves place in you. - <<= FSChange("ChattelReligionist", 2)>> + <<= FutureSocieties.Change("ChattelReligionist", 2)>> <<else>> are not impressed by the fear many of your slaves feel towards you. <</if>> @@ -143,7 +143,7 @@ On formal occasions, you are announced as $PCTitle. Your reputation is so well-established that society has accepted your notoriously feminine appearance despite how unusual it is for a prominent slaveowner to look like you do. <<if $arcologies[0].FSGenderRadicalist > 30>> Indeed, society sees you as entirely male, since you are powerful, and @@.green;strongly approves@@ of your nonconformity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <<elseif $arcologies[0].FSGenderFundamentalist > 30>> Indeed, society has been reconciled to female leadership, preferring to see you as a mother figure. <</if>> @@ -151,14 +151,14 @@ On formal occasions, you are announced as $PCTitle. Society accepts you as an arcology owner, since it has become open-minded about power and gender. <<if $arcologies[0].FSGenderRadicalist > 50>> Indeed, society sees you as fundamentally male, since you are powerful, and @@.green;strongly approves@@ of your audacity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <</if>> <<else>> Most prominent slaveowners are male, and your obviously feminine appearance makes it @@.red;harder for you to maintain your reputation.@@ <<run repX(forceNeg(Math.min(($rep*0.05), 500)), "PCappearance")>> <<if $arcologies[0].FSGenderFundamentalist > 10>> Society @@.red;strongly resents@@ your being an arcology owner; this damages the idea that women should not be in positions of responsibility. - <<= FSChange("GenderFundamentalist", -5)>> + <<= FutureSocieties.Change("GenderFundamentalist", -5)>> <</if>> <</if>> <<elseif ($PC.boobs == 1) || $PC.title == 0>> @@ -166,7 +166,7 @@ On formal occasions, you are announced as $PCTitle. Your reputation is so strong that society has accepted your feminine appearance despite how unusual it is for a prominent slaveowner to look like you do. <<if $arcologies[0].FSGenderRadicalist > 30>> Indeed, society sees you as entirely male, since you are powerful, and @@.green;strongly approves@@ of your nonconformity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <<elseif $arcologies[0].FSGenderFundamentalist > 30>> Indeed, society has been reconciled to your feminine appearance, seeing you as a person apart. <</if>> @@ -174,14 +174,14 @@ On formal occasions, you are announced as $PCTitle. Society accepts you as an arcology owner, since it has become open-minded anyone who has a cock and fucks. <<if $arcologies[0].FSGenderRadicalist > 30>> Indeed, society sees you as dominant, since you fuck bitches, and @@.green;strongly approves@@ of your nonconformity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <</if>> <<else>> Most prominent slaveowners are very masculine, and your feminine appearance makes it @@.red;harder for you to maintain your reputation.@@ <<run repX(forceNeg(Math.min(($rep*0.025), 250)), "PCappearance")>> <<if $arcologies[0].FSGenderFundamentalist > 30>> Society @@.red;strongly resents@@ your being an arcology owner; this damages the idea that feminine people should not be in positions of responsibility. - <<= FSChange("GenderFundamentalist", -5)>> + <<= FutureSocieties.Change("GenderFundamentalist", -5)>> <</if>> <</if>> <<elseif ($PC.dick == 0) || ($PC.vagina == 1)>> @@ -189,7 +189,7 @@ On formal occasions, you are announced as $PCTitle. Your reputation is so strong that society has accepted your unorthodox arrangement downstairs, for an arcology owner. <<if $arcologies[0].FSGenderRadicalist > 30>> Indeed, society sees you as entirely male, since you are powerful, and @@.green;strongly approves@@ of your nonconformity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <<elseif $arcologies[0].FSGenderFundamentalist > 30>> Indeed, society has been reconciled to your strangeness, seeing you as a person apart. <</if>> @@ -197,14 +197,14 @@ On formal occasions, you are announced as $PCTitle. Society accepts you as an arcology owner, since it has become open-minded about the exact genital layout of powerful people. <<if $arcologies[0].FSGenderRadicalist > 30>> Indeed, society sees you as dominant, since you are powerful, and @@.green;strongly approves@@ of your nonconformity; this advances the redefinition of gender around power. - <<= FSChange("GenderRadicalist", 5)>> + <<= FutureSocieties.Change("GenderRadicalist", 5)>> <</if>> <<else>> Most prominent slaveowners are very masculine, and though your unorthodox arrangement downstairs isn't obvious when you're clothed, the rumors are unavoidable and it's @@.red;harder for you to maintain your reputation.@@ <<run repX(forceNeg(Math.min(($rep*0.025), 250)), "PCappearance")>> <<if $arcologies[0].FSGenderFundamentalist > 30>> Society @@.red;strongly resents@@ your being an arcology owner; this damages the idea that people who are not men should not be in positions of responsibility. - <<= FSChange("GenderFundamentalist", -5)>> + <<= FutureSocieties.Change("GenderFundamentalist", -5)>> <</if>> <</if>> <</if>> @@ -219,16 +219,16 @@ On formal occasions, you are announced as $PCTitle. You are so well regarded that society has acquiesced that getting penetrated is not a sure sign of femininity. <<else>> Society views getting fucked as sign of femininity and is @@.red;strongly against your sexual preferences.@@ - <<= FSChange("GenderRadicalist", -1)>> + <<= FutureSocieties.Change("GenderRadicalist", -1)>> <<run repX(-1000, "PCactions")>> <</if>> <<elseif $arcologies[0].FSGenderFundamentalist != "unset" && $PC.vagina == 1 && $PC.title == 0>> <<if $rep > 10000>> Society has grown accustomed to your efforts enough to not care that you enjoy slave dick. In fact, it even @@.green;strengthens@@ traditional gender roles, even though you insist on breaking them. - <<= FSChange("GenderFundamentalist", 1)>> + <<= FutureSocieties.Change("GenderFundamentalist", 1)>> <<else>> Society wonders if you would be happier in a whore house getting fucked all day instead of trying to lead an arcology. Your efforts @@.red;strongly support@@ the idea that women should not be in positions of responsibility. - <<= FSChange("GenderFundamentalist", -3)>> + <<= FutureSocieties.Change("GenderFundamentalist", -3)>> <<run repX(-1000, "PCactions")>> <</if>> <<else>> @@ -257,7 +257,7 @@ On formal occasions, you are announced as $PCTitle. <<if $arcologies[0].FSSupremacist != "unset">> <<if ($PC.race == $arcologies[0].FSSupremacistRace)>> Since you are a member of the $PC.race race, society @@.green;strongly approves@@ of your ownership of the arcology. - <<= FSChange("Supremacist", 5)>> + <<= FutureSocieties.Change("Supremacist", 5)>> <</if>> <<elseif $arcologies[0].FSSubjugationist != "unset">> <<if ($PC.race == $arcologies[0].FSSubjugationistRace)>> @@ -432,101 +432,101 @@ On formal occasions, you are announced as $PCTitle. <<if $arcologies[0].FSRomanRevivalist != "unset">> <<if $mercenaries > 0>> Society @@.green;approves@@ of how you are providing for the defense of the state, as should all citizens of the new Rome. - <<= FSChange("RomanRevivalist", $mercenaries)>> + <<= FutureSocieties.Change("RomanRevivalist", $mercenaries)>> <</if>> <<if ($slaves.length > 20) && ($cash > 50000)>> Society @@.green;strongly approves@@ of your wealth and prosperity, fit goals for the <<if def $PC.customTitle>>$PC.customTitle<<elseif $PC.title == 1>>new Roman man<<else>>rising Roman lady<</if>>. - <<= FSChange("RomanRevivalist", 5)>> + <<= FutureSocieties.Change("RomanRevivalist", 5)>> <</if>> <<if $language != "Latin">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than the storied Latin @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("RomanRevivalist", -2)>> + <<= FutureSocieties.Change("RomanRevivalist", -2)>> <</if>> <<elseif $arcologies[0].FSAztecRevivalist != "unset">> <<if $PC.visualAge >= 35>> Society @@.green;approves@@ of your advancing age, which advances the ancient Aztec ideal of an experienced leader of the people. - <<= FSChange("AztecRevivalist", 1)>> + <<= FutureSocieties.Change("AztecRevivalist", 1)>> <</if>> <<if $HeadGirl == 0>> Society @@.red;disapproves@@ of you not having a Head Girl as an advisor and assistant. - <<= FSChange("AztecRevivalist", -2)>> + <<= FutureSocieties.Change("AztecRevivalist", -2)>> <<else>> Society @@.green;approves@@ of your reliance on a Head Girl as an advisor and assistant. - <<= FSChange("AztecRevivalist", 2)>> + <<= FutureSocieties.Change("AztecRevivalist", 2)>> <</if>> <<if $PC.warfare < 0>> Society @@.red;greatly disapproves@@ of your feebleness in the arts of war. - <<= FSChange("AztecRevivalist", -4)>> + <<= FutureSocieties.Change("AztecRevivalist", -4)>> <<elseif $PC.warfare < 50>> Society @@.red;disapproves@@ of you not being properly trained in the arts of war. - <<= FSChange("AztecRevivalist", -2)>> + <<= FutureSocieties.Change("AztecRevivalist", -2)>> <<else>> Society @@.green;approves@@ of having a leader that is trained in the arts of war. - <<= FSChange("AztecRevivalist", 2)>> + <<= FutureSocieties.Change("AztecRevivalist", 2)>> <</if>> <<if $language != "Nahuatl">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than the revived Nahuatl @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("AztecRevivalist", -3)>> + <<= FutureSocieties.Change("AztecRevivalist", -3)>> <</if>> <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> <<if $racialVarieties.length > 4>> Society @@.green;strongly approves@@ of how you own a cornucopia of different races, which advances the ancient Egyptian ideal of cosmopolitan sex slavery. - <<= FSChange("EgyptianRevivalist", 5)>> + <<= FutureSocieties.Change("EgyptianRevivalist", 5)>> <</if>> <<if $language != "Ancient Egyptian">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than revived Ancient Egyptian @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("EgyptianRevivalist", -2)>> + <<= FutureSocieties.Change("EgyptianRevivalist", -2)>> <</if>> <<elseif $arcologies[0].FSEdoRevivalist != "unset">> <<set _threshold = Math.trunc($rep/2000)>> <<if $publicServants <= _threshold>> Society @@.red;disapproves@@ of your failure to provide for cultural development by offering public servants or club slaves in a number that befits your reputation. - <<= FSChange("EdoRevivalist", -2)>> + <<= FutureSocieties.Change("EdoRevivalist", -2)>> <<else>> Society @@.green;approves@@ of your provision for cultural development by offering public servants and club slaves in a number that befits your reputation. - <<= FSChange("EdoRevivalist", 2)>> + <<= FutureSocieties.Change("EdoRevivalist", 2)>> <</if>> <<if $language != "Japanese">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than pure Japanese @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("EdoRevivalist", -2)>> + <<= FutureSocieties.Change("EdoRevivalist", -2)>> <</if>> <<elseif $arcologies[0].FSArabianRevivalist != "unset">> <<if $fuckSlaves < $rep/3500>> Society @@.red;disapproves@@ of the small size of your harem, feeling that you do not have enough fucktoys or slaves in your master suite for your reputation. - <<= FSChange("ArabianRevivalist", -2)>> + <<= FutureSocieties.Change("ArabianRevivalist", -2)>> <<else>> Society @@.green;approves@@ of the size of your harem, feeling that you have a good number of fucktoys and slaves in your master suite for your reputation. - <<= FSChange("ArabianRevivalist", 2)>> + <<= FutureSocieties.Change("ArabianRevivalist", 2)>> <</if>> <<if $language != "Arabic">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than the Arabic in which the word of God was passed to Muhammad @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("ArabianRevivalist", -2)>> + <<= FutureSocieties.Change("ArabianRevivalist", -2)>> <</if>> <<elseif $arcologies[0].FSChineseRevivalist != "unset">> <<if $HeadGirl == 0>> Society @@.red;disapproves@@ of your failure to rely on a Head Girl, as proper imperial administration requires, - <<= FSChange("ChineseRevivalist", -2)>> + <<= FutureSocieties.Change("ChineseRevivalist", -2)>> <<else>> Society @@.green;approves@@ of your reliance on a Head Girl, as proper imperial administration requires, - <<= FSChange("ChineseRevivalist", 2)>> + <<= FutureSocieties.Change("ChineseRevivalist", 2)>> <</if>> <<if $Recruiter == 0>> @@.red;disapproves@@ of your failure to maintain a Recruiter to expand the Middle Kingdom, - <<= FSChange("ChineseRevivalist", -2)>> + <<= FutureSocieties.Change("ChineseRevivalist", -2)>> <<else>> @@.green;approves@@ of your maintaining a Recruiter to expand the Middle Kingdom, - <<= FSChange("ChineseRevivalist", 2)>> + <<= FutureSocieties.Change("ChineseRevivalist", 2)>> <</if>> <<if $Bodyguard == 0>> and @@.red;disapproves@@ of your failure to keep a Bodyguard as befits a proper imperial palace. - <<= FSChange("ChineseRevivalist", -2)>> + <<= FutureSocieties.Change("ChineseRevivalist", -2)>> <<else>> and @@.green;approves@@ of your keeping a Bodyguard, as befits a proper imperial palace. - <<= FSChange("ChineseRevivalist", 2)>> + <<= FutureSocieties.Change("ChineseRevivalist", 2)>> <</if>> <<if $language != "Chinese">> Continuing to use $language as the lingua franca of $arcologies[0].name rather than the Chinese of the Middle Kingdom @@.red;disappoints@@ society and causes doubt about your revivalist project. - <<= FSChange("ChineseRevivalist", -2)>> + <<= FutureSocieties.Change("ChineseRevivalist", -2)>> <</if>> <</if>> @@ -534,19 +534,19 @@ On formal occasions, you are announced as $PCTitle. <<if $IntelligenceEugenicsSMR == 1 || $HeightEugenicsSMR == 1 || $FaceEugenicsSMR == 1>> Society @@.red;disapproves@@ of your policies sterilizing potential mothers. Your insistence on eugenics hinders adoption of your new society. <<set _noEugenics = -1*($IntelligenceEugenicsSMR+$HeightEugenicsSMR+$FaceEugenicsSMR)>> - <<= FSChange("Repopulationist", _noEugenics)>> + <<= FutureSocieties.Change("RepopulationFocus", _noEugenics)>> <</if>> <<elseif $arcologies[0].FSPaternalist != "unset">> <<if $IntelligenceEugenicsSMR == 1 || $HeightEugenicsSMR == 1 || $FaceEugenicsSMR == 1>> Society @@.red;disapproves@@ of your policies forcefully sterilizing slaves, especially when they snuff out the life growing within them. <<set _noEugenics = -1*($IntelligenceEugenicsSMR+$HeightEugenicsSMR+$FaceEugenicsSMR)>> - <<= FSChange("Paternalist", _noEugenics)>> + <<= FutureSocieties.Change("Paternalist", _noEugenics)>> <</if>> <<elseif ($arcologies[0].FSRestart != "unset") && $arcologies[0].FSPaternalist == "unset">> <<if ($IntelligenceEugenicsSMR == 1 || $HeightEugenicsSMR == 1 || $FaceEugenicsSMR == 1) && $arcologies[0].FSRestartSMR != 1>> Society @@.green; approves@@ of your slave eugenics policies, easing them into more thorough eugenics. <<set _yesEugenics = ($IntelligenceEugenicsSMR+$HeightEugenicsSMR+$FaceEugenicsSMR)>> - <<= FSChange("Eugenics", _yesEugenics)>> + <<= FutureSocieties.Change("Eugenics", _yesEugenics)>> <<set $failedElite -= 1*($IntelligenceEugenicsSMR+$HeightEugenicsSMR+$FaceEugenicsSMR)>> <<elseif $arcologies[0].FSRestartSMR == 1>> <<set $failedElite -= 2*($IntelligenceEugenicsSMR+$HeightEugenicsSMR+$FaceEugenicsSMR)>> @@ -565,20 +565,20 @@ On formal occasions, you are announced as $PCTitle. <<if $shelterAbuse > 5>> <<if $arcologies[0].FSPaternalist != "unset">> You are on the Slave Shelter's public list of abusive slaveowners. Society @@.red;disapproves@@ of your falling foul of such a well regarded charity. - <<= FSChange("Paternalist", -2)>> + <<= FutureSocieties.Change("Paternalist", -2)>> <<elseif $arcologies[0].FSDegradationist != "unset">> You are on the Slave Shelter's public list of abusive slaveowners. Your citizens find this hilarious, and @@.green;approve@@ of your taking advantage of a pack of idiots. - <<= FSChange("Degradationist", 2)>> + <<= FutureSocieties.Change("Degradationist", 2)>> <</if>> <</if>> <<if $TCR.schoolPresent == 1>> <<if $arcologies[0].FSRestart != "unset">> Your Eugenics focused society @@.red;disagrees@@ with the local branch of The Cattle Ranch's views on slave breeding. Until society sees them as nothing more than mindless cattle and not human, they are in conflict with current reproduction standards. - <<= FSChange("Eugenics", -1)>> + <<= FutureSocieties.Change("Eugenics", -1)>> <<elseif $arcologies[0].FSPaternalist != "unset">> While they can't stop what happens to slaves outside of your arcology, they can @@.red;disapprove and protest@@ you allowing a branch of the mentally and physically abusive Cattle Ranch to be established in your arcology. - <<= FSChange("Paternalist", -2)>> + <<= FutureSocieties.Change("Paternalist", -2)>> <</if>> <</if>> @@ -612,7 +612,7 @@ On formal occasions, you are announced as $PCTitle. Your citizens <<if $arcologies[0].FSPaternalist >= 80>> are so paternalistic that they @@.green;approve@@ of - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <<elseif $arcologies[0].FSPaternalist >= 40>> are paternalistic enough to tolerate <<else>> @@ -625,23 +625,23 @@ On formal occasions, you are announced as $PCTitle. <<if $citizenOrphanageTotal > 0>> <<if $arcologies[0].FSPaternalist != "unset">> The public @@.green;approves@@ of the way you're providing for $citizenOrphanageTotal of your slaves' children to be raised as citizens. - <<= FSChange("Paternalist", $citizenOrphanageTotal)>> + <<= FutureSocieties.Change("Paternalist", $citizenOrphanageTotal)>> <<if $privateOrphanageTotal > 0>> Raising <<print num($privateOrphanageTotal)>> of your slaves' children privately is considered even more @@.green;impressive.@@ <<set _care = $privateOrphanageTotal*2>> - <<= FSChange("Paternalist", _care)>> + <<= FutureSocieties.Change("Paternalist", _care)>> <</if>> <<elseif $arcologies[0].FSDegradationist != "unset">> The public @@.red;disapproves@@ of the way you're providing for $citizenOrphanageTotal of your slaves' children to be raised as citizens. <<set _care = -$citizenOrphanageTotal>> - <<= FSChange("Degradationist", _care)>> + <<= FutureSocieties.Change("Degradationist", _care)>> <<if $privateOrphanageTotal > 0>>Fortunately your raising slaves' children privately is not publicly known.<</if>> <</if>> <<elseif $privateOrphanageTotal > 0>> <<if $arcologies[0].FSPaternalist != "unset">> Raising <<print num($privateOrphanageTotal)>> of your slaves' children privately is considered extremely @@.green;impressive.@@ <<set _care = $privateOrphanageTotal*2>> - <<= FSChange("Paternalist", _care)>> + <<= FutureSocieties.Change("Paternalist", _care)>> <<elseif $arcologies[0].FSDegradationist != "unset">> Fortunately your raising slaves' children privately is not publicly known. <</if>> @@ -649,7 +649,7 @@ On formal occasions, you are announced as $PCTitle. <<if $breederOrphanageTotal > 0 && $arcologies[0].FSRepopulationFocus != "unset">> The public @@.green;approves@@ of the way you've dedicated <<print num($breederOrphanageTotal)>> of your slaves' children to be raised into future breeders. <<set _futureBreeders = Math.round((($breederOrphanageTotal/100)+1))>> - <<= FSChange("Repopulationist", _futureBreeders)>> + <<= FutureSocieties.Change("RepopulationFocus", _futureBreeders)>> <</if>> <<if $arcologies[0].FSNull != "unset">> @@ -686,7 +686,7 @@ On formal occasions, you are announced as $PCTitle. <<run repX(forceNeg(10*$PC.degeneracy), "PCactions")>> <<elseif $PC.degeneracy > 25>> There are @@.red;rumors@@ about you spreading across the arcology. - <<run repX(forceNeg(5*$PC.degeneracy)), "PCactions")>> + <<run repX(forceNeg(5*$PC.degeneracy), "PCactions")>> <<elseif $PC.degeneracy > 10>> There are @@.red;minor rumors@@ about you spreading across the arcology. <<run repX(forceNeg(2*$PC.degeneracy), "PCactions")>> diff --git a/src/uncategorized/rulesSlaveExclude.tw b/src/uncategorized/rulesSlaveExclude.tw index 50ff00c308ea639e7445b88fd6a79b8aba140590..11fc9c657d3d3dd6e24fa976fa13e892ba8ed1c2 100644 --- a/src/uncategorized/rulesSlaveExclude.tw +++ b/src/uncategorized/rulesSlaveExclude.tw @@ -9,13 +9,20 @@ <<if ($currentRule.excludedSlaves.length < 1)>> <<set $SlaveSummaryFiler = "assignable">> Select slaves to exclude from Rule $r: - <<include "Slave Summary">> + <<print App.UI.SlaveList.slaveSelectionList( + s => !ruleSlaveExcluded(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Exclude Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <<else>> Slaves currently excluded from Rule $r: [[Clear list|Rules Slave Exclude][$currentRule.excludedSlaves = []]] - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.slaveSelectionList( + s => ruleSlaveExcluded(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave NoExclude Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <br><br> Select more slaves to exclude from Rule $r: - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.slaveSelectionList( + s => !ruleSlaveExcluded(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Exclude Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <</if>> diff --git a/src/uncategorized/rulesSlaveSelect.tw b/src/uncategorized/rulesSlaveSelect.tw index ded8c3ef46ca23f4ef1eb37fbfdd57d2955c2c5a..abda187c938d3914eb83c4c2999e9c17fa213fdb 100644 --- a/src/uncategorized/rulesSlaveSelect.tw +++ b/src/uncategorized/rulesSlaveSelect.tw @@ -9,13 +9,21 @@ <<if ($currentRule.selectedSlaves.length < 1)>> <<set $SlaveSummaryFiler = "assignable">> Choose specific slaves to limit Rule $r: - <<include "Slave Summary">> + Select slaves to exclude from Rule $r: + <<print App.UI.SlaveList.slaveSelectionList( + s => !ruleSlaveSelected(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Select Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <<else>> Rule $r currently limited to specific slaves: [[Clear list|Rules Slave Select][$currentRule.selectedSlaves = []]] - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.slaveSelectionList( + s => ruleSlaveSelected(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Deselect Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <br><br> Choose more specific slaves: - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.slaveSelectionList( + s => !ruleSlaveSelected(s, $currentRule), + (s, i) => `<u><strong>${App.UI.passageLink(SlaveFullName(s), 'Rules Slave Select Workaround', `$activeSlave = $slaves[${i}]`)}</strong></u>` + )>> <</if>> diff --git a/src/uncategorized/saDevotion.tw b/src/uncategorized/saDevotion.tw index d5a910ae55cc8da24e638eb9aedee598c4c95c1e..4b56b68633a00db49c817d10ad0647e2cea7b5f1 100644 --- a/src/uncategorized/saDevotion.tw +++ b/src/uncategorized/saDevotion.tw @@ -7,6 +7,7 @@ <<else>> <<if $slaves[$i].fuckdoll == 0>> +<<setPlayerPronouns>> <<set $energyPlus = 0>> <<if $slaves[$i].origin == "You were acquainted with her before you were an arcology owner; your rival tried to use $him to manipulate you, but you rescued her.">> @@ -54,7 +55,7 @@ <</if>> <<else>> <<if $PC.pregMood == 2>> - $He is @@.gold;horrified@@ of your aggressive sexual advances, forcing $him to @@.hotpink;bend to your will@@ or face punishment at the hands of a hormonal pregnant woman. + $He is @@.gold;horrified@@ of your aggressive sexual advances, forcing $him to @@.hotpink;bend to your will@@ or face punishment at the hands of a hormonal pregnant _womanP. <<set $slaves[$i].devotion += 4>> <<set $slaves[$i].trust -= 4>> <<elseif $PC.pregMood == 1>> @@ -242,7 +243,7 @@ Since $he loves you, $he has mixed feelings about the prospect, but $he prefers to think of it as your way of looking after $him. It's $his favorite subject, and $his strong feelings about it <<if $arcologies[0].FSPaternalist != "unset">> advances paternalistic ideals and @@.green;improves your reputation.@@ - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <<else>> @@.green;improves your reputation.@@ <<run repX($FSSingleSlaveRep*2, "retirement", $slaves[$i])>> @@ -261,7 +262,7 @@ Since $he loves you, $he has mixed feelings about the prospect, but $he prefers to think of it as your way of looking after $him. This <<if $arcologies[0].FSPaternalist != "unset">> advances paternalistic ideals and @@.green;improves your reputation.@@ - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <<else>> @@.green;improves your reputation.@@ <<run repX($FSSingleSlaveRep, "retirement", $slaves[$i])>> @@ -336,7 +337,7 @@ Since $he loves you, $he has mixed feelings about the prospect, but $he prefers to think of it as your way of looking after $him. It's $his favorite subject, and $his strong feelings about it <<if $arcologies[0].FSPaternalist != "unset">> advances paternalistic ideals and @@.green;improves your reputation.@@ - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <<else>> @@.green;improves your reputation.@@ <<run repX($FSSingleSlaveRep*2, "retirement", $slaves[$i])>> @@ -355,7 +356,7 @@ Since $he loves you, $he has mixed feelings about the prospect, but $he prefers to think of it as your way of looking after $him. This <<if $arcologies[0].FSPaternalist != "unset">> advances paternalistic ideals and @@.green;improves your reputation.@@ - <<= FSChange("Paternalist", 2)>> + <<= FutureSocieties.Change("Paternalist", 2)>> <<else>> @@.green;improves your reputation.@@ <<run repX($FSSingleSlaveRep, "retirement", $slaves[$i])>> diff --git a/src/uncategorized/saDrugs.tw b/src/uncategorized/saDrugs.tw index 218934abc84a0e0f7d8285dfdd43ceb6bc945678..8615f2485e71bae02fae22ec5ef0cded9feca51b 100644 --- a/src/uncategorized/saDrugs.tw +++ b/src/uncategorized/saDrugs.tw @@ -13,7 +13,7 @@ <<case "hormone enhancers">> $His drug regime prepares $his body to accept hormonal effects. - + <<case "priapism agents">> <<if $slaves[$i].dick == 0>> Since $he lacks a dick, it is pointless to try and keep it hard. @@.yellow;$His drug regimen has been ended.@@ diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index 955cdcd441c82a7ce500aff67bba08f2ff2c62cc..d0bea50f717f07043e8258f5535ac7df91c25e62 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -2716,7 +2716,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> @@ -2726,7 +2726,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2739,7 +2739,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].inflation != 0 && $slaves[$i].inflationType == "cum">> In addition to being an orally fixated cumslut, $he is required to keep $his belly bloated with cum at all times, making $his life revolve around being full of cum. @@.yellow;$He's become psychologically addicted to cum.@@ @@ -2747,7 +2747,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $cockFeeder != 0>> In addition to being an orally fixated cumslut, $he eats by sucking dick. @@.yellow;$He's become psychologically addicted to cum.@@ @@ -2755,7 +2755,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> <<if $slaves[$i].addict > 2>> @@ -2764,7 +2764,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2779,7 +2779,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].chastityVagina>> $He has a powerful sex drive, and since $his pussy's off limits, $he sinks ever deeper into $his identity as a helpless anal slut. @@.yellow;$He's become psychologically addicted to getting assfucked.@@ @@ -2787,7 +2787,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2798,7 +2798,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2811,7 +2811,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> <<if $slaves[$i].addict > 2>> @@ -2820,7 +2820,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2833,7 +2833,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].drugs == "hyper breast injections">> $He loves $his tits, and watching them steadily swell from the hyper injections starts to hold more fascination for $him than mere sex. @@.yellow;$His sexual identity is now dominated by $his swelling boobs.@@ @@ -2841,7 +2841,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2 && $slaves[$i].boobs-$slaves[$i].boobsImplant >= 25000>> $He loves $his tits, and measuring their weekly growth from gigantomastia starts to hold more fascination for $him than mere sex. @@.yellow;$His sexual identity is now dominated by $his swelling boobs.@@ @@ -2849,7 +2849,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif ($slaves[$i].hormoneBalance >= 100) && ($slaves[$i].boobs < 1000)>> $He loves $his tits, and feeling them grow under female hormone treatments starts to hold more fascination for $him than mere sex. @@.yellow;$His sexual identity is now dominated by $his swelling boobs.@@ @@ -2857,7 +2857,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> <<if $slaves[$i].addict > 2>> @@ -2866,7 +2866,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2880,7 +2880,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> @@ -2890,7 +2890,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2905,7 +2905,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2916,7 +2916,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2929,7 +2929,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif ($slaves[$i].assignment == "work in the dairy") && ($dairyRestraintsSetting >= 2)>> Strapped into a milking machine's tender, penetrative embrace, $his masochistic tendencies darken into sexual appreciation for $his life as a human factory. @@.yellow;$He's descended into true self hatred.@@ @@ -2937,7 +2937,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> <<if $slaves[$i].addict > 2>> @@ -2946,7 +2946,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -2964,7 +2964,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].bellyPreg > 100 && $slaves[$i].pregKnown == 1 && $slaves[$i].pregSource == -1 && $slaves[$i].breedingMark == 1 && $propOutcome == 1 && $slaves[$i].devotion > 75>> $He's been marked to be the bearer of your offspring and is growing larger by the day with your child. $He is to be nothing more than a vessel for your children, and as such @@.yellow;has become obsessed with carrying them.@@ @@ -2972,7 +2972,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].bellyPreg >= 120000>> $He's so overfull with life that $he starts to pay much more sexual attention to pregnancy than to impregnation. @@.yellow;$He's become obsessed with breeding.@@ @@ -2980,7 +2980,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].counter.births > 10>> $He's been bred so much that $he starts to pay as much sexual attention to pregnancy as to impregnation. @@.yellow;$He's become obsessed with breeding.@@ @@ -2988,7 +2988,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif ($slaves[$i].assignment == "work in the dairy") && ($dairyPregSetting >= 2) && ($slaves[$i].pregKnown == 1)>> With $his womanhood fucked full of cum and fertility drugs, $his pregnancy fetish deepens into true perversity. @@.yellow;$He's become obsessed with breeding.@@ @@ -2996,7 +2996,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac">> <<if $slaves[$i].addict > 2>> @@ -3005,7 +3005,7 @@ <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> Allowing $him to indulge in $his fetish to the point of obsession advances hedonism and @@.green;bolsters your reputation.@@ - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <</if>> @@ -4301,7 +4301,7 @@ <<set $slaves[$i].preg = 1, $slaves[$i].pregSource = -1, $slaves[$i].pregWeek = 1, $slaves[$i].pregKnown = 1>><<set $slaves[$i].pregType = setPregType($slaves[$i])>> <<set WombImpregnate($slaves[$i], $slaves[$i].pregType, -1, 1)>> - <<set $activeSlave = $slaves[$i]>><<if $slaves[$i].mpreg == 1>><<= AnalVCheck(10)>><<else>><<= VaginalVCheck(10)>><</if>><<set $slaves[$i] = $activeSlave>> + <<set $activeSlave = $slaves[$i]>><<if $slaves[$i].mpreg == 1>><<= VCheck.Anal(10)>><<else>><<= VCheck.Vaginal(10)>><</if>><<set $slaves[$i] = $activeSlave>> <<elseif (($slaves[$i].vagina == 0) || (($slaves[$i].anus == 0) && ($slaves[$i].mpreg > 0)))>> <<elseif ($HeadGirl != 0) && ($HeadGirl.dick > 0) && ($slaves[$i].ID != $HeadGirl.ID) && ($universalRulesImpregnation == "HG") && canPenetrate($HeadGirl)>> @@ -4397,7 +4397,7 @@ <<set $slaves[$i].preg = 1, $slaves[$i].pregSource = $HeadGirl.ID, $slaves[$i].pregWeek = 1, $slaves[$i].pregKnown = 1, $HGCum -= 1, $HeadGirl.counter.penetrative += 10, $penetrativeTotal += 10>> <<set $slaves[$i].pregType = setPregType($slaves[$i])>> <<set WombImpregnate($slaves[$i], $slaves[$i].pregType, $HeadGirl.ID, 1)>> - <<set $activeSlave = $slaves[$i]>><<if $slaves[$i].mpreg == 1>><<= AnalVCheck(10)>><<else>><<= VaginalVCheck(10)>><</if>><<set $slaves[$i] = $activeSlave>> + <<set $activeSlave = $slaves[$i]>><<if $slaves[$i].mpreg == 1>><<= VCheck.Anal(10)>><<else>><<= VCheck.Vaginal(10)>><</if>><<set $slaves[$i] = $activeSlave>> <<set _saLTE = $slaveIndices[$HeadGirl.ID]>> <<if def _saLTE>> <<set $slaves[_saLTE] = $HeadGirl>> @@ -5183,19 +5183,19 @@ <<else>> Society @@.red;disapproves@@ of your keeping a slave of the $arcologies[0].FSSupremacistRace race in a degrading, public role; this also holds back acceptance of $arcologies[0].FSSupremacistRace superiority. <</if>> - <<= FSChangePorn("Supremacist", -1)>> + <<= FutureSocieties.ChangePorn("Supremacist", -1)>> <<switch $slaves[$i].assignment>> <<case "work in the brothel">><<run getSlaveStatisticData($slaves[$i], $facility.brothel).rep -= $FSSingleSlaveRep*($arcologies[0].FSSupremacist/$FSLockinLevel)>> <</switch>> <<elseif ($slaves[$i].assignment == "be your Head Girl")>> Society @@.green;strongly approves@@ of your keeping a slave of the $arcologies[0].FSSupremacistRace race in a position of leadership as your Head Girl, advancing the notion that those of the $arcologies[0].FSSupremacistRace race should be in positions of authority over others. - <<= FSChangePorn("Supremacist", 2)>> + <<= FutureSocieties.ChangePorn("Supremacist", 2)>> <<elseif ($slaves[$i].assignment == "recruit girls")>> Society @@.green;strongly approves@@ of your keeping a slave of the $arcologies[0].FSSupremacistRace race in a position of leadership as your recruiter, advancing the notion that it is only natural that those of the $arcologies[0].FSSupremacistRace race should lead the charge in enslaving others. - <<= FSChangePorn("Supremacist", 2)>> + <<= FutureSocieties.ChangePorn("Supremacist", 2)>> <<elseif ($slaves[$i].assignment == "be your Concubine")>> Society @@.green;strongly approves@@ of your keeping a slave of the $arcologies[0].FSSupremacistRace race in a position of importance as your concubine, advancing the notion that the most favored of your bedslaves should naturally be of the $arcologies[0].FSSupremacistRace race. - <<= FSChangePorn("Supremacist", 2)>> + <<= FutureSocieties.ChangePorn("Supremacist", 2)>> /* Code contributed by Anon1888 */ <<else>> Society does not disapprove of your keeping a slave of the $arcologies[0].FSSupremacistRace race, since $he is not in a publicly degrading role. @@ -5206,20 +5206,20 @@ <<if def _saLTE>> <<if ($slaves[$i].race != _saLTE.race) && ($arcologies[0].FSSupremacistRace == "mixed race")>> Society @@.lightgreen;approves@@ of your using slave breeders like $slaves[$i].slaveName to propagate the $arcologies[0].FSSupremacistRace civilization. - <<= FSChangePorn("Supremacist", 2)>> + <<= FutureSocieties.ChangePorn("Supremacist", 2)>> <<elseif $slaves[$i].race != _saLTE.race>> Society @@.red;strongly disapproves@@ of your allowing a pure $arcologies[0].FSSupremacistRace slave to be miscegenated by _saLTE.slaveName. - <<= FSChangePorn("Supremacist", -2)>> + <<= FutureSocieties.ChangePorn("Supremacist", -2)>> <<else>> Society @@.green;strongly approves@@ of your using slave breeders like $slaves[$i].slaveName to propagate the $arcologies[0].FSSupremacistRace civilization. - <<= FSChangePorn("Supremacist", 2)>> + <<= FutureSocieties.ChangePorn("Supremacist", 2)>> <</if>> <</if>> <</if>> <</if>> <<if $slaves[$i].fuckdoll > 0>> Society @@.red;strongly disapproves@@ of your owning a $arcologies[0].FSSupremacistRace Fuckdoll. - <<= FSChangePorn("Supremacist", -2)>> + <<= FutureSocieties.ChangePorn("Supremacist", -2)>> <</if>> <<else>> <<if $arcologies[0].FSSupremacist >= $FSLockinLevel*0.5>> @@ -5227,10 +5227,10 @@ <<else>> Society @@.green;approves@@ of your keeping a slave of an inferior race; this also advances $arcologies[0].FSSupremacistRace superiority. <</if>> - <<= FSChangePorn("Supremacist", 1)>> + <<= FutureSocieties.ChangePorn("Supremacist", 1)>> <<if $slaves[$i].fuckdoll > 0>> Society @@.green;approves@@ of your keeping a Fuckdoll of an inferior race. - <<= FSChangePorn("Supremacist", 1)>> + <<= FutureSocieties.ChangePorn("Supremacist", 1)>> <</if>> <</if>> <</if>> @@ -5242,16 +5242,16 @@ <<else>> Society @@.green;approves@@ of your keeping a slave of the subject $arcologies[0].FSSubjugationistRace race; this also advances $arcologies[0].FSSubjugationistRace inferiority. <</if>> - <<= FSChangePorn("Subjugationist", 1)>> + <<= FutureSocieties.ChangePorn("Subjugationist", 1)>> <<if $slaves[$i].ovaries == 0>> <<if $slaves[$i].balls == 0 || $slaves[$i].vasectomy == 1>> Society @@.green;approves@@ of $slaves[$i].slaveName's <<if $slaves[$i].vasectomy == 1 && $slaves[$i].balls > 0>>vasectomy<<elseif $slaves[$i].dick > 0>>gelding<<else>>sterilization<</if>>, which ensures that $he will not propagate the $arcologies[0].FSSubjugationistRace race. - <<= FSChangePorn("Subjugationist", 1)>> + <<= FutureSocieties.ChangePorn("Subjugationist", 1)>> <</if>> <</if>> <<if $slaves[$i].fuckdoll > 0>> Society @@.green;approves@@ of your keeping a Fuckdoll of the $arcologies[0].FSSubjugationistRace race. - <<= FSChangePorn("Subjugationist", 1)>> + <<= FutureSocieties.ChangePorn("Subjugationist", 1)>> <</if>> <<else>> <<if $slaves[$i].pregKnown == 1 && $slaves[$i].pregSource > 0>> @@ -5259,7 +5259,7 @@ <<if ndef _lte>>@@.red;Error, pregSource not found.@@<</if>> <<if _lte.race == $arcologies[0].FSSubjugationistRace>> Society @@.red;strongly disapproves@@ of your allowing $slaves[$i].slaveName to be miscegenated by a $arcologies[0].FSSubjugationistRace subhuman like _lte.slaveName. - <<= FSChangePorn("Subjugationist", -2)>> + <<= FutureSocieties.ChangePorn("Subjugationist", -2)>> <</if>> <</if>> <</if>> @@ -5268,52 +5268,52 @@ <<if $arcologies[0].FSYouthPreferentialist != "unset">> <<if ($slaves[$i].geneMods.NCS > 0) && ($slaves[$i].visualAge <= 18)>> Society @@.green;strongly approves@@ of you keeping $slaves[$i].slaveName forever young and youthening; this furthers the fashion for young slaves. - <<= FSChangePorn("YouthPreferentialist", 2)>> + <<= FutureSocieties.ChangePorn("YouthPreferentialist", 2)>> <<elseif ($slaves[$i].visualAge < 30)>> Society @@.green;approves@@ of $slaves[$i].slaveName's youthful body; $he furthers the fashion for young slaves. <<set _youth_rep_change = ((30-$slaves[$i].visualAge)/5)>> - <<= FSChangePorn("YouthPreferentialist", _youth_rep_change)>> + <<= FutureSocieties.ChangePorn("YouthPreferentialist", _youth_rep_change)>> <</if>> <<elseif $arcologies[0].FSMaturityPreferentialist != "unset">> <<if ($slaves[$i].visualAge >= 30)>> Society @@.green;approves@@ of $slaves[$i].slaveName's mature body; $he furthers the fashion for older ladies. <<set _maturity_rep_change = (($slaves[$i].visualAge-25)/5)>> - <<= FSChangePorn("MaturityPreferentialist", _maturity_rep_change)>> + <<= FutureSocieties.ChangePorn("MaturityPreferentialist", _maturity_rep_change)>> <</if>> <</if>> <<if $arcologies[0].FSGenderRadicalist != "unset">> <<if ($slaves[$i].balls > 0) && ($slaves[$i].dick > 0) && ($slaves[$i].hormoneBalance >= 100)>> Society @@.green;approves@@ of your heavy hormonal feminization of $slaves[$i].slaveName; this advances public interest in <<= $girl>>s with soft little dicks. - <<= FSChangePorn("GenderRadicalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderRadicalist", 1)>> <<elseif ($slaves[$i].balls > 0) && ($slaves[$i].pubertyXY == 0) && ($slaves[$i].physicalAge >= $potencyAge)>> Society @@.green;approves@@ of you keeping $slaves[$i].slaveName from going through puberty; this advances public interest in <<= $girl>>s with soft little dicks. - <<= FSChangePorn("GenderRadicalist", 2)>> + <<= FutureSocieties.ChangePorn("GenderRadicalist", 2)>> <<elseif ($slaves[$i].dick > 0) && ($slaves[$i].balls == 0)>> Society @@.green;approves@@ of your keeping a gelded slave; this advances public interest in <<= $girl>>s with soft dickclits. - <<= FSChangePorn("GenderRadicalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderRadicalist", 1)>> <<elseif ($slaves[$i].dick > 0) && ($slaves[$i].anus > 0) && ($slaves[$i].devotion > 20) && ($slaves[$i].trust >= -20)>> Society @@.green;approves@@ of your keeping a contented dickgirl bottom; this advances public interest in <<= $girl>>s who get hard when assfucked. - <<= FSChangePorn("GenderRadicalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderRadicalist", 1)>> <</if>> <<elseif $arcologies[0].FSGenderFundamentalist != "unset">> <<if $arcologies[0].FSRestart == "unset">> <<if ($slaves[$i].bellyPreg >= 1500)>> Society <<if $arcologies[0].FSGenderFundamentalist >= $FSLockinLevel*0.5>>@@.green;strongly approves@@<<else>>@@.green;approves@@<</if>> of your keeping a pregnant slave; this also supports the idea that slave women should bear babies. - <<= FSChangePorn("GenderFundamentalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderFundamentalist", 1)>> <<elseif ($slaves[$i].preg == 0) && isFertile($slaves[$i])>> Society <<if $arcologies[0].FSGenderFundamentalist >= $FSLockinLevel*0.5>>@@.green;strongly approves@@<<else>>@@.green;approves@@<</if>> of your keeping a slave fertile; this also supports the idea that slave women should bear babies. - <<= FSChangePorn("GenderFundamentalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderFundamentalist", 1)>> <</if>> <<else>> <<if ($slaves[$i].hips > $slaves[$i].shoulders)>> Society @@.green;approves@@ of keeping a slave with a feminine figure. - <<= FSChangePorn("GenderFundamentalist", 1)>> + <<= FutureSocieties.ChangePorn("GenderFundamentalist", 1)>> <</if>> <</if>> <<if ($slaves[$i].devotion <= 95) && canPenetrate($slaves[$i])>> Society @@.red;disapproves@@ of $slaves[$i].slaveName's stiff, unrestrained dick, since $he isn't even worshipful of you. - <<= FSChangePorn("GenderFundamentalist", -1)>> + <<= FutureSocieties.ChangePorn("GenderFundamentalist", -1)>> <</if>> <</if>> @@ -5321,13 +5321,13 @@ <<if $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.33>> <<if $slaves[$i].pregType >= 20>> Society is @@.green;very pleased@@ at $slaves[$i].slaveName's dedication to pregnancy. - <<= FSChangePorn("Repopulationist", 5)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 5)>> <<elseif $slaves[$i].pregType >= 10>> Society is @@.green;pleased@@ by $slaves[$i].slaveName's abnormally large pregnancy. - <<= FSChangePorn("Repopulationist", 3)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 3)>> <<else>> Society is @@.green;pleased@@ by $slaves[$i].slaveName's advanced pregnancy. - <<= FSChangePorn("Repopulationist", 2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 2)>> <</if>> <<if $arcologies[0].FSSubjugationist != "unset" && ($slaves[$i].race == $arcologies[0].FSSubjugationistRace)>> They just wish it wasn't <<print $arcologies[0].FSSubjugationistRace>>, of course. @@ -5338,11 +5338,11 @@ $slaves[$i].slaveName is so fat, society just assumes there is a baby somewhere in there, though they wish it was more obvious. <<if $slaves[$i].pregWeek < 0>> But fortunately for $him, word of $his recent birth has gotten around @@.green;reassuring the masses@@ that $he can still bear children. - <<= FSChangePorn("Repopulationist", 2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 2)>> <<elseif $slaves[$i].collar == "preg biometrics">> <<if $slaves[$i].preg > 0>> @@.green;Their wish is granted@@ by $slaves[$i].slaveName's collar revealing $his womb's secret<<if $slaves[$i].pregType > 1>>s<</if>> even when $his body is trying its best to keep <<if $slaves[$i].pregType > 1>>them<<else>>it<</if>> hidden. - <<= FSChangePorn("Repopulationist", 1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 1)>> <<if $arcologies[0].FSSubjugationist != "unset" && ($slaves[$i].race == $arcologies[0].FSSubjugationistRace)>> They just wish it wasn't <<print $arcologies[0].FSSubjugationistRace>>, of course. <<elseif $arcologies[0].FSSupremacist != "unset" && ($slaves[$i].race == $arcologies[0].FSSupremacistRace)>> @@ -5350,12 +5350,12 @@ <</if>> <<elseif $slaves[$i].preg <= 0>> @@.red;The illusion is shattered@@ by $slaves[$i].slaveName's collar revealing $his vacant womb. - <<= FSChangePorn("Repopulationist", -2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", -2)>> <</if>> <</if>> <<elseif $slaves[$i].bellyPreg >= 1500>> Society is @@.green;pleased@@ by $slaves[$i].slaveName's pregnancy. - <<= FSChangePorn("Repopulationist", 1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 1)>> <<if $arcologies[0].FSSubjugationist != "unset" && ($slaves[$i].race == $arcologies[0].FSSubjugationistRace)>> They just wish it wasn't <<print $arcologies[0].FSSubjugationistRace>>, of course. <<elseif $arcologies[0].FSSupremacist != "unset" && ($slaves[$i].race == $arcologies[0].FSSupremacistRace)>> @@ -5369,7 +5369,7 @@ <<run repX(0.1*$FSSingleSlaveRep, "futureSocieties", $slaves[$i])>> <<elseif $slaves[$i].collar == "preg biometrics" && $slaves[$i].preg > 0>> Society is @@.green;pleased@@ by $slaves[$i].slaveName's collar revealing $his womb's secret<<if $slaves[$i].pregType > 1>>s<</if>> even when $his body is trying its best to keep <<if $slaves[$i].pregType > 1>>them<<else>>it<</if>> hidden. - <<= FSChangePorn("Repopulationist", 1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 1)>> <<if $arcologies[0].FSSubjugationist != "unset" && ($slaves[$i].race == $arcologies[0].FSSubjugationistRace)>> They just wish it wasn't <<print $arcologies[0].FSSubjugationistRace>>, of course. <<elseif $arcologies[0].FSSupremacist != "unset" && ($slaves[$i].race == $arcologies[0].FSSupremacistRace)>> @@ -5377,7 +5377,7 @@ <</if>> <<elseif $slaves[$i].pregWeek < 0>> Society is @@.green;pleased@@ by $slaves[$i].slaveName's recent birth. - <<= FSChangePorn("Repopulationist", 2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 2)>> <<elseif setup.fakeBellies.includes($bellyAccessory)>> Society is @@.green;placated@@ by $slaves[$i].slaveName's fake belly. <<run repX(0.01*$FSSingleSlaveRep, "futureSocieties", $slaves[$i])>> @@ -5385,21 +5385,21 @@ Society is perfectly fine with $slaves[$i].slaveName not reproducing. $His belly is still unattractively small, however. <<elseif ($slaves[$i].ovaries == 0 && $slaves[$i].mpreg == 0) || ($slaves[$i].preg < -1) || ($slaves[$i].pubertyXX == 0)>> Society is @@.red;mildly disappointed@@ that $slaves[$i].slaveName is unable to become pregnant. - <<= FSChangePorn("Repopulationist", -1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", -1)>> <<elseif $slaves[$i].preg == -1>> Society is @@.red;disapproving@@ of $slaves[$i].slaveName's contraceptive regimen. - <<= FSChangePorn("Repopulationist", -2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", -2)>> <<else>> Society is @@.red;disapproving@@ of $slaves[$i].slaveName's flat, unimpregnated stomach. - <<= FSChangePorn("Repopulationist", -2)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", -2)>> <</if>> <<if $slaves[$i].abortionTat > 0>> Society @@.red;is disgusted@@ by the tally of aborted children adorning $his skin. - <<= FSChangePorn("Repopulationist", -1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", -1)>> <</if>> <<if $slaves[$i].birthsTat > 0>> Society @@.green;is pleased@@ by the tally of succesful births adorning $his skin. - <<= FSChangePorn("Repopulationist", 1)>> + <<= FutureSocieties.ChangePorn("RepopulationFocus", 1)>> <</if>> <<elseif $arcologies[0].FSRepopulationFocusPregPolicy == 1>> <<if $slaves[$i].preg > 30>> @@ -5412,44 +5412,44 @@ <<elseif $arcologies[0].FSRestart != "unset">> <<if $slaves[$i].chastityVagina>> Society is @@.green;mildly pleased@@ at you keeping $his vagina in check. - <<= FSChangePorn("Eugenics", 1)>> + <<= FutureSocieties.ChangePorn("Eugenics", 1)>> <</if>> <<if $slaves[$i].chastityPenis>> Society is @@.green;mildly pleased@@ at you keeping $his dick in check. - <<= FSChangePorn("Eugenics", 1)>> + <<= FutureSocieties.ChangePorn("Eugenics", 1)>> <</if>> <<if $slaves[$i].breedingMark == 1 && $propOutcome == 1>> <<if $slaves[$i].pregKnown == 1 && $slaves[$i].pregSource == -1>> The Societal Elite @@.green;are pleased@@ your child is growing within $him. The mark covering $his lower belly, coupled with $his gravidity and blessing, @@.green;enamors@@ your populace. <<set $failedElite -= 5+$slaves[$i].pregType>> - <<= FSChangePorn("Eugenics", 3)>> + <<= FutureSocieties.ChangePorn("Eugenics", 3)>> <<if $slaves[$i].abortionTat > 0>> The tally of aborted children adorning $his middle @@.red;is worrying,@@ however. - <<= FSChangePorn("Eugenics", -1)>> + <<= FutureSocieties.ChangePorn("Eugenics", -1)>> <</if>> <</if>> <<else>> <<if $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.33>> <<if $slaves[$i].pregType >= 10>> Society is @@.red;furious@@ at $slaves[$i].slaveName's infested womb. - <<= FSChangePorn("Eugenics", -10)>> + <<= FutureSocieties.ChangePorn("Eugenics", -10)>> <<elseif $slaves[$i].pregType >= 4>> Society is @@.red;disgusted@@ by $slaves[$i].slaveName's abnormally large pregnancy. - <<= FSChangePorn("Eugenics", -5)>> + <<= FutureSocieties.ChangePorn("Eugenics", -5)>> <<else>> Society is @@.red;greatly displeased@@ by $slaves[$i].slaveName's advanced pregnancy. - <<= FSChangePorn("Eugenics", -3)>> + <<= FutureSocieties.ChangePorn("Eugenics", -3)>> <</if>> <<elseif $slaves[$i].bellyPreg >= 1500>> Society is @@.red;very displeased@@ by $slaves[$i].slaveName's pregnancy. - <<= FSChangePorn("Eugenics", -2)>> + <<= FutureSocieties.ChangePorn("Eugenics", -2)>> <<elseif $slaves[$i].preg < -1 and $slaves[$i].vagina > -1>> Society is @@.green;pleased@@ that $slaves[$i].slaveName is unable to become pregnant. - <<= FSChangePorn("Eugenics", 2)>> + <<= FutureSocieties.ChangePorn("Eugenics", 2)>> <</if>> <<if $slaves[$i].abortionTat > 0>> The tally of aborted pregnancies adorning $his middle shows @@.green;just how responsible@@ of an owner $he has. - <<= FSChangePorn("Eugenics", 1)>> + <<= FutureSocieties.ChangePorn("Eugenics", 1)>> <</if>> <<if $slaves[$i].pregKnown == 1 && $eugenicsFullControl != 1>> The Societal Elite @@.red;judge you@@ for keeping pregnant slaves. It falls to the slaveowner to deal with subhuman pregnancies and you are failing in your duties as a member of the Elite. @@ -5458,16 +5458,16 @@ <</if>> <<if $slaves[$i].balls > 0 && $slaves[$i].vasectomy == 0>> Society @@.red;disapproves@@ of $his working testicles. - <<= FSChangePorn("Eugenics", -$slaves[$i].balls)>> + <<= FutureSocieties.ChangePorn("Eugenics", -$slaves[$i].balls)>> <<elseif $slaves[$i].dick > 0 && $slaves[$i].balls > 0 && $slaves[$i].vasectomy == 1>> Society @@.green;approves@@ of $his vasectomy. - <<= FSChangePorn("Eugenics", 1)>> + <<= FutureSocieties.ChangePorn("Eugenics", 1)>> <<elseif $slaves[$i].dick > 0 && $slaves[$i].balls > 0 && $slaves[$i].ballType == "sterile">> Society @@.green;approves@@ of $his useless testicles. - <<= FSChangePorn("Eugenics", 1)>> + <<= FutureSocieties.ChangePorn("Eugenics", 1)>> <<elseif $slaves[$i].dick > 0 && $slaves[$i].balls == 0>> Society @@.green;approves@@ of $his lack of testicles. - <<= FSChangePorn("Eugenics", 2)>> + <<= FutureSocieties.ChangePorn("Eugenics", 2)>> <</if>> <</if>> <<if $arcologies[0].FSRepopulationFocusMilfPolicy == 1 && $slaves[$i].counter.birthsTotal > 0>> @@ -5478,68 +5478,68 @@ <<if $arcologies[0].FSPaternalist != "unset">> <<if ($slaves[$i].geneMods.NCS > 0) && ($slaves[$i].visualAge <= $potencyAge) && ($slaves[$i].physicalAge >= $potencyAge)>> Society @@.green;approves@@ of you keeping $slaves[$i].slaveName perpetually young and innocent looking so you can keep taking care of $him; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <<elseif ($slaves[$i].intelligenceImplant >= 15) && ($slaves[$i].fetish != "mindbroken")>> Society @@.green;approves@@ of $slaves[$i].slaveName being properly educated; this advances ideas about slave improvement. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <<elseif ($slaves[$i].intelligenceImplant < 15) && ($slaves[$i].intelligence+$slaves[$i].intelligenceImplant < -15) && ($slaves[$i].fetish != "mindbroken")>> Society @@.red;disapproves@@ of $slaves[$i].slaveName being stupid and uneducated; this holds back ideas about slave improvement. - <<= FSChangePorn("Paternalist", -1)>> + <<= FutureSocieties.ChangePorn("Paternalist", -1)>> <</if>> <<if ($slaves[$i].health > 80)>> Society @@.green;approves@@ of $his shining health; this advances belief in a slaveowner's duty. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <</if>> <<if ($slaves[$i].devotion+$slaves[$i].trust > 180)>> <<if ($slaves[$i].relationship == -3)>> Society @@.green;approves very strongly@@ of $his happiness as your wife; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 5)>> + <<= FutureSocieties.ChangePorn("Paternalist", 5)>> <<elseif ($slaves[$i].relationship == -2)>> Society @@.green;strongly approves@@ of $his emotional bond to you; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 2)>> + <<= FutureSocieties.ChangePorn("Paternalist", 2)>> <<else>> Society @@.green;approves@@ of $his attachment to you; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <</if>> <<else>> <<if ($slaves[$i].devotion > 95)>> Society @@.green;approves@@ of $his attachment to you; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <</if>> <<if ($slaves[$i].trust > 95)>> Society @@.green;approves@@ of $his trust in you; this advances paternalistic ideals. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <</if>> <</if>> <<if ($slaves[$i].choosesOwnAssignment == 1)>> Society @@.green;approves@@ of $slaves[$i].slaveName being allowed to choose $his own job, advancing ideals about slave self-actualization. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <</if>> <<if ($slaves[$i].relationship == -3)>> <<if $slaves[$i].fetish == "mindbroken">> Society is mixed over your marriage to the mindbroken girl; on one hand $he had no consent, but on the other, you @@.green;surely must love $him@@ to marry $him. - <<= FSChangePorn("Paternalist", 1)>> + <<= FutureSocieties.ChangePorn("Paternalist", 1)>> <<elseif ($slaves[$i].devotion <= 20)>> Society is @@.red;thoroughly disgusted@@ that you took $his hand in marriage by force. - <<= FSChangePorn("Paternalist", -3)>> + <<= FutureSocieties.ChangePorn("Paternalist", -3)>> <</if>> <</if>> <<if ($modScore > 15 || ($piercingScore > 8 && $tatScore > 5))>> Society @@.red;disapproves@@ of $his degrading body modifications, which dulls the public interest in letting slaves choose their own appearance. - <<= FSChangePorn("Paternalist", -1)>> + <<= FutureSocieties.ChangePorn("Paternalist", -1)>> <</if>> <<if $slaves[$i].fuckdoll > 0>> Society @@.red;strongly disapproves@@ of your owning a Fuckdoll. - <<= FSChangePorn("Paternalist", -2)>> + <<= FutureSocieties.ChangePorn("Paternalist", -2)>> <</if>> <<elseif $arcologies[0].FSDegradationist != "unset">> <<if ($slaves[$i].fetish == "mindbroken")>> Society @@.green;approves@@ of $his broken spirit; $he serves as an example of a soulless fuckpuppet. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <<else>> <<if ($slaves[$i].trust <= 4)>> Society @@.green;approves@@ of $slaves[$i].slaveName's fear of you. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <<else>> <<if ($slaves[$i].assignment == "be your Head Girl")>> Society accepts $slaves[$i].slaveName trusting you, since $he is your Head Girl and keeps the other slaves down. @@ -5549,39 +5549,39 @@ Society reluctantly accepts of $slaves[$i].slaveName trusting you, since $he is worshipful of you. <<else>> Society @@.red;disapproves@@ of $slaves[$i].slaveName being trusting of you; $he is not being properly degraded for $his role. - <<= FSChangePorn("Degradationist", -1)>> + <<= FutureSocieties.ChangePorn("Degradationist", -1)>> <</if>> <</if>> <</if>> <<if ($slaves[$i].assignment == "work a glory hole") || ($slaves[$i].assignment == "be confined in the arcade")>> Society @@.green;approves@@ of how $he is restrained for involuntary use, seeing this as the future of sexual relations. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <</if>> <<if ($modScore > 15 || ($piercingScore > 8 && $tatScore > 5))>> Society @@.green;approves@@ of $his many body modifications, which advances the public taste for such degradation of slave bodies. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <</if>> <<if $slaves[$i].abortionTat > 0 && $arcologies[0].FSRepopulationFocus == "unset">> Society @@.green;<<if $arcologies[0].FSRestart != "unset">>greatly <</if>>approves@@ of $his tally of aborted children. <<if $arcologies[0].FSRestart != "unset">> - <<= FSChangePorn("Degradationist", 2)>> + <<= FutureSocieties.ChangePorn("Degradationist", 2)>> <<else>> - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <</if>> <</if>> <<if $slaves[$i].voice != 0>> <<if $slaves[$i].lips > 95>> Society @@.green;approves@@ of the way $his mouth, with its useless ability to speak, has been replaced with an appealing hole. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <</if>> <</if>> <<if ($slaves[$i].choosesOwnAssignment == 1)>> Society @@.red;disapproves@@ of $slaves[$i].slaveName being allowed to choose $his own job; this holds back ideas about slave degradation. - <<= FSChangePorn("Degradationist", -1)>> + <<= FutureSocieties.ChangePorn("Degradationist", -1)>> <</if>> <<if $slaves[$i].fuckdoll > 0>> Society @@.green;approves@@ of your owning a Fuckdoll. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <</if>> <</if>> @@ -5589,50 +5589,50 @@ <<if ($slaves[$i].scars != 0) && ($slaves[$i].scars != 6)>> <<if $arcologies[0].FSDegradationist != "unset">> Society @@.green;mildly approves@@ of your slave's scarring; this encourages the further abuse of slaves. - <<= FSChangePorn("Degradationist", 1)>> + <<= FutureSocieties.ChangePorn("Degradationist", 1)>> <<elseif $arcologies[0].FSPaternalist != "unset">> Society @@.red;mildly disapproves@@ of your scarred slaves, viewing them as a sign of mistreatment. - <<= FSChangePorn("Paternalist", -1)>> + <<= FutureSocieties.ChangePorn("Paternalist", -1)>> <</if>> <</if>> <<if $arcologies[0].FSBodyPurist != "unset">> <<if ($slaves[$i].boobsImplant == 0) && ($slaves[$i].buttImplant == 0) && ($slaves[$i].lipsImplant == 0) && ($slaves[$i].bellyImplant == -1)>> Society @@.green;approves@@ of $slaves[$i].slaveName's natural body; this supports the fashion for surgically untouched slaves. - <<= FSChangePorn("BodyPurist", 1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 1)>> <<else>> Society @@.red;disapproves@@ of $slaves[$i].slaveName's implants; this holds back acceptance of the idea that slaves should be all-natural. - <<= FSChangePorn("BodyPurist", -1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", -1)>> <</if>> <<if ($slaves[$i].corsetPiercing == 0 && $piercingScore < 3 && $tatScore < 2)>> Society @@.green;approves@@ of $his unmarked, unblemished skin, advancing the fashion for unspoiled slaves. - <<= FSChangePorn("BodyPurist", 1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 1)>> <</if>> <<if ($slaves[$i].earShape != "normal" && $slaves[$i].earShape != "damaged") || $slaves[$i].earT != "none">> Society finds $his inhuman ears @@.red;appalling.@@ - <<= FSChangePorn("BodyPurist", -1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", -1)>> <</if>> <<if $slaves[$i].horn != "none" || $slaves[$i].tail != "none">> Society @@.red;is disgusted@@ by $his inhuman attributes. - <<= FSChangePorn("BodyPurist", -1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", -1)>> <</if>> <<if $slaves[$i].faceImplant <= 5 && $slaves[$i].race == $slaves[$i].origRace>> Society @@.green;approves@@ of $his natural, untouched appearance, advancing the fashion for unaltered slaves. - <<= FSChangePorn("BodyPurist", 1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 1)>> <<else>> Society @@.red;disapproves@@ of $slaves[$i].slaveName's surgical beautification; this holds back acceptance of the idea that a natural slave is a beautiful slave. - <<= FSChangePorn("BodyPurist", -2)>> + <<= FutureSocieties.ChangePorn("BodyPurist", -2)>> <</if>> <<if $slaves[$i].fuckdoll == 0>> <<if $slaves[$i].vagina == 0 && $slaves[$i].anus == 0 && $slaves[$i].counter.vaginal == 0 && $slaves[$i].counter.anal == 0>> Society @@.green;strongly approves@@ of $his intact holes, idolizing $his pristine body. - <<= FSChangePorn("BodyPurist", 3)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 3)>> <<elseif $slaves[$i].vagina == 0 && $slaves[$i].counter.vaginal == 0>> Society @@.green;approves@@ of $his intact hymen, advancing ideals of pure, fresh slaves. - <<= FSChangePorn("BodyPurist", 1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 1)>> <<elseif $slaves[$i].anus == 0 && $slaves[$i].counter.anal == 0>> Society @@.green;approves@@ of $his intact anus, advancing ideals of pure, fresh slaves. - <<= FSChangePorn("BodyPurist", 1)>> + <<= FutureSocieties.ChangePorn("BodyPurist", 1)>> <</if>> <</if>> @@ -5640,61 +5640,61 @@ <<set _transformed = 0>> <<if ($slaves[$i].boobsImplant > 0) && ($slaves[$i].buttImplant > 0) && ($slaves[$i].lipsImplant > 0)>> Society @@.green;approves@@ of $slaves[$i].slaveName's thoroughly modified body; this supports the fashion for surgically upgraded slaves. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].lipsImplant/$slaves[$i].lips >= .50) || ($slaves[$i].buttImplant/$slaves[$i].butt >= .50 && $slaves[$i].butt >= 6) || ($slaves[$i].buttImplant/$slaves[$i].butt >= .25 && $slaves[$i].butt >= 3) || ($slaves[$i].boobsImplant/$slaves[$i].boobs >= .75 && $slaves[$i].boobs >= 10000) || ($slaves[$i].boobsImplant/$slaves[$i].boobs >= .50 && $slaves[$i].boobs >= 2000) || ($slaves[$i].boobsImplant/$slaves[$i].boobs >= .25 && $slaves[$i].boobs >= 1000) || ($slaves[$i].boobsImplant/$slaves[$i].boobs >= .10 && $slaves[$i].boobs >= 400)>> Society @@.green;approves@@ of $his obvious implants. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].bellyImplant >= 1500)>> Society @@.green;mildly approves@@ of $slaves[$i].slaveName's belly bulging implant; this supports interest in more unusual implantations. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].amp == 1) || ($slaves[$i].waist < -95) || ($slaves[$i].teeth == "pointy") || ($slaves[$i].teeth == "removable") || ($slaves[$i].hips == 3)>> Society @@.green;approves@@ of $his extreme surgeries; interest in $him stirs interest in transformations of all kinds. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if $slaves[$i].faceImplant > 30 || $slaves[$i].race != $slaves[$i].origRace>> Society @@.green;approves@@ of $his surgically improved appearance; this supports the fashion for surgical corrections. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <</if>> <<if $slaves[$i].faceImplant > 95 && $slaves[$i].face > 40>> Society @@.green;approves@@ of $his beautiful face, considering it's uncanny nature a boon rather than a fault; this supports the belief that there is no such thing as too much surgery. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].amp < 0) || $slaves[$i].earT != "none" || $slaves[$i].horn != "none" || $slaves[$i].tail != "none">> Society @@.green;strongly approves@@ of $his transhuman body. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].dick > 8)>> Society @@.green;approves@@ of $his monolithic dick, since it's such an obvious transformation masterpiece. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].lips > 95)>> Society @@.green;approves@@ of $his absurd facepussy as a transformation of $his mouth into nothing more than another fuckhole. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if ($slaves[$i].nipples == "fuckable")>> Society @@.green;approves@@ of $slaves[$i].slaveName's fuckable nipples; this supports interest in more unusual body modifications. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if $slaves[$i].fuckdoll > 0>> Society @@.green;approves@@ of your owning a Fuckdoll. - <<= FSChangePorn("TransformationFetishist", 1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", 1)>> <<set _transformed = 1>> <</if>> <<if _transformed == 0>> Society @@.red;disapproves@@ of $slaves[$i].slaveName's lack of obvious transformations; $he does not advance the ideal of body modification. - <<= FSChangePorn("TransformationFetishist", -1)>> + <<= FutureSocieties.ChangePorn("TransformationFetishist", -1)>> <</if>> <</if>> @@ -5711,52 +5711,52 @@ <</if>> <<if _slimAccept == 1>> Society @@.green;approves@@ of $slaves[$i].slaveName's graceful, girlish form; $he furthers the fashion for slaves like $him. - <<= FSChangePorn("SlimnessEnthusiast", 1)>> + <<= FutureSocieties.ChangePorn("SlimnessEnthusiast", 1)>> <</if>> <</if>> <<if ($slaves[$i].butt > 4) && ($slaves[$i].boobs > 800)>> Society @@.red;disapproves@@ of $slaves[$i].slaveName's boorishly large tits and ass; $he damages the fashion for slender slaves. - <<= FSChangePorn("SlimnessEnthusiast", -1)>> + <<= FutureSocieties.ChangePorn("SlimnessEnthusiast", -1)>> <</if>> <<elseif $arcologies[0].FSAssetExpansionist != "unset">> <<if ($slaves[$i].geneMods.NCS > 0)>> Society @@.green;strongly disaproves @@ of $slaves[$i].slaveName who can't get bigger; $His shrinking body hurts the fashion for Asset expansion. - <<= FSChangePorn("AssetExpansionist", -2)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", -2)>> <</if>> <<if ($slaves[$i].boobs > 2000)>> Society @@.green;approves@@ of $slaves[$i].slaveName's huge tits; $his breasts further the fashion for bouncing boobs on slaves. - <<= FSChangePorn("AssetExpansionist", 1)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", 1)>> <</if>> <<if ($slaves[$i].butt > 7)>> Society @@.green;approves@@ of $his massive ass; $his butt furthers the fashion for big behinds on slaves. - <<= FSChangePorn("AssetExpansionist", 1)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", 1)>> <</if>> <<if ($slaves[$i].dick > 8)>> Society @@.green;approves@@ of $his massive member, which might be nonfunctional, but is a wonder of expansionism. <<set _Dic = $slaves[$i].dick-8>> - <<= FSChangePorn("AssetExpansionist", _Dic, $pornFameBonus)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", _Dic, $pornFameBonus)>> <<elseif ($slaves[$i].dick > 6)>> Society @@.green;approves@@ of $his enormous penis; $his cock furthers the fashion for dangling dicks on slaves. - <<= FSChangePorn("AssetExpansionist", 1)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", 1)>> <</if>> <<if ($slaves[$i].balls > 6)>> Society @@.green;approves@@ of $his swinging balls; $his nuts further the fashion for tremendous testicles on slaves. - <<= FSChangePorn("AssetExpansionist", 1)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", 1)>> <</if>> <<if ($slaves[$i].lips > 95)>> Society @@.green;approves@@ of $his expanded lips. - <<= FSChangePorn("AssetExpansionist", 1)>> + <<= FutureSocieties.ChangePorn("AssetExpansionist", 1)>> <</if>> <</if>> <<if $arcologies[0].FSPastoralist != "unset">> <<if ($slaves[$i].lactation > 0)>> Society @@.green;approves@@ of $slaves[$i].slaveName's milky udders; the sight of $his creamy milk encourages the public taste for dairy straight from the nipple. - <<= FSChangePorn("Pastoralist", 1)>> + <<= FutureSocieties.ChangePorn("Pastoralist", 1)>> <</if>> <<if ($slaves[$i].assignment == "get milked") && ($slaves[$i].balls > 0)>> Society @@.green;approves@@ of how $slaves[$i].slaveName gets cockmilked; the sight of $his product encourages experimentation with cum-based concoctions. - <<= FSChangePorn("Pastoralist", 1)>> + <<= FutureSocieties.ChangePorn("Pastoralist", 1)>> <</if>> <</if>> @@ -5764,93 +5764,93 @@ <<if $arcologies[0].FSPhysicalIdealistLaw == 1>> <<if ($slaves[$i].muscles > 50)>> Society @@.green;approves@@ of $slaves[$i].slaveName's commitment to fitness; but thinks $his muscles are too big and vascular. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <<elseif ($slaves[$i].muscles > 20)>> Society @@.green;strongly approves@@ of $slaves[$i].slaveName's fit body; physical enthusiasts see $him as the optimal example of feminine fitness. - <<= FSChangePorn("PhysicalIdealist", 2)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 2)>> <<elseif ($slaves[$i].muscles > 5)>> Society @@.green;approves@@ of $slaves[$i].slaveName's toned form; the public sees potential in those guns. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <</if>> <<else>> <<if ($slaves[$i].muscles > 95)>> Society @@.green;strongly approves@@ of $slaves[$i].slaveName's glorious muscles; everyone wants to train a slave to look as swole as $him. - <<= FSChangePorn("PhysicalIdealist", 2)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 2)>> <<elseif ($slaves[$i].muscles > 30)>> Society @@.green;approves@@ of $slaves[$i].slaveName's fit body; physical enthusiasts see $him as on $his way to something great. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <<elseif ($slaves[$i].muscles > 5)>> Society @@.green;approves@@ of $slaves[$i].slaveName's toned form; the public sees potential in those guns. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <</if>> <</if>> <<if ($slaves[$i].height >= 185)>> Society @@.green;approves@@ of how tall $he is; the sexual advantages of $his height are impressed on the public mind. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <</if>> <<if ($slaves[$i].health > 80)>> Society @@.green;approves@@ of $his health; the expectation that slaves should be kept perfectly healthy grows. - <<= FSChangePorn("PhysicalIdealist", 1)>> + <<= FutureSocieties.ChangePorn("PhysicalIdealist", 1)>> <</if>> <<elseif $arcologies[0].FSHedonisticDecadence != "unset">> <<if ($slaves[$i].weight > 160)>> Society @@.green;strongly approves@@ of $slaves[$i].slaveName's glorious rolls; everyone wants to own a pillowy slave like $him. - <<= FSChangePorn("Hedonism", 3)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 3)>> <<elseif ($slaves[$i].weight > 95)>> Society @@.green;approves@@ of $slaves[$i].slaveName's fat body; it shows just how much luxurious your life must be to pamper a slave as much as $him. - <<= FSChangePorn("Hedonism", 2)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 2)>> <<elseif ($slaves[$i].weight > 30)>> Society @@.green;approves@@ of $slaves[$i].slaveName's chubby form; the public enjoys the sight of a well rounded slave. - <<= FSChangePorn("Hedonism", 1)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 1)>> <</if>> <<if ($slaves[$i].muscles < -30)>> Society @@.green;approves@@ of how soft $he is; the sexual advantages of being able to effortlessly overpower $him are not lost on them. - <<= FSChangePorn("Hedonism", 1)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 1)>> <</if>> <<if ($slaves[$i].fetishStrength > 95)>> Society @@.green;approves@@ of $his intense fetish; the expectation that everyone's deepest desires should be fulfilled grows. - <<= FSChangePorn("Hedonism", 1)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 1)>> <</if>> <<if (_para > 0)>> Society @@.green;is pleased@@ that $he is allowed to fully indulge $his paraphilia. - <<= FSChangePorn("Hedonism", 1)>> + <<= FutureSocieties.ChangePorn("Hedonistic", 1)>> <<elseif (_para < 0)>> Society @@.red;frowns@@ upon $him not being allowed to indulge in $his paraphilia. - <<= FSChangePorn("Hedonism", -2)>> + <<= FutureSocieties.ChangePorn("Hedonistic", -2)>> <</if>> <</if>> <<if $arcologies[0].FSChattelReligionist != "unset">> <<if ["cruel retirement counter", "tight steel", "uncomfortable leather"].includes($slaves[$i].collar)>> Society @@.green;approves@@ of $slaves[$i].slaveName's collar as an expression of the old ideal of mortification of the flesh, advancing the combination of religious originalism and modern slavery. - <<= FSChangePorn("ChattelReligionist", 1)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 1)>> <</if>> <<if ["a burqa", "a chattel habit", "a fallen nuns habit", "a hijab and abaya", "a klan robe", "a niqab and abaya", "a penitent nuns habit", "a succubus outfit"].includes($slaves[$i].clothes)>> Society @@.green;approves@@ of $his religiously themed clothing, strengthening the connection between sexual servitude and faith. - <<= FSChangePorn("ChattelReligionist", 1)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 1)>> <<elseif ["a bunny outfit", "a hijab and blouse", "a huipil", "a kimono", "a military uniform", "a nice maid outfit", "a nice nurse outfit", "a slutty qipao", "a toga", "body oil", "chains", "conservative clothing", "nice business attire", "no clothing", "shibari ropes", "uncomfortable straps"].includes($slaves[$i].clothes)>> Society accepts $his spartan clothing, seeing it as permissible under the new religious mores. <<elseif ($slaves[$i].fuckdoll == 0)>> Society @@.red;disapproves@@ of $his unnecessarily gaudy attire; this slows acceptance of a link between faith and sexual servitude. - <<= FSChangePorn("ChattelReligionist", -1)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", -1)>> <</if>> <<if ($slaves[$i].devotion > 95)>> Society @@.green;approves@@ of $his devotion to you as a companion to religious devotion, seeing both as the model for holy slaves. - <<= FSChangePorn("ChattelReligionist", 1)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 1)>> <</if>> <<if ($slaves[$i].trust > 95)>> Society @@.green;strongly approves@@ of $his faith in you as a companion to faith in God, seeing both as the model for righteous slaves of the future. - <<= FSChangePorn("ChattelReligionist", 2)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 2)>> <</if>> <<if ($slaves[$i].behavioralFlaw == "devout")>> Society does not disapprove of $his devout adherence to an old world faith, having confidence that you'll bring $him around, and looking forward to seeing $him converted into a holy sex object. <<elseif ($slaves[$i].behavioralQuirk == "sinful")>> Society @@.green;strongly approves@@ of $his eagerness to transgress against the old world religious mores $he once held dear. - <<= FSChangePorn("ChattelReligionist", 2)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 2)>> <</if>> <<if $slaves[$i].shouldersTat == "sacrilege" && $slaves[$i].lipsTat == "sacrilege" && $slaves[$i].boobsTat == "sacrilege" && $slaves[$i].armsTat == "sacrilege" && $slaves[$i].backTat == "sacrilege" && $slaves[$i].stampTat == "sacrilege" && $slaves[$i].buttTat == "sacrilege" && $slaves[$i].vaginaTat == "sacrilege" && $slaves[$i].dickTat == "sacrilege" && $slaves[$i].anusTat == "sacrilege" && $slaves[$i].legsTat == "sacrilege" && $slaves[$i].fuckdoll == 0>> Society @@.green;enjoys the sight@@ of the religious sacrilege scrawled across $his skin. - <<= FSChangePorn("ChattelReligionist", 1)>> + <<= FutureSocieties.ChangePorn("ChattelReligionist", 1)>> <</if>> <</if>> @@ -5865,7 +5865,7 @@ <<if ($slaves[$i].trust > 20) && ($slaves[$i].health > 40)>> <<if $arcologies[0].FSPaternalist != "unset">> Society @@.green;strongly approves@@ of how you've brought a shelter girl health and happiness. - <<= FSChangePorn("Paternalist", 2)>> + <<= FutureSocieties.ChangePorn("Paternalist", 2)>> <<switch $slaves[$i].assignment>> <<case "work in the brothel">><<run getSlaveStatisticData($slaves[$i], $facility.brothel).rep += 2*$FSSingleSlaveRep*($arcologies[0].FSPaternalist/$FSLockinLevel)>> <</switch>> diff --git a/src/uncategorized/saRelationships.tw b/src/uncategorized/saRelationships.tw index f67f51af0071e322123f6e92a70640a0a5c7787b..64ff05776a9ab0986ad8aa6dff53bae68a421b47 100644 --- a/src/uncategorized/saRelationships.tw +++ b/src/uncategorized/saRelationships.tw @@ -1,5 +1,7 @@ :: SA relationships [nobr] +<<setPlayerPronouns>> + <<if $slaves[$i].fuckdoll == 0>> <<set _SL = $slaves.length, _SlaveI = $slaves[$i], _SlaveJ = null, _drop = 0>> <<setLocalPronouns _SlaveI>> diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw index 7303ae70332f23eda4ed4db00b48e3fff0fb6be6..07cfdb0cbeec5e84277a887c189e6d3bfd029bcf 100644 --- a/src/uncategorized/saRules.tw +++ b/src/uncategorized/saRules.tw @@ -4513,7 +4513,7 @@ The spare living conditions and daily tasks @@.hotpink;get $him used@@ to the routine of slavery. <<set $slaves[$i].devotion += 1>> <<case "Roman Revivalist">> - $He is + $He is @@.hotpink;pleased@@ with $his cushy living arrangements, and @@.mediumaquamarine;trusts you more@@ for it. <<set $slaves[$i].devotion += 2, $slaves[$i].trust += 2>> <<default>> The reasonable living conditions allow $him to relax after the days work. diff --git a/src/uncategorized/schoolroom.tw b/src/uncategorized/schoolroom.tw index a1b75e32d5ed0ee10b30adf3535d429530eaa6a7..4fe30644ec7f84aa92e82efccc67d3258c016bdd 100644 --- a/src/uncategorized/schoolroom.tw +++ b/src/uncategorized/schoolroom.tw @@ -5,7 +5,6 @@ <<if $schoolroomName != "the Schoolroom">> <<set $schoolroomNameCaps = $schoolroomName.replace("the ", "The ")>> <</if>> -<<schoolAssignmentFilter>> $schoolroomNameCaps is well-equipped, with wallscreens to display lessons. These are currently <<switch $schoolroomDecoration>> <<case "Roman Revivalist">> @@ -116,67 +115,6 @@ $schoolroomNameCaps is well-equipped, with wallscreens to display lessons. These <</if>> <br><br> -<<if $Schoolteacher != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a Schoolteacher. [[Appoint one|Schoolteacher Select]] -<</if>> -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> - <button class="tablinks" onclick="opentab(event, 'transfer')" id="tab transfer">Transfer from Facility</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $schoolroomSlaves > 0>> - <<schoolAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$schoolroomNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($schoolroom <= $schoolroomSlaves)>> - ''$schoolroomNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $schoolroomSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<div id="transfer" class="tabcontent"> - <div class="content"> - <<if ($schoolroom <= $schoolroomSlaves)>> - ''$schoolroomNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $schoolroomSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "transferable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Schoolroom == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<elseif ($tabChoice.Schoolroom == "remove")>> - <script>document.getElementById("tab remove").click();</script> -<<elseif ($tabChoice.Schoolroom == "transfer")>> - <script>document.getElementById("tab transfer").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.schoolroom, true)>> <br><br>Rename $schoolroomName: <<textbox "$schoolroomName" $schoolroomName "Schoolroom">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/schoolteacherSelect.tw b/src/uncategorized/schoolteacherSelect.tw index 549b492526feac4be2785a5c955f1f4c1cd93c52..edc0e2505573454e1b522bc90a1eb1b8b404ddb6 100644 --- a/src/uncategorized/schoolteacherSelect.tw +++ b/src/uncategorized/schoolteacherSelect.tw @@ -1,7 +1,6 @@ :: Schoolteacher Select [nobr] <<set $nextButton = "Back", $nextLink = "Schoolroom", $showEncyclopedia = 1, $encyclopedia = "Schoolteacher">> -<<showallAssignmentFilter>> <<if ($Schoolteacher != 0)>> <<set $Schoolteacher = getSlave($Schoolteacher.ID)>> <<setLocalPronouns $Schoolteacher>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Schoolteacher from your devoted slaves:'' <br><br>[[None|Schoolteacher Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.schoolroom)>> diff --git a/src/uncategorized/seRaiding.tw b/src/uncategorized/seRaiding.tw index 02e9fccae0617afeb52a53d557885a73ab4e3974..d7dab558e99d17da0a748adeb6d5f793f7ef06b0 100644 --- a/src/uncategorized/seRaiding.tw +++ b/src/uncategorized/seRaiding.tw @@ -197,7 +197,7 @@ target <<set $activeSlave.skill.oral = 0>> <<set $activeSlave.skill.whoring = 0>> <<set $activeSlave.skill.combat = 1>> - <<set $activeSlave.hStyle = either("very short", "short")>> + <<set $activeSlave.hStyle = either("short", "very short"))>> <<set $activeSlave.boobs = 150>> <<set $activeSlave.vagina = -1>> <<set $activeSlave.clit = 0>> diff --git a/src/uncategorized/seRaidingAssault.tw b/src/uncategorized/seRaidingAssault.tw index 1321a0ee0957b23fbede46e9e69937e317372f82..a864a45297ef36073e48089d0dc2dc09977b3c72 100644 --- a/src/uncategorized/seRaidingAssault.tw +++ b/src/uncategorized/seRaidingAssault.tw @@ -6,7 +6,7 @@ You make your selection and direct your $mercenariesTitle to attack the target. <<set _raidescapeL = 1,_raidescapeU = 3>> <<if $SF.Toggle && $SF.Active >= 1>> - <<if $SF.Squad.Satellite.lv >= 1 && $SF.Squad.Satellite.InOrbit > 0>> + <<if $SF.Squad.Satellite.lv >= 1 && $SF.Squad.Satellite.InOrbit > 0>> <<set _MercCaptureL += 1,_MercCaptureU +1>> <<set _raidescapeL -= 1,_raidescapeU -= 1>> <</if>> diff --git a/src/uncategorized/servantsQuarters.tw b/src/uncategorized/servantsQuarters.tw index ae1fbcc51cb4d0f161ef216133d6275a8d734b43..000cd2699d3d06a5e9babb9b69db9da8283b7744 100644 --- a/src/uncategorized/servantsQuarters.tw +++ b/src/uncategorized/servantsQuarters.tw @@ -5,7 +5,6 @@ <<if $servantsQuartersName != "the Servants' Quarters">> <<set $servantsQuartersNameCaps = $servantsQuartersName.replace("the ", "The ")>> <</if>> -<<quartersAssignmentFilter>> $servantsQuartersNameCaps <<switch $servantsQuartersDecoration>> <<case "Roman Revivalist">> @@ -103,10 +102,10 @@ $servantsQuartersNameCaps <</if>> <br><br> +<<set _facility = App.Entity.facilities.servantsQuarters>> <<if $Stewardess != 0>> <<setLocalPronouns $Stewardess>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> + <<print App.UI.SlaveList.displayManager(_facility)>> <<if canAchieveErection($Stewardess) && $Stewardess.pubertyXY == 1>> <br> <<if $stewardessImpregnates == 1>> @@ -121,44 +120,6 @@ $servantsQuartersNameCaps <br><br> -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $servantsQuartersSlaves > 0>> - <<quartersAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$servantsQuartersNameCaps is empty for the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($servantsQuarters <= $servantsQuartersSlaves)>> - ''$servantsQuartersNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $servantsQuartersSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.ServantsQuarters == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<else>> - <script>document.getElementById("tab remove").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.listSJFacilitySlaves(_facility, passage())>> <br><br>Rename $servantsQuartersName: <<textbox "$servantsQuartersName" $servantsQuartersName "Servants' Quarters">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/slaveAssignmentsReport.tw b/src/uncategorized/slaveAssignmentsReport.tw index 295605163cf1340b5372dc9cb487bc5bb1cf8b68..edd3a6fbc96551e6285dbdebbafed7768d475cd8 100644 --- a/src/uncategorized/slaveAssignmentsReport.tw +++ b/src/uncategorized/slaveAssignmentsReport.tw @@ -706,26 +706,26 @@ $NPCMarketShareLC = Math.trunc(($NPCSexSupply.lowerClass * 1000) / ($NPCSexSuppl <</if>> /** - * Accordion - * @version 0.7RC - * @author 000-250-006 - * - * @param array _facListArr $args - * Multidimensional temporary array - * 0: The passage name for the facility's report - * 1: The facility name capitalized (@see todo) - * 2: max number of slaves allowed in facility - > 0 implies open - * 3: number of slaves assigned to facility - * 4: ID of the slave assigned to run the facility ("Boss") - * 5: Text title of the Boss - * - * @todo This is a proof of concept construct, if it works and cuts overhead, intended to create an object - * for deeper use in multiple locations, including streamlining reports/facilities code to one widget - * @todo Figure out if this would be better as an object rather than an array for overhead - * StoryInit also? - * @todo Figure out why we're not using ndef/-1 for a bunch of these story variables. Leaky conditionals - * @todo Figure out why we're using variable space with capitalized facility names when we can parse it from true name - */ +* Accordion +* @version 0.7RC +* @author 000-250-006 +* +* @param array _facListArr $args +* Multidimensional temporary array +* 0: The passage name for the facility's report +* 1: The facility name capitalized (@see todo) +* 2: max number of slaves allowed in facility - > 0 implies open +* 3: number of slaves assigned to facility +* 4: ID of the slave assigned to run the facility ("Boss") +* 5: Text title of the Boss +* +* @todo This is a proof of concept construct, if it works and cuts overhead, intended to create an object +* for deeper use in multiple locations, including streamlining reports/facilities code to one widget +* @todo Figure out if this would be better as an object rather than an array for overhead +* StoryInit also? +* @todo Figure out why we're not using ndef/-1 for a bunch of these story variables. Leaky conditionals +* @todo Figure out why we're using variable space with capitalized facility names when we can parse it from true name +*/ <<set _facListArr = [ ["Arcade Report", $arcadeNameCaps, $arcade, $arcadeSlaves, -1, -1], diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw index b17f823c62a3d07dcd78162c29e8cef6b10d68ff..49996fcea8270776ae969e577625788cc12e007a 100644 --- a/src/uncategorized/slaveInteract.tw +++ b/src/uncategorized/slaveInteract.tw @@ -103,7 +103,7 @@ | <<link "Have $him dance for you">><<replace "#miniscene">><<include "FDance">><br> <</replace>><</link>> <</if>> <</if>> - | <<link "Play with $his tits">><<replace "#miniscene">><<include "FBoobs">><br> <</replace>><</link>> + | <<link "Play with $his tits">><<replace "#miniscene">><<include "FBoobs">><br> <</replace>><</link>> | <<link "Caress $him">><<replace "#miniscene">><<include "FCaress">><br> <</replace>><</link>> | <<link "Give $him a hug">><<replace "#miniscene">><<include "FEmbrace">><br> <</replace>><</link>> <<if $cheatMode == 1>> @@ -346,8 +346,8 @@ | <<link "Abuse $his rival with $him">><<replace "#miniscene">><<include "FRival">><br> <</replace>><</link>> <</if>> <<if ($activeSlave.fetish != "mindbroken") && (($activeSlave.amp != 1) || ($activeSlave.voice != 0)) && $activeSlave.accent != 4>> - | <<link "Ask $him about $his feelings">><<replace "#miniscene">><<include "FFeelings">><br> <</replace>><</link>> - <<if $cheatMode == 1>> + | <<link "Ask $him about $his feelings">><<replace "#miniscene">><<include "FFeelings">><br> <</replace>><</link>> + <<if $cheatMode == 1>> | <<link "Make $him beg">><<replace "#miniscene">><<include "FBeg">><br> <</replace>><</link>> <</if>> <</if>> @@ -391,7 +391,7 @@ <</if>> <</if>> <</if>> -<<set _activeSlaveRepSacrifice = repGainSacrifice()>> +<<set _activeSlaveRepSacrifice = repGainSacrifice($activeSlave, $arcologies[0])>> <<if _activeSlaveRepSacrifice > 0 && $arcologies[0].FSPaternalist == "unset" && ($activeSlave.breedingMark == 0 || $propOutcome == 0)>> | <<link "Sacrifice $him on the altar" "Aztec Slave Sacrifice">><<set $sacrificeType = "life">><</link>>//This will kill $him and gain you _activeSlaveRepSacrifice reputation// <</if>> @@ -1287,27 +1287,28 @@ Aphrodisiacs: <span id="aphrodisiacs"><strong><<if $activeSlave.aphrodisiacs > 1 All _reservedIncubator of $his children will be placed in $incubatorName. <</if>> <<if (_reservedIncubator + _reservedNursery < _WL) && ($reservedChildren < $freeTanks)>> - <<link "Keep another child" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 1)>><</link>> + <<link "Keep another child" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 1)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <<if _reservedIncubator > 0>> - | <<link "Keep one less child" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 1)>><</link>> + | <<link "Keep one less child" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 1)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <</if>> <<if _reservedIncubator > 1>> - | <<link "Keep none of $his children" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 9999)>><</link>> + | <<link "Keep none of $his children" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 9999)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <</if>> <<if ($reservedChildren + _WL - _reservedIncubator) <= $freeTanks>> - | <<link "Keep the rest of $his children" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 9999)>><</link>> + | <<link "Keep the rest of $his children" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 9999)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <</if>> <<elseif (_reservedIncubator == _WL) || ($reservedChildren == $freeTanks) || (_reservedIncubator - _reservedNursery >= 0)>> - <<link "Keep one less child" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 1)>><</link>> + <<link "Keep one less child" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 1)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <<if _reservedIncubator > 1>> - | <<link "Keep none of $his children" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 9999)>><</link>> + | <<link "Keep none of $his children" "Slave Interact">><<set WombCleanGenericReserve($activeSlave, "incubator", 9999)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <</if>> <</if>> <<elseif $reservedChildren < $freeTanks>> $He is pregnant and you have <<if $freeTanks == 1>>an<</if>> @@.lime;available aging tank<<if $freeTanks > 1>>s<</if>>.@@ - <<print "[[Keep "+ ((_WL > 1) ? "a" : "the") +" child|Slave Interact][WombAddToGenericReserve($activeSlave, 'incubator', 1)]]">> + <<set _cCount = (_WL > 1 ? "a" : "the")>> + <<link "Keep _cCount child" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 1)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <<if (_WL > 1) && ($reservedChildren + _WL) <= $freeTanks>> - | <<link "Keep all of $his children" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 9999)>><</link>> + | <<link "Keep all of $his children" "Slave Interact">><<set WombAddToGenericReserve($activeSlave, "incubator", 9999)>><<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>><<set $reservedChildren = FetusGlobalReserveCount("incubator")>><</link>> <</if>> <<elseif $reservedChildren == $freeTanks>> You have no available tanks for $his children. diff --git a/src/uncategorized/slaveSummary.tw b/src/uncategorized/slaveSummary.tw deleted file mode 100644 index 8a44cf7adebb039456ac43659b3fde964399ee12..0000000000000000000000000000000000000000 --- a/src/uncategorized/slaveSummary.tw +++ /dev/null @@ -1,13 +0,0 @@ -:: Slave Summary [nobr] - -<<print App.UI.slaveSummaryList(passage())>> - -<<run $(document).one(':passagedisplay', function() { - $("[data-quick-index]").click(function() { - let which = this.attributes["data-quick-index"].value; - let quick = $("div#list_index" + which); - quick.toggleClass("hidden"); - }); - quickListBuildLinks(); -});>> -<<set _Slave = 0>> diff --git a/src/uncategorized/spa.tw b/src/uncategorized/spa.tw index 1c7e28ba55915ba469c9194c1af4687cdfb4e805..2a1ab9bce4b2e2e9f522bc7ae701795d97824759 100644 --- a/src/uncategorized/spa.tw +++ b/src/uncategorized/spa.tw @@ -5,7 +5,6 @@ <<if $spaName != "the Spa">> <<set $spaNameCaps = $spaName.replace("the ", "The ")>> <</if>> -<<spaAssignmentFilter>> $spaNameCaps <<switch $spaDecoration>> <<case "Roman Revivalist">> @@ -118,69 +117,6 @@ $spaNameCaps <</if>> <br><br> -<<if $Attendant != 0>> - <<set $SlaveSummaryFiler = "leading">> - <<include "Slave Summary">> -<<else>> - You do not have a slave serving as a spa Attendant. [[Appoint one|Attendant Select]] -<</if>> - - -<br><br> - -<body> - -<div class="tab"> - <button class="tablinks" onclick="opentab(event, 'assign')" id="tab assign">Assign a slave</button> - <button class="tablinks" onclick="opentab(event, 'remove')" id="tab remove">Remove a slave</button> - <button class="tablinks" onclick="opentab(event, 'transfer')" id="tab transfer">Transfer from Facility</button> -</div> - -<div id="remove" class="tabcontent"> - <div class="content"> - <<if $spaSlaves > 0>> - <<spaAssignmentFilter>> - <<set $SlaveSummaryFiler = "occupying">> - <<include "Slave Summary">> - <<resetAssignmentFilter>> - <<else>> - <br><br>//$spaNameCaps is empty at the moment.<br>// - <</if>> - </div> -</div> - -<div id="assign" class="tabcontent"> - <div class="content"> - <<if ($spa <= $spaSlaves)>> - ''$spaNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $spaSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "assignable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<div id="transfer" class="tabcontent"> - <div class="content"> - <<if ($spa <= $spaSlaves)>> - ''$spaNameCaps is full and cannot hold any more slaves'' - <<elseif ($slaves.length > $spaSlaves)>> - <<resetAssignmentFilter>> - <<set $SlaveSummaryFiler = "transferable">> - <<include "Slave Summary">> - <</if>> - </div> -</div> - -<<if ($tabChoice.Spa == "assign")>> - <script>document.getElementById("tab assign").click();</script> -<<elseif ($tabChoice.Spa == "remove")>> - <script>document.getElementById("tab remove").click();</script> -<<elseif ($tabChoice.Spa == "transfer")>> - <script>document.getElementById("tab transfer").click();</script> -<</if>> - -</body> +<<print App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.spa, true)>> <br><br>Rename $spaName: <<textbox "$spaName" $spaName "Spa">> //Use a noun or similar short phrase// diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw index 373786f19e3f8a4a7fe92d49d1cf6ca61170bf0e..7f980bb7ec219df927110cf3f647542eecc951c3 100644 --- a/src/uncategorized/spaReport.tw +++ b/src/uncategorized/spaReport.tw @@ -206,7 +206,7 @@ <br> Since $he doesn't have enough girls to occupy all $his time, the spa takes in citizens' slaves on a contract basis and $he helps them too, earning @@.yellowgreen;<<print cashFormat(_seed)>>.@@ <<if ($arcologies[0].FSHedonisticDecadence > 0) && (_DL == 0)>> Society @@.green;loves@@ being allowed to lounge in your spa, greatly advancing your laid back culture. - <<= FSChange("Hedonism", 2)>> + <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <</if>> <<if (_DL > 0)>><br><br><</if>> @@ -216,7 +216,7 @@ ''<<if (_DL > 1)>>There are _DL slaves<<else>>There is one slave<</if>> resting and recuperating in the spa.'' <<if ($arcologies[0].FSHedonisticDecadence > 0) && (_DL == 0)>> Society @@.green;approves@@ of your slaves being pampered this way, greatly advancing your laid back culture. - <<= FSChange("Hedonism", 1)>> + <<= FutureSocieties.Change("Hedonistic", 1)>> <</if>> <</if>> diff --git a/src/uncategorized/stewardessSelect.tw b/src/uncategorized/stewardessSelect.tw index 94344364a47b279595d0c714ef258ef7ca19100e..9a300a7a9f0b7b1361bc385bfc359cbb55071fe0 100644 --- a/src/uncategorized/stewardessSelect.tw +++ b/src/uncategorized/stewardessSelect.tw @@ -1,7 +1,6 @@ :: Stewardess Select [nobr] <<set $nextButton = "Back", $nextLink = "Servants' Quarters", $showEncyclopedia = 1, $encyclopedia = "Stewardess">> -<<showallAssignmentFilter>> <<if ($Stewardess != 0)>> <<set $Stewardess = getSlave($Stewardess.ID)>> <<setLocalPronouns $Stewardess>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Stewardess from your devoted slaves:'' <br><br>[[None|Stewardess Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.servantsQuarters)>> diff --git a/src/uncategorized/storyCaption.tw b/src/uncategorized/storyCaption.tw index 46ef284601db7b682d80ea91e35c7b7a4f175662..8d32d58f048ac6cb7b324b7525e02628b7ab47b1 100644 --- a/src/uncategorized/storyCaption.tw +++ b/src/uncategorized/storyCaption.tw @@ -2,379 +2,327 @@ <<set _Pass = passage()>> <<if _Pass == "Encyclopedia">> -<span id="nextButton"><strong><<link [[($nextButton)|($nextLink)]]>><</link>> to Free Cities</strong></span> <br><br> -/* Intro, new players, PC/Gameplay focused */ -[[Playing Free Cities|Encyclopedia][$encyclopedia = "Playing Free Cities"]] -<br>[[Design your master|Encyclopedia][$encyclopedia = "Design Your Master"]] -<br>[[Being in charge|Encyclopedia][$encyclopedia = "Being in charge"]] -/* Section for slaves */ -<br>[[Slaves|Encyclopedia][$encyclopedia = "Slaves"]] -<br>[[Obtaining Slaves|Encyclopedia][$encyclopedia = "Obtaining Slaves"]] -<br>[[Slave Assignments|Encyclopedia][$encyclopedia = "Slave Assignments"]] -<br>[[Slave Body|Encyclopedia][$encyclopedia = "Body"]] / [[Skills|Encyclopedia][$encyclopedia = "Skills"]] -<br>[[Slave Fetishes|Encyclopedia][$encyclopedia = "Fetishes"]] / [[Quirks|Encyclopedia][$encyclopedia = "Quirks"]] / [[Flaws|Encyclopedia][$encyclopedia = "Flaws"]] -<br>[[Slave Relationships|Encyclopedia][$encyclopedia = "Relationships"]] -/* Section for arcology and Lore */ -<br>[[The X-Series Arcology|Encyclopedia][$encyclopedia = "What the Upgrades Do"]] -<br>[[Arcology Facilities|Encyclopedia][$encyclopedia = "Facilities"]] -<br>[[Terrain Types|Encyclopedia][$encyclopedia = "Terrain Types"]] -<br>[[Future Societies|Encyclopedia][$encyclopedia = "Future Societies"]] -<br>[[Lore|Encyclopedia][$encyclopedia = "Lore"]] -/* Mods and extras */ -<br>[[Game Mods|Encyclopedia][$encyclopedia = "Game Mods"]] -<br>[[Credits|Encyclopedia][$encyclopedia = "Credits"]] + <span id="nextButton"><strong><<link [[($nextButton)|($nextLink)]]>><</link>> to Free Cities</strong></span> <br><br> + /* Intro, new players, PC/Gameplay focused */ + [[Playing Free Cities|Encyclopedia][$encyclopedia = "Playing Free Cities"]] + <br>[[Design your master|Encyclopedia][$encyclopedia = "Design Your Master"]] + <br>[[Being in charge|Encyclopedia][$encyclopedia = "Being in charge"]] + /* Section for slaves */ + <br>[[Slaves|Encyclopedia][$encyclopedia = "Slaves"]] + <br>[[Obtaining Slaves|Encyclopedia][$encyclopedia = "Obtaining Slaves"]] + <br>[[Slave Assignments|Encyclopedia][$encyclopedia = "Slave Assignments"]] + <br>[[Slave Body|Encyclopedia][$encyclopedia = "Body"]] / [[Skills|Encyclopedia][$encyclopedia = "Skills"]] + <br>[[Slave Fetishes|Encyclopedia][$encyclopedia = "Fetishes"]] / [[Quirks|Encyclopedia][$encyclopedia = "Quirks"]] / [[Flaws|Encyclopedia][$encyclopedia = "Flaws"]] + <br>[[Slave Relationships|Encyclopedia][$encyclopedia = "Relationships"]] + /* Section for arcology and Lore */ + <br>[[The X-Series Arcology|Encyclopedia][$encyclopedia = "What the Upgrades Do"]] + <br>[[Arcology Facilities|Encyclopedia][$encyclopedia = "Facilities"]] + <br>[[Terrain Types|Encyclopedia][$encyclopedia = "Terrain Types"]] + <br>[[Future Societies|Encyclopedia][$encyclopedia = "Future Societies"]] + <br>[[Lore|Encyclopedia][$encyclopedia = "Lore"]] + /* Mods and extras */ + <br>[[Game Mods|Encyclopedia][$encyclopedia = "Game Mods"]] + <br>[[Credits|Encyclopedia][$encyclopedia = "Credits"]] <<elseif _Pass == "Starting Girls">> -<span id="cost"><<SlaveCostDescription>></span> + <span id="cost"><<SlaveCostDescription>></span> <<elseif $ui == "disclaimer">> <span id="nextButton"><strong><<link [[($nextButton)|($nextLink)]]>><</link>></strong></span> <<elseif $ui != "start">> -<<set _SL = $slaves.length>> -<<if $cheatMode || $debugMode>>_Pass<br><</if>> -<span id="week">''Week $week''</span> -<br>Week of $month $day, $year -<<if (_Pass == "Main") && ($cheatMode)&& ($cheatModeM)>> - <<set _TWeek = $week>> - <<textbox "$week" $week>> - <<link "Apply">> - <<set $week = Math.trunc(Number($week) || _TWeek)>> - <<if $week < 1>><<set $week = 1>><</if>> - <<replace "#week">>''Week $week''<</replace>> - <</link>> -<</if>> -<br> -<<if $weatherToday.severity == 1>> - //@@.cyan;$weatherToday.name@@// -<<elseif $weatherToday.severity == 2>> - //@@.yellow;$weatherToday.name@@// -<<elseif $weatherToday.severity == 3>> - //@@.orange;$weatherToday.name@@// -<<else>> - //@@.red;$weatherToday.name@@// -<</if>> -<br><br> -<<if $nextButton == "END WEEK">> - <span id="endWeekButton"><strong><<link [[($nextButton)|($nextLink)]]>> - <<resetAssignmentFilter>> /* very important! */ - <</link>></strong></span> @@.cyan;[Ent]@@ - <<if $rulesError && $rulesAssistantAuto == 1>><br>@@.yellow; WARNING: some custom rules will change slave variables@@<</if>> -<<elseif $nextButton !== " ">> - <span id="nextButton"> /* target for miscWidgets' <<UpdateNextButton>> */ - <strong><<link "$nextButton">> /* must use link so spacebar shortcut will work */ - <<set $ui = "main">> - <<goto $nextLink>> - <</link>></strong> - @@.cyan;[Space]@@ - </span> -<<else>> - <span id="nextButton"></span> -<</if>> -<br><br> + <<set _SL = $slaves.length>> + <<if $cheatMode || $debugMode>>_Pass<br><</if>> + <span id="week">''Week $week''</span> + <br>Week of $month $day, $year + <<if (_Pass == "Main") && ($cheatMode)&& ($cheatModeM)>> + <<set _TWeek = $week>> + <<textbox "$week" $week>> + <<link "Apply">> + <<set $week = Math.trunc(Number($week) || _TWeek)>> + <<if $week < 1>><<set $week = 1>><</if>> + <<replace "#week">>''Week $week''<</replace>> + <</link>> + <</if>> + <br> + <<if $weatherToday.severity == 1>> + //@@.cyan;$weatherToday.name@@// + <<elseif $weatherToday.severity == 2>> + //@@.yellow;$weatherToday.name@@// + <<elseif $weatherToday.severity == 3>> + //@@.orange;$weatherToday.name@@// + <<else>> + //@@.red;$weatherToday.name@@// + <</if>> + <br><br> + <<if $nextButton == "END WEEK">> + <span id="endWeekButton"><strong><<link [[($nextButton)|($nextLink)]]>><</link>></strong></span> @@.cyan;[Ent]@@ + <<if $rulesError && $rulesAssistantAuto == 1>><br>@@.yellow; WARNING: some custom rules will change slave variables@@<</if>> + <<elseif $nextButton !== " ">> + <span id="nextButton"> /* target for miscWidgets' <<UpdateNextButton>> */ + <strong><<link "$nextButton">> /* must use link so spacebar shortcut will work */ + <<set $ui = "main">> + <<goto $nextLink>> + <</link>></strong> + @@.cyan;[Space]@@ + </span> + <<else>> + <span id="nextButton"></span> + <</if>> + <br><br> -<<set $cash = Math.trunc($cash)>> -<span id="cash"> -<<if $cash > 0>> - @@.yellowgreen;Cash@@ -<<else>> - __@@.red;Cash@@__ -<</if>> -| <<print cashFormat($cash)>> -</span> -<br> -<<if _Pass == "Main">> - <<set _TCash2 = ($cash-$cashLastWeek)>> - <span id="oldcash"> - <<if _TCash2 < 0>> - (@@.red;<<print cashFormat(_TCash2)>>@@ + <<set $cash = Math.trunc($cash)>> + <span id="cash"> + <<if $cash > 0>> + @@.yellowgreen;Cash@@ <<else>> - (@@.yellowgreen;+<<print cashFormat(_TCash2)>>@@ + __@@.red;Cash@@__ <</if>> + | <<print cashFormat($cash)>> </span> - since last week) - <<if ($cheatMode) && ($cheatModeM)>> - <<set _TCash1 = $cash>> - <<textbox "$cash" $cash>> - <<link "Apply">> - <<set $cash = Math.trunc(Number($cash) || _TCash1), $cheater = 1>> - <<replace "#cash">> - <<if $cash > 0>> - @@.yellowgreen;Cash@@ - <<else>> - __@@.red;Cash@@__ - <</if>> - | <<print cashFormat($cash)>> - <</replace>> + <br> + <<if _Pass == "Main">> <<set _TCash2 = ($cash-$cashLastWeek)>> - <<replace "#oldcash">> + <span id="oldcash"> <<if _TCash2 < 0>> (@@.red;<<print cashFormat(_TCash2)>>@@ <<else>> (@@.yellowgreen;+<<print cashFormat(_TCash2)>>@@ <</if>> - <</replace>> - since last week) - <</link>> - <</if>> - - <br> - <<if $foodMarket > 0>> - <<set $food = Math.trunc($food)>> - <<set $foodConsumption = (($lowerClass*$lowerRate) + ($middleClass*$middleRate) + ($upperClass*$upperRate) + ($topClass*$topRate))>> - <span id="food"> - <<if $food > $foodConsumption>> /* if there is enough food for the next week */ - @@.chocolate;Food@@ - <<else>> - @@.red;Food@@ - <</if>> - <<if $food < 0>> - <<set $food = 0>> - <</if>> - | <<print massFormat($food)>> - </span> - - <br> - - <<set _TFood2 = ($food-$foodLastWeek)>> - <span id="oldfood"> - <<if _TFood2 < 0>> - (@@.red;<<print massFormat(_TFood2)>>@@ - <<else>> - (@@.chocolate;+<<print massFormat(_TFood2)>>@@ - <</if>> </span> since last week) <<if ($cheatMode) && ($cheatModeM)>> - <<set _TFood1 = $food>> - <<textbox "$food" $food>> + <<set _TCash1 = $cash>> + <<textbox "$cash" $cash>> <<link "Apply">> - <<if $food < 0>> - <<set $food = 0>> + <<set $cash = Math.trunc(Number($cash) || _TCash1), $cheater = 1>> + <<replace "#cash">> + <<if $cash > 0>> + @@.yellowgreen;Cash@@ <<else>> - <<set $food = Math.trunc(Number($food) || _TFood1), $cheater = 1>> + __@@.red;Cash@@__ <</if>> - <<replace "#food">> - <<if $food > $foodConsumption>> /* if there is enough food for the next week */ + | <<print cashFormat($cash)>> + <</replace>> + <<set _TCash2 = ($cash-$cashLastWeek)>> + <<replace "#oldcash">> + <<if _TCash2 < 0>> + (@@.red;<<print cashFormat(_TCash2)>>@@ + <<else>> + (@@.yellowgreen;+<<print cashFormat(_TCash2)>>@@ + <</if>> + <</replace>> + since last week) + <</link>> + <</if>> + + <br> + <<if $foodMarket > 0>> + <<set $food = Math.trunc($food)>> + <<set $foodConsumption = (($lowerClass*$lowerRate) + ($middleClass*$middleRate) + ($upperClass*$upperRate) + ($topClass*$topRate))>> + <span id="food"> + <<if $food > $foodConsumption>> /* if there is enough food for the next week */ @@.chocolate;Food@@ <<else>> - __@@.red;Food@@__ + @@.red;Food@@ + <</if>> + <<if $food < 0>> + <<set $food = 0>> <</if>> | <<print massFormat($food)>> - <</replace>> + </span> + + <br> + <<set _TFood2 = ($food-$foodLastWeek)>> - <<replace "#oldfood">> + <span id="oldfood"> <<if _TFood2 < 0>> (@@.red;<<print massFormat(_TFood2)>>@@ <<else>> (@@.chocolate;+<<print massFormat(_TFood2)>>@@ <</if>> - <</replace>> + </span> since last week) - <</link>> + <<if ($cheatMode) && ($cheatModeM)>> + <<set _TFood1 = $food>> + <<textbox "$food" $food>> + <<link "Apply">> + <<if $food < 0>> + <<set $food = 0>> + <<else>> + <<set $food = Math.trunc(Number($food) || _TFood1), $cheater = 1>> + <</if>> + <<replace "#food">> + <<if $food > $foodConsumption>> /* if there is enough food for the next week */ + @@.chocolate;Food@@ + <<else>> + __@@.red;Food@@__ + <</if>> + | <<print massFormat($food)>> + <</replace>> + <<set _TFood2 = ($food-$foodLastWeek)>> + <<replace "#oldfood">> + <<if _TFood2 < 0>> + (@@.red;<<print massFormat(_TFood2)>>@@ + <<else>> + (@@.chocolate;+<<print massFormat(_TFood2)>>@@ + <</if>> + <</replace>> + since last week) + <</link>> + <</if>> <</if>> - <</if>> - [[Upkeep|Costs Budget]] | -<<else>> - <<if $foodMarket > 0>> - <<set $food = Math.trunc($food)>> - <span id="food"> - <<if $food > $foodConsumption>> /* if there is enough food for the next week */ - @@.chocolate;Food@@ + [[Upkeep|Costs Budget]] | + <<else>> + <<if $foodMarket > 0>> + <<set $food = Math.trunc($food)>> + <span id="food"> + <<if $food > $foodConsumption>> /* if there is enough food for the next week */ + @@.chocolate;Food@@ + <<else>> + @@.red;Food@@ + <</if>> + | <<print massFormat($food)>> + </span> + <</if>> + Upkeep | + <</if>><<print cashFormat($costs)>> + <br><br>@@.pink;Total Sex Slaves@@ | <<print num(_SL)>> + <br>@@.pink;Penthouse Beds@@ | + <<if $dormitoryPopulation+$roomsPopulation > ($dormitory+$rooms)>>@@.red;<<print $dormitoryPopulation+$roomsPopulation>>@@<<else>><<print $dormitoryPopulation+$roomsPopulation>><</if>>/<<print ($dormitory+$rooms)>> + <br>@@.pink;Dormitory Beds@@ | <<if $dormitoryPopulation > $dormitory>>@@.red;<<print $dormitoryPopulation>>@@<<else>><<print $dormitoryPopulation>><</if>>/<<print $dormitory>> + <br>@@.pink;Luxury Rooms@@ | <<if $roomsPopulation > $rooms>>@@.red;<<print $roomsPopulation>>@@<<else>><<print $roomsPopulation>><</if>>/<<print $rooms>> + <br>@@.yellowgreen;GSP@@ | + <<print Math.trunc(0.1*$arcologies[0].prosperity)>>m + <<if $arcologies[0].ownership >= $arcologies[0].minority>> + <<if $arcologies[0].ownership >= $arcologies[0].minority+5>> + <<if $arcologies[0].ownership < 100>> + <<if $assistantPower >= 1>> (@@.yellowgreen;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.yellowgreen;<<print $arcologies[0].ownership>>%@@) <</if>> + <<else>> (<<print $arcologies[0].ownership>>%) + <</if>> <<else>> - @@.red;Food@@ + <<if $assistantPower >= 1>> (@@.yellow;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.yellow;<<print $arcologies[0].ownership>>%@@) <</if>> <</if>> - | <<print massFormat($food)>> - </span> + <<else>> + <<if $assistantPower >= 1>> (@@.red;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.red;<<print $arcologies[0].ownership>>%@@) <</if>> <</if>> - Upkeep | -<</if>><<print cashFormat($costs)>> -<br><br>@@.pink;Total Sex Slaves@@ | <<print num(_SL)>> -<br>@@.pink;Penthouse Beds@@ | -<<if $dormitoryPopulation+$roomsPopulation > ($dormitory+$rooms)>>@@.red;<<print $dormitoryPopulation+$roomsPopulation>>@@<<else>><<print $dormitoryPopulation+$roomsPopulation>><</if>>/<<print ($dormitory+$rooms)>> -<br>@@.pink;Dormitory Beds@@ | <<if $dormitoryPopulation > $dormitory>>@@.red;<<print $dormitoryPopulation>>@@<<else>><<print $dormitoryPopulation>><</if>>/<<print $dormitory>> -<br>@@.pink;Luxury Rooms@@ | <<if $roomsPopulation > $rooms>>@@.red;<<print $roomsPopulation>>@@<<else>><<print $roomsPopulation>><</if>>/<<print $rooms>> -<br>@@.yellowgreen;GSP@@ | -<<print Math.trunc(0.1*$arcologies[0].prosperity)>>m -<<if $arcologies[0].ownership >= $arcologies[0].minority>> - <<if $arcologies[0].ownership >= $arcologies[0].minority+5>> - <<if $arcologies[0].ownership < 100>> - <<if $assistantPower >= 1>> (@@.yellowgreen;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.yellowgreen;<<print $arcologies[0].ownership>>%@@) <</if>> - <<else>> (<<print $arcologies[0].ownership>>%) - <</if>> + <<if _Pass == "Main">> + <br>[[Rep|Rep Budget]] | <<else>> - <<if $assistantPower >= 1>> (@@.yellow;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.yellow;<<print $arcologies[0].ownership>>%@@) <</if>> + <br>@@.green;Rep@@ | <</if>> -<<else>> - <<if $assistantPower >= 1>> (@@.red;<<print $arcologies[0].ownership>>%@@:<<print $arcologies[0].minority>>%) <<else>> (@@.red;<<print $arcologies[0].ownership>>%@@) <</if>> -<</if>> -<<if _Pass == "Main">> - <br>[[Rep|Rep Budget]] | -<<else>> - <br>@@.green;Rep@@ | -<</if>> -<span id="rep"> -<<if $rep > 19000>> - @@color:rgb(0,145,0);worshipped@@ -<<elseif $rep > 18000>> - @@color:rgb(0,150,0);great@@ -<<elseif $rep > 17000>> - @@color:rgb(0,155,0);exalted@@ -<<elseif $rep > 16000>> - @@color:rgb(0,160,0);illustrious@@ -<<elseif $rep > 15000>> - @@color:rgb(0,165,0);prestigious@@ -<<elseif $rep > 14000>> - @@color:rgb(0,170,0);renowned@@ -<<elseif $rep > 13000>> - @@color:rgb(0,175,0);famed@@ -<<elseif $rep > 12000>> - @@color:rgb(0,180,0);celebrated@@ -<<elseif $rep > 11000>> - @@color:rgb(0,185,0);honored@@ -<<elseif $rep > 10000>> - @@color:rgb(0,190,0);acclaimed@@ -<<elseif $rep > 9000>> - @@color:rgb(0,195,0);eminent@@ -<<elseif $rep > 8250>> - @@color:rgb(0,200,0);prominent@@ -<<elseif $rep > 7000>> - @@color:rgb(0,205,0);distinguished@@ -<<elseif $rep > 6750>> - @@color:rgb(0,210,0);admired@@ -<<elseif $rep > 6000>> - @@color:rgb(0,215,0);esteemed@@ -<<elseif $rep > 5250>> - @@color:rgb(0,220,0);respected@@ -<<elseif $rep > 4500>> - @@color:rgb(0,225,0);known@@ -<<elseif $rep > 3750>> - @@color:rgb(0,230,0);recognized@@ -<<elseif $rep > 3000>> - @@color:rgb(0,235,0);rumored@@ -<<elseif $rep > 2250>> - @@color:rgb(0,240,0);envied@@ -<<elseif $rep > 1500>> - @@color:rgb(0,245,0);resented@@ -<<elseif $rep > 750>> - @@color:rgb(0,250,0);disliked@@ -<<else>> - @@color:rgb(0,255,0);unknown@@ -<</if>> -(<<print num($rep)>>) -</span> -<<if (_Pass == "Main")>> - <<if ($cheatMode) && ($cheatModeM)>> - <<set _TRep = $rep>> - <<textbox "$rep" $rep>> - <<link "Apply">> - <<set $rep = Math.clamp(Math.trunc(Number($rep) || _TRep), 0, 20000), $cheater = 1>> - <<replace "#rep">> - <<if $rep > 19000>> - @@color:rgb(0,145,0);worshipped@@ - <<elseif $rep > 18000>> - @@color:rgb(0,150,0);great@@ - <<elseif $rep > 17000>> - @@color:rgb(0,155,0);exalted@@ - <<elseif $rep > 16000>> - @@color:rgb(0,160,0);illustrious@@ - <<elseif $rep > 15000>> - @@color:rgb(0,165,0);prestigious@@ - <<elseif $rep > 14000>> - @@color:rgb(0,170,0);renowned@@ - <<elseif $rep > 13000>> - @@color:rgb(0,175,0);famed@@ - <<elseif $rep > 12000>> - @@color:rgb(0,180,0);celebrated@@ - <<elseif $rep > 11000>> - @@color:rgb(0,185,0);honored@@ - <<elseif $rep > 10000>> - @@color:rgb(0,190,0);acclaimed@@ - <<elseif $rep > 9000>> - @@color:rgb(0,195,0);eminent@@ - <<elseif $rep > 8250>> - @@color:rgb(0,200,0);prominent@@ - <<elseif $rep > 7000>> - @@color:rgb(0,205,0);distinguished@@ - <<elseif $rep > 6750>> - @@color:rgb(0,210,0);admired@@ - <<elseif $rep > 6000>> - @@color:rgb(0,215,0);esteemed@@ - <<elseif $rep > 5250>> - @@color:rgb(0,220,0);respected@@ - <<elseif $rep > 4500>> - @@color:rgb(0,225,0);known@@ - <<elseif $rep > 3750>> - @@color:rgb(0,230,0);recognized@@ - <<elseif $rep > 3000>> - @@color:rgb(0,235,0);rumored@@ - <<elseif $rep > 2250>> - @@color:rgb(0,240,0);envied@@ - <<elseif $rep > 1500>> - @@color:rgb(0,245,0);resented@@ - <<elseif $rep > 750>> - @@color:rgb(0,250,0);disliked@@ - <<else>> - @@color:rgb(0,255,0);unknown@@ + <span id="rep"> + <<if $rep > 19000>> + @@color:rgb(0,145,0);worshipped@@ + <<elseif $rep > 18000>> + @@color:rgb(0,150,0);great@@ + <<elseif $rep > 17000>> + @@color:rgb(0,155,0);exalted@@ + <<elseif $rep > 16000>> + @@color:rgb(0,160,0);illustrious@@ + <<elseif $rep > 15000>> + @@color:rgb(0,165,0);prestigious@@ + <<elseif $rep > 14000>> + @@color:rgb(0,170,0);renowned@@ + <<elseif $rep > 13000>> + @@color:rgb(0,175,0);famed@@ + <<elseif $rep > 12000>> + @@color:rgb(0,180,0);celebrated@@ + <<elseif $rep > 11000>> + @@color:rgb(0,185,0);honored@@ + <<elseif $rep > 10000>> + @@color:rgb(0,190,0);acclaimed@@ + <<elseif $rep > 9000>> + @@color:rgb(0,195,0);eminent@@ + <<elseif $rep > 8250>> + @@color:rgb(0,200,0);prominent@@ + <<elseif $rep > 7000>> + @@color:rgb(0,205,0);distinguished@@ + <<elseif $rep > 6750>> + @@color:rgb(0,210,0);admired@@ + <<elseif $rep > 6000>> + @@color:rgb(0,215,0);esteemed@@ + <<elseif $rep > 5250>> + @@color:rgb(0,220,0);respected@@ + <<elseif $rep > 4500>> + @@color:rgb(0,225,0);known@@ + <<elseif $rep > 3750>> + @@color:rgb(0,230,0);recognized@@ + <<elseif $rep > 3000>> + @@color:rgb(0,235,0);rumored@@ + <<elseif $rep > 2250>> + @@color:rgb(0,240,0);envied@@ + <<elseif $rep > 1500>> + @@color:rgb(0,245,0);resented@@ + <<elseif $rep > 750>> + @@color:rgb(0,250,0);disliked@@ + <<else>> + @@color:rgb(0,255,0);unknown@@ + <</if>> + (<<print num($rep)>>) + </span> + <<if (_Pass == "Main")>> + <<if ($cheatMode) && ($cheatModeM)>> + <<set _TRep = $rep>> + <<textbox "$rep" $rep>> + <<link "Apply">> + <<set $rep = Math.clamp(Math.trunc(Number($rep) || _TRep), 0, 20000), $cheater = 1>> + <<replace "#rep">> + <<if $rep > 19000>> + @@color:rgb(0,145,0);worshipped@@ + <<elseif $rep > 18000>> + @@color:rgb(0,150,0);great@@ + <<elseif $rep > 17000>> + @@color:rgb(0,155,0);exalted@@ + <<elseif $rep > 16000>> + @@color:rgb(0,160,0);illustrious@@ + <<elseif $rep > 15000>> + @@color:rgb(0,165,0);prestigious@@ + <<elseif $rep > 14000>> + @@color:rgb(0,170,0);renowned@@ + <<elseif $rep > 13000>> + @@color:rgb(0,175,0);famed@@ + <<elseif $rep > 12000>> + @@color:rgb(0,180,0);celebrated@@ + <<elseif $rep > 11000>> + @@color:rgb(0,185,0);honored@@ + <<elseif $rep > 10000>> + @@color:rgb(0,190,0);acclaimed@@ + <<elseif $rep > 9000>> + @@color:rgb(0,195,0);eminent@@ + <<elseif $rep > 8250>> + @@color:rgb(0,200,0);prominent@@ + <<elseif $rep > 7000>> + @@color:rgb(0,205,0);distinguished@@ + <<elseif $rep > 6750>> + @@color:rgb(0,210,0);admired@@ + <<elseif $rep > 6000>> + @@color:rgb(0,215,0);esteemed@@ + <<elseif $rep > 5250>> + @@color:rgb(0,220,0);respected@@ + <<elseif $rep > 4500>> + @@color:rgb(0,225,0);known@@ + <<elseif $rep > 3750>> + @@color:rgb(0,230,0);recognized@@ + <<elseif $rep > 3000>> + @@color:rgb(0,235,0);rumored@@ + <<elseif $rep > 2250>> + @@color:rgb(0,240,0);envied@@ + <<elseif $rep > 1500>> + @@color:rgb(0,245,0);resented@@ + <<elseif $rep > 750>> + @@color:rgb(0,250,0);disliked@@ + <<else>> + @@color:rgb(0,255,0);unknown@@ + <</if>> + ($rep) + <</replace>> + <</link>> <</if>> - ($rep) - <</replace>> - <</link>> <</if>> -<</if>> -<<if $secExp == 1>> -<br>@@.darkviolet;Auth@@ | -<<set $authority = Math.clamp(Math.trunc($authority), 0, 20000)>> -<span id="auth"> -<<if $authority > 19500>> - @@color:rgb(148, 0, 211);divine will@@ -<<elseif $authority > 19000>> - @@color:rgb(148, 0, 211);sovereign@@ -<<elseif $authority > 18000>> - @@color:rgb(148, 0, 211);monarch@@ -<<elseif $authority > 17000>> - @@color:rgb(148, 0, 211);tyrant@@ -<<elseif $authority > 15000>> - @@color:rgb(148, 0, 211);dictator@@ -<<elseif $authority > 14000>> - @@color:rgb(148, 0, 211);prince@@ -<<elseif $authority > 13000>> - @@color:rgb(183, 0, 211);master@@ -<<elseif $authority > 12000>> - @@color:rgb(183, 0, 211);leader@@ -<<elseif $authority > 11000>> - @@color:rgb(183, 0, 211);director@@ -<<elseif $authority > 10000>> - @@color:rgb(183, 0, 211);overseer@@ -<<elseif $authority > 9000>> - @@color:rgb(183, 0, 211);chief@@ -<<elseif $authority > 8000>> - @@color:rgb(183, 0, 211);manager@@ -<<elseif $authority > 7000>> - @@color:rgb(211,0,204);principal@@ -<<elseif $authority > 6000>> - @@color:rgb(211,0,204);auxiliary@@ -<<elseif $authority > 5000>> - @@color:rgb(211,0,204);subordinate@@ -<<elseif $authority > 4000>> - @@color:rgb(211,0,204);follower@@ -<<elseif $authority > 3000>> - @@color:rgb(211,0,204);powerless@@ -<<elseif $authority > 2000>> - @@color:rgb(211,0,204);toothless@@ -<<elseif $authority > 1000>> - @@color:rgb(211,0,204);mostly harmless@@ -<<else>> - @@color:rgb(211,0,204);harmless@@ -<</if>> -(<<print num($authority)>>) -</span> -<<if (_Pass == "Main")>> - <<if ($cheatMode) && ($cheatModeM)>> - <<set _TAuth = $authority>> - <<textbox "$authority" $authority>> - <<link "Apply">> - <<set $authority = Math.clamp(Math.trunc(Number($authority) || _TAuth), 0, 20000), $cheater = 1>> - <<replace "#auth">> + <<if $secExp == 1>> + <br>@@.darkviolet;Auth@@ | + <<set $authority = Math.clamp(Math.trunc($authority), 0, 20000)>> + <span id="auth"> <<if $authority > 19500>> @@color:rgb(148, 0, 211);divine will@@ <<elseif $authority > 19000>> @@ -416,54 +364,128 @@ <<else>> @@color:rgb(211,0,204);harmless@@ <</if>> + (<<print num($authority)>>) + </span> + <<if (_Pass == "Main")>> + <<if ($cheatMode) && ($cheatModeM)>> + <<set _TAuth = $authority>> + <<textbox "$authority" $authority>> + <<link "Apply">> + <<set $authority = Math.clamp(Math.trunc(Number($authority) || _TAuth), 0, 20000), $cheater = 1>> + <<replace "#auth">> + <<if $authority > 19500>> + @@color:rgb(148, 0, 211);divine will@@ + <<elseif $authority > 19000>> + @@color:rgb(148, 0, 211);sovereign@@ + <<elseif $authority > 18000>> + @@color:rgb(148, 0, 211);monarch@@ + <<elseif $authority > 17000>> + @@color:rgb(148, 0, 211);tyrant@@ + <<elseif $authority > 15000>> + @@color:rgb(148, 0, 211);dictator@@ + <<elseif $authority > 14000>> + @@color:rgb(148, 0, 211);prince@@ + <<elseif $authority > 13000>> + @@color:rgb(183, 0, 211);master@@ + <<elseif $authority > 12000>> + @@color:rgb(183, 0, 211);leader@@ + <<elseif $authority > 11000>> + @@color:rgb(183, 0, 211);director@@ + <<elseif $authority > 10000>> + @@color:rgb(183, 0, 211);overseer@@ + <<elseif $authority > 9000>> + @@color:rgb(183, 0, 211);chief@@ + <<elseif $authority > 8000>> + @@color:rgb(183, 0, 211);manager@@ + <<elseif $authority > 7000>> + @@color:rgb(211,0,204);principal@@ + <<elseif $authority > 6000>> + @@color:rgb(211,0,204);auxiliary@@ + <<elseif $authority > 5000>> + @@color:rgb(211,0,204);subordinate@@ + <<elseif $authority > 4000>> + @@color:rgb(211,0,204);follower@@ + <<elseif $authority > 3000>> + @@color:rgb(211,0,204);powerless@@ + <<elseif $authority > 2000>> + @@color:rgb(211,0,204);toothless@@ + <<elseif $authority > 1000>> + @@color:rgb(211,0,204);mostly harmless@@ + <<else>> + @@color:rgb(211,0,204);harmless@@ + <</if>> + <</replace>> + <</link>> + <</if>> + <</if>> + <span id="sec"> + <br>@@.deepskyblue;Security@@ | @@.deepskyblue;<<print Math.trunc($security)>>%@@ + </span> + <<if (_Pass == "Main")>> + <<if ($cheatMode) && ($cheatModeM)>> + <<set _TSec = $security>> + <<textbox "$security" $security>> + <<link "Apply">> + <<set $security = Math.clamp(Math.trunc(Number($security) || _TSec), 0, 100), $cheater = 1>> + <<replace "#sec">> + <br>@@.deepskyblue;Security@@ | <<print Math.trunc($security)>>% + <</replace>> + <</link>> + <</if>> + <</if>> + <span id="crime"> + <br>@@.orangered;Crime@@ | @@.orangered;<<print Math.trunc($crime)>>%@@ + </span> + <<if (_Pass == "Main")>> + <<if ($cheatMode) && ($cheatModeM)>> + <<set _TCrime = $crime>> + <<textbox "$crime" $crime>> + <<link "Apply">> + <<set $crime = Math.clamp(Math.trunc(Number($crime) || _TCrime), 0, 100), $cheater = 1>> + <<replace "#crime">> + <br>@@.orangered;Crime@@ | <<print Math.trunc($crime)>>% + <</replace>> + <</link>> + <</if>> + <br> + <</if>> <</if>> -<</if>> -<span id="sec"> -<br>@@.deepskyblue;Security@@ | @@.deepskyblue;<<print Math.trunc($security)>>%@@ -</span> -<<if (_Pass == "Main")>> - <<if ($cheatMode) && ($cheatModeM)>> - <<set _TSec = $security>> - <<textbox "$security" $security>> - <<link "Apply">> - <<set $security = Math.clamp(Math.trunc(Number($security) || _TSec), 0, 100), $cheater = 1>> - <<replace "#sec">> - <br>@@.deepskyblue;Security@@ | <<print Math.trunc($security)>>% - <</replace>> - <</link>> - <</if>> -<</if>> -<span id="crime"> -<br>@@.orangered;Crime@@ | @@.orangered;<<print Math.trunc($crime)>>%@@ -</span> -<<if (_Pass == "Main")>> - <<if ($cheatMode) && ($cheatModeM)>> - <<set _TCrime = $crime>> - <<textbox "$crime" $crime>> - <<link "Apply">> - <<set $crime = Math.clamp(Math.trunc(Number($crime) || _TCrime), 0, 100), $cheater = 1>> - <<replace "#crime">> - <br>@@.orangered;Crime@@ | <<print Math.trunc($crime)>>% - <</replace>> - <</link>> - <</if>> - <br> -<</if>> -<</if>> -<<if (_Pass == "Main")>> - <<if $newModelUI == 0>> + + <<if (_Pass == "Main")>> <br><span id="policyButton"><<link [[Policies]]>><<set $nextButton = "Back", $nextLink = "Manage Corporation">><</link>></span> @@.cyan;[Y]@@ <br><span id="URButton"><<link [[Universal Rules]]>><</link>></span> @@.cyan;[V]@@ <<if $FSAnnounced>> <br><span id="FSButton"><<link [[Future Societies|Future Society]]>><<set $nextButton = "Back", $nextLink = "Main">><</link>></span> @@.cyan;[F]@@ <<if ($FSCredits > 0) || ($FSReminder)>>@@.yellow;[!]@@<</if>> <</if>> - <br><span id="PAOButton"><<link [[Personal Assistant|Personal assistant options]]>><</link>></span> @@.cyan;[T]@@<br> + <br><span id="PAOButton"><<link [[Personal Assistant|Personal assistant options]]>><</link>></span> @@.cyan;[T]@@ + <</if>> - <<if $corpAnnounced == 1>><br><span id="manageCorporation"><<link "Manage Corporation">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Corporation">><</link>><<if ($corpSpecToken > 0) && ($corpSpecTimer == 0)>>@@.yellow;[!]@@<</if>></span><</if>> - <br><span id="manageArcology"><<link "Manage Arcology">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Arcology">><</link>></span> @@.cyan;[C]@@ - <br><span id="managePenthouse"><<link "Manage Penthouse">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Penthouse">><</link>></span> @@.cyan;[P]@@ - <br><span id="managePerson"><<link "Manage Personal Affairs">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Personal Affairs">><</link>></span> @@.cyan;[X]@@<br> + <<if $nextButton !== "Continue" && $nextButton !== " ">> + <br> + <span id="manageArcology"> + <<if _Pass !== "Manage Arcology">> + <br> <<link "Manage Arcology" "Manage Arcology">> <</link>> @@.cyan;[C]@@ + <</if>> + </span> + <span id="managePenthouse"> + <<if _Pass !== "Manage Penthouse">> + <br> <<link "Manage Penthouse" "Manage Penthouse">> <</link>> @@.cyan;[P]@@ + <</if>> + </span> + <span id="managePerson"> + <<if _Pass !== "Manage Personal Affairs">> + <br> <<link "Manage Personal Affairs" "Manage Personal Affairs">> <</link>> @@.cyan;[X]@@ + <</if>> + </span> + <<if $corpAnnounced == 1>> + <br><span id="manageCorporation"><<link "Manage Corporation">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Corporation">><</link>> + <<if ($corpSpecToken > 0) && ($corpSpecTimer == 0)>>@@.yellow;[!]@@<</if>> + </span> + <</if>> + <</if>> + <<if (_Pass == "Main") && $newModelUI === 0>> + <br> <<if ($HGSuite)>> <br> <<link "$HGSuiteNameCaps""Head Girl Suite">><</link>> <<if $abbreviateSidebar == 2>> @@ -593,111 +615,71 @@ <</if>> <br> <</if>> - <<else>> /* $newModelUI === 1 */ - <br><span id="policyButton"><<link [[Policies]]>><<set $nextButton = "Back", $nextLink = "Manage Corporation">><</link>></span> @@.cyan;[Y]@@ - <br><span id="URButton"><<link [[Universal Rules]]>><</link>></span> @@.cyan;[V]@@ - <<if $FSAnnounced>> - <br><span id="FSButton"><<link [[Future Societies|Future Society]]>><<set $nextButton = "Back", $nextLink = "Main">><</link>></span> @@.cyan;[F]@@ <<if ($FSCredits > 0) || ($FSReminder)>>@@.yellow;[!]@@<</if>> - <</if>> - <br><span id="PAOButton"><<link [[Personal Assistant|Personal assistant options]]>><</link>></span> @@.cyan;[T]@@<br> - - <<if $corpAnnounced == 1>><br><span id="manageCorporation"><<link "Manage Corporation">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Corporation">><</link>><<if ($corpSpecToken > 0) && ($corpSpecTimer == 0)>>@@.yellow;[!]@@<</if>></span><</if>> - <br><span id="manageArcology"><<link "Manage Arcology">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Arcology">><</link>></span> @@.cyan;[C]@@ - <br><span id="managePenthouse"><<link "Manage Penthouse">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Penthouse">><</link>></span> @@.cyan;[P]@@ - <br><span id="managePerson"><<link "Manage Personal Affairs">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Personal Affairs">><</link>></span> @@.cyan;[X]@@ - <</if>> -<<elseif _Pass == "Wardrobe Use">> - <br><<link [[Wardrobe (shopping)|Wardrobe]]>><</link>> -<<elseif _Pass == "Options">> - <br><br>[[Summary Options]] - <br>[[Description Options]] -<<elseif _Pass == "Manage Arcology">> - <span id="Security"> <br> - <<if $secExp == 1>> - <br><span id="edictButton"><<link [[Edicts|edicts]]>><<set $nextButton = "Back", $nextLink = "Main">><</link>></span> @@.cyan;[D]@@ + <<elseif _Pass == "Wardrobe Use">> + <br> <<link [[Wardrobe (shopping)|Wardrobe]]>><</link>> + <<elseif _Pass == "Options">> + <br><br> [[Summary Options]] + <br> [[Description Options]] + <<elseif _Pass == "Manage Arcology">> + <span id="Security"> <br> + <<if $secExp == 1>> + <br><span id="edictButton"><<link [[Edicts|edicts]]>><<set $nextButton = "Back", $nextLink = "Main">><</link>></span> @@.cyan;[D]@@ <</if>> - <<if $secExp > 0 || $SF.Toggle && $SF.Active >= 1>> <br> - <<link "Manage Security">> <<replace "#Security">> <br> - <<if $SF.Toggle && $SF.Active >= 1>> - <br><span id="SFMButton"> <<link "$SF.Caps's firebase""Firebase">><</link>> </span> @@.cyan;[Z]@@ - <</if>> - <<if $secExp == 1>> - <<if $propHub == 1>> - <br><span id="propHub"><<link "Manage PR">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "propagandaHub">><</link>></span> @@.cyan;[Shift+H]@@ + <<if $secExp > 0 || $SF.Toggle && $SF.Active >= 1>> <br> + <<link "Manage Security">> <<replace "#Security">> <br> + <<if $SF.Toggle && $SF.Active >= 1>> + <br><span id="SFMButton"> <<link "$SF.Caps's firebase""Firebase">><</link>> </span> @@.cyan;[Z]@@ <</if>> - <<if $secHQ == 1>> - <br><span id="securityHQ"><<link "Manage Security">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "securityHQ">><</link>></span> @@.cyan;[Shift+S]@@ + <<if $secExp == 1>> + <<if $propHub == 1>> + <br><span id="propHub"><<link "Manage PR">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "propagandaHub">><</link>></span> @@.cyan;[Shift+H]@@ + <</if>> + <<if $secHQ == 1>> + <br><span id="securityHQ"><<link "Manage Security">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "securityHQ">><</link>></span> @@.cyan;[Shift+S]@@ + <</if>> + <<if $secBarracks == 1>> + <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ + <</if>> + <<if $riotCenter == 1>> + <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ + <</if>> <</if>> - <<if $secBarracks == 1>> - <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ - <</if>> - <<if $riotCenter == 1>> - <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ - <</if>> - <</if>> - <</replace>> <</link>> - <</if>> - </span> -<<elseif _Pass == "Manage Penthouse">> - <br><br> <<link [[Wardrobe]]>><</link>> - <<if $dispensary>> <br>[[Pharmaceutical Fabricator|Dispensary]]<</if>> - <<if $ImplantProductionUpgrade>> <br>[[Implant Manufactory|Implant Manufactory]]<</if>> - <<if $organFarmUpgrade>> <br>[[Organ Farm|Organ Farm]]<</if>> - <<if $geneticMappingUpgrade>> <br>[[Gene Lab|Gene Lab]]<</if>> -<<elseif _Pass == "Manage Personal Affairs">> - <br> - <<if $rep >= 10000>> <br>[[Black Market|The Black Market]]<</if>> -<<elseif _Pass == "propagandaHub" || _Pass == "securityHQ" || _Pass == "secBarracks" || _Pass == "riotControlCenter">> - <br> - <<if $propHub > 0 && _Pass !== "propagandaHub">> - <br><span id="propHub"><<link "Manage PR">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "propagandaHub">><</link>></span> @@.cyan;[Shift+H]@@ - <</if>> - <<if $secHQ > 0 && _Pass !== "securityHQ">> - <br><span id="securityHQ"><<link "Manage Security">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "securityHQ">><</link>></span> @@.cyan;[Shift+S]@@ - <</if>> - <<if $secBarracks > 0 && _Pass !== "secBarracks">> - <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ - <</if>> - <<if $riotCenter > 0 && _Pass !== "riotControlCenter">> - <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ - <</if>> -<</if>> - -<<if $nextButton !== "Continue" && $nextButton !== " " && _Pass !== "Main">> - <br> - <<if _Pass !== "Options">> - <<if _Pass !== "Summary Options">> - <br> <<link "Summary Options" "Summary Options">> <</link>> + <</replace>> <</link>> <</if>> - <<if _Pass !== "Description Options">> - <br> <<link "Description Options" "Description Options">> <</link>> + </span> + <<elseif _Pass == "Manage Penthouse">> + <br> <br> <<link [[Wardrobe]]>><</link>> + <<if $dispensary>> <br>[[Pharmaceutical Fabricator|Dispensary]]<</if>> + <<if $organFarmUpgrade>> <br>[[Organ Farm|Organ Farm]]<</if>> + <<if $ImplantProductionUpgrade>> <br>[[Implant Manufactory|Implant Manufactory]]<</if>> + <<if $geneticMappingUpgrade>> <br>[[Gene Lab|Gene Lab]]<</if>> + <<elseif ["Dispensary", "Organ Farm", "Implant Manufactory", "Gene Lab", "Prosthetics Config"].includes(_Pass)>> + <<if $dispensary && _Pass !== "Dispensary">> <br>[[Pharmaceutical Fabricator|Dispensary]]<</if>> + <<if $organFarmUpgrade && _Pass !== "Organ Farm">> <br>[[Organ Farm|Organ Farm]]<</if>> + <<if $ImplantProductionUpgrade && _Pass !== "Implant Manufactory">> <br>[[Implant Manufactory|Implant Manufactory]]<</if>> + <<if $geneticMappingUpgrade && _Pass !== "Gene Lab">> <br>[[Gene Lab|Gene Lab]]<</if>> + <<if $prostheticsUpgrade && _Pass !== "Prosthetics Config">> <br>[[Prosthetics Lab|Prosthetics Config][$prostheticsConfig = "main"]]<</if>> + <<elseif _Pass == "Manage Personal Affairs">> + <br> <<if $rep >= 10000>> <br>[[Black Market|The Black Market]]<</if>> + <<elseif ["propagandaHub", "securityHQ", "secBarracks", "riotControlCenter"].includes(_Pass)>> + <br> + <<if $propHub > 0 && _Pass !== "propagandaHub">> + <br><span id="propHub"><<link "Manage PR">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "propagandaHub">><</link>></span> @@.cyan;[Shift+H]@@ + <</if>> + <<if $secHQ > 0 && _Pass !== "securityHQ">> + <br><span id="securityHQ"><<link "Manage Security">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "securityHQ">><</link>></span> @@.cyan;[Shift+S]@@ + <</if>> + <<if $secBarracks > 0 && _Pass !== "secBarracks">> + <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ + <</if>> + <<if $riotCenter > 0 && _Pass !== "riotControlCenter">> + <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ <</if>> <</if>> - <span id="manageCorporation"> - <<if _Pass !== "Manage Corporation">> - <br> <<link "Manage Corporation" "Manage Corporation">> <</link>> <<if ($corpSpecToken > 0) && ($corpSpecTimer == 0)>>@@.yellow;[!]@@<</if>> - <</if>> - </span> - <span id="manageArcology"> - <<if _Pass !== "Manage Arcology">> - <br> <<link "Manage Arcology" "Manage Arcology">> <</link>> @@.cyan;[C]@@ - <</if>> - </span> - <span id="managePenthouse"> - <<if _Pass !== "Manage Penthouse">> - <br> <<link "Manage Penthouse" "Manage Penthouse">> <</link>> @@.cyan;[P]@@ - <</if>> - </span> - <span id="managePerson"> - <<if _Pass !== "Manage Personal Affairs">> - <br> <<link "Manage Personal Affairs" "Manage Personal Affairs">> <</link>> @@.cyan;[X]@@ - <</if>> - </span> - <br> <</if>> -<<if $nextButton !== "Continue" && _Pass !== "Options" || ["attackReport","rebellionReport","Slave Assignments Report"].includes(passage())>> - <<if ["attackReport","rebellionReport","Slave Assignments Report","Main"].includes(passage())>> <br> <</if>> <br> +<<if $nextButton !== "Continue" && _Pass !== "Options" || ["attackReport", "rebellionReport", "Slave Assignments Report"].includes(_Pass)>> + <br><br> <span id="optionsButton"> <<link "Game Options">> <<set $nextButton = "Back", $nextLink = _Pass>> @@ -706,12 +688,11 @@ </span> @@.cyan;[O]@@ <</if>> -<</if>> <<if _Pass === "Encyclopedia" || $showEncyclopedia === 0 || $encyclopedia === " " || $nextButton === "Continue">> <<else>> <br>//FCE:// [[$encyclopedia|Encyclopedia][$nextButton = "Back", $nextLink = _Pass]] <</if>> - + <<if ($debugMode == 1)>> <br><br>Debugging Tools<br> <<link "Display Variables">><<checkvars>><</link>> diff --git a/src/uncategorized/subordinateTargeting.tw b/src/uncategorized/subordinateTargeting.tw index da5bd036ea75acbff64edf31b836e8faab0c4af6..a742da8af47876f40994340b5ebf7799eda33e34 100644 --- a/src/uncategorized/subordinateTargeting.tw +++ b/src/uncategorized/subordinateTargeting.tw @@ -18,7 +18,11 @@ <</if>> <br><br>__Select a slave for $him to submit to, sexually:__ -<<include "Slave Summary">> +<<= App.UI.SlaveList.slaveSelectionList( + s => s.devotion >= -20 && s.fuckdoll === 0 && State.variables.activeSlave.ID !== s.ID && + (State.variables.activeSlave.amp !== 1 || s.amp !== 1), + (s, i) => App.UI.passageLink(SlaveFullName(s), 'Subordinate Targeting', `$activeSlave.subTarget = ${s.ID}`), + )>> <br><br>[[None|Subordinate Targeting][$activeSlave.subTarget = 0]] diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw index 83b94533fcbb7b360bca5e8a8610a99e1276cf24..f24b8ae82efad672dad43458515b03feaae03919 100644 --- a/src/uncategorized/surgeryDegradation.tw +++ b/src/uncategorized/surgeryDegradation.tw @@ -124,7 +124,7 @@ <<if _ID == $Concubine.ID>><<set $Concubine = 0>><</if>> <<for _y = 0; _y < $fighterIDs.length; _y++>> <<if _ID == $fighterIDs[_y]>> - <<set _dump = $fighterIDs.deleteAt(_y), _y-->> + <<run $fighterIDs.deleteAt(_y), _y-->> <</if>> <</for>> /% Remove from facility array if assigned. %/ @@ -606,7 +606,7 @@ As the remote surgery's long recovery cycle completes, You simply take $him on the spot, using $him to your liking and shooting a load deep into $his receptive pussy. The implant rewards $him upon successful fertilization, so $his moans of pleasure as you pull out of $him inform you $he'll soon <<if $activeSlave.broodmother == 2>>be greatly swollen<<else>>grow heavy<</if>> with @@.lime;your brood.@@ <<set $activeSlave.pregSource = -1>> <<set WombImpregnate($activeSlave, 1, -1, 1)>> /* to ensure player paternity we need actual fetus here */ - <<= VaginalVCheck()>> + <<= VCheck.Vaginal()>> <</replace>> <</link>> </span> diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw index 4b1ca3461e8c41f71bf3a5b2a72b81a211dbbd30..de74c7640df002df5e7e66c044a2fbc8d37018b0 100644 --- a/src/uncategorized/walkPast.tw +++ b/src/uncategorized/walkPast.tw @@ -25,7 +25,7 @@ <<set _flag = 110, $partner = "relation">> <<elseif ($activeSlave.relationship > 0) && (random(1,100) > 70)>> <<set _flag = 120, $partner = "relationship">> -<<elseif ($activeSlave.rivalry !== 0) && ($activeSlave.amp !== 1) && (random(1,100) > 70)>> +<<elseif ($activeSlave.rivalry !== 0) && ($activeSlave.amp != 1) && (random(1,100) > 70)>> <<set _flag = 130, $partner = "rivalry">> <<else>> <<set _flag = random(1,100), $partner = "">> diff --git a/src/uncategorized/wardenessSelect.tw b/src/uncategorized/wardenessSelect.tw index 216a8802525e08fd840ec6b81458f83b4eb3b78c..c356d1dc21bcd86df31224541616ad6bc57a0a7c 100644 --- a/src/uncategorized/wardenessSelect.tw +++ b/src/uncategorized/wardenessSelect.tw @@ -1,7 +1,6 @@ :: Wardeness Select [nobr] <<set $nextButton = "Back", $nextLink = "Cellblock", $showEncyclopedia = 1, $encyclopedia = "Wardeness">> -<<showallAssignmentFilter>> <<if ($Wardeness != 0)>> <<set $Wardeness = getSlave($Wardeness.ID)>> <<setLocalPronouns $Wardeness>> @@ -13,9 +12,4 @@ <br><br>''Appoint a Wardeness from your devoted slaves:'' <br><br>[[None|Wardeness Workaround][$i = -1]] <br><br> -<<assignmentFilter>> -<span id="ComingGoing"> - <<showallAssignmentFilter>> - <<include "Slave Summary">> - <<resetAssignmentFilter>> -</span> \ No newline at end of file +<<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.cellblock)>> diff --git a/src/utility/descriptionWidgets.tw b/src/utility/descriptionWidgets.tw index 3ee5db23bfe16de308a761f4f8bb85f782b94041..2831b02664edf662b895df8d708bf9dd5ccd16fe 100644 --- a/src/utility/descriptionWidgets.tw +++ b/src/utility/descriptionWidgets.tw @@ -87,6 +87,8 @@ <<if $geneticMappingUpgrade >= 1>> <<if $activeSlave.geneticQuirks.albinism == 2>> $He is an albino. + <<elseif $activeSlave.geneticQuirks.albinism == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of the albinism gene. <</if>> <<if $activeSlave.geneticQuirks.dwarfism == 2 && $activeSlave.geneticQuirks.gigantism == 2>> $He has both dwarfism and gigantism. @@ -95,8 +97,16 @@ <<elseif $activeSlave.geneticQuirks.gigantism == 2>> $He has gigantism. <</if>> + <<if $activeSlave.geneticQuirks.dwarfism == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of the dwarfism gene. + <</if>> + <<if $activeSlave.geneticQuirks.gigantism == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of the gigantism gene. + <</if>> <<if $activeSlave.geneticQuirks.heterochromia == 2>> $He carries a gene that allows $his eyes to be two different colors. + <<elseif $activeSlave.geneticQuirks.heterochromia == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of the heterochromia gene. <</if>> <<if $activeSlave.geneticQuirks.pFace == 2>> $He has an exceedingly rare trait associated with perfect facial beauty. @@ -106,6 +116,12 @@ <<elseif $activeSlave.geneticQuirks.uFace == 2>> $He has an exceedingly rare trait associated with some of the ugliest mugs in history. <</if>> + <<if $activeSlave.geneticQuirks.pFace == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a combination of triats that can result in perfect facial beauty. + <</if>> + <<if $activeSlave.geneticQuirks.uFace == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a combination of triats that can result in raw ugliness. + <</if>> <<if $activeSlave.geneticQuirks.fertility == 2 && $activeSlave.geneticQuirks.hyperFertility == 2>> $He has a unique genetic condition resulting in inhumanly high <<if $activeSlave.ovaries == 1 || $activeSlave.mpreg == 1>> @@ -128,12 +144,20 @@ fertile. <</if>> <</if>> + <<if $activeSlave.geneticQuirks.hyperFertility == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic condition resulting in hyper-fertility. + <</if>> + <<if $activeSlave.geneticQuirks.fertility == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic condition resulting in increased fertility. + <</if>> <<if $activeSlave.geneticQuirks.superfetation == 2>> <<if isFertile($activeSlave)>> $He posses a rare genetic flaw that causes pregnancy to not block ovulation. $He is fully capable of getting pregnant while already pregnant. <<else>> $He posses a rare genetic flaw that causes pregnancy to not block ovulation; not that it matters when $he can't get pregnant. <</if>> + <<elseif $activeSlave.geneticQuirks.superfetation == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic flaw that causes superfetation. <</if>> <<if $activeSlave.geneticQuirks.macromastia == 2 && $activeSlave.geneticQuirks.gigantomastia == 2>> $He has an abnormal strain of gigantomastia and will experience constant excessive breast growth. @@ -152,6 +176,12 @@ macromastia and will experience excess development of breast tissue. <</if>> <</if>> + <<if $activeSlave.geneticQuirks.gigantomastia == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic flaw that causes gigantomastia. + <</if>> + <<if $activeSlave.geneticQuirks.macromastia == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic flaw that causes macromastia. + <</if>> <<if $activeSlave.geneticQuirks.wellHung == 2>> <<if $activeSlave.physicalAge <= 16 && $activeSlave.hormoneBalance < 100 && $activeSlave.dick > 0>> $He is likely to experience an inordinate amount of penile growth during $his physical development. @@ -160,9 +190,13 @@ <<else>> $He is predisposed to having an enormous dick, or would, if $he had one. <</if>> + <<elseif $activeSlave.geneticQuirks.wellHung == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a gene that causes enhanced penile development. <</if>> <<if $activeSlave.geneticQuirks.rearLipedema == 2>> $His body uncontrollably builds fat on $his rear resulting in constant growth. + <<elseif $activeSlave.geneticQuirks.rearLipedema == 1 && $geneticMappingUpgrade >= 2>> + $He is a carrier of a genetic flaw that causes lipedema. <</if>> <</if>> diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw index fe471aaa304fdc2cc2f734687d0c0a79eb7ee339..9139455db90769c8f61e106115c5c9fe2c271a7c 100644 --- a/src/utility/descriptionWidgetsFlesh.tw +++ b/src/utility/descriptionWidgetsFlesh.tw @@ -19606,7 +19606,7 @@ $His womb contains <<= num(_slaveWD.litters.length)>> separate pregnancies; $He has an unrecognizable tattoo scrunched around $his navel. <</if>> <</if>> - + <<if $activeSlave.birthsTat > 0>> <<if $activeSlave.birthsTat > 1>> $He has a series of $activeSlave.birthsTat baby-shaped tattoos adorning $his stomach; one for each successful pregnancy<<if $activeSlave.pregKnown == 1>> and a temporary one for $his current pregnancy<</if>>. diff --git a/src/utility/descriptionWidgetsPiercings.tw b/src/utility/descriptionWidgetsPiercings.tw index 477e8d9b59fdac1f5c4ece2ff925eb9f97671459..415a1673df997f2316096c3c1246f0e04c3c0a48 100644 --- a/src/utility/descriptionWidgetsPiercings.tw +++ b/src/utility/descriptionWidgetsPiercings.tw @@ -584,7 +584,7 @@ $He has a corset piercing, a ladder of steel rings running up each side of $his they're laced up with a light golden chain that begins and ends in other parts of $his glinting bonds. <<default>> - they're laced up with a ribbon, tightly enough to keep $his aware they're there. + they're laced up with a ribbon, tightly enough to keep $him aware they're there. <</switch>> <</if>> diff --git a/src/utility/miscWidgets.tw b/src/utility/miscWidgets.tw index 2feac3836f0110f94fda9bce0cc1af5022eb4810..3d905bb0f1092f882ec4fb7005bd36523f214497 100644 --- a/src/utility/miscWidgets.tw +++ b/src/utility/miscWidgets.tw @@ -3,8 +3,8 @@ /* TODO: Modularize. */ /% - Call as <<UpdateNextButton>> - Allows for dynamic updating of the next button in the storyCaption (left side-bar) for events that disable the button until user makes a selection +Call as <<UpdateNextButton>> +Allows for dynamic updating of the next button in the storyCaption (left side-bar) for events that disable the button until user makes a selection %/ <<widget "UpdateNextButton">> <<replace "#nextButton">> @@ -19,7 +19,7 @@ <</widget>> /% - Call as <<SlaveInteractImpreg>> +Call as <<SlaveInteractImpreg>> %/ <<widget "SlaveInteractImpreg">> <<replace #impreg>> @@ -105,7 +105,7 @@ <</widget>> /% - Call as <<SlaveInteractDrugs>> +Call as <<SlaveInteractDrugs>> %/ <<widget "SlaveInteractDrugs">> <<replace #drugs>> @@ -293,7 +293,7 @@ <</widget>> /% - Call as <<SlaveInteractFertility>> +Call as <<SlaveInteractFertility>> %/ <<widget "SlaveInteractFertility">> <<replace #fertilityblock>> @@ -364,7 +364,7 @@ <</replace>> <</widget>> /% - Call as <<SlaveInteractSexOption>> +Call as <<SlaveInteractSexOption>> %/ <<widget "SlaveInteractSexOption">> <<replace #sexoption>> @@ -403,7 +403,7 @@ <</replace>> <</widget>> /% - Call as <<SlaveInteractAnalSexOption>> +Call as <<SlaveInteractAnalSexOption>> %/ <<widget "SlaveInteractAnalSexOption">> <<replace #analsexoption>> @@ -415,7 +415,7 @@ <</replace>> <</widget>> /% - Call as <<SlaveInteractAnalGropeOption>> +Call as <<SlaveInteractAnalGropeOption>> %/ <<widget "SlaveInteractAnalGropeOption">> <<replace #analgropeoption>> @@ -425,7 +425,7 @@ <</replace>> <</widget>> /% - Call as <<SlaveInteractGropeOption>> +Call as <<SlaveInteractGropeOption>> %/ <<widget "SlaveInteractGropeOption">> <<replace #gropeoption>> @@ -437,7 +437,7 @@ <</replace>> <</widget>> /% - Call as <<SlaveInteractDickGropeOption>> +Call as <<SlaveInteractDickGropeOption>> %/ <<widget "SlaveInteractDickGropeOption">> <<replace #dickgropeoption>> @@ -454,8 +454,8 @@ <</replace>> <</widget>> /% - Call as <<agentLeadership>> - Must be within $arcologies[$i] for loop +Call as <<agentLeadership>> +Must be within $arcologies[$i] for loop %/ <<widget "agentLeadership">> <<set $agentBonus = 0>> @@ -533,9 +533,9 @@ <<widget "HisP">><<if _playerSlaveLisp>>_HisPLisp<<else>>_HisP<</if>><</widget>> /% - Call as <<EventFetish>> - $args[0]: Slave. - $args[1]: Fetish. +Call as <<EventFetish>> +$args[0]: Slave. +$args[1]: Fetish. %/ <<widget "EventFetish">> @@ -588,15 +588,15 @@ This experience <</widget>> /% - Call as <<SlaveSort [$slaves]>> - $args[0]: array to sort +Call as <<SlaveSort [$slaves]>> +$args[0]: array to sort %/ <<widget "SlaveSort">> <<run SlaveSort.slaves($args[0])>> <</widget>> /% - Call as <<SlaveIDSort [$slaveIDs]>> + Call as <<SlaveIDSort [slaveIDs]>> $args[0]: array to sort %/ <<widget "SlaveIDSort">> @@ -604,7 +604,7 @@ This experience <</widget>> /% - Call as <<SlaveIndexSort [$slaveIndxs]>> + Call as <<SlaveIndexSort [slaveIndxs]>> $args[0]: array to sort %/ <<widget "SlaveIndexSort">> @@ -731,9 +731,9 @@ This experience <</widget>> /* - OBSOLETE: Use setPregType()instead! - Call as <<SetPregType>> - $args[0]: Slave. +OBSOLETE: Use setPregType()instead! +Call as <<SetPregType>> +$args[0]: Slave. */ <<widget "SetPregType">> /* IMHO rework is possible. Can be more interesting to play, if this code will take in account more body conditions - age, fat, food, hormone levels, etc. */ <<if $args[0].broodmother < 1>> /* Broodmothers should be not processed here. Necessary now.*/