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/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/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 ac9952a0afb2abe8180f2640b8c77c2fafb91d9d..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 = {}; 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/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 8eadf1f6af32810b1ec3ef6e82d7c65fa7a37c58..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>> 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/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..ccfaa1b637b79c131b3eb6d40dc05afa0b250cdd 100644 --- a/src/facilities/masterSuite/masterSuiteFramework.js +++ b/src/facilities/masterSuite/masterSuiteFramework.js @@ -52,7 +52,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/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 0336df455a88cee7233ef9663b7ef8a8a249e178..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>> @@ -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/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/storyInit.tw b/src/init/storyInit.tw index 000471db9ae0d906bdc45cd370dd7f6b022feab9..68f9a95aca48aeeb11ab4adf117f1b4ae69fdd6f 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>> diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 5062946543e1038306b3abb3a9de40552a59ecee..90124832f8816dc0ae48e623f9b9535240829155 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -617,8 +617,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; @@ -646,9 +644,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/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index 12429b79a725562ab0683ae64576ec8ededb4686..d775a0b60c50724a81d59ec474d19108e9387f6b 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -1514,7 +1514,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; diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js index 9ae003b8c61a644ec7b889d5255730b364fafedb..e09b3b93bc8be739ace39a6678137c8dcc2d4444 100644 --- a/src/js/generateNewSlaveJS.js +++ b/src/js/generateNewSlaveJS.js @@ -1150,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/sexActsJS.js b/src/js/sexActsJS.js index ad3933cb8beb4d2bdfd7ee85d4bf19dbdc355a69..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/slaveListing.js b/src/js/slaveListing.js new file mode 100644 index 0000000000000000000000000000000000000000..0b97e20f5f8f393af42e132535223c155b4b1f90 --- /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} includeExperianced + * @returns {string} + */ + function _assignmentFilter(callback, includeExperianced) { + 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 (includeExperianced) { + links.push(`<span class="lime">${App.UI.passageLink('Experianced', passage, callback('experianced'))}</span>`); + }*/ + for (const f in filters) { + links.push(`<<link "${filters[f]}">>${callback(f)}<</link>>`); + } + if (includeExperianced) { + links.push(`<span class="lime"><<link "Experianced">>${callback('experianced')}<</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 'experianced': + 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/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index 80b68ee363befa96a1b860a7d0eafdc9f1782237..36078ce9ff62c2f5788b9c2f514e9ff48d054511 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -4979,7 +4979,7 @@ window.SlaveSummaryUncached = (function() { if (slave.useRulesAssistant === 0) { r += `<span class="lightgreen">RA-Exempt</span> `; } else if (V.abbreviateRulesets === 2 && (slave.currentRules !== undefined) && (slave.currentRules.length > 0)) { - r += `Rules: ${V.defaultRules.filter(x => ruleApplied(slave, x)).map(x => x.name).join(", ") }`; + r += `Rules: ${V.defaultRules.filter(x => ruleApplied(slave, x)).map(x => x.name).join(", ")}`; } } @@ -4996,603 +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 += `//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 += 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/utilJS.js b/src/js/utilJS.js index df867e13be04289ab90aa87ece3ab6ba22ddc6ad..3ef0515773ed268729ff3b0ec6104585737dac9f 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -1785,20 +1785,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>'; + } + + 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(); } + }); } - const tablinks = document.getElementsByClassName("tablinks"); - for (let i = 0; i < tablinks.length; i++) { - tablinks[i].className = tablinks[i].className.replace(" active", ""); + + 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]); }; /** @@ -1817,17 +1877,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, @@ -2103,7 +2205,7 @@ window.jsDef = function(input) { } }; -/** +/** * Return a career at random that would be suitable for the given slave. * Currently only considers their age * @param {App.Entity.SlaveState} slave @@ -2338,7 +2440,7 @@ window.skinToneLevel = function(skinTone) { * @param {number} value * @returns {string} */ - + window.changeSkinTone = function(skin, value) { if (!setup.naturalSkins.includes(skin)) { return skin; @@ -2424,3 +2526,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/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/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/fButt.tw b/src/npc/descriptions/fButt.tw index ea3792d5f63dfbf4a09a692fbe9644568e0058d0..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.@@ @@ -97,7 +97,7 @@ You call $him over so you can <<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/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 64b20ea07b170e30039a52bbb7b6abd7b6cc5f92..ec696c4513bf7767731b18021c5eabc9c37b546b 100644 --- a/src/npc/fAbuse.tw +++ b/src/npc/fAbuse.tw @@ -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/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/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/newChildIntro.tw b/src/pregmod/newChildIntro.tw index 3039033157793d31c3ad3cf6a8d5ae4e21b56337..1e73311d862ad6c6da0c46fbbcfe00cd860ab58e 100644 --- a/src/pregmod/newChildIntro.tw +++ b/src/pregmod/newChildIntro.tw @@ -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>> @@ -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>> 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/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 c37b3fbf0914fe9e7b5a3ff5b31a77fc9fd2be95..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/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 00cb66f48fe94069a7d6a29d1e0d135eec19c52c..e9526a8d4db17ebb360fa8779f279bda104a662f 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>> @@ -3680,6 +3683,9 @@ Done! <</for>> <</if>> +<<unset $showOneSlave>> +<<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/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 cf07c4936d49bdd297105f15c0143a1ad75cb6a2..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,11 +13802,11 @@ 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 $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">> @@ -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/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/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..f892a8721469061dd5cbb5e131595c1846bdb482 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, "BG 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/buildingWidgets.tw b/src/uncategorized/buildingWidgets.tw index 835204499bb6de8ef90e214a728b239884bae04c..207dc5f6a51229cb383078cc96494a73c1e3d377 100644 --- a/src/uncategorized/buildingWidgets.tw +++ b/src/uncategorized/buildingWidgets.tw @@ -239,9 +239,7 @@ Updates $AProsperityCap, $Sweatshops. <</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>> 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/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/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..98113a7d0fd141e97fec1f68db408e3c31c9fc64 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 Select")>> 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 4413b1664d6089b08b43fab50d3341f40687c4f2..243d63bb27355d0e16a1dfd67c136589695062db 100644 --- a/src/uncategorized/masterSuiteReport.tw +++ b/src/uncategorized/masterSuiteReport.tw @@ -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 ae5878acf0526b0e1f4e849e1e554bc14c0c517f..395467952034710b6ec366463620d5f84a264d5d 100644 --- a/src/uncategorized/newSlaveIntro.tw +++ b/src/uncategorized/newSlaveIntro.tw @@ -589,7 +589,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 10>> <<set $activeSlave.health -= 10>> <<if canDoAnal($activeSlave)>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</if>> <</link>> <br> @@ -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,7 +649,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> <<set $activeSlave.anus += 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -674,7 +674,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion += 4>> <<set $activeSlave.anus += 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <br> @@ -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,7 +700,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= -10>> <<set $activeSlave.health -= 10>> <<set $activeSlave.balls = 0>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -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,7 +734,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 10>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -757,7 +757,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 5>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -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,7 +781,7 @@ 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> @@ -797,7 +797,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.devotion -= 5>> <<set $activeSlave.trust -= 5>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -812,7 +812,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.trust += 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -827,7 +827,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <</replace>> <<set $activeSlave.trust += 10>> <<set $activeSlave.anus = 1>> - <<= AnalVCheck()>> + <<= VCheck.Anal()>> <</link>> <</if>> <br> @@ -1286,7 +1286,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' << <<set $activeSlave.trust -= 4>> <</if>> <</if>> - <<= SimpleVCheck()>> + <<= VCheck.Simple()>> <</replace>> <</link>> <</if>> @@ -1337,9 +1337,9 @@ 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. @@ -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 158df4aacd920797a785afc79c1992b888a5e488..1ef1c36ef9a395b49f98a670447f128bd7900386 100644 --- a/src/uncategorized/nextWeek.tw +++ b/src/uncategorized/nextWeek.tw @@ -96,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>> 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/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/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/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 5935dee8cd39cf78e18daa3a32315a269282883c..d207c15a33f3effd992fda9d2d999096acfdcaca 100644 --- a/src/uncategorized/reputation.tw +++ b/src/uncategorized/reputation.tw @@ -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/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index f5d5fe4205c93acc2f4feb343445bfd1cdebae4f..d0bea50f717f07043e8258f5535ac7df91c25e62 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -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>> 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/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/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/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 9a13664a59256d0abd1f621766c61bb47d6b1cdf..8d32d58f048ac6cb7b324b7525e02628b7ab47b1 100644 --- a/src/uncategorized/storyCaption.tw +++ b/src/uncategorized/storyCaption.tw @@ -2,470 +2,490 @@ <<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@@ - <</if>> - ($rep) - <</replace>> - <</link>> + <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>> -<</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 $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($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>> -<</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>> + <</link>> + <</if>> <</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 $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 $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>> - <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>> @@ -595,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>> - <<if $secHQ == 1>> - <br><span id="securityHQ"><<link "Manage Security">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "securityHQ">><</link>></span> @@.cyan;[Shift+S]@@ + <<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 $secBarracks == 1>> - <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ + <<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 $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>> @@ -708,7 +688,6 @@ </span> @@.cyan;[O]@@ <</if>> -<</if>> <<if _Pass === "Encyclopedia" || $showEncyclopedia === 0 || $encyclopedia === " " || $nextButton === "Continue">> <<else>> <br>//FCE:// [[$encyclopedia|Encyclopedia][$nextButton = "Back", $nextLink = _Pass]] 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/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>>