diff --git a/.jshintrc b/.jshintrc index 3be7392d7eddf06ac873c8b06f1de07b2e98e0a7..c5b16f7d864577aaa02028a102ad851e3ce0ec99 100644 --- a/.jshintrc +++ b/.jshintrc @@ -2,7 +2,7 @@ "browser": true, "devel": true, "jquery": true, - "esversion": 6, + "esversion": 8, "eqeqeq": true, "nocomma": true, "undef": false, diff --git a/Changelog.txt b/Changelog.txt index 82794654c1bda3ea19c7575326b1ef5984620a8b..433e09d8bd901b4fdaa676634982c3ce97a41bc4 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -6,7 +6,7 @@ Pregmod -overhauled smart and dumb vibrators -added polyhydramnios, galactorrhea, neoteny and progeria genetic quirks -added gumjob trendsetting - -added support for deep pregnancy editing to chead edit slave new + -added support for deep pregnancy editing to cheat edit slave new -RA can now be set to only apply once to a slave 10/04/2020 @@ -154,7 +154,7 @@ Pregmod -added a follow up event to "snatch and grab" -assistant code restructuring -corrected breast description desyncs - -continued code domming + -continued code DOMifiying -fixes 2/23/2020 @@ -964,7 +964,7 @@ Pregmod 31 -fixes - -tweaks to how geneModing is obtained via dispensary (prices not final) + -tweaks to how geneModding is obtained via dispensary (prices not final) 10/23/2018 @@ -1408,6 +1408,7 @@ Pregmod 9 -fixes + -added scene to kill a slave 8 -slightly adjusted pregnancy breast growth rates @@ -5676,7 +5677,7 @@ Pregmod -fixed >>101675 26 - -new breast shape preserving implant, comes from implant manufactury upgraded dispensary. See encyclopedia for more details + -new breast shape preserving implant, comes from implant manufactory upgraded dispensary. See encyclopedia for more details -couple new slave intros involving $PC.pregMood -bug fixes, hopefully including >>101672 @@ -5903,7 +5904,7 @@ Pregmod 90 -fixed bugs - -some prettying up by fcgudder + -some prettying up by FCGudder 89 -now with more schoolroomReport @@ -7018,7 +7019,7 @@ Pregmod -updated corp overhaul mod -tracked down missing accordion mod pulls and added them -fixed bugs and other issues - -added slave on slave wips to cheatmode + -added slave on slave WIPs to cheatmode 03/27/17 @@ -8081,7 +8082,7 @@ Pregmod 0.8.12.3 -fixed bugs and more typos - -made sure to cover slave graves in cement to prevent slaves that died in chldbirth from roaming your penthouse + -made sure to cover slave graves in cement to prevent slaves that died in childbirth from roaming your penthouse 0.8.12.2 -just bugfixes diff --git a/TODO.txt b/TODO.txt deleted file mode 100644 index 7d386b37331d4084180dc685b8be7644edfab955..0000000000000000000000000000000000000000 --- a/TODO.txt +++ /dev/null @@ -1,32 +0,0 @@ -Further Development: -- specialized slave schools -- fortifications -- more levels for militia edict (further militarize society) -- conquering other arcologies? - -Events: -- famous criminal escapes to the arcology, followed by another arcology's police force - -Bugs: -- sometimes troop counts breaks -- sometimes rebel numbers have fractionary parts - -Rules Assistant: -- find a way for the new intense drugs to fit in -- everything mentioned in https://gitgud.io/pregmodfan/fc-pregmod/issues/81 - -main.tw porting: -- slaveart -- createsimpletabs -- displaybuilding -- optionssortasappearsonmain -- resetassignmentfilter -- mainlinks -- arcology description -- office description -- slave summary -- use guard -- toychest -- walk past - -show exactly which organ is ready at the bottom of the main screen diff --git a/devTools/javaSanityCheck/ignoredVariables b/devTools/javaSanityCheck/ignoredVariables index 0e6cbe638bb2b6d26b98134a0fdb65ec6598b5ae..86455f56c5a0196893ec52dededc2057eb3e4350 100644 --- a/devTools/javaSanityCheck/ignoredVariables +++ b/devTools/javaSanityCheck/ignoredVariables @@ -4,7 +4,6 @@ AGrowth # MIN brokenSlaves -self toString toFixed LivingRule @@ -17,7 +16,6 @@ rejects expCheck interactionLink minDomActionDelay -Categorizer upgrade W;O;L FSGenderFundamentalistResearch;FSPaternalistResearch;FSDegradationistResearch;FSBodyPuristResearch;FSMaturityPreferentialistResearch;FSPastoralistResearch;FSPhysicalIdealistResearch;FSRepopulationFocusResearch @@ -31,7 +29,7 @@ op unborn facilityRemove boobsWombVolume;emptyDefaultRule;rule;removeImplant;changeImplant -assign;commit;mouth +assign;commit; Std htmlFor Possessive;PossessivePronoun @@ -42,11 +40,10 @@ missingLegs;missingArms; toy plural bimboMaleNames -RuleHasError canGrow;canImplant;implantError;growOrgan;removeOrgan totalChildTime toStringExt -northAmericaNationalities;europeNationalities;middleEastNationalities;africaNationalities;australiaNationalities +northAmericaNationalities;middleEastNationalities;africaNationalities;australiaNationalities surnamePoolSelector assignmentVisible attendingClasses;confinement;gloryHole;milking;publicService;sexualServitude;servitude @@ -57,21 +54,18 @@ modestClothes gangCriminalPool;militaryCriminalPool;whiteCollarCriminalPool;pettyCriminalPool multiple;selectedOptions; sluttyClothes -link; naturalNippleColors POSITIVE assistantPronouns;marketAssistantPronouns;ai bodyDesire Assistant;Extra1 ArcologyNamesCummunism;ArcologyNamesIncestFetishist -extreme royalNationalities hostageGiveIn r SlaveSummaryFiler sacrificeType cellName;BaseCell;cellPath;Section;Building;ground;code -location Upkeep;SexSlaveCount;GSP;Rep debugModeCustomFunction societyChanged @@ -98,7 +92,7 @@ hates loathes obsession # corporation -canFoundCorporation;startingPrice;maintenanceSlaves;room;slaveRevenue;divisionLedger;freeDevelopment;developmentCost;maintenanceCategory;corporate;roll;divisionCategories;divisionCategoriesList;getStored;setStored;endweek;hasDividend;hasPayout;perUnit;acquire;DivLegal;DivWhoreDev +canFoundCorporation;startingPrice;maintenanceSlaves;room;slaveRevenue;divisionLedger;freeDevelopment;developmentCost;maintenanceCategory;corporate;roll;divisionCategories;divisionCategoriesList;endweek;hasDividend;hasPayout;perUnit;acquire;DivLegal;DivWhoreDev # porn focusedViewershipFactor unfocusedViewershipFactor diff --git a/devTools/types/FC/facilities.d.ts b/devTools/types/FC/facilities.d.ts index 96d73b37034be288f39ccfc01e4c5502ae5d7ca2..e31140fcb24828f1ffa064abec3e206e52e19d57 100644 --- a/devTools/types/FC/facilities.d.ts +++ b/devTools/types/FC/facilities.d.ts @@ -1,5 +1,7 @@ declare namespace FC { namespace Facilities { + export type Animal = InstanceType<typeof App.Entity.Animal>; + interface Pit { /** Defaults to "the Pit" if not otherwise set. */ name: string; @@ -21,12 +23,5 @@ declare namespace FC { /** The virginities of the loser not allowed to be taken. */ virginities: "neither" | "vaginal" | "anal" | "all" } - - class Animal { - name: string; - species: string; - type: string; - articleAn: boolean; - } } } diff --git a/devTools/types/FC/gameState.d.ts b/devTools/types/FC/gameState.d.ts index 616d6ba916c65c30543bb6b9d669c240e9bd2e03..91f7907885aa0e1aafaecbac93dfc1f69f62fd82 100644 --- a/devTools/types/FC/gameState.d.ts +++ b/devTools/types/FC/gameState.d.ts @@ -89,8 +89,6 @@ declare namespace FC { /** @deprecated */ REInterslaveBeggingIDs: number[]; /** @deprecated */ - bedSlaves: SlaveState[]; - /** @deprecated */ eligibleSlaves: SlaveState[]; /** @deprecated */ RERepressedAnalVirginSubIDs: number[]; diff --git a/devTools/types/SugarCubeExtensions.d.ts b/devTools/types/SugarCubeExtensions.d.ts index 56e7b3adb81e5d7ad8f17ad1479d97bae03ff832..2eaf3d541c9df9fec0962bfdc873f2ede89d37c8 100644 --- a/devTools/types/SugarCubeExtensions.d.ts +++ b/devTools/types/SugarCubeExtensions.d.ts @@ -57,6 +57,8 @@ declare module "twine-sugarcube" { ArcologyNamesSlaveProfessionalism: string[]; ArcologyNamesPetiteAdmiration: string[]; ArcologyNamesStatuesqueGlorification: string[]; + ArcologyNamesCummunism: string[]; + ArcologyNamesIncestFetishist: string[]; badWords: string[]; badNames: string[]; diff --git a/devTools/types/assistant.d.ts b/devTools/types/assistant.d.ts index c04f630fb2a5bfe5cc947fd4a8f38ccf65cb9e97..c6093f3eab13d4f620c7d05659c665164e1f738f 100644 --- a/devTools/types/assistant.d.ts +++ b/devTools/types/assistant.d.ts @@ -1,6 +1,6 @@ interface assistant { appearance: "normal" | "monstergirl" | "shemale" | "amazon" | "businesswoman" | "goddess" | "hypergoddess" | "schoolgirl" | "loli" | "preggololi" | "fairy" | "pregnant fairy" | "slimegirl" | "angel" | "cherub" | "imp" | "witch" | "ERROR_1606_APPEARANCE_FILE_CORRUPT" | "incubus" | "succubus"; - fsAppearance: "paternalist" | "degradationist" | "supremacist" | "subjugationist" | "roman revivalist" | "aztec revivalist" | "egyptian revivalist" | "edo revivalist" | "arabian revivalist" | "chinese revivalist" | "chattel religionist" | "repopulation focus" | "eugenics" | "physical idealist" | "hedonistic decadence" | "gender radicalist" | "gender fundamentalist" | "asset expansionist" | "transformation fetishist" | "pastoralist" | "maturity preferentialist" | "youth preferentialist" | "slimness enthusiast" | "body purist" | "intellectual dependency" | "slave professionalism" | "petite admiration" | "statuesque glorification" | "neo imperialist"; + fsAppearance: "default" | "paternalist" | "degradationist" | "supremacist" | "subjugationist" | "roman revivalist" | "aztec revivalist" | "egyptian revivalist" | "edo revivalist" | "arabian revivalist" | "chinese revivalist" | "chattel religionist" | "repopulation focus" | "eugenics" | "physical idealist" | "hedonistic decadence" | "gender radicalist" | "gender fundamentalist" | "asset expansionist" | "transformation fetishist" | "pastoralist" | "maturity preferentialist" | "youth preferentialist" | "slimness enthusiast" | "body purist" | "intellectual dependency" | "slave professionalism" | "petite admiration" | "statuesque glorification" | "neo imperialist"; personality: 1 | 0; name: string; power: number; diff --git a/js/003-data/constants.js b/js/003-data/constants.js index e2f7fa48033bdac494569a8fd93b4126c1152238..758933ca182820c50a839a8e98c4d7b3cf676f1b 100644 --- a/js/003-data/constants.js +++ b/js/003-data/constants.js @@ -1,8 +1,17 @@ -/** @type {FC.Rules.LivingFreezed} */ +/** + * @type {FC.Rules.LivingFreezed} + * @enum {string} + */ globalThis.LivingRule = Object.freeze({LUXURIOUS: 'luxurious', NORMAL: 'normal', SPARE: 'spare'}); -/** @type {FC.Rules.RestFreezed} */ +/** + * @type {FC.Rules.RestFreezed} + * @enum {string} + */ globalThis.RestRule = Object.freeze({MANDATORY: 'mandatory', MAX: 'permissive', MID: 'restrictive', MIN: 'cruel', NONE: 'none'}); -/** @type {FC.AssignmentFreeze} */ +/** + * @type {FC.AssignmentFreeze} + * @enum {string} + */ globalThis.Job = Object.freeze({ // Penthouse Assignments REST: 'rest', @@ -57,6 +66,9 @@ globalThis.Job = Object.freeze({ TANK: '@lay in tank' }); +/** + * @enum {string} + */ globalThis.PersonalAttention = Object.freeze({ TRADE: 'trading', WAR: 'warfare', diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index b91b7c0be7f55b610331272697f8dea67fdc56a2..0a3cbb9e094c031bf45ea4aae64ee9a9640170ee 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -362,7 +362,6 @@ App.Data.resetOnNGPlus = { rivalID: 0, eliteAuctioned: 0, slavesSacrificedThisWeek: 0, - subSlaves: 0, HGtraining: "", mercenariesTitle: "", @@ -684,58 +683,17 @@ App.Data.resetOnNGPlus = { farmyardStables: 0, farmyardKennels: 0, farmyardCages: 0, - activeCanine: 0, - activeHooved: 0, - activeFeline: 0, - animalsBought: { - canines: 0, - felines: 0, - hooved: 0, - - beagles: 0, - bulldogs: 0, - frenchBulldogs: 0, - germanShepherds: 0, - goldenRetrievers: 0, - labradorRetrievers: 0, - poodles: 0, - rottweilers: 0, - siberianHuskies: 0, - yorkshireTerriers: 0, - - bulls: 0, - horses: 0, - pigs: 0, - - abbysinians: 0, - bengals: 0, - birmans: 0, - maineCoons: 0, - orientalShorthairs: 0, - persians: 0, - ragdolls: 0, - russianBlues: 0, - siameses: 0, - sphynxes: 0, - - dingos: 0, - foxes: 0, - jackals: 0, - wolves: 0, - - zebras: 0, - - cougars: 0, - jaguars: 0, - leopards: 0, - lions: 0, - lynx: 0, - pumas: 0, - tigers: 0, + active: { + /** @type {App.Entity.Animal} */ + canine: null, + /** @type {App.Entity.Animal} */ + hooved: null, + /** @type {App.Entity.Animal} */ + feline: null, }, - canines: [], + canine: [], hooved: [], - felines: [], + feline: [], farmyardName: "the Farmyard", HGSuite: 0, diff --git a/sanityCheck.sh b/sanityCheck.sh index fdd53819e2dd79df74ec277e6765ffcc57476e45..432ed76ab3ae7566992ed9361a46220bafe6db4a 100755 --- a/sanityCheck.sh +++ b/sanityCheck.sh @@ -40,7 +40,7 @@ $GREP -e "<<.*[(][^<>)]*[(][^<>)]*)\?[^<>)]*>>" -- "src/*" | myprint "MissingClo # Check for too many >>>. e.g.: <</if>>> $GREP "<<[^<>]*[<>]\?[^<>]*>>>" -- "src/*.tw" | myprint "TooManyAngleBrackets" # Check for wrong capitalization on 'activeslave' and other common typos -$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeOrgan\|activeLimbs\|activeUnits\|activeCanine\|activeHooved\|activeFeline\|activeLurcher\)" -- "src/*" | myprint "WrongCapitalization" +$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeOrgan\|activeLimbs\|activeUnits\|activeLurcher\|active.\)" -- "src/*" | myprint "WrongCapitalization" # Check for strange spaces e.g. $slaves[$i]. lips $GREP "\$slaves\[\$i\]\. " -- 'src/*' | myprint "MissingPropertyAfterSlaves" # Check using refreshmentType instead of refreshment diff --git a/src/Corporation/corporationDevelopments.tw b/src/Corporation/corporationDevelopments.tw deleted file mode 100644 index a664bf48726b515a19e1c114be50c8b0f7e3d254..0000000000000000000000000000000000000000 --- a/src/Corporation/corporationDevelopments.tw +++ /dev/null @@ -1,97 +0,0 @@ -:: Corporation Developments [nobr] - -/*Main Corporation Pass*/ - -<<if App.Corporate.cash < 0>> - <<set App.Corporate.cash = Math.trunc(App.Corporate.cash * 1.02)>> /*2% weekly interest rate on negative cash*/ -<</if>> - -<h1>Corporation Management</h1> -<h2>Operational Results</h2> -/*Divisions doing their thing*/ -<<set _weekLedger = App.Corporate.endWeek()>> -<<for _d range _weekLedger.divisionLedgers>> - <<set _div = _d.division>> - /* Reporting on number of slaves being processed or completed processing */ - <br><<= _div.name>>: The division <<= _div.message_endWeek_Slaves(_d) >> - <<if _d.market.originalBuy != null>> - <br> - <<if _d.market.buy == 0>> - It couldn't purchase <<= numberWithPlural(_d.market.originalBuy, "slave") >> to replenish its stock from the market because it couldn't afford to purchase price. - <<else>> - It needed to replenish its slave stock of <<= numberWithPlural(_d.market.originalBuy, "slave")>>, but couldn't afford to buy all of them. It bought <<= numberWithPlural(_d.market.buy, _div.nounSlaveFromMarket)>> for <<= cashFormatColor(_d.market.finalPurchase, true) >>. - <</if>> - <<elseif _d.market.buy > 0>> - <br>It replenished its slave stock and bought <<= numberWithPlural(_d.market.buy, _div.nounSlaveFromMarket) >> from the market for <<= cashFormatColor(_d.market.finalPurchase, true) >>. - <</if>> - <<if _d.transfer.total > 0>> - <<for _nextDivLedger range _d.transfer.divisions>> - <<set _nextDiv = _nextDivLedger.division>> - <<set _slavesToNext = _nextDivLedger.fill>> - - It moved <<= numberWithPlural(_slavesToNext, "slave")>> to the <<= _nextDiv.name>> Division. - <</for>> - <</if>> - <<if _div.toMarket>> - <<if _div.heldSlaves == 0>> - <<if _d.market.sell > 0>> - It immediately sold <<= numberWithPlural(_d.market.sell, _div.nounFinishedSlave) >> to the market and made <<= cashFormatColor(_d.market.finalSale)>>. - <</if>> - <<else>> - It holds @@.green;<<= numberWithPlural(_div.heldSlaves, _div.nounFinishedSlave)>>@@ at the end of the - <<if _d.market.sell > 0>> - week, but it ran out of storage space and had to sell @@.red;<<= numberWithPlural(_d.market.sell, "slave")>>@@ and made <<= cashFormatColor(_d.market.finalSale)>>. - <<else>> - week. - <</if>> - <</if>> - <</if>> - <<if _d.revenue.value > 0>> - It earned <<= cashFormatColor(_d.revenue.value)>> in revenue. - <</if>> -<</for>> - -/*Aggregate Corporation Results*/ -<<includeDOM App.Corporate.writeLedger(App.Corporate.ledger.current, $week)>> - -/*Division Expansion Tokens*/ -<<if _weekLedger.canExpandNow>> - <div class="majorText">Your corporation is ready to start an additional division!</div> -<</if>> - -/*Specializations tokens*/ -<<if _weekLedger.canSpecializeNow>> - <div class="majorText">Your corporation is ready to specialize its slaves further!</div> -<</if>> - -/*Calculating cash set aside for dividend*/ -<h2>Dividend</h2> -<div> -<<if App.Corporate.dividendRatio > 0>> - The corporation is currently reserving <<= Math.floor(App.Corporate.dividendRatio * 100)>>% of its profit to be paid out as dividends. -<<else>> - The corporation is currently not reserving a portion of its profit to be paid out as dividends. -<</if>> -<<if App.Corporate.payoutCash>> - It is putting aside unused cash reserves to be paid out as dividends. -<</if>> -</div> -<div> -<<if App.Corporate.dividend > 0>> - <<if _weekLedger.hasDividend>> - It reserved <<print cashFormatColor(_weekLedger.dividend)>> this week. - <</if>> - A total of <<print cashFormatColor(App.Corporate.dividend)>> has been put aside for its shareholders. -<</if>> -</div> -<<if _weekLedger.hasPayout>> - <div>This week the dividends were paid out, you received <<print cashFormatColor(_weekLedger.payout)>>.</div> -<</if>> - -/*Bankrupted the Corporation*/ -<<if App.Corporate.value < 0>> - <<run App.Corporation.Dissolve()>> - <br>@@.red;Your corporation went bankrupt.@@ -<</if>> -/*This needs to be at the very end of the financials*/ -<<run App.Corporate.ledger.swap()>> diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 05ac47febd792f9464cbeaf66a72c8d5f824867f..d44fb8d7f8317813b21a126c54a2bdf28afb5454 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -291,14 +291,16 @@ App.Update.globalVariables = function(node) { } // Farmyard - const animalsBought = ["abbysinians", "beagles", "bengals", "birmans", "bulldogs", "bulls", "canines", "cougars", "dingos", "felines", "foxes", "frenchBulldogs", "germanShepherds", "goldenRetrievers", "hooved", "horses", "jackals", "jaguars", "labradorRetrievers", "leopards", "lions", "lynx", "maineCoons", "orientalShorthairs", "persians", "pigs", "poodles", "pumas", "ragdolls", "rottweilers", "russianBlues", "siameses", "siberianHuskies", "sphynxes", "tigers", "wolves", "yorkshireTerriers", "zebras"]; - animalsBought.forEach(function(species) { V.animalsBought[species] = V.animalsBought[species] || 0; }); if (typeof V.farmyardUpgrades !== "object") { V.farmyardUpgrades = { pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0 }; } + if (!App.Data.animals || App.Data.animals.length === 0) { + App.Facilities.Farmyard.animals.init(); + } + // Pit if (typeof V.pit === "number") { V.pit = V.pit ? {} : null; diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index d1d1a16566635e5cc27699de10643a12cdac525c..b748bfaf42ff7d5a0bcfa3e231e73a69fbbdfb1d 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1102,7 +1102,7 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { slave.chem = Math.max(+slave.chem, 0) || 0; slave.addict = Math.max(+slave.addict, 0) || 0; slave.intelligence = Math.clamp(+slave.intelligence, -100, 100) || 0; - slave.intelligenceImplant = Math.clamp(+slave.intelligenceImplant, 0, 30) || 0; + slave.intelligenceImplant = Math.clamp(+slave.intelligenceImplant, -15, 30) || 0; slave.premature = Math.clamp(+slave.premature, 0, 1) || 0; slave.tankBaby = Math.clamp(+slave.tankBaby, 0, 2) || 0; slave.subTarget = Math.max(+slave.subTarget, 0) || 0; diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index a554299ecaeca119512ea7a5bab05e3e15b467cb..3e7816b63e7f4672e3b257439424817f19cc6edf 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -898,7 +898,7 @@ App.Desc.playerArcology = function(lastElement) { } else if (A.FSEgyptianRevivalistIncestPolicy === 1) { buffer.push(`Close relationships between citizens, slaves and siblings are common.`); } - if (A.FSSubjugationistLawME === 1) { + if (A.FSSubjugationistLawME === 1 && typeof A.FSSubjugationistRace === "string") { buffer.push(`${capFirstChar(A.FSSubjugationistRace)} subhumans form a majority of the slaves.`); } if (A.FSChattelReligionistLaw === 1) { diff --git a/src/endWeek/brothelReport.js b/src/endWeek/brothelReport.js index 084c0ccdeca8b4e2a95573e66926e87d266d0e12..cfe0b2bb3d81490e36b9889a4f2b48ef78173709 100644 --- a/src/endWeek/brothelReport.js +++ b/src/endWeek/brothelReport.js @@ -1,7 +1,6 @@ globalThis.brothelReport = function() { const el = document.createElement("p"); - let His, He, he, him, his, himself, wife; - let he2, him2, his2; + let His, He, he, him, his, himself, wife; let r; const brothelStats = document.createElement("span"); @@ -104,11 +103,10 @@ globalThis.brothelReport = function() { App.Events.addParagraph(el, r); for (const slave of slaves) { - ({ - he, him, his, himself, He, His, wife - } = getPronouns(slave).appendSuffix('2')); + const { + he2, him2, his2 + } = getPronouns(slave).appendSuffix('2'); r = []; - /* for the included passages */ if (S.Madam.rivalryTarget === slave.ID) { r.push(`${He} forces ${his} ${rivalryTerm(S.Madam)}, to service all the men in the brothel.`); @@ -152,7 +150,7 @@ globalThis.brothelReport = function() { r.push(`'prestigious'`); if (slave.lactation > 0) { r.push(`cow`); - } else if (((slave.boobs - slave.boobsImplant) > 6000)) { + } else if ((slave.boobs - slave.boobsImplant) > 6000) { r.push(`mass of titflesh`); } else { r.push(`slave`); diff --git a/src/endWeek/clinicReport.js b/src/endWeek/clinicReport.js index 10f77a51d58dd43a836064eea8ec584f93cfa052..b741896901b99e518f6093c35ed09ae52080da62 100644 --- a/src/endWeek/clinicReport.js +++ b/src/endWeek/clinicReport.js @@ -240,8 +240,6 @@ App.EndWeek.clinicReport = function() { if (S.Nurse) { const slave = S.Nurse; - V.i = V.slaveIndices[slave.ID]; - App.Utils.setLocalPronouns(slave); // need this for the includes /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const nurseEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -258,7 +256,6 @@ App.EndWeek.clinicReport = function() { let restedSlaves = 0; for (const slave of slaves) { - V.i = V.slaveIndices[slave.ID]; if (slave.devotion < 45) { slave.devotion += 4; } diff --git a/src/endWeek/economics/arcmgmt.js b/src/endWeek/economics/arcmgmt.js index 9132b05c0588d7f78b67972fa1c80b3edec71598..a9b96bbd2e89f5a7983fd9aa14ae1589191b6900 100644 --- a/src/endWeek/economics/arcmgmt.js +++ b/src/endWeek/economics/arcmgmt.js @@ -1,4 +1,4 @@ -App.EndWeek.arcmgmt = function() { +App.EndWeek.arcManagement = function() { const el = new DocumentFragment(); let r; let _enslaved; diff --git a/src/endWeek/economics/corporationDevelopments.js b/src/endWeek/economics/corporationDevelopments.js new file mode 100644 index 0000000000000000000000000000000000000000..032dc0d1072bbd60d2a4d530c55db75baedf2d1f --- /dev/null +++ b/src/endWeek/economics/corporationDevelopments.js @@ -0,0 +1,104 @@ +App.EndWeek.corporationDevelopments = function() { + const el = document.createElement("p"); + let r = []; + /* Main Corporation Pass*/ + + if (App.Corporate.cash < 0) { + App.Corporate.cash = Math.trunc(App.Corporate.cash * 1.02); /* 2% weekly interest rate on negative cash*/ + } + App.UI.DOM.appendNewElement("h1", el, "Corporation Management"); + App.UI.DOM.appendNewElement("h2", el, "Operational Results"); + /* Divisions doing their thing*/ + const _weekLedger = App.Corporate.endWeek(); + for (const i in _weekLedger.divisionLedgers) { + const _d = _weekLedger.divisionLedgers[i]; + const _div = _d.division; + const r = []; + /* Reporting on number of slaves being processed or completed processing */ + r.push(`${_div.name}: The division ${_div.message_endWeek_Slaves(_d)}`); + if (_d.market.originalBuy != null) { + if (_d.market.buy === 0) { + r.push(App.UI.DOM.makeElement("div", `It couldn't purchase ${numberWithPlural(_d.market.originalBuy, "slave")} to replenish its stock from the market because it couldn't afford to purchase price.`)); + } else { + r.push(App.UI.DOM.makeElement("div", `It needed to replenish its slave stock of ${numberWithPlural(_d.market.originalBuy, "slave")}, but couldn't afford to buy all of them. It bought ${numberWithPlural(_d.market.buy, _div.nounSlaveFromMarket)} for ${cashFormatColor(_d.market.finalPurchase, true)}.`)); + } + } else if (_d.market.buy > 0) { + r.push(App.UI.DOM.makeElement("div", `It replenished its slave stock and bought ${numberWithPlural(_d.market.buy, _div.nounSlaveFromMarket)} from the market for ${cashFormatColor(_d.market.finalPurchase, true)}.`)); + } + if (_d.transfer.total > 0) { + for (const i in _d.transfer.divisions) { + const _nextDivLedger = _d.transfer.divisions[i]; + const _nextDiv = _nextDivLedger.division; + const _slavesToNext = _nextDivLedger.fill; + r.push(`It moved ${numberWithPlural(_slavesToNext, "slave")} to the ${_nextDiv.name} Division.`); + } + } + if (_div.toMarket) { + if (_div.heldSlaves === 0) { + if (_d.market.sell > 0) { + r.push(`It immediately sold ${numberWithPlural(_d.market.sell, _div.nounFinishedSlave)} to the market and made ${cashFormatColor(_d.market.finalSale)}.`); + } + } else { + r.push(`It holds <span class="green">${numberWithPlural(_div.heldSlaves, _div.nounFinishedSlave)}</span> at the end of the`); + if (_d.market.sell > 0) { + r.push(`week, but it ran out of storage space and had to sell <span class="red">${numberWithPlural(_d.market.sell, "slave")}</span> and made ${cashFormatColor(_d.market.finalSale)}.`); + } else { + r.push(`week.`); + } + } + } + if (_d.revenue.value > 0) { + r.push(`It earned ${cashFormatColor(_d.revenue.value)} in revenue.`); + } + App.Events.addNode(el, r, "div"); + } + App.Events.addNode(el, r); + + /* Aggregate Corporation Results*/ + el.append(App.Corporate.writeLedger(App.Corporate.ledger.current, V.week)); + + /* Division Expansion Tokens*/ + if (_weekLedger.canExpandNow) { + App.UI.DOM.appendNewElement("div", el, "Your corporation is ready to start an additional division!", "majorText"); + } + + /* Specializations tokens*/ + if (_weekLedger.canSpecializeNow) { + App.UI.DOM.appendNewElement("div", el, "Your corporation is ready to specialize its slaves further!", "majorText"); + } + + /* Calculating cash set aside for dividend*/ + App.UI.DOM.appendNewElement("h2", el, "Dividend"); + r = []; + if (App.Corporate.dividendRatio > 0) { + r.push(`The corporation is currently reserving ${Math.floor(App.Corporate.dividendRatio * 100)}% of its profit to be paid out as dividends.`); + } else { + r.push(`The corporation is currently not reserving a portion of its profit to be paid out as dividends.`); + } + if (App.Corporate.payoutCash) { + r.push(`It is putting aside unused cash reserves to be paid out as dividends.`); + } + App.Events.addNode(el, r, "div"); + + if (App.Corporate.dividend > 0) { + r = []; + if (_weekLedger.hasDividend) { + r.push(`It reserved ${cashFormatColor(_weekLedger.dividend)} this week.`); + } + r.push(`A total of ${cashFormatColor(App.Corporate.dividend)} has been put aside for its shareholders.`); + App.Events.addNode(el, r, "div"); + } + + if (_weekLedger.hasPayout) { + App.UI.DOM.appendNewElement("div", el, `This week the dividends were paid out, you received ${cashFormatColor(_weekLedger.payout)}.`); + } + + /* Bankrupted the Corporation*/ + if (App.Corporate.value < 0) { + App.Corporation.Dissolve(); + App.UI.DOM.appendNewElement("div", el, "Your corporation went bankrupt.", "red"); + } + /* This needs to be at the very end of the financials*/ + App.Corporate.ledger.swap(); + return el; +}; diff --git a/src/endWeek/economics/fsDevelopments.js b/src/endWeek/economics/fsDevelopments.js new file mode 100644 index 0000000000000000000000000000000000000000..4651c79739bf7adfaec028e433a3d8f92caa66f6 --- /dev/null +++ b/src/endWeek/economics/fsDevelopments.js @@ -0,0 +1,1440 @@ +App.EndWeek.FSDevelopments = function() { + const el = document.createElement("div"); + let r = []; + if (V.useTabs === 0) { + App.UI.DOM.appendNewElement("h2", el, "Society"); + } + + const FSRepCreditsRep = [ + [7000, 11000, 15000], + [6000, 9000, 12000, 15000], + [6000, 9000, 12000, 14000, 16000], + [6000, 9000, 11000, 13000, 15000, 17000] + ]; + const FSRepDescriptors = ["solid", "high", "remarkable", "great", "excellent", "unparalleled"]; + const ordinalNames = ["second", "third", "fourth", "fifth", "sixth", "seventh", "eighth"]; + if (FutureSocieties.availCredits() > 0) { + r.push(`<span class="yellow">${V.arcologies[0].name}'s society is ready to begin accepting a new societal direction.</span>`); + } + + if (V.FSAnnounced === 1 && V.FSGotRepCredits < V.FSCreditCount && V.rep >= FSRepCreditsRep[V.FSCreditCount - 4][V.FSGotRepCredits - 1]) { + const descriptor = (V.FSGotRepCredits === 1) ? FSRepDescriptors[0] : FSRepDescriptors[Math.trunc(V.FSGotRepCredits / (V.FSCreditCount - 1) * FSRepDescriptors.length - 1)]; + let ordinalName = ordinalNames[V.FSGotRepCredits - 1]; + if (V.FSGotRepCredits === V.FSCreditCount - 1) { + ordinalName += " and final"; + } + r.push(`<span class="yellow">Your reputation is so ${descriptor} that ${V.arcologies[0].name}'s society is ready to begin accepting a ${ordinalName} societal direction.</span>`); + V.FSGotRepCredits += 1; + } + + /* Count adopted FS */ + let societies = FutureSocieties.activeCount(0); + + /* Spending, terrain, rep effects */ + let broadProgress = 0; + if (V.SF.Toggle && V.SF.Active >= 1 && V.SF.UC.Assign > 0) { + r.push(`Assigning a ${(V.SF.UC.Assign === 1) ? `small` : `large`} portion of ${V.SF.Lower} to undercover work helps to advance your cultural goals.`); + const value = (V.SF.UC.Assign === 1) ? V.SF.ArmySize * 0.05 : V.SF.ArmySize * 0.25; + broadProgress += value / 100; + App.Events.addNode(el, r, "div"); + r = []; + } + if (V.FSSpending > 1) { + r.push(`Your <span class="yellowgreen">societal spending</span> helps forward your goals for the arcology's future.`); + broadProgress += Math.trunc(V.FSSpending / (1000 - (500 * V.arcologies[0].FSEdoRevivalistLaw) - (250 * V.arcologies[0].FSArabianRevivalistLaw))); + } + if (V.FCTV.receiver === 3) { + r.push(`Your customized <span class="yellowgreen">FCTV programming</span> strongly influences your citizens, greatly helping define your arcology's culture.`); + if ((V.week - V.FCTV.weekEnabled) > 29) { + broadProgress += 3; + } else if ((V.week - V.FCTV.weekEnabled) > 19) { + broadProgress += 2; + } else if ((V.week - V.FCTV.weekEnabled) > 4) { + broadProgress += 1; + } + } else if (V.FCTV.receiver === 2) { + r.push(`Your customized <span class="yellowgreen">FCTV programming</span> influences your citizens, helping define your arcology's culture.`); + if ((V.week - V.FCTV.weekEnabled) > 34) { + broadProgress += 3; + } else if ((V.week - V.FCTV.weekEnabled) > 23) { + broadProgress += 2; + } else if ((V.week - V.FCTV.weekEnabled) > 8) { + broadProgress += 1; + } + } else if (V.FCTV.receiver === 1) { + r.push(`Your customized <span class="yellowgreen">FCTV programming</span> influences a small number of your citizens, slightly helping define your arcology's culture.`); + if ((V.week - V.FCTV.weekEnabled) > 39) { + broadProgress += 2; + } else if ((V.week - V.FCTV.weekEnabled) > 24) { + broadProgress += 1; + } + } + + const propagandaEffects = App.SecExp.propagandaEffects("social engineering"); + r.push(propagandaEffects.text); + broadProgress += propagandaEffects.effect; + + if (V.terrain === "urban") { + r.push(`The <span class="yellow">urban location</span> of the arcology naturally promotes cultural interchange, holding back ${V.arcologies[0].name}'s cultural independence.`); + broadProgress -= 3; + } else if (V.terrain === "rural") { + r.push(`The <span class="yellow">rural location</span> of the arcology naturally limits cultural interchange, allowing ${V.arcologies[0].name} to slowly develop its own culture.`); + broadProgress -= 2; + } else if (V.terrain === "marine") { + r.push(`The <span class="yellow">marine location</span> of the arcology strongly limits cultural interchange, allowing ${V.arcologies[0].name} to quickly develop its own culture.`); + broadProgress -= 1; + } else if (V.terrain === "ravine") { + r.push(`The <span class="yellow">near subterranean location</span> of the arcology almost eliminates cultural interchange, allowing ${V.arcologies[0].name} to independently develop its culture.`); + } else { + r.push(`The <span class="yellow">oceanic location</span> of the arcology almost eliminates cultural interchange, allowing ${V.arcologies[0].name} to independently develop its culture.`); + } + if (V.rep < 3000) { + r.push(`<span class="red">Your weak reputation</span> reflects badly on your social projects.`); + broadProgress -= 2; + } else if (V.rep < 6000) { + r.push(`<span class="red">Your mediocre reputation</span> engenders skepticism towards your social development.`); + broadProgress -= 1; + } else if (V.rep < 9000) { + r.push(`<span class="yellow">Your reputation</span> is neither weak enough or strong enough to affect social development.`); + } else if (V.rep < 12000) { + r.push(`<span class="green">Your strong reputation</span> helps support social development.`); + broadProgress += 1; + } else if (V.rep < 16000) { + r.push(`<span class="green">Your very strong reputation</span> increases acceptance of your social development.`); + broadProgress += 2; + } else { + r.push(`<span class="green">Your incredible reputation</span> encourages automatic acceptance of your social development.`); + broadProgress += 4; + } + if (V.FSCreditCount === 4) { + broadProgress += 1 - societies; + switch (societies) { + case 1: + r.push(`Maintaining a single societal goal allows <span class="green">very focused social engineering.</span>`); + break; + case 2: + r.push(`Maintaining two societal goals allows <span class="green">focused social engineering.</span>`); + break; + case 3: + r.push(`Maintaining three societal goals requires <span class="yellow">broad social engineering.</span>`); + break; + case 4: + r.push(`Maintaining four societal goals requires <span class="red">unfocused social engineering.</span>`); + break; + } + } else if (V.FSCreditCount === 6) { + broadProgress += 3 - societies; + switch (societies) { + case 1: + r.push(`Maintaining a single societal goal allows <span class="green">very focused social engineering.</span>`); + break; + case 2: + r.push(`Maintaining two societal goals allows <span class="green">focused social engineering.</span>`); + break; + case 3: + r.push(`Maintaining three societal goals allows <span class="yellow">barely focusable social engineering.</span>`); + break; + case 4: + r.push(`Maintaining four societal goals requires <span class="yellow">broad social engineering.</span>`); + break; + case 5: + r.push(`Maintaining five societal goals requires <span class="red">unfocused social engineering.</span>`); + break; + case 6: + r.push(`Maintaining six societal goals requires <span class="red">very unfocused social engineering.</span>`); + break; + } + } else if (V.FSCreditCount === 7) { + broadProgress += 3 - societies; + switch (societies) { + case 1: + r.push(`Maintaining a single societal goal allows <span class="green">very focused social engineering.</span>`); + break; + case 2: + r.push(`Maintaining two societal goals allows <span class="green">focused social engineering.</span>`); + break; + case 3: + r.push(`Maintaining three societal goals allows <span class="yellow">barely focusable social engineering.</span>`); + break; + case 4: + r.push(`Maintaining four societal goals requires <span class="yellow">broad social engineering.</span>`); + break; + case 5: + r.push(`Maintaining five societal goals requires <span class="red">unfocused social engineering.</span>`); + break; + case 6: + r.push(`Maintaining six societal goals requires <span class="red">very unfocused social engineering.</span>`); + break; + case 7: + r.push(`Maintaining seven societal goals requires <span class="red">extremely unfocused social engineering.</span>`); + break; + } + } else { + broadProgress += 2 - societies; + switch (societies) { + case 1: + r.push(`Maintaining a single societal goal allows <span class="green">very focused social engineering.</span>`); + break; + case 2: + r.push(`Maintaining two societal goals allows <span class="green">focused social engineering.</span>`); + break; + case 3: + r.push(`Maintaining three societal goals requires <span class="yellow">broad social engineering.</span>`); + break; + case 4: + r.push(`Maintaining four societal goals requires <span class="red">unfocused social engineering.</span>`); + break; + case 5: + r.push(`Maintaining five societal goals requires <span class="red">very unfocused social engineering.</span>`); + break; + } + } + /* closes FS count changes */ + if (broadProgress !== 0) { + FutureSocieties.applyBroadProgress(0, broadProgress); + } + + if (V.secExpEnabled > 0) { + if (V.SecExp.edicts.slaveWatch === 1) { + r.push(`The Slave Mistreatment Watch helps many slaves, easing your citizens into the paternalist ideals it represents.`); + FutureSocieties.Change("Paternalist", 2); + } + + if (V.SecExp.edicts.defense.noSubhumansInArmy === 1) { + r.push(`Your army is free of subhumans, further cementing their lower status in the eyes of your citizens.`); + FutureSocieties.Change("Subjugationist", 2); + } + + if (V.SecExp.edicts.defense.pregExemption === 1) { + r.push(`Pregnant citizens are allowed and encouraged to avoid military service, making their value evident to all citizens.`); + FutureSocieties.Change("RepopulationFocus", 2); + } + + if (V.SecExp.edicts.defense.eliteOfficers === 1) { + r.push(`Purity in leadership is fundamental in your army, helping eugenics ideals spread in the populace.`); + FutureSocieties.Change("Eugenics", 2); + } + + if (V.SecExp.edicts.defense.liveTargets === 1) { + r.push(`Disobedient slaves are used in shooting ranges and military drills as live targets, furthering degradationist ideals.`); + FutureSocieties.Change("Degradationist", 2); + } + } + + /* Promenade effects */ + const cells = V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && !["Brothel", "Club", "Shops"].includes(cell.type)); + for (const cell of cells) { + r.push(`The ${cell.type} establishments on the Promenade help develop society.`); + const changedFS = cell.type.replace(/[- ]/g, ""); + FutureSocieties.Change(changedFS, 4); + } + + /* PA FS bonuses */ + if (V.policies.publicPA === 1 && V.assistant.appearance !== "normal") { + let seed = 0; + if (V.arcologies[0].FSSupremacist !== "unset") { + if (["amazon", "monstergirl", "succubus"].includes(V.assistant.appearance)) { + V.arcologies[0].FSSupremacist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "supremacist") { + V.arcologies[0].FSSupremacist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSSubjugationist !== "unset") { + if (["amazon", "businesswoman", "imp"].includes(V.assistant.appearance)) { + V.arcologies[0].FSSubjugationist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "subjugationist") { + V.arcologies[0].FSSubjugationist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (["incubus", "monstergirl", "shemale", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSGenderRadicalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "gender radicalist") { + V.arcologies[0].FSGenderRadicalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (["goddess", "hypergoddess", "preggololi", "pregnant fairy", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSRepopulationFocus += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "repopulation focus") { + V.arcologies[0].FSRepopulationFocus += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSRestart !== "unset") { + if (["angel", "businesswoman", "goddess", "incubus", "loli", "schoolgirl", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSRestart += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "eugenics") { + V.arcologies[0].FSRestart += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (["angel", "cherub", "fairy", "goddess", "hypergoddess", "loli", "preggololi", "pregnant fairy", "schoolgirl", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSGenderFundamentalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "gender fundamentalist") { + V.arcologies[0].FSGenderFundamentalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSPaternalist !== "unset") { + if (["angel", "cherub", "fairy", "goddess", "hypergoddess", "loli", "preggololi", "pregnant fairy", "schoolgirl"].includes(V.assistant.appearance)) { + V.arcologies[0].FSPaternalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "paternalist") { + V.arcologies[0].FSPaternalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSDegradationist !== "unset") { + if (["businesswoman", "imp", "incubus", "monstergirl", "preggololi", "succubus"].includes(V.assistant.appearance)) { + V.arcologies[0].FSDegradationist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "degradationist") { + V.arcologies[0].FSDegradationist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (["shemale", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSIntellectualDependency += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "intellectual dependency") { + V.arcologies[0].FSIntellectualDependency += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (["angel", "businesswoman", "incubus", "goddess", "schoolgirl", "succubus"].includes(V.assistant.appearance)) { + V.arcologies[0].FSSlaveProfessionalism += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "slave professionalism") { + V.arcologies[0].FSSlaveProfessionalism += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSBodyPurist !== "unset") { + if (["amazon", "angel", "fairy", "goddess", "incubus", "loli", "pregnant fairy", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSBodyPurist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "body purist") { + V.arcologies[0].FSBodyPurist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (["businesswoman", "ERROR_1606_APPEARANCE_FILE_CORRUPT", "incubus", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSTransformationFetishist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "transformation fetishist") { + V.arcologies[0].FSTransformationFetishist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (["angel", "businesswoman", "goddess", "incubus", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSMaturityPreferentialist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "maturity preferentialist") { + V.arcologies[0].FSMaturityPreferentialist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (["angel", "cherub", "imp", "loli", "preggololi", "schoolgirl", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSYouthPreferentialist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "youth preferentialist") { + V.arcologies[0].FSYouthPreferentialist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + if (["cherub", "fairy", "imp", "incubus", "loli", "preggololi", "pregnant fairy", "schoolgirl", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSPetiteAdmiration += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "petite admiration") { + V.arcologies[0].FSPetiteAdmiration += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (["amazon", "goddess", "incubus", "succubus", "witch"].includes(V.assistant.appearance)) { + V.arcologies[0].FSStatuesqueGlorification += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "statuesque glorification") { + V.arcologies[0].FSStatuesqueGlorification += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (["cherub", "imp", "loli", "schoolgirl", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSSlimnessEnthusiast += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "slimness enthusiast") { + V.arcologies[0].FSSlimnessEnthusiast += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSAssetExpansionist !== "unset") { + if (["businesswoman", "hypergoddess", "incubus", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSAssetExpansionist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "asset expansionist") { + V.arcologies[0].FSAssetExpansionist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSPastoralist !== "unset") { + if (["goddess", "hypergoddess", "incubus", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSPastoralist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "pastoralist") { + V.arcologies[0].FSPastoralist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (["amazon", "incubus", "shemale", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSPhysicalIdealist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "physical idealist") { + V.arcologies[0].FSPhysicalIdealist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (["goddess", "hypergoddess", "imp", "incubus", "preggololi", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSHedonisticDecadence += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "hedonistic decadence") { + V.arcologies[0].FSHedonisticDecadence += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (["angel", "cherub", "goddess", "imp", "incubus", "monstergirl", "succubus", "witch"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSChattelReligionist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "chattel religionist") { + V.arcologies[0].FSChattelReligionist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (["amazon", "businesswoman", "incubus", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSRomanRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "roman revivalist") { + V.arcologies[0].FSRomanRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (["amazon", "businesswoman", "incubus", "shemale", "angel"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSNeoImperialist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "neo imperialist") { + V.arcologies[0].FSNeoImperialist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (["amazon", "businesswoman", "incubus", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSAztecRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "aztec revivalist") { + V.arcologies[0].FSAztecRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (["goddess", "incubus", "monstergirl", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSEgyptianRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "egyptian revivalist") { + V.arcologies[0].FSEgyptianRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (["amazon", "incubus", "kitsune", "loli", "monstergirl", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSEdoRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "edo revivalist") { + V.arcologies[0].FSEdoRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (["businesswoman", "incubus", "schoolgirl", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSArabianRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "arabian revivalist") { + V.arcologies[0].FSArabianRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (["incubus", "monstergirl", "schoolgirl", "succubus"].includes(V.assistant.fsAppearance)) { + V.arcologies[0].FSChineseRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 1; + } else if (V.assistant.fsAppearance === "chinese revivalist") { + V.arcologies[0].FSChineseRevivalist += 0.1 * V.FSSingleSlaveRep; + seed = 2; + } + } + + App.Events.addParagraph(el, r); + r = []; + const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A'); + r.push(`With ${hisA} ${V.assistant.appearance} appearance, ${V.assistant.name}'s public visibility meshes`); + if (seed === 2) { + r.push(`very well`); + } else if (seed === 1) { + r.push(`well`); + } + r.push(`with society.`); + } + + /* Progress overflow into influence */ + FutureSocieties.overflowToInfluence(0); + + /* warm up policy influence */ + if (V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1 && V.arcologies[0].FSEgyptianRevivalistInterest < 26) { + V.arcologies[0].FSEgyptianRevivalistInterest += V.arcologies[0].FSEgyptianRevivalistIncestPolicy; + } else if (V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 0 && V.arcologies[0].FSEgyptianRevivalistInterest > 0) { + V.arcologies[0].FSEgyptianRevivalistInterest--; + } + + if ((V.arcologies[0].FSRepopulationFocusPregPolicy === 1 || V.arcologies[0].FSRepopulationFocusMilfPolicy === 1) && V.arcologies[0].FSRepopulationFocusInterest < 26) { + V.arcologies[0].FSRepopulationFocusInterest += V.arcologies[0].FSRepopulationFocusPregPolicy + V.arcologies[0].FSRepopulationFocusMilfPolicy; + if (V.arcologies[0].FSEugenicsInterest > 0) { + V.arcologies[0].FSEugenicsInterest--; + } + } else if (V.arcologies[0].FSRepopulationFocusPregPolicy === 0 && V.arcologies[0].FSRepopulationFocusMilfPolicy === 0 && V.arcologies[0].FSRepopulationFocusInterest > 0) { + V.arcologies[0].FSRepopulationFocusInterest--; + } + + if ([V.arcologies[0].FSSupremacistSMR, V.arcologies[0].FSSubjugationistSMR, V.arcologies[0].FSGenderFundamentalistSMR, V.arcologies[0].FSPaternalistSMR, V.arcologies[0].FSDegradationistSMR, V.arcologies[0].FSBodyPuristSMR, V.arcologies[0].FSTransformationFetishistSMR, V.arcologies[0].FSYouthPreferentialistSMR, V.arcologies[0].FSMaturityPreferentialistSMR, V.arcologies[0].FSSlimnessEnthusiastSMR, V.arcologies[0].FSAssetExpansionistSMR, V.arcologies[0].FSPastoralistSMR, V.arcologies[0].FSPhysicalIdealistSMR, V.arcologies[0].FSChattelReligionistSMR, V.arcologies[0].FSRomanRevivalistSMR, V.arcologies[0].FSAztecRevivalistSMR, V.arcologies[0].FSEgyptianRevivalistSMR, V.arcologies[0].FSEdoRevivalistSMR, V.arcologies[0].FSRepopulationFocusSMR, V.arcologies[0].FSRestartSMR, V.arcologies[0].FSHedonisticDecadenceSMR, V.arcologies[0].FSIntellectualDependencySMR, V.arcologies[0].FSSlaveProfessionalismSMR, V.arcologies[0].FSPetiteAdmirationSMR, V.arcologies[0].FSStatuesqueGlorificationSMR, V.arcologies[0].FSArabianRevivalistSMR, V.arcologies[0].FSChineseRevivalistSMR, V.arcologies[0].FSNeoImperialistSMR, V.arcologies[0].FSGenderRadicalistSMR].some((SMR) => SMR > 0)) { // RadicalistSMR was unused since vanilla, but maybe some day.... + r.push(`The slave market regulations help ensure the arcology's slaves fit within its society.`); + } + + if (V.arcologies[0].FSSupremacist !== "unset") { + if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in ${V.arcologies[0].FSSupremacistRace} superiority.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with ${V.arcologies[0].FSSupremacistRace} superiority.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to ${V.arcologies[0].FSSupremacistRace} superiority.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of ${V.arcologies[0].FSSupremacistRace} superiority.`); + } + if (V.arcologies[0].FSSupremacist < 0) { + FutureSocieties.remove("FSSupremacist"); + if (V.assistant.fsAppearance === "supremacist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSSupremacist > V.arcologies[0].FSSupremacistDecoration) { + V.arcologies[0].FSSupremacist = V.arcologies[0].FSSupremacistDecoration; + } + if (V.arcologies[0].FSSupremacistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSSupremacist === V.arcologies[0].FSSupremacistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSSupremacistSMR === 1) { + V.arcologies[0].FSSupremacist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSSubjugationist !== "unset") { + if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in the inferiority of ${V.arcologies[0].FSSubjugationistRace} people.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the inferiority of ${V.arcologies[0].FSSubjugationistRace} people.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the inferiority of ${V.arcologies[0].FSSubjugationistRace} people.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the inferiority of ${V.arcologies[0].FSSubjugationistRace} people.`); + } + if (V.arcologies[0].FSSubjugationist < 0) { + FutureSocieties.remove("FSSubjugationist"); + if (V.assistant.fsAppearance === "subjugationist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSSubjugationist > V.arcologies[0].FSSubjugationistDecoration) { + V.arcologies[0].FSSubjugationist = V.arcologies[0].FSSubjugationistDecoration; + } + if (V.arcologies[0].FSSubjugationistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSSubjugationist === V.arcologies[0].FSSubjugationistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSSubjugationistSMR === 1) { + V.arcologies[0].FSSubjugationist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that all women should be pregnant.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly that all women should be pregnant.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that all women should be pregnant.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that all women should be pregnant.`); + } + if (V.arcologies[0].FSRepopulationFocus < 0) { + FutureSocieties.remove("FSRepopulationFocus"); + if (V.assistant.fsAppearance === "repopulation focus") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSRepopulationFocus > V.arcologies[0].FSRepopulationFocusDecoration) { + V.arcologies[0].FSRepopulationFocus = V.arcologies[0].FSRepopulationFocusDecoration; + } + if (V.arcologies[0].FSRepopulationFocusDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSRepopulationFocus === V.arcologies[0].FSRepopulationFocusDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSRepopulationFocusSMR === 1) { + V.arcologies[0].FSRepopulationFocus += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSRestart !== "unset") { + if (V.arcologies[0].FSRestart >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that only the elite should reproduce.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRestart >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly that only the elite should reproduce.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRestart >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea only the elite should reproduce.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that only the elite should reproduce.`); + } + if (V.arcologies[0].FSRestart < 0 && V.arcologies[0].FSRestartDecoration !== 100) { + FutureSocieties.remove("FSRestart"); + if (V.assistant.fsAppearance === "eugenics") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSRestart > V.arcologies[0].FSRestartDecoration) { + V.arcologies[0].FSRestart = V.arcologies[0].FSRestartDecoration; + } + if (V.arcologies[0].FSRestartDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSRestart === V.arcologies[0].FSRestartDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSRestartSMR === 1) { + V.arcologies[0].FSRestart += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in the need to redefine gender around power.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the need to redefine gender around power.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the need to redefine gender around power.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the need to redefine gender around power.`); + } + if (V.arcologies[0].FSGenderRadicalist < 0) { + FutureSocieties.remove("FSGenderRadicalist"); + if (V.assistant.fsAppearance === "gender radicalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSGenderRadicalist > V.arcologies[0].FSGenderRadicalistDecoration) { + V.arcologies[0].FSGenderRadicalist = V.arcologies[0].FSGenderRadicalistDecoration; + } + if (V.arcologies[0].FSGenderRadicalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSGenderRadicalist === V.arcologies[0].FSGenderRadicalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } + // RadicalistSMR was unused since vanilla, but maybe some day.... + /* + else if (V.arcologies[0].FSGenderRadicalistSMR === 1) { + V.arcologies[0].FSGenderRadicalist += 0.1 * V.FSSingleSlaveRep; + } + */ + } + } + + if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in the need to preserve traditional gender roles.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the need to preserve traditional gender roles.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the need to preserve traditional gender roles.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the need to preserve traditional gender roles.`); + } + if (V.arcologies[0].FSGenderFundamentalist < 0) { + FutureSocieties.remove("FSGenderFundamentalist"); + if (V.assistant.fsAppearance === "gender fundamentalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSGenderFundamentalist > V.arcologies[0].FSGenderFundamentalistDecoration) { + V.arcologies[0].FSGenderFundamentalist = V.arcologies[0].FSGenderFundamentalistDecoration; + } + if (V.arcologies[0].FSGenderFundamentalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSGenderFundamentalist === V.arcologies[0].FSGenderFundamentalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSGenderFundamentalistSMR === 1) { + V.arcologies[0].FSGenderFundamentalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSPaternalist !== "unset") { + if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in the vision of a well-bred race of slaves.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the vision of a well-bred race of slaves.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the vision of a well-bred race of slaves.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the vision of a well-bred race of slaves.`); + } + if (V.arcologies[0].FSPaternalist < 0) { + FutureSocieties.remove("FSPaternalist"); + if (V.assistant.fsAppearance === "paternalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSPaternalist > V.arcologies[0].FSPaternalistDecoration) { + V.arcologies[0].FSPaternalist = V.arcologies[0].FSPaternalistDecoration; + } + if (V.arcologies[0].FSPaternalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSPaternalist === V.arcologies[0].FSPaternalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSPaternalistSMR === 1) { + V.arcologies[0].FSPaternalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSDegradationist !== "unset") { + if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that slaves are not human and should be thoroughly degraded.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that slaves are not human and should be thoroughly degraded.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the proposition that slaves are not human and should be thoroughly degraded.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that slaves are not human and should be thoroughly degraded.`); + } + if (V.arcologies[0].FSDegradationist < 0) { + FutureSocieties.remove("FSDegradationist"); + if (V.assistant.fsAppearance === "degradationist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSDegradationist > V.arcologies[0].FSDegradationistDecoration) { + V.arcologies[0].FSDegradationist = V.arcologies[0].FSDegradationistDecoration; + } + if (V.arcologies[0].FSDegradationistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSDegradationist === V.arcologies[0].FSDegradationistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSDegradationistSMR === 1) { + V.arcologies[0].FSDegradationist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (V.arcologies[0].FSIntellectualDependency >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that all slaves should be mentally dependant on their owner.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSIntellectualDependency >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly that all slaves should be bimbos.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSIntellectualDependency >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that slaves should be dumb and horny.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that all slaves should be morons.`); + } + if (V.arcologies[0].FSIntellectualDependency < 0) { + FutureSocieties.remove("FSIntellectualDependency"); + if (V.assistant.fsAppearance === "intellectual dependency") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSIntellectualDependency > V.arcologies[0].FSIntellectualDependencyDecoration) { + V.arcologies[0].FSIntellectualDependency = V.arcologies[0].FSIntellectualDependencyDecoration; + } + if (V.arcologies[0].FSIntellectualDependencyDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSIntellectualDependency === V.arcologies[0].FSIntellectualDependencyDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSIntellectualDependencySMR === 1) { + V.arcologies[0].FSIntellectualDependency += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (V.arcologies[0].FSSlaveProfessionalism >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that slaves should be masters of the sexual arts.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSlaveProfessionalism >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with slavery as a profession.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSSlaveProfessionalism >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the notion of slavery as a profession.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that slaves should be highly intelligent.`); + } + if (V.arcologies[0].FSSlaveProfessionalism < 0) { + FutureSocieties.remove("FSSlaveProfessionalism"); + if (V.assistant.fsAppearance === "slave professionalism") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSSlaveProfessionalism > V.arcologies[0].FSSlaveProfessionalismDecoration) { + V.arcologies[0].FSSlaveProfessionalism = V.arcologies[0].FSSlaveProfessionalismDecoration; + } + if (V.arcologies[0].FSSlaveProfessionalismDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSSlaveProfessionalism === V.arcologies[0].FSSlaveProfessionalismDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSSlaveProfessionalismSMR === 1) { + V.arcologies[0].FSSlaveProfessionalism += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSBodyPurist !== "unset") { + if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in the unattractive nature of implants.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} strongly believes in the unattractive nature of implants.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is beginning to believe in the unattractive nature of implants.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the unattractive nature of implants.`); + } + if (V.arcologies[0].FSBodyPurist < 0) { + FutureSocieties.remove("FSBodyPurist"); + if (V.assistant.fsAppearance === "body purist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSBodyPurist > V.arcologies[0].FSBodyPuristDecoration) { + V.arcologies[0].FSBodyPurist = V.arcologies[0].FSBodyPuristDecoration; + } + if (V.arcologies[0].FSBodyPuristDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSBodyPurist === V.arcologies[0].FSBodyPuristDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSBodyPuristSMR === 1) { + V.arcologies[0].FSBodyPurist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (V.arcologies[0].FSTransformationFetishist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} passionately fetishizes implants.`); + } else if (V.arcologies[0].FSTransformationFetishist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} strongly fetishizes implants.`); + } else if (V.arcologies[0].FSTransformationFetishist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is beginning to fetishize implants.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced about the attractiveness of implants.`); + } + if (V.arcologies[0].FSTransformationFetishist < 0) { + FutureSocieties.remove("FSTransformationFetishist"); + if (V.assistant.fsAppearance === "transformation fetishist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSTransformationFetishist > V.arcologies[0].FSTransformationFetishistDecoration) { + V.arcologies[0].FSTransformationFetishist = V.arcologies[0].FSTransformationFetishistDecoration; + } + if (V.arcologies[0].FSTransformationFetishistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSTransformationFetishist === V.arcologies[0].FSTransformationFetishistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSTransformationFetishistSMR === 1) { + V.arcologies[0].FSTransformationFetishist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} is passionately enthusiastic about older ladies.`); + } else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} is enthusiastic about older ladies.`); + } else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is beginning to be enthusiastic about older ladies.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced about your preference for older ladies.`); + } + if (V.arcologies[0].FSMaturityPreferentialist < 0) { + FutureSocieties.remove("FSMaturityPreferentialist"); + if (V.assistant.fsAppearance === "maturity preferentialist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSMaturityPreferentialist > V.arcologies[0].FSMaturityPreferentialistDecoration) { + V.arcologies[0].FSMaturityPreferentialist = V.arcologies[0].FSMaturityPreferentialistDecoration; + } + if (V.arcologies[0].FSMaturityPreferentialistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSMaturityPreferentialist === V.arcologies[0].FSMaturityPreferentialistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSMaturityPreferentialistSMR === 1) { + V.arcologies[0].FSMaturityPreferentialist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} is passionately enthusiastic about young women.`); + } else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} is enthusiastic about young women.`); + } else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is beginning to be enthusiastic about young women.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced about your preference for young women.`); + } + if (V.arcologies[0].FSYouthPreferentialist < 0) { + FutureSocieties.remove("FSYouthPreferentialist"); + if (V.assistant.fsAppearance === "youth preferentialist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSYouthPreferentialist > V.arcologies[0].FSYouthPreferentialistDecoration) { + V.arcologies[0].FSYouthPreferentialist = V.arcologies[0].FSYouthPreferentialistDecoration; + } + if (V.arcologies[0].FSYouthPreferentialistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSYouthPreferentialist === V.arcologies[0].FSYouthPreferentialistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSYouthPreferentialistSMR === 1) { + V.arcologies[0].FSYouthPreferentialist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + if (V.arcologies[0].FSPetiteAdmiration >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} is passionately enthusiastic for short slaves.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPetiteAdmiration >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} is very enthusiastic for short slaves.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPetiteAdmiration >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is enthusiastic for short slaves.`); + } else { + r.push(`${V.arcologies[0].name} is beginning to be enthusiastic for short slaves.`); + } + if (V.arcologies[0].FSPetiteAdmiration < 0) { + FutureSocieties.remove("FSPetiteAdmiration"); + if (V.assistant.fsAppearance === "petite admiration") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSPetiteAdmiration > V.arcologies[0].FSPetiteAdmirationDecoration) { + V.arcologies[0].FSPetiteAdmiration = V.arcologies[0].FSPetiteAdmirationDecoration; + } + if (V.arcologies[0].FSPetiteAdmirationDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSPetiteAdmiration === V.arcologies[0].FSPetiteAdmirationDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSPetiteAdmirationSMR === 1) { + V.arcologies[0].FSPetiteAdmiration += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (V.arcologies[0].FSStatuesqueGlorification >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that the tall are superior.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSStatuesqueGlorification >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that the tall are superior.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSStatuesqueGlorification >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that the tall are superior.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that the tall are superior.`); + } + if (V.arcologies[0].FSStatuesqueGlorification < 0) { + FutureSocieties.remove("FSStatuesqueGlorification"); + if (V.assistant.fsAppearance === "statuesque glorification") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSStatuesqueGlorification > V.arcologies[0].FSStatuesqueGlorificationDecoration) { + V.arcologies[0].FSStatuesqueGlorification = V.arcologies[0].FSStatuesqueGlorificationDecoration; + } + if (V.arcologies[0].FSStatuesqueGlorificationDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSStatuesqueGlorification === V.arcologies[0].FSStatuesqueGlorificationDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSStatuesqueGlorificationSMR === 1) { + V.arcologies[0].FSStatuesqueGlorification += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (V.arcologies[0].FSSlimnessEnthusiast >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} is passionately enthusiastic about slim slaves with girlish figures.`); + } else if (V.arcologies[0].FSSlimnessEnthusiast >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} is very enthusiastic about slim slaves with girlish figures.`); + } else if (V.arcologies[0].FSSlimnessEnthusiast >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is enthusiastic about slim slaves with girlish figures.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced about your preference for slim slaves with girlish figures.`); + } + if (V.arcologies[0].FSSlimnessEnthusiast < 0) { + FutureSocieties.remove("FSSlimnessEnthusiast"); + if (V.assistant.fsAppearance === "slimness enthusiast") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSSlimnessEnthusiast > V.arcologies[0].FSSlimnessEnthusiastDecoration) { + V.arcologies[0].FSSlimnessEnthusiast = V.arcologies[0].FSSlimnessEnthusiastDecoration; + } + if (V.arcologies[0].FSSlimnessEnthusiastDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSSlimnessEnthusiast === V.arcologies[0].FSSlimnessEnthusiastDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSSlimnessEnthusiastSMR === 1) { + V.arcologies[0].FSSlimnessEnthusiast += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSAssetExpansionist !== "unset") { + if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that all tits and asses should be bigger.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that all tits and asses should be bigger.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that all tits and asses should be bigger.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that all tits and asses should be bigger.`); + } + if (V.arcologies[0].FSAssetExpansionist < 0) { + FutureSocieties.remove("FSAssetExpansionist"); + if (V.assistant.fsAppearance === "asset expansionist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSAssetExpansionist > V.arcologies[0].FSAssetExpansionistDecoration) { + V.arcologies[0].FSAssetExpansionist = V.arcologies[0].FSAssetExpansionistDecoration; + } + if (V.arcologies[0].FSAssetExpansionistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSAssetExpansionist === V.arcologies[0].FSAssetExpansionistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSAssetExpansionistSMR === 1) { + V.arcologies[0].FSAssetExpansionist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSPastoralist !== "unset") { + if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that slaves should be milked.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that slaves should be milked.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that slaves should be milked.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that slaves should be milked.`); + } + if (V.arcologies[0].FSPastoralist < 0) { + FutureSocieties.remove("FSPastoralist"); + if (V.assistant.fsAppearance === "pastoralist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSPastoralist > V.arcologies[0].FSPastoralistDecoration) { + V.arcologies[0].FSPastoralist = V.arcologies[0].FSPastoralistDecoration; + } + if (V.arcologies[0].FSPastoralistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSPastoralist === V.arcologies[0].FSPastoralistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSPastoralistSMR === 1) { + V.arcologies[0].FSPastoralist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that all slaves should be tall and strong.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that all slaves should be tall and strong.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that all slaves should be tall and strong.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that all slaves should be tall and strong.`); + } + if (V.arcologies[0].FSPhysicalIdealist < 0) { + FutureSocieties.remove("FSPhysicalIdealist"); + if (V.assistant.fsAppearance === "physical idealist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSPhysicalIdealist > V.arcologies[0].FSPhysicalIdealistDecoration) { + V.arcologies[0].FSPhysicalIdealist = V.arcologies[0].FSPhysicalIdealistDecoration; + } + if (V.arcologies[0].FSPhysicalIdealistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSPhysicalIdealist === V.arcologies[0].FSPhysicalIdealistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSPhysicalIdealistSMR === 1) { + V.arcologies[0].FSPhysicalIdealist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that all slaves should be soft and laid-back.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with the idea that all slaves should be soft and laid-back.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to the idea that all slaves should be soft and laid-back.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced that all slaves should be soft and laid-back.`); + } + if (V.arcologies[0].FSHedonisticDecadence < 0) { + FutureSocieties.remove("FSHedonisticDecadence"); + if (V.assistant.fsAppearance === "hedonistic decadence") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSHedonisticDecadence > V.arcologies[0].FSHedonisticDecadenceDecoration) { + V.arcologies[0].FSHedonisticDecadence = V.arcologies[0].FSHedonisticDecadenceDecoration; + } + if (V.arcologies[0].FSHedonisticDecadenceDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSHedonisticDecadence === V.arcologies[0].FSHedonisticDecadenceDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSHedonisticDecadenceSMR === 1) { + V.arcologies[0].FSHedonisticDecadence += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly in a version of religion that emphasizes slaveholding traditions.`); + V.independenceDay = 1; + V.nicaea.announceable = 1; + } else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with a version of religion that emphasizes slaveholding traditions.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to a version of religion that emphasizes slaveholding traditions.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of a version of religion that emphasizes slaveholding traditions.`); + } + if (V.arcologies[0].FSChattelReligionist < 0) { + FutureSocieties.remove("FSChattelReligionist"); + if (V.assistant.fsAppearance === "chattel religionist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSChattelReligionist > V.arcologies[0].FSChattelReligionistDecoration) { + V.arcologies[0].FSChattelReligionist = V.arcologies[0].FSChattelReligionistDecoration; + } + if (V.arcologies[0].FSChattelReligionistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSChattelReligionist === V.arcologies[0].FSChattelReligionistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSChattelReligionistSMR === 1) { + V.arcologies[0].FSChattelReligionist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that it is the new Rome.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new Rome.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new Rome.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new Rome.`); + } + if (V.arcologies[0].FSRomanRevivalist < 0) { + FutureSocieties.remove("FSRomanRevivalist"); + if (V.assistant.fsAppearance === "roman revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSRomanRevivalist > V.arcologies[0].FSRomanRevivalistDecoration) { + V.arcologies[0].FSRomanRevivalist = V.arcologies[0].FSRomanRevivalistDecoration; + } + if (V.arcologies[0].FSRomanRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSRomanRevivalist === V.arcologies[0].FSRomanRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSRomanRevivalistSMR === 1) { + V.arcologies[0].FSRomanRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (V.arcologies[0].FSNeoImperialist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that your arcology is a truly new Imperial Society.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSNeoImperialist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new Imperial Society.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSNeoImperialist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new Imperial Society.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new Imperial Society.`); + } + if (V.arcologies[0].FSNeoImperialist < 0) { + FutureSocieties.remove("FSNeoImperialist"); + if (V.assistant.fsAppearance === "neo imperialist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSNeoImperialist > V.arcologies[0].FSNeoImperialistDecoration) { + V.arcologies[0].FSNeoImperialist = V.arcologies[0].FSNeoImperialistDecoration; + } + if (V.arcologies[0].FSNeoImperialistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSNeoImperialist === V.arcologies[0].FSNeoImperialistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSNeoImperialistSMR === 1) { + V.arcologies[0].FSNeoImperialist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that it is the new Aztec Empire.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new Aztec Empire.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new Aztec Empire.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new Aztec Empire.`); + } + if (V.arcologies[0].FSAztecRevivalist < 0) { + FutureSocieties.remove("FSAztecRevivalist"); + if (V.assistant.fsAppearance === "aztec revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSAztecRevivalist > V.arcologies[0].FSAztecRevivalistDecoration) { + V.arcologies[0].FSAztecRevivalist = V.arcologies[0].FSAztecRevivalistDecoration; + } + if (V.arcologies[0].FSAztecRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSAztecRevivalist === V.arcologies[0].FSAztecRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSAztecRevivalistSMR === 1) { + V.arcologies[0].FSAztecRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that it is the land of the Pharaohs, reborn.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new land of the Pharaohs.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new land of the Pharaohs.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new land of the Pharaohs.`); + } + if (V.arcologies[0].FSEgyptianRevivalist < 0) { + FutureSocieties.remove("FSEgyptianRevivalist"); + if (V.assistant.fsAppearance === "egyptian revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSEgyptianRevivalist > V.arcologies[0].FSEgyptianRevivalistDecoration) { + V.arcologies[0].FSEgyptianRevivalist = V.arcologies[0].FSEgyptianRevivalistDecoration; + } + if (V.arcologies[0].FSEgyptianRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSEgyptianRevivalist === V.arcologies[0].FSEgyptianRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSEgyptianRevivalistSMR === 1) { + V.arcologies[0].FSEgyptianRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that it is the land of the Shogun, reborn.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new Edo Japan.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new Edo Japan.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new Edo Japan.`); + } + if (V.arcologies[0].FSEdoRevivalist < 0) { + FutureSocieties.remove("FSEdoRevivalist"); + if (V.assistant.fsAppearance === "edo revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSEdoRevivalist > V.arcologies[0].FSEdoRevivalistDecoration) { + V.arcologies[0].FSEdoRevivalist = V.arcologies[0].FSEdoRevivalistDecoration; + } + if (V.arcologies[0].FSEdoRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSEdoRevivalist === V.arcologies[0].FSEdoRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSEdoRevivalistSMR === 1) { + V.arcologies[0].FSEdoRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that it is ancient Baghdad reborn.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your project to build a new Sultanate.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your project to build a new Sultanate.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your project to build a new Sultanate.`); + } + if (V.arcologies[0].FSArabianRevivalist < 0) { + FutureSocieties.remove("FSArabianRevivalist"); + if (V.assistant.fsAppearance === "arabian revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSArabianRevivalist > V.arcologies[0].FSArabianRevivalistDecoration) { + V.arcologies[0].FSArabianRevivalist = V.arcologies[0].FSArabianRevivalistDecoration; + } + if (V.arcologies[0].FSArabianRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSArabianRevivalist === V.arcologies[0].FSArabianRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSArabianRevivalistSMR === 1) { + V.arcologies[0].FSArabianRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel) { + r.push(`${V.arcologies[0].name} believes implicitly that you possess the Mandate of Heaven.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.6) { + r.push(`${V.arcologies[0].name} agrees strongly with your pursuit of the Mandate of Heaven.`); + V.independenceDay = 1; + } else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.3) { + r.push(`${V.arcologies[0].name} is sympathetic to your pursuit of the Mandate of Heaven.`); + } else { + r.push(`${V.arcologies[0].name} is unconvinced of the wisdom of your pursuit of the Mandate of Heaven.`); + } + if (V.arcologies[0].FSChineseRevivalist < 0) { + FutureSocieties.remove("FSChineseRevivalist"); + if (V.assistant.fsAppearance === "chinese revivalist") { + V.assistant.fsAppearance = "default"; + } + r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); + } else if (V.arcologies[0].FSChineseRevivalist > V.arcologies[0].FSChineseRevivalistDecoration) { + V.arcologies[0].FSChineseRevivalist = V.arcologies[0].FSChineseRevivalistDecoration; + } + if (V.arcologies[0].FSChineseRevivalistDecoration < V.FSLockinLevel) { + if (V.arcologies[0].FSChineseRevivalist === V.arcologies[0].FSChineseRevivalistDecoration) { + r.push(`<span class="yellow">Your societal development in this direction is being limited by ${V.arcologies[0].name}'s lack of customization to support it.</span>`); + V.FSReminder = 1; + } else if (V.arcologies[0].FSChineseRevivalistSMR === 1) { + V.arcologies[0].FSChineseRevivalist += 0.1 * V.FSSingleSlaveRep; + } + } + } + + App.UI.SlaveSummary.societyChanged(); + App.Events.addNode(el, r, "div"); + return el; +}; diff --git a/src/endWeek/economics/marketsReport.js b/src/endWeek/economics/marketsReport.js new file mode 100644 index 0000000000000000000000000000000000000000..be035ec43284f1fa7653ce3726d40df9400fee92 --- /dev/null +++ b/src/endWeek/economics/marketsReport.js @@ -0,0 +1,128 @@ +/** + * @returns {HTMLElement} + */ +App.EndWeek.marketsReport = function() { + const el = document.createElement("p"); + App.UI.DOM.appendNewElement("span", el, "FC Markets Report: ", "note"); + + const assetAffected = either("capture", "drugs", "entrapment", "general", "slaves", "surgical", "training"); + const assetsUp = (random(1, 100) > 50); + let desc = ""; + + switch (assetAffected) { + case "general": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...rising energy costs drove <span class="yellowgreen">rising prices</span> of several market baskets...`; + } else { + desc = `...conflict-driven increases in transportation costs increase <span class="yellowgreen">price indices</span>...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...increasing Free Cities slave labor effects <span class="gold">general prices</span>...`; + } else { + desc = `...Antarctic oil shale pushing down energy prices, driving down major <span class="gold">price indices</span>...`; + } + } + break; + } + case "slaves": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...heavy demand for fashionable varieties drove <span class="yellowgreen">rising slave prices</span> last...`; + } else { + desc = `...study suggested the sexual revolution would continue to drive up <span class="yellowgreen">slave prices</span>...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...increased supply due to bush wars drove down <span class="gold">slave prices</span>...`; + } else { + desc = `...<span class="gold">slave prices</span> continue to fall due to major improvements in training...`; + } + } + break; + } + case "entrapment": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...prospect of deregulation drove a <span class="yellowgreen">scramble</span> for means of enslavement...`; + } else { + desc = `...law would legalize enslavement, driving <span class="yellowgreen">high prices</span> for associated...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...reactionism produced lower demand and <span class="gold">lower prices</span> for legal enslavement...`; + } else { + desc = `...report on low success rates <span class="gold">drove down</span> value of legal enslavement methods...`; + } + } + break; + } + case "capture": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...declaration of war <span class="yellowgreen">pushed up</span> average mercenary wage...`; + } else { + desc = `...advancing technology to blame for <span class="yellowgreen">rising costs</span> of assets for wet work...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...rumored peace treaty <span class="gold">pushed down</span> mercenary contract clearing rate...`; + } else { + desc = `...demobilization of the cash-strapped army expected to produce mercenary <span class="gold">glut</span>...`; + } + } + break; + } + case "training": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...rising demand in turn <span class="yellowgreen">pushing up</span> prices for most means of slave training...`; + } else { + desc = `...public demand for ever-better slave training inevitably <span class="yellowgreen">increase</span> training costs...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...competition from low-cost slave breaking firms <span class="gold">reducing</span> asking price for...`; + } else { + desc = `...increased automation of slave training <span class="gold">negatively impacting</span> training contracts...`; + } + } + break; + } + case "surgical": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...fashionable extravagant implant procedures <span class="yellowgreen">driving prices</span> of remote surgical...`; + } else { + desc = `...near-universal breast implants producing corresponding <span class="yellowgreen">price inflation</span> of surgery...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...vastly reduced overhead with remote surgery <span class="gold">hitting prices</span> of surgery hard...`; + } else { + desc = `...oversupply after major manufacturers converted lines to <span class="gold">low-cost</span> implant production...`; + } + } + break; + } + case "drugs": { + if (assetsUp) { + if (random(1, 100) > 50) { + desc = `...intense demand for curatives in conflict zones <span class="yellowgreen">increasing prices</span>...`; + } else { + desc = `...setbacks in growth hormone human testing expected to <span class="yellowgreen">increase prices</span> of traditional formula...`; + } + } else { + if (random(1, 100) > 50) { + desc = `...new formula <span class="gold">cut costs</span> of common curatives by an unprecedented...`; + } else { + desc = `...glut caused by big pharma reorienting towards <span class="gold">cheap,</span> mass-produced aphros...`; + } + } + break; + } + } + $(el).append(desc); + return el; +}; diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js new file mode 100644 index 0000000000000000000000000000000000000000..899cb539ae480e300e8b6781dca74e6608ceee09 --- /dev/null +++ b/src/endWeek/economics/neighborsDevelopment.js @@ -0,0 +1,3363 @@ +/** + * @returns {HTMLElement} + */ +App.EndWeek.neighborsDevelopment = function() { + const el = document.createElement("p"); + let He, his; + + const averageProsperity = _.mean(V.arcologies.map(a => Math.min(a.prosperity, 10))); + const corpBonus = V.corp.Incorporated ? Math.trunc(1000 * Math.pow(App.Corporate.value, 0.1)) : 0; + let agentBonusValue = 0; + let desc; + + if (V.useTabs === 0) { + App.UI.DOM.appendNewElement("h2", el, `Arcologies in the Free City`); + } + + for (let i = 0; i < V.arcologies.length; i++) { + const arc = V.arcologies[i]; + const r = []; + r.push(`<span class="bold">${arc.name},</span> your`); + if (arc.direction === 0) { + r.push(`arcology,`); + } else { + r.push(`neighbor to the ${arc.direction},`); + } + + /* PROSPERITY */ + + if (arc.direction !== 0) { + switch (arc.government) { + case "elected officials": + arc.prosperity += random(-1, 1); + break; + case "a corporation": + case "an oligarchy": + arc.prosperity += random(-1, 2); + break; + case "a committee": + case "your trustees": + arc.prosperity += random(0, 2); + break; + case "an individual": + arc.prosperity += random(0, 3); + break; + case "your agent": + agentBonusValue = agentBonus(i); + arc.prosperity += random(0, 3) + agentBonusValue; + break; + default: + arc.prosperity += random(-1, 1); + } + arc.prosperity = Math.clamp(arc.prosperity, 1, 300); + } + + if (arc.honeymoon > 0) { + arc.honeymoon -= 1; + } + const agent = App.currentAgent(i); + if (arc.government === "your agent") { + ({He} = getPronouns(agent)); + r.push(`is being run by your agent <span class="deeppink">${SlaveFullName(agent)}.</span>`); + if (agent && agent.assignment !== "be your agent") { + r.push(`<span class="red">BUG: ${agent} also was ${agent.assignment}!</span>`); + assignJob(agent, "be your agent"); + } + if (agentBonusValue > 0) { + r.push(`<span class="green">${He} does an excellent job this week.</span>`); + } + r.push(`The arcology`); + } else if (arc.government === "your trustees") { + r.push(`is being run by <span class="mediumseagreen">your trustees.</span> The arcology`); + } + + let error = (arc.direction === 0 ? 5 : 10); + error -= Math.min(2 * V.assistant.power, error); + const prosperity = (Math.trunc((0.1 * arc.prosperity * random(100 - error, 100 + error)) / 100)); + let millions = ``; + if (V.showNumbers !== 2) { + if (V.showNumbers === 1 && prosperity > V.showNumbersMax) { + millions = `m`; + } else { + millions = `million`; + } + } else { + millions = `m`; + } + r.push(`has an estimated GSP of <span class="yellowgreen">${cashFormat(prosperity)}${millions},</span>`); + if (arc.rival === 1 && arc.government !== "an individual") { + r.push(`but it is undergoing some internal turmoil. <span class="red">Resentment that has been quietly building among the arcology's elite turns into open rebellion!</span>`); + if (arc.PCminority > 0) { + r.push(`<span class="red">Your ownership interest in ${arc.name} has been annulled!</span>`); + arc.PCminority = 0; + } + r.push(`<span class="yellow">After a brief power struggle, it undergoes a change of government.</span>`); + if (agent) { + ({his} = getPronouns(agent)); + r.push(`<span class="deeppink">${agent.slaveName}</span> manages to escape with the help of a few loyal citizens and returns to you <span class="gold">fearing your displeasure at ${his} failure.</span>`); + agent.trust -= 40; + assignJob(agent, "rest"); // this takes care of necessary cleanup for agent and agent companion (if any) + } + r.push(`A controlling interest has been taken by a single individual, leaving the arcology ruled like yours is.`); + arc.government = "an individual"; + arc.ownership = random(51, 61); + arc.minority = 100 - arc.ownership - random(1, 19); + arc.honeymoon += 10; + } else if ((arc.government !== "your trustees") && (arc.government !== "your agent") && (arc.ownership < arc.PCminority) && (arc.direction !== 0) && (arc.rival !== 1)) { + r.push(`undergoing a leadership struggle in which you are deeply concerned, since you now own more of it than its current leadership.`); + if (random(0, 10) < arc.PCminority - arc.ownership) { + r.push(`<span class="yellow">You successfully execute a hostile takeover and now control the arcology.</span> Trustees from among its leading citizens will exercise local control at your direction until you make other arrangements.`); + arc.honeymoon += 10; + arc.ownership = 0; + arc.government = "your trustees"; + } else { + r.push(`The current leadership has not yet exhausted its legalistic recourses, and retains control for the moment, causing considerable disruption.`); + arc.prosperity -= 3; + } + } else if ((arc.ownership === 0) && (arc.PCminority > 0) && (arc.minority > arc.PCminority)) { + r.push(`undergoing a leadership struggle in which you are deeply concerned, since your ownership share has diminished to a dangerously low point.`); + if (random(0, 10) < arc.minority - arc.PCminority) { + r.push(`<span class="yellow">It undergoes a change of government.</span>`); + arc.honeymoon += 10; + arc.ownership = arc.minority; + arc.minority = 0; + switch (arc.government) { + case "your trustees": + if (random(0, 2) === 0) { + r.push(`Its leading citizens form a corporation to run the arcology more efficiently.`); + arc.government = "a corporation"; + } else { + r.push(`A power struggle is won by a single individual, leaving the arcology ruled like yours is.`); + arc.government = "an individual"; + } + break; + default: + if (random(0, 2) === 0) { + r.push(`The failed individual who led it is run out and replaced by direct democracy.`); + arc.government = "direct democracy"; + } else { + r.push(`The failed individual who led it is bought out by a corporation.`); + arc.government = "a corporation"; + } + } + } else { + r.push(`The arcology is paralyzed by dissension over how to respond.`); + arc.prosperity -= 3; + } + } else if ((arc.ownership !== 0) && ((arc.ownership < arc.minority) || (arc.ownership < 10)) && (arc.direction !== 0) && (arc.rival !== 1)) { + r.push(`undergoing a leadership struggle, since its current government owns less of it than its largest rival for control.`); + if (random(0, 10) < arc.minority - arc.ownership) { + r.push(`<span class="yellow">It undergoes a change of government.</span>`); + arc.honeymoon += 10; + arc.ownership = arc.minority; + arc.minority = 0; + switch (arc.government) { + case "elected officials": + if (random(0, 2) === 0) { + r.push(`Its elected officials surrender power to a small group of leading citizens.`); + arc.government = "an oligarchy"; + } else { + r.push(`Its elected officials are forced to give way to a committee of public safety.`); + arc.government = "a committee"; + } + break; + case "a committee": + if (random(0, 2) === 0) { + r.push(`Its ruling committee forms it into a corporation in the hope this will spur growth.`); + arc.government = "a corporation"; + } else { + r.push(`A power struggle within its ruling committee leaves only a few leading citizens in power.`); + arc.government = "an oligarchy"; + } + break; + case "an oligarchy": + if (random(0, 2) === 0) { + r.push(`Its leading citizens form a corporation to run the arcology more efficiently.`); + arc.government = "a corporation"; + } else { + r.push(`A power struggle is won by a single individual, leaving the arcology ruled like yours is.`); + arc.government = "an individual"; + } + break; + case "an individual": + if (random(0, 2) === 0) { + r.push(`The failed individual who led it is run out and replaced by direct democracy.`); + arc.government = "direct democracy"; + } else { + r.push(`The failed individual who led it is bought out by a corporation.`); + arc.government = "a corporation"; + } + break; + case "a corporation": + if (random(0, 2) === 0) { + r.push(`A power struggle within the corporation that runs it is won by a single person.`); + arc.government = "an individual"; + } else { + r.push(`The corporation that runs it collapses and is replaced by an oligarchy of rich shareholders.`); + arc.government = "an oligarchy"; + } + break; + default: + r.push(`Its direct democracy votes to empower some elected officials in the hope they can lead the arcology out of its problems.`); + arc.government = "elected officials"; + } + desc = FutureSocieties.decay(i).map((fs) => FutureSocieties.displayName(fs)); + if (desc.length > 2) { + r.push(`Its citizens take the opportunity to make radical social changes, <span class="cyan">purging the ${arrayToSentence(desc)}</span> favored by the old government.`); + } else if (desc.length === 2) { + r.push(`Its citizens take the opportunity to make social changes, <span class="cyan">discarding the ${desc[0]} and ${desc[1]}</span> favored by the old government.`); + } else if (desc.length === 1) { + r.push(`Its citizens take the opportunity to make social change and <span class="cyan">abandon the ${desc[0]}</span> favored by the old government.`); + } + } else { + r.push(`The arcology is paralyzed by internal dissension over how to respond.`); + arc.prosperity -= 3; + } + } else if (arc.prosperity >= 300) { + r.push(`at the maximum possible prosperity.`); + } else if (arc.prosperity > averageProsperity + 10) { + r.push(`much more prosperous than the rest of the Free City, limiting its economic development.`); + arc.prosperity -= 1; + } else if (arc.prosperity >= averageProsperity - 10) { + r.push(`about as prosperous as the rest of the Free City.`); + } else { + if (arc.honeymoon > 0) { + r.push(`far behind the rest of the Free City, making it a good investment and spurring its economic development. It remains in the <span class="lightgreen">honeymoon period</span> after its recent change of government, suppressing dissension and further encouraging growth.`); + arc.prosperity += 2; + if (arc.ownership !== 0 && arc.ownership < 40) { + arc.ownership += 1; + } + } else { + r.push(`not as prosperous as the rest of the Free City, spurring its economic development.`); + arc.prosperity += 1; + } + } + + /* NATURAL CHANGES TO MINORITY SHARE */ + if ((arc.government === "your agent") || (arc.government === "your trustees")) { + arc.ownership = 0; + } + let owned = arc.minority + arc.ownership + arc.PCminority; + if (arc.minority < 10) { + arc.minority = 0; + } else if (arc.minority < arc.PCminority) { + arc.minority = 0; + } else if (owned >= 95) { + arc.minority -= random(3, 5); + } else if (arc.minority > (100 - owned) * 5) { + arc.minority -= random(3, 5); + } else if (arc.minority < (100 - owned) * 4) { + if (arc.minority < 10) { + if (arc.ownership + arc.PCminority <= 90) { + arc.minority = 10; + } + } else { + if (arc.ownership + arc.PCminority <= 98) { + if (arc.prosperity < random(0, 300)) { + arc.minority += random(0, 2); + } + } + } + } + + if (arc.direction !== 0) { + /* AI ARCOLOGY SHARE BUYING AND SELLING */ + const economicUncertainty = App.Utils.economicUncertainty(i); + if (arc.government !== "your agent") { + if (arc.government !== "your trustees") { + if (arc.minority + arc.ownership + arc.PCminority < 100) { + const prosperityDiff = arc.prosperity - averageProsperity; + if (prosperityDiff > random(-10, 50)) { + arc.ownership += 1; + arc.prosperity -= 5; + r.push(`Its leadership acquires an increased share of its ownership. This places its government in control of approximately <span class="orange">${Math.trunc(arc.ownership * economicUncertainty)}%</span> of the arcology${(arc.minority > 0) ? `, against its most prominent competition with a <span class="tan">${Math.trunc(arc.minority * economicUncertainty)}%</span> share`:``}.`); + } else if (prosperityDiff < random(-50, 10)) { + if (arc.ownership > 0) { + if (arc.rival !== 1 || (arc.rival === 1 && arc.ownership > 51 && random(1, 2) === 1)) { + arc.ownership -= 1; + arc.prosperity += 5; + r.push(`Its leadership sells off some of its ownership to stay afloat. This leaves its government in control of approximately <span class="orange">${Math.trunc(arc.ownership * economicUncertainty)}%</span> of the arcology${(arc.minority > 0) ? `, against its most prominent competition, with a <span class="tan">${Math.trunc(arc.minority * economicUncertainty)}%</span> share` : ``}.`); + } + } + } + if (arc.minority + arc.ownership > 100) { + arc.minority = 100 - arc.ownership; + } + } else { + if (((arc.ownership + arc.PCminority) >= 99) && arc.rival !== 1) { + arc.ownership = 98 - arc.PCminority; + } else { + arc.minority = Math.clamp(98 - arc.ownership - arc.PCminority, 0, 98); + } + } + } + } + + /* AI ARCOLOGY RENTS TO PC */ + + if (arc.PCminority > 0) { + const rents = (arc.prosperity * arc.PCminority * 2) + random(1, 100); + cashX(rents, "rents"); + r.push(`This week, you made <span class="yellowgreen">${cashFormat(rents)}</span> from your holdings in this arcology.`); + } + + /* CYBER ECONOMIC WARFARE */ + if (arc.direction === V.arcologies[0].CyberEconomicTarget) { + let catchChance; + if (V.PC.skill.hacking === -100) { + catchChance = 10; + } else if (V.PC.skill.hacking <= -75) { + catchChance = 30; + } else if (V.PC.skill.hacking <= -50) { + catchChance = 40; + } else if (V.PC.skill.hacking <= -25) { + catchChance = 45; + } else if (V.PC.skill.hacking === 0) { + catchChance = 50; + } else if (V.PC.skill.hacking <= 25) { + catchChance = 60; + } else if (V.PC.skill.hacking <= 50) { + catchChance = 70; + } else if (V.PC.skill.hacking <= 75) { + catchChance = 85; + } else if (V.PC.skill.hacking >= 100) { + catchChance = 100; + } + const weekModifier = Math.max(1, (100 - (V.week * 2))); + arc.prosperity -= V.arcologies[0].CyberEconomic * 2; + const warSpoils = Math.ceil(10 + Math.max(((100 / weekModifier) * arc.prosperity * V.arcologies[0].CyberEconomic), 0)); + arc.prosperity = Math.clamp(arc.prosperity, 1, V.AProsperityCap); + let redHanded = 0; + if (random(0, 100) >= catchChance - (10 * V.arcologies[0].CyberEconomic)) { + V.arcologies[0].prosperity -= V.arcologies[0].CyberEconomic * 3; + redHanded = 1; + repX(forceNeg(random(100, 200)), "war"); + if (V.secExpEnabled > 0) { + V.SecExp.core.authority -= random(100, 500) * V.arcologies[0].CyberEconomic; + V.SecExp.core.crimeLow += random(10, 25); + } + V.arcologies[0].prosperity = Math.clamp(V.arcologies[0].prosperity, 1, V.AProsperityCap); + } + r.push(`You target ${arc.name} for <span class="yellow">digital economic warfare,</span> successfully raiding its coffers for <span class="yellowgreen">${cashFormat(warSpoils)}</span> this week.`); + cashX(warSpoils, "war"); + if (redHanded === 1) { + r.push(`A successful trace back to your arcology has exposed your actions, <span class="red">damaging your reputation</span> and <span class="red">scaring away potential investors.</span>`); + if (V.secExpEnabled > 0) { + r.push(`To add insult to injury, <span class="red">your authority has been weakened</span> and your actions have painted your arcology as a <span class="red">haven for crime.</span>`); + } + } + } else if (arc.direction === V.arcologies[0].CyberReputationTarget) { + /* REPUTATION WARFARE */ + let catchChance; + if (V.PC.skill.hacking === -100) { + catchChance = 10; + } else if (V.PC.skill.hacking <= -75) { + catchChance = 30; + } else if (V.PC.skill.hacking <= -50) { + catchChance = 40; + } else if (V.PC.skill.hacking <= -25) { + catchChance = 45; + } else if (V.PC.skill.hacking === 0) { + catchChance = 50; + } else if (V.PC.skill.hacking <= 25) { + catchChance = 60; + } else if (V.PC.skill.hacking <= 50) { + catchChance = 70; + } else if (V.PC.skill.hacking <= 75) { + catchChance = 85; + } else if (V.PC.skill.hacking >= 100) { + catchChance = 100; + } + arc.prosperity -= V.arcologies[0].CyberReputation; + if (arc.rival !== 1) { + arc.ownership -= V.arcologies[0].CyberReputation; + } + arc.prosperity = Math.clamp(arc.prosperity, 1, 300); + arc.ownership = Math.clamp(arc.ownership, 0, 100); + let redHanded = 0; + if (random(0, 100) >= catchChance - (10 * V.arcologies[0].CyberReputation)) { + V.arcologies[0].prosperity -= V.arcologies[0].CyberReputation * 3; + redHanded = 1; + repX(forceNeg(random(100, 200)), "war"); + if (V.secExpEnabled > 0) { + V.SecExp.core.authority -= random(100, 500) * V.arcologies[0].CyberReputation; + V.SecExp.core.crimeLow += random(10, 25); + } + V.arcologies[0].prosperity = Math.clamp(V.arcologies[0].prosperity, 1, 300); + } + r.push(`You target ${arc.name}'s leadership for <span class="yellow">character assassination</span> in an attempt to destabilize the arcology.`); + if (redHanded === 1) { + r.push(`A successful trace back to your arcology has exposed your actions, <span class="red">damaging your reputation</span> and <span class="red">scaring away potential investors.</span>`); + if (V.secExpEnabled > 0) { + r.push(`To add insult to injury, <span class="red">your authority has been weakened</span> and your actions have painted your arcology as a <span class="red">haven for crime.</span>`); + } + } + } + + + /* AI ARCOLOGY RENAMING */ + const conflict = V.arcologies.find(a => arc.direction !== a.direction && arc.name === a.name); + if (conflict) { + arc.name = "Arcology X-" + (i < 4 ? i : i + 1); + /* X-4 is reserved for player's arcology, so X-1 is available */ + r.push(`It resumes its original name, <span class="bold">${arc.name},</span> since the arcology to the ${conflict.direction} of yours is also named ${conflict.name}.`); + } + } + + /* ECONOMIC WARFARE */ + + const embargoer = V.arcologies.find(a => arc.direction === a.embargoTarget); + if (embargoer) { + arc.prosperity -= embargoer.embargo * 2; + if (embargoer.direction !== 0) { + embargoer.prosperity -= embargoer.embargo * 2; + } + arc.prosperity = Math.clamp(arc.prosperity, 1, 300); + r.push(`${embargoer.name} targets ${arc.name} for <span class="red">economic warfare.</span>`); + } + + /* FUTURE SOCIETY PROGRESS */ + + const societiesAdopted = FutureSocieties.activeCount(i); + let efficiency; + switch (arc.government) { + case "elected officials": + efficiency = random(-2, 2); + break; + case "a committee": + efficiency = random(-1, 2); + break; + case "an oligarchy": + case "your trustees": + efficiency = random(-1, 3); + break; + case "an individual": + efficiency = random(-1, 5); + break; + case "your agent": + efficiency = agentBonusValue + random(-1, 1); + break; + case "a corporation": + efficiency = random(1, 2); + break; + default: + efficiency = random(-3, 3); + } + + if (arc.rival === 1) { + efficiency += random(0, 2); + } + + if (arc.direction !== 0) { + FutureSocieties.applyBroadProgress(i, efficiency); + } + const passive = new App.Neighbor.PassiveFSInfluence(i); + if (arc.FSSupremacist !== "unset") { + r.push(passive.output("FSSupremacist")); + if (arc.direction !== 0) { + if (arc.FSSupremacist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Racial Supremacy for ${arc.FSSupremacistRace} people has reached stability and acceptance there. The arcology has been renamed`); + switch (arc.FSSupremacistRace) { + case "white": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistWhite); + break; + case "asian": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistAsian); + break; + case "latina": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistLatina); + break; + case "middle eastern": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMiddleEastern); + break; + case "black": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistBlack); + break; + case "indo-aryan": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistIndoAryan); + break; + case "pacific islander": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistPacificIslander); + break; + case "malay": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMalay); + break; + case "amerindian": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistAmerindian); + break; + case "southern european": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistSouthernEuropean); + break; + case "semitic": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistSemitic); + break; + default: + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMixedRace); + } + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSSupremacist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on ${arc.FSSupremacistRace} Supremacy.`); + arc.FSSupremacist = "unset"; + } + } + if (arc.FSSupremacist !== "unset") { + if (V.corp.Incorporated === 1) { + if (!V.corp.SpecRaces.includes(arc.FSSupremacistRace)) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's racially inferior slaves, improving sales and helping social progress.`); + arc.FSSupremacist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSSubjugationist !== "unset") { + r.push(passive.output("FSSubjugationist")); + if (arc.direction !== 0) { + if (arc.FSSubjugationist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Racial Subjugationism of ${arc.FSSubjugationistRace} people has reached stability and acceptance there. The arcology has been renamed`); + switch (arc.FSSubjugationistRace) { + case "white": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistWhite); + break; + case "asian": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistAsian); + break; + case "latina": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistLatina); + break; + case "middle eastern": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMiddleEastern); + break; + case "black": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistBlack); + break; + case "indo-aryan": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistIndoAryan); + break; + case "pacific islander": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistPacificIslander); + break; + case "malay": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMalay); + break; + case "amerindian": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistAmerindian); + break; + case "southern european": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistSouthernEuropean); + break; + case "semitic": + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistSemitic); + break; + default: + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMixedRace); + } + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSSubjugationist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on ${arc.FSSubjugationistRace} Subjugationism.`); + arc.FSSubjugationist = "unset"; + } + } + if (arc.FSSubjugationist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecRaces.includes(arc.FSSubjugationistRace)) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's ${arc.FSSubjugationistRace} slaves, improving sales and helping social progress.`); + arc.FSSubjugationist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSRepopulationFocus !== "unset") { + r.push(passive.output("FSRepopulationFocus")); + if (arc.direction !== 0) { + if (arc.FSRepopulationFocus >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Repopulationism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesRepopulationist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSRepopulationFocus < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Repopulationism.`); + arc.FSRepopulationFocus = "unset"; + } + } + if (arc.FSRepopulationFocus !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecMilk > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's milky cows, improving sales and helping social progress.`); + arc.FSRepopulationFocus += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecAge === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's youthful captures, improving sales and helping social progress.`); + arc.FSRepopulationFocus += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecInjection === 5) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's milky cows, improving sales and helping social progress.`); + arc.FSRepopulationFocus += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSRestart !== "unset") { + r.push(passive.output("FSRestart")); + if (arc.direction !== 0) { + if (arc.FSRestart >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSRestartResearch = 1; + r.push(`Eugenics has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesEugenics); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSRestart < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Eugenics.`); + arc.FSRestart = "unset"; + } + } + if (arc.FSRestart !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecBalls === -1) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's neutered slavegirls, improving sales and helping social progress.`); + arc.FSRestart += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecSexEd === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's well trained toys, improving sales and helping social progress.`); + arc.FSRestart += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecIntelligence === 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's smarter captures, improving sales and helping social progress.`); + arc.FSRestart += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSGenderRadicalist !== "unset") { + r.push(passive.output("FSGenderRadicalist")); + if (arc.direction !== 0) { + if (arc.FSGenderRadicalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSGenderRadicalistResearch = 1; + r.push(`Gender Radicalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesGenderRadicalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSGenderRadicalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Gender Radicalism.`); + arc.FSGenderRadicalist = "unset"; + } + } + if (arc.FSGenderRadicalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecHormones > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's hormonally treated slaves, improving sales and helping social progress.`); + arc.FSGenderRadicalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + if (V.corp.SpecPussy === 1 && V.corp.SpecDick === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's beautiful futanari, improving sales and helping social progress.`); + arc.FSGenderRadicalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecBalls === -1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's clipped buttsluts, improving sales and helping social progress.`); + arc.FSGenderRadicalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + if ((V.corp.SpecGender === 2) || (V.seeDicks === 100)) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's feminized slaves, improving sales and helping social progress.`); + arc.FSGenderRadicalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSGenderFundamentalist !== "unset") { + r.push(passive.output("FSGenderFundamentalist")); + if (arc.direction !== 0) { + if (arc.FSGenderFundamentalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Gender Fundamentalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesGenderFundamentalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSGenderFundamentalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Gender Fundamentalism.`); + arc.FSGenderFundamentalist = "unset"; + } + } + if (arc.FSGenderFundamentalist !== "unset") { + if (V.corp.Incorporated === 1) { + if ((V.corp.SpecGender === 1) || (V.seeDicks === 0)) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's enslaved females, improving sales and helping social progress.`); + arc.FSGenderFundamentalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSPaternalist !== "unset") { + r.push(passive.output("FSPaternalist")); + if (arc.direction !== 0) { + if (arc.FSPaternalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Paternalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesPaternalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSPaternalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Paternalism.`); + arc.FSPaternalist = "unset"; + } + } + if (arc.FSPaternalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecTrust > 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's well-treated companions, improving sales and helping social progress.`); + arc.FSPaternalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + if (V.corp.SpecCosmetics === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's meticulously beautified ladies, improving sales and helping social progress.`); + arc.FSPaternalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecEducation > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's educated ladies, improving sales and helping social progress.`); + arc.FSPaternalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSDegradationist !== "unset") { + r.push(passive.output("FSDegradationist")); + if (arc.direction !== 0) { + if (arc.FSDegradationist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Degradationism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesDegradationist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSDegradationist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Degradationism.`); + arc.FSDegradationist = "unset"; + } + } + if (arc.FSDegradationist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecTrust < 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's thoroughly terrified slaves, improving sales and helping social progress.`); + arc.FSDegradationist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + if (V.corp.SpecIntelligence === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's idiotic sluts, improving sales and helping social progress.`); + arc.FSDegradationist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecAmputee === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's human sex toys, improving sales and helping social progress.`); + arc.FSDegradationist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSIntellectualDependency !== "unset") { + r.push(passive.output("FSIntellectualDependency")); + if (arc.direction !== 0) { + if (arc.FSIntellectualDependency >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Intellectual Dependency has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesIntellectualDependency); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSIntellectualDependency < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Intellectual Dependency.`); + arc.FSIntellectualDependency = "unset"; + } + } + if (arc.FSIntellectualDependency !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecIntelligence === 1) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's idiotic sluts, improving sales and helping social progress.`); + arc.FSIntellectualDependency += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecEducation === 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's uneducated slaves, improving sales and helping social progress.`); + arc.FSIntellectualDependency += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSSlaveProfessionalism !== "unset") { + r.push(passive.output("FSSlaveProfessionalism")); + if (arc.direction !== 0) { + if (arc.FSSlaveProfessionalism >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSSlaveProfessionalismResearch = 1; + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSlaveProfessionalism); + r.push(`Slave Professionalism has reached stability and acceptance there. The arcology has been renamed <span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSSlaveProfessionalism < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Slave Professionalism.`); + arc.FSSlaveProfessionalism = "unset"; + } + } + if (arc.FSSlaveProfessionalism !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecIntelligence === 3) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's smarter captures, improving sales and helping social progress.`); + arc.FSSlaveProfessionalism += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } + if (V.corp.SpecEducation > 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's well educated ladies, improving sales and helping social progress.`); + arc.FSSlaveProfessionalism += 2; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecEducation > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's educated ladies, improving sales and helping social progress.`); + arc.FSSlaveProfessionalism += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + if (V.corp.SpecSexEd === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's well trained toys, improving sales and helping social progress.`); + arc.FSSlaveProfessionalism += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecAccent === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's linguistically perfect slaves, improving sales and helping social progress.`); + arc.FSSlaveProfessionalism += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSBodyPurist !== "unset") { + r.push(passive.output("FSBodyPurist")); + if (arc.direction !== 0) { + if (arc.FSBodyPurist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesBodyPurist); + r.push(`Body Purism has reached stability and acceptance there. The arcology has been renamed <span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSBodyPurist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Body Purism.`); + arc.FSBodyPurist = "unset"; + } + } + if (arc.FSBodyPurist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecImplants === 0) { + if (V.corp.SpecAmputee !== 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's implant-free slaves, improving sales and helping social progress.`); + arc.FSBodyPurist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + } else if (arc.FSTransformationFetishist !== "unset") { + r.push(passive.output("FSTransformationFetishist")); + if (arc.direction !== 0) { + if (arc.FSTransformationFetishist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSTransformationFetishistResearch = 1; + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesTransformationFetishist); + r.push(`Transformation Fetishism has reached stability and acceptance there. The arcology has been renamed <span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSTransformationFetishist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Transformation Fetishism.`); + arc.FSTransformationFetishist = "unset"; + } + } + if (arc.FSTransformationFetishist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecImplants === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's implanted slaves, improving sales and helping social progress.`); + arc.FSTransformationFetishist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecImplants === 2) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's absurdly implanted slaves, improving sales and helping social progress.`); + arc.FSTransformationFetishist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } + } + } + } + + if (arc.FSYouthPreferentialist !== "unset") { + r.push(passive.output("FSYouthPreferentialist")); + if (arc.direction !== 0) { + if (arc.FSYouthPreferentialist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Youth Preferentialism has reached stability and acceptance there. The arcology has been renamed`); + if (V.pedo_mode === 1 || V.minimumSlaveAge < 6) { + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesYouthPreferentialistLow); + } else if (V.minimumSlaveAge < 14) { + arc.name = App.Neighbor.getUnusedName(either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow)); + } else { + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesYouthPreferentialist); + } + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + arc.FSYouthPreferentialistResearch = 1; + } + } else if (arc.FSYouthPreferentialist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Youth Preferentialism.`); + arc.FSYouthPreferentialist = "unset"; + } + } + if (arc.FSYouthPreferentialist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAge === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's young slaves, improving sales and helping social progress.`); + arc.FSYouthPreferentialist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSMaturityPreferentialist !== "unset") { + r.push(passive.output("FSMaturityPreferentialist")); + if (arc.direction !== 0) { + if (arc.FSMaturityPreferentialist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Maturity Preferentialism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesMaturityPreferentialist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSMaturityPreferentialist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Maturity Preferentialism.`); + arc.FSMaturityPreferentialist = "unset"; + } + } + if (arc.FSMaturityPreferentialist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAge === 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's enslaved MILFs, improving sales and helping social progress.`); + arc.FSMaturityPreferentialist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSPetiteAdmiration !== "unset") { + r.push(passive.output("FSPetiteAdmiration")); + if (arc.direction !== 0) { + if (arc.FSPetiteAdmiration >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Petite Admiration has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesPetiteAdmiration); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSPetiteAdmiration < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Petite Admiration.`); + arc.FSPetiteAdmiration = "unset"; + } + } + if (arc.FSPetiteAdmiration !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecHeight === 1) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's minuscule slaves, improving sales and helping social progress.`); + arc.FSPetiteAdmiration += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecHeight === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's shorter captures, improving sales and helping social progress.`); + arc.FSPetiteAdmiration += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSStatuesqueGlorification !== "unset") { + r.push(passive.output("FSStatuesqueGlorification")); + if (arc.direction !== 0) { + if (arc.FSStatuesqueGlorification >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Statuesque Glorification has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesStatuesqueGlorification); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSStatuesqueGlorification < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Statuesque Glorification.`); + arc.FSStatuesqueGlorification = "unset"; + } + } + if (arc.FSStatuesqueGlorification !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecHeight === 5) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's gigantic slaves, improving sales and helping social progress.`); + arc.FSStatuesqueGlorification += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecHeight === 4) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's taller captures, improving sales and helping social progress.`); + arc.FSStatuesqueGlorification += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSSlimnessEnthusiast !== "unset") { + r.push(passive.output("FSSlimnessEnthusiast")); + if (arc.direction !== 0) { + if (arc.FSSlimnessEnthusiast >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Slimness Enthusiasm has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesSlimnessEnthusiast); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + arc.FSSlimnessEnthusiastResearch = 1; + } + } else if (arc.FSSlimnessEnthusiast < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Slimness Enthusiasm.`); + arc.FSSlimnessEnthusiast = "unset"; + } + } + if (arc.FSSlimnessEnthusiast !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecInjection < 2) { + if (V.corp.SpecWeight < 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's trim slaves, improving sales and helping social progress.`); + arc.FSSlimnessEnthusiast += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + } else if (arc.FSAssetExpansionist !== "unset") { + r.push(passive.output("FSAssetExpansionist")); + if (arc.direction !== 0) { + if (arc.FSAssetExpansionist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSAssetExpansionistResearch = 1; + r.push(`Asset Expansionism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesAssetExpansionist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSAssetExpansionist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Asset Expansionism.`); + arc.FSAssetExpansionist = "unset"; + } + } + if (arc.FSAssetExpansionist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SPecInjection === 4) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class tits and ass, improving sales and helping social progress.`); + arc.FSAssetExpansionist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecInjection === 5) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's hugely endowed cows, improving sales and helping social progress.`); + arc.FSAssetExpansionist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SPecInjection === 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's stacked slaves, improving sales and helping social progress.`); + arc.FSAssetExpansionist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSPastoralist !== "unset") { + r.push(passive.output("FSPastoralist")); + if (arc.direction !== 0) { + if (arc.FSPastoralist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Pastoralism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesPastoralist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSPastoralist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Pastoralism.`); + arc.FSPastoralist = "unset"; + } + } + if (arc.FSPastoralist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecInjection === 5) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class milk producers, improving sales and helping social progress.`); + arc.FSPastoralist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecMilk > 0) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class milk producers, improving sales and helping social progress.`); + arc.FSPastoralist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } + } + } + } else if (arc.FSCummunism !== "unset") { + r.push(passive.output("FSCummunism")); + if (arc.direction !== 0) { + if (arc.FSCummunism >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Cummunism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesCummunism); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSCummunism < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Cummunism.`); + arc.FSCummunism = "unset"; + } + } + if (arc.FSCummunism !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecInjection === 5) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class cum producers, improving sales and helping social progress.`); + arc.FSCummunism += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecHormones === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's masculinized slaves, improving sales and helping social progress.`); + arc.FSCummunism += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecDick === 1 && V.corp.SpecBalls === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's slaves standard dicks and balls, improving sales and helping social progress.`); + arc.FSCummunism += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSPhysicalIdealist !== "unset") { + r.push(passive.output("FSPhysicalIdealist")); + if (arc.direction !== 0) { + if (arc.FSPhysicalIdealist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Physical Idealism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesPhysicalIdealist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSPhysicalIdealist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Physical Idealism.`); + arc.FSPhysicalIdealist = "unset"; + } + } + if (arc.FSPhysicalIdealist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecMuscle === 5) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's ripped chicks, improving sales and helping social progress.`); + arc.FSPhysicalIdealist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecMuscle === 4) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's toned ladies, improving sales and helping social progress.`); + arc.FSPhysicalIdealist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } else if (V.corp.SpecHeight > 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's tall ladies, improving sales and helping social progress.`); + arc.FSPhysicalIdealist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSHedonisticDecadence !== "unset") { + r.push(passive.output("FSHedonisticDecadence")); + if (arc.direction !== 0) { + if (arc.FSHedonisticDecadence >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + arc.FSHedonisticDecadenceResearch = 1; + r.push(`Decadent Hedonism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesHedonisticDecadence); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSHedonisticDecadence < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Decadent Hedonism.`); + arc.FSHedonisticDecadence = "unset"; + } + } + if (arc.FSHedonisticDecadence !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecTrust > 3) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's well kept, happy slaves, improving sales and helping social progress.`); + arc.FSHedonisticDecadence += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecSexEd === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's skilled slaves, improving sales and helping social progress.`); + arc.FSHedonisticDecadence += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSIncestFetishist !== "unset") { + r.push(passive.output("FSIncestFetishist")); + if (arc.direction !== 0) { + if (arc.FSIncestFetishist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Incest Fetishism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesIncestFetishist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSIncestFetishist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Incest Fetishism.`); + arc.FSIncestFetishist = "unset"; + } + } + if (arc.FSIncestFetishist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAge === 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's motherly slaves, especially those that look like peoples mothers, improving sales and helping social progress.`); + arc.FSIncestFetishist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSChattelReligionist !== "unset") { + r.push(passive.output("FSChattelReligionist")); + if (arc.direction !== 0) { + if (arc.FSChattelReligionist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Chattel Religionism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesChattelReligionist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSChattelReligionist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Chattel Religionism.`); + arc.FSChattelReligionist = "unset"; + } + } + if (arc.FSChattelReligionist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecSexEd === 2) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's holy sex slaves, improving sales and helping social progress.`); + arc.FSChattelReligionist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecSexEd === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's aspiring sexual acolytes, improving sales and helping social progress.`); + arc.FSChattelReligionist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + + if (arc.FSRomanRevivalist !== "unset") { + r.push(passive.output("FSRomanRevivalist")); + if (arc.direction !== 0) { + if (arc.FSRomanRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Roman Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesRomanRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSRomanRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Roman Revivalism.`); + arc.FSRomanRevivalist = "unset"; + } + } + if (arc.FSRomanRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecEducation > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly educated slaves, improving sales and helping social progress.`); + arc.FSRomanRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSNeoImperialist !== "unset") { + r.push(passive.output("FSNeoImperialist")); + if (arc.direction !== 0) { + if (arc.FSNeoImperialist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Neo-Imperialism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesNeoImperialist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSNeoImperialist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Neo-Imperialism.`); + arc.FSNeoImperialist = "unset"; + } + } + if (arc.FSNeoImperialist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecEducation > 0) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly educated slaves, improving sales and helping advocate for a hierarchical Imperial society.`); + arc.FSNeoImperialist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSAztecRevivalist !== "unset") { + r.push(passive.output("FSAztecRevivalist")); + if (arc.direction !== 0) { + if (arc.FSAztecRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Aztec Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesAztecRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSAztecRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Aztec Revivalism.`); + arc.FSAztecRevivalist = "unset"; + } + } + if (arc.FSAztecRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAccent === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's lovely mix of slave accents, improving sales and helping social progress.`); + arc.FSAztecRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSEgyptianRevivalist !== "unset") { + r.push(passive.output("FSEgyptianRevivalist")); + if (arc.direction !== 0) { + if (arc.FSEgyptianRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Egyptian Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesEgyptianRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSEgyptianRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Egyptian Revivalism.`); + arc.FSEgyptianRevivalist = "unset"; + } + } + if (arc.FSEgyptianRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAccent === 1) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's lovely mix of slave accents, improving sales and helping social progress.`); + arc.FSEgyptianRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSEdoRevivalist !== "unset") { + r.push(passive.output("FSEdoRevivalist")); + if (arc.direction !== 0) { + if (arc.FSEdoRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Edo Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesEdoRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSEdoRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Edo Revivalism.`); + arc.FSEdoRevivalist = "unset"; + } + } + if (arc.FSEdoRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecAccent === 2) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's linguistically perfect slaves, improving sales and helping social progress.`); + arc.FSEdoRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSArabianRevivalist !== "unset") { + r.push(passive.output("FSArabianRevivalist")); + if (arc.direction !== 0) { + if (arc.FSArabianRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Arabian Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesArabianRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSArabianRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Arabian Revivalism.`); + arc.FSArabianRevivalist = "unset"; + } + } + if (arc.FSArabianRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecDevotion === 5) { + r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's harem-ready devotees, improving sales and helping social progress.`); + arc.FSArabianRevivalist += 2; + App.Corporate.earnRevenue(corpBonus * 2, 'foreign'); + } else if (V.corp.SpecDevotion === 4) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly broken girls, improving sales and helping social progress.`); + arc.FSArabianRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } else if (arc.FSChineseRevivalist !== "unset") { + r.push(passive.output("FSChineseRevivalist")); + if (arc.direction !== 0) { + if (arc.FSChineseRevivalist >= V.FSLockinLevel) { + if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) { + r.push(`Chinese Revivalism has reached stability and acceptance there. The arcology has been renamed`); + arc.name = App.Neighbor.getUnusedName(setup.ArcologyNamesChineseRevivalist); + r.push(`<span class="bold">${arc.name}</span> to mark the occasion.`); + } + } else if (arc.FSChineseRevivalist < 0) { + r.push(`${arc.name} <span class="cyan">has given up</span> on Chinese Revivalism.`); + arc.FSChineseRevivalist = "unset"; + } + } + if (arc.FSChineseRevivalist !== "unset") { + if (V.corp.Incorporated === 1) { + if (V.corp.SpecIntelligence === 3) { + r.push(`It's a <span class="lightgreen">good market</span> for your corporation's intelligent Head Girl prospects, improving sales and helping social progress.`); + arc.FSChineseRevivalist += 1; + App.Corporate.earnRevenue(corpBonus, 'foreign'); + } + } + } + } + FutureSocieties.overflowToInfluence(i); + + /* FUTURE SOCIETY ADOPTION */ + + if (arc.direction !== 0) { + if (societiesAdopted < V.FSCreditCount) { + if ((arc.rival === 1) || (societiesAdopted < (arc.prosperity / 25) + (V.week / 25) - 3)) { + r.push(neighborsFSadoption(i)); + } + } + } + + /* INFLUENCE RECEPTION */ + + for (const arc2 of V.arcologies) { + if (arc2.direction !== arc.direction) { + if (arc2.influenceTarget === arc.direction) { + arc2.influenceBonus = Math.clamp(arc2.influenceBonus, 0, V.FSLockinLevel); + let appliedInfluenceBonus = Math.trunc(arc2.influenceBonus * 0.1); + arc2.influenceBonus -= appliedInfluenceBonus * 2; + if (V.policies.culturalOpenness === 1) { + if ((arc.direction === 0) || (arc2.direction === 0)) { + appliedInfluenceBonus *= 2; + } + } else if (V.policies.culturalOpenness === -1) { + if ((arc.direction === 0) || (arc2.direction === 0)) { + appliedInfluenceBonus /= 2; + } + } + if (arc.ownership >= 100) { + appliedInfluenceBonus /= 2; + } + desc = []; + let alignment = 0; + + if (arc2.FSSubjugationist !== "unset" && arc2.FSSubjugationist > 60) { + if (arc.FSSubjugationist !== "unset") { + if (arc2.FSSubjugationistRace === arc.FSSubjugationistRace) { + arc.FSSubjugationist += Math.trunc((arc2.FSSubjugationist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSSubjugationist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its racially aligned Subjugationism"); + } else { + arc.FSSubjugationist -= Math.trunc((arc2.FSSubjugationist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Subjugationism"); + } + } else if ((arc.FSSupremacist !== "unset") && (arc2.FSSubjugationistRace === arc.FSSupremacistRace)) { + arc.FSSupremacist -= Math.trunc((arc2.FSSubjugationist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its opposing Supremacism"); + } + } + if (arc2.FSSupremacist !== "unset" && arc2.FSSupremacist > 60) { + if (arc.FSSupremacist !== "unset") { + if (arc2.FSSupremacistRace === arc.FSSupremacistRace) { + arc.FSSupremacist += Math.trunc((arc2.FSSupremacist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSSupremacist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its racially aligned Supremacism"); + } else { + arc.FSSupremacist -= Math.trunc((arc2.FSSupremacist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Supremacism"); + } + } else if ((arc.FSSubjugationist !== "unset") && (arc2.FSSupremacistRace === arc.FSSubjugationistRace)) { + arc.FSSubjugationist -= Math.trunc((arc2.FSSupremacist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its opposing Subjugationism"); + } + } + if (arc2.FSRepopulationFocus !== "unset" && arc2.FSRepopulationFocus > 60) { + if (arc.FSRepopulationFocus !== "unset") { + arc.FSRepopulationFocus += Math.trunc((arc2.FSRepopulationFocus - 60) / 4) + appliedInfluenceBonus; + if (arc.FSRepopulationFocus > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Repopulationism"); + } else if (arc.FSRestart !== "unset") { + arc.FSRestart -= Math.trunc((arc2.FSRepopulationFocus - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Eugenics"); + } + } else if (arc2.FSRestart !== "unset" && arc2.FSRestart > 60) { + if (arc.FSRestart !== "unset") { + arc.FSRestart += Math.trunc((arc2.FSRestart - 60) / 4) + appliedInfluenceBonus; + if (arc.FSRestart > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Eugenics"); + } else if (arc.FSRepopulationFocus !== "unset") { + arc.FSRepopulationFocus -= Math.trunc((arc2.FSRestart - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Repopulation Efforts"); + } + } + if (arc2.FSGenderRadicalist !== "unset" && arc2.FSGenderRadicalist > 60) { + if (arc.FSGenderRadicalist !== "unset") { + arc.FSGenderRadicalist += Math.trunc((arc2.FSGenderRadicalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSGenderRadicalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Gender Radicalism"); + } else if (arc.FSGenderFundamentalist !== "unset") { + arc.FSGenderFundamentalist -= Math.trunc((arc2.FSGenderRadicalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Gender Fundamentalism"); + } + } else if (arc2.FSGenderFundamentalist !== "unset" && arc2.FSGenderFundamentalist > 60) { + if (arc.FSGenderFundamentalist !== "unset") { + arc.FSGenderFundamentalist += Math.trunc((arc2.FSGenderFundamentalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSGenderFundamentalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Gender Fundamentalism"); + } else if (arc.FSGenderRadicalist !== "unset") { + arc.FSGenderRadicalist -= Math.trunc((arc2.FSGenderFundamentalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Gender Radicalism"); + } + } + if (arc2.FSPaternalist !== "unset" && arc2.FSPaternalist > 60) { + if (arc.FSPaternalist !== "unset") { + arc.FSPaternalist += Math.trunc((arc2.FSPaternalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSPaternalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Paternalism"); + } else if (arc.FSDegradationist !== "unset") { + arc.FSDegradationist -= Math.trunc((arc2.FSPaternalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Degradationism"); + } + } else if (arc2.FSDegradationist !== "unset" && arc2.FSDegradationist > 60) { + if (arc.FSDegradationist !== "unset") { + arc.FSDegradationist += Math.trunc((arc2.FSDegradationist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSDegradationist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Degradationism"); + } else if (arc.FSPaternalist !== "unset") { + arc.FSPaternalist -= Math.trunc((arc2.FSDegradationist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Paternalism"); + } + } + if (arc2.FSIntellectualDependency !== "unset" && arc2.FSIntellectualDependency > 60) { + if (arc.FSIntellectualDependency !== "unset") { + arc.FSIntellectualDependency += Math.trunc((arc2.FSIntellectualDependency - 60) / 4) + appliedInfluenceBonus; + if (arc.FSIntellectualDependency > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Intellectual Dependency"); + } else if (arc.FSSlaveProfessionalism !== "unset") { + arc.FSSlaveProfessionalism -= Math.trunc((arc2.FSIntellectualDependency - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Slave Professionalism"); + } + } else if (arc2.FSSlaveProfessionalism !== "unset" && arc2.FSSlaveProfessionalism > 60) { + if (arc.FSSlaveProfessionalism !== "unset") { + arc.FSSlaveProfessionalism += Math.trunc((arc2.FSSlaveProfessionalism - 60) / 4) + appliedInfluenceBonus; + if (arc.FSSlaveProfessionalism > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Slave Professionalism"); + } else if (arc.FSIntellectualDependency !== "unset") { + arc.FSIntellectualDependency -= Math.trunc((arc2.FSSlaveProfessionalism - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Intellectual Dependency"); + } + } + if (arc2.FSBodyPurist !== "unset" && arc2.FSBodyPurist > 60) { + if (arc.FSBodyPurist !== "unset") { + arc.FSBodyPurist += Math.trunc((arc2.FSBodyPurist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSBodyPurist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Body Purism"); + } else if (arc.FSTransformationFetishist !== "unset") { + arc.FSTransformationFetishist -= Math.trunc((arc2.FSBodyPurist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Transformation Fetishism"); + } + } else if (arc2.FSTransformationFetishist !== "unset" && arc2.FSTransformationFetishist > 60) { + if (arc.FSTransformationFetishist !== "unset") { + arc.FSTransformationFetishist += Math.trunc((arc2.FSTransformationFetishist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSTransformationFetishist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Transformation Fetishism"); + } else if (arc.FSBodyPurist !== "unset") { + arc.FSBodyPurist -= Math.trunc((arc2.FSTransformationFetishist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Body Purism"); + } + } + if (arc2.FSYouthPreferentialist !== "unset" && arc2.FSYouthPreferentialist > 60) { + if (arc.FSYouthPreferentialist !== "unset") { + arc.FSYouthPreferentialist += Math.trunc((arc2.FSYouthPreferentialist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSYouthPreferentialist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Youth Preferentialism"); + } else if (arc.FSMaturityPreferentialist !== "unset") { + arc.FSMaturityPreferentialist -= Math.trunc((arc2.FSYouthPreferentialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Maturity Preferentialism"); + } + } else if (arc2.FSMaturityPreferentialist !== "unset" && arc2.FSMaturityPreferentialist > 60) { + if (arc.FSMaturityPreferentialist !== "unset") { + arc.FSMaturityPreferentialist += Math.trunc((arc2.FSMaturityPreferentialist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSMaturityPreferentialist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Maturity Preferentialism"); + } else if (arc.FSYouthPreferentialist !== "unset") { + arc.FSYouthPreferentialist -= Math.trunc((arc2.FSMaturityPreferentialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Youth Preferentialism"); + } + } + if (arc2.FSPetiteAdmiration !== "unset" && arc2.FSPetiteAdmiration > 60) { + if (arc.FSPetiteAdmiration !== "unset") { + arc.FSPetiteAdmiration += Math.trunc((arc2.FSPetiteAdmiration - 60) / 4) + appliedInfluenceBonus; + if (arc.FSPetiteAdmiration > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Petite Admiration"); + } else if (arc.FSStatuesqueGlorification !== "unset") { + arc.FSStatuesqueGlorification -= Math.trunc((arc2.FSPetiteAdmiration - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Statuesque Glorification"); + } + } else if (arc2.FSStatuesqueGlorification !== "unset" && arc2.FSStatuesqueGlorification > 60) { + if (arc.FSStatuesqueGlorification !== "unset") { + arc.FSStatuesqueGlorification += Math.trunc((arc2.FSStatuesqueGlorification - 60) / 4) + appliedInfluenceBonus; + if (arc.FSStatuesqueGlorification > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Statuesque Glorification"); + } else if (arc.FSPetiteAdmiration !== "unset") { + arc.FSPetiteAdmiration -= Math.trunc((arc2.FSStatuesqueGlorification - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Petite Admiration"); + } + } + if (arc2.FSSlimnessEnthusiast !== "unset" && arc2.FSSlimnessEnthusiast > 60) { + if (arc.FSSlimnessEnthusiast !== "unset") { + arc.FSSlimnessEnthusiast += Math.trunc((arc2.FSSlimnessEnthusiast - 60) / 4) + appliedInfluenceBonus; + if (arc.FSSlimnessEnthusiast > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Slimness Enthusiasm"); + } else if (arc.FSAssetExpansionist !== "unset") { + arc.FSAssetExpansionist -= Math.trunc((arc2.FSSlimnessEnthusiast - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Asset Expansionism"); + } + } else if (arc2.FSAssetExpansionist !== "unset" && arc2.FSAssetExpansionist > 60) { + if (arc.FSAssetExpansionist !== "unset") { + arc.FSAssetExpansionist += Math.trunc((arc2.FSAssetExpansionist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSAssetExpansionist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Asset Expansionism"); + } else if (arc.FSSlimnessEnthusiast !== "unset") { + arc.FSSlimnessEnthusiast -= Math.trunc((arc2.FSAssetExpansionist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Slimness Enthusiasm"); + } + } + if (arc2.FSPastoralist !== "unset" && arc2.FSPastoralist > 60) { + if (arc.FSPastoralist !== "unset") { + arc.FSPastoralist += Math.trunc((arc2.FSPastoralist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSPastoralist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Pastoralism"); + } else if (arc.FSCummunism !== "unset") { + arc.FSCummunism -= Math.trunc((arc2.FSPastoralist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Cummunism"); + } + } else if (arc2.FSCummunism !== "unset" && arc2.FSCummunism > 60) { + if (arc.FSCummunism !== "unset") { + arc.FSCummunism += Math.trunc((arc2.FSCummunism - 60) / 4) + appliedInfluenceBonus; + if (arc.FSCummunism > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Cummunism"); + } else if (arc.FSPastoralist !== "unset") { + arc.FSPastoralist -= Math.trunc((arc2.FSCummunism - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Pastoralism"); + } + } + if (arc2.FSPhysicalIdealist !== "unset" && arc2.FSPhysicalIdealist > 60) { + if (arc.FSPhysicalIdealist !== "unset") { + arc.FSPhysicalIdealist += Math.trunc((arc2.FSPhysicalIdealist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSPhysicalIdealist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Physical Idealism"); + } else if (arc.FSHedonisticDecadence !== "unset") { + arc.FSHedonisticDecadence -= Math.trunc((arc2.FSPhysicalIdealist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Hedonism"); + } + } else if (arc2.FSHedonisticDecadence !== "unset" && arc2.FSHedonisticDecadence > 60) { + if (arc.FSHedonisticDecadence !== "unset") { + arc.FSHedonisticDecadence += Math.trunc((arc2.FSHedonisticDecadence - 60) / 4) + appliedInfluenceBonus; + if (arc.FSHedonisticDecadence > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Hedonism"); + } else if (arc.FSPhysicalIdealist !== "unset") { + arc.FSPhysicalIdealist -= Math.trunc((arc2.FSHedonisticDecadence - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its Physical Idealism"); + } + } + if (arc2.FSIncestFetishist !== "unset" && arc2.FSIncestFetishist > 60) { + if (arc.FSIncestFetishist !== "unset") { + arc.FSIncestFetishist += Math.trunc((arc2.FSIncestFetishist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSIncestFetishist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Incest Fetishism"); + } + } + if (arc2.FSChattelReligionist !== "unset" && arc2.FSChattelReligionist > 60) { + if (arc.FSChattelReligionist !== "unset") { + arc.FSChattelReligionist += Math.trunc((arc2.FSChattelReligionist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSChattelReligionist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Chattel Religionism"); + } + } + if (arc2.FSRomanRevivalist !== "unset" && arc2.FSRomanRevivalist > 60) { + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist += Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSRomanRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Roman Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSRomanRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSAztecRevivalist !== "unset" && arc2.FSAztecRevivalist > 60) { + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist += Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSAztecRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Aztec Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSAztecRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSEgyptianRevivalist !== "unset" && arc2.FSEgyptianRevivalist > 60) { + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist += Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSEgyptianRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Egyptian Revivalism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSEgyptianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSEdoRevivalist !== "unset" && arc2.FSEdoRevivalist > 60) { + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist += Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSEdoRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Edo Revivalism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSEdoRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSArabianRevivalist !== "unset" && arc2.FSArabianRevivalist > 60) { + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist += Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSArabianRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Arabian Revivalism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSArabianRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSChineseRevivalist !== "unset" && arc2.FSChineseRevivalist > 60) { + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist += Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSChineseRevivalist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Chinese Revivalism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Imperialism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSChineseRevivalist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } else if (arc2.FSNeoImperialist !== "unset" && arc2.FSNeoImperialist > 60) { + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist += Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + if (arc.FSNeoImperialist > V.FSLockinLevel) { + alignment += 1; + } + desc.push("helping to advance its Neo-Imperialism"); + } else if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } else if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist -= Math.trunc((arc2.FSNeoImperialist - 60) / 4) + appliedInfluenceBonus; + desc.push("attacking its incompatible Revivalism"); + } + } + + if (desc.length === 0) { + r.push(`<span class="bold">${arc2.name}</span> attempts to influence it, but has no significant impacts.`); + } else if (desc.length > 2) { + r.push(`<span class="bold">${arc2.name}</span>'s mature culture influences ${arc.name}, ${desc.slice(0, desc.length - 1).join(', ') + ", and " + desc.slice(-1)}.`); + } else if (desc.length === 2) { + r.push(`<span class="bold">${arc2.name}</span>'s culture influences ${arc.name}'s ${desc[0]} and ${desc[1]}.`); + } else { + r.push(`<span class="bold">${arc2.name}</span>'s culture is beginning to influence ${arc.name}'s ${desc[0]}.`); + } + + if (appliedInfluenceBonus > 0) { + if (appliedInfluenceBonus < 5) { + r.push(`${arc2.name} is societally advanced, giving it extra influence.`); + } else { + r.push(`${arc2.name} is societally fanatical, lending it great influence.`); + } + } + if (arc.ownership >= 100) { + if (appliedInfluenceBonus > 0) { + r.push(`However,`); + } + r.push(`${arc.name} is under completely unified control, making it resistant to change.`); + } + + if (arc2.direction !== 0) { + if (desc.length === 0) { + r.push(`<span class="bold">${arc2.name}</span> is not satisfied with the impact its directed influence is having, and withdraws it with the intention of targeting it elsewhere.`); + arc2.influenceTarget = -1; + } else if (alignment >= 4) { + r.push(`<span class="bold">${arc2.name}</span> is satisfied that its influence has brought ${arc.name} into alignment, and withdraws its direct influence with the intention of targeting it elsewhere.`); + arc2.influenceTarget = -1; + } + } + } + } + } + + if (arc.direction !== 0) { + if (arc.influenceTarget === -1) { + App.Neighbor.selectInfluenceTarget(i); + } + arc.prosperity = Math.clamp(arc.prosperity, 1, 300); + arc.ownership = Math.clamp(arc.ownership, 0, 100); + arc.PCminority = Math.clamp(arc.PCminority, 0, 100); + arc.minority = Math.clamp(arc.minority, 0, 100); + owned = arc.ownership + arc.PCminority + arc.minority; + if (arc.government !== "your agent" && arc.government !== "your trustees" && arc.rival !== 1) { + if (owned < 10) { + arc.ownership += 10; + /* Someone needs to own something */ + } else if (owned > 100) { + arc.minority = Math.clamp(100 - arc.ownership - arc.PCminority, 0, 100); + if (arc.ownership + arc.PCminority > 100) { + arc.ownership = 100 - arc.PCminority; + } + } + } + } + App.Events.addParagraph(el, r); + } + + /* PEACEKEEPERS */ + + if (V.plot && V.peacekeepers !== 0) { + let prisoners; + let r = []; + if (V.peacekeepers.strength >= 50) { + prisoners = Math.trunc(V.peacekeepers.attitude / 10) + random(0, 10); + r.push(`General ${V.peacekeepers.generalName}'s little empire near the arcology`); + if (V.peacekeepers.attitude >= 100) { + r.push(`offers ${prisoners} menial slaves as tribute; having the area as an avowed client state <span class="green">improves your reputation.</span>`); + V.peacekeepers.attitude = 100; + repX(100, "peacekeepers"); + } else { + r.push(`delivers ${prisoners} menial slaves to you in payment for your past support.`); + } + V.menials += prisoners; + } else if (V.peacekeepers.strength < 0) { + r.push(`<span class="yellow">The peacekeeping force led by General ${V.peacekeepers.generalName} in the troubled area near the Free City has been withdrawn.</span>`); + if (V.peacekeepers.undermining) { + r.push(`Your misinformation campaign against it in the old world media was successful. Before long, everyone in the Free City is confident that you're somehow responsible, <span class="green">greatly improving your reputation.</span>`); + V.peacekeepers = 0; + V.peacekeepersGone = 1; + repX(2000, "peacekeepers"); + } else { + r.push(`The cost was ultimately too high. The time when old world countries could afford to waste billions on military adventurism is gone. It will not return.`); + V.peacekeepers = 0; + V.peacekeepersGone = 1; + } + } else { + r.push(`There's a peacekeeping force led by General ${V.peacekeepers.generalName} in the troubled area near the Free City.`); + if (V.peacekeepers.undermining) { + r.push(`You're paying for a media misinformation campaign in the old world country that sent him. It`); + V.peacekeepers.strength -= V.peacekeepers.undermining / 10000; + if (V.peacekeepers.strength < 10) { + r.push(`has had a significant impact; one of the nation's two major political parties now favors withdrawing the peacekeepers.`); + } else { + r.push(`has not had a significant impact yet; only a few fringe figures are arguing against the mission.`); + } + } + r.push(`Unfortunately, the presence of so much old world military power near the Free City causes <span class="red">public concern.</span>`); + repX(-100, "peacekeepers"); + } + App.Events.addParagraph(el, r); + } + return el; + + /** + * + * @param {number} i + */ + function neighborsFSadoption(i) { + const arc = V.arcologies[i]; + const el = document.createElement("p"); + let r = []; + const {heU, girlU} = getNonlocalPronouns(0).appendSuffix('U'); + + r.push(`<span class="bold">${arc.name},</span> your`); + if (arc.direction === 0) { + r.push(`arcology,`); + } else { + r.push(`neighbor to the ${arc.direction},`); + } + r.push(`is prosperous enough that`); + switch (arc.government) { + case "elected officials": + r.push(`its elected officials consider`); + break; + case "a committee": + r.push(`the committee that controls it considers`); + break; + case "an oligarchy": + case "your trustees": + r.push(`its leading citizens consider`); + break; + case "an individual": + r.push(`its owner and its citizens consider`); + break; + case "your agent": + r.push(`<span class="deeppink">your agent</span> and its citizens consider`); + break; + case "a corporation": + r.push(`its board of directors considers`); + break; + default: + r.push(`its citizens consider`); + } + r.push(`societal development.`); + + const validFSes = FutureSocieties.validAdoptions(i); + + fsAdoption(); + + App.Events.addNode(el, r); + return el; + + function fsAdoption() { + /* PRIME RIVALRY FS ADOPTION - IGNORES VALIDITY */ + + if (arc.rival === 1) { + if (arc.government === "an individual") { + if (V.rivalryFSAdopted === 0) { + V.rivalryFSAdopted = 1; + desc = "Its owner is"; + switch (V.rivalryFS) { + case "Racial Subjugationism": + if (arc.FSSubjugationist !== "unset") { + arc.FSSubjugationist = "unset"; + } + r.push(`${desc} preoccupied by belief in the superiority of the ${V.arcologies[0].FSSubjugationistRace} race, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSubjugationistRace} Supremacy.</span>`); + arc.FSSupremacist = 5; + arc.FSSupremacistRace = V.arcologies[0].FSSubjugationistRace; + return; + case "Racial Supremacism": + if (arc.FSSupremacist !== "unset") { + arc.FSSupremacist = "unset"; + } + r.push(`${desc} preoccupied by a racial animus towards ${V.arcologies[0].FSSupremacistRace} people, leaving the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSupremacistRace} Subjugation.</span>`); + arc.FSSubjugationist = 5; + arc.FSSubjugationistRace = V.arcologies[0].FSSupremacistRace; + return; + case "Repopulation Focus": + if (arc.FSRepopulationFocus !== "unset") { + arc.FSRepopulationFocus = "unset"; + } + r.push(`${desc} obsessed with building a new society based on its Societal Elite, leading the arcology to <span class="yellow">adopt Eugenics.</span>`); + arc.FSRestart = 5; + return; + case "Eugenics": + if (arc.FSRestart !== "unset") { + arc.FSRestart = "unset"; + } + r.push(`${desc} obsessed with breeding a new society, leading the arcology to <span class="yellow">adopt Repopulationism.</span>`); + arc.FSRepopulationFocus = 5; + return; + case "Gender Radicalism": + if (arc.FSGenderRadicalist !== "unset") { + arc.FSGenderRadicalist = "unset"; + } + r.push(`${desc} enthusiastic about knocking slaves up, leading the arcology to <span class="yellow">adopt Gender Fundamentalism.</span>`); + arc.FSGenderFundamentalist = 5; + return; + case "Gender Fundamentalism": + if (arc.FSGenderFundamentalist !== "unset") { + arc.FSGenderFundamentalist = "unset"; + } + r.push(`${desc} enthusiastic about fucking slaves in the butt, leading the arcology to <span class="yellow">adopt Gender Radicalism.</span>`); + arc.FSGenderRadicalist = 5; + return; + case "Paternalism": + if (arc.FSPaternalist !== "unset") { + arc.FSPaternalist = "unset"; + } + r.push(`${desc} partial to screaming and struggling, leading the arcology to <span class="yellow">adopt Degradationism.</span>`); + arc.FSDegradationist = 5; + return; + case "Degradationism": + if (arc.FSDegradationist !== "unset") { + arc.FSDegradationist = "unset"; + } + r.push(`${desc} devoted to their slaves' advancement, leading the arcology to <span class="yellow">adopt Paternalism.</span>`); + arc.FSPaternalist = 5; + return; + case "Intellectual Dependency": + if (arc.FSIntellectualDependency !== "unset") { + arc.FSIntellectualDependency = "unset"; + } + r.push(`${desc} obsessed with crafting the perfect slave, leading the arcology to <span class="yellow">adopt Slave Professionalism.</span>`); + arc.FSSlaveProfessionalism = 5; + return; + case "Slave Professionalism": + if (arc.FSSlaveProfessionalism !== "unset") { + arc.FSSlaveProfessionalism = "unset"; + } + r.push(`${desc} worried that they may one day be outsmarted by their chattel, leading the arcology to <span class="yellow">adopt Intellectual Dependency.</span>`); + arc.FSIntellectualDependency = 5; + return; + case "Body Purism": + if (arc.FSBodyPurist !== "unset") { + arc.FSBodyPurist = "unset"; + } + r.push(`${desc} fascinated with extreme surgery, leading the arcology to <span class="yellow">adopt Transformation Fetishism.</span>`); + arc.FSTransformationFetishist = 5; + return; + case "Transformation Fetishism": + if (arc.FSTransformationFetishist !== "unset") { + arc.FSTransformationFetishist = "unset"; + } + r.push(`${desc} concerned by trends in their slaves' health, leading the arcology to <span class="yellow">adopt Body Purism.</span>`); + arc.FSBodyPurist = 5; + return; + case "Youth Preferentialism": + if (arc.FSYouthPreferentialist !== "unset") { + arc.FSYouthPreferentialist = "unset"; + } + r.push(`${desc} devoted to time in bed with their MILF slaves, leading the arcology to <span class="yellow">adopt Maturity Preferentialism.</span>`); + arc.FSMaturityPreferentialist = 5; + return; + case "Maturity Preferentialism": + if (arc.FSMaturityPreferentialist !== "unset") { + arc.FSMaturityPreferentialist = "unset"; + } + r.push(`${desc} devoted to fucking nubile young slaves, leading the arcology to <span class="yellow">adopt Youth Preferentialism.</span>`); + arc.FSYouthPreferentialist = 5; + return; + case "Petite Admiration": + if (arc.FSPetiteAdmiration !== "unset") { + arc.FSPetiteAdmiration = "unset"; + } + r.push(`${desc} convinced that tall equals beauty, leading the arcology to <span class="yellow">adopt Statuesque Glorification.</span>`); + arc.FSSlaveProfessionalism = 5; + return; + case "Statuesque Glorification": + if (arc.FSStatuesqueGlorification !== "unset") { + arc.FSStatuesqueGlorification = "unset"; + } + r.push(`${desc} enamored by those shorter than them, leading the arcology to <span class="yellow">adopt Petite Admiration.</span>`); + arc.FSPetiteAdmiration = 5; + return; + case "Slimness Enthusiasm": + if (arc.FSSlimnessEnthusiast !== "unset") { + arc.FSSlimnessEnthusiast = "unset"; + } + r.push(`${desc} loves boobs, the bigger, the better, leading the arcology to <span class="yellow">adopt Asset Expansionism.</span>`); + arc.FSAssetExpansionist = 5; + return; + case "Asset Expansionism": + if (arc.FSAssetExpansionist !== "unset") { + arc.FSAssetExpansionist = "unset"; + } + r.push(`${desc} loves a slim slave with tight holes, leading the arcology to <span class="yellow">adopt Slimness Enthusiasm.</span>`); + arc.FSSlimnessEnthusiast = 5; + return; + case "Pastoralism": + if (arc.FSPastoralist !== "unset") { + arc.FSPastoralist = "unset"; + } + r.push(`${desc} loves cum, leading the arcology to <span class="yellow">adopt Cummunism.</span>`); + arc.FSCummunism = 5; + return; + case "Cummunism": + if (arc.FSCummunism !== "unset") { + arc.FSCummunism = "unset"; + } + r.push(`${desc} addicted to breast milk straight from the nipple, leading the arcology to <span class="yellow">adopt Pastoralism.</span>`); + arc.FSPastoralist = 5; + return; + case "Hedonistic Decadence": + if (arc.FSHedonisticDecadence !== "unset") { + arc.FSHedonisticDecadence = "unset"; + } + r.push(`${desc} devoted to spending time in the gym, leading the arcology to <span class="yellow">adopt Physical Idealism.</span>`); + arc.FSPhysicalIdealist = 5; + return; + case "Physical Idealism": + if (arc.FSPhysicalIdealist !== "unset") { + arc.FSPhysicalIdealist = "unset"; + } + r.push(`${desc} addicted to pleasure, leading the arcology to <span class="yellow">adopt Decadent Hedonism.</span>`); + arc.FSHedonisticDecadence = 5; + return; + case "Chattel Religionism": + if (arc.FSChattelReligionist !== "unset") { + arc.FSChattelReligionist = "unset"; + } + r.push(`${desc} open minded, leading the arcology to <span class="yellow">permit cultural freedom.</span>`); + arc.FSNull = 5; + return; + case "Multiculturalism": + if (arc.FSNull !== "unset") { + arc.FSNull = "unset"; + } + r.push(`${desc} devoutly religious, and interested in a reformation, leading the arcology to <span class="yellow">adopt Chattel Religionism.</span>`); + arc.FSChattelReligionist = 5; + return; + case "Roman Revivalism": + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist = "unset"; + } + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist = "unset"; + } + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist = "unset"; + } + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist = "unset"; + } + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by ancient Aztec history, leading the arcology to <span class="yellow">adopt Aztec Revivalism.</span>`); + arc.FSAztecRevivalist = 5; + return; + case "Neo-Imperialism": + case "Egyptian Revivalism": + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist = "unset"; + } + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist = "unset"; + } + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist = "unset"; + } + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist = "unset"; + } + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by Arabian romanticism, leading the arcology to <span class="yellow">adopt Arabian Revivalism.</span>`); + arc.FSArabianRevivalist = 5; + return; + case "Edo Revivalism": + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist = "unset"; + } + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist = "unset"; + } + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist = "unset"; + } + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist = "unset"; + } + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by the long tale of Chinese history, leading the arcology to <span class="yellow">adopt Chinese Revivalism.</span>`); + arc.FSChineseRevivalist = 5; + return; + case "Arabian Revivalism": + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist = "unset"; + } + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist = "unset"; + } + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist = "unset"; + } + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist = "unset"; + } + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by ancient Egyptian history, leading the arcology to <span class="yellow">adopt Egyptian Revivalism.</span>`); + arc.FSEgyptianRevivalist = 5; + return; + case "Chinese Revivalism": + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist = "unset"; + } + if (arc.FSRomanRevivalist !== "unset") { + arc.FSRomanRevivalist = "unset"; + } + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist = "unset"; + } + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist = "unset"; + } + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by Japanese history, leading the arcology to <span class="yellow">adopt Edo Revivalism.</span>`); + arc.FSEdoRevivalist = 5; + return; + case "Aztec Revivalism": + if (arc.FSAztecRevivalist !== "unset") { + arc.FSAztecRevivalist = "unset"; + } + if (arc.FSEgyptianRevivalist !== "unset") { + arc.FSEgyptianRevivalist = "unset"; + } + if (arc.FSEdoRevivalist !== "unset") { + arc.FSEdoRevivalist = "unset"; + } + if (arc.FSArabianRevivalist !== "unset") { + arc.FSArabianRevivalist = "unset"; + } + if (arc.FSChineseRevivalist !== "unset") { + arc.FSChineseRevivalist = "unset"; + } + if (arc.FSNeoImperialist !== "unset") { + arc.FSNeoImperialist = "unset"; + } + r.push(`${desc} fascinated by classical Roman history, leading the arcology to <span class="yellow">adopt Roman Revivalism.</span>`); + arc.FSRomanRevivalist = 5; + return; + default: + V.rivalryFSAdopted = 0; + } + } else { // RIVAL ADOPTION + desc = "Its owner is"; + if (V.arcologies[0].FSSubjugationist > random(5, 60)) { + if (validFSes.includes("FSSupremacist") && (arc.FSSubjugationist === "unset") || (arc.FSSubjugationistRace !== V.arcologies[0].FSSubjugationistRace)) { + r.push(`${desc} preoccupied by belief in the superiority of the ${V.arcologies[0].FSSubjugationistRace} race, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSubjugationistRace} Supremacy.</span>`); + arc.FSSupremacist = 5; + arc.FSSupremacistRace = V.arcologies[0].FSSubjugationistRace; + return; + } + } + if (V.arcologies[0].FSSupremacist > random(5, 60)) { + if ((validFSes.includes("FSSubjugationist") && (arc.FSSupremacist === "unset") || (arc.FSSupremacistRace !== V.arcologies[0].FSSupremacistRace))) { + r.push(`${desc} preoccupied by a racial animus towards ${V.arcologies[0].FSSupremacistRace} people, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSupremacistRace} Subjugation.</span>`); + arc.FSSubjugationist = 5; + arc.FSSubjugationistRace = V.arcologies[0].FSSupremacistRace; + return; + } + } + if (V.arcologies[0].FSRestart > random(5, 60)) { + if (validFSes.includes("FSRepopulationFocus")) { + r.push(`${desc} obsessed with breeding a new society, leading the arcology to <span class="yellow">adopt Repopulationism.</span>`); + arc.FSRepopulationFocus = 5; + return; + } + } else if (V.arcologies[0].FSRepopulationFocus > random(5, 60)) { + if (validFSes.includes("FSRestart")) { + r.push(`${desc} obsessed with creating a new, better society, leading the arcology to <span class="yellow">adopt Eugenics.</span>`); + arc.FSRestart = 5; + return; + } + } + if (V.arcologies[0].FSGenderRadicalist > random(5, 60)) { + if (validFSes.includes("FSGenderFundamentalist")) { + r.push(`${desc} enthusiastic about knocking slaves up, leading the arcology to <span class="yellow">adopt Gender Fundamentalism.</span>`); + arc.FSGenderFundamentalist = 5; + return; + } + } else if (V.arcologies[0].FSGenderFundamentalist > random(5, 60)) { + if (validFSes.includes("FSGenderRadicalist")) { + r.push(`${desc} enthusiastic about fucking slaves in the butt, leading the arcology to <span class="yellow">adopt Gender Radicalism.</span>`); + arc.FSGenderRadicalist = 5; + return; + } + } + if (V.arcologies[0].FSPaternalist > random(5, 60)) { + if (validFSes.includes("FSDegradationist")) { + r.push(`${desc} partial to screaming and struggling, leading the arcology to <span class="yellow">adopt Degradationism.</span>`); + arc.FSDegradationist = 5; + return; + } + } else if (V.arcologies[0].FSDegradationist > random(5, 60)) { + if (validFSes.includes("FSPaternalist")) { + r.push(`${desc} devoted to their slaves' advancement, leading the arcology to <span class="yellow">adopt Paternalism.</span>`); + arc.FSPaternalist = 5; + return; + } + } + if (V.arcologies[0].FSIntellectualDependency > random(5, 60)) { + if (validFSes.includes("FSSlaveProfessionalism")) { + r.push(`${desc} obsessed with crafting the perfect slave, leading the arcology to <span class="yellow">adopt Slave Professionalism.</span>`); + arc.FSSlaveProfessionalism = 5; + return; + } + } else if (V.arcologies[0].FSSlaveProfessionalism > random(5, 60)) { + if (validFSes.includes("FSIntellectualDependency")) { + r.push(`${desc} worried that they may one day be outsmarted by their chattel, leading the arcology to <span class="yellow">adopt Intellectual Dependency.</span>`); + arc.FSIntellectualDependency = 5; + return; + } + } + if (V.arcologies[0].FSBodyPurist > random(5, 60)) { + if (validFSes.includes("FSTransformationFetishist")) { + r.push(`${desc} fascinated with extreme surgery, leading the arcology to <span class="yellow">adopt Transformation Fetishism.</span>`); + arc.FSTransformationFetishist = 5; + return; + } + } else if (V.arcologies[0].FSTransformationFetishist > random(5, 60)) { + if (validFSes.includes("FSBodyPurist")) { + r.push(`${desc} concerned by trends in their slaves' health, leading the arcology to <span class="yellow">adopt Body Purism.</span>`); + arc.FSBodyPurist = 5; + return; + } + } + if (V.arcologies[0].FSYouthPreferentialist > random(5, 60)) { + if (validFSes.includes("FSMaturityPreferentialist")) { + r.push(`${desc} devoted to time in bed with their MILF slaves, leading the arcology to <span class="yellow">adopt Maturity Preferentialism.</span>`); + arc.FSMaturityPreferentialist = 5; + return; + } + } else if (V.arcologies[0].FSMaturityPreferentialist > random(5, 60)) { + if (validFSes.includes("FSYouthPreferentialist")) { + r.push(`${desc} devoted to fucking nubile young slaves, leading the arcology to <span class="yellow">adopt Youth Preferentialism.</span>`); + arc.FSYouthPreferentialist = 5; + return; + } + } + if (V.arcologies[0].FSPetiteAdmiration > random(5, 60)) { + if (validFSes.includes("FSStatuesqueGlorification")) { + r.push(`${desc} convinced that tall equals beautiful, leading the arcology to <span class="yellow">adopt Statuesque Glorification.</span>`); + arc.FSStatuesqueGlorification = 5; + return; + } + } else if (V.arcologies[0].FSStatuesqueGlorification > random(5, 60)) { + if (validFSes.includes("FSPetiteAdmiration")) { + r.push(`${desc} enamored by those shorter than them, leading the arcology to <span class="yellow">adopt Petite Admiration.</span>`); + arc.FSPetiteAdmiration = 5; + return; + } + } + if (V.arcologies[0].FSSlimnessEnthusiast > random(5, 60)) { + if (validFSes.includes("FSAssetExpansionist")) { + r.push(`${desc} loves boobs, the bigger, the better, leading the arcology to <span class="yellow">adopt Asset Expansionism.</span>`); + arc.FSAssetExpansionist = 5; + return; + } + } else if (V.arcologies[0].FSAssetExpansionist > random(5, 60)) { + if (validFSes.includes("FSSlimnessEnthusiast")) { + r.push(`${desc} loves a slim slave with tight holes, leading the arcology to <span class="yellow">adopt Slimness Enthusiasm.</span>`); + arc.FSSlimnessEnthusiast = 5; + return; + } + } + if (V.arcologies[0].FSPastoralist > random(5, 60)) { + if (validFSes.includes("FSPastoralist")) { + r.push(`${desc} addicted to breast milk straight from the nipple, leading the arcology to <span class="yellow">adopt Pastoralism.</span>`); + arc.FSPastoralist = 5; + return; + } + } else if (V.arcologies[0].FSCummunism > random(5, 60)) { + if (validFSes.includes("FSCummunism")) { + r.push(`${desc} obsessed with cum, leading the arcology to <span class="yellow">adopt Cummunism.</span>`); + arc.FSCummunism = 5; + return; + } + } + if (V.arcologies[0].FSPhysicalIdealist > random(5, 60)) { + if (validFSes.includes("FSPhysicalIdealist")) { + r.push(`${desc} pretty devoted to spending time in the gym, leading the arcology to <span class="yellow">adopt Physical Idealism.</span>`); + arc.FSPhysicalIdealist = 5; + return; + } + } else if (V.arcologies[0].FSHedonisticDecadence > random(5, 60)) { + if (validFSes.includes("FSHedonisticDecadence")) { + r.push(`${desc} pretty devoted to indulging their every whim, leading the arcology to <span class="yellow">adopt Decadent Hedonism.</span>`); + arc.FSHedonisticDecadence = 5; + return; + } + } + if (V.arcologies[0].FSRomanRevivalist > random(5, 60)) { + if (validFSes.includes("FSAztecRevivalist")) { + r.push(`${desc} fascinated by ancient Aztec history, leading the arcology to <span class="yellow">adopt Aztec Revivalism.</span>`); + arc.FSAztecRevivalist = 5; + return; + } + } else if (V.arcologies[0].FSAztecRevivalist > random(5, 60)) { + if (validFSes.includes("FSRomanRevivalist")) { + r.push(`${desc} fascinated by classical Roman history, leading the arcology to <span class="yellow">adopt Roman Revivalism.</span>`); + arc.FSRomanRevivalist = 5; + return; + } + } else if (V.arcologies[0].FSEgyptianRevivalist > random(5, 60) || V.arcologies[0].FSNeoImperialist > random(5, 60)) { + if (validFSes.includes("FSArabianRevivalist")) { + r.push(`${desc} fascinated by Arabian romanticism, leading the arcology to <span class="yellow">adopt Arabian Revivalism.</span>`); + arc.FSArabianRevivalist = 5; + return; + } + } else if (V.arcologies[0].FSEdoRevivalist > random(5, 60)) { + if (validFSes.includes("FSChineseRevivalist")) { + r.push(`${desc} fascinated by the long tale of Chinese history, leading the arcology to <span class="yellow">adopt Chinese Revivalism.</span>`); + arc.FSChineseRevivalist = 5; + return; + } + } else if (V.arcologies[0].FSArabianRevivalist > random(5, 60)) { + if (validFSes.includes("FSEgyptianRevivalist")) { + r.push(`${desc} fascinated by ancient Egyptian history, leading the arcology to <span class="yellow">adopt Egyptian Revivalism.</span>`); + arc.FSEgyptianRevivalist = 5; + return; + } + } else if (V.arcologies[0].FSChineseRevivalist > random(5, 60)) { + if (validFSes.includes("FSEdoRevivalist")) { + r.push(`${desc} fascinated by Japanese history, leading the arcology to <span class="yellow">adopt Edo Revivalism.</span>`); + arc.FSEdoRevivalist = 5; + return; + } + } + } + } + } + + /* AGENT ADOPTION*/ + if (arc.government === "your agent") { + const leader = App.currentAgent(i); + const {he, himself, woman, him, hers} = getPronouns(leader); + + if (validFSes.includes("FSRepopulationFocus") && leader.fetish === "pregnancy" && V.seePreg === 1) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Repopulationism,</span> since as a pregnancy fetishist, ${he} can't wait to see the female population's bellies swell with life.`); + arc.FSRepopulationFocus = 5; + return; + } else if (validFSes.includes("FSRestart") && (leader.preg < -1 || (leader.ovaries === 0 && leader.mpreg !== 1)) && leader.genes === "XX") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Eugenics,</span> since if no-one can get pregnant, ${he} won't be alone.`); + arc.FSRestart = 5; + return; + } + if (validFSes.includes("FSGenderRadicalist") && leader.dick > 0) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Gender Radicalism,</span> since ${he}'s a walking, swinging argument for dickgirls.`); + arc.FSGenderRadicalist = 5; + return; + } else if (validFSes.includes("FSGenderFundamentalist") && leader.pregKnown === 1 || leader.bellyPreg > 1500) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Gender Fundamentalism,</span> since its citizens find leadership by a pregnant ${woman} fascinating.`); + arc.FSGenderFundamentalist = 5; + return; + } + if (validFSes.includes("FSPaternalist") && leader.behavioralQuirk === "advocate") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Paternalism,</span> since as an advocate for slavery, ${he} believes in its benefits.`); + arc.FSPaternalist = 5; + return; + } else if (validFSes.includes("FSDegradationist") && leader.fetish === "sadist") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Degradationism,</span> since as a sexual sadist, ${he}'s excited by the idea of leading a society that applauds ${his} cruelest impulses.`); + arc.FSDegradationist = 5; + return; + } + if (validFSes.includes("FSSlaveProfessionalism") && (leader.intelligence + leader.intelligenceImplant >= 120) && (leader.skill.vaginal + leader.skill.oral + leader.skill.anal + leader.skill.whoring + leader.skill.entertainment >= 400)) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Slave Professionalism,</span> since ${he} wishes to produce slaves you can be proud of.`); + arc.FSSlaveProfessionalism = 5; + return; + } else if (validFSes.includes("FSIntellectualDependency") && (leader.intelligence + leader.intelligenceImplant >= 120) && (leader.behavioralFlaw === "arrogant" || leader.behavioralQuirk === "insecure")) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Intellectual Dependency,</span>`); + if (leader.behavioralQuirk === "insecure") { + r.push(`since, due to ${his} own insecurities, needs to be frequently reassured that ${he} is smarter than the masses.`); + } else { + r.push(`since ${he} absolutely needs to feel intellectually superior to ${his} chattel.`); + } + arc.FSIntellectualDependency = 5; + return; + } + if (validFSes.includes("FSBodyPurist") && leader.chem > 50) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Body Purism,</span> since ${he} knows what long term drug damage feels like, and doesn't want any slave to ever experience it again.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSTransformationFetishist") && leader.boobsImplant > 1000) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Transformation Fetishism,</span> out of a perverse desire to subject all slaves to massive implants like ${hers}.`); + arc.FSTransformationFetishist = 5; + return; + } + if (validFSes.includes("FSYouthPreferentialist") && leader.actualAge <= 25) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Youth Preferentialism,</span> to buttress acceptance of ${his} own young age.`); + arc.FSYouthPreferentialist = 5; + return; + } else if (validFSes.includes("FSMaturityPreferentialist") && leader.actualAge > 35) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Maturity Preferentialism,</span> since ${he} has a certain personal interest in promoting the idea that MILFs are sexy.`); + arc.FSMaturityPreferentialist = 5; + return; + } + if (validFSes.includes("FSSlimnessEnthusiast") && leader.behavioralQuirk === "insecure") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Slimness Enthusiasm,</span> since ${his} history of anorexia has deeply impacted ${his} idea of beauty.`); + arc.FSSlimnessEnthusiast = 5; + return; + } else if (validFSes.includes("FSAssetExpansionist") && leader.fetish === "boobs") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a breast expansion fetishist in addition to being a mere breast fetishist.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSAssetExpansionist") && leader.sexualQuirk === "size queen" && leader.vagina > 3) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a stickler for big dicks and seeks to find one large enough to push ${him} to ${his} very limit.`); + arc.FSAssetExpansionist = 5; + return; + } + if (validFSes.includes("FSCummunism") && leader.fetish === "cumslut") { // this will become the cum focused condition, being replaced with breast focus for milk + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Cummunism,</span> since ${he} already loves sucking down huge loads of cum.`); + arc.FSCummunism = 5; + return; + } else if (validFSes.includes("FSPastoralist") && leader.fetish === "boobs") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Pastoralism,</span> since ${he} loves boobs and adores suckling them.`); + arc.FSPastoralist = 5; + return; + } + if (validFSes.includes("FSHedonisticDecadence") && leader.behavioralFlaw === "gluttonous") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} already loves over-eating.`); + arc.FSHedonisticDecadence = 5; + return; + } else if (validFSes.includes("FSPhysicalIdealist") && leader.behavioralQuirk === "fitness") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Physical Idealism,</span> since ${he}'s a fitness fanatic ${himself}.`); + arc.FSPhysicalIdealist = 5; + return; + } else if (validFSes.includes("FSHedonisticDecadence") && leader.fetish !== "none" && leader.fetishStrength >= 100) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} seeks to satisfy ${his} powerful fetish.`); + arc.FSHedonisticDecadence = 5; + return; + } + if (validFSes.includes("FSStatuesqueGlorification") && leader.height >= 200) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Statuesque Glorification,</span> since ${he} is tired of being one of the tallest in arcology.`); + arc.FSStatuesqueGlorification = 5; + return; + } else if (validFSes.includes("FSPetiteAdmiration") && leader.height >= 170 && leader.fetish === "dom") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Petite Admiration,</span> since it is far easier to dominate someone much smaller than oneself.`); + arc.FSPetiteAdmiration = 5; + return; + } + if (validFSes.includes("FSIncestFetishist")) { + const lover = V.slaves.find(s => (s.ID === leader.relationshipTarget && areRelated(s, leader) && s.assignment === "live with your agent")); + if ((leader.behavioralQuirk === "sinful" || leader.sexualQuirk === "perverted") && lover && V.seeIncest === 1) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Incest Festishism,</span> to share the love and joy ${he} holds with ${his} ${relativeTerm(leader, lover)}.`); + arc.FSIncestFetishist = 5; + return; + } + } + if (validFSes.includes("FSChattelReligionist") && leader.behavioralFlaw === "devout") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> to share and spread ${his} deeply held beliefs about the holiness of sexual service.`); + arc.FSChattelReligionist = 5; + return; + } else if (validFSes.includes("FSChattelReligionist") && leader.behavioralQuirk === "sinful") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> since ${he}'s excited by the prospect of getting away with horrible sins against old religions in public.`); + arc.FSChattelReligionist = 5; + return; + } + if (validFSes.includes("FSEgyptianRevivalist") && leader.relationshipTarget !== 0) { + const lover = getSlave(leader.relationshipTarget); + if (lover && areRelated(leader, lover)) { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Egyptian Revivalism,</span> since ${he}'s already part of a gloriously incestuous relationship.`); + arc.FSEgyptianRevivalist = 5; + return; + } + } else if (validFSes.includes("FSChineseRevivalist") && leader.nationality === "Chinese") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chinese Revivalism,</span> since ${he}'s Chinese ${himself} and can claim high honor in such a society.`); + arc.FSChineseRevivalist = 5; + return; + } else if (validFSes.includes("FSEdoRevivalist") && leader.nationality === "Japanese") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Edo Revivalism,</span> since ${he}'s Japanese ${himself} and can claim high honor in such a society.`); + arc.FSEdoRevivalist = 5; + return; + } else if (validFSes.includes("FSAztecRevivalist") && leader.nationality === "Mexican") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Aztec Revivalism,</span> since ${he}'s Mexican ${himself} and can claim high honor in such a society.`); + arc.FSAztecRevivalist = 5; + return; + } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "German") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s German ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + arc.FSNeoImperialist = 5; + return; + } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "French") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s French ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + arc.FSNeoImperialist = 5; + return; + } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "Spanish") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s Spanish ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + arc.FSNeoImperialist = 5; + return; + } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "English") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s English ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + arc.FSNeoImperialist = 5; + return; + } else if (validFSes.includes("FSRomanRevivalist") && leader.behavioralQuirk === "confident") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Roman Revivalism,</span> since it appeals to ${his} confident, patrician nature.`); + arc.FSRomanRevivalist = 5; + return; + } else if (validFSes.includes("FSArabianRevivalist") && leader.fetish === "dom") { + r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Arabian Revivalism,</span> since ${he}'s sexually dominant and quite likes the idea of overseeing slave bazaars.`); + arc.FSArabianRevivalist = 5; + return; + } + } + + /* CROSS-FS ADOPTION*/ + if (arc.FSSubjugationist > random(50, 200)) { + if (validFSes.includes("FSDegradationist")) { + r.push(`The arcology's racial Subjugationist culture <span class="yellow">pushes it towards Degradationism.</span>`); + arc.FSDegradationist = 5; + return; + } else if ((validFSes.includes("FSAztecRevivalist") && validFSes.includes("FSEgyptianRevivalist"))) { + if (random(0, 1) === 0) { + r.push(`The arcology's racial Subjugationist culture <span class="yellow">pushes it towards Egyptian Revivalism,</span> since the Ancient Egyptians are famous for keeping a race of slaves.`); + arc.FSEgyptianRevivalist = 5; + return; + } else { + r.push(`The arcology's racial Supremacist culture <span class="yellow">pushes it towards Aztec Revivalism,</span> since the enslavement and sacrifice of slaves was fundamental to the culture.`); + arc.FSAztecRevivalist = 5; + return; + } + } + } + if (arc.FSRestart > random(50, 200)) { + if (validFSes.includes("FSNeoImperialist")) { + r.push(`The arcology's elitist, eugenicist culture <span class="yellow">pushes it towards Neo-Imperialism,</span> since the societal elite view themselves as the only appropriate rulers of their society.`); + arc.FSNeoImperialist = 5; + return; + } + } + if (arc.FSSupremacist > random(50, 200)) { + if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's racial Supremacist culture <span class="yellow">pushes it towards Paternalism.</span>`); + arc.FSPaternalist = 5; + return; + } else if ((validFSes.includes("FSEdoRevivalist") && validFSes.includes("FSChineseRevivalist") && (arc.FSSupremacistRace === "asian"))) { + if (random(0, 1) === 0) { + r.push(`The arcology's racial Supremacist culture <span class="yellow">pushes it towards Edo Revivalism,</span> since the beauty and grace of the Japanese people are watchwords there.`); + arc.FSEdoRevivalist = 5; + return; + } else { + r.push(`The arcology's racial Supremacist culture <span class="yellow">pushes it towards Chinese Revivalism,</span> since the wisdom of the Middle Kingdom is admired there.`); + arc.FSChineseRevivalist = 5; + return; + } + } + } + if (arc.FSRepopulationFocus > random(50, 200)) { + if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Repopulationist culture <span class="yellow">pushes it towards Asset Expansionism,</span> since big pregnant bellies go great with huge tits and asses.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSGenderFundamentalist")) { + r.push(`The arcology's Repopulationist culture <span class="yellow">pushes it towards Gender Fundamentalism,</span> since traditional women make better mothers.`); + arc.FSGenderFundamentalist = 5; + return; + } else if (validFSes.includes("FSPetiteAdmiration")) { + r.push(`The arcology's Repopulationist culture <span class="yellow">pushes it towards Petite Admiration,</span> since shorter women tend to have an easier time with childbirth.`); + arc.FSPetiteAdmiration = 5; + return; + } + } else if (arc.FSRestart > random(50, 200)) { + if (validFSes.includes("FSDegradationist")) { + r.push(`The arcology's elite focused culture <span class="yellow">pushes it towards Degradationism,</span> since its lowest class deserves nothing but misery.`); + arc.FSDegradationist = 5; + return; + } else if (validFSes.includes("FSSlaveProfessionalism")) { + r.push(`The arcology's elite focused culture <span class="yellow">pushes it towards Slave Professionalism,</span> since the highest class deserve nothing less than the best slaves.`); + arc.FSSlaveProfessionalism = 5; + return; + } else if (validFSes.includes("FSHedonisticDecadence")) { + r.push(`The arcology's wide range of imports <span class="yellow">pushes it towards Decadent Hedonism,</span> since it has access to so many undiscovered pleasures.`); + arc.FSHedonisticDecadence = 5; + return; + } + } + if (arc.FSGenderRadicalist > random(50, 200)) { + if (validFSes.includes("FSTransformationFetishist")) { + r.push(`The arcology's Gender Radicalist culture <span class="yellow">pushes it towards Transformation Fetishism,</span> since surgery can turn a slave into anything.`); + arc.FSTransformationFetishist = 5; + return; + } else if (validFSes.includes("FSSlimnessEnthusiast")) { + r.push(`The arcology's Gender Radicalist culture <span class="yellow">pushes it towards Slimness Enthusiasm,</span> since that's the kind of body many of its slaves have.`); + arc.FSSlimnessEnthusiast = 5; + return; + } else if (validFSes.includes("FSCummunism")) { + r.push(`The arcology's Gender Radicalist culture <span class="yellow">pushes it towards Cummunism,</span> since many of its slaves are capable of giving cum.`); + arc.FSCummunism = 5; + return; + } + } else if (arc.FSGenderFundamentalist > random(50, 200)) { + if (validFSes.includes("FSPastoralist")) { + r.push(`The arcology's Gender Fundamentalist culture <span class="yellow">pushes it towards Pastoralism,</span> since its pregnant slaves are already giving milk.`); + arc.FSPastoralist = 5; + return; + } else if (validFSes.includes("FSIntellectualDependency")) { + r.push(`The arcology's Gender Fundamentalist culture <span class="yellow">pushes it towards Intellectual Dependency,</span> since women don't need to think to serve men.`); + arc.FSYouthPreferentialist = 5; + return; + } else if (validFSes.includes("FSYouthPreferentialist")) { + r.push(`The arcology's Gender Fundamentalist culture <span class="yellow">pushes it towards Youth Preferentialism,</span> since younger slaves are beautiful and fertile.`); + arc.FSYouthPreferentialist = 5; + return; + } + } + if (arc.FSPaternalist > random(50, 200)) { + if (validFSes.includes("FSChattelReligionist")) { + r.push(`The arcology's Paternalist culture <span class="yellow">pushes it towards Chattel Religionism,</span> since many of its slaves are already worshipful.`); + arc.FSChattelReligionist = 5; + return; + } else if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Paternalist culture <span class="yellow">pushes it towards Body Purism,</span> since giving slaves dangerous drugs is hardly good for them.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSRomanRevivalist")) { + r.push(`The arcology's Paternalist culture <span class="yellow">pushes it towards Roman Revivalism,</span> since loyal service to the res publica bears similarity to their existing mores.`); + arc.FSRomanRevivalist = 5; + return; + } + } else if (arc.FSDegradationist > random(50, 200)) { + if (validFSes.includes("FSTransformationFetishist")) { + r.push(`The arcology's Degradationist culture <span class="yellow">pushes it towards Transformation Fetishism,</span> the ultimate expression of power over slave bodies.`); + arc.FSTransformationFetishist = 5; + return; + } else if (validFSes.includes("FSGenderRadicalist")) { + r.push(`The arcology's Degradationist culture <span class="yellow">pushes it towards Gender Radicalism,</span> since the joy of forcing a gender role on a slave is already popular.`); + arc.FSGenderRadicalist = 5; + return; + } + } + if (arc.FSIntellectualDependency > random(50, 200)) { + if (validFSes.includes("FSTransformationFetishist")) { + r.push(`The arcology's Intellectual Dependency culture <span class="yellow">pushes it towards Transformation Fetishism,</span> to give its bimbos a body most fitting.`); + arc.FSTransformationFetishist = 5; + return; + } else if (validFSes.includes("FSYouthPreferentialist")) { + r.push(`The arcology's Intellectual Dependency culture <span class="yellow">pushes it towards Youth Preferentialism,</span> since the young have more energy to party.`); + arc.FSYouthPreferentialist = 5; + return; + } else if (validFSes.includes("FSHedonisticDecadence")) { + r.push(`The arcology's Intellectual Dependency culture <span class="yellow">pushes it towards Decadent Hedonism,</span> since base instinct already rules slaves' lives.`); + arc.FSHedonisticDecadence = 5; + return; + } else if (validFSes.includes("FSRepopulationFocus")) { + r.push(`The arcology's Intellectual Dependency culture <span class="yellow">pushes it towards Repopulationism,</span> since there has been an epidemic of unplanned pregnancies among the slave population.`); + arc.FSRepopulationFocus = 5; + return; + } + } else if (arc.FSSlaveProfessionalism > random(50, 200)) { + if (validFSes.includes("FSMaturityPreferentialist")) { + r.push(`The arcology's Slave Professionalism culture <span class="yellow">pushes it towards Maturity Preferentialist,</span> since with age comes experience.`); + arc.FSMaturityPreferentialist = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Slave Professionalism culture <span class="yellow">pushes it towards Paternalism,</span> since happy slaves are much more willing to be molded in to shape.`); + arc.FSPaternalist = 5; + return; + } else if (validFSes.includes("FSPhysicalIdealist")) { + r.push(`The arcology's Slave Professionalism culture <span class="yellow">pushes it towards Physical Idealism,</span> since a fitting body is required to house the perfect mind.`); + arc.FSPhysicalIdealist = 5; + return; + } else if (validFSes.includes("FSChattelReligionist")) { + r.push(`The arcology's Slave Professionalism culture <span class="yellow">pushes it towards Chattel Religionism,</span> since skilled service is already a part of a slave's daily life.`); + arc.FSChattelReligionist = 5; + return; + } + } + if (arc.FSBodyPurist > random(50, 200)) { + if (validFSes.includes("FSPhysicalIdealist")) { + r.push(`The arcology's Body Purist culture <span class="yellow">pushes it towards Physical Idealism,</span> since it already takes an intense interest in bodily perfection.`); + arc.FSPhysicalIdealist = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Body Purist culture <span class="yellow">pushes it towards Paternalism,</span> since it's become obvious that happiness is a necessary part of wellness.`); + arc.FSPaternalist = 5; + return; + } + } else if (arc.FSTransformationFetishist > random(50, 200)) { + if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Transformation Fetishist culture <span class="yellow">pushes it towards Asset Expansionism,</span> since it's already overrun with massive tits and asses.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSDegradationist")) { + r.push(`The arcology's Transformation Fetishist culture <span class="yellow">pushes it towards Degradationism,</span> since it's already used to slaves whining about their latest surgeries.`); + arc.FSDegradationist = 5; + return; + } + } + if (arc.FSYouthPreferentialist > random(50, 200)) { + if (validFSes.includes("FSSlimnessEnthusiast")) { + r.push(`The arcology's Youth Preferentialist culture <span class="yellow">pushes it towards Slimness Enthusiasm,</span> since that's the kind of body many of its slaves have.`); + arc.FSSlimnessEnthusiast = 5; + return; + } else if (validFSes.includes("FSRepopulationFocus")) { + r.push(`The arcology's Youth Preferentialist culture <span class="yellow">pushes it towards Repopulationism,</span> since many of its slaves are deliciously ripe for breeding.`); + arc.FSRepopulationFocus = 5; + return; + } + } else if (arc.FSMaturityPreferentialist > random(50, 200)) { + if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Maturity Preferentialist culture <span class="yellow">pushes it towards Asset Expansionism,</span> since that's the kind of body many of its slaves have.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Maturity Preferentialist culture <span class="yellow">pushes it towards Paternalism,</span> since its many older slaves have skills best applied by a happy woman.`); + arc.FSPaternalist = 5; + return; + } + } + if (arc.FSPetiteAdmiration > random(50, 200)) { + if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Petite Admiration culture <span class="yellow">pushes it towards Asset Expansionist,</span> since a ${girlU} with tits wider than ${heU} is tall attracts quite some attention.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Petite Admiration culture <span class="yellow">pushes it towards Paternalism,</span> since such tiny ${girlU}s need extra special attention.`); + arc.FSPaternalist = 5; + return; + } else if (validFSes.includes("FSIncestFetishist")) { + r.push(`The arcology's Petite Admiration culture <span class="yellow">pushes it towards Incest Fetishism,</span> since age play often goes hand-in-hand with size play.`); + arc.FSIncestFetishist = 5; + return; + } + } else if (arc.FSStatuesqueGlorification > random(50, 200)) { + if (validFSes.includes("FSPhysicalIdealist")) { + r.push(`The arcology's Statuesque Glorification culture <span class="yellow">pushes it towards Physical Idealism,</span> since being ripped complements being tall.`); + arc.FSPhysicalIdealist = 5; + return; + } else if (validFSes.includes("FSDegradationist")) { + r.push(`The arcology's Statuesque Glorification culture <span class="yellow">pushes it towards Degradationism,</span> since those that don't measure up deserve only suffering.`); + arc.FSDegradationist = 5; + return; + } + } + if (arc.FSSlimnessEnthusiast > random(50, 200)) { + if (validFSes.includes("FSYouthPreferentialist")) { + r.push(`The arcology's Slimness Enthusiast culture <span class="yellow">pushes it towards Youth Preferentialism,</span> since younger slaves are often attractively slim.`); + arc.FSYouthPreferentialist = 5; + return; + } else if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Slimness Enthusiast culture <span class="yellow">pushes it towards Body Purism,</span> since the last thing they want is prettily slender girls with health trouble.`); + arc.FSBodyPurist = 5; + return; + } + } else if (arc.FSAssetExpansionist > random(50, 200)) { + if (validFSes.includes("FSMaturityPreferentialist")) { + r.push(`The arcology's Asset Expansionist culture <span class="yellow">pushes it towards Maturity Preferentialism,</span> since MILF slaves tend to come with nice big tits.`); + arc.FSMaturityPreferentialist = 5; + return; + } else if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Asset Expansionist culture <span class="yellow">pushes it towards Body Purism,</span> since slaves on curatives are slaves not on growth hormones.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSPetiteAdmiration") && validFSes.includes("FSStatuesqueGlorification")) { + if (random(0, 1) === 1) { + r.push(`The arcology's Asset Expansionist culture <span class="yellow">pushes it towards Petite Admiration,</span> since the smaller a slave's body is, the bigger their breasts will look.`); + arc.FSPetiteAdmiration = 5; + return; + } else { + r.push(`The arcology's Asset Expansionist culture <span class="yellow">pushes it towards Statuesque Glorification,</span> as the love of all things huge is rather indiscriminate.`); + arc.FSStatuesqueGlorification = 5; + return; + } + } + } + if (arc.FSPastoralist > random(50, 200)) { + if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Pastoralist culture <span class="yellow">pushes it towards Body Purism,</span> since there have been concerns about milk purity.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Pastoralist culture <span class="yellow">pushes it towards Asset Expansionism,</span> since they're convinced that there's no such thing as udders that are too big.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSRepopulationFocus")) { + r.push(`The arcology's Pastoralist culture <span class="yellow">pushes it towards Repopulationism,</span> since pregnancy stimulates milk flow.`); + arc.FSRepopulationFocus = 5; + return; + } + } else if (arc.FSCummunism > random(50, 200)) { + if (validFSes.includes("FSPhysicalIdealist")) { + r.push(`The arcology's Cummunist culture <span class="yellow">pushes it towards Physical Idealism,</span> since big balls and huge loads go hand in hand with masculine muscles.`); + arc.FSPhysicalIdealist = 5; + return; + } else if (validFSes.includes("FSAssetExpansionist")) { + r.push(`The arcology's Cummunist culture <span class="yellow">pushes it towards Asset Expansionism,</span> since they're convinced that there's no such thing as balls that are too big.`); + arc.FSAssetExpansionist = 5; + return; + } else if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Cummunist culture <span class="yellow">pushes it towards Body Purism,</span> since there have been concerns about cum purity.`); + arc.FSBodyPurist = 5; + return; + } + } + if (arc.FSHedonisticDecadence > random(50, 200)) { + if (validFSes.includes("FSPastoralist")) { + r.push(`The arcology's Hedonistic culture <span class="yellow">pushes it towards Pastoralism,</span> since nothing beats a nice glass of fresh squeezed milk with your cake.`); + arc.FSPastoralist = 5; + return; + } else if (validFSes.includes("FSIntellectualDependency")) { + r.push(`The arcology's Hedonistic culture <span class="yellow">pushes it towards Intellectual Dependency,</span> since higher thought is unneeded when you have everything you want.`); + arc.FSIntellectualDependency = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Hedonistic culture <span class="yellow">pushes it towards Paternalism,</span> since happiness is infectious.`); + arc.FSPaternalist = 5; + return; + } + } else if (arc.FSPhysicalIdealist > random(50, 200)) { + if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Physical Idealist culture <span class="yellow">pushes it towards Body Purism,</span> since it's already used to treating slaves' bodies as temples.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSYouthPreferentialist")) { + r.push(`The arcology's Physical Idealist culture <span class="yellow">pushes it towards Youth Preferentialism,</span> since beauty and athletic prowess do tend to peak early.`); + arc.FSYouthPreferentialist = 5; + return; + } else if (validFSes.includes("FSStatuesqueGlorification")) { + r.push(`The arcology's Physical Idealist culture <span class="yellow">pushes it towards Statuesque Glorification,</span> to better emulate the titans of legend.`); + arc.FSStatuesqueGlorification = 5; + return; + } else if (validFSes.includes("FSCummunism")) { + r.push(`The arcology's Physical Idealist culture <span class="yellow">pushes it towards Cummunism,</span> since muscular, testosterone filled slaves make admirable cumshots.`); + arc.FSCummunism = 5; + return; + } + } + if (arc.FSIncestFetishist > random(50, 200)) { + if (validFSes.includes("FSRepopulationFocus")) { + r.push(`The arcology's Incest Fetishizing culture <span class="yellow">pushes it towards Repopulationism,</span> in order to create many new future loving couples.`); + arc.FSRepopulationFocus = 5; + return; + } else if (validFSes.includes("FSBodyPurist")) { + r.push(`The arcology's Incest Fetishizing culture <span class="yellow">pushes it towards Body Purism,</span> in order to keep its bloodlines pure.`); + arc.FSBodyPurist = 5; + return; + } else if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Incest Fetishizing culture <span class="yellow">pushes it towards Paternalism,</span> as healthy slaves live longer allowing relationships to span generations.`); + arc.FSPaternalist = 5; + return; + } else if (validFSes.includes("FSEgyptianRevivalist")) { + r.push(`The arcology's Incest Fetishizing culture <span class="yellow">pushes it towards Egyptian Revivalism,</span> as they naturally seek even more incestuous fun.`); + arc.FSEgyptianRevivalist = 5; + return; + } + } + if (arc.FSChattelReligionist > random(50, 200)) { + if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Chattel Religionist culture <span class="yellow">pushes it towards Paternalism,</span> since charitable care for slaves' welfare has become widespread.`); + arc.FSPaternalist = 5; + return; + } else if (validFSes.includes("FSArabianRevivalist")) { + r.push(`The arcology's Chattel Religionist culture <span class="yellow">pushes it towards Arabian Revivalism,</span> since such an intermingling of slavery and faith fascinates them.`); + arc.FSArabianRevivalist = 5; + return; + } + } + if (arc.FSRomanRevivalist > random(50, 200)) { + if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Roman Revivalist culture <span class="yellow">pushes it towards Paternalism,</span> since some Roman slaves were traditionally permitted limited rights.`); + arc.FSPaternalist = 5; + return; + } + } + if (arc.FSNeoImperialist > random(50, 200)) { + if (validFSes.includes("FSRestart")) { + r.push(`The arcology's Neo-Imperialist culture <span class="yellow">pushes it towards Eugenics,</span> since their hegemonic, noble culture naturally views itself as genetically superior to the unwashed masses.`); + arc.FSRestart = 5; + return; + } + } + if (arc.FSAztecRevivalist > random(50, 200)) { + if (validFSes.includes("FSDegradationist")) { + r.push(`The arcology's Aztec Revivalist culture <span class="yellow">pushes it towards Degradation,</span> since most Aztec war slaves were tortured and sacrificed.`); + arc.FSDegradationist = 5; + return; + } + } + if (arc.FSEgyptianRevivalist > random(50, 200)) { + if (validFSes.includes("FSChattelReligionist")) { + r.push(`The arcology's Egyptian Revivalist culture <span class="yellow">pushes it towards Chattel Religionism,</span> since worship is already becoming an established part of its life.`); + arc.FSChattelReligionist = 5; + return; + } else if (validFSes.includes("FSIncestFetishist")) { + r.push(`The arcology's Egyptian Revivalist culture <span class="yellow">pushes it towards Incest Fetishism,</span> since more incest is only a good thing in its eyes.`); + arc.FSIncestFetishist = 5; + return; + } + } + if (arc.FSEdoRevivalist > random(50, 200)) { + if (validFSes.includes("FSSlimnessEnthusiast")) { + r.push(`The arcology's Edo Revivalist culture <span class="yellow">pushes it towards Slimness Enthusiasm,</span> since slim and elegant slaves are already fashionable there.`); + arc.FSSlimnessEnthusiast = 5; + return; + } + } + if (arc.FSArabianRevivalist > random(50, 200)) { + if (validFSes.includes("FSChattelReligionist")) { + r.push(`The arcology's Arabian Revivalist culture <span class="yellow">pushes it towards Chattel Religionism,</span> since the word of God is already a matter of daily significance there.`); + arc.FSChattelReligionist = 5; + return; + } + } + if (arc.FSChineseRevivalist > random(50, 200)) { + if (validFSes.includes("FSPaternalist")) { + r.push(`The arcology's Chinese Revivalist culture <span class="yellow">pushes it towards Paternalism,</span> since traditional beliefs about duty and order have become accepted.`); + arc.FSPaternalist = 5; + return; + } + } + + + /* NEIGHBOR ADOPTION*/ + for (let j = 0; j < V.arcologies.length; j++) { + const arc2 = V.arcologies[j]; + if (arc.direction !== arc2.direction) { + let influenceBonus = 0; + if (arc.direction === arc2.influenceTarget) { + r.push(`${arc2.name}'s directed cultural influence gives it some input over ${arc.name}'s choice of direction.`); + influenceBonus = 20; + } + + const opinion = App.Neighbor.opinion(i, j); + if (opinion >= 50) { + r.push(`${arc.name} is aligned with ${arc2.name} socially, encouraging it to consider adopting all its cultural values.`); + influenceBonus += opinion - 50; + } else if (opinion <= -50) { + r.push(`${arc.name} is culturally opposed to ${arc2.name}, encouraging it to resist adopting its cultural values.`); + influenceBonus += opinion + 50; + } + + for (const candidate of validFSes) { + if (candidate === "FSSubjugationist") { + if ((arc.FSSupremacist === "unset") || (arc.FSSupremacistRace !== arc2.FSSubjugationistRace)) { + if (arc2.FSSubjugationist > random(0, 200) - influenceBonus) { + r.push(`It <span class="yellow">adopts ${arc2.FSSubjugationistRace} Subjugation</span> due to influence from its trading partner ${arc2.name}.`); + arc.FSSubjugationist = 5; + arc.FSSubjugationistRace = arc2.FSSubjugationistRace; + return; + } + } + } else if (candidate === "FSSupremacist") { + if ((arc.FSSubjugationist === "unset") || (arc.FSSubjugationistRace !== arc2.FSSupremacistRace)) { + if (arc2.FSSupremacist > random(0, 200) - influenceBonus) { + r.push(`It <span class="yellow">adopts ${arc2.FSSupremacistRace} Supremacy</span> due to influence from its trading partner ${arc2.name}.`); + arc.FSSupremacist = 5; + arc.FSSupremacistRace = arc2.FSSupremacistRace; + return; + } + } + } else { + if (arc2[candidate] > random(0, 200) - influenceBonus) { + r.push(`It <span class="yellow">adopts ${FutureSocieties.displayName(candidate)}</span> due to influence from its trading partner ${arc2.name}.`); + arc[candidate] = 5; + return; + } + } + } + } + } + + /* RANDOM ADOPTION*/ + if (random(0, 4) === 1) { + switch (arc.government) { + case "elected officials": + desc = "Its elected leaders are"; + break; + case "a committee": + desc = "A majority of its ruling committee is"; + break; + case "an oligarchy": + case "your trustees": + desc = "Its leading citizens are"; + break; + case "an individual": + desc = "Its owner is"; + break; + case "your agent": + desc = "Your agent and its citizens are"; + break; + case "a corporation": + desc = "Most of its board of directors are"; + break; + default: + desc = "Its citizens are"; + } + let subjugationRace; + let supremacistRace; + switch (validFSes.random()) { + case "FSSubjugationist": + subjugationRace = setup.filterRacesLowercase.random(); + if ((arc.FSSupremacist === "unset") || (subjugationRace !== arc.FSSupremacistRace)) { + r.push(`${desc} preoccupied by a racial animus towards ${subjugationRace} people, leading the arcology to <span class="yellow">adopt ${subjugationRace} Subjugation.</span>`); + arc.FSSubjugationist = 5; + arc.FSSubjugationistRace = subjugationRace; + return; + } + break; + case "FSSupremacist": + supremacistRace = setup.filterRacesLowercase.random(); + if ((arc.FSSubjugationist === "unset") || (supremacistRace !== arc.FSSubjugationistRace)) { + r.push(`${desc} preoccupied by belief in the superiority of the ${supremacistRace} race, leading the arcology to <span class="yellow">adopt ${supremacistRace} Supremacy.</span>`); + arc.FSSupremacist = 5; + arc.FSSupremacistRace = supremacistRace; + return; + } + break; + case "FSGenderRadicalist": + r.push(`${desc} enthusiastic about fucking slaves in the butt, leading the arcology to <span class="yellow">adopt Gender Radicalism.</span>`); + arc.FSGenderRadicalist = 5; + return; + case "FSGenderFundamentalist": + r.push(`${desc} enthusiastic about knocking slaves up, leading the arcology to <span class="yellow">adopt Gender Fundamentalism.</span>`); + arc.FSGenderFundamentalist = 5; + return; + case "FSPaternalist": + r.push(`${desc} devoted to their slaves' advancement, leading the arcology to <span class="yellow">adopt Paternalism.</span>`); + arc.FSPaternalist = 5; + return; + case "FSDegradationist": + r.push(`${desc} partial to screaming and struggling, leading the arcology to <span class="yellow">adopt Degradationism.</span>`); + arc.FSDegradationist = 5; + return; + case "FSBodyPurist": + r.push(`${desc} concerned by trends in their slaves' health, leading the arcology to <span class="yellow">adopt Body Purism.</span>`); + arc.FSBodyPurist = 5; + return; + case "FSTransformationFetishist": + r.push(`${desc} fascinated with extreme surgery, leading the arcology to <span class="yellow">adopt Transformation Fetishism.</span>`); + arc.FSTransformationFetishist = 5; + return; + case "FSYouthPreferentialist": + r.push(`${desc} devoted to fucking nubile young slaves, leading the arcology to <span class="yellow">adopt Youth Preferentialism.</span>`); + arc.FSYouthPreferentialist = 5; + return; + case "FSMaturityPreferentialist": + r.push(`${desc} devoted to time in bed with their MILF slaves, leading the arcology to <span class="yellow">adopt Maturity Preferentialism.</span>`); + arc.FSMaturityPreferentialist = 5; + return; + case "FSSlimnessEnthusiast": + r.push(`${desc} partial to a slim slave with tight holes, leading the arcology to <span class="yellow">adopt Slimness Enthusiasm.</span>`); + arc.FSSlimnessEnthusiast = 5; + return; + case "FSAssetExpansionist": + r.push(`${desc} enthusiastic about boobs, the bigger, the better, leading the arcology to <span class="yellow">adopt Asset Expansionism.</span>`); + arc.FSAssetExpansionist = 5; + return; + case "FSPastoralist": + r.push(`${desc} addicted to breast milk straight from the nipple, leading the arcology to <span class="yellow">adopt Pastoralism.</span>`); + arc.FSPastoralist = 5; + return; + case "FSPhysicalIdealist": + r.push(`${desc} pretty devoted to spending time in the gym, leading the arcology to <span class="yellow">adopt Physical Idealism.</span>`); + arc.FSPhysicalIdealist = 5; + return; + case "FSChattelReligionist": + r.push(`${desc} devoutly religious, and interested in a reformation, leading the arcology to <span class="yellow">adopt Chattel Religionism.</span>`); + arc.FSChattelReligionist = 5; + return; + case "FSRomanRevivalist": + r.push(`${desc} fascinated by classical Roman history, leading the arcology to <span class="yellow">adopt Roman Revivalism.</span>`); + arc.FSRomanRevivalist = 5; + return; + case "FSAztecRevivalist": + r.push(`${desc} fascinated by ancient Aztec history, leading the arcology to <span class="yellow">adopt Aztec Revivalism.</span>`); + arc.FSAztecRevivalist = 5; + return; + case "FSEgyptianRevivalist": + r.push(`${desc} fascinated by ancient Egyptian history, leading the arcology to <span class="yellow">adopt Egyptian Revivalism.</span>`); + arc.FSEgyptianRevivalist = 5; + return; + case "FSEdoRevivalist": + r.push(`${desc} fascinated by Japanese history, leading the arcology to <span class="yellow">adopt Edo Revivalism.</span>`); + arc.FSEdoRevivalist = 5; + return; + case "FSArabianRevivalist": + r.push(`${desc} fascinated by Arabian romanticism, leading the arcology to <span class="yellow">adopt Arabian Revivalism.</span>`); + arc.FSArabianRevivalist = 5; + return; + case "FSChineseRevivalist": + r.push(`${desc} fascinated by the long tale of Chinese history, leading the arcology to <span class="yellow">adopt Chinese Revivalism.</span>`); + arc.FSChineseRevivalist = 5; + return; + case "FSRepopulationFocus": + r.push(`${desc} concerned for the future, and partial to watching bellies swell, leading the arcology to <span class="yellow">adopt Repopulation Efforts.</span>`); + arc.FSRepopulationFocus = 5; + return; + case "FSRestart": + r.push(`${desc} concerned for the future, and believing their elite could do a better job, leading the arcology to <span class="yellow">adopt Eugenics.</span>`); + arc.FSRestart = 5; + return; + case "FSHedonisticDecadence": + r.push(`${desc} obsessed with indulging their every desire, leading the arcology to <span class="yellow">adopt Decadent Hedonism.</span>`); + arc.FSHedonisticDecadence = 5; + return; + case "FSCummunism": + r.push(`${desc} obsessed with cum, leading the arcology to <span class="yellow">adopt Cummunism.</span>`); + arc.FSCummunism = 5; + return; + case "FSIncestFetishist": + r.push(`${desc} obsessed with their relatives, leading the arcology to <span class="yellow">adopt Incest Fetishism.</span>`); + arc.FSIncestFetishist = 5; + return; + case "FSIntellectualDependency": + r.push(`${desc} partial to airheaded horny bimbos, leading the arcology to <span class="yellow">adopt Intellectual Dependency.</span>`); + arc.FSIntellectualDependency = 5; + return; + case "FSSlaveProfessionalism": + r.push(`${desc} obsessed with crafting the perfect slave, leading the arcology to <span class="yellow">adopt Slave Professionalism.</span>`); + arc.FSSlaveProfessionalism = 5; + return; + case "FSPetiteAdmiration": + r.push(`${desc} enamored by those shorter than them, leading the arcology to <span class="yellow">adopt Petite Admiration.</span>`); + arc.FSPetiteAdmiration = 5; + return; + case "FSStatuesqueGlorification": + r.push(`${desc} convinced that tall equals beauty, leading the arcology to <span class="yellow">adopt Statuesque Glorification.</span>`); + arc.FSStatuesqueGlorification = 5; + return; + case "FSNeoImperialist": + r.push(`${desc} fascinated by the long rule of ancient European monarchs, leading the arcology to <span class="yellow">adopt Neo-Imperialism.</span>`); + arc.FSNeoImperialist = 5; + return; + } + } + + r.push(`Its future is bitterly controversial, and no side is predominant this week. The dissension reduces the arcology's prosperity.`); + arc.prosperity -= 1; + } + } +}; diff --git a/src/endWeek/economics/persBusiness.js b/src/endWeek/economics/persBusiness.js index d3f11a542b9c6fe29357d29d034190dd0de93807..e5c9d3876afd7cbd9d67cc461c41ae6aaa809056 100644 --- a/src/endWeek/economics/persBusiness.js +++ b/src/endWeek/economics/persBusiness.js @@ -523,7 +523,7 @@ App.EndWeek.personalBusiness = function() { V.SecExp.proclamation.cooldown = 4; V.personalAttention = "business"; } else { - r.push(`As you currently lack the minimum amount of your chosen proclamation currency, ${V.SecExp.proclamation.currency}, it would be unwise to attempt execution of your V.SecExp.proclamation.type this week.`); + r.push(`As you currently lack the minimum amount of your chosen proclamation currency, ${V.SecExp.proclamation.currency}, it would be unwise to attempt execution of your ${V.SecExp.proclamation.type} this week.`); } } @@ -926,7 +926,7 @@ App.EndWeek.personalBusiness = function() { r.push(`A share of our weapons production is sold to other Free Cities.`); income += Math.round(V.week / 3 * price * 10 * factoryMod); } - if (V.peacekeepers.strength >= 50) { + if (V.peacekeepers !== 0 && V.peacekeepers.strength >= 50) { r.push(`The peacekeeping force is always in need of new armaments and is happy to be supplied by their ally.`); income += Math.round(V.peacekeepers.strength * price * 10 * factoryMod); } diff --git a/src/endWeek/economics/personalNotes.js b/src/endWeek/economics/personalNotes.js index f066bba907a7a2c4a074fb4ecd2229da2e20caab..0618688c401df95e1ac7c7032b285846399db795 100644 --- a/src/endWeek/economics/personalNotes.js +++ b/src/endWeek/economics/personalNotes.js @@ -32,13 +32,15 @@ App.EndWeek.personalNotes = function() { if (V.PC.rules.lactation === "sell") { /* watch this be a disaster */ milk = milkAmount(V.PC); - r.push(`Whenever you have a free moment and a chest swollen with milk, you spend your time attached to the nearest milker. As a result, you produce${milk} liters of sellable milk over the week.`); - if (V.arcologies[0].FSPastoralistLaw === 1) { - milkSale = milk * (28 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); - r.push(`Since breast milk is ${V.arcologies[0].name}'s only legal dairy product, and yours is in a class all of its own, society can't get enough of it and you make <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { - milkSale = milk * (12 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); - r.push(`Since milk is fast becoming a major part of the ${V.arcologies[0].name}'s dietary culture, and yours is in a class all of its own, you make <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); + r.push(`Whenever you have a free moment and a chest swollen with milk, you spend your time attached to the nearest milker. As a result, you produce ${milk} liters of sellable milk over the week.`); + if (V.arcologies[0].FSPastoralist !== "unset") { + if (V.arcologies[0].FSPastoralistLaw === 1) { + milkSale = milk * (28 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); + r.push(`Since breast milk is ${V.arcologies[0].name}'s only legal dairy product, and yours is in a class all of its own, society can't get enough of it and you make <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); + } else { + milkSale = milk * (12 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); + r.push(`Since milk is fast becoming a major part of the ${V.arcologies[0].name}'s dietary culture, and yours is in a class all of its own, you make <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); + } } else { milkSale = milk * 8; r.push(`Your milk is sold for <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); @@ -209,7 +211,7 @@ App.EndWeek.personalNotes = function() { } } else if (V.PC.boobs >= 800) { if (random(1, 100) > 75) { - r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child`:`children`}.`); + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child` : `children`}.`); V.PC.boobs += 25; if (V.PC.boobs >= 1000) { r.push(`You popped your bra when you put it on; <span class="lime">time to order some F-cups.</span>`); @@ -217,7 +219,7 @@ App.EndWeek.personalNotes = function() { } } else if (V.PC.boobs >= 650) { if (random(1, 100) > 80) { - r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child`:`children`}.`); + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child` : `children`}.`); V.PC.boobs += 25; if (V.PC.boobs >= 800) { r.push(`Their prominence, and a quick measuring, reveals <span class="lime">you now sport DDs.</span>`); @@ -225,7 +227,7 @@ App.EndWeek.personalNotes = function() { } } else if (V.PC.boobs >= 500) { if (random(1, 100) > 80) { - r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child`:`children`}.`); + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${(V.PC.pregType === 1) ? `child` : `children`}.`); V.PC.boobs += 25; if (V.PC.boobs >= 650) { r.push(`They're big, sensitive, <span class="lime">and now a D-cup.</span>`); @@ -282,7 +284,7 @@ App.EndWeek.personalNotes = function() { V.PC.labor = 1; } if (V.PC.labor === 1) { - if (V.PC.birthsTotal > 0) { + if (V.PC.counter.birthsTotal > 0) { r.push(App.UI.DOM.makeElement("div", `<span class="red">A dull cramp runs down your middle.</span> You'll be giving birth soon.`)); } else { r.push(App.UI.DOM.makeElement("div", `You begin to experience <span class="red">odd cramps</span> in your lower body. Contractions, more than likely.`)); diff --git a/src/endWeek/economics/reputation.js b/src/endWeek/economics/reputation.js index 700859646e8394b4053a1de1cfea87e5d66cecb4..c7c614a887cce4e82f93e8b2fac989fa7cb60a22 100644 --- a/src/endWeek/economics/reputation.js +++ b/src/endWeek/economics/reputation.js @@ -640,7 +640,7 @@ App.EndWeek.reputation = function() { FutureSocieties.Change("EgyptianRevivalist", 5); } if (V.language !== "Ancient Egyptian") { - r.push(`Continuing to use ${V.language} as the lingua franca of V.arcologies[0].name rather than revived Ancient Egyptian <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); + r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than revived Ancient Egyptian <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("EgyptianRevivalist", -2); } } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { @@ -899,13 +899,13 @@ App.EndWeek.reputation = function() { if (V.rep > 20000) { r.push(`Your reputation is capped.`); - } else if (V.rep-V.enduringRep > 7500) { + } else if (V.rep - V.enduringRep > 7500) { r.push(`Your base rate of reputation decay is very high.`); - } else if (V.rep-V.enduringRep > 5000) { + } else if (V.rep - V.enduringRep > 5000) { r.push(`Your base rate of reputation decay is high.`); - } else if (V.rep-V.enduringRep > 2500) { + } else if (V.rep - V.enduringRep > 2500) { r.push(`Your base rate of reputation decay is moderate.`); - } else if (V.rep-V.enduringRep > 0) { + } else if (V.rep - V.enduringRep > 0) { r.push(`Your base rate of reputation decay is low.`); } if (V.enduringRep >= 10000) { diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js index d266db86c95b08f89345541b6887b72da0bedaea..871f5566d3a35ffc8af09754bcaea386d50e724d 100644 --- a/src/endWeek/endWeek.js +++ b/src/endWeek/endWeek.js @@ -9,7 +9,6 @@ globalThis.endWeek = (function() { // globals setup resetSlaveMarkets(); - resetSlaveCounters(); for (const s of V.slaves) { slavePrep(s); } @@ -17,7 +16,7 @@ globalThis.endWeek = (function() { saveWeekTotals(); // pass time for objects that need it - weather (); + weather(); organs(); prosthetics(); nursery(); @@ -37,14 +36,7 @@ globalThis.endWeek = (function() { } } - function resetSlaveCounters() { - V.subSlaves = 0; - } - function slavePrep(s) { - if (s.assignment === Job.SUBORDINATE && s.subTarget === 0) { - V.subSlaves++; - } s.lastWeeksCashIncome = 0; s.lastWeeksRepIncome = 0; s.lastWeeksRepExpenses = 0; diff --git a/src/endWeek/healthFunctions.js b/src/endWeek/healthFunctions.js index 987282793953e8edc998ad73efd733674ac78d0a..a23337026450cb4e5142f1e84334322c2398e682 100644 --- a/src/endWeek/healthFunctions.js +++ b/src/endWeek/healthFunctions.js @@ -443,13 +443,12 @@ globalThis.tired = function(slave) { assignment += 5; } } else if (slave.subTarget === 0) { - const workload = ((V.dormitoryPopulation + V.roomsPopulation - V.subSlaves) > 5) ? (V.subSlaves / (V.dormitoryPopulation + V.roomsPopulation - V.subSlaves)) : 1; if (slave.devotion > 20) { assignment += 7; } else { assignment += 10; } - assignment = Math.ceil(assignment / workload); // 50 if very overloaded, make sure to have enough girls serving! + assignment = Math.min(Math.ceil(assignment / App.EndWeek.saVars.subSlaveRatio), 50); // up to 50 if very overloaded, make sure to have enough girls serving! } else { if (slave.relationshipTarget === slave.subTarget && slave.health.tired > 60) { assignment += 2; diff --git a/src/endWeek/masterSuiteReport.js b/src/endWeek/masterSuiteReport.js index 874a3b72c2ba964fefa8c39144065d04e4d750a7..e038db401dc6a3150eeec16cd35ced52f24c1e04 100644 --- a/src/endWeek/masterSuiteReport.js +++ b/src/endWeek/masterSuiteReport.js @@ -332,8 +332,6 @@ App.EndWeek.masterSuiteReport = function() { $(smallFrag).append(r.join(' ')); - V.i = V.slaveIndices[slave.ID]; - App.Utils.setLocalPronouns(slave); // need this for the includes if (V.verboseDescriptions === 1) { const msContent = App.UI.DOM.appendNewElement("div", smallFrag, '', "indent"); $(msContent).append(`${He} ${App.SlaveAssignment.pleaseYou(slave)}`); diff --git a/src/endWeek/reports/nurseryReport.js b/src/endWeek/reports/nurseryReport.js index bb5ea5e61348a469bdf4f6b049a2f2fa636f3535..13d315fe65c1d9ec2e980f3b7ec9c2e782fc4410 100644 --- a/src/endWeek/reports/nurseryReport.js +++ b/src/endWeek/reports/nurseryReport.js @@ -138,9 +138,6 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { /** @type {App.Entity.SlaveState} */ const slave = S.Matron; - V.i = V.slaveIndices[slave.ID]; - App.Utils.setLocalPronouns(slave); // needed for "include"s - if (V.showEWD !== 0) { const matronEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -158,8 +155,6 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { // FIXME: check these numbers over to make sure they make sense for (const slave of slaves) { - V.i = V.slaveIndices[slave.ID]; - slave.devotion += devBonus; if (slave.devotion <= 20 && slave.trust >= -20) { @@ -202,8 +197,6 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { break; } - App.Utils.setLocalPronouns(slave); // needed for "include"s - if (V.showEWD) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); diff --git a/src/endWeek/saChoosesOwnJob.js b/src/endWeek/saChoosesOwnJob.js index f77cecf7efd1dcf0cff38695c4789a8f8f136321..f59353abde47fc5268fa7546b00439183a53685a 100644 --- a/src/endWeek/saChoosesOwnJob.js +++ b/src/endWeek/saChoosesOwnJob.js @@ -88,7 +88,7 @@ App.SlaveAssignment.choosesOwnJob = (function() { slave.devotion -= 5; } else if (slave.health.illness > 1) { if (V.universalRulesAssignsSelfFacility === 1 && V.clinic > clinicL) { - choice.push(`is ill, so ${he} decides to get treatment at${V.clinicName}.`); + choice.push(`is ill, so ${he} decides to get treatment at ${V.clinicName}.`); choice.push(assignJob(slave, "get treatment in the clinic")); } else { choice.push(`is ill, so ${he} decides to rest.`); diff --git a/src/endWeek/saLongTermEffects.js b/src/endWeek/saLongTermEffects.js index 65b954b233b507a14271bb389e6f688d4c216cfa..1dfd4167a7356c9af00202b01fd0479d897600c2 100644 --- a/src/endWeek/saLongTermEffects.js +++ b/src/endWeek/saLongTermEffects.js @@ -397,7 +397,7 @@ App.SlaveAssignment.longTermEffects = (function() { r.push(`Having ${his} heavy milk production forced through ${his} tiny nipples <span class="change positive">stretches and engorges them.</span>`); slave.nipples = "cute"; } - } else if (slave.nipples === "cute" || slave.nipples === "inverted") { + } else if (slave.nipples === "cute") { if (random(1, 100) > 80) { r.push(`${He}'s lactating so heavily that ${his} permanently swollen nipples gradually become accustomed to the constant flow of milk. They <span class="change positive">become puffy</span> and engorged.`); slave.nipples = "puffy"; diff --git a/src/endWeek/saLongTermMentalEffects.js b/src/endWeek/saLongTermMentalEffects.js index 44f9f2827b189dd53b4cc11354ac60b08fcbd0f2..fafd7a77f55c5b2dc8eccb0a8418731f141d943f 100644 --- a/src/endWeek/saLongTermMentalEffects.js +++ b/src/endWeek/saLongTermMentalEffects.js @@ -409,12 +409,7 @@ App.SlaveAssignment.longTermMentalEffects = (function() { if (!hasAnyArms(slave)) { t.push(`face between`); } else { - if (hasBothArms(slave)) { - t.push(`hands`); - } else { - t.push(`hand`); - } - t.push(`on`); + t.push(`${(hasBothArms(slave)) ? `hands` : `hand`} on`); } t.push(`her breasts. ${He}'s now <span class="positive">more aroused by women.</span>`); } diff --git a/src/endWeek/saPleaseYou.js b/src/endWeek/saPleaseYou.js index 9d6d59b55af92d00b7d9628ae387db9ebb7d23ba..429356747b7a560d642da9d018f2300a710d280f 100644 --- a/src/endWeek/saPleaseYou.js +++ b/src/endWeek/saPleaseYou.js @@ -1799,4 +1799,4 @@ App.SlaveAssignment.pleaseYou = (function() { slave.fetishStrength = 10; } } -})(); \ No newline at end of file +})(); diff --git a/src/endWeek/saRecruitGirls.js b/src/endWeek/saRecruitGirls.js index 781b51e2c80e6e5921df4fdd31e4317554f60a12..2815560f3a779593e31196a055cf500cda8f0ee2 100644 --- a/src/endWeek/saRecruitGirls.js +++ b/src/endWeek/saRecruitGirls.js @@ -1475,7 +1475,7 @@ App.SlaveAssignment.recruitGirls = (function() { pushFS(`Clad in ${his} holy garb, ${slave.slaveName} preaches to the atrium with a powerful appeal to the new morality, in which ${his} absolute faith in your revelations is unmistakable.`); seed += 1; } else if (arcology.FSNeoImperialist !== "unset" && slave.clothes === "a tight Imperial bodysuit") { - pushFS(`${He} lectures eloquently on the importance of hierarchy and noble lineage in a pseduo-religious fashion, dressed out in ${his} form-fitting bodysuit; most of the listeners' eyes fall on ${his} tightly-outlined chest and how ${his} nipples protrude obviously underneath the cybersuit, your crest emblazoned over the rock-hard nubs doing more of the arguing.`); + pushFS(`${He} lectures eloquently on the importance of hierarchy and noble lineage in a pseudo-religious fashion, dressed out in ${his} form-fitting bodysuit; most of the listeners' eyes fall on ${his} tightly-outlined chest and how ${his} nipples protrude obviously underneath the cybersuit, your crest emblazoned over the rock-hard nubs doing more of the arguing.`); seed += 1; } else if (arcology.FSNeoImperialist !== "unset" && slave.clothes === "Imperial Plate") { pushFS(`${He} gives a lengthy speech about the importance of hierarchy and noble lineage in a pseudo-religious fashion, speaking on the divine right of the nobility to rule while dominating the floor in ${his} ultra-heavy Imperial plate.`); diff --git a/src/endWeek/saReleaseRules.js b/src/endWeek/saReleaseRules.js index 412f87c23ba8382da77b18b2c630768aba47b665..dd9c02069df06bd6402faab016b460841bf3e7d6 100644 --- a/src/endWeek/saReleaseRules.js +++ b/src/endWeek/saReleaseRules.js @@ -7,7 +7,23 @@ App.SlaveAssignment.nonAssignmentRelease = function(slave) { const release = slave.rules.release; const {he, his, him, himself} = getPronouns(slave); - if (!App.Utils.hasNonassignmentSex(slave) && release.masturbation === 0) { + const subSlaves = App.EndWeek.saVars.subSlaveMap.get(slave.ID); + if (subSlaves && subSlaves.length > 0) { + // if a slave has been assigned a specific personal subslave, or several, go to them first for relief + // there is no check for release rules in this case...permission is implicit in the assignment (saServeYourOtherSlaves also does not check) + const whom = subSlaves.length > 1 ? "several slaves" : getSlave(subSlaves[0]).slaveName; + r.push(`is <span class="devotion inc">delighted</span> that you've assigned ${whom} to ${him} for ${his} personal use, and <span class="trust inc">relishes</span> the feeling of being served.`); + // note rapid trust increase...power is dangerous if the target isn't devoted yet! + if (subSlaves.length > 1) { + slave.devotion += 2; + slave.trust += 6; + } else { + slave.devotion += 1; + slave.trust += 4; + } + // no fetish effects/discovery here...saServeYourOtherSlaves' subLife will take care of that + slave.need = 0; + } else if (!App.Utils.hasNonassignmentSex(slave) && release.masturbation === 0) { if (release.master === 1) { const toYou = assignmentVisible(slave) ? `to you` : `up to the penthouse`; if ((slave.devotion <= 20) && (slave.trust >= -20)) { diff --git a/src/endWeek/saRules.js b/src/endWeek/saRules.js index da97998755f8fbe9b62d088fbda8af5be1dfb509..0b325131f894578811cd9dab3baee08ced124b1b 100644 --- a/src/endWeek/saRules.js +++ b/src/endWeek/saRules.js @@ -1,7 +1,7 @@ /** * * @param {App.Entity.SlaveState} slave - * @returns {Node} + * @returns {DocumentFragment} */ App.SlaveAssignment.rules = function(slave) { const el = new DocumentFragment(); @@ -14,6 +14,7 @@ App.SlaveAssignment.rules = function(slave) { He, His, he, his, him, himself, girl, wife } = getPronouns(slave); + const hands = (hasBothArms(slave)) ? `hands` : `hand`; let wife2; let milkResult; let wardenFunTimes; @@ -638,7 +639,7 @@ App.SlaveAssignment.rules = function(slave) { if (!hasAnyArms(slave)) { r.push(`imagination`); } else { - r.push(`${(hasBothArms(slave)) ? `hands` : `hand`}.`); + r.push(`${hands}.`); } r.push(`and toys, but <span class="mediumaquamarine">understands you care about ${his} current health.</span>`); slave.trust += 1; @@ -893,7 +894,7 @@ App.SlaveAssignment.rules = function(slave) { r.push(`is frigid and has little interest in getting off, making the rule restricting ${his} sexual outlets superfluous.`); slave.need = 0; } else if (slave.relationship === -3) { - r.push(`You make sure your troublesome ${wife}'s sexual needs are handled, openly, in the middle of V.cellblockName, where everyone can see, hear, and smell your dominance.`); + r.push(`You make sure your troublesome ${wife}'s sexual needs are handled, openly, in the middle of ${V.cellblockName}, where everyone can see, hear, and smell your dominance.`); slave.need = 0; if (canDoVaginal(slave) && slave.vagina > 0) { seX(slave, "penetrative", V.PC, "vaginal", 7); @@ -1029,7 +1030,7 @@ App.SlaveAssignment.rules = function(slave) { if (!hasAnyArms(slave)) { r.push(`figurative`); } - r.push(`${(hasBothArms(slave)) ? `hands` : `hand`}.`); + r.push(`${hands}.`); slave.devotion += 1; slave.trust += 1; r.push(`${He} finds plenty of time to relax between ${his} duties, or during them, should ${his} company be requested.`); @@ -1230,11 +1231,11 @@ App.SlaveAssignment.rules = function(slave) { r.push(App.SlaveAssignment.nonAssignmentRelease(slave)); } - r.push(`${He} is <span class="hotpink">very happy</span> with ${his} private room in the back of ${V.nurseryName} and <span class="mediumaquamarine">trusts</span> you a bit more for placing the responsibility of raising V.arcologies[0].name's children in ${his}`); + r.push(`${He} is <span class="hotpink">very happy</span> with ${his} private room in the back of ${V.nurseryName} and <span class="mediumaquamarine">trusts</span> you a bit more for placing the responsibility of raising ${V.arcologies[0].name}'s children in ${his}`); if (!hasAnyArms(slave)) { r.push(`figurative`); } - r.push(`${(hasBothArms(slave)) ? `hands` : `hand`}.`); + r.push(`${hands}.`); slave.devotion += 1; slave.trust += 1; @@ -1428,7 +1429,7 @@ App.SlaveAssignment.rules = function(slave) { if (!hasAnyArms(slave)) { r.push(`figurative`); } - r.push(`${(hasBothArms(slave)) ? `hands` : `hand`}. It also helps to offset the tiring nature of ${his} position.`); + r.push(`${hands}. It also helps to offset the tiring nature of ${his} position.`); slave.devotion += 1; slave.trust += 1; @@ -1918,7 +1919,7 @@ App.SlaveAssignment.rules = function(slave) { slave.trust -= 1; } slave.need -= 20; - } else if ((release.masturbation === 0)) { + } else if (release.masturbation === 0) { r.push(`gets off from being milked, so being forbidden to masturbate doesn't affect ${him} seriously.`); slave.need -= 20; } else { @@ -2209,7 +2210,7 @@ App.SlaveAssignment.rules = function(slave) { slave.trust -= 1; } slave.need -= 20; - } else if ((release.masturbation === 0)) { + } else if (release.masturbation === 0) { r.push(`gets off from working as a farmhand, so being forbidden to masturbate doesn't affect ${him} seriously.`); slave.need -= 20; } else { @@ -2415,7 +2416,7 @@ App.SlaveAssignment.rules = function(slave) { slave.trust -= 1; } slave.need -= 20; - } else if ((release.masturbation === 0)) { + } else if (release.masturbation === 0) { r.push(`gets off regularly, so being forbidden to masturbate doesn't affect ${him} seriously.`); slave.need -= 20; } else { @@ -2492,7 +2493,7 @@ App.SlaveAssignment.rules = function(slave) { slave.trust -= 1; } slave.need -= 20; - } else if ((release.masturbation === 0)) { + } else if (release.masturbation === 0) { r.push(`gets off with ${S.HeadGirl.slaveName}, so being forbidden to masturbate doesn't affect ${him} seriously.`); slave.need -= 20; } else { @@ -2557,14 +2558,26 @@ App.SlaveAssignment.rules = function(slave) { r.push(`${He} hates ${himself} for climaxing, and knows the mild aphrodisiacs in the food are forcing ${his} arousal, <span class="gold">frightening ${him}.</span>`); slave.trust -= 1; } - } else if ((release.masturbation === 0)) { + } else if (release.masturbation === 0) { r.push(`gets off at work, so being forbidden to masturbate doesn't affect ${him} seriously.`); } else { r.push(`gets off at work, so ${he} doesn't feel the need to masturbate frequently.`); } slave.need -= 20; } else { - r.push(App.SlaveAssignment.nonAssignmentRelease(slave)); + // allowed to get off with other slaves, but not given a specific subslave...try to use the shared ones before going further + if (release.slaves === 1 && slave.assignment !== Job.SUBORDINATE && !App.EndWeek.saVars.subSlaveMap.get(slave.ID)) { + slave.need -= Math.min(50 * App.EndWeek.saVars.subSlaveRatio, slave.need); + r.push(`often uses the penthouse subordinate slaves to satisfy ${his}`); + if (slave.need > 0) { + r.push(`sexual need, but it's just not enough; ${he}`); + } else { + r.push(`sexual need.`); + } + } + if (slave.need > 0) { + r.push(App.SlaveAssignment.nonAssignmentRelease(slave)); + } } r.push(App.EndWeek.Rules.speechRules(slave)); @@ -2753,7 +2766,7 @@ App.SlaveAssignment.rules = function(slave) { if (slave.lactation === 1) { slave.rules.lactation = "maintain"; } - } else if (slave.rules.lactation === "maintain" && (V.servantMilkers !== 1 || !setup.servantMilkersJobs.includes(slave.assignment))) { + } else if (slave.rules.lactation === "maintain" && (V.servantMilkers !== 1 || !App.Data.misc.servantMilkersJobs.includes(slave.assignment))) { r.push(`${He} utilizes ${his} lactation during ${his} daily tasks as needed, and when ${he} isn't drained well enough, spends the evenings with a pair of automatic breast pumps.`); slave.lactationDuration = 2; slave.boobs -= slave.boobsMilk; @@ -2761,10 +2774,6 @@ App.SlaveAssignment.rules = function(slave) { } r.push(App.SlaveAssignment.rewardAndPunishment(slave)); - if (V.subSlaves > 0 && release.slaves === 1 && slave.assignment !== "serve your other slaves") { - slave.need -= (20 * V.subSlaves); - /* make those serve your other slaves do some work for once */ - } } } } diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js index 10cd5d2480c6f0c64fc859e09bd12535a1cc3fda..edac378504491aeea46d2c40ef881a5ee8f134b8 100644 --- a/src/endWeek/saServeYourOtherSlaves.js +++ b/src/endWeek/saServeYourOtherSlaves.js @@ -17,7 +17,6 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { let mammaryUse; let penetrativeUse; let fuckCount; - let load; let cervixPump; let domSlave; @@ -55,7 +54,6 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { penetrativeUse = 0; cervixPump = 0; fuckCount = 0; - load = 0; subName = slave.slaveName; subSlaveLikedFetish = 0; @@ -233,11 +231,14 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { } else if (!canMove(slave)) { r.push(`Since ${he}'s completely immobile, ${he}'s especially vulnerable.`); } - if (V.subSlaves <= 0) { - V.subSlaves = 1; + // week-end reassignment (returning to previous job) can fuck up the subslave count if she's the only one...normally this should never happen + if (App.EndWeek.saVars.subSlaveRatio === 0) { + r.push(`${He}'s just returning to ${his} job, so ${he} doesn't get much action this week.`); + return; } - if ((V.dormitoryPopulation + V.roomsPopulation - V.subSlaves) > 5) { - load = (V.subSlaves / (V.dormitoryPopulation + V.roomsPopulation - V.subSlaves)); + const subSlaves = App.EndWeek.saVars.subSlaveMap.get(0) || []; + if ((V.dormitoryPopulation + V.roomsPopulation - subSlaves.length) > 5) { + const load = App.EndWeek.saVars.subSlaveRatio; if (load > 0.8) { r.push(`Since there are enough other slaves servicing your stock alongside ${him}, ${he} sees limited action.`); } else if (load > 0.5) { @@ -263,7 +264,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { } } else { r.push(`Since`); - if (V.subSlaves === 1) { + if (subSlaves.length === 1) { r.push(`${he} is the only slave`); } else { r.push(`there are so few other slaves`); @@ -307,8 +308,8 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { } else { r.push(`Since you have so few slaves in need of release, ${he} sees little action.`); } - // added a min - fuckCount = Math.min(300, Math.ceil((((V.dormitoryPopulation + V.roomsPopulation) + jsRandom(((V.dormitoryPopulation + V.roomsPopulation) * 1), (V.dormitoryPopulation + V.roomsPopulation) * 7)) / V.subSlaves) * healthPenalty(slave))); + // service the fraction of the eligible slave population that's not served by another subslave between 1 and 5 times per day + fuckCount = Math.ceil((jsRandom(7, 35) / App.EndWeek.saVars.subSlaveRatio) * healthPenalty(slave)); SimpleSexAct.Slave(slave, fuckCount); } @@ -1452,16 +1453,15 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { if (slave.fetishStrength < 100) { slave.fetishStrength++; } - } else if (fetishChange > jsRandom(0, 100) && slave.fetish !== "masochist" && slave.fetish !== "submissive" && load <= 0.8) { + } else if (fetishChange > jsRandom(0, 100) && slave.fetish !== "masochist" && slave.fetish !== "submissive" && between(App.EndWeek.saVars.subSlaveRatio, 0, 0.8)) { r.push(`Being used as much as ${he} is starts to take a toll on ${him} sexuality; <span class="lightcoral">${he} begins to enjoy being your chattel's fucktoy.</span>`); slave.fetish = "submissive"; slave.fetishStrength = 65; slave.fetishKnown = 1; } } else if (jobType === "sub") { - domSlave.need = 0; if (domSlaveUsedFetish) { - Math.clamp(domSlave.fetishStrength += 3, 0, 100); + domSlave.fetishStrength = Math.clamp(domSlave.fetishStrength + 3, 0, 100); } if (subSlaveLikedFetish) { slave.need = 0; @@ -1787,7 +1787,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { } } } else if (jobType === "cumdump") { - if ((V.dormitoryPopulation + V.roomsPopulation - V.subSlaves) > 5 && load <= 0.8) { + if (App.EndWeek.saVars.subSlaveRatio <= 0.8) { if (slave.sexualFlaw === "repressed") { if (slave.devotion > 20 && jsRandom(1, 100) > (100 - fuckCount)) { r.push(`After being brought to orgasm so many times, <span class="green">${he} begins to enjoy having sex.</span>`); diff --git a/src/endWeek/saSharedVariables.js b/src/endWeek/saSharedVariables.js index ac9ef5fcfbdc0a800be970692e085740d6ed7299..8fc356b65590ba174514ca70dc37f606a8d39e32 100644 --- a/src/endWeek/saSharedVariables.js +++ b/src/endWeek/saSharedVariables.js @@ -30,6 +30,10 @@ App.EndWeek.SASharedVariables = class { this.unMadam = 0; /** Why was the DJ fired this week? */ this.unDJ = 0; + /** Who are your subordinate slaves actually assigned to? + * @type {Map<number, Array<number>>} - key is sub target, value is list of sub slaves (by ID) assigned to that target + */ + this.subSlaveMap = new Map(); } /** @@ -45,4 +49,14 @@ App.EndWeek.SASharedVariables = class { this.inappropriateLactation = 0; /** TODO: move $slaveUsedRest here after saRules is converted, and find others */ } + + /** Compute shared subslave ratio (subslaves per ordinary slave) */ + get subSlaveRatio() { + const subSlaves = this.subSlaveMap.get(0); + const subCount = subSlaves ? subSlaves.length : 0; + if (V.dormitoryPopulation + V.roomsPopulation <= subCount) { + return subCount; // avoid negative result or divide by zero + } + return subCount / (V.dormitoryPopulation + V.roomsPopulation - subCount); + } }; diff --git a/src/endWeek/schoolroomReport.js b/src/endWeek/schoolroomReport.js index 1695ad789538cfb858e9c01bab8f279a4dcbadf4..9e675864fcd23d341a6c07bfe82b079bf6ec48ef 100644 --- a/src/endWeek/schoolroomReport.js +++ b/src/endWeek/schoolroomReport.js @@ -146,8 +146,6 @@ App.EndWeek.schoolroomReport = function() { if (S.Schoolteacher) { const slave = S.Schoolteacher; - V.i = V.slaveIndices[slave.ID]; - App.Utils.setLocalPronouns(slave); // need this for the includes /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const schoolteacherEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -164,7 +162,6 @@ App.EndWeek.schoolroomReport = function() { let restedSlaves = 0; for (const slave of slaves) { - V.i = V.slaveIndices[slave.ID]; slave.devotion += devBonus; if (slave.health.condition < -80) { improveCondition(slave, 20); @@ -224,7 +221,6 @@ App.EndWeek.schoolroomReport = function() { continue; } - App.Utils.setLocalPronouns(slave); // need this for the includes if (V.showEWD !== 0) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); diff --git a/src/endWeek/servantsQuartersReport.js b/src/endWeek/servantsQuartersReport.js index 9a4e71070c732e21418410da3f476d2734525dda..75a67b0b63ebbe5938e3eb7b0f912a9201302f96 100644 --- a/src/endWeek/servantsQuartersReport.js +++ b/src/endWeek/servantsQuartersReport.js @@ -206,8 +206,6 @@ App.EndWeek.servantsQuartersReport = function() { if (S.Stewardess) { /** @type {App.Entity.SlaveState} */ const slave = S.Stewardess; - V.i = V.slaveIndices[slave.ID]; - App.Utils.setLocalPronouns(slave); // need this for the includes /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const stewardessEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -226,7 +224,6 @@ App.EndWeek.servantsQuartersReport = function() { let SQMilkSale = 0; for (const slave of slaves) { - V.i = V.slaveIndices[slave.ID]; slave.devotion += devBonus; if (slave.devotion <= 20 && slave.trust >= -20) { slave.devotion -= 5; @@ -284,7 +281,6 @@ App.EndWeek.servantsQuartersReport = function() { slave.rules.living = "normal"; } - App.Utils.setLocalPronouns(slave); // need this for the includes if (V.showEWD !== 0) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index 48a33a764a154481f40ecda0ed9624b5b90395c4..6e2c5ba860109411a735b2d8b68d9feb4e9a7e2f 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -73,6 +73,16 @@ App.EndWeek.slaveAssignmentReport = function() { case Job.FUCKTOY: V.fuckSlaves++; break; + case Job.SUBORDINATE: { + const map = App.EndWeek.saVars.subSlaveMap; + const curSubs = map.get(slave.subTarget); + if (curSubs) { + curSubs.push(slave.ID); + } else { + map.set(slave.subTarget, [slave.ID]); + } + break; + } } if (slave.bellyPain !== 0) { diff --git a/src/events/RESS/devotedVirgin.js b/src/events/RESS/devotedVirgin.js index df6c6ac84471e9d4bd5257626484e8ebff2b48b5..1d51bc5697940b2e1efe4cda355c4695238348c2 100644 --- a/src/events/RESS/devotedVirgin.js +++ b/src/events/RESS/devotedVirgin.js @@ -45,7 +45,7 @@ App.Events.RESSDevotedVirgin = class RESSDevotedVirgin extends App.Events.BaseEv } else { t.push(Spoken(eventSlave, "Learning about so many of the other slaves getting fucked makes it seem like so much fun.")); } - t.push(Spoken(eventSlave, `"I'm so turned on by it. I can't be a proper sex slave without using my pussy. Please take my virginity, ${Master}."`)); + t.push(Spoken(eventSlave, `I'm so turned on by it. I can't be a proper sex slave without using my pussy. Please take my virginity, ${Master}."`)); } else { t.push(`${He} points to ${his} pussy and comically pantomimes having sex, and then uses gestures to ask if ${he} can serve you with ${his} pussy.`); } diff --git a/src/events/RESS/lazyEvening.js b/src/events/RESS/lazyEvening.js index 49e046dca051f738dc75f450afbca905fbde290b..283c49dd12cab7be2ffed19dfae870259cfce0f6 100644 --- a/src/events/RESS/lazyEvening.js +++ b/src/events/RESS/lazyEvening.js @@ -126,7 +126,7 @@ App.Events.RESSLazyEvening = class RESSLazyEvening extends App.Events.BaseEvent if (eventSlave.belly >= 5000) { t.push(`Between the two, there is little ${he} can do to cover ${his} exposed ${eventSlave.bellyPreg >= 3000 ? "pregnancy" : "middle"}.`); } - t.push(`${He}'s the perfect picture of an attentive little old world ${girl}friend ${eventSlave.height > 185 ? ` (though, of course, ${he}'s anything but physically small)` : ""}.`); + t.push(`${He}'s the perfect picture of an attentive little old world ${girl}friend${eventSlave.height > 185 ? ` (though, of course, ${he}'s anything but physically small)` : ""}.`); } App.Events.addParagraph(node, t); diff --git a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js index 186861aa9b5fda008e21ce435cb40a4ec17bc156..0967be7a4b4b1133c861aacc63f97111be11fee2 100644 --- a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js +++ b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js @@ -50,8 +50,7 @@ App.UI.CustomSlaveTrade = function() { div = document.createElement("div"); App.UI.DOM.appendNewElement("span", div, `Filter by Race: `); array = []; - for (let i = 0; i < setup.filterRaces.length; i++) { - const race = setup.filterRaces[i]; + for (const race of setup.filterRaces) { if (baseControlsFilter === uncapFirstChar(race).replace(/[ -]/g, '')) { array.push( App.UI.DOM.disabledLink( @@ -64,7 +63,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( race, () => { - baseControlsFilter = uncapFirstChar(setup.filterRaces[i]).replace(/[ -]/g, ''); + baseControlsFilter = uncapFirstChar(race).replace(/[ -]/g, ''); refresh(); } ) @@ -77,8 +76,7 @@ App.UI.CustomSlaveTrade = function() { div = document.createElement("div"); App.UI.DOM.appendNewElement("span", div, `Filter by Region: `); array = []; - for (let i = 0; i < setup.filterRegions.length; i++) { - const region = setup.filterRegions[i]; + for (const region of setup.filterRegions) { if (baseControlsFilter === uncapFirstChar(region).replace(/[ -]/g, '')) { array.push( App.UI.DOM.disabledLink( @@ -91,7 +89,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( region, () => { - baseControlsFilter = uncapFirstChar(setup.filterRegions[i]).replace(/[ -]/g, ''); + baseControlsFilter = uncapFirstChar(region).replace(/[ -]/g, ''); refresh(); } ) @@ -111,8 +109,7 @@ App.UI.CustomSlaveTrade = function() { list = document.createElement("UL"); list.classList.add("customize-slave-trade-ul"); if (baseControlsFilter === "all") { - for (let i = 0; i < setup.baseNationalities.length; i++) { - const nation = setup.baseNationalities[i]; + for (const nation of setup.baseNationalities) { const li = document.createElement("LI"); li.classList.add("customize-slave-trade-li"); li.append(nation); @@ -125,7 +122,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `+`, () => { - hashPush(V.nationalities, setup.baseNationalities[i]); + hashPush(V.nationalities, nation); refresh(); } ), @@ -138,9 +135,9 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `-`, () => { - V.nationalities[setup.baseNationalities[i]] -= 1; - if (V.nationalities[setup.baseNationalities[i]] <= 0) { - delete V.nationalities[setup.baseNationalities[i]]; + V.nationalities[nation] -= 1; + if (V.nationalities[nation] <= 0) { + delete V.nationalities[nation]; } refresh(); } @@ -155,7 +152,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `0`, () => { - delete V.nationalities[setup.baseNationalities[i]]; + delete V.nationalities[nation]; refresh(); } ), @@ -172,7 +169,7 @@ App.UI.CustomSlaveTrade = function() { for (const race of setup.filterRaces) { const racialNationalities = setup.baseNationalities.filter(function(n) { let races = setup.raceSelector[n] || setup.raceSelector['']; - return races[uncapFirstChar(race)] * 3.5 > hashSum(races); + return races[race.toLowerCase()] * 3.5 > hashSum(races); }); if (racialNationalities.length > 0) { @@ -188,10 +185,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `+`, () => { - setup.baseNationalities.filter(function(n) { - let races = setup.raceSelector[n] || setup.raceSelector['']; - return races[uncapFirstChar(race)] * 3.5 > hashSum(races); - }).forEach(function(n) { hashPush(V.nationalities, n); }); + racialNationalities.forEach(n => hashPush(V.nationalities, n)); refresh(); } ), @@ -203,11 +197,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `0`, () => { - setup.baseNationalities.filter(function(n) { - let races = setup.raceSelector[n] || setup.raceSelector['']; - return races[uncapFirstChar(race)] * 3.5 > hashSum(races); - }).forEach(function(n) { delete V.nationalities[n]; }); - + racialNationalities.forEach(n => delete V.nationalities[n]); refresh(); } ), @@ -221,10 +211,9 @@ App.UI.CustomSlaveTrade = function() { /* Filtered pop controls */ const controlsNationality = setup[baseControlsFilter + 'Nationalities']; const keys = Object.keys(controlsNationality); - for (let i = 0; i < keys.length; i++) { + for (const nation of keys) { const li = document.createElement("LI"); li.classList.add("customize-slave-trade-li"); - const nation = keys[i]; li.append(nation); span = document.createElement("span"); span.classList.add("customize-slave-trade-li-container"); @@ -234,7 +223,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `+`, () => { - hashPush(V.nationalities, keys[i]); + hashPush(V.nationalities, nation); refresh(); } ), @@ -248,9 +237,9 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `-`, () => { - V.nationalities[keys[i]] -= 1; - if (V.nationalities[keys[i]] <= 0) { - delete V.nationalities[keys[i]]; + V.nationalities[nation] -= 1; + if (V.nationalities[nation] <= 0) { + delete V.nationalities[nation]; } refresh(); } @@ -265,7 +254,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( `0`, () => { - delete V.nationalities[keys[i]]; + delete V.nationalities[nation]; refresh(); } ), @@ -383,7 +372,7 @@ App.UI.CustomSlaveTrade = function() { App.UI.DOM.link( name, () => { - V.nationalities = nationalities; + V.nationalities = clone(nationalities); refresh(); } ) diff --git a/src/events/reFullBed.js b/src/events/reFullBed.js index 39f68175e54bd7d851c4cd303d4dcb110424a6f1..05f3bbcf828be7e1c88f9e3f615f1aebc18c7bd6 100644 --- a/src/events/reFullBed.js +++ b/src/events/reFullBed.js @@ -184,7 +184,7 @@ App.Events.REFullBed = class REFullBed extends App.Events.BaseEvent { t.push(`${He2} pauses, mouth agape with lust,`); } t.push(`as the bulge of your penis pistons beneath ${his} lower belly. You make sure to give ${him2} a show before you cum, thrusting as hard and deep as you can. ${He2} gasps at the`); - if (cansee(bedSlaves[1])) { + if (canSee(bedSlaves[1])) { t.push(`sight`); } else { t.push(`sensation`); @@ -196,14 +196,14 @@ App.Events.REFullBed = class REFullBed extends App.Events.BaseEvent { } t.push(`to the lump just in time to feel you ejaculate deep inside ${bedSlaves[0].slaveName}.`); if (V.PC.balls >= 30) { - t.push(`${He2} ${canTalk(bedSlaves[1]) ? "squeaks" : "gasps"} in shock as ${he2} feels ${bedSlaves[0].slaveName}'s belly swell under ${his2} ${hasAnyArms(bedSlaves[1]) ? "hand" : "face"} with your massive load.`); + t.push(`${He2} ${bedSlaves[1].voice !== 0 ? "squeaks" : "gasps"} in shock as ${he2} feels ${bedSlaves[0].slaveName}'s belly swell under ${his2} ${hasAnyArms(bedSlaves[1]) ? "hand" : "face"} with your massive load.`); if (hasBothArms(bedSlaves[1])) { t.push(`${He2} quickly brings ${his2} other hand to massage it as the orgasming cumballoon squirms in pleasure.`); } else { t.push(`${He2} nuzzles it as the orgasming cumballoon squirms in pleasure.`); } } else if (V.PC.balls >= 14) { - t.push(`${He2} ${canTalk(bedSlaves[1]) ? "squeaks" : "gasps"} in surprise as ${he2} feels ${bedSlaves[0].slaveName}'s belly swell slightly under ${his2} ${hasAnyArms(bedSlaves[1]) ? "hand" : "face"} with your huge load.`); + t.push(`${He2} ${bedSlaves[1].voice !== 0 ? "squeaks" : "gasps"} in surprise as ${he2} feels ${bedSlaves[0].slaveName}'s belly swell slightly under ${his2} ${hasAnyArms(bedSlaves[1]) ? "hand" : "face"} with your huge load.`); } else if (V.PC.balls >= 9) { t.push(`${He2}'s amazed by how big the load felt under ${his2} ${hasAnyArms(bedSlaves[1]) ? "hand" : "face"}.`); } diff --git a/src/events/scheduled/assholeKnight.tw b/src/events/scheduled/assholeKnight.tw index 68ff0acdd8d75f954dee57890757bd5e8e1f78fc..4868fa8e06d2d672a4b18d5c4430427543d44314 100644 --- a/src/events/scheduled/assholeKnight.tw +++ b/src/events/scheduled/assholeKnight.tw @@ -4,7 +4,7 @@ The group of citizens you hand-picked as your Knights have quickly proven themselves a reliable staple of the Arcology. Being visibly a league above the common citizen with their heavy Imperial Plate decorated with glimmering pendants and marks of their individual, flowery coats of arms, their mere presence is enough to make most common criminals cower and keep merchants selling their wares at fair prices. The tenets of neo-Imperial hierarchy and their own social prestige have already gone to their heads, and many Knights are now recognized immediately by the common citizens as heroic, uncowed citizen-soldiers. <br><br> -Despite the noble reputations of many of your Knights, their image as defenders of the downtrodden and honest protectors of the Arcology is not universal. Although you Knighted every last one of them yourself, it seems you might have made a misjudgement on the character of one of your new servants; a stream of minor offenses from one Knight in particular has been building up in your inbox for quite some time, and reviewing the whole dossier now paints a portrait of abuses and misconduct. +Despite the noble reputations of many of your Knights, their image as defenders of the downtrodden and honest protectors of the Arcology is not universal. Although you Knighted every last one of them yourself, it seems you might have made a misjudgment on the character of one of your new servants; a stream of minor offenses from one Knight in particular has been building up in your inbox for quite some time, and reviewing the whole dossier now paints a portrait of abuses and misconduct. <br><br> This singular Knight has apparently been using their position to extort and bully the populace, demanding unreasonably steep discounts from merchants and regularly beating the peasantry - often for no reason other than momentary amusement, and treating them as "less than even slaves". A number of frustrated citizens have sent you a petition demanding that you denounce and punish them for their petty offenses - a picture of a woman with her face blurred out and a trail of bruises over every inch of her naked body is attached. No names have been attached to the petition, apparently for fear of what the Knight in question will do to them should their attempts be uncovered. Whatever you decide to do with this man will undoubtedly set the precedent for how you deal with Knights who abuse their station in the future. <br><br> diff --git a/src/events/scheduled/pitFight.js b/src/events/scheduled/pitFight.js index a1dc35c52244ee7328c3509bf5f81cb721fdd7b8..c2beeb04f384f153ea884c08f5c8372863c4af37 100644 --- a/src/events/scheduled/pitFight.js +++ b/src/events/scheduled/pitFight.js @@ -1,8 +1,10 @@ App.Facilities.Pit.fight = function(lethal) { const frag = new DocumentFragment(); + + /** @type {number[]} */ + const available = [...new Set(V.pit.fighterIDs)]; /** @type {number[]} */ const fighters = []; - const animal = V.pit.animal; V.nextButton = "Continue"; V.nextLink = "Scheduled Event"; @@ -13,22 +15,33 @@ App.Facilities.Pit.fight = function(lethal) { if (V.pit.slaveFightingBodyguard) { // slave is fighting bodyguard for their life fighters.push(S.Bodyguard.ID, V.pit.slaveFightingBodyguard); } else { - if (V.pit.bodyguardFights) { - fighters.push(S.Bodyguard.ID, V.pit.fighterIDs.pluck()); - } else { + if (available.length > 0) { if (S.Bodyguard) { - V.pit.fighterIDs = V.pit.fighterIDs.filter(id => id !== S.Bodyguard.ID); + available.filter(id => id !== S.Bodyguard.ID); + + if (V.pit.bodyguardFights) { + fighters.push(S.Bodyguard.ID); + } } - if (animal) { - fighters.push(V.pit.fighterIDs.pluck()); - } else { - fighters.push(V.pit.fighterIDs.pluck(), V.pit.fighterIDs.pluck()); // TODO: more concise way? + if (available.length > 1 && !V.pit.animal) { + fighters.push(available.pluck()); } + + fighters.push(available.pluck()); + } else { + throw new Error(`Pit fight triggered with ${V.pit.fighterIDs.length} fighters.`); // should technically never be triggered } } - frag.appendChild(lethal ? App.Facilities.Pit.fight.lethal(fighters) : App.Facilities.Pit.fight.nonlethal(fighters)); + frag.appendChild(lethal ? + App.Facilities.Pit.fight.lethal(fighters) : + App.Facilities.Pit.fight.nonlethal(fighters) + ); + + if (V.debugMode) { + console.log(`Available:\n${available}\nFighters:\n${fighters}`); + } return frag; }; diff --git a/src/events/scheduled/pitFight.tw b/src/events/scheduled/pitFight.tw new file mode 100644 index 0000000000000000000000000000000000000000..ac9e7f27f3cb48d6d70ab48d352cb8dc875478d8 --- /dev/null +++ b/src/events/scheduled/pitFight.tw @@ -0,0 +1,3 @@ +:: SE pit fight + +<<includeDOM App.Facilities.Pit.fight(V.pit.lethal)>> diff --git a/src/events/scheduled/pitFightLethal.js b/src/events/scheduled/pitFightLethal.js index 1a4e7a77a83794ef0bc3ece684cbe795640152ef..3fc8d9ca1f5fc0d217f0d7046bb76041aeaa2df1 100644 --- a/src/events/scheduled/pitFightLethal.js +++ b/src/events/scheduled/pitFightLethal.js @@ -1,13 +1,33 @@ +// TODO: add devotion and trust effects to animal variant App.Facilities.Pit.fight.lethal = function(fighters) { const frag = new DocumentFragment(); const animal = V.pit.animal; - const winner = getSlave(getWinner()); - const loser = getSlave(getLoser()); + let winner; + let loser; + if (animal) { + winner = getWinner() ? getSlave(fighters[0]) : animal; + loser = winner.hasOwnProperty('species') ? getSlave(fighters[0]) : animal; + } else { + winner = getWinner() ? getSlave(fighters[0]) : getSlave(fighters[1]); + loser = winner.ID === fighters[0] ? getSlave(fighters[1]) : getSlave(fighters[0]); + } + + if (V.debugMode) { + console.log(winner, loser); + } + + frag.append( + intro(), + fighterDeadliness(getSlave(fighters[0])), + !V.pit.animal ? fighterDeadliness(getSlave(fighters[1])) : '', + fight(), + postFight(), + ); - frag.append(intro(), fighterDeadliness(getSlave(fighters[0])), fighterDeadliness(getSlave(fighters[1])), fight(), postFight()); + V.pit.slaveFightingBodyguard = null; return frag; @@ -16,8 +36,11 @@ App.Facilities.Pit.fight.lethal = function(fighters) { const introDiv = document.createElement("div"); const fighterOne = getSlave(fighters[0]); - const fighterTwo = getSlave(fighters[1]); - const {he, him, girl} = getPronouns(fighterOne); + const fighterTwo = getSlave(fighters[1]) || null; + + if (V.debugMode) { + console.log(fighterOne, fighterTwo); + } const r = []; @@ -25,17 +48,16 @@ App.Facilities.Pit.fight.lethal = function(fighters) { App.Events.drawEventArt(introDiv, fighters.map(id => getSlave(id)), "no clothing"); - const an = animal ? animal.articleAn ? 'an' : 'a' : null; - const anAnimal = animal ? `${an} ${animal.name}` : null; + const anAnimal = animal ? `${animal.articleAn} ${animal.name}` : null; r.push(`This week's fight is between ${fighterOne.slaveName} and ${animal ? `${anAnimal}` : `${fighterTwo.slaveName}`}.`); if (V.pit.audience === "none") { r.push(`You are alone above the pit, left to watch them kill and die in private.`); } else if (V.pit.audience === "free") { - r.push(`Your guests line the rim of the pit, joking and betting, nervous and excited by the close prospect of watching a ${girl} die.`); + r.push(`Your guests line the rim of the pit, joking and betting, nervous and excited by the close prospect of watching a slave die.`); } else { - r.push(`The attendees line the rim of the pit, betting and arguing, nervous and excited by the close prospect of watching a ${girl} die.`); + r.push(`The attendees line the rim of the pit, betting and arguing, nervous and excited by the close prospect of watching a slave die.`); } if (V.arcologies[0].FSRomanRevivalist !== "unset") { @@ -50,18 +72,14 @@ App.Facilities.Pit.fight.lethal = function(fighters) { V.arcologies[0].FSAztecRevivalist += (0.2 * V.FSSingleSlaveRep); } - r.push(`You review the rules — the ${animal ? - `slave` : - `combatants`} will use their choice of swords, and the fight will be to the death${!animal ? - `, with both fighters executed if no decision is reached.` : - `.`} ${animal ? - `If ${he} wins, ${he}` : - `The winner`} will earn two complete days of rest, not to mention continued life. You take a moment to look over your ${animal ? - `slave` : - `fighters`} one more time before giving the word. After all, it might be the last time you'll see ${animal ? - `${him}` : - `one of them`} alive.`); + if (animal) { + const slave = getSlave(fighters[0]); + const {he, him, his} = getPronouns(slave); + r.push(`You review the rules — the slave will use ${his} choice of swords, and the fight will be to the death. If ${he} wins, ${he} will earn two complete days of rest, not to mention continued life. You take a moment to look over ${fighterOne.slaveName} one more time before giving the word. After all, it might be the last time you'll see ${him} alive.`); + } else { + r.push(`You review the rules — the combatants will use their choice of swords, and the fight will be to the death, with both fighters executed if no decision is reached. The winner will earn two complete days of rest, not to mention continued life. You take a moment to look over your fighters one more time before giving the word. After all, this is likely the last time you'll see one of them alive.`); + } App.Events.addNode(introDiv, r); @@ -255,7 +273,7 @@ App.Facilities.Pit.fight.lethal = function(fighters) { function labor() { if (isInLabor(fighter)) { return `${He}'s feeling labor pains. ${His} ${fighter.pregType > 1 ? `children are` : `child is`} ready to be born, oblivious to the fact that it will mean the death of ${fighter.pregType > 1 ? `their` : `its`} mother.`; - } else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") { // FIXME: pregData doesn't exist on SlaveState + } else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") { return `${He}'ll be going into labor any time now and ${he} knows it. ${He}'s terrified of the thought of ${his} water breaking during the fight.`; } } @@ -304,23 +322,156 @@ App.Facilities.Pit.fight.lethal = function(fighters) { } function fight() { - const fightDiv = document.createElement("div"); - - const winnerDeadliness = deadliness(winner); - const loserDeadliness = deadliness(loser); - - const {he, his, him, himself, girl, He} = getPronouns(winner); - const {he: he2, his: his2, him: him2, girl: girl2} = getPronouns(loser); + const fightDiv = App.UI.DOM.makeElement('div', ``, ["pit-section"]); const r = []; - fightDiv.classList.add("pit-section"); - r.push(`In any case, ${animal ? `the slave and the ${animal.name} have both` : `both of the slaves`} been dosed with aggression enhancers and inhibition blockers; they'll fight to kill.`); if (animal) { - // + if (winner.hasOwnProperty('slaveName')) { + const {he, his, him, himself, girl, He} = getPronouns(winner); + + if (!canSee(winner)) { + r.push(`${winner.slaveName} centers ${himself} and hones in on the ${animal.name}'s rapid breath. ${He} readies ${himself}, knowing ${he} has a single chance to live. With heavy steps, the ${animal.species} rushes at ${him}, fully prepared to slaughter the helpless combatant. ${winner.slaveName} gambles everything on a single high slash, a slash that cuts the ${animal.species}'s undefended neck wide open. ${winner.slaveName} collapses to the ground, fully aware of the ${animal.species}'s final gurgles and the `, App.UI.DOM.makeElement('span', `deep scratch in ${his} side.`, ["health", "dec"]), ` ${He} lived this time, barely, but ${he} doubts ${he} can do it again.`); + + healthDamage(winner, 75); + + if (V.pit.audience === 'paid') { + r.push(`The audience is awestruck by the blind ${girl}'s triumph, and your`, App.UI.DOM.makeElement('span', `cut of the betting`, ["cash", "inc"]), ` is enormous.`); + + cashX(10000, "pit", winner); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `awestruck`, ["reputation", "inc"]), `by the blind ${girl}'s triumph.`); + + repX(1000, "pit", winner); + } + } else if (winner.muscles) { + r.push(`${winner.slaveName} is so massively muscular that ${he}'s actually impeded by ${his} lack of speed and flexibility. The ${animal.species} is suitably cautious, and it does its best to avoid ${his} sword. The two go back and forth for a while – the slave slashing and swinging, the animal leaping out of the way. ${winner.slaveName} finally manages to get the better of the ${animal.species}, though, and manages to catch the tip of ${his} sword on the animal's leg. With a loud ${animal.type === 'canine' ? `yelp`: animal.type === 'hooved' ? `whinny` : `howl`}, the ${animal.species} stumbles back, giving the slave a chance to bring ${his} sword down in an overhead swing, nearly removing the ${animal.species}'s head.`); + + if (V.pit.audience === 'paid') { + r.push(`The audience is awestruck by the blind ${girl}'s triumph, and your`, App.UI.DOM.makeElement('span', `cut of the betting`, ["cash", "inc"]), ` is enormous.`); + + cashX(10000, "pit", winner); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `awestruck`, ["reputation", "inc"]), `by the blind ${girl}'s triumph.`); + + repX(1000, "pit", winner); + } + } else { + if (V.pit.audience === 'paid') { + r.push(`The audience is awestruck by the blind ${girl}'s triumph, and your`, App.UI.DOM.makeElement('span', `cut of the betting`, ["cash", "inc"]), ` is enormous.`); + + cashX(10000, "pit", winner); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `awestruck`, ["reputation", "inc"]), `by the blind ${girl}'s triumph.`); + + repX(1000, "pit", winner); + } + } + } else { + const {he, his, him, He} = getPronouns(loser); + + if (!canSee(loser)) { + r.push(`The ${animal.species} isn't aware that its opponent is blind, and either way, it wouldn't have cared. It slowly paces around the flailing ${loser.slaveName}, looking for an opening. Seeing one, the ${animal.species} ${animal.type === "hooved" ? `rushes` : `lunges`} at ${him}, ending ${his} life in one fell swoop.`); + + if (V.pit.audience === "paid") { + r.push(`The audience found the fight embarrassing, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is pitiful.`); + + cashX(40, "pit", loser); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `annoyed`, ["reputation", "dec"]), ` by this waste of a fight.`); + + repX(-20, "pit", loser); + } + } else if (deadliness(winner) < deadliness(loser) + 3) { + if (loser.skill.combat > 0) { + r.push(`${loser.slaveName} is fairly confident in ${his} fighting abilities, and ${he} knows that this fight is fairly evenly matched.`); + } else { + r.push(`${loser.slaveName} doesn't know how to handle a sword, but ${he} feels fairly confident in ${his} chances all the same.`); + } + + r.push(`${He} doesn't know how to go about attacking an animal, though, so ${he} decides to play it safe and keep the ${animal.species} at sword's length. The ${animal.species} make a few false lunges at the slave, all the while keeping out of reach. After a few minutes of this, though, it's evident that ${loser.slaveName} is beginning to tire: ${his} sword is beginning to swing slower and slower, and ${his} stance isn't as straight. The animal seems to sense this, and, spotting an opening, makes a final lunge. Its ${animal.type === "hooved" ? `hooves connect with ${his} skull` : `teeth sink into ${his} throat`}, ending ${his} life almost immediately.`); + } else if (loser.belly > 300000) { + r.push(`${loser.slaveName}'s belly is too big to possibly defend, so ${he} can't help but ${canSee(loser) ? `watch` : `cringe`} in horror as the ${animal.species} lunges at ${him}, ${animal.type === "hooved" ? `headfirst` : `fangs and claws outstretched`}. ${loser.slaveName}'s belly ruptures like a popped water balloon, showering the animal with`); + + if (loser.pregType > 0) { + r.push(`blood. ${loser.slaveName} collapses into the pile of organs and babies released from ${his} body.`); + } else if (loser.bellyImplant > 0) { + r.push(`blood and filler. ${loser.slaveName} collapses into the pool of organs and fluid released from ${his} body.`); + } else { + r.push(`blood and ${loser.inflationType}. ${loser.slaveName} collapses into the pool of organs and fluid released from ${his} body.`); + } + + r.push(`With a ${animal.type === "hooved" ? `growl` : `snort`}, the ${animal.species} quickly finishes ${him} off${animal.type === "hooved" ? ` with a swift kick to the head` : ``}.`); + + if (V.pit.audience === "paid") { + r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is also unimpressive.`); + + cashX(2000, "pit", loser); + } else if (V.pit.audience === "free") { + r.push(`the audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`); + + repX(100, "pit", loser); + } + } else if (loser.boobs > 1200) { + r.push(`${loser.slaveName}'s tits are too big to possibly defend, so ${he} can't help but ${canSee(loser) ? `watch` : `cringe`} in horror in horror as the ${animal.species} lunges at ${him}, ${animal.type === "hooved" ? `headfirst` : `fangs and claws outstretched`}. ${loser.slaveName}'s reflexively drops ${his} sword to clasp ${his} ${hasBothArms(loser) ? `hands` : `hand`} over ${his} ruined breasts, gushing blood${loser.boobsImplant > 400 ? ` and implant fluid` : ``}. The ${animal.species} follows up with a ${animal.type === "hooved" ? + `fierce bite to ${hasBothLegs(loser) ? `one of ${his} legs` : hasAnyLegs(loser) ? `${his} leg` : `${his} rear`}, causing ${him} to collapse. A second later, than animal's fangs have finished ${him} off.` : + `swift kick to the chest, causing ${him} to drop like a rock. Another blow to the head finishes ${him} off.`}`); + + if (V.pit.audience === "paid") { + r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is also unimpressive.`); + + cashX(2000, "pit", loser); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`); + + repX(100, "pit", loser); + } + } else { + if (loser.skill.combat > 0) { + const clawMarks = App.UI.DOM.makeElement("span", `deep claw marks in ${his} side.`, ["health", "dec"]); + + r.push(`${loser.slaveName} is reasonably confident in ${his} fighting abilities, but ${he} isn't sure how to go about attacking the ${animal.species}. ${He} decides to open with a series of wide horizontal slashes, but the beast manages to stay out of range of ${his} sword. Realizing this isn't working, ${he} lunges at the animal, leaving ${his} side exposed. The ${animal.species} sees this and ${animal.type === "hooved" ? + `headbutts ${him} as hard as it can, sending ${him} flying into the side of ${V.pit.name}. Battered` : + `leaves some ${clawMarks} Bleeding`} and unable to stand, ${loser.slaveName} can do little to stop the ${animal.species} from finishing ${him} off with a ${animal.type === "canine" ? `fierce bite of its fangs to ${his} throat.` : animal.type === "hooved" ? `swift kick to the head.` : `ferocious swipe of its claws to ${his} throat.`}`); + + if (V.pit.audience === "paid") { + r.push(`The audience is reasonably impressed by the blood, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`); + + cashX(5000, "pit", loser); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the blood.`); + + repX(250, "pit", loser); + } + } else { + const crunch = App.UI.DOM.makeElement("span", `crunch`, ["note"]); + + r.push(animal.type === "hooved" ? + `The ${animal.species} paws at the ground for a few seconds before launching itself at ${loser.slaveName}. ${He} just barely manages to get out of the way, and the ${animal.species} has to backpedal to avoid smashing into the wall. ${loser.slaveName} isn't out of danger just yet, though — ${he} is still standing directly behind the ${animal.species}. ${He} realizes this too late, as both of the its hooves connect with ${his} jaw. With a sickening ${crunch}, ${he} flies backwards, ${his} body slamming into the other wall of ${V.pit.name} before crumpling in a heap on the ground.` : + `${loser.slaveName} doesn't stand a chance, and ${he} knows it. ${He} comes in with a furious overhead slash, which the ${animal.species} dodges with ease. It also dodges the next few slashes before coming to a standstill. With a furious growl, it runs around ${him}, just out of reach of ${his} sword, before jumping at the wall of ${V.pit.name} and launching itself off. Its ${animal.type === "canine" ? `teeth` : `claws`} connect with ${loser.slaveName}'s throat, completely severing ${his} windpipe. ${He} falls to ${his} knees, eyes wide and clutching ${his} throat, before completely collapsing.` + ); + + if (V.pit.audience === "paid") { + r.push(`The audience is reasonably impressed by the violence, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is also reasonable.`); + + cashX(5000, "pit", loser); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the violence.`); + + repX(250, "pit", loser); + } + } + } + } } else { + const winnerDeadliness = deadliness(winner); + const loserDeadliness = deadliness(loser); + + const {he, his, him, himself, girl, He} = getPronouns(winner); + const {he: he2, his: his2, him: him2, girl: girl2} = getPronouns(loser); + if (!canSee(winner) && !canSee(loser)) { r.push(`${winner.slaveName} and ${loser.slaveName} are both blind, making the fight a staredown. Neither slave wants to make the first move, especially with the drowning cacophony coming from the jeering crowd. Slowly, ${winner.slaveName} moves forward, waving ${his} sword side to side in the hopes of finding ${his} opponent before ${he} ${himself} gets found. ${loser.slaveName}'s sword clips the tip of ${winner.slaveName}'s setting off a surprisingly brutal series of slashes. The two slaves violently lay into each other, suffering more and more strikes as the struggle goes on. Less than a minute from first contact, both slaves are lying in their combined blood. As you begin to call it a draw, you notice ${winner.slaveName} start to stir. ${He} staggers to ${his} feet, coated in ${his} and ${loser.slaveName}'s blood, before dropping back to ${his} knees. It seems ${he} lived through this fight; odds aren't likely ${he}'ll do it again.`); @@ -520,131 +671,147 @@ App.Facilities.Pit.fight.lethal = function(fighters) { const mindbrokenSpan = App.UI.DOM.makeElement("span", `no longer capable`, "red"); const experienceSpan = App.UI.DOM.makeElement("span", `learned basic combat skills.`, ["improvement"]); - const {he, his, him, himself, He} = getPronouns(winner); - const {sister: sister2} = getPronouns(loser); - const r = []; - r.push(`You let the winner ${winner.slaveName}, shaking as ${he} comes off the adrenaline, drugs, and the fear, exit the pit.`); - - if (winner.fetish === "mindbroken") { - r.push(`${He} was already so broken before today that ${he} will not be seriously affected by having killed with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}.`); - } else if (winner.devotion > 95) { - r.push(`${He} is so worshipful of you that ${he} does not see killing ${loser.slaveName} as special in ${his} own internal listing of things that ${he} has willingly done and would willingly do again on your behalf.`); - } else if (winner.devotion > 80) { - r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `subsume ${his} will to yours,`, ["devotion", "inc"]), ` telling ${himself} that the killing was to serve and obey you.`); + if (animal) { + if (winner.hasOwnProperty('slaveName')) { + const {he, his, himself, hers, He} = getPronouns(winner); - winner.devotion += 10; - } else if (winner.fetish === "sadist" && winner.fetishKnown && winner.fetishStrength > 60) { - r.push(`${He} has sunk even deeper into cruelty, callousness, and a total disregard of the value of other slaves' lives. Going forward, ${he}'s even `, App.UI.DOM.makeElement("span", `less likely to question`, ["devotion", "inc"]), ` even the most abominable commands.`); + r.push(`You let the winner ${winner.slaveName}, shaking as ${he} comes off the adrenaline, drugs, and fear, exit the pit.`); - winner.devotion += 10; - } else if (winner.devotion > 50) { - r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to tell ${himself} that the killing was done on your orders.`); + if (winner.fetish === "mindbroken") { + r.push(`${He} was already so broken before today that ${he} will not be seriously affected by having killed another creature with ${his} own ${hasBothArms ? `hands` : `hand`}.`); + } else if (winner.devotion > 50) { + r.push(`${He} is so devoted that he doesn't see anything wrong with killing another creature.`); + } else { + r.push(`${He} isn't happy about having to have taken another creature's life, and tells ${himself} that it was the animal's life or ${hers}.`); + } + } else { + r.push(`Another week, another slave killed by your animals.`); + } } else { - r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `blame you,`, ["devotion", "dec"]), ` telling ${himself} that the killing was the only choice you gave ${him} if ${he} wanted to live.`); + const {he, his, him, himself, He} = getPronouns(winner); + const {sister: sister2} = getPronouns(loser); - winner.devotion -= 10; - } + r.push(`You let the winner ${winner.slaveName}, shaking as ${he} comes off the adrenaline, drugs, and fear, exit the pit.`); - if (winner.fetish !== "sadist") { - if (random(1, 100) > 50) { - r.push(`Cruelty and callousness seeps its way into ${his} sexuality; ${he} has become a `, App.UI.DOM.makeElement("span", `bloody sadist.`, ["fetish", "gain"])); + if (winner.fetish === "mindbroken") { + r.push(`${He} was already so broken before today that ${he} will not be seriously affected by having killed with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}.`); + } else if (winner.devotion > 95) { + r.push(`${He} is so worshipful of you that ${he} does not see killing ${loser.slaveName} as special in ${his} own internal listing of things that ${he} has willingly done and would willingly do again on your behalf.`); + } else if (winner.devotion > 80) { + r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `subsume ${his} will to yours,`, ["devotion", "inc"]), ` telling ${himself} that the killing was to serve and obey you.`); - winner.fetish = "sadist"; - winner.fetishKnown = 1; - winner.fetishStrength = 65; - } - } - - if (winner.rivalry && loser.ID === winner.rivalryTarget) { - if (winner.devotion > 75) { - r.push(`${He} is so accepting of the low value of slave life that ${he} `, App.UI.DOM.makeElement("span", `is pleased`, ["devotion", "inc"]), ` to have killed ${his} rival ${loser.slaveName}.`); + winner.devotion += 10; + } else if (winner.fetish === "sadist" && winner.fetishKnown && winner.fetishStrength > 60) { + r.push(`${He} has sunk even deeper into cruelty, callousness, and a total disregard of the value of other slaves' lives. Going forward, ${he}'s even `, App.UI.DOM.makeElement("span", `less likely to question`, ["devotion", "inc"]), ` even the most abominable commands.`); - winner.devotion += 4; - } - } else if (winner.relationship && loser.ID === winner.relationshipTarget) { - if (winner.devotion > 95) { - r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} only friend at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed slave relationship.`); - - winner.devotion += 4; + winner.devotion += 10; + } else if (winner.devotion > 50) { + r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to tell ${himself} that the killing was done on your orders.`); } else { - r.push(`${He} shows little reaction to the death of ${his} only friend at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `blame you,`, ["devotion", "dec"]), ` telling ${himself} that the killing was the only choice you gave ${him} if ${he} wanted to live.`); - winner.fetish = "mindbroken"; - winner.fetishKnown = 1; + winner.devotion -= 10; } - } else if (isParentP(winner, loser) || isParentP(loser, winner)) { - if (winner.devotion > 95) { - r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); - winner.devotion += 4; - } else { - r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + if (winner.fetish !== "sadist") { + if (random(1, 100) > 50) { + r.push(`Cruelty and callousness seeps its way into ${his} sexuality; ${he} has become a `, App.UI.DOM.makeElement("span", `bloody sadist.`, ["fetish", "gain"])); - winner.fetish = "mindbroken"; - winner.fetishKnown = 1; + winner.fetish = "sadist"; + winner.fetishKnown = 1; + winner.fetishStrength = 65; + } } - } else if (winner.sisters > 0) { - switch (areSisters(winner, loser)) { - case 1: - if (winner.devotion > 95) { - r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); - winner.devotion += 4; - } else { - r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + if (winner.rivalry && loser.ID === winner.rivalryTarget) { + if (winner.devotion > 75) { + r.push(`${He} is so accepting of the low value of slave life that ${he} `, App.UI.DOM.makeElement("span", `is pleased`, ["devotion", "inc"]), ` to have killed ${his} rival ${loser.slaveName}.`); - winner.fetish = "mindbroken"; - winner.fetishKnown = 1; - } - break; - case 2: - if (winner.devotion > 90) { - r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); + winner.devotion += 4; + } + } else if (winner.relationship && loser.ID === winner.relationshipTarget) { + if (winner.devotion > 95) { + r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} only friend at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed slave relationship.`); - winner.devotion += 4; - } else { - r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + winner.devotion += 4; + } else { + r.push(`${He} shows little reaction to the death of ${his} only friend at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); - winner.fetish = "mindbroken"; - winner.fetishKnown = 1; - } - break; - case 3: - if (winner.devotion > 85) { - r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} half-${sister2} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); + winner.fetish = "mindbroken"; + winner.fetishKnown = 1; + } + } else if (isParentP(winner, loser) || isParentP(loser, winner)) { + if (winner.devotion > 95) { + r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); - winner.devotion += 4; - } else { - r.push(`${He} is `, App.UI.DOM.makeElement("span", `utterly devastated`, ["devotion", "dec"]), ` at being forced to take the life of ${his} half-${sister2}.`); + winner.devotion += 4; + } else { + r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); - winner.devotion -= 50; - } - break; + winner.fetish = "mindbroken"; + winner.fetishKnown = 1; + } + } else if (winner.sisters > 0) { + switch (areSisters(winner, loser)) { + case 1: + if (winner.devotion > 95) { + r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); + + winner.devotion += 4; + } else { + r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + + winner.fetish = "mindbroken"; + winner.fetishKnown = 1; + } + break; + case 2: + if (winner.devotion > 90) { + r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); + + winner.devotion += 4; + } else { + r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`); + + winner.fetish = "mindbroken"; + winner.fetishKnown = 1; + } + break; + case 3: + if (winner.devotion > 85) { + r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} half-${sister2} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`); + + winner.devotion += 4; + } else { + r.push(`${He} is `, App.UI.DOM.makeElement("span", `utterly devastated`, ["devotion", "dec"]), ` at being forced to take the life of ${his} half-${sister2}.`); + + winner.devotion -= 50; + } + break; + } } - } - - V.pit.slaveFightingBodyguard = null; - if (winner.skill.combat === 0) { - r.push(`With lethal experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); + V.pit.slaveFightingBodyguard = null; - winner.skill.combat++; - } + if (winner.skill.combat === 0) { + r.push(`With lethal experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); - winner.counter.pitKills++; + winner.skill.combat++; + } - if (!V.pit.bodyguardFights || S.Bodyguard.ID !== winner.ID) { - V.pit.fighterIDs.push(winner.ID); + winner.counter.pitKills++; + winner.counter.pitWins++; } V.pitKillsTotal++; - - removeSlave(loser); - V.pitFightsTotal++; - winner.counter.pitWins++; + + if (loser.hasOwnProperty('slaveName')) { + V.pit.fighterIDs.delete(loser.ID); + removeSlave(loser); + } App.Events.addNode(postFightDiv, r); @@ -654,27 +821,28 @@ App.Facilities.Pit.fight.lethal = function(fighters) { // MARK: Helper Functions - /** - * @returns {number} - */ + /** @returns {boolean} Returns true if fighters[0] won */ function getWinner() { - if (!animal) { - if (fighterDeadliness(getSlave(fighters[0])) > fighterDeadliness(getSlave(fighters[1]))) { - return fighters[0]; - } else if (fighterDeadliness(getSlave(fighters[0])) < fighterDeadliness(getSlave(fighters[1]))) { - return fighters[1]; - } else if (random(1, 100) > 50) { - return fighters[0]; + if (animal) { + if (deadliness(getSlave(fighters[0])) > animal.deadliness) { + return random(1, 100) > 20; // 80% chance of winning + } else if (deadliness(getSlave(fighters[0])) < animal.deadliness) { + return random(1, 100) > 80; // 20% chance of winning + } else if (random(1, 100) > 50) { // 50/50 + return true; } else { - return fighters[1]; + return false; } } - } - /** - * @returns {number} - */ - function getLoser() { - return winner.ID === fighters[0] ? fighters[1] : fighters[0]; + if (deadliness(getSlave(fighters[0])) > deadliness(getSlave(fighters[1]))) { + return random(1, 100) > 20; // 80% chance of winning + } else if (deadliness(getSlave(fighters[0])) < deadliness(getSlave(fighters[1]))) { + return random(1, 100) > 80; // 20% chance of winning + } else if (random(1, 100) > 50) { // 50/50 + return true; + } else { + return false; + } } }; diff --git a/src/events/scheduled/pitFightNonlethal.js b/src/events/scheduled/pitFightNonlethal.js index ca1cf55f539ce4fa2d7245f60d6f6ba1e0f8d634..b6edb5839226d694701135da0833adb8ab221627 100644 --- a/src/events/scheduled/pitFightNonlethal.js +++ b/src/events/scheduled/pitFightNonlethal.js @@ -1,22 +1,48 @@ +// TODO: add devotion and trust effects to animal variant App.Facilities.Pit.fight.nonlethal = function(fighters) { const frag = new DocumentFragment(); const animal = V.pit.animal; - const winner = getSlave(getWinner()); - const loser = getSlave(getLoser()); + /** @param {App.Entity.SlaveState} slave */ + const canRun = slave => slave.muscles > -30 && slave.weight < 95 && slave.health.condition > -50 && slave.bellyPreg < 5000 && slave.bellyImplant < 4000 && slave.bellyFluid < 2000 && !isInLabor(slave); + let winner; + let loser; - frag.append(intro(), fighterDeadliness(getSlave(fighters[0])), fighterDeadliness(getSlave(fighters[1])), fight(), postFight()); + if (animal) { + winner = getWinner() ? getSlave(fighters[0]) : animal; + loser = winner.hasOwnProperty('species') ? getSlave(fighters[0]) : animal; + } else { + winner = getWinner() ? getSlave(fighters[0]) : getSlave(fighters[1]); + loser = winner.ID === fighters[0] ? getSlave(fighters[1]) : getSlave(fighters[0]); + } + + if (V.debugMode) { + console.log(winner, loser); + } + + frag.append( + intro(), + fighterDeadliness(getSlave(fighters[0])), + !V.pit.animal ? fighterDeadliness(getSlave(fighters[1])) : '', + fight(), + postFight(), + ); return frag; + // TODO: update to use "run" if animal function intro() { const introDiv = document.createElement("div"); const fighterOne = getSlave(fighters[0]); - const fighterTwo = getSlave(fighters[1]); + const fighterTwo = getSlave(fighters[1]) || null; + + if (V.debugMode) { + console.log(fighterOne, fighterTwo); + } const r = []; @@ -24,15 +50,22 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { App.Events.drawEventArt(introDiv, fighters.map(id => getSlave(id)), "no clothing"); - const an = animal ? animal.articleAn ? 'an' : 'a' : null; - const anAnimal = animal ? `${an} ${animal.name}` : null; + const anAnimal = animal ? `${animal.articleAn} ${animal.name}` : null; r.push(`${animal ? `This week ${anAnimal} is going to try to use ${fighterOne.slaveName}.` : `This week's fight is between ${fighterOne.slaveName} and ${fighterTwo.slaveName}.`}`); if (animal) { - // for future inclusion + const slave = getSlave(fighters[0]); + + if (V.pit.audience === "none") { + r.push(`You are alone above the pit, left to watch the animal try use your slave in private.`); + } else if (V.pit.audience === "free") { + r.push(`Your guests line the rim of the pit, joking and laughing.`); + } else { + r.push(`The attendees line the rim of the pit, making bets on how long ${slave.slaveName} will last.`); + } } else { if (V.pit.audience === "none") { r.push(`You are alone above the pit, left to watch them square off in private.`); @@ -41,14 +74,23 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { } else { r.push(`The attendees line the rim of the pit, betting and arguing.`); } + } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { - r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of your hosting combat between slaves; this advances ideas from antiquity about what public events should be.`); + if (V.arcologies[0].FSRomanRevivalist !== "unset") { + r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of your hosting combat between slaves; this advances ideas from antiquity about what public events should be.`); - repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), "pit"); - V.arcologies[0].FSRomanRevivalist += (0.2 * V.FSSingleSlaveRep); - } + repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), "pit"); + V.arcologies[0].FSRomanRevivalist += (0.2 * V.FSSingleSlaveRep); + } + + if (animal) { + const slave = getSlave(fighters[0]); + const {he, his} = getPronouns(slave); + + const approves = slave.devotion > 50 || (slave.devotion > 20 && (slave.fetish === "masochist" || slave.fetish === "humiliation" || slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful")); + r.push(`${slave.slaveName} and the ${animal.name} enter ${V.pit.name} from opposite sides. ${slave.slaveName} is naked and ${his} wrists have been bound, and ${he} has already been given ${his} instructions: ${he} is to try to avoid being caught and ${approves ? `fucked` : `raped`} by the animal for five minutes, and if ${he} succeeds, ${he} wins two complete days of rest. The ${animal.name} has been given a large dose of aphrodisiacs, and its lust is apparent – its ${animal.dick.desc} cock is clearly visible, even from where you're seated.`); + } else { r.push(`You review the rules — the combatants are wearing light gloves, and the fight will be nonlethal, with you as the judge. The winner will have the right to do anything they wish to the loser,`); switch (V.pit.virginities) { @@ -71,7 +113,6 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { r.push(`and earn two complete days of rest. You take a moment to look over your fighters before giving the word.`); } - App.Events.addNode(introDiv, r); return introDiv; @@ -254,7 +295,7 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { function labor() { if (isInLabor(fighter)) { return `${He}'s feeling labor pains. ${His} ${fighter.pregType > 1 ? `children are` : `child is`} ready to be born, oblivious to the fact that it will put ${fighter.pregType > 1 ? `their` : `its`} mother at the mercy of ${his} opponent.`; - } else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") { // FIXME: pregData doesn't exist on SlaveState + } else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") { return `${He}'ll be going into labor any time now and ${he} knows it. ${He}'s terrified of the thought of ${his} water breaking during the fight.`; } } @@ -303,21 +344,59 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { } function fight() { - const fightDiv = document.createElement("div"); + const fightDiv = App.UI.DOM.makeElement("span", null, ["pit-section"]); + + const r = []; - const winnerDeadliness = deadliness(winner); - const loserDeadliness = deadliness(loser); + if (animal) { + const slave = getSlave(fighters[0]); + const {he, him, his, He} = getPronouns(slave); - const {he, his, him, himself, girl, He} = getPronouns(winner); - const {he: he2, his: his2, him: him2, himself: himself2, girl: girl2, He: He2, His: His2} = getPronouns(loser); + const approves = slave.devotion > 50 || (slave.devotion > 20 && (slave.fetish === "masochist" || slave.fetish === "humiliation" || slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful")); - const r = []; + // TODO: expand this with more fight variants + r.push(`The ${animal.name} isn't in a hurry and slowly saunters towards the ${approves ? `determined` : `terrified`} slave. After what appears to be a moment of deliberation, ${he} finally makes ${his} move. ${He} starts ${canRun ? `running` : `moving as quickly as ${he} can`} in the opposite direction. The ${animal.species} follows suit and breaks out into a full sprint towards ${him}.`); - fightDiv.classList.add("pit-section"); + // TODO: expand this to rely more on slave's ability to run + if (winner.hasOwnProperty('slaveName')) { + r.push(`${slave.slaveName} is quick, though, and manages to avoid the animal for the full five minutes. ${He} drops to ${his} knees in relief and exhaustion once the bell sounds and the animal is leashed and pulled back into its pen.`); - if (animal) { - // + if (V.pit.audience === "paid") { + r.push(`The audience is fairly impressed with this impressive display of sportsmanship, and your `, App.UI.DOM.makeElement('span', `cut of the betting`, ["cash", "inc"]), ` is equally impressive.`); + + cashX(2500, "pit", slave); + } else if (V.pit.audience === "free") { + r.push(`The audience is `, App.UI.DOM.makeElement('span', `fairly impressed`, ["reputation", "inc"]), ` with this impressive display of sportsmanship.`); + + repX(250, "pit", slave); + } + } else { + const minutesLasted = random(2, 5); + const secondsLasted = random(15, 45); + + if (canRun) { + r.push(`${slave.slaveName} is quick, but not quick enough. ${He} manages to last almost ${minutesLasted} full minutes before the ${animal.name} finally manages to catch ${him}.`); + } else { + r.push(`${slave.slaveName} isn't quick enough to avoid the beast, and only manages to last a pitiful ${secondsLasted} seconds before the ${animal.name} catches ${him}.`); + } + + if (V.pit.audience === "paid") { + r.push(`Your audience is not very impressed with this mediocre display, and your `, App.UI.DOM.makeElement('span', `cut of the betting`, ["cash", "inc"]), ` is equally unimpressive.`); + + cashX(500, "pit", slave); + } else if (V.pit.audience === "free") { + r.push(`Your audience is `, App.UI.DOM.makeElement('span', `not very impressed`, ["reputation", "inc"]), ` with this mediocre display.`); + + repX(25, "pit", slave); + } + } } else { + const winnerDeadliness = deadliness(winner); + const loserDeadliness = deadliness(loser); + + const {he, his, him, himself, girl, He} = getPronouns(winner); + const {he: he2, his: his2, him: him2, himself: himself2, girl: girl2, He: He2, His: His2} = getPronouns(loser); + if (!canSee(winner) && !canSee(loser)) { r.push(`${winner.slaveName} and ${loser.slaveName} are both blind, making the fight a staredown. Neither slave wants to make the first move, especially with the drowning cacophony coming from the jeering crowd. Slowly, ${winner.slaveName} moves forward, waving feeling for ${his} opponent before ${he} ${himself} gets found. ${loser.slaveName}'s hand meets ${winner.slaveName}'s and the two move to grab each other in a headlock. The two slaves violently thrash against each other, suffering more and more strikes as the struggle goes on. Eventually, ${loser.slaveName} can take no more and releases ${his2} grip on ${winner.slaveName} neck. It takes a moment for ${winner.slaveName} to stop wrestling the submitting ${loser.slaveName} and accept ${his} victory.`); @@ -560,9 +639,6 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { function postFight() { const postFightDiv = document.createElement("div"); - const {he, his, him, himself, He} = getPronouns(winner); - const {he: he2, his: his2, him: him2, girl: girl2, He: He2} = getPronouns(loser); - const r = []; const anus = "anus"; @@ -571,325 +647,344 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { const vaginal = "vaginal"; const anal = "anal"; - const facefuck = `${He} considers ${his} options briefly, then hauls the loser to ${his2} knees for a facefuck.`; - const winnerPenetrates = orifice => `${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`}, and penetrates the loser's ${orifice}.`; - const loserProtest = `${canTalk(loser) ? - `${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` : - `${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile ${loser.mpreg && V.pit.virginities !== anal ? `asspussy` : `pussy`} with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`; + if (animal) { + if (winner.hasOwnProperty('species')) { + // TODO: add effects (gain masochist, etc) + const slave = getSlave(fighters[0]); + const {him, his} = getPronouns(slave); - const virginitySpan = App.UI.DOM.makeElement("span", ``, ["virginity", "loss"]); + const approves = slave.devotion > 50 || (slave.devotion > 20 && (slave.fetish === "masochist" || slave.fetish === "humiliation" || slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful")); - r.push(`You throw the victor's strap-on down to ${winner.slaveName}.`); + const pussy = ['pussy', 'cunt', 'slit']; + const asshole = ['asshole', 'rear hole', 'anus']; + const mouth = ['mouth', 'throat']; - if (canPenetrate(winner)) { - r.push(`${He} has no need of it, only taking a moment to pump ${his} dick a few times to get it to rock hardness.`); - } else if (winner.clit > 4) { - r.push(`${He} has no need of it, since ${his} clit is big enough to use instead.`); - } else if (winner.dick > 6 && !canAchieveErection(winner)) { - r.push(`${He} needs it, since ${his} enormous dick can't get hard any longer (not like it would fit in ${loser.slaveName} anyway).`); - } else if (winner.dick > 0) { - r.push(`${He} needs it, since ${his} soft dick won't be raping anything.`); - } + const orifice = () => canDoVaginal(slave) ? either(pussy) : canDoAnal(slave) ? either(asshole) : either(mouth); + const consummation = App.UI.DOM.makeElement('span', `breaks in`, ["virginity", "loss"]); - if (V.pit.virginities === "all") { - if (loser.vagina === 0 && canDoVaginal(loser) && loser.anus === 0 && canDoAnal(loser)) { - r.push(`${He} respects ${loser.slaveName}'s virgin holes, and hauls the loser to ${his2} knees for a facefuck.`); + r.push(`It ${animal.type === "hooved" ? `headbutts ${him}` : `swipes at ${his} ${hasAnyLegs(slave) ? hasBothLegs(slave) ? `legs` : `leg` : `lower body`}`}, causing ${him} to go down hard. The ${animal.name} doesn't waste a moment, and mounts ${him} quicker than you thought was possible${animal.type === "hooved" ? ` for ${animal.articleAn} ${animal.name}` : ``}. It takes a few tries, but it finally manages to sink its ${animal.dick.desc} cock into ${slave.slaveName}'s ${orifice()}, causing${V.pit.audience !== 'none' ? ` the crowd to go wild and` : ``} the slave to give a long, loud, drawn-out ${approves ? `moan` : `scream`} as its ${animal.dick.desc} dick `, (canDoVaginal(slave) && slave.vagina === 0) || (canDoAnal(slave) && slave.anus === 0) ? consummation : `fills`, `${his} ${orifice()}. Without pausing for even a second, it begins to steadily thrust, pounding ${him} harder and harder as it gets closer and closer to climax. After several minutes, you see the animal ${animal.type === "canine" ? `push its knot into ${slave.slaveName}'s ${orifice()} and` : ``} finally stop thrusting while the barely-there slave gives a loud ${approves ? `moan` : `groan`}. ${V.pit.audience !== "none" ? `The crowd gives a loud cheer as the` : `The`} animal pulls out, leaving the thoroughly fucked-out ${slave.slaveName} lying there, ${animal.species} cum streaming out of ${his} ${orifice()}.`); - actX(loser, oral); - } else if (loser.vagina === 0 && canDoVaginal(loser) && canDoAnal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); + // FIXME: not working correctly + slave.vagina = slave.vagina < animal.dick.size - 1 ? animal.dick.size - 1 : slave.vagina; + } + } else { + const {he, his, him, He} = getPronouns(winner); + const {his: his2, him: him2} = getPronouns(loser); + + const facefuck = `${He} considers ${his} options briefly, then hauls the loser to ${his2} knees for a facefuck.`; + const winnerPenetrates = orifice => `${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`}, and penetrates the loser's ${orifice}.`; + const loserProtest = `${canTalk(loser) ? + `${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` : + `${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile ${loser.mpreg && V.pit.virginities !== anal ? `asspussy` : `pussy`} with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`; + + const virginitySpan = App.UI.DOM.makeElement("span", ``, ["virginity", "loss"]); + + r.push(`You throw the victor's strap-on down to ${winner.slaveName}.`); + + if (canPenetrate(winner)) { + r.push(`${He} has no need of it, only taking a moment to pump ${his} dick a few times to get it to rock hardness.`); + } else if (winner.clit > 4) { + r.push(`${He} has no need of it, since ${his} clit is big enough to use instead.`); + } else if (winner.dick > 6 && !canAchieveErection(winner)) { + r.push(`${He} needs it, since ${his} enormous dick can't get hard any longer (not like it would fit in ${loser.slaveName} anyway).`); + } else if (winner.dick > 0) { + r.push(`${He} needs it, since ${his} soft dick won't be raping anything.`); + } - if (winner.fetish === "pregnancy") { - r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin vagina with desire, penetrates the loser's anus.`); - } else { - r.push(`and respects the rules by penetrating the loser's anus.`); - } + if (V.pit.virginities === "all") { + if (loser.vagina === 0 && canDoVaginal(loser) && loser.anus === 0 && canDoAnal(loser)) { + r.push(`${He} respects ${loser.slaveName}'s virgin holes, and hauls the loser to ${his2} knees for a facefuck.`); - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + actX(loser, oral); + } else if (loser.vagina === 0 && canDoVaginal(loser) && canDoAnal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - knockMeUp(loser, 50, 1, winner.ID); - } + if (winner.fetish === "pregnancy") { + r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin vagina with desire, penetrates the loser's anus.`); + } else { + r.push(`and respects the rules by penetrating the loser's anus.`); + } - actX(loser, anal); - } else if (loser.anus === 0 && canDoVaginal(loser) && canDoAnal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { - r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin anus with desire, penetrates the loser's cunt.`); - } else { - r.push(`and respects the rules by penetrating the loser's cunt.`); - } + knockMeUp(loser, 50, 1, winner.ID); + } - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + actX(loser, anal); + } else if (loser.anus === 0 && canDoVaginal(loser) && canDoAnal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - knockMeUp(loser, 50, 0, winner.ID); - } + if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { + r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin anus with desire, penetrates the loser's cunt.`); + } else { + r.push(`and respects the rules by penetrating the loser's cunt.`); + } - actX(loser, vaginal); - } else if (canDoVaginal(loser)) { - r.push(winnerPenetrates(cunt)); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + knockMeUp(loser, 50, 0, winner.ID); + } - knockMeUp(loser, 50, 0, winner.ID); - } + actX(loser, vaginal); + } else if (canDoVaginal(loser)) { + r.push(winnerPenetrates(cunt)); - actX(loser, vaginal); - } else if (canDoAnal(loser)) { - r.push(winnerPenetrates(anus)); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + knockMeUp(loser, 50, 0, winner.ID); + } - knockMeUp(loser, 50, 1, winner.ID); - } + actX(loser, vaginal); + } else if (canDoAnal(loser)) { + r.push(winnerPenetrates(anus)); - actX(loser, anal); - } else { - r.push(facefuck); + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - actX(loser, oral); - } - } else if (V.pit.virginities === "anal") { - if (loser.vagina === 0 && canDoVaginal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); + knockMeUp(loser, 50, 1, winner.ID); + } - if (winner.fetish === "pregnancy") { - virginitySpan.append(`take ${his2} virginity.`); - r.push(`and gleefully takes advantage of your rules to `, virginitySpan); + actX(loser, anal); } else { - virginitySpan.append(`breaks in ${his2} virgin vagina.`); - r.push(`and `, virginitySpan); + r.push(facefuck); + + actX(loser, oral); } + } else if (V.pit.virginities === "anal") { + if (loser.vagina === 0 && canDoVaginal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + if (winner.fetish === "pregnancy") { + virginitySpan.append(`take ${his2} virginity.`); + r.push(`and gleefully takes advantage of your rules to `, virginitySpan); + } else { + virginitySpan.append(`breaks in ${his2} virgin vagina.`); + r.push(`and `, virginitySpan); + } - knockMeUp(loser, 50, 0, winner.ID); - } + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - loser.vagina++; - actX(loser, vaginal); - } else if (loser.anus === 0 && canDoAnal(loser)) { - r.push(`${canTalk(loser) ? - `${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` : - `${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile pussy with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`); + knockMeUp(loser, 50, 0, winner.ID); + } + + loser.vagina++; + actX(loser, vaginal); + } else if (loser.anus === 0 && canDoAnal(loser)) { + r.push(`${canTalk(loser) ? + `${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` : + `${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile pussy with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`); + + if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { + if (canDoVaginal(loser)) { + r.push(`and penetrates the loser's cunt.`); - if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { - if (canDoVaginal(loser)) { - r.push(`and penetrates the loser's cunt.`); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + knockMeUp(loser, 50, 0, winner.ID); + } - knockMeUp(loser, 50, 0, winner.ID); + loser.counter.vaginal++; + V.vaginalTotal++; + } else { + r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`); + + actX(loser, oral); } + } + } else if (canDoVaginal(loser)) { + r.push(winnerPenetrates(cunt)); - loser.counter.vaginal++; - V.vaginalTotal++; - } else { - r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - actX(loser, oral); + knockMeUp(loser, 50, 0, winner.ID); } - } - } else if (canDoVaginal(loser)) { - r.push(winnerPenetrates(cunt)); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + actX(loser, vaginal); + } else if (canDoAnal(loser)) { + r.push(); - knockMeUp(loser, 50, 0, winner.ID); - } + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - actX(loser, vaginal); - } else if (canDoAnal(loser)) { - r.push(); + knockMeUp(loser, 50, 1, winner.ID); + } - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + actX(loser, anal); + } else { + r.push(facefuck); - knockMeUp(loser, 50, 1, winner.ID); + actX(loser, oral); } + } else if (V.pit.virginities === "vaginal") { + if (loser.vagina === 0 && canDoVaginal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - actX(loser, anal); - } else { - r.push(facefuck); + if (winner.fetish === "pregnancy") { + if (canDoAnal(loser)) { + r.push(`and hungrily eyes ${his2} pristine vagina before penetrating the loser's ass.`); - actX(loser, oral); - } - } else if (V.pit.virginities === "vaginal") { - if (loser.vagina === 0 && canDoVaginal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - if (winner.fetish === "pregnancy") { - if (canDoAnal(loser)) { - r.push(`and hungrily eyes ${his2} pristine vagina before penetrating the loser's ass.`); + knockMeUp(loser, 50, 1, winner.ID); + } - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + actX(loser, anal); + } else { + r.push(`and hungrily eyes ${his2} pristine vagina before hauling the loser onto ${his2} knees for a facefuck.`); - knockMeUp(loser, 50, 1, winner.ID); + actX(loser, oral); } - - actX(loser, anal); } else { - r.push(`and hungrily eyes ${his2} pristine vagina before hauling the loser onto ${his2} knees for a facefuck.`); + if (canDoAnal(loser)) { + r.push(`and penetrates the loser's ass.`); - actX(loser, oral); - } - } else { - if (canDoAnal(loser)) { - r.push(`and penetrates the loser's ass.`); + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + knockMeUp(loser, 50, 1, winner.ID); + } - knockMeUp(loser, 50, 1, winner.ID); + actX(loser, anal); + } else { + r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`); + + actX(loser, oral); } + } + } else if (loser.anus === 0 && canDoAnal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - actX(loser, anal); + if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { + virginitySpan.append(`take ${his2} anal virginity.`); + r.push(`and gleefully takes advantage of your rules to `, virginitySpan); } else { - r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`); - - actX(loser, oral); + virginitySpan.append(`breaks in ${his2} virgin anus.`); + r.push(`and `, virginitySpan); } - } - } else if (loser.anus === 0 && canDoAnal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { - virginitySpan.append(`take ${his2} anal virginity.`); - r.push(`and gleefully takes advantage of your rules to `, virginitySpan); - } else { - virginitySpan.append(`breaks in ${his2} virgin anus.`); - r.push(`and `, virginitySpan); - } + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + knockMeUp(loser, 50, 1, winner.ID); + } - knockMeUp(loser, 50, 1, winner.ID); - } + loser.anus++; + actX(loser, anal); + } else if (canDoVaginal(loser)) { + r.push(winnerPenetrates(cunt)); - loser.anus++; - actX(loser, anal); - } else if (canDoVaginal(loser)) { - r.push(winnerPenetrates(cunt)); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + knockMeUp(loser, 50, 0, winner.ID); + } - knockMeUp(loser, 50, 0, winner.ID); - } + actX(loser, vaginal); + } else if (canDoAnal(loser)) { + r.push(); - actX(loser, vaginal); - } else if (canDoAnal(loser)) { - r.push(); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + knockMeUp(loser, 50, 0, winner.ID); + } - knockMeUp(loser, 50, 0, winner.ID); - } + actX(loser, anal); + } else { + r.push(facefuck); - actX(loser, anal); + actX(loser, oral); + } } else { - r.push(facefuck); + if (loser.vagina === 0 && canDoVaginal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - actX(loser, oral); - } - } else { - if (loser.vagina === 0 && canDoVaginal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - - if (winner.fetish === "pregnancy") { - virginitySpan.append(`take ${his2} virginity.`); - r.push(`and gleefully takes advantage of your rules to `, virginitySpan); - } else { - virginitySpan.append(`breaks in ${his2} virgin vagina.`); - r.push(`and `, virginitySpan); - } + if (winner.fetish === "pregnancy") { + virginitySpan.append(`take ${his2} virginity.`); + r.push(`and gleefully takes advantage of your rules to `, virginitySpan); + } else { + virginitySpan.append(`breaks in ${his2} virgin vagina.`); + r.push(`and `, virginitySpan); + } - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - knockMeUp(loser, 50, 0, winner.ID); - } + knockMeUp(loser, 50, 0, winner.ID); + } - loser.vagina++; - actX(loser, vaginal); - } else if (loser.anus === 0 && canDoAnal(loser)) { - r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); + loser.vagina++; + actX(loser, vaginal); + } else if (loser.anus === 0 && canDoAnal(loser)) { + r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`); - if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { - virginitySpan.append(`take ${his2} anal virginity.`); - r.push(`and gleefully takes advantage of your rules to `, virginitySpan); - } else { - virginitySpan.append(`breaks in ${his2} virgin anus.`); - r.push(`and `, virginitySpan); - } + if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) { + virginitySpan.append(`take ${his2} anal virginity.`); + r.push(`and gleefully takes advantage of your rules to `, virginitySpan); + } else { + virginitySpan.append(`breaks in ${his2} virgin anus.`); + r.push(`and `, virginitySpan); + } - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); - knockMeUp(loser, 50, 1, winner.ID); - } + knockMeUp(loser, 50, 1, winner.ID); + } - loser.anus++; - actX(loser, anal); - } else if (canDoVaginal(loser)) { - r.push(winnerPenetrates(cunt)); + loser.anus++; + actX(loser, anal); + } else if (canDoVaginal(loser)) { + r.push(winnerPenetrates(cunt)); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - knockMeUp(loser, 50, 0, winner.ID); - } + knockMeUp(loser, 50, 0, winner.ID); + } - actX(loser, vaginal); - } else if (canDoAnal(loser)) { - r.push(); + actX(loser, vaginal); + } else if (canDoAnal(loser)) { + r.push(); - if (canPenetrate(winner) && canImpreg(loser, winner)) { - r.push(loserProtest); + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - knockMeUp(loser, 50, 1, winner.ID); - } + knockMeUp(loser, 50, 1, winner.ID); + } - actX(loser, anal); - } else { - r.push(facefuck); + actX(loser, anal); + } else { + r.push(facefuck); - actX(loser, oral); + actX(loser, oral); + } } - } - r.push(rape(), rapeEffects()); + r.push(rape(), rapeEffects()); - if (winner.skill.combat === 0 && random(1, 100) < (20 + winner.devotion)) { - const experienceSpan = App.UI.DOM.makeElement("span", `learned basic combat skills.`, ["improvement"]); + if (winner.skill.combat === 0 && random(1, 100) < (20 + winner.devotion)) { + const experienceSpan = App.UI.DOM.makeElement("span", `learned basic combat skills.`, ["improvement"]); - r.push(`With experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); + r.push(`With experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); - winner.skill.combat++; - } + winner.skill.combat++; + } - loser.counter.pitLosses++; - actX(winner, "penetrative"); + loser.counter.pitLosses++; + actX(winner, "penetrative"); - if (!V.pit.bodyguardFights || V.BodyguardID !== winner.ID) { - V.pit.fighterIDs.push(winner.ID); - } - if (!V.pit.bodyguardFights || V.BodyguardID !== loser.ID) { - V.pit.fighterIDs.push(loser.ID); + winner.counter.pitWins++; } V.pitFightsTotal++; - winner.counter.pitWins++; App.Events.addNode(postFightDiv, r); @@ -901,6 +996,9 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { const r = []; + const {he, his, He} = getPronouns(winner); + const {he: he2, his: his2, him: him2, girl: girl2} = getPronouns(loser); + if (winner.sexualFlaw === "malicious") { r.push(`${winner.slaveName} lives to torment and violate slaves. ${He} uses ${loser.slaveName} for ${his} `, App.UI.DOM.makeElement("span", `pleasure`, ["devotion", "inc"]), ` slapping ${him2} viciously, pinching ${him2} until ${he} draws blood, and showing off for the spectators.`); @@ -985,6 +1083,9 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { const r = []; + const {he, his, him, himself, He} = getPronouns(winner); + const {he: he2, him: him2, He: He2} = getPronouns(loser); + r.push(winnerEffects(), loserEffects()); if (loser.fetish !== "masochist" && loser.fetish !== "humiliation" && loser.sexualFlaw !== "self hating" && loser.relationship && loser.relationship < 5 && winner.ID === loser.relationshipTarget) { @@ -995,7 +1096,7 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { return rapeEffectsDiv; - function winnerEffects() { + function winnerEffects() { const winnerEffectsDiv = document.createElement("div"); const r = []; @@ -1043,9 +1144,9 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { App.Events.addNode(winnerEffectsDiv, r); return winnerEffectsDiv; - } + } - function loserEffects() { + function loserEffects() { const loserEffectsDiv = document.createElement("div"); const trustSpan = App.UI.DOM.makeElement("span", `fears`, ["trust", "dec"]); @@ -1110,31 +1211,31 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { App.Events.addNode(loserEffectsDiv, r); return loserEffectsDiv; - } + } } } - /** - * @returns {number} - */ + + // MARK: Helper Functions + + /** @returns {boolean} Returns true if fighters[0] won */ function getWinner() { - if (!animal) { - if (fighterDeadliness(getSlave(fighters[0])) > fighterDeadliness(getSlave(fighters[1]))) { - return fighters[0]; - } else if (fighterDeadliness(getSlave(fighters[0])) < fighterDeadliness(getSlave(fighters[1]))) { - return fighters[1]; - } else if (random(1, 100) > 50) { - return fighters[0]; + if (animal) { + if (canRun(getSlave(fighters[0]))) { + return random(1, 100) > 20; // 80% chance of winning } else { - return fighters[1]; + return random(1, 100) > 80; // 20% chance of winning } } - } - /** - * @returns {number} - */ - function getLoser() { - return winner.ID === fighters[0] ? fighters[1] : fighters[0]; + if (deadliness(getSlave(fighters[0])) > deadliness(getSlave(fighters[1]))) { + return random(1, 100) > 20; // 80% chance of winning + } else if (deadliness(getSlave(fighters[0])) < deadliness(getSlave(fighters[1]))) { + return random(1, 100) > 80; // 20% chance of winning + } else if (random(1, 100) > 50) { // 50/50 + return true; + } else { + return false; + } } }; diff --git a/src/facilities/farmyard/animals/animals.js b/src/facilities/farmyard/animals/animals.js new file mode 100644 index 0000000000000000000000000000000000000000..ad525d0a2b0ace954f0c65352fc9e8c842a10204 --- /dev/null +++ b/src/facilities/farmyard/animals/animals.js @@ -0,0 +1,643 @@ +/** The base animal class. */ +App.Entity.Animal = class { + /** + * @param {string} name + * @param {string} species + * @param {'canine'|'hooved'|'feline'} type + * @param {'domestic'|'exotic'} rarity + */ + constructor(name, species, type, rarity) { + this.name = name; + this.species = species; + this.type = type; + this.rarity = rarity; + this.articleAn = 'a'; + this.dick = { + /** Corresponds directly to the sizes in SlaveState. */ + size: this.species === 'cat' ? 2 : 4, + desc: this.species === 'cat' ? 'little' : 'large', + }; + this.deadliness = this.type === 'feline' ? this.species === 'cat' ? 1 : 4 : 3; + } + + /** @returns {boolean} */ + get purchased() { + return V[this.type].includes(this.name); + } + + /** @returns {boolean} */ + get isActive() { + return V.active[this.type].name === this.name; + } + + /** @type {function():this} */ + purchase() { + V[this.type].push(this.name); + + return this; + } + + /** @param {string} name */ + setName(name) { + this.name = name; + + return this; + } + + /** @param {string} species */ + setSpecies(species) { + this.species = species; + + return this; + } + + /** @param {'canine'|'hooved'|'feline'} type */ + setType(type) { + this.type = type; + + return this; + } + + /** @param {'domestic'|'exotic'} rarity */ + setRarity(rarity) { + this.rarity = rarity; + + return this; + } + + /** @type {function():this} */ + setActive() { + V.active[this.type] = this; + + return this; + } + + /** @param {'a'|'an'} setter */ + setArticle(setter) { + this.articleAn = setter; + + return this; + } + + /** + * @param {number} size + * @param {string} desc + */ + setDick(size = 2, desc = null) { + this.dick.size = size; + this.dick.desc = desc; + + return this; + } + + /** @param {number} setter */ + setDeadliness(setter) { + this.deadliness = setter; + + return this; + } +}; + +App.Facilities.Farmyard.animals = function() { + App.Facilities.Farmyard.animals.init(); + + const frag = new DocumentFragment(); + + const domesticDiv = App.UI.DOM.appendNewElement("div", frag, '', "farmyard-domestic"); + const exoticDiv = App.UI.DOM.appendNewElement("div", frag, '', "farmyard-exotic"); + + const hrMargin = '0'; + + const canine = 'canine'; + const hooved = 'hooved'; + const feline = 'feline'; + const exotic = 'exotic'; + const domestic = 'domestic'; + + V.nextButton = "Back"; + V.nextLink = "Farmyard"; + V.returnTo = "Farmyard Animals"; + V.encyclopedia = "Farmyard"; + + App.UI.DOM.appendNewElement("span", domesticDiv, 'Domestic Animals', "farmyard-heading"); + + if (V.farmyardKennels > 1 || V.farmyardStables > 1 || V.farmyardCages > 1) { + App.UI.DOM.appendNewElement("span", exoticDiv, 'Exotic Animals', "farmyard-heading"); + } + + if (V.farmyardKennels) { + domesticDiv.append(domesticCanines()); + } + + if (V.farmyardStables) { + domesticDiv.append(domesticHooved()); + } + + if (V.farmyardCages) { + domesticDiv.append(domesticFelines()); + } + + if (V.farmyardKennels > 1) { + exoticDiv.append(exoticCanines()); + } + + if (V.farmyardStables > 1) { + exoticDiv.append(exoticHooved()); + } + + if (V.farmyardCages > 1) { + exoticDiv.append(exoticFelines()); + } + + if (V.debugMode || V.cheatMode) { + frag.appendChild(addAnimal()); + } + + return frag; + + + + // MARK: Domestic Animals + + function domesticCanines() { + const canineDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", canineDiv, 'Dogs', "farmyard-animal-type"); + + canineDiv.append(hr, animalList(canine, domestic, 5000, canine)); + + return canineDiv; + } + + function domesticHooved() { + const hoovedDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", hoovedDiv, 'Hooved Animals', "farmyard-animal-type"); + + hoovedDiv.append(hr, animalList(hooved, domestic, 20000, hooved)); + + return hoovedDiv; + } + + function domesticFelines() { + const felineDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", felineDiv, 'Cats', "farmyard-animal-type"); + + felineDiv.append(hr, animalList(feline, domestic, 1000, feline)); + + return felineDiv; + } + + + + // MARK: Exotic Animals + + function exoticCanines() { + const canineDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", canineDiv, 'Canines', "farmyard-animal-type"); + + canineDiv.append(hr, animalList(canine, exotic, 50000, canine)); + + return canineDiv; + } + + function exoticHooved() { + const hoovedDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", hoovedDiv, 'Hooved Animals', "farmyard-animal-type"); + + hoovedDiv.append(hr, animalList(hooved, exotic, 75000, hooved)); + + return hoovedDiv; + } + + function exoticFelines() { + const felineDiv = App.UI.DOM.makeElement("div", '', "farmyard-animals"); + const hr = document.createElement("hr"); + + hr.style.margin = hrMargin; + + App.UI.DOM.appendNewElement("span", felineDiv, 'Felines', "farmyard-animal-type"); + + felineDiv.append(hr, animalList(feline, exotic, 100000, feline)); + + return felineDiv; + } + + + + // MARK: Helper Functions + + /** + * Creates either a link or note text depending on parameters given + * @param {object} param + * @param {App.Entity.Animal} param.animal + * @param {string} param.active + * @param {string} param.type + * @param {number} param.price + * @param {function():void} param.setActiveHandler + * @param {function():void} param.purchaseHandler + * @returns {string|HTMLElement} + */ + function animalLink({animal, active, type, price, setActiveHandler, purchaseHandler}) { + if (animal.purchased) { + if (V.active[active] && V.active[active].name === animal.name) { + return App.UI.DOM.makeElement("span", `Set as active ${type}`, "note"); + } else { + return App.UI.DOM.link(`Set as active ${type}`, setActiveHandler); + } + } else { + return App.UI.DOM.link(`Purchase for ${cashFormat(price)}`, purchaseHandler); + } + } + + /** + * Creates a list of the specified animal type from the main animal array. + * @param {"canine"|"hooved"|"feline"} type One of 'canine', 'hooved', or 'feline', also used determine the active animal type. + * @param {string} rarity One of domestic or exotic. + * @param {number} price + * @param {string} active The name of the current active animal of the given type. + * @returns {HTMLDivElement} + */ + function animalList(type, rarity, price, active) { + const mainDiv = document.createElement("div"); + let filteredArray = App.Data.animals.filter(animal => animal.rarity === rarity && animal.type === type); + + for (const i in filteredArray) { + const animalDiv = document.createElement("div"); + const optionSpan = document.createElement("span"); + + const args = { + animal: filteredArray[i], + active: active, + type: type, + price: price, + setActiveHandler() { + filteredArray[i].setActive(); + App.UI.DOM.replace(mainDiv, animalList(type, rarity, price, active)); + }, + purchaseHandler() { + cashX(forceNeg(price), "farmyard"); + filteredArray[i].purchase(); + App.UI.DOM.replace(mainDiv, animalList(type, rarity, price, active)); + } + }; + + optionSpan.append(animalLink(args)); + + animalDiv.append(capFirstChar(filteredArray[i].name), ' ', optionSpan); + + mainDiv.appendChild(animalDiv); + } + + // filteredArray = []; + + return mainDiv; + } + + function addAnimal() { + const addAnimalDiv = document.createElement("div"); + const dickDiv = document.createElement("div"); + const deadlinessDiv = document.createElement("div"); + const addDiv = App.UI.DOM.makeElement("div", null, ["animal-add"]); + + const animal = new App.Entity.Animal(null, null, "canine", "domestic"); + + App.UI.DOM.appendNewElement("div", addAnimalDiv, `Add a New Animal`, ["farmyard-heading"]); + + addAnimalDiv.append( + name(), + species(), + type(), + rarity(), + article(), + dick(), + deadliness(), + add(), + ); + + return addAnimalDiv; + + function name() { + const nameDiv = document.createElement("div"); + + nameDiv.append( + `Name: `, + App.UI.DOM.makeTextBox(animal.name || '', value => { + animal.setName(value); + + App.UI.DOM.replace(nameDiv, name); + App.UI.DOM.replace(dickDiv, dick); + App.UI.DOM.replace(deadlinessDiv, deadliness); + App.UI.DOM.replace(addDiv, add); + }), + ); + + return nameDiv; + } + + function species() { + const speciesDiv = document.createElement("div"); + + speciesDiv.append( + `Species: `, + App.UI.DOM.makeTextBox(animal.species || '', value => { + animal.setSpecies(value); + + App.UI.DOM.replace(speciesDiv, species); + App.UI.DOM.replace(addDiv, add); + }), + ); + + return speciesDiv; + } + + function type() { + const typeDiv = document.createElement("div"); + + const typeLinks = []; + + if (animal.type === "canine") { + typeLinks.push( + App.UI.DOM.disabledLink(`Canine`, [`Already selected.`]), + App.UI.DOM.link(`Hooved`, () => { + animal.setType('hooved'); + + App.UI.DOM.replace(typeDiv, type); + }), + App.UI.DOM.link(`Feline`, () => { + animal.setType("feline"); + + App.UI.DOM.replace(typeDiv, type); + }), + ); + } else if (animal.type === "hooved") { + typeLinks.push( + App.UI.DOM.link(`Canine`, () => { + animal.setType("canine"); + + App.UI.DOM.replace(typeDiv, type); + }), + App.UI.DOM.disabledLink(`Hooved`, [`Already selected.`]), + App.UI.DOM.link(`Feline`, () => { + animal.setType("feline"); + + App.UI.DOM.replace(typeDiv, type); + }), + ); + } else { + typeLinks.push( + App.UI.DOM.link(`Canine`, () => { + animal.setType("canine"); + + App.UI.DOM.replace(typeDiv, type); + }), + App.UI.DOM.link(`Hooved`, () => { + animal.setType("hooved"); + + App.UI.DOM.replace(typeDiv, type); + }), + App.UI.DOM.disabledLink(`Feline`, [`Already selected.`]), + ); + } + + typeDiv.append(`Type: `, App.UI.DOM.generateLinksStrip(typeLinks)); + + return typeDiv; + } + + function rarity() { + const rarityDiv = document.createElement("div"); + + const rarityLinks = []; + + if (animal.rarity === "domestic") { + rarityLinks.push( + App.UI.DOM.disabledLink(`Domestic`, [`Already selected.`]), + App.UI.DOM.link(`Exotic`, () => { + animal.setRarity('exotic'); + + App.UI.DOM.replace(rarityDiv, rarity); + }), + ); + } else { + rarityLinks.push( + App.UI.DOM.link(`Domestic`, () => { + animal.setRarity('domestic'); + + App.UI.DOM.replace(rarityDiv, rarity); + }), + App.UI.DOM.disabledLink(`Exotic`, [`Already selected.`]), + ); + } + + rarityDiv.append(`Rarity: `, App.UI.DOM.generateLinksStrip(rarityLinks)); + + return rarityDiv; + } + + function article() { + const articleDiv = document.createElement("div"); + + const articleLinks = []; + + if (animal.articleAn === 'a') { + articleLinks.push( + App.UI.DOM.link("Yes", () => { + animal.articleAn = 'an'; + + App.UI.DOM.replace(articleDiv, article); + App.UI.DOM.replace(dickDiv, dick); + App.UI.DOM.replace(deadlinessDiv, deadliness); + }), + App.UI.DOM.disabledLink("No", [`Already selected.`]), + ); + } else { + articleLinks.push( + App.UI.DOM.disabledLink("Yes", [`Already selected.`]), + App.UI.DOM.link("No", () => { + animal.articleAn = 'a'; + + App.UI.DOM.replace(articleDiv, article); + App.UI.DOM.replace(dickDiv, dick); + App.UI.DOM.replace(deadlinessDiv, deadliness); + }), + ); + } + + articleDiv.append(`Is this animal's name preceded by an 'an'? `, App.UI.DOM.generateLinksStrip(articleLinks)); + + return articleDiv; + } + + function dick() { + dickDiv.append(dickSize(), dickDesc()); + + return dickDiv; + + function dickSize() { + const dickSizeDiv = document.createElement("div"); + + dickSizeDiv.append( + `How large is ${animal.name ? `${animal.articleAn} ${animal.name}` : `the animal`}'s dick? `, + App.UI.DOM.makeTextBox(animal.dick.size || 2, value => { + animal.setDick(value, animal.dick.desc || null); + + App.UI.DOM.replace(dickSizeDiv, dickSize); + }, true), + App.UI.DOM.makeElement("span", `1 is smallest, and default is 2. `, ["note"]), + ); + + return dickSizeDiv; + } + + function dickDesc() { + const dickDescDiv = document.createElement("div"); + + dickDescDiv.append( + `What does it look like? `, + App.UI.DOM.makeTextBox(animal.dick.desc || '', value => { + animal.setDick(animal.dick.size || 2, value); + + App.UI.DOM.replace(dickDescDiv, dickDesc); + }), + App.UI.DOM.makeElement("span", `Default is 'large'. `, ["note"]), + ); + + return dickDescDiv; + } + } + + function deadliness() { + deadlinessDiv.append( + `How deadly is ${animal.name ? `${animal.articleAn} ${animal.name}` : `the animal`}? `, + App.UI.DOM.makeTextBox(5, value => { + animal.setDick(value); + }, true), + App.UI.DOM.makeElement("span", `Default is 5. `, ["note"]), + ); + + return deadlinessDiv; + } + + function add() { + const disabledReasons = []; + + let link; + + if (!animal.name) { + disabledReasons.push(`Animal must have a name.`); + } + + if (!animal.species) { + disabledReasons.push(`Animal must have a species.`); + } + + if (disabledReasons.length > 0) { + link = App.UI.DOM.disabledLink(`Add`, disabledReasons); + } else { + link = App.UI.DOM.link(`Add`, () => { + App.Data.animals.push(animal); + + App.UI.DOM.replace(addAnimalDiv, addAnimal); + }); + } + + addDiv.appendChild(link); + + return addDiv; + } + } +}; + +App.Facilities.Farmyard.animals.init = function() { + if (App.Data.animals.length === 0) { + class Animal extends App.Entity.Animal {} + + const dog = 'dog'; + const cat = 'cat'; + const canine = 'canine'; + const hooved = 'hooved'; + const feline = 'feline'; + const domestic = 'domestic'; + const exotic = 'exotic'; + const an = 'an'; + + /** @type {Animal[]} */ + App.Data.animals = [ + new Animal("beagle", dog, canine, domestic) + .setDeadliness(2), + new Animal("bulldog", dog, canine, domestic), + new Animal("French bulldog", dog, canine, domestic) + .setDeadliness(2), + new Animal("German shepherd", dog, canine, domestic), + new Animal("golden retriever", dog, canine, domestic), + new Animal("labrador retriever", dog, canine, domestic), + new Animal("poodle", dog, canine, domestic) + .setDeadliness(2), + new Animal("rottweiler", dog, canine, domestic), + new Animal("Siberian husky", dog, canine, domestic), + new Animal("Yorkshire terrier", dog, canine, domestic) + .setDeadliness(2), + + new Animal("dingo", "dingo", canine, exotic), + new Animal("fox", "fox", canine, exotic), + new Animal("jackal", "jackal", canine, exotic), + new Animal("wolf", "wolf", canine, exotic) + .setDeadliness(4), + + new Animal("bull", "bull", hooved, domestic) + .setDick(5, 'huge'), + new Animal("horse", "horse", hooved, domestic) + .setDick(5, 'huge'), + new Animal("pig", "pig", hooved, domestic), + + new Animal("zebra", "zebra", hooved, exotic) + .setDick(5, 'huge'), + new Animal("elephant", "elephant", hooved, exotic) + .setArticle(an) + .setDick(6, 'enormous'), // not exactly true to life, but more fun + + new Animal("Abbysinian", cat, feline, domestic) + .setArticle(an), + new Animal("Bengal", cat, feline, domestic), + new Animal("Birman", cat, feline, domestic), + new Animal("Maine coon", cat, feline, domestic), + new Animal("Oriental shorthair", cat, feline, domestic) + .setArticle(an), + new Animal("Persian", cat, feline, domestic), + new Animal("Ragdoll", cat, feline, domestic), + new Animal("Russian blue", cat, feline, domestic), + new Animal("Siamese", cat, feline, domestic), + new Animal("Sphynx", cat, feline, domestic), + + new Animal("cougar", "cougar", feline, exotic), + new Animal("jaguar", "jaguar", feline, exotic), + new Animal("leopard", "leopard", feline, exotic), + new Animal("lion", "lion", feline, exotic), + new Animal("lynx", "lynx", feline, exotic), + new Animal("puma", "puma", feline, exotic), + new Animal("tiger", "tiger", feline, exotic), + ]; + } +}; + +/** @type {App.Entity.Animal[]} */ +App.Data.animals = App.Data.animals || []; diff --git a/src/facilities/farmyard/animals/farmyardAnimals.tw b/src/facilities/farmyard/animals/farmyardAnimals.tw new file mode 100644 index 0000000000000000000000000000000000000000..0174a57b3d50ff39684c5c08b9644476aed2bd1d --- /dev/null +++ b/src/facilities/farmyard/animals/farmyardAnimals.tw @@ -0,0 +1,3 @@ +:: Farmyard Animals [nobr] + +<<includeDOM App.Facilities.Farmyard.animals()>> diff --git a/src/facilities/farmyard/farmyard.css b/src/facilities/farmyard/farmyard.css index 1dfe466c3819a232b8fc6cc22803b0be5a12f319..9db4266282fc4af9fc1f3adccc204c105295d698 100644 --- a/src/facilities/farmyard/farmyard.css +++ b/src/facilities/farmyard/farmyard.css @@ -1,39 +1,30 @@ -/* MOST LIKELY TEMPORARY UNTIL I FIND A BETTER SPOT */ - -.farmyard-intro { +.farmyard-intro, +.farmyard-domestic { margin-bottom: 1em; } -.farmyard-expand { +.farmyard-expand, +.farmyard-menials, +.farmyard-rules, +.farmyard-upgrades, +.farmyard-animals, +.farmyard-slaves, +.farmyard-heading { margin-top: 1em; margin-bottom: 1em; } -.farmyard-menials { +.animal-add, +.farmyard-rename, +.farmyard-exotic { margin-top: 1em; - margin-bottom: 1em; } -.farmyard-rules { - margin-top: 1em; - margin-bottom: 1em; +.farmyard-heading { + text-transform: uppercase; } -.farmyard-upgrades { - margin-top: 1em; - margin-bottom: 1em; -} - -.farmyard-animals { - margin-top: 1em; - margin-bottom: 1em; -} - -.farmyard-slaves { - margin-top: 1em; - margin-bottom: 1em; -} - -.farmyard-rename { - margin-top: 1em; +.farmyard-heading, +.farmyard-animal-type { + font-weight: bold; } diff --git a/src/facilities/farmyard/farmyard.js b/src/facilities/farmyard/farmyard.js index dacfbf965520e3cf865978010c38941165d7d66c..c321df4c04d92119bc16fad848a60e36dc0f50a0 100644 --- a/src/facilities/farmyard/farmyard.js +++ b/src/facilities/farmyard/farmyard.js @@ -19,11 +19,15 @@ App.Facilities.Farmyard.farmyard = function() { App.UI.SlaveList.ScrollPosition.restore(); + return frag; + + + function intro() { const frag = new DocumentFragment(); - const desc = App.UI.DOM.makeElement("div", '', "scene-intro"); - const link = App.UI.DOM.makeElement("div", '', "indent"); + const desc = App.UI.DOM.makeElement("div", null, "scene-intro"); + const link = App.UI.DOM.makeElement("div", null, "indent"); const count = App.Entity.facilities.farmyard.totalEmployeesCount; const farmyardNameCaps = capFirstChar(V.farmyardName); @@ -142,16 +146,8 @@ App.Facilities.Farmyard.farmyard = function() { V.farmyardStables = 0; V.farmyardCages = 0; - V.activeCanine = 0; - V.activeHooved = 0; - V.activeFeline = 0; - V.pit.animal = null; - V.canines = []; - V.hooved = []; - V.felines = []; - V.farmyardUpgrades = { pump: 0, fertilizer: 0, @@ -160,7 +156,8 @@ App.Facilities.Farmyard.farmyard = function() { seeds: 0 }; - clearAnimalsBought(); + clearAnimalsPurchased(); + // @ts-ignore App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Manufacturing, "Farmyard", "Manufacturing"); })); @@ -174,9 +171,9 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); const desc = document.createElement("div"); - const link = App.UI.DOM.makeElement("div", '', "indent"); - const note = App.UI.DOM.makeElement("span", '', "note"); - const cost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const link = App.UI.DOM.makeElement("div", null, "indent"); + const note = App.UI.DOM.makeElement("span", null, "note"); + const cost = App.UI.DOM.makeElement("span", null, "yellowgreen"); const upgradeCost = Math.trunc(V.farmyard * 1000 * V.upgradeMultiplierArcology); const farmhands = App.Entity.facilities.farmyard.totalEmployeesCount; @@ -217,7 +214,7 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); const links = []; - const linksDiv = App.UI.DOM.makeElement("div", '', "indent"); + const linksDiv = App.UI.DOM.makeElement("div", null, "indent"); const menials = V.menials; const farmMenials = V.farmMenials; @@ -288,7 +285,7 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); const links = []; - const linksDiv = App.UI.DOM.makeElement("div", '', "indent"); + const linksDiv = App.UI.DOM.makeElement("div", null, "indent"); const menials = V.menials; const farmMenials = V.farmMenials; @@ -339,9 +336,9 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); const desc = document.createElement("div"); - const link = App.UI.DOM.makeElement("div", '', "indent"); - const note = App.UI.DOM.makeElement("span", '', "note"); - const cost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const link = App.UI.DOM.makeElement("div", null, "indent"); + const note = App.UI.DOM.makeElement("span", null, "note"); + const cost = App.UI.DOM.makeElement("span", null, "yellowgreen"); const unitCost = Math.trunc(1000 * V.upgradeMultiplierArcology); @@ -367,7 +364,7 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); if (App.Entity.facilities.farmyard.employeesIDs().size > 0) { // TODO: redo this with V.farmyardShowgirls - if (V.farmyardShows && (V.canines || V.hooved || V.felines)) { + if (V.farmyardShows && (V.canine || V.hooved || V.feline)) { const rule = makeRule( ['Slaves', 'are putting on shows with animals'], 'are', @@ -472,15 +469,15 @@ App.Facilities.Farmyard.farmyard = function() { } function upgrades() { - const frag = new DocumentFragment(), + const frag = new DocumentFragment(); - farmyardUpgrades = V.farmyardUpgrades, + const farmyardUpgrades = V.farmyardUpgrades; - pumpCost = Math.trunc(5000 * V.upgradeMultiplierArcology), - fertilizerCost = Math.trunc(10000 * V.upgradeMultiplierArcology), - hydroponicsCost = Math.trunc(20000 * V.upgradeMultiplierArcology), - seedsCost = Math.trunc(25000 * V.upgradeMultiplierArcology), - machineryCost = Math.trunc(50000 * V.upgradeMultiplierArcology); + const pumpCost = Math.trunc(5000 * V.upgradeMultiplierArcology); + const fertilizerCost = Math.trunc(10000 * V.upgradeMultiplierArcology); + const hydroponicsCost = Math.trunc(20000 * V.upgradeMultiplierArcology); + const seedsCost = Math.trunc(25000 * V.upgradeMultiplierArcology); + const machineryCost = Math.trunc(50000 * V.upgradeMultiplierArcology); if (!farmyardUpgrades.pump) { const desc = document.createElement("div"); @@ -572,9 +569,9 @@ App.Facilities.Farmyard.farmyard = function() { function createUpgrade(linkText, price, effect, type) { const desc = document.createElement("div"); - const link = App.UI.DOM.makeElement("div", '', "indent"); - const note = App.UI.DOM.makeElement("span", '', "note"); - const cost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const link = App.UI.DOM.makeElement("div", null, "indent"); + const note = App.UI.DOM.makeElement("span", null, "note"); + const cost = App.UI.DOM.makeElement("span", null, "yellowgreen"); cost.append(cashFormat(price)); @@ -594,10 +591,10 @@ App.Facilities.Farmyard.farmyard = function() { } function animals() { - const frag = new DocumentFragment(), + const frag = new DocumentFragment(); - baseCost = Math.trunc(5000 * V.upgradeMultiplierArcology), - upgradedCost = Math.trunc(10000 * V.upgradeMultiplierArcology); + const baseCost = Math.trunc(5000 * V.upgradeMultiplierArcology); + const upgradedCost = Math.trunc(10000 * V.upgradeMultiplierArcology); let farmyardKennels = V.farmyardKennels; let farmyardStables = V.farmyardStables; @@ -607,22 +604,22 @@ App.Facilities.Farmyard.farmyard = function() { // MARK: Kennels - const CL = V.canines.length; + const CL = V.canine.length; - const dogs = CL === 1 ? V.canines[0] : CL < 3 ? + const dogs = CL === 1 ? `${V.canine[0]}s` : CL < 3 ? `several different breeds of dogs` : `all kinds of dogs`; - const canines = CL === 1 ? V.canines[0].species === "dog" ? - V.canines[0].breed : V.canines[0].speciesPlural : CL < 3 ? - `several different ${V.canines.every( + const canines = CL === 1 ? V.canine[0].species === "dog" ? + V.canine[0].breed : V.canine[0].speciesPlural : CL < 3 ? + `several different ${V.canine.every( c => c.species === "dog") ? `breeds of dogs` : `species of canines`}` : `all kinds of canines`; const kennels = document.createElement("div"); - const kennelsUpgrade = App.UI.DOM.makeElement("div", '', "indent"); - const kennelsNote = App.UI.DOM.makeElement("span", '', "note"); - const kennelsCost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const kennelsUpgrade = App.UI.DOM.makeElement("div", null, "indent"); + const kennelsNote = App.UI.DOM.makeElement("span", null, "note"); + const kennelsCost = App.UI.DOM.makeElement("span", null, "yellowgreen"); if (farmyardKennels === 0) { kennels.append(App.UI.DOM.passageLink("Add kennels", "Farmyard", @@ -651,6 +648,9 @@ App.Facilities.Farmyard.farmyard = function() { kennelsUpgrade.append(kennelsNote); kennels.append(kennelsUpgrade); + } else { + kennelsNote.append(`You must be more reputable to be able to house exotic canines`); + kennels.append(kennelsNote); } } else if (farmyardKennels === 2) { kennels.append(App.UI.DOM.passageLink("Large kennels", "Farmyard Animals")); @@ -663,14 +663,14 @@ App.Facilities.Farmyard.farmyard = function() { const HL = V.hooved.length; - const hooved = HL === 1 ? V.hooved[0] : HL < 3 ? + const hooved = HL === 1 ? `${V.hooved[0]}s` : HL < 3 ? `several different types of hooved animals` : `all kinds of hooved animals`; const stables = document.createElement("div"); - const stablesUpgrade = App.UI.DOM.makeElement("div", '', "indent"); - const stablesNote = App.UI.DOM.makeElement("span", '', "note"); - const stablesCost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const stablesUpgrade = App.UI.DOM.makeElement("div", null, "indent"); + const stablesNote = App.UI.DOM.makeElement("span", null, "note"); + const stablesCost = App.UI.DOM.makeElement("span", null, "yellowgreen"); if (farmyardStables === 0) { stables.append(App.UI.DOM.passageLink("Add stables", "Farmyard", @@ -699,6 +699,9 @@ App.Facilities.Farmyard.farmyard = function() { stablesUpgrade.append(stablesNote); stables.append(stablesUpgrade); + } else { + stablesNote.append(`You must be more reputable to be able to house exotic hooved animals`); + stables.append(stablesNote); } } else if (farmyardStables === 2) { stables.append(App.UI.DOM.passageLink("Large stables", "Farmyard Animals")); @@ -709,22 +712,22 @@ App.Facilities.Farmyard.farmyard = function() { // MARK: Cages - const FL = V.felines.length; + const FL = V.feline.length; - const cats = FL === 1 ? V.felines[0] : FL < 3 ? + const cats = FL === 1 ? `${V.feline[0]}s` : FL < 3 ? `several different breeds of cats` : `all kinds of cats`; - const felines = FL === 1 ? V.felines[0].species === "cat" ? - V.felines[0].breed : V.felines[0].speciesPlural : FL < 3 ? - `several different ${V.felines.every( + const felines = FL === 1 ? V.feline[0].species === "cat" ? + V.feline[0].breed : V.feline[0].speciesPlural : FL < 3 ? + `several different ${V.feline.every( c => c.species === "cat") ? `breeds of cats` : `species of felines`}` : `all kinds of felines`; const cages = document.createElement("div"); - const cagesUpgrade = App.UI.DOM.makeElement("div", '', "indent"); - const cagesNote = App.UI.DOM.makeElement("span", '', "note"); - const cagesCost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const cagesUpgrade = App.UI.DOM.makeElement("div", null, "indent"); + const cagesNote = App.UI.DOM.makeElement("span", null, "note"); + const cagesCost = App.UI.DOM.makeElement("span", null, "yellowgreen"); if (farmyardCages === 0) { cages.append(App.UI.DOM.passageLink("Add cages", "Farmyard", @@ -753,6 +756,9 @@ App.Facilities.Farmyard.farmyard = function() { cagesUpgrade.append(cagesNote); cages.append(cagesUpgrade); + } else { + cagesNote.append(`You must be more reputable to be able to house exotic felines`); + cages.append(cagesNote); } } else if (farmyardCages === 2) { cages.append(App.UI.DOM.passageLink("Large cages", "Farmyard Animals")); @@ -764,8 +770,8 @@ App.Facilities.Farmyard.farmyard = function() { // MARK: Remove Housing const removeHousing = document.createElement("div"); - const removeHousingNote = App.UI.DOM.makeElement("span", '', "note"); - const removeHousingCost = App.UI.DOM.makeElement("span", '', "yellowgreen"); + const removeHousingNote = App.UI.DOM.makeElement("span", null, "note"); + const removeHousingCost = App.UI.DOM.makeElement("span", null, "yellowgreen"); const removeHousingPrice = ((farmyardKennels + farmyardStables + farmyardCages) * 5000) * V.upgradeMultiplierArcology; @@ -782,11 +788,7 @@ App.Facilities.Farmyard.farmyard = function() { V.farmyardBreeding = 0; V.farmyardRestraints = 0; - V.canines = []; - V.hooved = []; - V.felines = []; - - clearAnimalsBought(); + clearAnimalsPurchased(); cashX(forceNeg(removeHousingPrice), "farmyard"); })); @@ -803,8 +805,8 @@ App.Facilities.Farmyard.farmyard = function() { function rename() { const frag = new DocumentFragment(); - const renameDiv = App.UI.DOM.makeElement("div", '', "farmyard-rename"); - const renameNote = App.UI.DOM.makeElement("span", '', "note"); + const renameDiv = App.UI.DOM.makeElement("div", null, "farmyard-rename"); + const renameNote = App.UI.DOM.makeElement("span", null, "note"); renameDiv.append(`Rename ${V.farmyardName}: `); renameNote.append(` Use a noun or similar short phrase`); @@ -820,11 +822,13 @@ App.Facilities.Farmyard.farmyard = function() { return frag; } - function clearAnimalsBought() { - for (const i in V.animalsBought) { - V.animalsBought[i] = 0; - } - } + function clearAnimalsPurchased() { + V.canine = []; + V.hooved = []; + V.feline = []; - return frag; + V.active.canine = null; + V.active.hooved = null; + V.active.feline = null; + } }; diff --git a/src/facilities/farmyard/farmyardAnimals.tw b/src/facilities/farmyard/farmyardAnimals.tw deleted file mode 100644 index ede08720990317141f558c395a6802701d75547f..0000000000000000000000000000000000000000 --- a/src/facilities/farmyard/farmyardAnimals.tw +++ /dev/null @@ -1,125 +0,0 @@ -:: Farmyard Animals [nobr] - -<<set $nextButton = "Back", $nextLink = "Farmyard", $returnTo = "Farmyard Animals", $encyclopedia = "Farmyard">> - -/* TODO: write some descriptions for the different animals in their cages */ - -<<if $farmyardKennels > 0 || $farmyardStables > 0 || $farmyardCages > 0>> -<br> -''Domestic Animals'' -<hr> - -<<if $farmyardKennels > 0>> - <br> - __Dogs__ - <br>//Cost <<print cashFormat(20000)>> each// /* TODO: this number is mostly a placeholder, will need adjusting */ - <br> - <<if $animalsBought.labradorRetrievers <= 0>> - <<link "Purchase dogs" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.labradorRetrievers = 1, $animalsBought.canines += 1, $canines.push({ - species: "dog", speciesPlural: "dogs", breed: "Labrador Retrievers", type: "canine", dickSize: "big", ballType: "dog" - })>><</link>> - <br> - <<else>> - Dogs - <<if $activeCanine.breed != "Labrador Retriever">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Labrador Retriever", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> -<</if>> - -<<if $farmyardStables > 0>> - <br> - __Hooved Animals__ - <br>//Cost <<print cashFormat(20000)>> each// /* TODO: this number is mostly a placeholder, will need adjusting */ - <br> - <<if $animalsBought.horses <= 0>> - <<link "Purchase horses" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.horses = 1, $animalsBought.hooved += 1, $hooved.push("horses")>><</link>> - <br> - <<else>> - Horses - <<if $activeHooved.species != "horse">> - [[Set as active hooved|Farmyard Animals][$activeHooved = {species: "horse", speciesCap: "Horse", speciesPlural: "horses", type: "hooved", dickSize: "huge", ballType: "horse"}]] - <<else>> - //Set as active hooved// - <</if>> - <br> - <</if>> - <<if $animalsBought.bulls <= 0>> - <<link "Purchase bulls" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bulls = 1, $animalsBought.hooved += 1, $hooved.push("bulls")>><</link>> - <br> - <<else>> - Bulls - <<if $activeHooved.species != "bull">> - [[Set as active hooved|Farmyard Animals][$activeHooved = {species: "bull", speciesCap: "Bull", speciesPlural: "bulls", type: "hooved", dickSize: "huge", ballType: "horse"}]] - <<else>> - //Set as active hooved// - <</if>> - <br> - <</if>> - <<if $animalsBought.pigs <= 0>> - <<link "Purchase pigs" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.pigs = 1, $animalsBought.hooved += 1, $hooved.push("pigs")>><</link>> - <br> - <<else>> - Pigs - <<if $activeHooved.species != "pig">> - [[Set as active hooved|Farmyard Animals][$activeHooved = {species: "pig", speciesCap: "Pig", speciesPlural: "pigs", type: "hooved", dickSize: "large", ballType: "horse"}]] - <<else>> - //Set as active hooved// - <</if>> - <br> - <</if>> -<</if>> -<</if>> -<br> - -<<if $farmyardKennels > 1 || $farmyardStables > 1 || $farmyardCages > 1>> -<br> -''Exotic Animals'' -<hr> - -<<if $farmyardKennels > 1>> - <br> - __Canines__ - <br>//Cost <<print cashFormat(20000)>> each// - <br> - <<if $animalsBought.wolves <= 0>> - <<link "Purchase wolves" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.wolves = 1, $animalsBought.canines += 1, $canines.push({ - species: "wolf", speciesPlural: "wolves", type: "canine", dickSize: "large", ballType: "wolf" - })>><</link>> - <br> - <<else>> - /*A couple of adult wolves are lounging about in their kennels.(OLD)*/ - Wolves - <<if $activeCanine.species != "wolf">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "wolf", speciesCap: "Wolf", speciesPlural: "wolves", type: "canine", dickSize: "large", ballType: "wolf"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> -<</if>> - -<<if $farmyardCages > 1>> - <br> - __Felines__ - <br>//Cost <<print cashFormat(30000)>> each// /* TODO: this number is mostly a placeholder, will need adjusting */ - <br> - <<if $animalsBought.lions <= 0>> - <<link "Purchase lions" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.lions = 1, $animalsBought.felines += 1, $felines.push({ - species: "lion", speciesPlural: "lions", type: "feline", dickSize: "large", ballType: "lion"})>><</link>> - <br> - <<else>> - /*Most of the lions are sunning themselves. (OLD)*/ - Lions - <<if $activeFeline.species != "lion">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "lion", speciesCap: "Lion", speciesPlural: "lions", type: "feline", dickSize: "large", ballType: "lion"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> -<</if>> -<</if>> diff --git a/src/facilities/farmyard/futureAnimals.tw b/src/facilities/farmyard/futureAnimals.tw deleted file mode 100644 index f4d1ab464f04368977ba10d8a05b8df03935f976..0000000000000000000000000000000000000000 --- a/src/facilities/farmyard/futureAnimals.tw +++ /dev/null @@ -1,360 +0,0 @@ -/* Putting them here because commenting them out was breaking for some reason */ - - <<if $animalsBought.germanShepherds == 0>> - <<link "Purchase German Shepherds" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.germanShepherds = 1, $animalsBought.canines += 1, $canines.push("German Shepherds")>><</link>> - <br> - <<elseif $animalsBought.germanShepherds == 1>> - German Shepherds - <<if $activeCanine.breed != "German Shepherd">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "German Shepherd", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.goldenRetrievers == 0>> - <<link "Purchase Golden Retrievers" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.goldenRetrievers = 1, $animalsBought.canines += 1, $canines.push("Golden Retrievers")>><</link>> - <br> - <<elseif $animalsBought.goldenRetrievers == 1>> - Golden Retrievers - <<if $activeCanine.breed != "Golden Retriever">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Golden Retriever", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.frenchBulldogs == 0>> - <<link "Purchase French Bulldogs" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.frenchBulldogs = 1, $animalsBought.canines += 1, $canines.push("French Bulldogs")>><</link>> - <br> - <<elseif $animalsBought.frenchBulldogs == 1>> - French Bulldogs - <<if $activeCanine.breed != "French Bulldog">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "French Bulldog", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.bulldogs == 0>> - <<link "Purchase Bulldogs" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bulldogs = 1, $animalsBought.canines += 1, $canines.push("Bulldogs")>><</link>> - <br> - <<elseif $animalsBought.bulldogs == 1>> - Bulldogs - <<if $activeCanine.breed != "Bulldog">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Bulldog", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.beagles == 0>> - <<link "Purchase Beagles" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.beagles = 1, $animalsBought.canines += 1, $canines.push("Beagles")>><</link>> - <br> - <<elseif $animalsBought.beagles == 1>> - Beagles - <<if $activeCanine.breed != "Beagle">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Beagle", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.poodles == 0>> - <<link "Purchase Poodles" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.poodles = 1, $animalsBought.canines += 1, $canines.push("Poodles")>><</link>> - <br> - <<elseif $animalsBought.poodles == 1>> - Poodles - <<if $activeCanine.breed != "Poodle">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Poodle", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.rottweilers == 0>> - <<link "Purchase Rottweilers" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.rottweilers = 1, $animalsBought.canines += 1, $canines.push("Rottweilers")>><</link>> - <br> - <<elseif $animalsBought.rottweilers == 1>> - Rottweilers - <<if $activeCanine.breed != "Rottweiler">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Rottweiler", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.yorkshireTerriers == 0>> - <<link "Purchase Yorkshire Terriers" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.yorkshireTerriers = 1, $animalsBought.canines += 1, $canines.push("Yorkshire Terriers")>><</link>> - <br> - <<elseif $animalsBought.yorkshireTerriers == 1>> - Yorkshire Terriers - <<if $activeCanine.breed != "Yorkshire Terrier">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Yorkshire Terrier", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.siberianHuskies == 0>> - <<link "Purchase Siberian Huskies" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.siberianHuskies = 1, $animalsBought.canines += 1, $canines.push("Siberian Huskies")>><</link>> - <br> - <<elseif $animalsBought.siberianHuskies == 1>> - Siberian Huskies - <<if $activeCanine.breed != "Siberian Husky">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Siberian Husky", type: "canine", dickSize: "big", ballType: "dog"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - -<<if $farmyardCages > 0>> - <br> - Cats: - <br><br> - <<if $animalsBought.siameses == 0>> - <<link "Purchase Siamese cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.siameses = 1, $animalsBought.felines += 1, $felines.push("Siamese cats")>><</link>> - <br> - <<elseif $animalsBought.siameses == 1>> - Siamese cats - <<if $activeFeline.breed != "Siamese">> - [[Set as active canine|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Siamese", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.persians == 0>> - <<link "Purchase Persian cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.persians = 1, $animalsBought.felines += 1, $felines.push("Persian cats")>><</link>> - <br> - <<elseif $animalsBought.persians == 1>> - Persian cats - <<if $activeFeline.breed != "Persian">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Persian", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.maineCoons == 0>> - <<link "Purchase Maine Coon cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.maineCoons = 1, $animalsBought.felines += 1, $felines.push("Maine Coon cats")>><</link>> - <br> - <<elseif $animalsBought.maineCoons == 1>> - Maine Coon cats - <<if $activeFeline.breed != "Maine Coon">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Maine Coon", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.ragdolls == 0>> - <<link "Purchase Ragdoll cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.ragdolls = 1, $animalsBought.felines += 1, $felines.push("Ragdoll cats")>><</link>> - <br> - <<elseif $animalsBought.ragdolls == 1>> - Ragdoll cats - <<if $activeFeline.breed != "Ragdoll">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Ragdoll", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.bengals == 0>> - <<link "Purchase Bengal cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bengals = 1, $animalsBought.felines += 1, $felines.push("Bengal cats")>><</link>> - <br> - <<elseif $animalsBought.bengals == 1>> - Bengal cats - <<if $activeFeline.breed != "Bengal">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Bengal", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.abbysinians == 0>> - <<link "Purchase Abbysinian cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.abbysinians = 1, $animalsBought.felines += 1, $felines.push("Abbysinian cats")>><</link>> - <br> - <<elseif $animalsBought.abbysinians == 1>> - Abbysinian cats - <<if $activeFeline.breed != "Abbysinian">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Abbysinian", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.birmans == 0>> - <<link "Purchase Birman cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.birmans = 1, $animalsBought.felines += 1, $felines.push("Birman cats")>><</link>> - <br> - <<elseif $animalsBought.birmans == 1>> - Birman cats - <<if $activeFeline.breed != "Birman">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Birman", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.orientalShorthairs == 0>> - <<link "Purchase Oriental Shorthair cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.orientalShorthairs = 1, $animalsBought.felines += 1, $felines.push("Oriental Shorthair cats")>><</link>> - <br> - <<elseif $animalsBought.orientalShorthairs == 1>> - Oriental Shorthair cats - <<if $activeFeline.breed != "Oriental Shorthair">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Oriental Shorthair", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.sphynxes == 0>> - <<link "Purchase Sphynx cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.sphynxes = 1, $animalsBought.felines += 1, $felines.push("Sphynx cats")>><</link>> - <br> - <<elseif $animalsBought.sphynxes == 1>> - Sphynx cats - <<if $activeFeline.breed != "Sphynx">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Sphynx", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.russianBlues == 0>> - <<link "Purchase Russian Blue cats" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.russianBlues = 1, $animalsBought.felines += 1, $felines.push("Russian Blue cats")>><</link>> - <br> - <<elseif $animalsBought.russianBlues == 1>> - Russian Blue cats - <<if $activeFeline.breed != "Russian Blue">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Russian Blue", type: "feline", dickSize: "small", ballType: "cat"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> -<</if>> - - <<if $animalsBought.foxes == 0>> - <<link "Purchase foxes" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.foxes = 1, $animalsBought.canines += 1, $canines.push("foxes")>><</link>> - <br> - <<elseif $animalsBought.foxes == 1>> - /*Red foxes play in one corner of their kennels, chasing one another.(OLD)*/ - Foxes - <<if $activeCanine.species != "fox">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "fox", speciesCap: "Fox", speciesPlural: "foxes", type: "canine", dickSize: "large", ballType: "fox"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.jackals == 0>> - <<link "Purchase jackals" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.jackals = 1, $animalsBought.canines += 1, $canines.push("jackals")>><</link>> - <br> - <<elseif $animalsBought.jackals == 1>> - /*A group of male jackals are fighting over a potential mate, causing quite a ruckus.(OLD)*/ - Jackals - <<if $activeCanine.species != "jackal">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "jackal", speciesCap: "Jackal", speciesPlural: "jackals", type: "canine", dickSize: "large", ballType: "jackal"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - <<if $animalsBought.dingos == 0>> - <<link "Purchase dingos" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.dingos = 1, $animalsBought.canines += 1, $canines.push("dingos")>><</link>> - <br> - <<elseif $animalsBought.dingos == 1>> - /*The dingos are eating their meal, growling at each other when one gets to close to another's food.(OLD)*/ - Dingos - <<if $activeCanine.species != "dingo">> - [[Set as active canine|Farmyard Animals][$activeCanine = {species: "dingo", speciesCap: "Dingo", speciesPlural: "dingos", type: "canine", dickSize: "large", ballType: "dingo"}]] - <<else>> - //Set as active canine// - <</if>> - <br> - <</if>> - - -<<if $farmyardStables > 1>> - <br> - Hooved Animals: - <br><br> - <<if $animalsBought.zebras == 0>> - <<link "Purchase zebras" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.zebras = 1, $animalsBought.hooved += 1, $hooved.push("zebras")>><</link>> - <<elseif $animalsBought.zebras == 1>> - Zebras - <<if $activeHooved.species != "zebra">> - [[Set as active hooved|Farmyard Animals][$activeHooved = {species: "zebra", speciesCap: "Zebra", speciesPlural: "zebras", type: "hooved", dickSize: "huge", ballType: "zebra"}]] - <<else>> - //Set as active hooved// - <</if>> - <</if>> - <br> -<</if>> - -<<if $animalsBought.cougars == 0>> - <<link "Purchase cougars" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.cougars = 1, $animalsBought.felines += 1, $felines.push("cougars")>><</link>> - <br> - <<elseif $animalsBought.cougars == 1>> - /*The cougars are sleeping, their lean bodies scattered around under trees. (OLD)*/ - Cougars - <<if $activeFeline.species != "cougar">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "cougar", speciesCap: "Cougar", speciesPlural: "cougars", type: "feline", dickSize: "large", ballType: "cougar"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.jaguars == 0>> - <<link "Purchase jaguars" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.jaguars = 1, $animalsBought.felines += 1, $felines.push("jaguars")>><</link>> - <br> - <<elseif $animalsBought.jaguars == 1>> - /*You can see a few jaguars laying around in the trees in their enclosure. (OLD)*/ - Jaguars - <<if $activeFeline.species != "jaguar">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "jaguar", speciesCap: "Jaguar", speciesPlural: "jaguars", type: "feline", dickSize: "large", ballType: "jaguar"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.lynx == 0>> - <<link "Purchase lynxs" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.lynx = 1, $animalsBought.felines += 1, $felines.push("lynx")>><</link>> - <br> - <<elseif $animalsBought.lynx == 1>> - /*The lynxes are playfully running around their enclosure. (OLD)*/ - Lynx - <<if $activeFeline.species != "lynx">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "lynx", speciesCap: "Lynx", speciesPlural: "lynx", type: "feline", dickSize: "large", ballType: "lynx"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.leopards == 0>> - <<link "Purchase leopards" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.leopards = 1, $animalsBought.felines += 1, $felines.push("leopards")>><</link>> - <br> - <<elseif $animalsBought.leopards == 1>> - /*The leopards are lazing about in the trees in their enclosure. (OLD)*/ - Leopards - <<if $activeFeline.species != "leopard">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "leopard", speciesCap: "Leopard", speciesPlural: "leopards", type: "feline", dickSize: "large", ballType: "leopard"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> - <<if $animalsBought.tigers == 0>> - <<link "Purchase tigers" "Farmyard Animals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.tigers = 1, $animalsBought.felines += 1, $felines.push("tigers")>><</link>> - <br> - <<elseif $animalsBought.tigers == 1>> - /*Some of the tigers are swimming, and the ones that aren't are lazing about. (OLD)*/ - Tigers - <<if $activeFeline.species != "tiger">> - [[Set as active feline|Farmyard Animals][$activeFeline = {species: "tiger", speciesCap: "Tiger", speciesPlural: "tigers", type: "feline", dickSize: "large", ballType: "tiger"}]] - <<else>> - //Set as active feline// - <</if>> - <br> - <</if>> diff --git a/src/facilities/farmyard/reports/farmyardReport.js b/src/facilities/farmyard/reports/farmyardReport.js index 7720f7bf7ea0a1136e9c522d0e51eef6afdf53f3..7d646bf9f79726cfb9e0ee169169e07ea67e87b7 100644 --- a/src/facilities/farmyard/reports/farmyardReport.js +++ b/src/facilities/farmyard/reports/farmyardReport.js @@ -252,9 +252,6 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { if (Farmer) { const farmerEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); - V.i = V.slaveIndices[Farmer.ID]; - App.Utils.setLocalPronouns(Farmer); // needed for "include"s - if (V.showEWD) { const farmerEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -352,12 +349,8 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { $(intro).append(farmhandCount(slaves.length)); for (const slave of slaves) { - V.i = V.slaveIndices[slave.ID]; // FIXME: V.i is deprecated - slave.devotion += devBonus; - App.Utils.setLocalPronouns(slave); // needed for "include"s - if (V.showEWD) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); @@ -460,7 +453,7 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { r.push(`${farmyardNameCaps}'s customer's enjoyed`); - if (V.seeBestiality && V.policies.bestialityOpenness && (V.canines || V.hooved || V.felines)) { + if (V.seeBestiality && V.policies.bestialityOpenness && (V.canine || V.hooved || V.feline)) { r.push(`<span class="green">watching farmhands fuck animals in ${V.farmyardDecoration} surroundings.</span>`); } else if (V.farmyardShows) { r.push(`<span class="green">watching farmhands put on shows in ${V.farmyardDecoration} surroundings.</span>`); diff --git a/src/facilities/incubator/incubatorInteract.js b/src/facilities/incubator/incubatorInteract.js index 73fe25a2c5b6a8a8f9f463045ed4b4b1dfe7b89a..037cdf5a6e0c05f6e3a90dc725f3b1dedecfe915 100644 --- a/src/facilities/incubator/incubatorInteract.js +++ b/src/facilities/incubator/incubatorInteract.js @@ -826,7 +826,7 @@ App.UI.incubator = function() { /* Some bigger size descriptions may be unreachable by normal game mechanics, so they are here just in case.*/ r.push(`${His} bloated form looks more like an overinflated beachball made of the overstretched skin of ${his} belly with ${his} relative tiny body attached to its side. ${He} is completely dominated by it now. The process has gone too far, so ${his} body can't maintain its form with the belly as part of abdominal cavity. Now ${his} skin, tissues and muscles have stretched enough for ${his} belly to expand outside of any physical boundaries and appear more an attachment to ${his} body, rather than part of it.`); } else if (_safeCC > 150000) { - r.push(`${His} body looks almost spherical, having been grotesquely inflated with the stimulator sacks inserted into ${his} internals. The incubator constantly maintains high pressure inside ${him}, forcing the displacement of ${his} organs and stretching skin, tissues, and muscles. Even ${his} chest forced to become a part of the top of ${his} belly, having been pushed forward from the overwhelming volume inside.`); + r.push(`${His} body looks almost spherical, having been grotesquely inflated with the stimulator sacs inserted into ${his} internals. The incubator constantly maintains high pressure inside ${him}, forcing the displacement of ${his} organs and stretching skin, tissues, and muscles. Even ${his} chest forced to become a part of the top of ${his} belly, having been pushed forward from the overwhelming volume inside.`); } else if (_safeCC > 75000) { r.push(`${His} belly has become so huge that can be easily compared with belly of a woman ready to birth quintuplets. It pulses from the pressure applied within by the incubator probes.`); } else if (_safeCC > 45000) { @@ -838,9 +838,9 @@ App.UI.incubator = function() { } else if (_safeCC > 10000) { r.push(`${His} belly has inflated to the size of late term pregnancy; its skin shines from the tension.`); } else if (_safeCC > 5000) { - r.push(`${His} belly resembles a mid term pregnancy; it pulses slightly from the expansion and contraction of expandable sacks tipping the incubator probes.`); + r.push(`${His} belly resembles a mid term pregnancy; it pulses slightly from the expansion and contraction of expandable sacs tipping the incubator probes.`); } else if (_safeCC > 1500) { - r.push(`${His} belly slightly bulges and rhythmically expands and contracts to the cycles of ${his} stimulation as the incubator inflates and deflates expandable sacks on its probes within ${his} body cavity. With the correct serums applied, this should allow it to stretch the skin, tissues, and muscles of ${his} belly to better to tolerate the displacement of internal organs caused by fetal growth.`); + r.push(`${His} belly slightly bulges and rhythmically expands and contracts to the cycles of ${his} stimulation as the incubator inflates and deflates expandable sacs on its probes within ${his} body cavity. With the correct serums applied, this should allow it to stretch the skin, tissues, and muscles of ${his} belly to better to tolerate the displacement of internal organs caused by fetal growth.`); } } App.Events.addNode(p, r, "div"); diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index 704a719f8f2aecf7cfb3b9567a8b56f337994e03..72068bf72602f708495dfae9eb1d0b32d4a44274 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -702,8 +702,6 @@ App.Facilities.Nursery.nurserySort = function nurserySort() { const slave = V.slaves[i]; const {His, his} = getPronouns(slave); - App.Utils.setLocalPronouns(slave); - if (slave.preg > 0 && !slave.broodmother && slave.pregKnown && slave.eggType === "human") { if (slave.assignment !== Job.DAIRY && V.dairyPregSetting <= 0) { const slaveID = "slave-" + slave.ID; diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js index 1c223828f429244a4a2c7109c28663516a57c740..bfc8fa414b636dc6a5cd5b0b5471df74be802cd4 100644 --- a/src/facilities/pit/pit.js +++ b/src/facilities/pit/pit.js @@ -1,136 +1,133 @@ App.Facilities.Pit.pit = function() { const frag = new DocumentFragment(); - const nameCaps = capFirstChar(V.pit.name); + + const introDiv = document.createElement("div"); + const lethalityDiv = document.createElement("div"); V.nextButton = "Back to Main"; V.nextLink = "Main"; V.returnTo = "Pit"; V.encyclopedia = "Pit"; - App.UI.DOM.appendNewElement("div", frag, intro(), "pit-intro"); - frag.appendChild(audience()); + frag.append(intro(), audience()); if (V.pit.slaveFightingBodyguard) { - App.UI.DOM.appendNewElement("div", frag, scheduled()); + frag.appendChild(scheduled()); } else { frag.append(fighters(), lethality()); - App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, {assign: "Select a slave to fight", remove: "Cancel a slave's fight", transfer: ""}), "pit-assign"); + App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, {assign: "Select a slave to fight", remove: "Cancel a slave's fight", transfer: null}), "pit-assign"); } - App.UI.DOM.appendNewElement("div", frag, rename(), "pit-rename"); - - App.UI.SlaveList.ScrollPosition.restore(); + frag.appendChild(rename()); return frag; function intro() { - const frag = new DocumentFragment(); + introDiv.classList.add("pit-intro"); - const desc = App.UI.DOM.appendNewElement("div", frag); - const link = App.UI.DOM.makeElement("div", '', "indent"); - const note = App.UI.DOM.makeElement("div", '', "note"); + const desc = App.UI.DOM.appendNewElement("div", introDiv, `${capFirstChar(V.pit.name)} is clean and ready, `); + const link = App.UI.DOM.makeElement("div", null, "indent"); + const note = App.UI.DOM.makeElement("div", `${properTitle()}, slaves assigned here can continue their usual duties.`, "note"); const count = App.Entity.facilities.pit.totalEmployeesCount; - desc.append(`${nameCaps} is clean and ready, `); - if (count > 2) { - desc.append(`with a pool of slaves assigned to fight in the next week's bout.`); + desc.append(`with a pool of slaves assigned to fight in the next week's bout. `); } else if (count === 1) { - desc.append(`but only one slave is assigned to the week's bout.`); + desc.append(`but only one slave is assigned to the week's bout. `); } else if (count > 0) { - desc.append(`with slaves assigned to the week's bout.`); + desc.append(`with slaves assigned to the week's bout. `); } else { - desc.append(`but no slaves are assigned to fight.`); + desc.append(`but no slaves are assigned to fight. `); } link.append(App.UI.DOM.passageLink(`Decommission ${V.pit.name}`, "Main", () => { V.pit = null; + V.pit.fighterIDs = []; // FIXME: fix this // @ts-ignore App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Market, "Pit", "Markets"); })); - note.append(`${properTitle()}, slaves assigned here can continue their usual duties.`); + desc.append(link, note); + introDiv.appendChild(desc); - desc.appendChild(link); - desc.appendChild(note); - - return frag; + return introDiv; } function audience() { - const mainDiv = document.createElement("div"); + const audienceDiv = document.createElement("div"); const linkSpan = document.createElement("span"); const links = []; if (V.pit.audience === "none") { - mainDiv.append(`Fights here are strictly private.`); + audienceDiv.append(`Fights here are strictly private. `); links.push( App.UI.DOM.link("Open them for free", () => { V.pit.audience = "free"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }), App.UI.DOM.link("Open them and charge admission", () => { V.pit.audience = "paid"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }) ); } else if (V.pit.audience === "free") { - mainDiv.append(`Fights here are free and open to the public.`); + audienceDiv.append(`Fights here are free and open to the public. `); links.push( App.UI.DOM.link("Close them", () => { V.pit.audience = "none"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }), App.UI.DOM.link("Charge admission", () => { V.pit.audience = "paid"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }) ); } else { - mainDiv.append(`Admission is charged to the fights here.`); + audienceDiv.append(`Admission is charged to the fights here. `); links.push( App.UI.DOM.link("Close them", () => { V.pit.audience = "none"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }), App.UI.DOM.link("Stop charging admission", () => { V.pit.audience = "free"; - App.UI.DOM.replace(mainDiv, audience); + App.UI.DOM.replace(audienceDiv, audience); }) ); } linkSpan.append(App.UI.DOM.generateLinksStrip(links)); - mainDiv.appendChild(linkSpan); + audienceDiv.appendChild(linkSpan); - return mainDiv; + return audienceDiv; } function fighters() { - const mainDiv = document.createElement("div"); + const fightersDiv = document.createElement("div"); + const animalDiv = document.createElement("div"); const linkSpan = document.createElement("span"); const links = []; - if (S.Bodyguard || V.activeCanine || V.activeHooved || V.activeFeline) { + if (S.Bodyguard || V.active.canine || V.active.hooved || V.active.feline) { if (V.pit.bodyguardFights) { - mainDiv.append(`Your bodyguard ${S.Bodyguard.slaveName} will fight a slave selected from the pool at random.`); + fightersDiv.append(`Your bodyguard ${S.Bodyguard.slaveName} will fight a slave selected from the pool at random. `); links.push(App.UI.DOM.link("Make both slots random", () => { V.pit.bodyguardFights = false; @@ -140,40 +137,49 @@ App.Facilities.Pit.pit = function() { V.pit.fighterIDs.delete(V.BodyguardID); } - App.UI.DOM.replace(mainDiv, fighters); + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); })); - // if (V.activeCanine || V.activeHooved || V.activeFeline) { - // links.push(App.UI.DOM.link("Have a slave fight an animal", () => { - // V.pit.bodyguardFights = false; - // V.pit.animal = null; + if (V.active.canine || V.active.hooved || V.active.feline) { + links.push(App.UI.DOM.link("Have a slave fight an animal", () => { + V.pit.bodyguardFights = false; + V.pit.animal = V.active.canine || V.active.hooved || V.active.feline; - // if (V.pit.fighterIDs.includes(V.BodyguardID)) { - // V.pit.fighterIDs.delete(V.BodyguardID); - // } + if (V.pit.fighterIDs.includes(V.BodyguardID)) { + V.pit.fighterIDs.delete(V.BodyguardID); + } - // App.UI.DOM.replace(mainDiv, fighters); - // })); - // } + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); + })); + } } else { if (V.pit.animal) { - mainDiv.append(`A random slave will fight an animal.`); + fightersDiv.append(`A random slave will fight an animal. `); links.push( App.UI.DOM.link("Have them fight another slave", () => { V.pit.bodyguardFights = false; V.pit.animal = null; - App.UI.DOM.replace(mainDiv, fighters); - }), + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); + })); + + if (S.Bodyguard) { App.UI.DOM.link("Have them fight your bodyguard", () => { V.pit.bodyguardFights = true; V.pit.animal = null; - App.UI.DOM.replace(mainDiv, fighters); - })); + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); + }); + } + + animalDiv.appendChild(App.Facilities.Pit.animals()); } else { - mainDiv.append(`Two fighters will be selected from the pool at random.`); + fightersDiv.append(`Two fighters will be selected from the pool at random. `); if (S.Bodyguard) { links.push( @@ -181,228 +187,229 @@ App.Facilities.Pit.pit = function() { V.pit.bodyguardFights = true; V.pit.animal = null; - App.UI.DOM.replace(mainDiv, fighters); + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); }) ); } - // if (V.activeCanine || V.activeHooved || V.activeFeline) { - // links.push( - // App.UI.DOM.link("Have a slave fight an animal", () => { - // V.pit.bodyguardFights = false; - // V.pit.animal = new FC.Facilities.Animal(); + if (V.active.canine || V.active.hooved || V.active.feline) { + links.push( + App.UI.DOM.link("Have a slave fight an animal", () => { + V.pit.bodyguardFights = false; + V.pit.animal = V.active.canine || V.active.hooved || V.active.feline; - // App.UI.DOM.replace(mainDiv, fighters); - // }) - // ); - // } + App.UI.DOM.replace(fightersDiv, fighters); + App.UI.DOM.replace(lethalityDiv, lethality); + }) + ); + } } } } else { - mainDiv.append(`Two fighters will be selected from the pool at random.`); + fightersDiv.append(`Two fighters will be selected from the pool at random. `); } linkSpan.append(App.UI.DOM.generateLinksStrip(links)); - mainDiv.append(linkSpan); + fightersDiv.append(linkSpan); + + if (V.pit.animal) { + fightersDiv.appendChild(animalDiv); + } - return mainDiv; + return fightersDiv; } function lethality() { - const mainDiv = document.createElement("div"); const linkSpan = document.createElement("span"); if (V.pit.lethal) { if (V.pit.animal) { - mainDiv.append(`The fighter will be armed with a sword and will fight to the death. `); + lethalityDiv.append(`The fighter will be armed with a sword and will fight to the death. `); linkSpan.append( App.UI.DOM.link("Nonlethal", () => { V.pit.lethal = false; - App.UI.DOM.replace(mainDiv, lethality); + App.UI.DOM.replace(lethalityDiv, lethality); }) ); } else { - mainDiv.append(`Fighters will be armed with swords, and fights will be to the death. `); + lethalityDiv.append(`Fighters will be armed with swords, and fights will be to the death. `); linkSpan.append( App.UI.DOM.link("Nonlethal", () => { V.pit.lethal = false; - App.UI.DOM.replace(mainDiv, lethality); + App.UI.DOM.replace(lethalityDiv, lethality); }) ); } } else { if (V.pit.animal) { - mainDiv.append(`The slave will be restrained and will try to avoid becoming the animal's plaything. `); + lethalityDiv.append(`The slave will be restrained and will try to avoid becoming the animal's plaything. `); linkSpan.append( App.UI.DOM.link("Lethal", () => { V.pit.lethal = true; - App.UI.DOM.replace(mainDiv, lethality); + App.UI.DOM.replace(lethalityDiv, lethality); }) ); } else { - mainDiv.append(`Fighters will use their fists and feet, and fights will be to submission. `); + lethalityDiv.append(`Fighters will use their fists and feet, and fights will be to submission. `); linkSpan.append( App.UI.DOM.link("Lethal", () => { V.pit.lethal = true; - App.UI.DOM.replace(mainDiv, lethality); + App.UI.DOM.replace(lethalityDiv, lethality); }) ); } } - mainDiv.appendChild(linkSpan); + lethalityDiv.appendChild(linkSpan); if (!V.pit.lethal && !V.pit.animal) { - mainDiv.appendChild(virginities()); + lethalityDiv.appendChild(virginities()); } - + return lethalityDiv; function virginities() { - const mainDiv = document.createElement("div"); - const boldSpan = App.UI.DOM.makeElement("span", ``, "bold"); + const virginitiesDiv = document.createElement("div"); + const boldSpan = App.UI.DOM.makeElement("span", null, "bold"); const linkSpan = document.createElement("span"); const links = []; - if (V.pit.virginities === "neither") { - boldSpan.append(`No`); - mainDiv.append(boldSpan, ` virginities of the loser will be respected.`); + if (!V.pit.animal) { + if (V.pit.virginities === "neither") { + boldSpan.append(`No`); + virginitiesDiv.append(boldSpan, ` virginities of the loser will be respected. `); - links.push( - App.UI.DOM.link("Vaginal", () => { - V.pit.virginities = "vaginal"; + links.push( + App.UI.DOM.link("Vaginal", () => { + V.pit.virginities = "vaginal"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("Anal", () => { - V.pit.virginities = "anal"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("Anal", () => { + V.pit.virginities = "anal"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("All", () => { - V.pit.virginities = "all"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("All", () => { + V.pit.virginities = "all"; - App.UI.DOM.replace(mainDiv, virginities); - }) - ); - } else if (V.pit.virginities === "vaginal") { - boldSpan.append(`Vaginal`); - mainDiv.append(boldSpan, ` virginity of the loser will be respected.`); + App.UI.DOM.replace(virginitiesDiv, virginities); + }) + ); + } else if (V.pit.virginities === "vaginal") { + boldSpan.append(`Vaginal`); + virginitiesDiv.append(boldSpan, ` virginity of the loser will be respected. `); - links.push( - App.UI.DOM.link("Neither", () => { - V.pit.virginities = "neither"; + links.push( + App.UI.DOM.link("Neither", () => { + V.pit.virginities = "neither"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("Anal", () => { - V.pit.virginities = "anal"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("Anal", () => { + V.pit.virginities = "anal"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("All", () => { - V.pit.virginities = "all"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("All", () => { + V.pit.virginities = "all"; - App.UI.DOM.replace(mainDiv, virginities); - }) - ); - } else if (V.pit.virginities === "anal") { - boldSpan.append(`Anal`); - mainDiv.append(boldSpan, ` virginity of the loser will be respected.`); + App.UI.DOM.replace(virginitiesDiv, virginities); + }) + ); + } else if (V.pit.virginities === "anal") { + boldSpan.append(`Anal`); + virginitiesDiv.append(boldSpan, ` virginity of the loser will be respected. `); - links.push( - App.UI.DOM.link("Neither", () => { - V.pit.virginities = "neither"; + links.push( + App.UI.DOM.link("Neither", () => { + V.pit.virginities = "neither"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("Vaginal", () => { - V.pit.virginities = "vaginal"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("Vaginal", () => { + V.pit.virginities = "vaginal"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("All", () => { - V.pit.virginities = "all"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("All", () => { + V.pit.virginities = "all"; - App.UI.DOM.replace(mainDiv, virginities); - }) - ); - } else { - boldSpan.append(`All`); - mainDiv.append(boldSpan, ` virginities of the loser will be respected.`); + App.UI.DOM.replace(virginitiesDiv, virginities); + }) + ); + } else { + boldSpan.append(`All`); + virginitiesDiv.append(boldSpan, ` virginities of the loser will be respected. `); - links.push( - App.UI.DOM.link("Neither", () => { - V.pit.virginities = "neither"; + links.push( + App.UI.DOM.link("Neither", () => { + V.pit.virginities = "neither"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("Vaginal", () => { - V.pit.virginities = "vaginal"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("Vaginal", () => { + V.pit.virginities = "vaginal"; - App.UI.DOM.replace(mainDiv, virginities); - }), - App.UI.DOM.link("Anal", () => { - V.pit.virginities = "anal"; + App.UI.DOM.replace(virginitiesDiv, virginities); + }), + App.UI.DOM.link("Anal", () => { + V.pit.virginities = "anal"; - App.UI.DOM.replace(mainDiv, virginities); - }) - ); + App.UI.DOM.replace(virginitiesDiv, virginities); + }) + ); + } } linkSpan.append(App.UI.DOM.generateLinksStrip(links)); - mainDiv.appendChild(linkSpan); + virginitiesDiv.appendChild(linkSpan); - return mainDiv; + return virginitiesDiv; } - - return mainDiv; } function scheduled() { - const mainDiv = document.createElement("div"); + const scheduledDiv = document.createElement("div"); const linkSpan = document.createElement("span"); - mainDiv.append(`You have scheduled one of your slaves to fight to the death this week. `, linkSpan); + scheduledDiv.append(`You have scheduled ${getSlave(V.pit.slaveFightingBodyguard).slaveName} to fight your bodyguard to the death this week. `, linkSpan); linkSpan.append(App.UI.DOM.link("Cancel it", () => { V.pit.slaveFightingBodyguard = null; - App.UI.DOM.replace(mainDiv, scheduled); + App.UI.DOM.replace(scheduledDiv, scheduled); })); - mainDiv.appendChild(linkSpan); + scheduledDiv.appendChild(linkSpan); - return mainDiv; + return scheduledDiv; } function rename() { - const frag = new DocumentFragment(); - - const renameDiv = App.UI.DOM.makeElement("div", '', "pit-rename"); - const renameNote = App.UI.DOM.makeElement("span", '', "note"); - - renameDiv.append(`Rename ${V.pit.name}: `); - renameNote.append(` Use a noun or similar short phrase`); + const renameDiv = App.UI.DOM.makeElement("div", `Rename ${V.pit.name}: `, ["pit-rename"]); + const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]); renameDiv.append(App.UI.DOM.makeTextBox(V.pit.name, newName => { V.pit.name = newName; + + App.UI.DOM.replace(renameDiv, rename); + App.UI.DOM.replace(introDiv, intro); })); renameDiv.append(renameNote); - frag.append(renameDiv); - - return frag; + return renameDiv; } }; diff --git a/src/facilities/pit/pit.tw b/src/facilities/pit/pit.tw index b85be64c08069d22452909ce0e6495d6a4115bb9..e0ebcece67db665fb8dac13416878ac687a4265e 100644 --- a/src/facilities/pit/pit.tw +++ b/src/facilities/pit/pit.tw @@ -1,237 +1,3 @@ :: Pit [nobr jump-to-safe jump-from-safe] <<includeDOM App.Facilities.Pit.pit()>> - -/* - <<if $activeCanine != 0 || $activeHooved != 0 || $activeFeline != 0>> - - <<switch $activeCanine.breed>> - <<case "Beagle" "French Bulldog" "Poodle" "Yorkshire Terrier">> - <<set _animalEligible = 0>> - <<default>> - <<set _animalEligible = 1>> - <</switch>> - - <<if $pit.animalFights == 1>> - <br> - <<if $pit.lethal == 1>> - <<if $pit.animalType == $activeCanine.type>> - <<if $activeCanine.species != "dog">> - Your slave will fight a ''$activeCanine.species''. - $activeCanine.speciesCap - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <</if>> - <<else>> - <<if _animalEligible == 1>> - Your slave will fight a ''$activeCanine.breed''. - $activeCanine.breed - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <</if>> - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <</if>> - <</if>> - <</if>> - <<elseif $pit.animalType == $activeHooved.type>> - Your slave will fight a ''$activeHooved.species''. - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] | - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] | - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// | - <</if>> - <</if>> - <</if>> - $activeHooved.speciesCap - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <</if>> - <<elseif $pit.animalType == $activeFeline.type>> - <<if $activeFeline.species != "cat">> - Your slave will fight a ''$activeFeline.species''. - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// - <</if>> - <</if>> - <</if>> - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]] | <</if>> - <<if $activeFeline.species != "cat">> - $activeFeline.speciesCap - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <<else>> - Select an animal for your slave to fight. - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// - <</if>> - <</if>> - <</if>> - <<if (_CL > 0 && _HL > 0) || (_CL > 0 && _FL > 0) || (_HL > 0 && _FL > 0)>> | <</if>> - <<if _HL > 0>> - [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]] - <</if>> - <<if (_HL > 0 && _FL > 0)>> | <</if>> - <<if _FL > 0>> - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small for your slave to fight// - <</if>> - <</if>> - - <</if>> - <<elseif $pit.lethal == 0>> - <<if $pit.animalType == $activeCanine.type>> - <<if $activeCanine.species != "dog">> - Your slave will try to avoid being used by a ''$activeCanine.species''. - $activeCanine.speciesCap - <<else>> - <<if _animalEligible == 1>> - Your slave will try to avoid being used by a ''$activeCanine.breed''. - $activeCanine.breed - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small to use your slave// - <</if>> - <</if>> - <<else>> - //<<print $activeCanine.breed>>s are too small to use your slave// - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small to use your slave// - <</if>> - <</if>> - <</if>> - <</if>> - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]]<</if>> - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small to use your slave// - <</if>> - <</if>> - <<elseif $pit.animalType == $activeHooved.type>> - Your slave will try to avoid being used by a ''$activeHooved.species''. - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] | - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] | - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// | - <</if>> - <</if>> - <</if>> - $activeHooved.speciesCap - <<if _FL > 0>> | - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small to use your slave// - <</if>> - <</if>> - <<elseif $pit.animalType == $activeFeline.type>> - <<if $activeFeline.species != "cat">> - Your slave will try to avoid being used by a ''$activeFeline.species''. - <<else>> - //House cats are too small to use your slave// - <</if>> - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// - <</if>> - <</if>> - <</if>> - <<if _HL > 0>> | [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]] | <</if>> - <<if $activeFeline.species != "cat">> - $activeFeline.speciesCap - <<else>> - //House cats are too small to use your slave// - <</if>> - <<else>> - Select an animal for your slave to try to avoid. - <<if _CL > 0>> - <<if $activeCanine.species != "dog">> - [["" + $activeCanine.speciesCap + ""|Pit][$pit.animalType = "canine"]] - <<else>> - <<if _animalEligible == 1>> - [["" + $activeCanine.breed + ""|Pit][$pit.animalType = "canine"]] - <<else>> - //<<print $activeCanine.breed>>s are too small for your slave to fight// - <</if>> - <</if>> - <</if>> - <<if (_CL > 0 && _HL > 0) || (_CL > 0 && _FL > 0) || (_HL > 0 && _FL > 0)>> | <</if>> - <<if _HL > 0>> - [["" + $activeHooved.speciesCap + ""|Pit][$pit.animalType = "hooved"]] - <</if>> - <<if (_HL > 0 && _FL > 0)>> | <</if>> - <<if _FL > 0>> - <<if $activeFeline.species != "cat">> - [["" + $activeFeline.speciesCap + ""|Pit][$pit.animalType = "feline"]] - <<else>> - //House cats are too small to use your slave// - <</if>> - <</if>> - <</if>> - <</if>> - <<else>> - <<set $pit.animalType = 0>> - <</if>> - <</if>> -*/ diff --git a/src/facilities/pit/pitAnimals.js b/src/facilities/pit/pitAnimals.js new file mode 100644 index 0000000000000000000000000000000000000000..f815bcde87ed840f5192797a66a7e566839205b9 --- /dev/null +++ b/src/facilities/pit/pitAnimals.js @@ -0,0 +1,107 @@ +App.Facilities.Pit.animals = function() { + const frag = new DocumentFragment(); + + frag.append(animalSelect()); + + return frag; + + + + // MARK: Main Function + + function animalSelect() { + const animalSelectDiv = document.createElement("div"); + + const animalLinks = []; + const an = V.pit.animal.articleAn; + + animalSelectDiv.append(`Your slave will fight ${an} `, App.UI.DOM.makeElement("span", V.pit.animal.name, ["bold"]), `. `); + + if (V.active.canine) { + animalLinks.push(canineSelect(animalSelectDiv)); + } + + if (V.active.hooved) { + animalLinks.push(hoovedSelect(animalSelectDiv)); + } + + if (V.active.feline) { + animalLinks.push(felineSelect(animalSelectDiv)); + } + + const links = App.UI.DOM.generateLinksStrip(animalLinks); + + animalSelectDiv.append(links); + + return animalSelectDiv; + } + + + + // MARK: Canine + + function canineSelect(div) { + let animalEligible = true; + + switch (V.active.canine.name) { + case "beagle": + case "French bulldog": + case "poodle": + case "Yorkshire terrier": + animalEligible = false; + break; + } + + if (V.pit.animal.name === V.active.canine.name) { + return App.UI.DOM.disabledLink(capFirstChar(V.active.canine.name), [`Already selected.`]); + } + + if (animalEligible) { + return App.UI.DOM.link(capFirstChar(V.active.canine.name), () => { + V.pit.animal = V.active.canine; + + App.UI.DOM.replace(div, animalSelect); + }); + } else { + return App.UI.DOM.disabledLink(capFirstChar(V.active.canine.name), [`${V.active.canine.name}s are too small for a proper fight.`]); + } + } + + + + // MARK: Hooved + + function hoovedSelect(div) { + if (V.pit.animal.name === V.active.hooved.name) { + return App.UI.DOM.disabledLink(capFirstChar(V.active.hooved.name), [`Already selected.`]); + } + + return App.UI.DOM.link(capFirstChar(V.active.hooved.name), () => { + V.pit.animal = V.active.hooved; + + App.UI.DOM.replace(div, animalSelect); + }); + } + + + + // MARK: Felines + + function felineSelect(div) { + const cat = "cat"; + + if (V.pit.animal.name === V.active.feline.name) { + return App.UI.DOM.disabledLink(capFirstChar(V.active.feline.name), [`Already selected.`]); + } + + if (V.active.feline.species === cat) { + return App.UI.DOM.disabledLink(capFirstChar(V.active.feline.name), [`${V.active.feline.name}s are too small for a proper fight.`]); + } else { + return App.UI.DOM.link(capFirstChar(V.active.feline.name), () => { + V.pit.animal = V.active.feline; + + App.UI.DOM.replace(div, animalSelect); + }); + } + } +}; diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js index 7a93021fc31a8ec85a63a775fe4793601a291053..e265483613cdf5f3ade5447aeab1663551ebd113 100644 --- a/src/gui/quicklinks.js +++ b/src/gui/quicklinks.js @@ -114,6 +114,7 @@ App.UI.quickMenu = (function() { "Servants' Quarters": () => !V.servantsQuarters, Spa: () => !V.spa, "The Black Market": () => V.rep < 10000, + "weaponsManufacturing": () => true, }); // show different names than the actual passage name, can be a function diff --git a/src/interaction/killSlave.js b/src/interaction/killSlave.js index a3e1c9a02963809001cd63722e1f997b604898b9..27b4644cc7c7fe4010cea37238ada264d668b725 100644 --- a/src/interaction/killSlave.js +++ b/src/interaction/killSlave.js @@ -4,7 +4,7 @@ App.UI.SlaveInteract.killSlave = function(slave) { // MARK: Declarations - const frag = new DocumentFragment; + const frag = new DocumentFragment(); const {He, His, he, him, his, daughter, himself} = getPronouns(slave); const FS = { @@ -138,26 +138,31 @@ App.UI.SlaveInteract.killSlave = function(slave) { }), ); + if (V.pit.slaveFightingBodyguard) { + disableReasons.push(`You already have a slave fighting your bodyguard this week.`); + } + if (slave.fuckdoll) { - disableReasons.push(`Fuckdolls cannot properly fight`); + disableReasons.push(`Fuckdolls cannot properly fight.`); } if (slave.fetish === "mindbroken") { - disableReasons.push(`Mindbroken slaves cannot properly fight`); + disableReasons.push(`Mindbroken slaves cannot properly fight.`); } if (!S.Bodyguard) { - disableReasons.push(`You must have a bodyguard for ${slave.slaveName} to fight`); + disableReasons.push(`You must have a bodyguard for ${slave.slaveName} to fight.`); } if (!V.pit) { - disableReasons.push(`You must first build a pit for combat`); + disableReasons.push(`You must first build a pit for combat.`); } else { if (!V.pit.lethal) { - disableReasons.push(`You must allow lethal fights in ${V.pit.name}`); + disableReasons.push(`You must allow lethal fights in ${V.pit.name}.`); } } + if (disableReasons) { links.push(App.UI.DOM.disabledLink(combatLinkText, disableReasons)); } else { @@ -222,6 +227,7 @@ App.UI.SlaveInteract.killSlave = function(slave) { } V.pit.slaveFightingBodyguard = slave.ID; + V.pit.lethal = true; V.pit.animal = null; return combatDiv; diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 27edf82a9bd197324e8a1234e3859dc4da8f3f7b..512c0f0950ba6da3dfea24604f229c5314722932 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -5130,7 +5130,7 @@ globalThis.walkPast = (function() { t += `${His} huge belly lewdly stretches ${his} bodysuit.`; break; case "a tight Imperial bodysuit": - t += `${His} cybernetic bodysuit is lewdly stretched out by ${his} huges belly.`; + t += `${His} cybernetic bodysuit is lewdly stretched out by ${his} huge belly.`; break; case "a kimono": t += `${His} kimono demurely covers the sides of ${his} huge belly.`; @@ -5492,7 +5492,7 @@ globalThis.walkPast = (function() { t += `${His} taut armor shows every jiggle in ${his} big gut as ${he} moves.`; break; case "Imperial Plate": - t += `${His} ultra-heavy armor isn't quite massive enough to hige the jiggle of ${his} big gut.`; + t += `${His} ultra-heavy armor isn't quite massive enough to hide the jiggle of ${his} big gut.`; break; case "a mounty outfit": t += `The buttons on ${his} staining jacket struggle to hold back ${his} big jiggling gut.`; @@ -5918,7 +5918,7 @@ globalThis.walkPast = (function() { t += `${His} taut armor shows every jiggle in ${his} fat, jiggling gut as ${he} moves.`; break; case "Imperial Plate": - t += `${His} ultra-heavy armor isn't quite massive enough to hige the jiggle of ${his} big gut.`; + t += `${His} ultra-heavy armor isn't quite massive enough to hide the jiggle of ${his} big gut.`; break; case "a mounty outfit": t += `The buttons on ${his} staining jacket struggle to hold back ${his} fat, jiggling gut.`; @@ -9298,6 +9298,8 @@ globalThis.walkPast = (function() { } } + t += ` `; + return t; } diff --git a/src/interaction/siFinancial.js b/src/interaction/siFinancial.js index b6f19c6efa20221677a7bddcd16f83f29bcd4839..ab933946cde9fa6e5a0b92bd8ff733d6481847b3 100644 --- a/src/interaction/siFinancial.js +++ b/src/interaction/siFinancial.js @@ -11,7 +11,7 @@ App.UI.SlaveInteract.financial = function(slave) { slave.porn.spending = Math.clamp(Math.ceil(slave.porn.spending / 1000) * 1000, 0, 5000); if (slave.porn.prestige === 3) { - App.UI.DOM.appendNewElement("div", el, `${He} is so prestigious in the realm of ${slave.porn.fameType} porn that ${his} fame is self-sustaining.`, "note") + App.UI.DOM.appendNewElement("div", el, `${He} is so prestigious in the realm of ${slave.porn.fameType} porn that ${his} fame is self-sustaining.`, "note"); } else if (slave.porn.feed === 0) { r = []; r.push(`The media hub is not releasing highlights of ${his} sex life.`); diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index 699bfa1bf39afc1c4baf91bc2658dd1292e4b254..bbb807339aeabe3da5bc2bb9d6696368473db564 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -463,14 +463,14 @@ App.UI.SlaveInteract.work = function(slave) { sexOptions.push({text: `Have another slave ride ${his} clit-dick`, scene: `FSlaveSlaveDick`}); } if (V.seeBestiality) { - if (V.farmyardKennels > 0 && V.activeCanine) { - sexOptions.push({text: `Have a ${V.activeCanine.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "canine"}}); + if (V.farmyardKennels > 0 && V.active.canine) { + sexOptions.push({text: `Have a ${V.active.canine.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "canine"}}); } - if (V.farmyardStables > 0 && V.activeHooved) { - sexOptions.push({text: `Let a ${V.activeHooved.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "hooved"}}); + if (V.farmyardStables > 0 && V.active.hooved) { + sexOptions.push({text: `Let a ${V.active.hooved.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "hooved"}}); } - if (V.farmyardCages > 0 && V.activeFeline) { - sexOptions.push({text: `Have a ${V.activeFeline.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "feline"}}); + if (V.farmyardCages > 0 && V.active.feline) { + sexOptions.push({text: `Have a ${V.active.feline.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "feline"}}); } } sexOptions.push({text: `Abuse ${him}`, scene: `FAbuse`}); diff --git a/src/js/SetBellySize.js b/src/js/SetBellySize.js index 93485c47a428acfad0e78d367deb1f040201abe7..0e2218877886dc4777bd8144e39ef5deed4c1e49 100644 --- a/src/js/SetBellySize.js +++ b/src/js/SetBellySize.js @@ -1,5 +1,5 @@ /** - * @param {App.Entity.SlaveState} slave + * @param {App.Entity.SlaveState | App.Entity.PlayerState} slave */ globalThis.SetBellySize = function(slave) { WombNormalizePreg(slave); /* now with support for legacy code that advances pregnancy by setting .preg++ */ diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 8a34958763da290a0ab2a73110b8ec0a6bd3e942..9bf380863a1e3f51be99fd54840e2279666edded 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -537,7 +537,7 @@ App.Entity.SlaveState = class SlaveState { this.rivalry = 0; /** target of rival (ID) */ this.rivalryTarget = 0; - /** slave will serve subTarget (ID) */ + /** slave will serve subTarget (ID - 0 is all slaves, -1 is stud) */ this.subTarget = 0; /** ID of father */ this.father = 0; diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 5764907752a870d7ef55d19af92fe9b64c94b477..843314ad8e0b45e223841d5e9ea7979e93a3a6c5 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -1404,10 +1404,14 @@ globalThis.faceIncrease = function(slave, amount) { }; /** - * @param {App.Entity.SlaveState} slave + * @param {App.Entity.SlaveState|App.Entity.Animal} slave * @returns {number} */ globalThis.deadliness = function(slave) { + if (slave instanceof App.Entity.Animal || slave.hasOwnProperty('species')) { // FIXME: temporary workaround + return slave.deadliness; + } + let deadliness = 2; if (slave.skill.combat > 0) { diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js index b3d157d4aeffb26acb682c3981a1c1b1635708b4..212e9128d9acc433718dac356a44ba3cd97b16cf 100644 --- a/src/js/birth/birth.js +++ b/src/js/birth/birth.js @@ -46,6 +46,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) He, His, he, his, him, himself, wife, girl } = getPronouns(slave); + const hands = (hasBothArms(slave)) ? "hands" : "hand"; if (V.seeImages && V.seeReportImages) { App.UI.DOM.appendNewElement("div", el, App.Art.SlaveArtElement(slave, 2), ["imageRef", "medImg"]); } @@ -2196,13 +2197,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} is helped back to ${his} bed and stripped before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -2226,13 +2221,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} returns to ${his} bed and strips before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -3866,13 +3855,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} is helped back to ${his} bed and stripped before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -3896,13 +3879,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} returns to ${his} bed and strips before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -3930,13 +3907,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} is helped back to ${his} bed and stripped before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -3982,13 +3953,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (random(1, 20) > suddenBirth) { r.push(`${He} returns to ${his} bed and strips before slipping into it. Instinctively, ${he} begins to push out ${firstText} baby. ${His} child is promptly taken and ${he} is encouraged to keep resting.`); if (hasAnyArms(slave)) { - r.push(`${He} runs ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`across the still huge dome of ${his} middle; to`); + r.push(`${He} runs ${his} ${hands} across the still huge dome of ${his} middle; to`); } else { r.push(`To`); } @@ -4880,8 +4845,6 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) const el = document.createElement("p"); let He2, he2, his2; const r = []; - let animals = []; - let roll; const HGL = App.Entity.facilities.headGirlSuite.hostedSlaves; const babies = slave.pregType > 1 ? `babies` : `baby`; const children = slave.pregType > 1 ? `children` : `child`; @@ -4949,6 +4912,21 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) } } } else { + /** @type {App.Entity.Animal[]} */ + const animals = []; + + if (V.canine.length > 0) { + animals.push(V.canine.random()); + } + if (V.hooved.length > 0) { + animals.push(V.hooved.random()); + } + if (V.feline.length > 0) { + animals.push(V.feline.random()); + } + + const animal = animals.random(); + switch (slave.assignment) { case Job.REST: if (!canWalk(slave)) { @@ -5074,24 +5052,9 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) break; case Job.FARMYARD: - animals = []; - roll; - if (V.canines.length > 0) { - roll = random(0, V.canines.length); - animals.push(V.canines[roll]); - } - if (V.hooved.length > 0) { - roll = random(0, V.hooved.length); - animals.push(V.hooved[roll]); - } - if (V.canines.length > 0) { - roll = random(0, V.canines.length); - animals.push(V.canines[roll]); - } if (slave.fetish === "mindbroken") { if (V.farmyardShows && V.seeBestiality && animals.length > 0) { - roll = random(0, animals.length); - r.push(`${He} shows no interest in ${his} coming birth as ${he} continues being rutted by a ${animals[roll].species}, so`); + r.push(`${He} shows no interest in ${his} coming birth as ${he} continues being rutted by ${`${animal.articleAn} ${animal.name}` || `an animal`}, so`); if (S.Farmer) { r.push(S.Farmer.slaveName); } else { @@ -5114,14 +5077,13 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) r.push(`is at ${his} side in an instant, pulling ${him} to ${his} feet and into a birthing stall. ${He} also shows almost no reaction when ${his} ${children} ${(slave.pregType <= 1) ? `begin` : `begins`} to come out, or when ${he} is subsequently hosed off before being led back to ${V.farmyardName}.`); } } else { - if (V.farmyardShows && V.seeBestiality) { - roll = random(0, animals.length); + if (V.farmyardShows && V.seeBestiality && animals.length > 0) { if (S.Farmer) { r.push(S.Farmer.slaveName); } else { r.push(`Another slave`); } - r.push(`pulls the ${animals[roll].species} off of ${him} after ${he} begins to feel contractions coming. ${He} begins to give birth where ${he} is${(V.farmyardRestraints) ? `, restraints still on,` : ``} and gives ${his} viewers a different kind of show than the kind they were expecting. The crowd is appreciative, and after ${he} has finished, a slave takes ${his} ${children} from ${him} and leads ${him} back to ${his} room to shower and rest before ${he} is expected to return to ${his} shows.`); + r.push(`pulls the ${animal.species || `animal`} off of ${him} after ${he} begins to feel contractions coming. ${He} begins to give birth where ${he} is${(V.farmyardRestraints) ? `, restraints still on,` : ``} and gives ${his} viewers a different kind of show than the kind they were expecting. The crowd is appreciative, and after ${he} has finished, a slave takes ${his} ${children} from ${him} and leads ${him} back to ${his} room to shower and rest before ${he} is expected to return to ${his} shows.`); humiliation = 1; } else { if (!canWalk(slave)) { @@ -5129,7 +5091,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) } else { r.push(`${He} returns to ${his} bed and strips before slipping into it.`); } - r.push(`${He} makes ${himself} comfortable and begins working on birthing ${his} ${babies}. ${His} ${childrenAre} promptly taken and ${he} rests awhile before returning to ${V.farmyardName} to continue ${either("loading hay bales", "milking cows", "pulling weeds")}.`); + r.push(`${He} makes ${himself} comfortable and begins working on birthing ${his} ${babies}. ${His} ${childrenAre} promptly taken and ${he} rests awhile before returning to ${V.farmyardName} to continue ${either(["loading hay bales", "milking cows", "pulling weeds"])}.`); } } break; diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js index 32c14eda04df65e2079520f2083ba66aa2bb653c..e96505c2a2fcc7e35d2a594dbb24b6f2ade510fa 100644 --- a/src/js/futureSocietyJS.js +++ b/src/js/futureSocietyJS.js @@ -58,7 +58,7 @@ globalThis.FutureSocieties = (function() { [ "FSPetiteAdmiration", "FSStatuesqueGlorification"] ]; - /** @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj}} */ + /** @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj}>} */ const DisplayName = { FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist"}, FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist"}, diff --git a/src/js/ibcJS.js b/src/js/ibcJS.js index 654765c6b8e240538b43e58de1a9dfcce7d93916..ea09c7c542d8648881007e4d03abdc5d425f61fb 100644 --- a/src/js/ibcJS.js +++ b/src/js/ibcJS.js @@ -20,7 +20,12 @@ globalThis.ibc = (() => { /** The player's old master is a known parent, but we don't normally have a slavelike object * for him. We use this one instead, wherever necessary. * @type {IBCRelative} */ - const oldMaster = {ID: -3, mother: 0, father: 0, inbreedingCoeff: 0}; + const oldMaster = { + ID: -3, + mother: 0, + father: 0, + inbreedingCoeff: 0 + }; /** Create a node for the given ID * @param {number} id @@ -38,9 +43,10 @@ globalThis.ibc = (() => { // Determine the length of the shared prefix between the two NodeCode parameters let prefix_len = (nca, ncb) => { let i = 0; - for (i=0; i<Math.min(nca.length, ncb.length); i++) { - if (nca[i] !== ncb[i]) + for (i = 0; i < Math.min(nca.length, ncb.length); i++) { + if (nca[i] !== ncb[i]) { break; + } } return i; }; @@ -53,8 +59,9 @@ globalThis.ibc = (() => { let match = false; b.nodecodes.forEach(ncb => { let l = prefix_len(nca, ncb); - if (l === 0 && match) + if (l === 0 && match) { return; + } if (l > 0) { match = true; @@ -79,10 +86,12 @@ globalThis.ibc = (() => { } let ret = null; - if (n.mother !== null) + if (n.mother !== null) { ret = find_nc(nc, n.mother); - if (n.father !== null && ret === null) + } + if (n.father !== null && ret === null) { ret = find_nc(nc, n.father); + } return ret; }; @@ -100,15 +109,17 @@ globalThis.ibc = (() => { ret.nodecodes.forEach(nc => { let i = pfx_s.indexOf(nc.join(';')); - if (i === -1) + if (i === -1) { return; + } pfx.pop(i); pfx_s.pop(i); }); - if (anc.findIndex(s => (s[0] == ret)) === -1) + if (anc.findIndex(s => (s[0] == ret)) === -1) { anc.push([ret, p]); + } } return anc; @@ -137,11 +148,11 @@ globalThis.ibc = (() => { let kinship = (mother, father) => { let _coeff = 0; - if (!mother || !father) + if (!mother || !father) { _coeff = 0; - else if (mother === father) + } else if (mother === father) { _coeff = 0.5 * (1 + coeff(mother)); - else { + } else { let cf = 0; let cmn = common(mother, father); @@ -155,14 +166,16 @@ globalThis.ibc = (() => { cmn.forEach(el2 => { let co = el2[0]; - if (co == c) + if (co == c) { return; + } let m_pp = []; let f_pp = []; co.nodecodes.forEach(nc => { - if (nc.slice(0, p.length).join(';') != p_s) + if (nc.slice(0, p.length).join(';') != p_s) { return; + } m_pp = m_pp.concat(mps(mother, nc)); f_pp = f_pp.concat(mps(father, nc)); @@ -172,8 +185,9 @@ globalThis.ibc = (() => { f_pp.forEach(fp => { let mf_s = [mp.join(';'), fp.join(';')].join(','); let i = paths_s.indexOf(mf_s); - if (i === -1) + if (i === -1) { return; + } paths_s.pop(i); paths.pop(i); }); @@ -182,7 +196,7 @@ globalThis.ibc = (() => { paths.forEach(p => { let pfx = prefix_len(p[0], p[1]); - cf += 0.5**(p[0].length + p[1].length+1 - 2*pfx) * (1 + coeff(c)); + cf += 0.5 ** (p[0].length + p[1].length + 1 - 2 * pfx) * (1 + coeff(c)); }); }); @@ -194,8 +208,9 @@ globalThis.ibc = (() => { // Determine the coefficient of inbreeding of a node `n` let coeff = n => { - if (n._coeff === null) + if (n._coeff === null) { n._coeff = kinship(n.mother, n.father); + } return n._coeff; }; @@ -230,8 +245,9 @@ globalThis.ibc = (() => { let seen = []; let curid = 0; Object.values(nodes).forEach(n => { - if (n.mother !== null || n.father !== null) + if (n.mother !== null || n.father !== null) { return; + } n.nodecodes.push([curid]); curid += 1; seen.push(n.id); @@ -241,18 +257,20 @@ globalThis.ibc = (() => { let oldSeenLength = -1; while (seen.length !== total) { oldSeenLength = seen.length; - Object.keys(nodes).forEach(s=> { + Object.keys(nodes).forEach(s => { let n = nodes[s]; - if (seen.includes(+s)) // We've already done this + if (seen.includes(+s)) { // We've already done this return; - else if ((n.mother !== null && n.mother.nodecodes.length === 0) || (n.father !== null && n.father.nodecodes.length === 0)) // Too soon, we haven't done its parents + } else if ((n.mother !== null && n.mother.nodecodes.length === 0) || (n.father !== null && n.father.nodecodes.length === 0)) { // Too soon, we haven't done its parents return; + } seen.push(n.id); // Compute the NodeCodes from its parents [n.mother, n.father].forEach((a, i) => { - if (a === null || (n.mother === n.father && i === 1)) // Ignore missing parents/repeated + if (a === null || (n.mother === n.father && i === 1)) { // Ignore missing parents/repeated return; + } a.nodecodes.forEach(nc => { // Copy the NodeCode, push the child number, then add it @@ -270,7 +288,7 @@ globalThis.ibc = (() => { // dump all the nodes participating in or descended from the cycle and let the player figure it out if (oldSeenLength === seen.length) { const badSlaveIDs = Object.keys(nodes).filter(s => !seen.includes(+s)).map(k => nodes[k].id); - throw(`Inbreeding calculation: heritance cycle detected. Check slave IDs: ${badSlaveIDs}`); + throw (`Inbreeding calculation: heritance cycle detected. Check slave IDs: ${badSlaveIDs}`); } } @@ -285,7 +303,7 @@ globalThis.ibc = (() => { * @param {boolean} [ignore_coeffs=false] * @returns {Object.<number, IBCNode>|{}} */ - let nodes_slaves = (slaves, ignore_coeffs=false) => { + let nodes_slaves = (slaves, ignore_coeffs = false) => { let nodes = {}; /** Recursively create the nodes we need, moving upwards from the given slave @@ -346,7 +364,7 @@ globalThis.ibc = (() => { * @param {boolean} [ignore_coeffs=false] * @returns {Object.<number, number>} */ - let coeff_slaves = (slaves, ignore_coeffs=false) => { + let coeff_slaves = (slaves, ignore_coeffs = false) => { /** @type {Object.<number, number>} */ let ret = {}; if (!ignore_coeffs) { @@ -379,7 +397,7 @@ globalThis.ibc = (() => { * @param {boolean} [ignore_coeffs=false] * @returns {number} */ - let kinship_slaves = (a, b, ignore_coeffs=false) => { + let kinship_slaves = (a, b, ignore_coeffs = false) => { if (!a || !b) { return 0; } @@ -392,13 +410,15 @@ globalThis.ibc = (() => { * @param {boolean} [ignore_coeffs=false] * @returns {number} */ - let coeff_slave = (slave, ignore_coeffs=false) => { - if (!ignore_coeffs && "inbreedingCoeff" in slave && slave.inbreedingCoeff !== -1) + let coeff_slave = (slave, ignore_coeffs = false) => { + if (!ignore_coeffs && "inbreedingCoeff" in slave && slave.inbreedingCoeff !== -1) { return slave.inbreedingCoeff; + } let gp = find_gp(slave.ID); - if (!ignore_coeffs && gp !== null && "inbreedingCoeff" in gp && gp.inbreedingCoeff !== -1) + if (!ignore_coeffs && gp !== null && "inbreedingCoeff" in gp && gp.inbreedingCoeff !== -1) { return gp.inbreedingCoeff; + } return coeff_slaves([slave], ignore_coeffs)[slave.ID]; }; @@ -410,10 +430,10 @@ globalThis.ibc = (() => { * @param {boolean} [ignore_coeffs=false] * @returns {Object.<number, number>} */ - let kinship_one_many = (a, others, ignore_coeffs=false) => { + let kinship_one_many = (a, others, ignore_coeffs = false) => { let nodes = nodes_slaves(others.concat([a]), ignore_coeffs); - let ks = {0: 0}; + let ks = { 0: 0 }; others.forEach(s => { ks[s.ID] = kinship(nodes[a.ID], nodes[s.ID]); }); @@ -433,12 +453,15 @@ globalThis.ibc = (() => { // occurrences of the COI for the affected slaves /** @type {IBCRelative[]} */ let all_slave_like = V.slaves.concat(V.genePool).concat(V.cribs).concat(V.tanks).concat(Object.values(V.missingTable)); - if (V.boomerangSlave !== 0) + if (V.boomerangSlave !== 0) { all_slave_like.push(V.boomerangSlave); - if (V.traitor !== 0) + } + if (V.traitor !== 0) { all_slave_like.push(V.traitor); - if (V.activeSlave !== 0) + } + if (V.activeSlave !== 0) { all_slave_like.push(V.activeSlave); + } all_slave_like.push(V.PC); // Add a fake entry for the PC's old master all_slave_like.push(oldMaster); @@ -457,10 +480,12 @@ globalThis.ibc = (() => { // Add fetuses all_fetuses.filter(f => (f.father === id || f.mother === id)).forEach(f => { // We may have to manually add the parents later - if (specificCharacterID(f.father)) + if (specificCharacterID(f.father)) { cur_fetus_parents.add(f.father); - if (specificCharacterID(f.mother)) + } + if (specificCharacterID(f.mother)) { cur_fetus_parents.add(f.mother); + } cur_fetuses.add(f); }); @@ -509,8 +534,9 @@ globalThis.ibc = (() => { // Use a string of the form "parent;parent" to store the cache value; since kinship is // commutative, the minimum parent ID will be first let kinship_str = Math.min(f.mother, f.father) + ';' + Math.max(f.mother, f.father); - if (!kinship_cache.has(kinship_str)) + if (!kinship_cache.has(kinship_str)) { kinship_cache.set(kinship_str, kinship(nodes[f.mother], nodes[f.father])); + } f.inbreedingCoeff = kinship_cache.get(kinship_str); }); diff --git a/src/js/pregJS.js b/src/js/pregJS.js index f49081b8a30702e4bdaf8cd76b999d850386f372..37a43d9378fde86db687d47cf19c4c072cbe118f 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -581,7 +581,7 @@ globalThis.getBaseBoobs = function(slave) { /** * Terminate a pregnancy without birth (i.e. miscarriage/abortion), while automatically applying the correct postpartum length - * @param {App.Entity.SlaveState} slave + * @param {App.Entity.SlaveState | App.Entity.PlayerState} slave */ globalThis.TerminatePregnancy = function(slave) { if (slave.bellyPreg > 1500) { diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js index 19d28e8a3a03c84a18f2399d816ae3ef90055870..b0b2ba35957b642d2450482f83ab0c80b98a5358 100644 --- a/src/js/sexActsJS.js +++ b/src/js/sexActsJS.js @@ -482,9 +482,9 @@ globalThis.actX = function(slave, act, count = 1) { * Sex is between two. This is a handy wrapper for actX that emphasizes that. * @param {App.Entity.SlaveState} slave1 always a slave * @param {string} act1 oral, anal, etc - * @param {FC.HumanState | "public"} slave2 slave or PC or "public" + * @param {FC.HumanState | "public" | "slaves"} slave2 slave or PC or "public" * @param {string} act2 oral, anal, etc - * @param {number} count + * @param {number} [count=1] */ globalThis.seX = function(slave1, act1, slave2, act2, count = 1) { // Slave 1 does their normal thing diff --git a/src/js/statsChecker/eyeChecker.js b/src/js/statsChecker/eyeChecker.js index afd7bfa80946ea64770e8b30e19f381c739cbcba..7014da62b7795bf87b7c6b899a76f2d49f28e18c 100644 --- a/src/js/statsChecker/eyeChecker.js +++ b/src/js/statsChecker/eyeChecker.js @@ -266,7 +266,7 @@ globalThis.getGeneticEyeColor = function(playerOrSlave, side) { if (side !== "left" && side !== "right") { return "ERROR:" + side; } if (playerOrSlave.geneticQuirks.albinism === 2) { - const slave = (/** @type App.Entity.SlaveState */(playerOrSlave)); + const slave = (/** @type {App.Entity.SlaveState} */(playerOrSlave)); return slave.albinismOverride && slave.albinismOverride.eyeColor; } else { if (side === "left" && typeof playerOrSlave.geneticQuirks.heterochromia === "string") { diff --git a/src/js/storyJS.js b/src/js/storyJS.js index 308b7503bd984cac47cf333603551691dc2a4788..b2a89cadc6606761587d14c51aeb082f6324b25a 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -141,7 +141,7 @@ globalThis.canFemImpreg = function(slave1, slave2) { }; /** - * @param {App.Entity.SlaveState} slave + * @param {App.Entity.SlaveState | App.Entity.PlayerState} slave * @returns {number} */ globalThis.milkAmount = function(slave) { @@ -566,7 +566,7 @@ globalThis.generatePlayerPronouns = function(PC) { } }; -globalThis.printTrinkets = function() { +globalThis.printTrinkets = function() { // TODO: move these out of global scope function trinketPluralReplacer(desc) { let r; switch (desc) { diff --git a/src/js/vignettes.js b/src/js/vignettes.js index 58b80cd503809a1b1d2d6e5919987fc962f4698d..da558832ccd4373c724c1e8717dc868cb887af16 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -4659,7 +4659,7 @@ globalThis.GetVignette = function(slave) { effect: -1 }); - if ((V.canines.length > 0) && hasAnyNaturalLegs(slave)) { + if ((V.canine.length > 0) && hasAnyNaturalLegs(slave)) { r.push({ text: `an over-excited dog left scratch marks on ${his} leg,`, type: "health", @@ -4675,7 +4675,7 @@ globalThis.GetVignette = function(slave) { }); } - if (V.felines.length > 0) { + if (V.feline.length > 0) { r.push({ text: `${he} managed to take two tigers at once, aweing the crowd,`, type: "cash", diff --git a/src/js/wombJS.js b/src/js/wombJS.js index 1b60a26dc0d2fde2412cfe00c2ba2ed792f9aafc..8265298e9ea6a979ffecf2d0c29461ddb7ab7792 100644 --- a/src/js/wombJS.js +++ b/src/js/wombJS.js @@ -597,7 +597,7 @@ globalThis.WombNormalizePreg = function(actor) { if (max < actor.preg) { WombProgress(actor, actor.preg - max, actor.preg - max); - // console.log("progressin womb"); + // console.log("progress in womb"); } else if (max > actor.preg) { actor.preg = max; // console.log("advancing .preg"); @@ -941,4 +941,4 @@ globalThis.WombGetFetalSizeSum = function(actor) { actor.womb.forEach((ft) => sum += ft.volume); return sum; -}; \ No newline at end of file +}; diff --git a/src/neighbor/neighborInteract.js b/src/neighbor/neighborInteract.js index 450494514f0868b38c91c18da9adc09bcfb21343..85b8f77f57046793841670212a2c1d185f0d4033 100644 --- a/src/neighbor/neighborInteract.js +++ b/src/neighbor/neighborInteract.js @@ -101,7 +101,7 @@ App.Neighbor.Interact = (function() { } const div = App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.generateLinksStrip(links)); if (links.length > 1) { - App.UI.DOM.appendNewElement("span", div, "Transaction costs will only be paid once.", "detail"); + App.UI.DOM.appendNewElement("span", div, " Transaction costs will only be paid once.", "detail"); } } diff --git a/src/npc/children/childInteract.tw b/src/npc/children/childInteract.tw index 9a87dfe89c4ee65dffb8c5abf099f883acf1b718..66c6d61c00f0991240066704887f1f959e72796b 100644 --- a/src/npc/children/childInteract.tw +++ b/src/npc/children/childInteract.tw @@ -300,20 +300,20 @@ FIXME: <</link>> | <</if>> <<if $seeBestiality>> - <<if $farmyardKennels > 0 && $activeCanine != 0>> - <<link "Have a $activeCanine.species mount $him">> + <<if $farmyardKennels > 0 && $active.canine>> + <<link "Have a $active.canine.species mount $him">> <<set $animalType = "canine">> <<replace "#mini-scene">><<include "BeastFucked">><br> <</replace>> <</link>> | <</if>> - <<if $farmyardStables > 0 && $activeHooved.species != 0>> - <<link "Let a $activeHooved.species mount $him">> + <<if $farmyardStables > 0 && $active.hooved.species>> + <<link "Let a $active.hooved.species mount $him">> <<set $animalType = "hooved">> <<replace "#mini-scene">><<include "BeastFucked">><br> <</replace>> <</link>> | <</if>> - <<if $farmyardCages > 0 && $activeFeline != 0>> - <<link "Have a $activeFeline.species mount $him">> + <<if $farmyardCages > 0 && $active.feline>> + <<link "Have a $active.feline.species mount $him">> <<set $animalType = "feline">> <<replace "#mini-scene">><<include "BeastFucked">><br> <</replace>> <</link>> | diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js index 4d0e4ec15f962df6c91f124f1db339c351194dec..662f911cc776cbb52c7e17b58aa1da981bdb3b65 100644 --- a/src/npc/descriptions/belly/belly.js +++ b/src/npc/descriptions/belly/belly.js @@ -7485,7 +7485,7 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyImplant > 0) { r.push(`${slave.slaveName}'s armor is specially tailored to fit such an absurdly gravid ${girl}. It just barely shows a hint of ${his} titanic implant-filled belly underneath the ultra-heavy armor.`); } else { - r.push(`${slave.slaveName}'s armor is specially tailored to fit such an absurdly gravid ${girl}. It just barely shows a hint of ${his} titanic pregnant belly${him} underneath the ultra-heavy armor.`); + r.push(`${slave.slaveName}'s armor is specially tailored to fit such an absurdly gravid ${girl}. It just barely shows a hint of ${his} titanic pregnant belly ${him} underneath the ultra-heavy armor.`); } } else if (slave.belly >= 450000) { if (isBellyFluidLargest) { @@ -12261,7 +12261,7 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyImplant > 0) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} hugely gravid stomach. It clearly displays ${his} giant implant-filled belly through the skintight material.`); } else { - r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} hugely gravid stomach. It clearly displays${his} giant pregnant belly through the skintight material.`); + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} hugely gravid stomach. It clearly displays ${his} giant pregnant belly through the skintight material.`); } } else if (slave.belly >= 30000) { if (isBellyFluidLargest) { @@ -12311,13 +12311,13 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} fat belly, clearly showing every fold and roll through the skintight material.`); } else if (slave.belly >= 1500 || slave.bellyAccessory === "a small empathy belly") { if (slave.bellyAccessory === "a small empathy belly") { - r.push(`${slave.slaveName}'s bodysuit clearly displays${his} small pregnant belly through the skintight material.`); + r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} small pregnant belly through the skintight material.`); } else if (isBellyFluidLargest) { - r.push(`${slave.slaveName}'s bodysuit clearly displays${his} ${slave.inflationType}-swollen belly.`); + r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} ${slave.inflationType}-swollen belly.`); } else if (slave.bellyImplant > 0) { - r.push(`${slave.slaveName}'s bodysuit clearly displays${his} implant-rounded belly through the skintight material.`); + r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} implant-rounded belly through the skintight material.`); } else { - r.push(`${slave.slaveName}'s bodysuit clearly displays${his} growing belly through the skintight material.`); + r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} growing belly through the skintight material.`); } } else if (slave.weight > 30) { r.push(`${slave.slaveName}'s bodysuit clearly displays ${his} chubby belly underneath the skintight material.`); diff --git a/src/npc/descriptions/butt/butt.js b/src/npc/descriptions/butt/butt.js index 53cc54a8b2146046838eacc6a9d23706334c7afe..b88c8ab6b7f49026ab457b7f56fe6bb0535550f5 100644 --- a/src/npc/descriptions/butt/butt.js +++ b/src/npc/descriptions/butt/butt.js @@ -10,6 +10,7 @@ App.Desc.butt = function(slave, {market, eventDescription} = {}) { const { he, him, his, girl, He, His } = getPronouns(slave); + const hands = (hasBothArms(slave)) ? "hands" : "hand"; if (V.showClothing === 1 && !market) { if (V.surgeryDescription === 0) { switch (slave.clothes) { @@ -1229,13 +1230,7 @@ App.Desc.butt = function(slave, {market, eventDescription} = {}) { } r.push(`to support them.`); } else if (slave.muscles > 30) { - r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`sunk into ${his} buttcheeks to help take their weight.`); + r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} ${hands} sunk into ${his} buttcheeks to help take their weight.`); } else if (slave.muscles > 5) { r.push(`${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can.`); } else { @@ -1275,13 +1270,7 @@ App.Desc.butt = function(slave, {market, eventDescription} = {}) { } r.push(`to support them.`); } else if (slave.muscles > 30) { - r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`sunk into ${his} buttcheeks to help take their weight.`); + r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} ${hands} sunk into ${his} buttcheeks to help take their weight.`); } else if (slave.muscles > 5) { r.push(`${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can.`); } else { @@ -1321,13 +1310,7 @@ App.Desc.butt = function(slave, {market, eventDescription} = {}) { } r.push(`to support them.`); } else if (slave.muscles > 30) { - r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his}`); - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } - r.push(`sunk into ${his} buttcheeks to help take their weight.`); + r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} ${hands} sunk into ${his} buttcheeks to help take their weight.`); } else if (slave.muscles > 5) { r.push(`${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can.`); } else { diff --git a/src/npc/descriptions/crotch/dick.js b/src/npc/descriptions/crotch/dick.js index 69275681cd968ac69d51e4d69225e11fa66d0906..1ecbe0a4ab7258c9a515acb0c434dc0c9d1a4768 100644 --- a/src/npc/descriptions/crotch/dick.js +++ b/src/npc/descriptions/crotch/dick.js @@ -2185,7 +2185,7 @@ App.Desc.dick = function(slave, {market, eventDescription} = {}) { } r.push(`giving ${his} ejaculations less`); if (slave.anus !== 0) { - r.push(`body and reducing the stimulation ${he} feels during anal sex`); + r.push(`body and reducing the stimulation ${he} feels during anal sex.`); } else { r.push(`body.`); } diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js index 62a5510661294e33ba84fe35a11508c3bd781875..e8454fa374204938fcc005cd70674707a6063407 100644 --- a/src/npc/generate/generateGenetics.js +++ b/src/npc/generate/generateGenetics.js @@ -21,6 +21,7 @@ globalThis.generateGenetics = (function() { * @returns {FC.FetusGenetics} */ function generateGenetics(actor1, actor2, name) { + /** @type {FC.FetusGenetics} */ const genes = { gender: /** @type {FC.GenderGenes} */ ("XX"), name: "blank", @@ -1192,7 +1193,6 @@ globalThis.generateGenetics = (function() { })(); - /** * Creates a new child object based on its mother and father and whether or not it is destined for the Incubator * @param {App.Entity.SlaveState} mother The slave object carrying the child source diff --git a/src/npc/generate/newChildIntro.js b/src/npc/generate/newChildIntro.js index 26e5b837e75d1d8c647c6aa40334bf3d16867257..c352d5c1e598c54675ec484d40a51f0e3f18f54e 100644 --- a/src/npc/generate/newChildIntro.js +++ b/src/npc/generate/newChildIntro.js @@ -13,19 +13,12 @@ App.UI.newChildIntro = function(slave) { let dadInterest; /** @type {FC.SlaveStateOrZero} */ - let tempMom = 0; + const tempMom = getSlave(slave.mother); /** @type {FC.SlaveStateOrZero} */ - let tempDad = 0; + const tempDad = getSlave(slave.father); App.Utils.setLocalPronouns(slave); - if (slave.mother > 0) { - tempMom = getSlave(slave.mother) || 0; - } - if (slave.father > 0) { - tempDad = getSlave(slave.father) || 0; - } - r = []; r.push(`You completed the legalities before heading to ${V.incubatorName}, knowing the tank will release ${him} on your approach, and instruct ${V.assistant.name} to notify the new ${girl}'s parents to meet you in your office. As the tank exhumes the disoriented ${girl},`); @@ -232,10 +225,10 @@ App.UI.newChildIntro = function(slave) { } // Parent naming - if (tempMom !== 0) { + if (tempMom) { naming.append(parentNaming(tempMom)); } - if (tempDad !== 0 && slave.father !== slave.mother) { + if (tempDad && slave.father !== slave.mother) { naming.append(parentNaming(tempDad)); } el.append(naming); @@ -252,16 +245,16 @@ App.UI.newChildIntro = function(slave) { r = []; r.push(newName); r.push(`now stands before your desk`); - if (tempMom !== 0 && tempDad !== 0 && slave.father !== slave.mother) { + if (tempMom && tempDad && slave.father !== slave.mother) { r.push(`alongside ${his} mother ${tempMom.slaveName} and father ${tempDad.slaveName}.`); - } else if (tempMom !== 0) { + } else if (tempMom) { r.push(`alongside ${his} mother ${tempMom.slaveName}.`); - } else if (tempDad !== 0) { + } else if (tempDad) { r.push(`alongside ${his} father ${tempDad.slaveName}.`); } else { r.push(`alone, having no family${(slave.mother === -1 || slave.father === -1) ? `, other than you,` : ``} in your stock.`); } - if (V.arcologies[0].FSRestartDecoration === 100 && tempMom !== 0) { + if (V.arcologies[0].FSRestartDecoration === 100 && tempMom) { if (tempMom.breedingMark === 1 && V.propOutcome === 1) { r.push(`The Societal Elite are waiting to inspect the child of their eugenics programs.`); if (V.arcologies[0].FSSupremacist > 20 && slave.race !== V.arcologies[0].FSSupremacistRace) { @@ -291,7 +284,7 @@ App.UI.newChildIntro = function(slave) { } } - if (tempMom !== 0) { + if (tempMom) { ({ he2, his2, He2, himself2 } = getPronouns(tempMom).appendSuffix("2")); @@ -432,7 +425,7 @@ App.UI.newChildIntro = function(slave) { } } - if (tempDad !== 0 && slave.father !== slave.mother) { + if (tempDad && slave.father !== slave.mother) { ({ he2, his2, He2 } = getPronouns(tempDad).appendSuffix("2")); @@ -577,14 +570,14 @@ App.UI.newChildIntro = function(slave) { r = []; - if (tempMom !== 0 && tempDad !== 0 && slave.father !== slave.mother) { + if (tempMom && tempDad && slave.father !== slave.mother) { r.push(`You dismiss ${tempMom.slaveName} and ${tempDad.slaveName} so that you may conduct a more intimate inspection of their ${daughter}.`); - } else if (tempMom !== 0) { + } else if (tempMom) { ({ he2, his2, He2 } = getPronouns(tempMom).appendSuffix("2")); r.push(`You dismiss ${tempMom.slaveName} so that you may conduct a more intimate inspection of ${his2} ${daughter}.`); - } else if (tempDad !== 0) { + } else if (tempDad) { ({ he2, his2, He2 } = getPronouns(tempDad).appendSuffix("2")); diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index 96b362af692208f39c9e5ae11ac5c19a208613c2..8086c27d61561fffb51554d06ba251b686f22963 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -14,6 +14,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = His, He, his, him, he, girl, hers, himself, daughter } = getPronouns(slave); const {woman: womanP} = getPronouns(V.PC); + const hands = (hasBothArms(slave)) ? "hands" : "hand"; const el = new DocumentFragment(); let r; @@ -239,12 +240,12 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.origRace = slave.race; } if (slave.race !== slave.origRace) { - r.push(`A blood test reveals that ${he} was originally ${slave.origRace}, not slave.race ${(V.PC.skill.medicine >= 50 || V.PC.skill.slaving >= 50) ? `, just as you suspected` : ``}.`); + r.push(`A blood test reveals that ${he} was originally ${slave.origRace}, not ${slave.race} ${(V.PC.skill.medicine >= 50 || V.PC.skill.slaving >= 50) ? `, just as you suspected` : ``}.`); } } if (slave.skin !== slave.origSkin) { if (slave.skin !== "sun tanned" && slave.skin !== "spray tanned") { - r.push(`An epidermis scan reveals that ${his} skin was originally ${slave.origSkin}, not slave.skin${(V.PC.skill.medicine >= 75 || V.PC.skill.slaving >= 75) ? `, just as you suspected` : ``}.`); + r.push(`An epidermis scan reveals that ${his} skin was originally ${slave.origSkin}, not ${slave.skin}${(V.PC.skill.medicine >= 75 || V.PC.skill.slaving >= 75) ? `, just as you suspected` : ``}.`); } } @@ -547,8 +548,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } if (V.arcologies[0].FSIntellectualDependency >= 50) { - if (slave.pregKnown === 1) { - r.push(`${He} realizes that your arcology values bearing children and <span class="mediumaquamarine">hopes</span> ${he}'ll be treated gently for being pregnant.`); + if (slave.intelligence <= -50) { + r.push(`${He} realizes that your arcology values dumb slaves and <span class="mediumaquamarine">hopes</span> ${he}'ll fit in with ${his} low intelligence.`); slave.trust += 2; } } @@ -1317,8 +1318,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`sees ${himself}`); } else { if (hasAnyArms(slave)) { - r.push(`tenderly uses ${his} hand${hasBothArms(slave) ? 's' : ''}`); - r.push(`and finds ${himself}`); + r.push(`tenderly uses ${his} ${hands} and finds ${himself}`); } else { r.push(`stoically waits while you vividly describe ${his} new appearance. One`); } @@ -1967,10 +1967,10 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } r.push(`but eventually ${he} feels the radiated heat on ${his} skin and manages to get one inarticulate, wordless noise of terror out before the dreadful sizzling noise and the sweet smell of burning flesh. If ${he} didn't know ${he} was a slave before, <span class="mediumorchid">${he} does now,</span> and ${he}'s got the <span class="gold">agonizing</span> <span class="red">injury</span> to prove it.`); if (V.arcologies[0].FSSubjugationistRace === slave.race && V.arcologies[0].FSSubjugationist > 0) { - r.push(`Society <span class="green">approves</span> of your purchase and branding of an inferior ${slave.race} person; this advances the idea that slave.race people ought to be enslaved.`); + r.push(`Society <span class="green">approves</span> of your purchase and branding of an inferior ${slave.race} person; this advances the idea that ${slave.race} people ought to be enslaved.`); FutureSocieties.Change("Subjugationist", 2); } else if ((V.arcologies[0].FSSupremacistRace === slave.race) && (V.arcologies[0].FSSupremacist > 0)) { - r.push(`Society <span class="red">disapproves</span> of your purchase and branding of ${addA(slave.race)} person; this reduces support for the idea that slave.race people are superior.`); + r.push(`Society <span class="red">disapproves</span> of your purchase and branding of ${addA(slave.race)} person; this reduces support for the idea that ${slave.race} people are superior.`); FutureSocieties.Change("Supremacist", -2); } applyBrand(); @@ -2062,10 +2062,10 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } r.push(`If ${he} didn't know ${he} was a slave before, <span class="mediumorchid">${he} does now,</span> and ${he}'s got the <span class="gold">agonizing</span> <span class="red">injury</span> to prove it. What ${he} doesn't yet know is just how permanent this lashing's effects will be. The level of violence and the coating you used will leave ${him} scarred with the marks of slavery forever.`); if (V.arcologies[0].FSSubjugationistRace === slave.race && V.arcologies[0].FSSubjugationist > 0) { - r.push(`Society <span class="green">approves</span> of your purchase and whipping of an inferior ${slave.race} person; this advances the idea that slave.race people ought to be enslaved.`); + r.push(`Society <span class="green">approves</span> of your purchase and whipping of an inferior ${slave.race} person; this advances the idea that ${slave.race} people ought to be enslaved.`); FutureSocieties.Change("Subjugationist", 2); } else if ((V.arcologies[0].FSSupremacistRace === slave.race) && (V.arcologies[0].FSSupremacist > 0)) { - r.push(`Society <span class="red">disapproves</span> of your purchase and whipping of ${addA(slave.race)} person; this reduces support for the idea that slave.race people are superior.`); + r.push(`Society <span class="red">disapproves</span> of your purchase and whipping of ${addA(slave.race)} person; this reduces support for the idea that ${slave.race} people are superior.`); FutureSocieties.Change("Supremacist", -2); } slave.devotion -= 5; @@ -2081,10 +2081,10 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You drag ${him} to the body modification studio and strap ${him} down with ${his} ${scarTarget} clear and defenseless. ${He} doesn't understand what's coming for a while, even as disinfectant is applied to ${his} ${scarTarget}. You have a wide selection of tools to create scars, the trick is to keep the wound from healing correctly afterwards. Of course, ${he} has no way of knowing that the pain you are inflicting as you cut into ${his} flesh will leave such a permanent mark, but the basic message is clear: if ${he} didn't know ${he} was a slave before, <span class="mediumorchid">${he} does now,</span> and ${he}'s got the <span class="gold">agonizing</span> <span class="red">injury</span> to prove it.`); if (V.arcologies[0].FSSubjugationistRace === slave.race && V.arcologies[0].FSSubjugationist > 0) { - r.push(`Society <span class="green">approves</span> of your purchase and scarring of an inferior ${slave.race} person; this advances the idea that slave.race people ought to be enslaved.`); + r.push(`Society <span class="green">approves</span> of your purchase and scarring of an inferior ${slave.race} person; this advances the idea that ${slave.race} people ought to be enslaved.`); FutureSocieties.Change("Subjugationist", 2); } else if ((V.arcologies[0].FSSupremacistRace === slave.race) && (V.arcologies[0].FSSupremacist > 0)) { - r.push(`Society <span class="red">disapproves</span> of your purchase and scarring of ${addA(slave.race)} person; this reduces support for the idea that slave.race people are superior.`); + r.push(`Society <span class="red">disapproves</span> of your purchase and scarring of ${addA(slave.race)} person; this reduces support for the idea that ${slave.race} people are superior.`); FutureSocieties.Change("Supremacist", -2); } App.Medicine.Modification.addScar(slave, scarTarget, V.scarDesign.primary); @@ -2102,7 +2102,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = linkName: `Force-feed ${him}`, result(slave) { const r = []; - r.push(`${He} is much too thin and seems to shirk any offered food, but there is an easy solution to that. If ${he} refuses to eat, ${he} can be made to. Pulling the reluctant slave to the feeders, binding ${him} tightly to a chair, and attaching a hose to the slave food nozzle, you give ${him} a choice; suck the hose willingly or have it forced down ${his} throat. ${He} glares defiantly and keeps ${his} mouth firmly shut. You clamp down on ${his} nose, inevitably forcing ${him} to open ${his} mouth to breath. In that moment, you shove the hose in and down ${his} throat, carefully directing it down into ${his} stomach. ${He} gags as you turn on the flow, ${his} eyes filling with tears as ${he} feels the warm food travel down the tube and into ${his} stomach. ${He} sobs as ${his} belly steadily swells with unwelcome sustenance, ${his} eyes pleading with you, desperate to let you know ${he}'ll be good. You ignore ${him}, letting ${him} fill until ${his} belly is noticeably distended compared to ${his} thin frame. Once you feel ${he} has had enough, you pull the hose from ${his} gut, spraying ${his} face with food in the process, and tell ${him} it will go right back in if ${he} doesn't keep it all down. ${He} <span class="gold">nods fearfully,</span> anything to not go through that again. ${He} hobbles away once freed, one hand covering ${his} retching mouth and the other clasping ${his} <span class="mediumorchid">hated, food bloated middle.</span>`); + r.push(`${He} is much too thin and seems to shirk any offered food, but there is an easy solution to that. If ${he} refuses to eat, ${he} can be made to. Pulling the reluctant slave to the feeders, binding ${him} tightly to a chair, and attaching a hose to the slave food nozzle, you give ${him} a choice; suck the hose willingly or have it forced down ${his} throat. ${He} glares defiantly and keeps ${his} mouth firmly shut. You clamp down on ${his} nose, inevitably forcing ${him} to open ${his} mouth to breath. In that moment, you shove the hose in and down ${his} throat, carefully directing it down into ${his} stomach. ${He} gags as you turn on the flow, ${his} eyes filling with tears as ${he} feels the warm food travel down the tube and into ${his} stomach. ${He} sobs as ${his} belly steadily swells with unwelcome sustenance, ${his} eyes pleading with you, desperate to let you know ${he}'ll be good. You ignore ${him}, letting ${him} fill until ${his} belly is noticeably distended compared to ${his} thin frame. Once you feel ${he} has had enough, you pull the hose from ${his} gut, spraying ${his} face with food in the process, and tell ${him} it will go right back in if ${he} doesn't keep it all down. ${He} <span class="gold">nods fearfully,</span> anything to not go through that again. ${He} hobbles away once freed,`); + r.push(`one hand covering ${his} retching mouth and the other clasping ${his} <span class="mediumorchid">hated, food bloated middle.</span>`); //TODO: revise for hands slave.devotion -= 10; slave.trust -= 10; return r.join(" "); @@ -2740,7 +2741,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = lineBreak(); if (slave.vagina === 0) { choice({ - // TODO tankBorn + // TODO: tankBorn get linkName() { return (tankBorn) ? `Take ${his} virginity` : `Tie ${him} up and take ${his} virginity`; }, result(slave) { const r = []; @@ -3602,7 +3603,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } r.push(`${He} tries to squirm away from the moist spot growing under ${his} cheek, but you reveal your nipple and carefully direct ${his} mouth over it.`); if (slave.fetish === "pregnancy") { - r.push(`Slowly ${he} begins to suckle from your swollen breast. You gently brush ${his} head as you try to hold back your pleasure — a wasted effort, as a hand sneaks its way to your`); + r.push(`Slowly ${he} begins to suckle from your swollen breast. You gently brush ${his} head as you try to hold back your pleasure — a wasted effort, as a hand sneaks its way to your`); // TODO: handness if (V.PC.dick !== 0) { r.push(`growing erection and enthusiastically begins pumping away.`); } else { @@ -4069,11 +4070,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`${He}'s not a virgin anywhere, so you'll have to go more extreme to provide a properly introductory level of sexual torture equivalent to defloration. You tie your new slave down on`); if (hasAnyArms(slave)) { - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } + r.push(hands); if (hasAnyLegs(slave)) { r.push(`and`); } @@ -4115,11 +4112,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`${He}'s not an anal virgin, so you'll have to go more extreme to provide an introductory level of sexual torture equivalent to defloration. You tie your new slave down on`); if (hasAnyArms(slave)) { - if (hasBothArms(slave)) { - r.push(`hands`); - } else { - r.push(`hand`); - } + r.push(hands); if (hasAnyLegs(slave)) { r.push(`and`); } @@ -4810,7 +4803,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -4837,7 +4830,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -4871,7 +4864,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -4899,7 +4892,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5007,7 +5000,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5167,7 +5160,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5193,7 +5186,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5280,7 +5273,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5307,7 +5300,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } @@ -5333,7 +5326,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; r.push(`You escort ${him} to the remote surgery, strap ${him} in, and put ${him} under. When ${he} awakes, ${he} can't `); if (hasAnyArms(slave)) { - r.push(`keep ${his} ${(hasBothArms(slave)) ? `hands` : `hand`} off`); + r.push(`keep ${his} ${hands} off`); } else { r.push(`stop shaking around`); } diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js new file mode 100644 index 0000000000000000000000000000000000000000..d56550acdb62f5c6634dd54498e340cc30fe5bee --- /dev/null +++ b/src/npc/interaction/fAnimal.js @@ -0,0 +1,996 @@ + +/** + * @param {App.Entity.SlaveState} slave + * @param {string} type + */ +App.Interact.fAnimal = function(slave, type) { + const frag = new DocumentFragment(); + + const {He, he, him, His, his, girl} = getPronouns(slave); + + /** @enum {string} */ + const Acts = { + VAGINAL: "vaginal", + ANAL: "anal", + ORAL: "oral", + }; + + const vaginal = Acts.VAGINAL; + const anal = Acts.ANAL; + const oral = Acts.ORAL; + + const approvingFetishes = ["masochist", "humiliation", "perverted", "sinful"]; // not strictly fetishes, but approvingFetishesAndBehavioralQuirksAndSexualQuirks doesn't have the same ring to it + + const animal = V.active[type]; + + const stretches = App.UI.DOM.makeElement("span", `stretches`, ["lime"]); + + let fetishDesc; + let act; + let hole; + let orifice; + + const anAnimal = animal.articleAn ? `an ${animal.name}` : `a ${animal.name}`; + + if (slave.assignment === Job.FUCKTOY || slave.assignment === Job.MASTERSUITE) { + if (slave.toyHole === "pussy") { + act = vaginal; + } else if (slave.toyHole === "ass") { + act = anal; + } else if (slave.toyHole === "mouth") { + act = oral; + } else { + if (canDoVaginal(slave)) { + act = vaginal; + } else if (canDoAnal(slave)) { + act = anal; + } else { + act = oral; + } + } + } else if (canDoVaginal(slave)) { + act = vaginal; + } else if (canDoAnal(slave)) { + act = anal; + } else { + act = oral; + } + + const slaveApproves = () => + approvingFetishes.includes(slave.fetish) || + approvingFetishes.includes(slave.sexualQuirk) || + approvingFetishes.includes(slave.behavioralQuirk) || + slave.fetish === "buttslut" && act === anal || + slave.fetish === "cumslut" && act === oral || + slave.sexualQuirk === "gagfuck queen" && act === oral; + + switch (act) { + case oral: + orifice = () => either("mouth", "throat"); + break; + case vaginal: + orifice = () => either("pussy", "cunt"); + hole = 0; + break; + case anal: + orifice = () => either("asshole", "rectum"); + hole = 1; + break; + default: + throw new Error(`Unexpected act type '${act}' in fAnimal()`); + } + + if (slave.fetish === "cumslut" && act === oral) { + fetishDesc = `getting to drink more cum`; + } else if (slave.fetish === "humiliation") { + fetishDesc = `committing such a humiliating act`; + } else if (slave.fetish === "buttslut" && act === anal) { + fetishDesc = `getting to take a cock up ${his} ass`; + } else if (slave.fetish === "masochist") { + fetishDesc = `committing such a painful act`; + } else if (slave.sexualQuirk === "perverted") { + fetishDesc = `committing such a perverted act`; + } else if (slave.sexualQuirk === "gagfuck queen" && act === oral) { + fetishDesc = `getting to suck more dick`; + } else if (slave.behavioralQuirk === "sinful") { + fetishDesc = `committing such a sinful act`; + } + + const mainDiv = App.UI.DOM.appendNewElement("div", frag); + + mainDiv.append(intro(), consummation(), completion(), sexEffects()); + + if (V.postSexCleanUp) { + mainDiv.append(cleanUp()); + } + + return frag; + + + + // MARK: Intro Functions + + function intro() { + const mainSpan = document.createElement("span"); + + const r = []; + + if (canWalk(slave)) { + r.push(`You call ${him} over and`); + } else { + r.push(`You order another slave to bring ${slave.slaveName} over. Once ${he} is situated, you`); + } + + r.push(`tell ${him} you want to watch ${him} ${act === oral ? + `suck off` : + act === vaginal ? + `get fucked by` : + `get fucked in the ass by`} ${anAnimal}. `); + + if (slave.fetish === "mindbroken") { + r.push(`${slave.slaveName} nods ${his} head dumbly, ${his} eyes vacant${!canSee(slave) ? ` as always` : ``}. `); + } + + App.Events.addNode(mainSpan, r); + + if (slave.fetish !== "mindbroken") { + if (slave.devotion > 50) { + mainSpan.append(introDevoted()); + } else if (slave.devotion > 20) { + mainSpan.append(introNondevoted()); + } else if (slave.devotion >= -20) { + mainSpan.append(introNonresistant()); + } else { + mainSpan.append(introResistant()); + } + } + + return mainSpan; + + + + function introDevoted() { + const mainSpan = document.createElement("span"); + + if (act === oral) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName}'s face visibly brightens at the prospect of ${fetishDesc}, even if it's an animal${slave.fetish === "cumslut" ? `'s cum` : ` that ${he} has to suck off`}. `); + } else { + mainSpan.append(`${slave.slaveName} visibly blanches at the thought of having to suck down an animal's cum, but ${he} is so devoted to you that ${he} reluctantly agrees. `); + } + } else { + if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, even if the dick is an animal's. `); + } else { + mainSpan.append(`${slave.slaveName} looks visibly disturbed, but is so attentive to your will that ${he} agrees. `); + } + } else { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, although ${he} seems a bit hesitant at the thought of giving ${his} virginity to an animal. `); + } else { + mainSpan.append(`${slave.slaveName} looks visibly shaken at the thought of having ${his} precious ${!canDoVaginal(slave) ? `anal ` : ``}virginity taken by an animal, but is so attentive to your will that ${he} ultimately agrees. `); + } + } + } + + return mainSpan; + } + + function introNondevoted() { + const mainSpan = document.createElement("span"); + + if (act === oral) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} isn't too keen on the idea of sucking off an animal, but the idea of ${fetishDesc} is enough to get ${him} to comply. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an animal, but quickly regains ${his} composure. `); + } + } else { + if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} doesn't seem terribly keen on the idea of fucking an animal, but the thought of ${fetishDesc} seems to be enough to win ${him} over. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of fucking an animal, but quickly regains ${his} composure. `); + } + } else { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === anal ? `rosebud` : `pearl`} taken by a beast, but quickly regains ${his} composure. `); + } + } + } + + return mainSpan; + } + + function introNonresistant() { + const mainSpan = document.createElement("span"); + + if (act === oral) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} looks disgusted at the thought of sucking off an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an animal${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `); + } + } else { + if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} looks disgusted at the thought of fucking an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of fucking an animal${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `); + } + } else { + if (slaveApproves()) { + mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); + } else { + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === anal ? `rosebud` : `pearl`} taken by a beast${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `); + } + } + } + + return mainSpan; + } + + function introResistant() { + const mainSpan = document.createElement("span"); + + mainSpan.append(`${slave.slaveName}'s face contorts into a mixture of ${slave.devotion < -50 ? `hatred, anger, and disgust` : `anger and disgust`}, ${canWalk(slave) ? + `and only the threat of far worse punishment is enough to prevent ${him} from running out of the room` : + `but ${he} knows ${he} is powerless to stop you`}. `); + + return mainSpan; + } + } + + + + // MARK: Consummation Functions + + function consummation() { + if (slave.devotion > 50) { + return consummationDevoted(); + } else if (slave.devotion > 20) { + return consummationNondevoted(); + } else if (slave.devotion > -20) { + return consummationNonresistant(); + } else { + return consummationResistant(); + } + + function consummationDevoted() { + const + mainSpan = document.createElement("span"), + r = []; + + if (act === oral) { + r.push(`You have ${him} kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `); + } else { + r.push(`You have ${him} ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); + } + + switch (animal) { + case V.active.canine: + consummationDevotedCanine(act); + break; + case V.active.hooved: + consummationDevotedHooved(act); + break; + case V.active.feline: + consummationDevotedFeline(act); + break; + default: + throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`); + } + + if (act !== oral) { + mainSpan.append(virginityCheck(act)); + } + + function consummationDevotedCanine(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave seems to quickly get over the fact that the dick currently in ${his} mouth belongs to a canine as ${his} more carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, filling ${his} throat. `); + } + } else { + if (canWalk(slave)) { + r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); + } else { + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + } + } + + function consummationDevotedHooved(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth is not a human one as ${his} more carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} poor throat to the limit. `); + } + } else { + r.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); + } + } + + function consummationDevotedFeline(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth belongs to ${anAnimal} as ${his} more carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, the barbs on its cock rubbing the inside of ${his} mouth raw. `); + } + } else { + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + + function consummationNondevoted() { + const + mainSpan = document.createElement("span"), + r = []; + + if (act === oral) { + r.push(`You tell ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave hesitantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock, and, after taking a moment to steel ${his} resolve, begins to give it a few reluctant licks before putting it in ${his} mouth. `); + } else { + r.push(`You tell ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); + } + + switch (animal) { + case V.active.canine: + consummationNondevotedCanine(act); + break; + case V.active.hooved: + consummationNondevotedHooved(act); + break; + case V.active.feline: + consummationNondevotedFeline(act); + break; + default: + throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`); + } + + if (act !== oral) { + mainSpan.append(virginityCheck(act)); + } + + function consummationNondevotedCanine(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + if (canWalk(slave)) { + r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); + } else { + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + } + } + + function consummationNondevotedHooved(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); + } + } + + function consummationNondevotedFeline(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + + function consummationNonresistant() { + const + mainSpan = document.createElement("span"), + r = []; + + if (act === oral) { + r.push(`You force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reluctantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `); + } else { + r.push(`You force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); + } + + switch (animal) { + case V.active.canine: + consummationNonresistantCanine(act); + break; + case V.active.hooved: + consummationNonresistantHooved(act); + break; + case V.active.feline: + consummationNonresistantFeline(act); + break; + default: + throw new Error(`Unexpected animal type '${animal}' in consummationNonresistant()`); + } + + if (act !== oral) { + mainSpan.append(virginityCheck(act)); + } + + function consummationNonresistantCanine(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + if (canWalk(slave)) { + r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); + } else { + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + } + } + + function consummationNonresistantHooved(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); + } + } + + function consummationNonresistantFeline(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); + } + } else { + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + + function consummationResistant() { + const + mainSpan = document.createElement("span"), + r = []; + + if (act === oral) { + r.push(`You have to physically force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} is restrained, showing little concern when another slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, the slave takes its cock and lines it up with ${slave.slaveName}'s mouth. The animal needs no prompting, and thrusts itself into ${his} ring-gagged mouth. `); + } else { + r.push(`You have to physically force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); + } + + switch (animal) { + case V.active.canine: + consummationResistantCanine(act); + break; + case V.active.hooved: + consummationResistantHooved(act); + break; + case V.active.feline: + consummationResistantFeline(act); + break; + default: + throw new Error(`Unexpected animal type '${animal}' in consummationResistant()`); + } + + if (act !== oral) { + mainSpan.append(virginityCheck(act)); + } + + function consummationResistantCanine(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave glares daggers at you as ${he} takes the full length of the canine's cock in ${his} mouth, but ${slave.dick ? + canAchieveErection(slave) ? + `${his} fully-erect dick` : + `the precum leaking from ${his} dick` : + slave.vagina > -1 ? + `a slight sheen on ${his} pussylips` : + `a slight blush to ${his} cheeks`} + tells you that ${he}'s enjoying this, at least a little. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment. `); + } + } else { + if (canWalk(slave)) { + r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); + } else { + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + } + } + + function consummationResistantHooved(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave glares daggers at you as ${he} takes the full length of the ${animal.name}'s cock in ${his} mouth, but ${slave.dick ? + canAchieveErection(slave) ? + `${his} fully-erect dick` : + `the precum leaking from ${his} dick` : + slave.vagina > -1 ? + `a slight sheen on ${his} pussylips` : + `a slight blush to ${his} cheeks`} + tells you that ${he}'s enjoying this, at least a little. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment. `); + } + } else { + r.push(`${slave.slaveName} lets out a blood-curdling scream as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); + } + } + + function consummationResistantFeline(type) { + if (type === oral) { + if (slaveApproves()) { + r.push(`The slave glares daggers at you as ${he} takes the full length of the feline's cock in ${his} mouth, but ${slave.dick ? + canAchieveErection(slave) ? + `${his} fully-erect dick` : + `the precum leaking from ${his} dick` : + slave.vagina > -1 ? + `a slight sheen on ${his} pussylips` : + `a slight blush to ${his} cheeks`} + tells you that ${he}'s enjoying this, at least a little. `); + } else { + r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment .`); + } + } else { + r.push(`${slave.slaveName} lets out a blood-curdling scream as the barbed cock makes its way into ${his} ${orifice()}. `); + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + } + + + + // MARK: Completion Function + + function completion() { + const + mainSpan = document.createElement("span"), + r = []; + + switch (animal) { + case V.active.canine: + completionCanine(); + break; + case V.active.hooved: + completionHooved(); + break; + case V.active.feline: + completionFeline(); + break; + default: + throw new Error(`Unexpected animal type '${animal}' in completion()`); + } + + if (act !== oral && canGetPregnant(slave) && canBreed(slave, animal)) { + knockMeUp(slave, 5, hole, -8); + } + + function completionCanine() { + if (act === oral) { + r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz down ${his} abused throat. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s mouth, causing ${him} to immediately begin coughing and retching uncontrollably. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); + } else { + r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === vaginal && slave.vagina < 3 || act === anal && slave.anus < 2 ? + `now-gaping ${orifice()}` : + orifice()}, causing a thick stream of cum to slide out of it. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); + } + + switch (act) { + case oral: + slave.counter.oral++; + break; + case vaginal: + slave.counter.vaginal++; + slave.vagina = slave.vagina < 3 ? 3 : slave.vagina; + break; + case anal: + slave.counter.anal++; + slave.anus = slave.anus < 2 ? 2 : slave.anus; + break; + default: + throw new Error(`Unexpected act type '${act} in completionCanine().`); + } + } + + function completionHooved() { + if (act === oral) { + r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan past the huge ${animal.species} cock stretching ${his} poor throat to its limits. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and pour its thick semen down ${his} throat and into ${his} stomach, filling it to the brim. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, causing ${slave.slaveName} to begin coughing and retching uncontrollably. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); + } else { + r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === vaginal ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); + } + + switch (act) { + case oral: + slave.counter.oral++; + break; + case vaginal: + slave.counter.vaginal++; + slave.vagina = slave.vagina < 4 ? 4 : slave.vagina; + break; + case anal: + slave.counter.anal++; + slave.anus = slave.anus < 3 ? 3 : slave.anus; + break; + default: + throw new Error(`Unexpected act type '${act}' in completionHooved().`); + } + } + + function completionFeline() { + if (act === oral) { + r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} mouth and throat raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts down ${slave.slaveName}'s throat. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); + } else { + r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} ${orifice()} raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts, filling ${slave.slaveName} with its sperm. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); + } + + healthDamage(slave, 1); + + switch (act) { + case oral: + slave.counter.oral++; + return; + case vaginal: + slave.counter.vaginal++; + slave.vagina = slave.vagina < 2 ? 2 : slave.vagina; + return; + case anal: + slave.counter.anal++; + slave.anus = slave.anus < 1 ? 1 : slave.anus; + return; + default: + throw new Error(`Unexpected act type '${act} in completionFeline().`); + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + + + + // Post-sex Functions + + function sexEffects() { + const mainSpan = App.UI.DOM.makeElement("span", '', ["flaw", "gain"]); + + if (jsRandom(1, 100) > 100 + slave.devotion) { + switch (act) { + case oral: + if (slave.energy < 95 && slave.sexualFlaw !== "hates oral") { + mainSpan.append(`Having ${anAnimal} fuck ${his} throat by force has given ${him} a hatred of oral sex. `); + } + slave.sexualFlaw = "hates oral"; + + break; + case vaginal: + if (slave.energy < 95 && slave.sexualFlaw !== "hates penetration") { + mainSpan.append(`Having ${anAnimal} fuck ${him} by force has given ${him} a hatred of penetration. `); + } + slave.sexualFlaw = "hates penetration"; + + break; + case anal: + if (slave.energy < 95 && slave.sexualFlaw !== "hates anal") { + mainSpan.append(`Having ${anAnimal} fuck ${his} asshole by force has given ${him} a hatred of anal penetration. `); + } + slave.sexualFlaw = "hates anal"; + + break; + default: + throw new Error(`Unexpected act type '${act}' in sexEffects().`); + } + } + + return mainSpan; + } + + function cleanUp() { + const + mainSpan = document.createElement("span"), + r = []; + + if (act !== oral) { + if (act === vaginal) { + if (slave.vagina === 3) { + r.push(`${capFirstChar(animal.name)} cum drips out of ${his} fucked-out hole. `); + } else if (slave.vagina === 2) { + r.push(`${capFirstChar(animal.name)} cum drips out of ${his} stretched vagina. `); + } else if (slave.vagina === 1) { + r.push(`${His} still-tight pussy keeps the ${animal.name}'s cum inside ${him}. `); + } else { + r.push(`${capFirstChar(animal.name)} cum slides right out of ${his} gaping hole. `); + } + } else { + if (slave.anus === 1) { + r.push(`${His} still-tight asshole keeps the ${animal.name}'s cum inside ${him}. `); + } else if (slave.anus === 2) { + r.push(`${capFirstChar(animal.name)} cum drips out of ${his} loosened anus. `); + } else { + r.push(`${capFirstChar(animal.name)} cum slides right out of ${his} fucked-out asshole. `); + } + } + + if (canWalk(slave)) { + if (slave.vagina > 0) { + r.push(`${He} uses a quick douche to clean ${his} ${slave.vagina < 2 ? `tight` : slave.vagina > 3 ? `loose` : ``} pussy,`); + } else { + r.push(`${He} uses an enema to clean ${his} ${slave.anus < 2 ? `tight` : slave.anus < 3 ? `used` : `gaping`} butthole,`); + } + + switch (slave.assignment) { + case Job.BROTHEL: + r.push(`just like ${he} does between each customer. `); + break; + case Job.CLUB: + r.push(`just like ${he} does in the club. `); + break; + case Job.DAIRY: + r.push(`to avoid besmirching the nice clean dairy. `); + break; + case Job.FARMYARD: + r.push(`to avoid tainting the food in ${V.farmyardName}. `); + break; + case Job.QUARTER: + r.push(`mostly to keep everything ${he} has to clean from getting any dirtier. `); + break; + case Job.WHORE: + r.push(`before returning to offering it for sale. `); + break; + case Job.PUBLIC: + r.push(`before returning to offering it for free. `); + break; + case Job.REST: + r.push(`before crawling back into bed. `); + break; + case Job.MILKED: + r.push(`${slave.lactation > 0 ? `before going to get ${his} uncomfortably milk-filled tits drained` : `and then rests until ${his} balls are ready to be drained again`}. `); + break; + case Job.HOUSE: + r.push(`since ${his} chores didn't perform themselves while you used ${his} fuckhole. `); + break; + case Job.FUCKTOY: + r.push(`before returning to await your next use of ${his} fuckhole, as though nothing had happened. `); + break; + case Job.SUBORDINATE: + r.push(`though it's only a matter of time before another slave decides to play with ${his} fuckhole. `); + break; + case Job.HEADGIRL: + r.push(`worried that ${his} charges got up to trouble while ${he} enjoyed ${his} ${properMaster()}'s use. `); + break; + case Job.BODYGUARD: + r.push(`so ${he} can be fresh and ready for more sexual use even as ${he} guards your person. `); + break; + case Job.TEACHER: + r.push(`before ${he} returns to teaching ${his} classes. `); + break; + default: + r.push(`before ${he} returns to ${slave.assignment}. `); + break; + } + } + } + + App.Events.addNode(mainSpan, r); + + return mainSpan; + } + + + + // MARK: Virginity Check Functions + + function virginityCheck(type) { + const + mainSpan = document.createElement("span"), + virginityLossSpan = App.UI.DOM.makeElement("span", '', ["virginity", "loss"]); + + switch (type) { + case vaginal: + if (act === vaginal && slave.vagina === 0) { + virginityLossSpan.append(`${his} virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `); + + mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as `, virginityLossSpan, ` `); + + mainSpan.append(virginityEffects(type)); + } + + return mainSpan; + case anal: + if (act === anal && slave.anus === 0) { + mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as ${his} anal virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `); + + mainSpan.append(virginityEffects(type)); + } + + return mainSpan; + default: + throw new Error(`Unexpected type value '${type}' in virginityCheck().`); + } + } + + function virginityEffects(type) { + const + mainSpan = document.createElement("span"), + devotionSpan = document.createElement("span"), + trustSpan = document.createElement("span"), + healthSpan = App.UI.DOM.makeElement("span", '', ["health", "dec"]); + + switch (type) { + case vaginal: + if (slave.devotion >= -20) { + if (slaveApproves()) { + devotionSpan.classList.add("devotion", "inc"); + + devotionSpan.append(`increased ${his} devotion to you. `); + + mainSpan.append(`Losing ${his} virginity in such a painful manner has `, devotionSpan); + + slave.devotion += 10; + } else { + if (slave.devotion > 50) { + devotionSpan.classList.add("devotion", "inc"); + + devotionSpan.append(`increased ${his} submission to you. `); + + mainSpan.append(`Since ${he} is well broken, losing ${his} virginity in such a manner has`, devotionSpan); + + slave.devotion += 5; + } else if (slave.devotion >= -20) { + devotionSpan.classList.add("devotion", "inc"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`increased ${his} submission to you,`); + trustSpan.append(`fearful`); + + mainSpan.append(`Losing ${his} virginity in such a manner has`, devotionSpan, ` though ${he} is `, trustSpan, ` that you'll decide to only use ${him} to sate your animals' lust. `); + + slave.devotion += 5; + slave.trust -= 5; + } else { + devotionSpan.classList.add("devotion", "dec"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`unhappy`); + trustSpan.append(`fears`); + + mainSpan.append(`${He} is clearly `, devotionSpan, ` in the manner in which ${his} virginity has been taken, and ${he} `, trustSpan, ` you'll decide to only use ${him} to sate your animals' lust. `); + + slave.devotion -= 10; + slave.trust -= 10; + } + } + } else { + devotionSpan.classList.add("devotion", "dec"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`reinforced the hatred ${he} holds towards you,`); + trustSpan.append(`terrified`); + + mainSpan.append(`Having ${his} pearl of great price taken by a mere beast has `, devotionSpan, ` and ${he} is `, trustSpan, ` you'll only use ${him} as a plaything for your animals. `); + + slave.devotion -= 10; + slave.trust -= 10; + } + + healthSpan.append(`slightly damaged ${his} health. `); + + mainSpan.append(`Having ${his} cherry popped in such a manner was extremely painful and `, healthSpan); + + healthDamage(slave, 5); + + return mainSpan; + case anal: + if (slave.devotion >= -20) { + if (slaveApproves()) { + devotionSpan.classList.add("devotion", "inc"); + + devotionSpan.append(`increased ${his} devotion to you. `); + + mainSpan.append(`Losing ${his} anal virginity in such a painful manner has `, devotionSpan); + + slave.devotion += 10; + } else { + if (slave.devotion > 50) { + devotionSpan.classList.add("devotion", "inc"); + + devotionSpan.append(`increased ${his} submission to you. `); + + mainSpan.append(`Since ${he} is well broken, losing ${his} anal virginity in such a manner has `, devotionSpan); + + slave.devotion += 5; + } else if (slave.devotion >= -20) { + devotionSpan.classList.add("devotion", "inc"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`increased ${his} submission to you,`); + trustSpan.append(`fearful`); + + mainSpan.append(`Losing ${his} anal virginity in such a manner has `, devotionSpan, ` though ${he} is `, trustSpan, ` that you'll decide to only use ${him} to sate your animals' lust. `); + + slave.devotion += 5; + slave.trust -= 5; + } else { + devotionSpan.classList.add("devotion", "dec"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`unhappy`); + trustSpan.append(`fears`); + + mainSpan.append(`${He} is clearly `, devotionSpan, ` in the manner in which ${his} anal virginity has been taken, and ${he} `, trustSpan, ` you'll decide to only use ${him} to sate your animals' lust. `); + + slave.devotion -= 10; + slave.trust -= 10; + } + } + } else { + devotionSpan.classList.add("devotion", "dec"); + trustSpan.classList.add("trust", "dec"); + + devotionSpan.append(`reinforced the hatred ${he} holds towards you,`); + trustSpan.append(`terrified`); + + mainSpan.append(`Having ${his} pearl of great price taken by a mere beast has `, devotionSpan, ` and ${he} is `, trustSpan, ` you'll only use ${him} as a plaything for your animals. `); + + slave.devotion -= 10; + slave.trust -= 10; + } + + healthSpan.append(`slightly damaged ${his} health. `); + + mainSpan.append(`Having ${his} rosebud broken in in such a manner was extremely painful and `, healthSpan); + + healthDamage(slave, 5); + + return mainSpan; + default: + throw new Error(`Unexpected type value '${type}' in virginityEffects().`); + } + } +}; diff --git a/src/npc/interaction/passage/fAnimalImpreg.tw b/src/npc/interaction/passage/fAnimalImpreg.tw index a1eb7a8b4b6a52586be7357b851673425ce00892..3132a6973e53927841363eee766c7516434fb0af 100644 --- a/src/npc/interaction/passage/fAnimalImpreg.tw +++ b/src/npc/interaction/passage/fAnimalImpreg.tw @@ -2,7 +2,7 @@ <<set $nextButton = "Back", $nextLink = "Slave Interact", $impregnatrix = 0, $eligibility = 0>> -<<set _CL = $canines.length, _HL = $hooved.length, _FL = $felines.length>> +<<set _CL = $canine.length, _HL = $hooved.length, _FL = $feline.length>> <br><br> @@ -13,13 +13,13 @@ __Select an eligible animal to knock $him up:__ /* FIXME: this might not work */ <<for _c = 0; _c < _CL; _c++>> - <<if canBreed(getSlave($AS), $canines[_c])>> - <<if $canines[_c].species != "dog">> - <<set _canine = $canines[_c].species>> + <<if canBreed(getSlave($AS), $canine[_c])>> + <<if $canine[_c].species != "dog">> + <<set _canine = $canine[_c].species>> <<else>> - <<set _canine = $canines[_c].breed>> + <<set _canine = $canine[_c].breed>> <</if>> - <br><<link "Have a _canine knock $him up" "FAnimalImpreg Consummate">><<set $impregnatrix = $canines[_c]>><</link>> + <br><<link "Have a _canine knock $him up" "FAnimalImpreg Consummate">><<set $impregnatrix = $canine[_c]>><</link>> <<set $eligibility = 1>> <</if>> <</for>> @@ -31,13 +31,13 @@ __Select an eligible animal to knock $him up:__ <</if>> <</for>> <<for _f = 0; _f < _fL; _f++>> - <<if canBreed(getSlave($AS), $felines[_f])>> - <<if $felines[_f].species != "cat">> - <<set _feline = $felines[_f].species>> + <<if canBreed(getSlave($AS), $feline[_f])>> + <<if $feline[_f].species != "cat">> + <<set _feline = $feline[_f].species>> <<else>> - <<set _feline = $felines[_f].breed>> + <<set _feline = $feline[_f].breed>> <</if>> - <br><<link "Have a _feline knock $him up" "FAnimalImpreg Consummate">><<set $impregnatrix = $felines[_f]>><</link>> + <br><<link "Have a _feline knock $him up" "FAnimalImpreg Consummate">><<set $impregnatrix = $feline[_f]>><</link>> <<set $eligibility = 1>> <</if>> <</for>> diff --git a/src/personalAssistant/assistantAppearance.js b/src/personalAssistant/assistantAppearance.js index d576991376b0f02d786d5684116151de8bd55466..0ed4db45ecdbb9ccd2eba7fb7c9ec13da44645dd 100644 --- a/src/personalAssistant/assistantAppearance.js +++ b/src/personalAssistant/assistantAppearance.js @@ -27,9 +27,9 @@ globalThis.PersonalAssistantAppearance = function() { r.push(`${V.arcologies[0].FSSubjugationistRace}`); } r.push(`monster ${girlA} with`); - if (V.arcologies[0].FSSupremacist !== "unset" && V.assistant.fsAppearance !== "subjugationist") { + if (V.arcologies[0].FSSupremacist !== "unset" && typeof V.arcologies[0].FSSupremacistRace === "string" && V.assistant.fsAppearance !== "subjugationist") { r.push(randomRaceSkin(V.arcologies[0].FSSupremacistRace)); - } else if (V.assistant.fsAppearance === "subjugationist") { + } else if (V.assistant.fsAppearance === "subjugationist" && typeof V.arcologies[0].FSSubjugationistRace === "string") { r.push(randomRaceSkin(V.arcologies[0].FSSubjugationistRace)); } else { r.push(`pale`); @@ -73,9 +73,9 @@ globalThis.PersonalAssistantAppearance = function() { r.push(`${V.arcologies[0].FSSubjugationistRace}`); } r.push(`bimbo shemale with bleached blonde hair,`); - if (V.arcologies[0].FSSupremacist !== "unset" && V.assistant.fsAppearance !== "subjugationist") { + if (V.arcologies[0].FSSupremacist !== "unset" && typeof V.arcologies[0].FSSupremacistRace === "string" && V.assistant.fsAppearance !== "subjugationist") { r.push(randomRaceSkin(V.arcologies[0].FSSupremacistRace)); - } else if (V.assistant.fsAppearance === "subjugationist") { + } else if (V.assistant.fsAppearance === "subjugationist" && typeof V.arcologies[0].FSSubjugationistRace === "string") { r.push(randomRaceSkin(V.arcologies[0].FSSubjugationistRace)); } else { r.push(`tanned`); @@ -764,7 +764,7 @@ globalThis.PersonalAssistantAppearance = function() { case "roman revivalist": r.push(`${HeA} has ${hisA} toga undone and is absentmindedly jerking off. When ${heA} notices you watching, ${HeA} waves ${hisA} throbbing erection at you, imploring you to finish ${himA} off.`); break; - case "Neo-Imperialist": + case "neoimperialist": r.push(`${HeA}'s stripped off his bodysuit and is absentmindedly jerking off. When ${heA} notices you watching, ${heA} waves ${hisA} throbbing erection at you, imploring you to finish ${himA} off.`); break; case "egyptian revivalist": @@ -989,12 +989,12 @@ globalThis.PersonalAssistantAppearance = function() { /** @type {appearance} */ const fsAppearance = { "normal": { - paternalist: ``, - degradationist: ``, + "paternalist": ``, + "degradationist": ``, supremacist: ``, subjugationist: ``, "roman revivalist": ``, - "Neo-Imperialist": ``, + "neoimperialist": ``, "aztec revivalist": ``, "egyptian revivalist": ``, "edo revivalist": ``, @@ -1002,14 +1002,14 @@ globalThis.PersonalAssistantAppearance = function() { "chinese revivalist": ``, "chattel religionist": ``, "repopulation focus": ``, - eugenics: ``, + "eugenics": ``, "physical idealist": ``, "hedonistic decadence": ``, "gender radicalist": ``, "gender fundamentalist": ``, "asset expansionist": ``, "transformation fetishist": ``, - pastoralist: ``, + "pastoralist": ``, "maturity preferentialist": ``, "youth preferentialist": ``, "slimness enthusiast": ``, @@ -1025,7 +1025,7 @@ globalThis.PersonalAssistantAppearance = function() { supremacist: `${HisA} distinct ${V.arcologies[0].FSSupremacistRace} features are only enhanced by ${hisA} monstrous appearance, and ${heA} has taken to jump-scaring slaves of lesser races when ${heA} isn't too busy with other tasks.`, subjugationist: `${HisA} distinct ${V.arcologies[0].FSSubjugationistRace} features are further exaggerated by ${hisA} monstrous appearance.`, "roman revivalist": `${HeA}'s wearing a conservative stola, which combined with ${hisA} monstrous appearance makes ${himA} look like a Greek demigoddess.`, - "Neo-Imperialist": `${HeA}'s wearing a set of high-tech battle armor, which combined with ${hisA} monstrous appearance makes ${himA} look like some kind of demonic Pagan emperor.`, + "neoimperialist": `${HeA}'s wearing a set of high-tech battle armor, which combined with ${hisA} monstrous appearance makes ${himA} look like some kind of demonic Pagan emperor.`, "aztec revivalist": `${HeA}'s wearing a traditional huipil, a long cape and a headdress, which amplify ${hisA} monstrous visage.`, "egyptian revivalist": `${HeA}'s wearing golden jewelry and a Pharaoh's beard, which combined with ${hisA} animal characteristics makes ${himA} look like an Egyptian deity.`, "edo revivalist": `${HeA}'s given ${hisA} appearance a Japanese style, making ${himA} look like a demon.`, @@ -1056,7 +1056,7 @@ globalThis.PersonalAssistantAppearance = function() { supremacist: `${HeA} remains nude in order to properly display the glory of a superior ${V.arcologies[0].FSSupremacistRace} cock.`, subjugationist: `Like most ${V.arcologies[0].FSSubjugationistRace} subhumans ${heA} has no self-control, and is constantly playing with ${hisA} erect cock and whimpering in needy arousal.`, "roman revivalist": `${HeA}'s taken to reclining on a traditional Roman couch and drinking wine out of a shallow dish.`, - "Neo-Imperialist": `${HeA}'s wearing an extremely tight-fitting bodysuit that emphasizes the bulge of ${hisA} heavy balls and the swell of ${hisA} asscheeks against the skintight nanoweave.`, + "neoimperialist": `${HeA}'s wearing an extremely tight-fitting bodysuit that emphasizes the bulge of ${hisA} heavy balls and the swell of ${hisA} asscheeks against the skintight nanoweave.`, "aztec revivalist": `${HeA}'s wearing a headdress and a loincloth, which can't hide ${hisA} enviable package.`, "egyptian revivalist": `${HeA}'s wearing an Egyptian melting perfume cake on ${hisA} head.`, "edo revivalist": `${HeA}'s wearing a brief Japanese bathhouse robe.`, @@ -1087,7 +1087,7 @@ globalThis.PersonalAssistantAppearance = function() { supremacist: `wearing armor that blends elements from elite warriors of several historically ${V.arcologies[0].FSSupremacistRace} cultures, evoking the glory of ages past.`, subjugationist: `with wild unkempt hair, dressed in ragged animal skins and crude bone jewelry.`, "roman revivalist": `wearing the armor of a Roman auxilia, complete with lorica hamata and oval shield painted with your arcology's symbols.`, - "Neo-Imperialist": `wearing a full set of advanced, powered battle armor, painted in your colors and with the crest of your family displayed prominently over a massive holographic tower shield.`, + "neoimperialist": `wearing a full set of advanced, powered battle armor, painted in your colors and with the crest of your family displayed prominently over a massive holographic tower shield.`, "aztec revivalist": `wearing the battledress of the greatest warriors,${HeA} stands incredibly imposing, holding a spear and shield.`, "egyptian revivalist": `wearing a simple white linen dress, kohl eye shadow, and sandals, making ${himA} look like a barbarian immigrant to the land of the Nile.`, "edo revivalist": `wearing a Japanese warrior's robe with a pair of swords tucked into its sash.`, @@ -1118,7 +1118,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `wearing a perfectly-tailored suit. ${HeA} has two different tones ${heA} uses when speaking: a respectful one for talking with ${hisA} ${V.arcologies[0].FSSupremacistRace} equals, and a strict domineering one for interacting with the lesser races.`, "subjugationist": `wearing a nice, slightly-used suit. ${HeA} speaks with a stereotypical ${V.arcologies[0].FSSubjugationistRace} voice, but is otherwise the model of a perfect subservient secretary.`, "roman revivalist": `wearing a fine stola appropriate for a respectable Roman lady, with ${hisA} hair up in a complicated style.`, - "Neo-Imperialist": `wearing an elegant black suit tailored perfectly for ${hisA} holographic body, one that you recognize as being the latest in old-world fashion.`, + "neoimperialist": `wearing an elegant black suit tailored perfectly for ${hisA} holographic body, one that you recognize as being the latest in old-world fashion.`, "aztec revivalist": `wearing a modest huipil,${hisA} hair braided to two ponytails, ${HeA}'s the picture of quiet elegance.`, "egyptian revivalist": `wearing a simple white linen dress, kohl eye shadow, sandals, and a serene expression.`, "edo revivalist": `wearing a fine kimono, getae, tabi, and an expression of perfect serenity.`, @@ -1150,7 +1150,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `with swollen breasts and a big pregnant belly. ${HeA} wears a golden tiara on ${hisA} head, and ${hisA} otherwise nude form is a shining example of the ${V.arcologies[0].FSSupremacistRace} race's divine beauty.`, "subjugationist": `with swollen hips and breasts and a huge pregnant belly. ${HeA}'s nude aside from a crown of wilted flowers and the iron shackles on ${hisA} wrists and ankles.`, "roman revivalist": `with swollen hips and a big pregnant belly. ${HeA}'s clothed in a loose stola, with dozens of flowers woven into ${hisA} curly auburn hair.`, - "Neo-Imperialist": `with a heaving, pregnant belly. The crest of your family is emblazoned over ${hisA} womb, as if the unborn child is already your property.`, + "neoimperialist": `with a heaving, pregnant belly. The crest of your family is emblazoned over ${hisA} womb, as if the unborn child is already your property.`, "aztec revivalist": `glowing like a sun goddess,${hisA} full belly commands awe and respect in all who see ${himA}.`, "egyptian revivalist": `wielding an ankh-headed staff. ${HeA}'s wearing a gilded headdress and linen skirt, but leaves ${hisA} breasts and pregnant stomach bare to gleam like bronze.`, "edo revivalist": `${HisA} swollen hips and pregnant belly loosely wrapped in a red tomesode. ${HisA} waterfall of black hair is held by a comb shaped like big pointed fox ears.`, @@ -1183,7 +1183,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `${HeA} is nude except for a golden tiara on ${hisA} head, a symbol of the ${V.arcologies[0].FSSupremacistRace} race's divine right to rule. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy ${V.arcologies[0].FSSupremacistRace} baby.`, "subjugationist": `${HeA} is shackled onto a large bed, the iron chains forcing ${hisA} legs apart and putting ${hisA} gaping pussy on display. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy ${V.arcologies[0].FSSubjugationistRace} slave baby.`, "roman revivalist": `${HeA}'s taken to reclining on a traditional Roman couch and drinking wine out of a shallow dish. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy baby.`, - "Neo-Imperialist": `${HeA}'s made ${himselfA} up like a glowing goddess, a golden halo surrounding ${hisA} head at all times. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy baby.`, + "neoimperialist": `${HeA}'s made ${himselfA} up like a glowing goddess, a golden halo surrounding ${hisA} head at all times. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy baby.`, "aztec revivalist": `${HeA} glows like a sun goddess, ${hisA} life-giving belly commands awe and respect in all who see ${himA}. Every sacrifice before ${himA} coincides with another life entering the world.`, "egyptian revivalist": `${HeA}'s wearing an Egyptian melting perfume cake on ${hisA} head. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy baby.`, "edo revivalist": `${HeA}'s wearing a brief Japanese bathhouse robe. Occasionally a stream of liquid pours from ${hisA} crotch along with a healthy baby.`, @@ -1222,7 +1222,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `wearing a plaid skirt and a white shirt. ${HeA} is constantly taking notes and studying the latest textbooks, satisfying the ${V.arcologies[0].FSSupremacistRace} race's thirst for knowledge.`, "subjugationist": `wearing a plaid skirt and a white shirt. ${HeA} speaks with a stereotypical ${V.arcologies[0].FSSubjugationistRace} accent, giving the impression of a foreign exchange student with much to learn.`, "roman revivalist": `wearing a ${girlA}'s stola, with ${hisA} hair pulled up into a proper upper-class Roman coiffure. ${HeA} usually carries a wax tablet and a stylus.`, - "Neo-Imperialist": `wearing a prim and proper school uniform, with your family crest on ${hisA} breast pocket. ${HisA} short plaid skirt occasionally flips up to flash a hint of ${hisA} holographic panties.`, + "neoimperialist": `wearing a prim and proper school uniform, with your family crest on ${hisA} breast pocket. ${HisA} short plaid skirt occasionally flips up to flash a hint of ${hisA} holographic panties.`, "aztec revivalist": `wearing only an overshirt,${hisA} cute little legs are complimented by ${hisA} twin tails.`, "egyptian revivalist": `wearing a simple white linen skirt, kohl eye shadow, sandals, and no top at all, baring ${hisA} perky young breasts.`, "edo revivalist": `wearing a simple robe appropriate for a proper, traditional Japanese lady.`, @@ -1252,7 +1252,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `${girlA} wearing shorts and a pink t-shirt with the words '${properMaster()}'s little ${V.arcologies[0].FSSupremacistRace} princess' on the front.`, "subjugationist": `slave ${girlA} wearing nothing but a leather collar and trying ${hisA} best to do master proud.`, "roman revivalist": `${girlA} wearing a ${girlA}'s stola.`, - "Neo-Imperialist": `${girlA} wearing a tiny elementary schooler's uniform, complete with miniature plaid skirt.`, + "neoimperialist": `${girlA} wearing a tiny elementary schooler's uniform, complete with miniature plaid skirt.`, "aztec revivalist": `${girlA} wearing only an overshirt; ${hisA} cute little legs are complimented by ${hisA} twin tails.`, "egyptian revivalist": `${girlA} wearing a simple white linen dress, kohl eye shadow and sandals.`, "edo revivalist": `${girlA} wearing a kimono far too large for ${himselfA}.`, @@ -1283,7 +1283,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `belly wearing a cute yellow dress. ${HeA} cradles ${hisA} swollen belly protectively, glowing with pride at carrying a ${V.arcologies[0].FSSupremacistRace} child.`, "subjugationist": `belly, wearing nothing but a pregnancy biometrics collar. The collar's display reads 'Carrying 2 more ${V.arcologies[0].FSSubjugationistRace} subhumans!', something the ${girlA} occasionally reads aloud to ${himselfA}.`, "roman revivalist": `belly wearing a ${girlA}'s stola.`, - "Neo-Imperialist": `${girlA} wearing a tiny elementary schooler's uniform, complete with miniature plaid skirt. ${HisA} belly swells underneath the cotton shirt.`, + "neoimperialist": `${girlA} wearing a tiny elementary schooler's uniform, complete with miniature plaid skirt. ${HisA} belly swells underneath the cotton shirt.`, "aztec revivalist": `belly wearing only an overshirt which struggles to cover ${hisA} rounded middle; ${hisA} cute little legs are complimented by ${hisA} twin tails.`, "egyptian revivalist": `belly wearing a bulging white linen dress, kohl eye shadow and sandals.`, "edo revivalist": `belly wearing a kimono far too large for ${himselfA} but does nothing to distract from ${hisA} swollen midriff.`, @@ -1316,7 +1316,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `fairy with distinctly ${V.arcologies[0].FSSupremacistRace} features. ${HeA} has wrapped a golden ribbon around ${hisA} torso to fashion ${himselfA} a dress.`, "subjugationist": `fairy with exaggerated ${V.arcologies[0].FSSubjugationistRace} features. ${HeA} is completely unclothed, with ${hisA} hair in a mess and covered in dirt.`, "roman revivalist": `fairy wearing a small handkerchief wrapped around ${himA} like a toga, with one tiny breast sticking out. A wreath made of twisted clovers sits on ${hisA} head.`, - "Neo-Imperialist": `fairy, ${hisA} tiny body encased in a tight-fitting, high-tech bodysuit.`, + "neoimperialist": `fairy, ${hisA} tiny body encased in a tight-fitting, high-tech bodysuit.`, "aztec revivalist": `fairy, yellow paint creating tribal patterns across ${hisA} naked form.`, "egyptian revivalist": `fairy wearing a simple white linen dress and has eye shadow poorly applied around ${hisA} eyes.`, "edo revivalist": `fairy wearing a fine kimono and holding a little fan. ${HeA} looks like a little Hina doll.`, @@ -1347,7 +1347,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `and distinctly ${V.arcologies[0].FSSupremacistRace} features. ${HeA} has wrapped a golden ribbon around ${hisA} chest to create an improvised bra, and another under ${hisA} swollen belly to fashion a thong.`, "subjugationist": `and exaggerated ${V.arcologies[0].FSSubjugationistRace} features. ${HeA} is completely unclothed, with ${hisA} hair in a mess and covered in dirt.`, "roman revivalist": `wearing a small handkerchief wrapped around ${himA} like a toga, with one tiny milky breast sticking out. A wreath made of twisted clovers sits on ${hisA} head.`, - "Neo-Imperialist": `fairy, ${hisA} tiny body encased in a tight-fitting, high-tech bodysuit. ${HisA} belly swells underneath the skintight material.`, + "neoimperialist": `fairy, ${hisA} tiny body encased in a tight-fitting, high-tech bodysuit. ${HisA} belly swells underneath the skintight material.`, "aztec revivalist": `yellow paint creating tribal patterns across ${hisA} naked form and curving around ${hisA} swollen belly.`, "egyptian revivalist": `wearing a simple white linen dress and has eye shadow poorly applied around ${hisA} eyes.`, "edo revivalist": `wearing a fine kimono and holding a little fan. ${HeA} looks like a little Hina doll.`, @@ -1376,7 +1376,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `slime. ${HeA} keeps trying to shape ${hisA} goo into a beautiful ${V.arcologies[0].FSSupremacistRace} ${girlA}, but ${heA} hasn't quite perfected the finer details yet.`, "subjugationist": `slime. ${HeA} keeps trying to shape ${hisA} goo into a pretty face, but keeps ending up with over-exaggerated ${V.arcologies[0].FSSubjugationistRace} features instead.`, "roman revivalist": `slime with a ${girlA}'s stola sinking into ${hisA} head.`, - "Neo-Imperialist": `slime wearing a high-class suit that fits loosely around ${hisA} gelatinous features, occasionally slipping inside the slime.`, + "neoimperialist": `slime wearing a high-class suit that fits loosely around ${hisA} gelatinous features, occasionally slipping inside the slime.`, "egyptian revivalist": `slime and quite perturbed about the amount of sand caught in ${himA}.`, "edo revivalist": `slime with a silken kimono floating inside ${himA}.`, "arabian revivalist": `slime with a headscarf and a pair of sunglasses floating inside ${himA}.`, @@ -1408,7 +1408,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `${HeA} cycles between different outfits that reflect the various holy garments of religions popular in ${V.arcologies[0].FSSupremacistRace} countries.`, "subjugationist": `${HeA} is wearing a simple white linen dress, and ${hisA} right ankle is shackled to an iron ball and chain that prevents ${himA} from flying very high.`, "roman revivalist": `${HeA} is wearing a fine stola appropriate for a respectable Roman lady, with ${hisA} hair up in a complicated style.`, - "Neo-Imperialist": `${HeA} is wearing a skintight bodysuit that gives ${himA} the appearance of some kind of techno-angel, cybernetics and angelic beauty meshing seamlessly together.`, + "neoimperialist": `${HeA} is wearing a skintight bodysuit that gives ${himA} the appearance of some kind of techno-angel, cybernetics and angelic beauty meshing seamlessly together.`, "aztec revivalist": `${HeA} is wearing a modest huipil with ${hisA} hair braided to two ponytails; ${HeA}'s the picture of quiet elegance.`, "egyptian revivalist": `${HeA} is wearing a simple white linen dress, kohl eye shadow, sandals, and a serene expression.`, "edo revivalist": `${HeA} is wearing a fine kimono with slits for ${hisA} wings, getae, tabi, and an expression of perfect serenity.`, @@ -1448,7 +1448,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `${HeA} is wearing a cute little dressed stitched with designs from ${V.arcologies[0].FSSupremacistRace} culture. Occasionally you get a glance up it; a white pair of panties with similar designs say hello.`, "subjugationist": `${HeA} is shackled to an iron ball and chain that's almost as big as ${heA} is, and ${heA} has to slowly and comically drag it behind ${himA} to get anywhere. Occasionally ${heA} tumbles over in ${hisA} struggles, flipping ${hisA} white linen dress up and treating you to a good look at ${hisA} panties.`, "roman revivalist": `${HeA} is wearing a cute little tunic. Occasionally you get a glance up it; a cute little pussy says hello.`, - "Neo-Imperialist": `${HeA} is wearing a tiny executive skirt that mixes cute and professional. ${HeA}'s obviously not wearing any panties underneath.`, + "neoimperialist": `${HeA} is wearing a tiny executive skirt that mixes cute and professional. ${HeA}'s obviously not wearing any panties underneath.`, "aztec revivalist": `${HeA} is wearing a huipil with ${hisA} hair braided to two ponytails. You can clearly see through the sides that ${heA} has chosen to forgo underwear.`, "egyptian revivalist": `${HeA} is wearing a simple white linen dress, kohl eye shadow, and a serene expression. ${HisA} dress hangs low enough to block your view, unfortunately.`, "edo revivalist": `${HeA} is wearing a cute little kimono with slits for ${hisA} wings. Occasionally you get a glance up it; a lovely pair of panties say hello.`, @@ -1488,7 +1488,7 @@ globalThis.PersonalAssistantAppearance = function() { }, "subjugationist": `${HisA} cartoonishly exaggerated ${V.arcologies[0].FSSubjugationistRace} body is just begging for a whipping, even when ${heA} isn't doing something mischievous and sneaky, which is rare.`, "roman revivalist": `${HeA}'d fit in perfectly tormenting the condemned in Tartarus.`, - "Neo-Imperialist": `${HeA}'s bound himself up with high-tech holographic chains, reminiscent of a slave locked in your cellblocks with ${hisA} devilish features.`, + "neoimperialist": `${HeA}'s bound himself up with high-tech holographic chains, reminiscent of a slave locked in your cellblocks with ${hisA} devilish features.`, "aztec revivalist": `${HeA}'s taken to carrying a pair of ceremonial daggers perfect for bloodletting and even an impromptu sacrifice. Two things ${heA} really enjoys performing.`, "egyptian revivalist": `${HeA} has recently adjusted ${hisA} appearance to resemble an Egyptian slave; that combined with a manufactured rebellious streak are sure to earn ${himA} a whipping.`, "edo revivalist": `${HeA} has tightly bound ${himselfA} in shibari ropes, although they don't achieve much given ${heA} can still fly freely.`, @@ -1529,7 +1529,7 @@ globalThis.PersonalAssistantAppearance = function() { }, "subjugationist": `${HeA} still hasn't managed to undo the spell; ${HeA} looks like a racist caricature of a ${V.arcologies[0].FSSubjugationistRace} ${girlA}, and has an appropriately demeaning accent to match. What's worse, the spell also seems to have stripped most of ${hisA} literacy in ${V.language}, making reading ${hisA} tomes an arduous task for ${himA}.`, "roman revivalist": `While ${heA} acts like a typical Roman ${womanA}, ${HeA} is pretty obviously Greek. ${HeA} can't even name the Pantheon correctly.`, - "Neo-Imperialist": `${HeA} looks like someone you would find selling "magical tokens" on the side of your neon-bathed streets, cybernetic trinkets adorning ${hisA} whole body.`, + "neoimperialist": `${HeA} looks like someone you would find selling "magical tokens" on the side of your neon-bathed streets, cybernetic trinkets adorning ${hisA} whole body.`, "aztec revivalist": `${HeA} is still very obviously not a native and has become rather caught up in the fear that ${heA}'ll soon be sacrificed.`, "egyptian revivalist": `${HeA}'s managed to untangle ${himselfA} from the wrappings, though ${heA} has chosen to leave several still wrapped around ${hisA} body.`, "edo revivalist": `${HeA}'s managed to correct the spell, somewhat, though ${heA} now resembles something that belongs in a hentai.`, @@ -1577,7 +1577,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `wearing nothing at all. ${HeA} looks vaguely ${V.arcologies[0].FSSupremacistRace}, but wrong. You swear you see patches of fish-like scales on ${hisA} skin, but they keep disappearing whenever you try to focus on them.`, "subjugationist": `wearing nothing at all. ${HeA} looks vaguely ${V.arcologies[0].FSSubjugationistRace}, but wrong. You swear you see patches of fish-like scales on ${hisA} skin, but they keep disappearing whenever you try to focus on them.`, "roman revivalist": `wearing a poorly folded toga. You swear you see movement under ${hisA} skin.`, - "Neo-Imperialist": `wearing a tight-fitting bodysuit that you swear moves in unsettling ways. Is the bodysuit moving, or the skin underneath?`, + "neoimperialist": `wearing a tight-fitting bodysuit that you swear moves in unsettling ways. Is the bodysuit moving, or the skin underneath?`, "aztec revivalist": `wearing a torn huipil. ${HeA} looks vaguely Aztec, but wrong. You swear you see movement under ${hisA} skin.`, "egyptian revivalist": `wearing nothing at all. ${HeA} looks vaguely Egyptian, but wrong. You swear you see movement under ${hisA} skin.`, "edo revivalist": `wearing a loose kimono. ${HeA} looks vaguely Japanese, but wrong. You swear you see movement under ${hisA} skin.`, @@ -1626,7 +1626,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `${HeA} is an ideal ${V.arcologies[0].FSSupremacistRace} man, and ${hisA} massive dick is always hard and ready to continue propagating the master race.`, "subjugationist": `${HeA} is a deceptively handsome ${V.arcologies[0].FSSubjugationistRace} man, and gives off an air of lust and danger that serves as a warning to not let the inferior race's libido run unchecked.`, "roman revivalist": `${HeA} is an ideal Roman man, complete with something big and heavy hanging under ${hisA} toga.`, - "Neo-Imperialist": `${HeA} looks like an ideal Imperial Knight, wearing tight leather pants and a nanoweave shirt that fail to contain both his rippling pectorals and the outline of a massive cock.`, + "neoimperialist": `${HeA} looks like an ideal Imperial Knight, wearing tight leather pants and a nanoweave shirt that fail to contain both his rippling pectorals and the outline of a massive cock.`, "aztec revivalist": `${HeA} is an ideal Aztec man wearing a headdress and a loincloth, which can't hide ${hisA} enviable package.`, "egyptian revivalist": `${HeA} is an ideal Egyptian man, complete with something big and heavy dangling behind ${hisA} loincloth.`, "edo revivalist": `${HeA} is an ideal Japanese man, complete with something big and heavy between ${hisA} legs.`, @@ -1696,7 +1696,7 @@ globalThis.PersonalAssistantAppearance = function() { "supremacist": `In fact,${HeA} is the most gorgeous ${V.arcologies[0].FSSupremacistRace} ${womanA} you've ever seen.`, "subjugationist": `In fact,${HeA} is the most gorgeous ${V.arcologies[0].FSSubjugationistRace} ${womanA} you've ever seen.`, "roman revivalist": `In fact,${HeA} is the most gorgeous Roman ${womanA} you've ever seen.`, - "Neo-Imperialist": `In fact,${HeA} is the most gorgeous Imperial ${womanA} you've ever seen.`, + "neoimperialist": `In fact,${HeA} is the most gorgeous Imperial ${womanA} you've ever seen.`, "aztec revivalist": `In fact,${HeA} is the most gorgeous Aztec ${womanA} you've ever seen.`, "egyptian revivalist": `In fact,${HeA} is the most gorgeous Egyptian ${womanA} you've ever seen.`, "edo revivalist": `In fact,${HeA} is the most gorgeous Japanese ${womanA} you've ever seen.`, diff --git a/src/personalAssistant/assistantOptions.tw b/src/personalAssistant/assistantOptions.tw index 53391efb4e8c7054ce630d0f7cf8ad3e0f54c873..8ed1c0231b2dd8748f33ef93d4cc3891eea400ef 100644 --- a/src/personalAssistant/assistantOptions.tw +++ b/src/personalAssistant/assistantOptions.tw @@ -1057,8 +1057,8 @@ Seated at your desk, you glance at the visual representation of [[Roman Revivalist|Personal assistant options][$assistant.fsAppearance = "roman revivalist"]] <br> <</if>> - <<if $assistant.fsAppearance != "Neo-Imperialist" && $arcologies[0].FSNeoImperialistDecoration > 20>> - [[Neo-Imperialist|Personal assistant options][$assistant.fsAppearance = "Neo-Imperialist"]] + <<if $assistant.fsAppearance != "neoimperialist" && $arcologies[0].FSNeoImperialistDecoration > 20>> + [[Neo-Imperialist|Personal assistant options][$assistant.fsAppearance = "neoimperialist"]] <br> <</if>> <<if $assistant.fsAppearance != "aztec revivalist" && $arcologies[0].FSAztecRevivalistDecoration > 20>> diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js index f5371f36de922420fce09381cb6df29360d7b44d..1cbe58b92443625649cea44c452c4de90faba9eb 100644 --- a/src/player/js/PlayerState.js +++ b/src/player/js/PlayerState.js @@ -1672,7 +1672,7 @@ App.Entity.PlayerState = class PlayerState { polyhydramnios: 0, /** Pleasurable pregnancy and orgasmic birth. Wider hips, looser and wetter vagina. High pregadaptation and low birth damage. */ uterineHypersensitivity: 0, - /** inapropriate lacation*/ + /** inappropriate lactation*/ galactorrhea: 0, /** is abnormally tall. gigantism + dwarfism - is very average*/ gigantism: 0, diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js index c7f0116fd1bb45323ef203518dceb71ee60e5116..9a69c562ac6bec7906264c3ce5b0ae9102e67934 100644 --- a/src/pregmod/FCTV/FCTVshows.js +++ b/src/pregmod/FCTV/FCTVshows.js @@ -616,7 +616,7 @@ App.Data.FCTV.channels = { if (V.PC.skill.medicine === 100) { r.push(`You vaguely recognize both of them from your time studying medicine.`); } - r.push(`</p><p>One of them continues the conversation, apparently answering a question. "That's right, the results of our research tell us what everyone already suspected, but now with an indisputable weight of evidence behind it." The other nods and continues, "our meta analysis examines over two decades of data, and nearly 6000 independent studies. We can safely say that free city slaves are healthier than the average person living anywhere in the old world. While a few of the wealthiest countries of the old world may surpass one or two areas, our slaves have better nutrition, standard of living, are more psychologically stable, have longer lives, and are happier on average as well." The first gentleman interjects, "We even found strong evidence that the higher sexual tempo and libido-stimulating training given to sex slaves greatly contributes to their life span; they live even longer than the average slave, and even look younger than their age."</p>`); + r.push(`</p><p>One of them continues the conversation, apparently answering a question. "That's right, the results of our research tell us what everyone already suspected, but now with an indisputable weight of evidence behind it." The other nods and continues, "our meta analysis examines over two decades of data, and nearly 6,000 independent studies. We can safely say that free city slaves are healthier than the average person living anywhere in the old world. While a few of the wealthiest countries of the old world may surpass one or two areas, our slaves have better nutrition, standard of living, are more psychologically stable, have longer lives, and are happier on average as well." The first gentleman interjects, "We even found strong evidence that the higher sexual tempo and libido-stimulating training given to sex slaves greatly contributes to their life span; they live even longer than the average slave, and even look younger than their age."</p>`); r.push(`<p>The camera switches back to the two anchors, showing an excited Jules hefting and bouncing her tits. "They've barely sagged at all since they stopped growing, now I know why!"</p>`); r.push(`<p>As the AnchorSlave continues to squeeze, one of the researchers answers from off camera. "That's right, it can be rather amazing. To tell you the truth, we didn't believe it at first, but the evidence made it too hard to ignore." Jules starts looking toward the backstage area trying to signal someone as the other researcher continues. "It's also important not to wear a bra unless you're doing high-impact cardio. We've known since the mid 20th century that wearing bras causes sagging; bras devastate the breasts of`); if (V.seePreg === 0) { @@ -1780,7 +1780,7 @@ App.Data.FCTV.channels = { r.push(`<p>Scott patted her head and pulled her into a hug. "Honesty is to be rewarded." Her body shuddered with suppressed sobs. June caught his eye over Cathy's shoulder and gave him an uncertain look. He shook his head slightly and gave her a thumbs up. She nodded slightly and quietly left the aisle. Cathy sniffed and mumbled into his chest, "I miss my mom." He rubbed slow circles in back and said softly, "I know, I know."</p>`); r.push(`<p>After her sobs subsided, the pair continued hugging in silence for a moment before separating. Cathy rubbed her eyes and sniffed, attempting to regain her composure. "So what happens now?" Scott quirked an eyebrow, "For now, we finish shopping and head on home." He looked up and down the aisle. "Provided that we can find where June wandered off to." A soft sigh escaped her throat. "That's not what I meant." She gave him a steady look. "What's the next step to getting my mom back?"</p>`); r.push(`<p>Scott considered her for a moment before responding. "For now, you'll continue your drug regimen and etiquette lessons." He gave her breasts a poke. "Your milk hasn't come in so we can't start that training or begin selling your milk, but there are things you can do." He drummed out a little beat on her breasts. "Now that you're big enough to not get stopped when you walk down the street, you could start working here." An impish grin spread over his face. "I'm sure Martha would enjoy having you around." Cathy flushed and let out a small huff. His grin widened.</p>`); - r.push(`<p>He groped her slowly as he thought. "As for getting your mom, considering who your mother was, her price is bound to be exorbitant. Even if I got a sweetheart rate." He brushed a lock of her hair behind her ear. "But we're inno rush. Her current owner is treating her rather well and seems fond of her, so he probably won't randomly sell her off." A mild frown spread across his face. "The downside of that is it will take even more money or favors to get him to part with her, but we'll cross that bridge when we get to it."</p>`); + r.push(`<p>He groped her slowly as he thought. "As for getting your mom, considering who your mother was, her price is bound to be exorbitant. Even if I got a sweetheart rate." He brushed a lock of her hair behind her ear. "But we're in no rush. Her current owner is treating her rather well and seems fond of her, so he probably won't randomly sell her off." A mild frown spread across his face. "The downside of that is it will take even more money or favors to get him to part with her, but we'll cross that bridge when we get to it."</p>`); r.push(`<p>As he spoke, Cathy's expression became more and more disheartened. Scott smiled reassuringly, "Don't worry about it. I have a plan to make you so profitable you could buy your mom a dozen times over." She nodded, but didn't look entirely reassured. "You've already made a fair bit of progress today" he said, his smile bright. "What do you mean?" her face had the expression of a wary kitten expecting the roar of vacuum cleaner. "You didn't freak out when I touched your breasts." He gave them a squeeze for emphasis. She looked conflicted and seemed on the verge of saying something, but decided against it. "Anyway, we should find June and head on out." He patted her butt, saying "Come along" and set out to find June with Cathy in tow.</p>`); r.push(`<p>It didn't take too long to find her. After passing a display of plushie cowslaves playing in a pool, they walked into an aisle devoted to greeting cards and other printed media. The various cards bore animated scenes catering to various situations. One card depicted a busty woman losing power to her exosuit, being pulled to the ground by her own breasts and a small group comes by to help her up. The words flowing across the card said 'We know you've fallen on hard times, but we'll always be there to support you' in a wavy font. The other side of the aisle bore a number of coloring books plastered with pictures of famous cows, magazines devoted to various tastes, and paperback erotica, some written by store employees. And hunched over by the magazines was June.</p>`); r.push(`<p>She was engrossed in reading an issue of Cow's Life. The cover had a looping video of a blonde cow spraying milk and making bedroom eyes at the viewer. The headline of the issue was an interview with Alexis Cream, the first cow in space. In smaller text were headlines like 'Five nipple stimulation methods guaranteed to increase lactation!', 'Finding the right cleavage vibrator for you', 'The new frontier of breast sex'. June seemed to have ignored the magazine's other offerings in favor of a review of a new model of mobile milker that promised to provide endless breastgasms.</p>`); diff --git a/src/pregmod/beastFucked.tw b/src/pregmod/beastFucked.tw index 28026360578f231fba9eddc8a6a8d3dba52f2719..29e64e842d9b31af59617d31a2bbf8291313915d 100644 --- a/src/pregmod/beastFucked.tw +++ b/src/pregmod/beastFucked.tw @@ -1,477 +1,3 @@ :: BeastFucked [nobr] -<<run App.Utils.setLocalPronouns($activeSlave)>> - -<<if $animalType == "canine">> - <<set _animal = $activeCanine>> -<<elseif $animalType == "hooved">> - <<set _animal = $activeHooved>> -<<elseif $animalType == "feline">> - <<set _animal = $activeFeline>> -<</if>> - -/* add any animal species that begin with a vowel here */ -<<switch _animal.species>> -<<default>> - <<set _a = "a">> -<</switch>> - -<<if canDoVaginal($activeSlave)>> - <<set _sexAct = "vaginal">> - <<set _orifice = "pussy">> - <<set _hole = 0>> -<<elseif canDoAnal($activeSlave)>> - <<set _sexAct = "anal">> - <<set _orifice = "asshole">> - <<set _hole = 1>> -<<else>> - <<set _sexAct = "oral">> - <<set _orifice = "mouth">> -<</if>> - -<<set _used = {mouth: 0, vagina: 0, anus: 0}>> -<<if $activeSlave.vagina > 0>> - <<set _used.vagina = 1>> -<</if>> -<<if $activeSlave.anus > 0>> - <<set _used.anus = 1>> -<</if>> -<<if $activeSlave.counter.oral > 0>> - <<set _used.mouth = 1>> -<</if>> - -<<if $activeSlave.fetish == "masochist">> - <<set _fetishDesc = "committing such a painful act", _activeQuirk = 1, _quirk = 1>> -<<elseif $activeSlave.fetish == "humiliation">> - <<set _fetishDesc = "committing such a humiliating act", _activeQuirk = 1, _quirk = 1>> -<<elseif $activeSlave.sexualQuirk == "perverted">> - <<set _fetishDesc = "committing such a perverted act", _activeQuirk = 1, _quirk = 1>> -<<elseif $activeSlave.behavioralQuirk == "sinful">> - <<set _fetishDesc = "committing such a sinful act", _activeQuirk = 1, _quirk = 1>> -<<elseif $activeSlave.fetish == "cumslut">> - <<set _fetishDesc = "getting to drink more cum", _activeQuirk = 1, _quirk = 2>> -<<elseif $activeSlave.sexualQuirk == "gagfuck queen">> - <<set _fetishDesc = "getting to suck more dick", _activeQuirk = 1, _quirk = 2>> -<</if>> - -<<if canWalk($activeSlave)>>You call $him over and<<else>>You order another slave to bring $activeSlave.slaveName over. Once $he is situated, you<</if>> tell $him you want to watch $him <<switch _sexAct>><<case "oral">>suck off<<default>>get fucked by<</switch>> <<print _a>> _animal.species. - -<<if ($activeSlave.fetish != "mindbroken")>> - <<if ($activeSlave.devotion > 50)>> - <<if _sexAct == "vaginal" || _sexAct == "anal">> - <<if _used.vagina || _used.anus>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName's face visibly brightens at the thought of _fetishDesc. - <<else>> - $activeSlave.slaveName looks visibly disturbed, but is so attentive to your will that $he quickly agrees. - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName's face visibly brightens at the thought of _fetishDesc, although $he seems a bit hesitant at the thought of giving $his <<if _sexAct == "anal">>anal <</if>>virginity to an animal. - <<else>> - $activeSlave.slaveName looks visibly shaken at the thought of having $his precious <<if _sexAct == "anal">>anal <</if>>virginity taken by an animal, but is so attentive to your will that $he agrees. - <</if>> - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk && _quirk == 2>> - $activeSlave.slaveName's face visibly brightens at the thought of _fetishDesc, even if it's <<print _a>> _animal.species's cum. - <<else>> - $activeSlave.slaveName blanches at the thought of having to suck <<print _a>> _animal.species's dick, but $he is so devoted to you that $he reluctantly agrees. - <</if>> - <</if>> - <</if>> - - <<if ($activeSlave.devotion > 20) && ($activeSlave.devotion <= 50)>> - <<if _sexAct == "vaginal" || _sexAct == "anal">> - <<if _used.vagina || _used.anus>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName isn't too keen on the idea of fucking <<print _a>> _animal.species, but the thought of _fetishDesc soon convinces $him to comply. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror, but quickly regains $his composure. - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName clearly has some reservations about having $his <<if _sexAct == "anal">>anal <</if>>virginity taken by <<print _a>> _animal.species, but the thought of _fetishDesc soon convinces $him to comply. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror at the thought of having $his <<if _sexAct == "anal">>rosebud<<else>>pearl<</if>> taken by a beast, but quickly regains $his composure. - <</if>> - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk && _quirk == 2>> - $activeSlave.slaveName isn't too keen on the idea of sucking off <<print _a>> _animal.species, but the thought of _fetishDesc soon convinces $him to comply. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror, but quickly regains $his composure. - <</if>> - <</if>> - <</if>> - - <<if ($activeSlave.devotion >= -20) && ($activeSlave.devotion <= 20)>> - <<if _sexAct == "vaginal" || _sexAct == "anal">> - <<if _used.vagina || _used.anus>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName looks disgusted at the thought of fucking <<print _a>> _animal.species at first, but the thought of the _fetishDesc that comes with it seems to spark a small flame of lust in $him. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror, - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk>> - $activeSlave.slaveName looks disgusted at the thought of giving up $his <<if _sexAct == "anal">>anal <</if>>virginity to <<print _a>> _animal.species, but the thought of _fetishDesc it soon sparks a small flame of lust in $him. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror at the thought of giving $his <<if _sexAct == "anal">>anal <</if>>virginity to an animal, and only the threat of a far worse punishment keeps $him from running out of the room. - <</if>> - <</if>> - <<else>> - <<if $activeSlave.fetishKnown == 1 && _activeQuirk && _quirk == 2>> - $activeSlave.slaveName looks disgusted at the thought of sucking off <<print _a>> _animal.species at first, but the thought of _fetishDesc seems to spark a small flame of lust in $him. - <<else>> - $activeSlave.slaveName tries in vain to conceal $his horror, - <</if>> - <</if>> - <</if>> - - <<if ($activeSlave.devotion < -20)>> - $activeSlave.slaveName's face contorts into a mixture of <<if ($activeSlave.devotion < -50)>>hatred, anger, and disgust, <<else>>anger and disgust, <</if>> - <</if>> - -<<else>> - $activeSlave.slaveName nods $his head dumbly, $his eyes vacant<<if !canSee($activeSlave)>> as always<</if>>. -<</if>> - -<<if canWalk($activeSlave)>> - <<if $activeSlave.devotion >= -20>> - <<if ($activeSlave.devotion <= 20)>> - and only the threat of worse punishment prevents $him from running out of the room. - <</if>> - You have $him <<if ($activeSlave.clothes != "no clothing") && (_sexAct != "oral")>>take off $his clothing, then <</if>><<if _sexAct == "oral">>lay <<else>>kneel <</if>>down on the floor <<if _sexAct != "oral">>with $his ass in the air<<else>>on $his back<</if>> - <<else>> - and _S.Bodyguard.slaveName has to physically prevent $him from running out of the room<<if random(1,100) > 75>><<set $activeSlave.minorInjury = either("black eye", "bruise", "split lip")>>, resulting in a $activeSlave.minorInjury. <<else>>. <</if>>You <<if ($activeSlave.clothes != "no clothing")>>force $him to take off $his $activeSlave.clothes and <</if>>restrain $him on the floor <<if _sexAct != "oral">>with $his ass in the air<<else>>with a ring gag in $his mouth<</if>> — all the while ignoring $his screams and pleas for mercy — - <</if>> -<<else>> - but $he knows $he is powerless to stop you. You <<if ($activeSlave.clothes != "no clothing")>>take off $his clothes and <</if>><<if _sexAct == "oral">>place a ring gag in $his mouth, then<</if>>place $him on the ground with a cushion under $his hips <<if _sexAct != "oral">>, $his ass in the air,<</if>> -<</if>> - -before calling in the _animal.species. The _animal.species slowly saunters up to the <<if ($activeSlave.devotion <= 20)>>bound <</if>>slave and takes its position -<<if canWalk($activeSlave)>><<if _sexAct != "oral">>behind<<else>>above<</if>><<else>>above<</if>> $him. You can see its _animal.dickSize penis slowly come to attention as its animalistic brain realizes that it's standing <<if canWalk($activeSlave)>><<if _sexAct != "oral">>behind<<else>>above<</if>><<else>>above<</if>> a warm hole that needs to be filled with seed. - -<<switch _animal.type>> -<<case "canine">> - <<if canWalk($activeSlave)>> - <<switch _sexAct>> - <<case "oral">> - <<if $activeSlave.devotion > 20>> - $activeSlave.slaveName <<if _activeQuirk != 1>>reluctantly<</if>> grabs the _animal.dickSize cock and gives it a tentative lick. - <</if>> - <<default>> - The _animal.species clambers up to mount $activeSlave.slaveName, eliciting a squeal from the $girl as its claws dig into $his flesh. - <</switch>> - <<else>> - The _animal.species <<if _sexAct != "oral">> takes a few curious sniffs, then <</if>>lines its cock up with $activeSlave.slaveName's <<switch _sexAct>><<case "vaginal" "anal">>_orifice.<<case "oral">>mouth, then, with a mighty shove, begins to thrust rapidly, in the way that only _animal.species can.<</switch>> - <</if>> - - <<switch _sexAct>> - <<case "vaginal" "anal">> - It takes a couple of tries, but it finally manages to sink its cock into $his <<if _sexAct == "vaginal" && _activeQuirk>>wet <</if>>_orifice. - <<case "oral">> - <<if canWalk($activeSlave)>> - In one swift motion, the canine buries its cock deep in $his throat, causing $him to gag. It then begins to thrust rapidly, in the way that only <<print _animal.species>>s can. - <</if>> - <</switch>> - - <<if _sexAct != "oral">> - <<if (_sexAct == "vaginal" && !_used.vagina) || (_sexAct == "anal" && !_used.anus)>>The slave gives a loud <<if ($activeSlave.devotion > 20)>>moan<<else>>groan<</if>> as $his <<if _sexAct == "anal">>@@.lime;anal@@<</if>> @@.lime;virginity is taken from $him@@<<if ($activeSlave.devotion < -20)>>@@.lime; by force@@<</if>>.<</if>> - <</if>> - -<<case "hooved">> - The _animal.species stands over $him as another slave lines its massive phallus up with $activeSlave.slaveName's <<switch _sexAct>><<case "oral">>open mouth<<case "vaginal" "anal">><<if _activeQuirk>>wet <</if>>_orifice<</switch>>. - - With a slight thrust, it enters $him and begins to fuck <<if _sexAct == "oral">>$his mouth<<else>> $him<</if>>. $activeSlave.slaveName can't help but give a loud groan as the huge cock - <<switch _sexAct>> - <<case "oral">> - stretches $his throat to the limit. - <<default>> - <<if _sexAct == "vaginal" && ($activeSlave.vagina <= 1) || _sexAct == "anal" && ($activeSlave.anus <= 1)>> - @@.lime;all but splits $his@@ - <<elseif _sexAct == "vaginal" && ($activeSlave.vagina <= 3) || _sexAct == "anal" && ($activeSlave.anus <= 2)>> - @@.lime;stretches $his@@ - <<else>> - fills $his - <</if>> - - <<if _sexAct == "vaginal">> - <<if $activeSlave.vagina == 0>> - @@.lime;virgin@@ - <<elseif $activeSlave.vagina == 1>> - @@.lime;tight@@ - <<elseif $activeSlave.vagina == 2>> - @@.lime;reasonably tight@@ - <<elseif $activeSlave.vagina == 3>> - @@.lime;loose@@ - <<elseif $activeSlave.vagina <= 9>> - cavernous - <<else>> - ruined - <</if>> - <<else>> - <<if $activeSlave.anus == 0>> - @@.lime;virgin@@ - <<elseif $activeSlave.anus == 1>> - @@.lime;tight@@ - <<elseif $activeSlave.anus == 2>> - @@.lime;loose@@ - <<elseif $activeSlave.anus == 3>> - very loose - <<else>> - gaping - <</if>> - <</if>> - - <<if (_sexAct == "vaginal" && $activeSlave.vagina <= 3) || (_sexAct == "anal" && $activeSlave.anus <= 2) >>@@.lime;_orifice@@<<else>>_orifice<</if>><<if (_sexAct == "vaginal" && ($activeSlave.vagina <= 1)) || (_sexAct == "anal" && ($activeSlave.anus <= 1))>>@@.lime; apart.@@<<elseif (_sexAct == "vaginal" && ($activeSlave.vagina <= 3)) || (_sexAct == "anal" && ($activeSlave.anus <= 2))>>@@.lime;.@@<<else>>.<</if>> - <</switch>> - -<<case "feline">> - <<if canWalk($activeSlave)>> - The _animal.species mounts $him, causing $him to give a squeal as its claws dig into $his flesh. - <<else>> - The _animal.species lines its _animal.dickSize penis with $activeSlave.slaveName's _orifice and gives a mighty shove. - <</if>> - $activeSlave.slaveName gives a loud <<if $activeSlave.devotion > 50>>moan<<else>>groan<</if>> as the _animal.species buries its large, barbed, cock deep in $his _orifice. -<</switch>> - -<<if _sexAct != "oral">> - <<if _sexAct == "vaginal">> - <<if !_used.vagina>> - <<if ($activeSlave.devotion >= -20)>> - <<if _activeQuirk>> - @@.lime;Losing $his virginity@@ in such a painful manner has @@.hotpink;increased $his devotion to you.@@ - <<set $activeSlave.devotion += 10>> - <<else>> - <<if $activeSlave.devotion > 50>> - Since $he is well broken, @@.lime;losing $his virginity@@ in such a manner has @@.hotpink;increased $his submission to you.@@ - <<set $activeSlave.devotion += 5>> - <<elseif ($activeSlave.devotion >= -20) && ($activeSlave.devotion <= 50)>> - @@.lime;Losing $his virginity@@ in such a manner has @@.hotpink;increased $his submission to you,@@ though $he is @@.gold;fearful@@ that you'll decide to only use $him to sate your animals' lust. - <<set $activeSlave.devotion += 5, $activeSlave.trust -= 5>> - <<elseif ($activeSlave.devotion >= -50) && ($activeSlave.devotion < -20)>> - $He is clearly @@.mediumorchid;unhappy@@ in the manner in which $his virginity has been taken, and $he @@.gold;fears@@ you'll decide to only use $him to sate your animals' lust. - <<set $activeSlave.devotion -= 10, $activeSlave.trust -= 10>> - <</if>> - <</if>> - <<else>> - Having $his @@.lime;pearl of great price taken@@ by a mere beast has @@.mediumorchid;reinforced the hatred $he holds towards you,@@ and $he is @@.gold;terrified@@ you'll only use $him as a plaything for your animals. - <<set $activeSlave.devotion -= 10, $activeSlave.trust -= 10>> - <</if>> - <</if>> - <<else>> - <<if !_used.anus>> - <<if ($activeSlave.devotion >= -20)>> - <<if _activeQuirk>> - @@.lime;Losing $his anal virginity@@ in such a painful manner has @@.hotpink;increased $his devotion to you.@@ - <<set $activeSlave.devotion += 10>> - <<else>> - <<if $activeSlave.devotion > 50>> - Since $he is well broken, @@.lime;losing $his anal virginity@@ in such a manner has @@.hotpink;increased $his submission to you.@@ - <<set $activeSlave.devotion += 5>> - <<elseif ($activeSlave.devotion >= -20) && ($activeSlave.devotion <= 50)>> - @@.lime;Losing $his anal virginity@@ in such a manner has @@.hotpink;increased $his submission to you,@@ though $he is @@.gold;fearful@@ that you'll decide to only use $him to sate your animals' lust. - <<set $activeSlave.devotion += 5, $activeSlave.trust -= 5>> - <<elseif ($activeSlave.devotion >= -50) && ($activeSlave.devotion < -20)>> - $He is clearly @@.mediumorchid;unhappy@@ in the manner in which @@.lime;$his anal virginity has been taken,@@ and $he @@.gold;fears@@ you'll decide to only use $him to sate your animals' lust. - <<set $activeSlave.devotion -= 10, $activeSlave.trust -= 10>> - <</if>> - <</if>> - <<else>> - Having @@.lime;$his rosebud taken@@ by a mere beast has @@.mediumorchid;reinforced the hatred $he holds towards you,@@ and $he is @@.gold;terrified@@ you'll only use $him as a plaything for your animals. - <<set $activeSlave.devotion -= 10, $activeSlave.trust -= 10>> - <</if>> - <</if>> - <</if>> - - <<if (!_used.vagina && _sexAct == "vaginal") || (!_used.anus && _sexAct == "anal")>> - The pain of having such a _animal.dickSize cock take $his <<if _sexAct == "anal">>anal <</if>>virginity has @@.red;damaged $his health.@@ - <<run healthDamage($activeSlave, 5)>> - <</if>> -<</if>> - -<<switch _animal.type>> -<<case "canine">> - The <<switch _animal.species>><<case "dog">>hound<<default>>_animal.species<</switch>> wastes no time in beginning to hammer away at $his _orifice, causing $activeSlave.slaveName to moan uncontrollably as its thick, veiny member probes the depths of $his <<switch _sexAct>><<case "oral">>throat<<case "vaginal">>cunt<<case "anal">>rectum<</switch>>. - A few short minutes later, $he gives a loud groan - <<if ($activeSlave.fetishKnown == 1) && (_activeQuirk)>> and shakes in orgasm <</if>> - as the _animal.species's knot begins to swell and its penis begins to erupt a thick stream of jizz <<switch _sexAct>><<case "vaginal" "anal">>into $him<<case "oral">>down $his throat<</switch>>. - After almost a minute, the _animal.species has finally finished cumming and its knot is sufficiently small enough that the _animal.species is able to pull its cock out, causing - <<switch _sexAct>> - <<case "vaginal" "anal">> - a stream of cum to slide out of $his - <<if _sexAct == "vaginal" && ($activeSlave.vagina <= 2) || _sexAct == "anal" && ($activeSlave.anus <= 1)>> - @@.lime;now-gaping _orifice.@@ - <<else>> - <<if _sexAct == "vaginal">> - <<if $activeSlave.vagina == 3>> - loose - <<elseif $activeSlave.vagina <= 9>> - cavernous - <<else>> - ruined - <</if>> - <<else>> - <<if $activeSlave.anus == 0>> - virgin - <<elseif $activeSlave.anus == 1>> - tight - <<elseif $activeSlave.anus == 2>> - loose - <<elseif $activeSlave.anus == 3>> - very loose - <<else>> - gaping - <</if>> - <</if>> _orifice. - <</if>> - <<if canGetPregnant($activeSlave) && canBreed($activeSlave, _animal)>> - <<= knockMeUp($activeSlave, 5, _hole, -8)>> - <</if>> - <<case "oral">> - $activeSlave.slaveName to immediately start coughing and retching uncontrollably. - - <</switch>> Having finished its business, the _animal.species runs off, presumably in search of food. - - <<switch _sexAct>> - <<case "vaginal">> - <<if $activeSlave.vagina < 3>> - <<set $activeSlave.vagina = 3>> - <</if>> - <<set $activeSlave.counter.vaginal += 1>> - <<case "anal">> - <<if $activeSlave.anus < 2>> - <<set $activeSlave.anus = 2>> - <</if>> - <<set $activeSlave.counter.vaginal += 1>> - <<case "oral">> - <<set $activeSlave.counter.oral += 1>> - <</switch>> - -<<case "hooved">> - The <<switch _animal.species>><<case "horse">>stallion<<default>>_animal.species<</switch>> begins to thrust faster and faster, causing $activeSlave.slaveName to moan and groan in pain as the<<if _sexAct == "vaginal">> tip rams $his cervix<<else>> huge _animal.species cock fills $him completely<</if>>. Before too long, the _animal.species's movements begin to slow, and you can see its large testicles contract slightly as it begins to fill $activeSlave.slaveName's <<switch _sexAct>><<case "vaginal" "anal">>_orifice<<case "oral">>stomach<</switch>> to the brim with thick _animal.species semen. - After what seems like an impossibly long time, the _animal.species's dick finally begins to soften and it finally pulls out<<if _sexAct == "oral">>, causing $activeSlave.slaveName to immediately begin to cough and retch uncontrollably<</if>>. You have a servant lead the _animal.species away, with a fresh apple as a treat for its good performance. - - <<switch _sexAct>> - <<case "vaginal">> - <<if $activeSlave.vagina < 4>> - <<set $activeSlave.vagina = 4>> - <</if>> - <<set $activeSlave.counter.vaginal += 1>> - <<case "anal">> - <<if $activeSlave.anus < 4>> - <<set $activeSlave.anus = 4>> - <</if>> - <<set $activeSlave.counter.anal += 1>> - <<case "oral">> - <<set $activeSlave.counter.oral += 1>> - <</switch>> - <<if _sexAct != "oral">> - <<if canGetPregnant($activeSlave) && canBreed($activeSlave, _animal)>> - <<= knockMeUp($activeSlave, 5, _hole, -8)>> - <</if>> - <</if>> - -<<case "feline">> - The _animal.species begins to move, thrusting faster and faster. The $girl beneath can't stop a groan of pain from escaping $his lips as the barbs on its dick @@.red;rub the inside of $his _orifice raw.@@ After a few minutes of painful coupling, the _animal.species's thrusts finally slow, then stop completely. With a <<if _animal.species != "cat">>deep bellow<<else>>loud //meow//<</if>>, he finally dismounts, gives you a long look, then stalks off. - - <<run healthDamage($activeSlave, 1)>> - <<switch _sexAct>> - <<case "vaginal">> - <<if $activeSlave.vagina < 2>> - <<set $activeSlave.vagina = 2>> - <</if>> - <<set $activeSlave.counter.vaginal += 1>> - <<case "anal">> - <<if $activeSlave.anus < 2>> - <<set $activeSlave.anus = 2>> - <</if>> - <<set $activeSlave.counter.vaginal += 1>> - <<case "oral">> - <<set $activeSlave.counter.oral += 1>> - <</switch>> - <<if _sexAct != "oral">> - <<if canGetPregnant($activeSlave) && canBreed($activeSlave, _animal)>> - <<= knockMeUp($activeSlave, 5, _hole, -8)>> - <</if>> - <</if>> -<</switch>> - -<<if (random(1,100) > (100 + $activeSlave.devotion))>> - <<switch _sexAct>> - <<case "vaginal">> - <<if ($activeSlave.energy <= 95) && ($activeSlave.sexualFlaw != "hates penetration")>> - Having <<print _a>> _animal.species fuck $him by force has given $him a @@.red;hatred of penetration.@@ - <<set $activeSlave.sexualFlaw = "hates penetration">> - <</if>> - <<case "anal">> - <<if ($activeSlave.energy <= 95) && ($activeSlave.sexualFlaw != "hates anal")>> - Having <<print _a>> _animal.species fuck $him by force has given $him a @@.red;hatred of anal penetration.@@ - <<set $activeSlave.sexualFlaw = "hates anal">> - <</if>> - <<case "oral">> - <<if ($activeSlave.energy <= 95) && ($activeSlave.sexualFlaw != "hates oral")>> - Having <<print _a>> _animal.species fuck $him by force has given $him a @@.red;hatred of oral penetration.@@ - <<set $activeSlave.sexualFlaw = "hates oral">> - <</if>> - <</switch>> -<</if>> - -<<if _sexAct != "oral">> - <<if $postSexCleanUp > 0>> - - <<if ($activeSlave.vagina == 3)>> - <<= capFirstChar(_animal.species)>> cum drips out of $his fucked-out hole. - <<elseif ($activeSlave.vagina == 2)>> - <<= capFirstChar(_animal.species)>> cum drips out of $his stretched vagina. - <<elseif ($activeSlave.vagina == 1)>> - $His still-tight vagina keeps the _animal.species's load inside $him. - <<elseif ($activeSlave.vagina < 0)>> - <<= capFirstChar(_animal.species)>> cum drips out of $his girly ass. - <<else>> - <<= capFirstChar(_animal.species)>> cum slides right out of $his gaping hole. - <</if>> - - <<if canWalk($activeSlave)>> - $He uses <<if $activeSlave.vagina > 0>>a quick douche to clean $his <<if $activeSlave.vagina < 2>>tight<<elseif $activeSlave.vagina > 3>>loose<</if>> pussy<<else>>an enema to clean $his <<if $activeSlave.anus < 2>>tight<<elseif $activeSlave.anus < 3>>used<<else>>gaping<</if>> butthole<</if>>, - <<switch $activeSlave.assignment>> - <<case "work in the brothel">> - just like $he does between each customer. - <<case "serve in the club">> - just like $he does in the club. - <<case "work in the dairy">> - to avoid besmirching the nice clean dairy. - <<case "work as a farmhand">> - to avoid tainting the food in $farmyardName. - <<case "work as a servant">> - mostly to keep everything $he has to clean from getting any dirtier. - <<case "whore">> - before returning to offering it for sale. - <<case "serve the public">> - before returning to offering it for free. - <<case "rest">> - before crawling back into bed. - <<case "get milked">> - <<if $activeSlave.lactation > 0>>before going to get $his uncomfortably milk-filled tits drained<<else>>and then rests until $his balls are ready to be drained again<</if>>. - <<case "be a servant">> - since $his chores didn't perform themselves while you used $his fuckhole. - <<case "please you">> - before returning to await your next use of $his fuckhole, as though nothing had happened. - <<case "be a subordinate slave">> - though it's only a matter of time before another slave decides to play with $his fuckhole. - <<case "be your Head Girl">> - worried that $his charges got up to trouble while $he enjoyed $his <<= getWrittenTitle($activeSlave)>>'s use. - <<case "guard you">> - so $he can be fresh and ready for more sexual use even as $he guards your person. - <<case "be the Schoolteacher">> - before $he returns to teaching $his classes. - <<default>> - before $he returns to $activeSlave.assignment. - <</switch>> - <</if>> - <</if>> -<</if>> - -<<set $animalType = 0>> +<<includeDOM App.Interact.fAnimal(getSlave($AS), $animalType)>> diff --git a/src/pregmod/theBlackMarket.tw b/src/pregmod/theBlackMarket.tw index 19d24e97cc8d0150e12df67a2cd6134916783c29..655741be2a54c2e23ae45dda79986aa21977838a 100644 --- a/src/pregmod/theBlackMarket.tw +++ b/src/pregmod/theBlackMarket.tw @@ -287,7 +287,7 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <<elseif $cash < 120000>> You cannot afford the asking price of @@.red;<<print cashFormat(120000)>>@@ for documentation on an incubator pregnancy adaptation module. <</if>> - <br>"I'm not sure about this... but you still might be interested. Let me just begin with a story... Some time ago, there was a man with very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results." + <br>"I'm not sure about this one, but you might still be interested. Let me just begin with a story... some time ago, there was a man with a very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results." <<if $arcologies[0].FSRepopulationFocus >= 60>> <p style="text-indent:2em"> As a repopulationist society, you already have similar documentation in your possession. Buying this would be a waste of money. </p> <<elseif $incubatorUpgradeReproduction < 1 || $incubatorUpgradeOrgans < 1 || $dispensaryUpgrade < 1 || $bellyImplants < 1 || $incubatorUpgradeGrowthStims < 1>> diff --git a/src/uncategorized/bodyModification.js b/src/uncategorized/bodyModification.js index 08e7c5fed7033bc29ddc9bad1d198a3444ee5d56..1fec8a3a5e371f1596f0eb166d239ab22b120d00 100644 --- a/src/uncategorized/bodyModification.js +++ b/src/uncategorized/bodyModification.js @@ -192,7 +192,7 @@ App.Medicine.Modification.Select.brand = function(slave, cheat = false) { } } else { if (slave.brand[V.brandTarget.local] === V.brandDesign.local) { - p.append(`${He} already has ${V.brandDesign.local} on ${his} V.brandTarget.local.`); + p.append(`${He} already has ${V.brandDesign.local} on ${his} ${V.brandTarget.local}.`); } else { if (!cheat) { p.append( diff --git a/src/uncategorized/economics.tw b/src/uncategorized/economics.tw index 5b1bcdbb510c9fcac94c0b59a81c69a43e61bca3..cd70fccb641b9edf62dcc3c665636166911b1f7c 100644 --- a/src/uncategorized/economics.tw +++ b/src/uncategorized/economics.tw @@ -13,23 +13,20 @@ <<= SectorCounts()>> <<run App.Arcology.updateOwnership()>> -<<include "Markets Report">> - -<br><br> +<<includeDOM App.EndWeek.marketsReport()>> <<if $useTabs == 0>> - <<include "Neighbors Development">> - <br> - <<includeDOM App.EndWeek.arcmgmt()>> + <<includeDOM App.EndWeek.neighborsDevelopment()>> + <<includeDOM App.EndWeek.arcManagement()>> <<if $FSAnnounced > 0>> - <br><br> - <<include "FS Developments">> + <p> + <<includeDOM App.EndWeek.FSDevelopments();>> + </p> <</if>> <<if $corp.Incorporated == 1>> - <br><br> - <<include "Corporation Developments">> + <<includeDOM App.EndWeek.corporationDevelopments()>> <</if>> <<if $secExpEnabled > 0>> @@ -69,20 +66,20 @@ <div id="Arcologies" class="tab-content"> <div class="content"> - <<include "Neighbors Development">> + <<includeDOM App.EndWeek.neighborsDevelopment()>> </div> </div> <div id="Management" class="tab-content"> <div class="content"> - <<includeDOM App.EndWeek.arcmgmt()>> + <<includeDOM App.EndWeek.arcManagement()>> </div> </div> <<if $FSAnnounced > 0>> <div id="Societies" class="tab-content"> <div class="content"> - <<include "FS Developments">> + <<includeDOM App.EndWeek.FSDevelopments()>> </div> </div> <</if>> @@ -90,7 +87,7 @@ <<if $corp.Incorporated == 1>> <div id="Corporation" class="tab-content"> <div class="content"> - <<include "Corporation Developments">> + <<includeDOM App.EndWeek.corporationDevelopments()>> </div> </div> <</if>> diff --git a/src/uncategorized/fsDevelopments.tw b/src/uncategorized/fsDevelopments.tw deleted file mode 100644 index 496deec9a047302de68c3da0da50a252522d54ba..0000000000000000000000000000000000000000 --- a/src/uncategorized/fsDevelopments.tw +++ /dev/null @@ -1,1325 +0,0 @@ -:: FS Developments [nobr] - -<<if $useTabs == 0>>__Society__<</if>> -<br> - -<<set _FSRepCreditsRep = [[7000,11000,15000], - [6000,9000,12000,15000], - [6000,9000,12000,14000,16000], - [6000,9000,11000,13000,15000,17000]]>> -<<set _FSRepDescriptors = ["solid", "high", "remarkable", "great", "excellent", "unparalleled"]>> -<<set _ordinalNames = ["second", "third", "fourth", "fifth", "sixth", "seventh", "eighth"]>> -<<if FutureSocieties.availCredits() > 0>> - @@.yellow;$arcologies[0].name's society is ready to begin accepting a new societal direction.@@ -<</if>> - -<<if $FSAnnounced == 1 && $FSGotRepCredits < $FSCreditCount && $rep >= _FSRepCreditsRep[$FSCreditCount-4][$FSGotRepCredits-1]>> - <<set _descriptor = "">> - <<if $FSGotRepCredits == 1>> - <<set _descriptor = _FSRepDescriptors[0]>> - <<else>> - <<set _descriptor = _FSRepDescriptors[Math.trunc($FSGotRepCredits/($FSCreditCount-1)*_FSRepDescriptors.length-1)]>> - <</if>> - <<set _ordinalName = _ordinalNames[$FSGotRepCredits-1]>> - <<if $FSGotRepCredits == $FSCreditCount-1>> - <<set _ordinalName += " and final">> - <</if>> - @@.yellow;Your reputation is so _descriptor that $arcologies[0].name's society is ready to begin accepting a _ordinalName societal direction.@@ - <<set $FSGotRepCredits += 1>> -<</if>> - -/* Count adopted FS */ -<<set _societies = FutureSocieties.activeCount(0)>> - -/* Spending, terrain, rep effects */ -<<set _broadProgress = 0>> -<<if $SF.Toggle && $SF.Active >= 1 && $SF.UC.Assign > 0>> - Assigning a <<if $SF.UC.Assign === 1>>small<<else>>large<</if>> portion of $SF.Lower to undercover work helps to advance your cultural goals. - <<if $SF.UC.Assign === 1>> - <<set _value = $SF.ArmySize * 0.05>> - <<else>> - <<set _value = $SF.ArmySize * 0.25>> - <</if>> - <<set _broadProgress += _value/100>> <br> -<</if>> -<<if $FSSpending > 1>> - Your @@.yellowgreen;societal spending@@ helps forward your goals for the arcology's future. - <<set _broadProgress += Math.trunc($FSSpending/(1000-(500*$arcologies[0].FSEdoRevivalistLaw)-(250*$arcologies[0].FSArabianRevivalistLaw)))>> -<</if>> -<<if $FCTV.receiver == 3>> - Your customized @@.yellowgreen;FCTV programming@@ strongly influences your citizens, greatly helping define your arcology's culture. - <<if ($week - $FCTV.weekEnabled) > 29>> - <<set _broadProgress += 3>> - <<elseif ($week - $FCTV.weekEnabled) > 19>> - <<set _broadProgress += 2>> - <<elseif ($week - $FCTV.weekEnabled) > 4>> - <<set _broadProgress += 1>> - <</if>> -<<elseif $FCTV.receiver == 2>> - Your customized @@.yellowgreen;FCTV programming@@ influences your citizens, helping define your arcology's culture. - <<if ($week - $FCTV.weekEnabled) > 34>> - <<set _broadProgress += 3>> - <<elseif ($week - $FCTV.weekEnabled) > 23>> - <<set _broadProgress += 2>> - <<elseif ($week - $FCTV.weekEnabled) > 8>> - <<set _broadProgress += 1>> - <</if>> -<<elseif $FCTV.receiver == 1>> - Your customized @@.yellowgreen;FCTV programming@@ influences a small number of your citizens, slightly helping define your arcology's culture. - <<if ($week - $FCTV.weekEnabled) > 39>> - <<set _broadProgress += 2>> - <<elseif ($week - $FCTV.weekEnabled) > 24>> - <<set _broadProgress += 1>> - <</if>> -<</if>> - -<<set _propagandaEffects = App.SecExp.propagandaEffects("social engineering")>> -_propagandaEffects.text -<<set _broadProgress += _propagandaEffects.effect>> - -<<if $terrain == "urban">> - The @@.yellow;urban location@@ of the arcology naturally promotes cultural interchange, holding back $arcologies[0].name's cultural independence. - <<set _broadProgress -= 3>> -<<elseif $terrain == "rural">> - The @@.yellow;rural location@@ of the arcology naturally limits cultural interchange, allowing $arcologies[0].name to slowly develop its own culture. - <<set _broadProgress -= 2>> -<<elseif $terrain == "marine">> - The @@.yellow;marine location@@ of the arcology strongly limits cultural interchange, allowing $arcologies[0].name to quickly develop its own culture. - <<set _broadProgress -= 1>> -<<elseif $terrain == "ravine">> - The @@.yellow;near subterranean location@@ of the arcology almost eliminates cultural interchange, allowing $arcologies[0].name to independently develop its culture. -<<else>> - The @@.yellow;oceanic location@@ of the arcology almost eliminates cultural interchange, allowing $arcologies[0].name to independently develop its culture. -<</if>> -<<if $rep < 3000>> - @@.red;Your weak reputation@@ reflects badly on your social projects. - <<set _broadProgress -= 2>> -<<elseif $rep < 6000>> - @@.red;Your mediocre reputation@@ engenders skepticism towards your social development. - <<set _broadProgress -= 1>> -<<elseif $rep < 9000>> - @@.yellow;Your reputation@@ is neither weak enough or strong enough to affect social development. -<<elseif $rep < 12000>> - @@.green;Your strong reputation@@ helps support social development. - <<set _broadProgress += 1>> -<<elseif $rep < 16000>> - @@.green;Your very strong reputation@@ increases acceptance of your social development. - <<set _broadProgress += 2>> -<<else>> - @@.green;Your incredible reputation@@ encourages automatic acceptance of your social development. - <<set _broadProgress += 4>> -<</if>> -<<if $FSCreditCount == 4>> - <<set _broadProgress += 1 - _societies>> - <<switch _societies>> - <<case 1>>Maintaining a single societal goal allows @@.green;very focused social engineering.@@ - <<case 2>>Maintaining two societal goals allows @@.green;focused social engineering.@@ - <<case 3>>Maintaining three societal goals requires @@.yellow;broad social engineering.@@ - <<case 4>>Maintaining four societal goals requires @@.red;unfocused social engineering.@@ - <</switch>> -<<elseif $FSCreditCount == 6>> - <<set _broadProgress += 3 - _societies>> - <<switch _societies>> - <<case 1>>Maintaining a single societal goal allows @@.green;very focused social engineering.@@ - <<case 2>>Maintaining two societal goals allows @@.green;focused social engineering.@@ - <<case 3>>Maintaining three societal goals allows @@.yellow;barely focusable social engineering.@@ - <<case 4>>Maintaining four societal goals requires @@.yellow;broad social engineering.@@ - <<case 5>>Maintaining five societal goals requires @@.red;unfocused social engineering.@@ - <<case 6>>Maintaining six societal goals requires @@.red;very unfocused social engineering.@@ - <</switch>> -<<elseif $FSCreditCount == 7>> - <<set _broadProgress += 3 - _societies>> - <<switch _societies>> - <<case 1>>Maintaining a single societal goal allows @@.green;very focused social engineering.@@ - <<case 2>>Maintaining two societal goals allows @@.green;focused social engineering.@@ - <<case 3>>Maintaining three societal goals allows @@.yellow;barely focusable social engineering.@@ - <<case 4>>Maintaining four societal goals requires @@.yellow;broad social engineering.@@ - <<case 5>>Maintaining five societal goals requires @@.red;unfocused social engineering.@@ - <<case 6>>Maintaining six societal goals requires @@.red;very unfocused social engineering.@@ - <<case 7>>Maintaining seven societal goals requires @@.red;extremely unfocused social engineering.@@ - <</switch>> -<<else>> - <<set _broadProgress += 2 - _societies>> - <<switch _societies>> - <<case 1>>Maintaining a single societal goal allows @@.green;very focused social engineering.@@ - <<case 2>>Maintaining two societal goals allows @@.green;focused social engineering.@@ - <<case 3>>Maintaining three societal goals requires @@.yellow;broad social engineering.@@ - <<case 4>>Maintaining four societal goals requires @@.red;unfocused social engineering.@@ - <<case 5>>Maintaining five societal goals requires @@.red;very unfocused social engineering.@@ - <</switch>> -<</if>> /*closes FS count changes */ -<<if _broadProgress != 0>> - <<run FutureSocieties.applyBroadProgress(0, _broadProgress)>> -<</if>> - -<<if $secExpEnabled > 0>> - <<if $SecExp.edicts.slaveWatch == 1>> - The Slave Mistreatment Watch helps many slaves, easing your citizens into the paternalist ideals it represents. - <<run FutureSocieties.Change("Paternalist", 2)>> - <</if>> - - <<if $SecExp.edicts.defense.noSubhumansInArmy == 1>> - Your army is free of subhumans, further cementing their lower status in the eyes of your citizens. - <<run FutureSocieties.Change("Subjugationist", 2)>> - <</if>> - - <<if $SecExp.edicts.defense.pregExemption == 1>> - Pregnant citizens are allowed and encouraged to avoid military service, making their value evident to all citizens. - <<run FutureSocieties.Change("RepopulationFocus", 2)>> - <</if>> - - <<if $SecExp.edicts.defense.eliteOfficers == 1>> - Purity in leadership is fundamental in your army, helping eugenics ideals spread in the populace. - <<run FutureSocieties.Change("Eugenics", 2)>> - <</if>> - - <<if $SecExp.edicts.defense.liveTargets == 1>> - Disobedient slaves are used in shooting ranges and military drills as live targets, furthering degradationist ideals. - <<run FutureSocieties.Change("Degradationist", 2)>> - <</if>> -<</if>> - -/* Promenade effects */ -<<run _cells = $building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && !["Brothel", "Club", "Shops"].includes(cell.type))>> -<<for _i = 0; _i < _cells.length; _i++>> - The _cells[_i].type establishments on the Promenade help develop society. - <<set _changed_fs = _cells[_i].type.replace(/[- ]/g,"")>> - <<run FutureSocieties.Change(_changed_fs, 4)>> -<</for>> - -/* PA FS bonuses */ -<<if $policies.publicPA == 1 && $assistant.appearance != "normal">> - <<set _seed = 0>> - <<if $arcologies[0].FSSupremacist != "unset">> - <<if ["amazon", "monstergirl", "succubus"].includes($assistant.appearance)>> - <<set $arcologies[0].FSSupremacist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "supremacist">> - <<set $arcologies[0].FSSupremacist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSSubjugationist != "unset">> - <<if ["amazon", "businesswoman", "imp"].includes($assistant.appearance)>> - <<set $arcologies[0].FSSubjugationist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "subjugationist">> - <<set $arcologies[0].FSSubjugationist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSGenderRadicalist != "unset">> - <<if ["incubus", "monstergirl", "shemale", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSGenderRadicalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "gender radicalist">> - <<set $arcologies[0].FSGenderRadicalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSRepopulationFocus != "unset">> - <<if ["goddess", "hypergoddess", "preggololi", "pregnant fairy", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSRepopulationFocus += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "repopulation focus">> - <<set $arcologies[0].FSRepopulationFocus += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSRestart != "unset">> - <<if ["angel", "businesswoman", "goddess", "incubus", "loli", "schoolgirl", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSRestart += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "eugenics">> - <<set $arcologies[0].FSRestart += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSGenderFundamentalist != "unset">> - <<if ["angel", "cherub", "fairy", "goddess", "hypergoddess", "loli", "preggololi", "pregnant fairy", "schoolgirl", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSGenderFundamentalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "gender fundamentalist">> - <<set $arcologies[0].FSGenderFundamentalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSPaternalist != "unset">> - <<if ["angel", "cherub", "fairy", "goddess", "hypergoddess", "loli", "preggololi", "pregnant fairy", "schoolgirl"].includes($assistant.appearance)>> - <<set $arcologies[0].FSPaternalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "paternalist">> - <<set $arcologies[0].FSPaternalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<if ["businesswoman", "imp", "incubus", "monstergirl", "preggololi", "succubus"].includes($assistant.appearance)>> - <<set $arcologies[0].FSDegradationist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "degradationist">> - <<set $arcologies[0].FSDegradationist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSIntellectualDependency != "unset">> - <<if ["shemale", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSIntellectualDependency += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "intellectual dependency">> - <<set $arcologies[0].FSIntellectualDependency += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSSlaveProfessionalism != "unset">> - <<if ["angel", "businesswoman", "incubus", "goddess", "schoolgirl", "succubus"].includes($assistant.appearance)>> - <<set $arcologies[0].FSSlaveProfessionalism += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "slave professionalism">> - <<set $arcologies[0].FSSlaveProfessionalism += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSBodyPurist != "unset">> - <<if ["amazon", "angel", "fairy", "goddess", "incubus", "loli", "pregnant fairy", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSBodyPurist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "body purist">> - <<set $arcologies[0].FSBodyPurist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSTransformationFetishist != "unset">> - <<if ["businesswoman", "ERROR_1606_APPEARANCE_FILE_CORRUPT", "incubus", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSTransformationFetishist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "transformation fetishist">> - <<set $arcologies[0].FSTransformationFetishist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSMaturityPreferentialist != "unset">> - <<if ["angel", "businesswoman", "goddess", "incubus", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSMaturityPreferentialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "maturity preferentialist">> - <<set $arcologies[0].FSMaturityPreferentialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSYouthPreferentialist != "unset">> - <<if ["angel", "cherub", "imp", "loli", "preggololi", "schoolgirl", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSYouthPreferentialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "youth preferentialist">> - <<set $arcologies[0].FSYouthPreferentialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSPetiteAdmiration != "unset">> - <<if ["cherub", "fairy", "imp", "incubus", "loli", "preggololi", "pregnant fairy", "schoolgirl", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSPetiteAdmiration += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "petite admiration">> - <<set $arcologies[0].FSPetiteAdmiration += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSStatuesqueGlorification != "unset">> - <<if ["amazon", "goddess", "incubus", "succubus", "witch"].includes($assistant.appearance)>> - <<set $arcologies[0].FSStatuesqueGlorification += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "statuesque glorification">> - <<set $arcologies[0].FSStatuesqueGlorification += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSSlimnessEnthusiast != "unset">> - <<if ["cherub", "imp", "loli", "schoolgirl", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSSlimnessEnthusiast += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "slimness enthusiast">> - <<set $arcologies[0].FSSlimnessEnthusiast += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSAssetExpansionist != "unset">> - <<if ["businesswoman", "hypergoddess", "incubus", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSAssetExpansionist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "asset expansionist">> - <<set $arcologies[0].FSAssetExpansionist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSPastoralist != "unset">> - <<if ["goddess", "hypergoddess", "incubus", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSPastoralist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "pastoralist">> - <<set $arcologies[0].FSPastoralist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - <<if ["amazon", "incubus", "shemale", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSPhysicalIdealist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "physical idealist">> - <<set $arcologies[0].FSPhysicalIdealist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSHedonisticDecadence != "unset">> - <<if ["goddess", "hypergoddess", "imp", "incubus", "preggololi", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSHedonisticDecadence += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "hedonistic decadence">> - <<set $arcologies[0].FSHedonisticDecadence += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSChattelReligionist != "unset">> - <<if ["angel", "cherub", "goddess", "imp", "incubus", "monstergirl", "succubus", "witch"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSChattelReligionist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "chattel religionist">> - <<set $arcologies[0].FSChattelReligionist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSRomanRevivalist != "unset">> - <<if ["amazon", "businesswoman", "incubus", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSRomanRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "roman revivalist">> - <<set $arcologies[0].FSRomanRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSNeoImperialist != "unset">> - <<if ["amazon", "businesswoman", "incubus", "shemale", "angel"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSNeoImperialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "neo-imperialist">> - <<set $arcologies[0].FSNeoImperialist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <<if $arcologies[0].FSAztecRevivalist != "unset">> - <<if ["amazon", "businesswoman", "incubus", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSAztecRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "aztec revivalist">> - <<set $arcologies[0].FSAztecRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSEgyptianRevivalist != "unset">> - <<if ["goddess", "incubus", "monstergirl", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSEgyptianRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "egyptian revivalist">> - <<set $arcologies[0].FSEgyptianRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSEdoRevivalist != "unset">> - <<if ["amazon", "incubus", "kitsune", "loli", "monstergirl", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSEdoRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "edo revivalist">> - <<set $arcologies[0].FSEdoRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSArabianRevivalist != "unset">> - <<if ["businesswoman", "incubus", "schoolgirl", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSArabianRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "arabian revivalist">> - <<set $arcologies[0].FSArabianRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - <<if $arcologies[0].FSChineseRevivalist != "unset">> - <<if ["incubus", "monstergirl", "schoolgirl", "succubus"].includes($assistant.fsAppearance)>> - <<set $arcologies[0].FSChineseRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 1>> - <<elseif $assistant.fsAppearance == "chinese revivalist">> - <<set $arcologies[0].FSChineseRevivalist += 0.1*$FSSingleSlaveRep>> - <<set _seed = 2>> - <</if>> - <</if>> - - <br><br> - <<setAssistantPronouns>> - With _hisA $assistant.appearance appearance, $assistant.name's public visibility meshes <<if _seed == 2>>very well<<elseif _seed == 1>>well<</if>> with society. -<</if>> - -/* Progress overflow into influence */ -<<run FutureSocieties.overflowToInfluence(0)>> - -/* warm up policy influence */ -<<if $arcologies[0].FSEgyptianRevivalistIncestPolicy == 1 && $arcologies[0].FSEgyptianRevivalistInterest < 26>> - <<set $arcologies[0].FSEgyptianRevivalistInterest += $arcologies[0].FSEgyptianRevivalistIncestPolicy>> -<<elseif $arcologies[0].FSEgyptianRevivalistIncestPolicy == 0 && $arcologies[0].FSEgyptianRevivalistInterest > 0>> - <<set $arcologies[0].FSEgyptianRevivalistInterest-->> -<</if>> - -<<if ($arcologies[0].FSRepopulationFocusPregPolicy == 1 || $arcologies[0].FSRepopulationFocusMilfPolicy == 1) && $arcologies[0].FSRepopulationFocusInterest < 26>> - <<set $arcologies[0].FSRepopulationFocusInterest += $arcologies[0].FSRepopulationFocusPregPolicy+$arcologies[0].FSRepopulationFocusMilfPolicy>> - <<if $arcologies[0].FSEugenicsInterest > 0>> - <<set $arcologies[0].FSEugenicsInterest-->> - <</if>> -<<elseif $arcologies[0].FSRepopulationFocusPregPolicy == 0 && $arcologies[0].FSRepopulationFocusMilfPolicy == 0 && $arcologies[0].FSRepopulationFocusInterest > 0>> - <<set $arcologies[0].FSRepopulationFocusInterest-->> -<</if>> - -<<if ($arcologies[0].FSSupremacistSMR + $arcologies[0].FSSubjugationistSMR + $arcologies[0].FSGenderRadicalistSMR + $arcologies[0].FSGenderFundamentalistSMR + $arcologies[0].FSPaternalistSMR + $arcologies[0].FSDegradationistSMR + $arcologies[0].FSBodyPuristSMR + $arcologies[0].FSTransformationFetishistSMR + $arcologies[0].FSYouthPreferentialistSMR + $arcologies[0].FSMaturityPreferentialistSMR + $arcologies[0].FSSlimnessEnthusiastSMR + $arcologies[0].FSAssetExpansionistSMR + $arcologies[0].FSPastoralistSMR + $arcologies[0].FSPhysicalIdealistSMR + $arcologies[0].FSChattelReligionistSMR + $arcologies[0].FSRomanRevivalistSMR + $arcologies[0].FSAztecRevivalistSMR + $arcologies[0].FSEgyptianRevivalistSMR + $arcologies[0].FSEdoRevivalistSMR + $arcologies[0].FSRepopulationFocusSMR + $arcologies[0].FSRestartSMR + $arcologies[0].FSHedonisticDecadenceSMR + $arcologies[0].FSIntellectualDependencySMR + $arcologies[0].FSSlaveProfessionalismSMR + $arcologies[0].FSPetiteAdmirationSMR + $arcologies[0].FSStatuesqueGlorificationSMR + $arcologies[0].FSArabianRevivalistSMR + $arcologies[0].FSChineseRevivalistSMR + $arcologies[0].FSNeoImperialistSMR) > 0>> - The slave market regulations help ensure the arcology's slaves fit within its society. -<</if>> - -<<if $arcologies[0].FSSupremacist != "unset">> - <<if $arcologies[0].FSSupremacist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in $arcologies[0].FSSupremacistRace superiority. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSupremacist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with $arcologies[0].FSSupremacistRace superiority. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSupremacist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to $arcologies[0].FSSupremacistRace superiority. - <<else>> - $arcologies[0].name is unconvinced of $arcologies[0].FSSupremacistRace superiority. - <</if>> - <<if $arcologies[0].FSSupremacist < 0>> - <<run FutureSocieties.remove("FSSupremacist")>> - <<if $assistant.fsAppearance == "supremacist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSSupremacist > $arcologies[0].FSSupremacistDecoration>> - <<set $arcologies[0].FSSupremacist = $arcologies[0].FSSupremacistDecoration>> - <</if>> - <<if $arcologies[0].FSSupremacistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSSupremacist == $arcologies[0].FSSupremacistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSSupremacistSMR == 1>> - <<set $arcologies[0].FSSupremacist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSSubjugationist != "unset">> - <<if $arcologies[0].FSSubjugationist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in the inferiority of $arcologies[0].FSSubjugationistRace people. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSubjugationist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the inferiority of $arcologies[0].FSSubjugationistRace people. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSubjugationist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the inferiority of $arcologies[0].FSSubjugationistRace people. - <<else>> - $arcologies[0].name is unconvinced of the inferiority of $arcologies[0].FSSubjugationistRace people. - <</if>> - <<if $arcologies[0].FSSubjugationist < 0>> - <<run FutureSocieties.remove("FSSubjugationist")>> - <<if $assistant.fsAppearance == "subjugationist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSSubjugationist > $arcologies[0].FSSubjugationistDecoration>> - <<set $arcologies[0].FSSubjugationist = $arcologies[0].FSSubjugationistDecoration>> - <</if>> - <<if $arcologies[0].FSSubjugationistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSSubjugationist == $arcologies[0].FSSubjugationistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSSubjugationistSMR == 1>> - <<set $arcologies[0].FSSubjugationist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSRepopulationFocus != "unset">> - <<if $arcologies[0].FSRepopulationFocus >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that all women should be pregnant. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRepopulationFocus >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly that all women should be pregnant. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRepopulationFocus >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that all women should be pregnant. - <<else>> - $arcologies[0].name is unconvinced that all women should be pregnant. - <</if>> - <<if $arcologies[0].FSRepopulationFocus < 0>> - <<run FutureSocieties.remove("FSRepopulationFocus")>> - <<if $assistant.fsAppearance == "repopulation focus">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSRepopulationFocus > $arcologies[0].FSRepopulationFocusDecoration>> - <<set $arcologies[0].FSRepopulationFocus = $arcologies[0].FSRepopulationFocusDecoration>> - <</if>> - <<if $arcologies[0].FSRepopulationFocusDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSRepopulationFocus == $arcologies[0].FSRepopulationFocusDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSRepopulationFocusSMR == 1>> - <<set $arcologies[0].FSRepopulationFocus += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSRestart != "unset">> - <<if $arcologies[0].FSRestart >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that only the elite should reproduce. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRestart >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly that only the elite should reproduce. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRestart >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea only the elite should reproduce. - <<else>> - $arcologies[0].name is unconvinced that only the elite should reproduce. - <</if>> - <<if $arcologies[0].FSRestart < 0 && $arcologies[0].FSRestartDecoration != 100>> - <<run FutureSocieties.remove("FSRestart")>> - <<if $assistant.fsAppearance == "eugenics">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSRestart > $arcologies[0].FSRestartDecoration>> - <<set $arcologies[0].FSRestart = $arcologies[0].FSRestartDecoration>> - <</if>> - <<if $arcologies[0].FSRestartDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSRestart == $arcologies[0].FSRestartDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSRestartSMR == 1>> - <<set $arcologies[0].FSRestart += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSGenderRadicalist != "unset">> - <<if $arcologies[0].FSGenderRadicalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in the need to redefine gender around power. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSGenderRadicalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the need to redefine gender around power. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSGenderRadicalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the need to redefine gender around power. - <<else>> - $arcologies[0].name is unconvinced of the need to redefine gender around power. - <</if>> - <<if $arcologies[0].FSGenderRadicalist < 0>> - <<run FutureSocieties.remove("FSGenderRadicalist")>> - <<if $assistant.fsAppearance == "gender radicalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSGenderRadicalist > $arcologies[0].FSGenderRadicalistDecoration>> - <<set $arcologies[0].FSGenderRadicalist = $arcologies[0].FSGenderRadicalistDecoration>> - <</if>> - <<if $arcologies[0].FSGenderRadicalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSGenderRadicalist == $arcologies[0].FSGenderRadicalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSGenderRadicalistSMR == 1>> - <<set $arcologies[0].FSGenderRadicalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSGenderFundamentalist != "unset">> - <<if $arcologies[0].FSGenderFundamentalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in the need to preserve traditional gender roles. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSGenderFundamentalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the need to preserve traditional gender roles. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSGenderFundamentalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the need to preserve traditional gender roles. - <<else>> - $arcologies[0].name is unconvinced of the need to preserve traditional gender roles. - <</if>> - <<if $arcologies[0].FSGenderFundamentalist < 0>> - <<run FutureSocieties.remove("FSGenderFundamentalist")>> - <<if $assistant.fsAppearance == "gender fundamentalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSGenderFundamentalist > $arcologies[0].FSGenderFundamentalistDecoration>> - <<set $arcologies[0].FSGenderFundamentalist = $arcologies[0].FSGenderFundamentalistDecoration>> - <</if>> - <<if $arcologies[0].FSGenderFundamentalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSGenderFundamentalist == $arcologies[0].FSGenderFundamentalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSGenderFundamentalistSMR == 1>> - <<set $arcologies[0].FSGenderFundamentalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSPaternalist != "unset">> - <<if $arcologies[0].FSPaternalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in the vision of a well-bred race of slaves. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPaternalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the vision of a well-bred race of slaves. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPaternalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the vision of a well-bred race of slaves. - <<else>> - $arcologies[0].name is unconvinced of the vision of a well-bred race of slaves. - <</if>> - <<if $arcologies[0].FSPaternalist < 0>> - <<run FutureSocieties.remove("FSPaternalist")>> - <<if $assistant.fsAppearance == "paternalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSPaternalist > $arcologies[0].FSPaternalistDecoration>> - <<set $arcologies[0].FSPaternalist = $arcologies[0].FSPaternalistDecoration>> - <</if>> - <<if $arcologies[0].FSPaternalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSPaternalist == $arcologies[0].FSPaternalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSPaternalistSMR == 1>> - <<set $arcologies[0].FSPaternalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSDegradationist != "unset">> - <<if $arcologies[0].FSDegradationist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that slaves are not human and should be thoroughly degraded. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSDegradationist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that slaves are not human and should be thoroughly degraded. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSDegradationist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the proposition that slaves are not human and should be thoroughly degraded. - <<else>> - $arcologies[0].name is unconvinced that slaves are not human and should be thoroughly degraded. - <</if>> - <<if $arcologies[0].FSDegradationist < 0>> - <<run FutureSocieties.remove("FSDegradationist")>> - <<if $assistant.fsAppearance == "degradationist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSDegradationist > $arcologies[0].FSDegradationistDecoration>> - <<set $arcologies[0].FSDegradationist = $arcologies[0].FSDegradationistDecoration>> - <</if>> - <<if $arcologies[0].FSDegradationistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSDegradationist == $arcologies[0].FSDegradationistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSDegradationistSMR == 1>> - <<set $arcologies[0].FSDegradationist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSIntellectualDependency != "unset">> - <<if $arcologies[0].FSIntellectualDependency >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that all slaves should be mentally dependant on their owner. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSIntellectualDependency >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly that all slaves should be bimbos. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSIntellectualDependency >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that slaves should be dumb and horny. - <<else>> - $arcologies[0].name is unconvinced that all slaves should be morons. - <</if>> - <<if $arcologies[0].FSIntellectualDependency < 0>> - <<run FutureSocieties.remove("FSIntellectualDependency")>> - <<if $assistant.fsAppearance == "intellectual dependency">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSIntellectualDependency > $arcologies[0].FSIntellectualDependencyDecoration>> - <<set $arcologies[0].FSIntellectualDependency = $arcologies[0].FSIntellectualDependencyDecoration>> - <</if>> - <<if $arcologies[0].FSIntellectualDependencyDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSIntellectualDependency == $arcologies[0].FSIntellectualDependencyDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSIntellectualDependencySMR == 1>> - <<set $arcologies[0].FSIntellectualDependency += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSSlaveProfessionalism != "unset">> - <<if $arcologies[0].FSSlaveProfessionalism >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that slaves should be masters of the sexual arts. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSlaveProfessionalism >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with slavery as a profession. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSSlaveProfessionalism >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the notion of slavery as a profession. - <<else>> - $arcologies[0].name is unconvinced that slaves should be highly intelligent. - <</if>> - <<if $arcologies[0].FSSlaveProfessionalism < 0>> - <<run FutureSocieties.remove("FSSlaveProfessionalism")>> - <<if $assistant.fsAppearance == "slave professionalism">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSSlaveProfessionalism > $arcologies[0].FSSlaveProfessionalismDecoration>> - <<set $arcologies[0].FSSlaveProfessionalism = $arcologies[0].FSSlaveProfessionalismDecoration>> - <</if>> - <<if $arcologies[0].FSSlaveProfessionalismDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSSlaveProfessionalism == $arcologies[0].FSSlaveProfessionalismDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSSlaveProfessionalismSMR == 1>> - <<set $arcologies[0].FSSlaveProfessionalism += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSBodyPurist != "unset">> - <<if $arcologies[0].FSBodyPurist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in the unattractive nature of implants. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSBodyPurist >= $FSLockinLevel*0.6>> - $arcologies[0].name strongly believes in the unattractive nature of implants. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSBodyPurist >= $FSLockinLevel*0.3>> - $arcologies[0].name is beginning to believe in the unattractive nature of implants. - <<else>> - $arcologies[0].name is unconvinced of the unattractive nature of implants. - <</if>> - <<if $arcologies[0].FSBodyPurist < 0>> - <<run FutureSocieties.remove("FSBodyPurist")>> - <<if $assistant.fsAppearance == "body purist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSBodyPurist > $arcologies[0].FSBodyPuristDecoration>> - <<set $arcologies[0].FSBodyPurist = $arcologies[0].FSBodyPuristDecoration>> - <</if>> - <<if $arcologies[0].FSBodyPuristDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSBodyPurist == $arcologies[0].FSBodyPuristDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSBodyPuristSMR == 1>> - <<set $arcologies[0].FSBodyPurist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSTransformationFetishist != "unset">> - <<if $arcologies[0].FSTransformationFetishist >= $FSLockinLevel>> - $arcologies[0].name passionately fetishizes implants. - <<elseif $arcologies[0].FSTransformationFetishist >= $FSLockinLevel*0.6>> - $arcologies[0].name strongly fetishizes implants. - <<elseif $arcologies[0].FSTransformationFetishist >= $FSLockinLevel*0.3>> - $arcologies[0].name is beginning to fetishize implants. - <<else>> - $arcologies[0].name is unconvinced about the attractiveness of implants. - <</if>> - <<if $arcologies[0].FSTransformationFetishist < 0>> - <<run FutureSocieties.remove("FSTransformationFetishist")>> - <<if $assistant.fsAppearance == "transformation fetishist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSTransformationFetishist > $arcologies[0].FSTransformationFetishistDecoration>> - <<set $arcologies[0].FSTransformationFetishist = $arcologies[0].FSTransformationFetishistDecoration>> - <</if>> - <<if $arcologies[0].FSTransformationFetishistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSTransformationFetishist == $arcologies[0].FSTransformationFetishistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSTransformationFetishistSMR == 1>> - <<set $arcologies[0].FSTransformationFetishist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSMaturityPreferentialist != "unset">> - <<if $arcologies[0].FSMaturityPreferentialist >= $FSLockinLevel>> - $arcologies[0].name is passionately enthusiastic about older ladies. - <<elseif $arcologies[0].FSMaturityPreferentialist >= $FSLockinLevel*0.6>> - $arcologies[0].name is enthusiastic about older ladies. - <<elseif $arcologies[0].FSMaturityPreferentialist >= $FSLockinLevel*0.3>> - $arcologies[0].name is beginning to be enthusiastic about older ladies. - <<else>> - $arcologies[0].name is unconvinced about your preference for older ladies. - <</if>> - <<if $arcologies[0].FSMaturityPreferentialist < 0>> - <<run FutureSocieties.remove("FSMaturityPreferentialist")>> - <<if $assistant.fsAppearance == "maturity preferentialist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSMaturityPreferentialist > $arcologies[0].FSMaturityPreferentialistDecoration>> - <<set $arcologies[0].FSMaturityPreferentialist = $arcologies[0].FSMaturityPreferentialistDecoration>> - <</if>> - <<if $arcologies[0].FSMaturityPreferentialistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSMaturityPreferentialist == $arcologies[0].FSMaturityPreferentialistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSMaturityPreferentialistSMR == 1>> - <<set $arcologies[0].FSMaturityPreferentialist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSYouthPreferentialist != "unset">> - <<if $arcologies[0].FSYouthPreferentialist >= $FSLockinLevel>> - $arcologies[0].name is passionately enthusiastic about young women. - <<elseif $arcologies[0].FSYouthPreferentialist >= $FSLockinLevel*0.6>> - $arcologies[0].name is enthusiastic about young women. - <<elseif $arcologies[0].FSYouthPreferentialist >= $FSLockinLevel*0.3>> - $arcologies[0].name is beginning to be enthusiastic about young women. - <<else>> - $arcologies[0].name is unconvinced about your preference for young women. - <</if>> - <<if $arcologies[0].FSYouthPreferentialist < 0>> - <<run FutureSocieties.remove("FSYouthPreferentialist")>> - <<if $assistant.fsAppearance == "youth preferentialist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSYouthPreferentialist > $arcologies[0].FSYouthPreferentialistDecoration>> - <<set $arcologies[0].FSYouthPreferentialist = $arcologies[0].FSYouthPreferentialistDecoration>> - <</if>> - <<if $arcologies[0].FSYouthPreferentialistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSYouthPreferentialist == $arcologies[0].FSYouthPreferentialistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSYouthPreferentialistSMR == 1>> - <<set $arcologies[0].FSYouthPreferentialist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSPetiteAdmiration != "unset">> - <<if $arcologies[0].FSPetiteAdmiration >= $FSLockinLevel>> - $arcologies[0].name is passionately enthusiastic for short slaves. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPetiteAdmiration >= $FSLockinLevel*0.6>> - $arcologies[0].name is very enthusiastic for short slaves. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPetiteAdmiration >= $FSLockinLevel*0.3>> - $arcologies[0].name is enthusiastic for short slaves. - <<else>> - $arcologies[0].name is beginning to be enthusiastic for short slaves. - <</if>> - <<if $arcologies[0].FSPetiteAdmiration < 0>> - <<run FutureSocieties.remove("FSPetiteAdmiration")>> - <<if $assistant.fsAppearance == "petite admiration">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSPetiteAdmiration > $arcologies[0].FSPetiteAdmirationDecoration>> - <<set $arcologies[0].FSPetiteAdmiration = $arcologies[0].FSPetiteAdmirationDecoration>> - <</if>> - <<if $arcologies[0].FSPetiteAdmirationDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSPetiteAdmiration == $arcologies[0].FSPetiteAdmirationDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSPetiteAdmirationSMR == 1>> - <<set $arcologies[0].FSPetiteAdmiration += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSStatuesqueGlorification != "unset">> - <<if $arcologies[0].FSStatuesqueGlorification >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that the tall are superior. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSStatuesqueGlorification >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that the tall are superior. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSStatuesqueGlorification >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that the tall are superior. - <<else>> - $arcologies[0].name is unconvinced that the tall are superior. - <</if>> - <<if $arcologies[0].FSStatuesqueGlorification < 0>> - <<run FutureSocieties.remove("FSStatuesqueGlorification")>> - <<if $assistant.fsAppearance == "statuesque glorificationDecoration">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSStatuesqueGlorification > $arcologies[0].FSStatuesqueGlorificationDecoration>> - <<set $arcologies[0].FSStatuesqueGlorification = $arcologies[0].FSStatuesqueGlorificationDecoration>> - <</if>> - <<if $arcologies[0].FSStatuesqueGlorificationDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSStatuesqueGlorification == $arcologies[0].FSStatuesqueGlorificationDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSStatuesqueGlorificationSMR == 1>> - <<set $arcologies[0].FSStatuesqueGlorification += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSSlimnessEnthusiast != "unset">> - <<if $arcologies[0].FSSlimnessEnthusiast >= $FSLockinLevel>> - $arcologies[0].name is passionately enthusiastic about slim slaves with girlish figures. - <<elseif $arcologies[0].FSSlimnessEnthusiast >= $FSLockinLevel*0.6>> - $arcologies[0].name is very enthusiastic about slim slaves with girlish figures. - <<elseif $arcologies[0].FSSlimnessEnthusiast >= $FSLockinLevel*0.3>> - $arcologies[0].name is enthusiastic about slim slaves with girlish figures. - <<else>> - $arcologies[0].name is unconvinced about your preference for slim slaves with girlish figures. - <</if>> - <<if $arcologies[0].FSSlimnessEnthusiast < 0>> - <<run FutureSocieties.remove("FSSlimnessEnthusiast")>> - <<if $assistant.fsAppearance == "slimness enthusiast">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSSlimnessEnthusiast > $arcologies[0].FSSlimnessEnthusiastDecoration>> - <<set $arcologies[0].FSSlimnessEnthusiast = $arcologies[0].FSSlimnessEnthusiastDecoration>> - <</if>> - <<if $arcologies[0].FSSlimnessEnthusiastDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSSlimnessEnthusiast == $arcologies[0].FSSlimnessEnthusiastDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSSlimnessEnthusiastSMR == 1>> - <<set $arcologies[0].FSSlimnessEnthusiast += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSAssetExpansionist != "unset">> - <<if $arcologies[0].FSAssetExpansionist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that all tits and asses should be bigger. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSAssetExpansionist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that all tits and asses should be bigger. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSAssetExpansionist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that all tits and asses should be bigger. - <<else>> - $arcologies[0].name is unconvinced that all tits and asses should be bigger. - <</if>> - <<if $arcologies[0].FSAssetExpansionist < 0>> - <<run FutureSocieties.remove("FSAssetExpansionist")>> - <<if $assistant.fsAppearance == "asset expansionist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSAssetExpansionist > $arcologies[0].FSAssetExpansionistDecoration>> - <<set $arcologies[0].FSAssetExpansionist = $arcologies[0].FSAssetExpansionistDecoration>> - <</if>> - <<if $arcologies[0].FSAssetExpansionistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSAssetExpansionist == $arcologies[0].FSAssetExpansionistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSAssetExpansionistSMR == 1>> - <<set $arcologies[0].FSAssetExpansionist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSPastoralist != "unset">> - <<if $arcologies[0].FSPastoralist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that slaves should be milked. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPastoralist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that slaves should be milked. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPastoralist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that slaves should be milked. - <<else>> - $arcologies[0].name is unconvinced that slaves should be milked. - <</if>> - <<if $arcologies[0].FSPastoralist < 0>> - <<run FutureSocieties.remove("FSPastoralist")>> - <<if $assistant.fsAppearance == "pastoralist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSPastoralist > $arcologies[0].FSPastoralistDecoration>> - <<set $arcologies[0].FSPastoralist = $arcologies[0].FSPastoralistDecoration>> - <</if>> - <<if $arcologies[0].FSPastoralistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSPastoralist == $arcologies[0].FSPastoralistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSPastoralistSMR == 1>> - <<set $arcologies[0].FSPastoralist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSPhysicalIdealist != "unset">> - <<if $arcologies[0].FSPhysicalIdealist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that all slaves should be tall and strong. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPhysicalIdealist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that all slaves should be tall and strong. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSPhysicalIdealist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that all slaves should be tall and strong. - <<else>> - $arcologies[0].name is unconvinced that all slaves should be tall and strong. - <</if>> - <<if $arcologies[0].FSPhysicalIdealist < 0>> - <<run FutureSocieties.remove("FSPhysicalIdealist")>> - <<if $assistant.fsAppearance == "physical idealist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSPhysicalIdealist > $arcologies[0].FSPhysicalIdealistDecoration>> - <<set $arcologies[0].FSPhysicalIdealist = $arcologies[0].FSPhysicalIdealistDecoration>> - <</if>> - <<if $arcologies[0].FSPhysicalIdealistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSPhysicalIdealist == $arcologies[0].FSPhysicalIdealistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSPhysicalIdealistSMR == 1>> - <<set $arcologies[0].FSPhysicalIdealist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSHedonisticDecadence != "unset">> - <<if $arcologies[0].FSHedonisticDecadence >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that all slaves should be soft and laid-back. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSHedonisticDecadence >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with the idea that all slaves should be soft and laid-back. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSHedonisticDecadence >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to the idea that all slaves should be soft and laid-back. - <<else>> - $arcologies[0].name is unconvinced that all slaves should be soft and laid-back. - <</if>> - <<if $arcologies[0].FSHedonisticDecadence < 0>> - <<run FutureSocieties.remove("FSHedonisticDecadence")>> - <<if $assistant.fsAppearance == "hedonistic decadence">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSHedonisticDecadence > $arcologies[0].FSHedonisticDecadenceDecoration>> - <<set $arcologies[0].FSHedonisticDecadence = $arcologies[0].FSHedonisticDecadenceDecoration>> - <</if>> - <<if $arcologies[0].FSHedonisticDecadenceDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSHedonisticDecadence == $arcologies[0].FSHedonisticDecadenceDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSHedonisticDecadenceSMR == 1>> - <<set $arcologies[0].FSHedonisticDecadence += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSChattelReligionist != "unset">> - <<if $arcologies[0].FSChattelReligionist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly in a version of religion that emphasizes slaveholding traditions. - <<set $independenceDay = 1, $nicaea.announceable = 1>> - <<elseif $arcologies[0].FSChattelReligionist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with a version of religion that emphasizes slaveholding traditions. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSChattelReligionist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to a version of religion that emphasizes slaveholding traditions. - <<else>> - $arcologies[0].name is unconvinced of a version of religion that emphasizes slaveholding traditions. - <</if>> - <<if $arcologies[0].FSChattelReligionist < 0>> - <<run FutureSocieties.remove("FSChattelReligionist")>> - <<if $assistant.fsAppearance == "chattel religionist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSChattelReligionist > $arcologies[0].FSChattelReligionistDecoration>> - <<set $arcologies[0].FSChattelReligionist = $arcologies[0].FSChattelReligionistDecoration>> - <</if>> - <<if $arcologies[0].FSChattelReligionistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSChattelReligionist == $arcologies[0].FSChattelReligionistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSChattelReligionistSMR == 1>> - <<set $arcologies[0].FSChattelReligionist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSRomanRevivalist != "unset">> - <<if $arcologies[0].FSRomanRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that it is the new Rome. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRomanRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new Rome. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSRomanRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new Rome. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new Rome. - <</if>> - <<if $arcologies[0].FSRomanRevivalist < 0>> - <<run FutureSocieties.remove("FSRomanRevivalist")>> - <<if $assistant.fsAppearance == "roman revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSRomanRevivalist > $arcologies[0].FSRomanRevivalistDecoration>> - <<set $arcologies[0].FSRomanRevivalist = $arcologies[0].FSRomanRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSRomanRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSRomanRevivalist == $arcologies[0].FSRomanRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSRomanRevivalistSMR == 1>> - <<set $arcologies[0].FSRomanRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSNeoImperialist != "unset">> - <<if $arcologies[0].FSNeoImperialist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that your arcology is a truly new Imperial Society. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSNeoImperialist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new Imperial Society. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSNeoImperialist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new Imperial Society. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new Imperial Society. - <</if>> - <<if $arcologies[0].FSNeoImperialist < 0>> - <<run FutureSocieties.remove("FSNeoImperialist")>> - <<if $assistant.fsAppearance == "neo-imperialist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSNeoImperialist > $arcologies[0].FSNeoImperialistDecoration>> - <<set $arcologies[0].FSNeoImperialist = $arcologies[0].FSNeoImperialistDecoration>> - <</if>> - <<if $arcologies[0].FSNeoImperialistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSNeoImperialist == $arcologies[0].FSNeoImperialistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSNeoImperialistSMR == 1>> - <<set $arcologies[0].FSNeoImperialist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSAztecRevivalist != "unset">> - <<if $arcologies[0].FSAztecRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that it is the new Aztec Empire. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSAztecRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new Aztec Empire. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSAztecRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new Aztec Empire. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new Aztec Empire. - <</if>> - <<if $arcologies[0].FSAztecRevivalist < 0>> - <<run FutureSocieties.remove("FSAztecRevivalist")>> - <<if $assistant.fsAppearance == "aztec revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSAztecRevivalist > $arcologies[0].FSAztecRevivalistDecoration>> - <<set $arcologies[0].FSAztecRevivalist = $arcologies[0].FSAztecRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSAztecRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSAztecRevivalist == $arcologies[0].FSAztecRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSAztecRevivalistSMR == 1>> - <<set $arcologies[0].FSAztecRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSEgyptianRevivalist != "unset">> - <<if $arcologies[0].FSEgyptianRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that it is the land of the Pharaohs, reborn. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSEgyptianRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new land of the Pharaohs. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSEgyptianRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new land of the Pharaohs. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new land of the Pharaohs. - <</if>> - <<if $arcologies[0].FSEgyptianRevivalist < 0>> - <<run FutureSocieties.remove("FSEgyptianRevivalist")>> - <<if $assistant.fsAppearance == "egyptian revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSEgyptianRevivalist > $arcologies[0].FSEgyptianRevivalistDecoration>> - <<set $arcologies[0].FSEgyptianRevivalist = $arcologies[0].FSEgyptianRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSEgyptianRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSEgyptianRevivalist == $arcologies[0].FSEgyptianRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSEgyptianRevivalistSMR == 1>> - <<set $arcologies[0].FSEgyptianRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSEdoRevivalist != "unset">> - <<if $arcologies[0].FSEdoRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that it is the land of the Shogun, reborn. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSEdoRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new Edo Japan. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSEdoRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new Edo Japan. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new Edo Japan. - <</if>> - <<if $arcologies[0].FSEdoRevivalist < 0>> - <<run FutureSocieties.remove("FSEdoRevivalist")>> - <<if $assistant.fsAppearance == "edo revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSEdoRevivalist > $arcologies[0].FSEdoRevivalistDecoration>> - <<set $arcologies[0].FSEdoRevivalist = $arcologies[0].FSEdoRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSEdoRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSEdoRevivalist == $arcologies[0].FSEdoRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSEdoRevivalistSMR == 1>> - <<set $arcologies[0].FSEdoRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSArabianRevivalist != "unset">> - <<if $arcologies[0].FSArabianRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that it is ancient Baghdad reborn. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSArabianRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your project to build a new Sultanate. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSArabianRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your project to build a new Sultanate. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your project to build a new Sultanate. - <</if>> - <<if $arcologies[0].FSArabianRevivalist < 0>> - <<run FutureSocieties.remove("FSArabianRevivalist")>> - <<if $assistant.fsAppearance == "arabian revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSArabianRevivalist > $arcologies[0].FSArabianRevivalistDecoration>> - <<set $arcologies[0].FSArabianRevivalist = $arcologies[0].FSArabianRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSArabianRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSArabianRevivalist == $arcologies[0].FSArabianRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSArabianRevivalistSMR == 1>> - <<set $arcologies[0].FSArabianRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[0].FSChineseRevivalist != "unset">> - <<if $arcologies[0].FSChineseRevivalist >= $FSLockinLevel>> - $arcologies[0].name believes implicitly that you possess the Mandate of Heaven. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSChineseRevivalist >= $FSLockinLevel*0.6>> - $arcologies[0].name agrees strongly with your pursuit of the Mandate of Heaven. - <<set $independenceDay = 1>> - <<elseif $arcologies[0].FSChineseRevivalist >= $FSLockinLevel*0.3>> - $arcologies[0].name is sympathetic to your pursuit of the Mandate of Heaven. - <<else>> - $arcologies[0].name is unconvinced of the wisdom of your pursuit of the Mandate of Heaven. - <</if>> - <<if $arcologies[0].FSChineseRevivalist < 0>> - <<run FutureSocieties.remove("FSChineseRevivalist")>> - <<if $assistant.fsAppearance == "chinese revivalist">><<set $assistant.fsAppearance = "default">><</if>> - @@.red;Your future society project has failed:@@ your citizens were repelled from your idea more than they were attracted to it. @@.yellow;You may select another option, or elect to try again.@@ - <<elseif $arcologies[0].FSChineseRevivalist > $arcologies[0].FSChineseRevivalistDecoration>> - <<set $arcologies[0].FSChineseRevivalist = $arcologies[0].FSChineseRevivalistDecoration>> - <</if>> - <<if $arcologies[0].FSChineseRevivalistDecoration < $FSLockinLevel>> - <<if $arcologies[0].FSChineseRevivalist == $arcologies[0].FSChineseRevivalistDecoration>> - @@.yellow;Your societal development in this direction is being limited by $arcologies[0].name's lack of customization to support it.@@ - <<set $FSReminder = 1>> - <<elseif $arcologies[0].FSChineseRevivalistSMR == 1>> - <<set $arcologies[0].FSChineseRevivalist += 0.1*$FSSingleSlaveRep>> - <</if>> - <</if>> -<</if>> - -<<run App.UI.SlaveSummary.societyChanged()>> diff --git a/src/uncategorized/marketsReport.tw b/src/uncategorized/marketsReport.tw deleted file mode 100644 index 5706634f77f1b63902d47f39cdd5369e471fb3cb..0000000000000000000000000000000000000000 --- a/src/uncategorized/marketsReport.tw +++ /dev/null @@ -1,106 +0,0 @@ -:: Markets Report [nobr] - -//FC Markets Report:// - -<<set _assetAffected = either("capture", "drugs", "entrapment", "general", "slaves", "surgical", "training")>> -<<set _assetDirection = either("down", "up")>> - -<<if _assetAffected == "general">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...rising energy costs drove @@.yellowgreen;rising prices@@ of several market baskets... - <<else>> - ...conflict-driven increases in transportation costs increase @@.yellowgreen;price indices@@... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...increasing Free Cities slave labor effects @@.gold;general prices@@... - <<else>> - ...Antarctic oil shale pushing down energy prices, driving down major @@.gold;price indices@@... - <</if>> - <</if>> -<<elseif _assetAffected == "slaves">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...heavy demand for fashionable varieties drove @@.yellowgreen;rising slave prices@@ last... - <<else>> - ...study suggested the sexual revolution would continue to drive up @@.yellowgreen;slave prices@@... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...increased supply due to bush wars drove down @@.gold;slave prices@@... - <<else>> - ...@@.gold;slave prices@@ continue to fall due to major improvements in training... - <</if>> - <</if>> -<<elseif _assetAffected == "entrapment">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...prospect of deregulation drove a @@.yellowgreen;scramble@@ for means of enslavement... - <<else>> - ...law would legalize enslavement, driving @@.yellowgreen;high prices@@ for associated... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...reactionism produced lower demand and @@.gold;lower prices@@ for legal enslavement... - <<else>> - ...report on low success rates @@.gold;drove down@@ value of legal enslavement methods... - <</if>> - <</if>> -<<elseif _assetAffected == "capture">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...declaration of war @@.yellowgreen;pushed up@@ average mercenary wage... - <<else>> - ...advancing technology to blame for @@.yellowgreen;rising costs@@ of assets for wet work... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...rumored peace treaty @@.gold;pushed down@@ mercenary contract clearing rate... - <<else>> - ...demobilization of the cash-strapped army expected to produce mercenary @@.gold;glut@@... - <</if>> - <</if>> -<<elseif _assetAffected == "training">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...rising demand in turn @@.yellowgreen;pushing up@@ prices for most means of slave training... - <<else>> - ...public demand for ever-better slave training inevitably @@.yellowgreen;increase@@ training costs... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...competition from low-cost slave breaking firms @@.gold;reducing@@ asking price for... - <<else>> - ...increased automation of slave training @@.gold;negatively impacting@@ training contracts... - <</if>> - <</if>> -<<elseif _assetAffected == "surgical">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...fashionable extravagant implant procedures @@.yellowgreen;driving prices@@ of remote surgical... - <<else>> - ...near-universal breast implants producing corresponding @@.yellowgreen;price inflation@@ of surgery... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...vastly reduced overhead with remote surgery @@.gold;hitting prices@@ of surgery hard... - <<else>> - ...oversupply after major manufacturers converted lines to @@.gold;low-cost@@ implant production... - <</if>> - <</if>> -<<elseif _assetAffected == "drugs">> - <<if _assetDirection == "up">> - <<if random(1,100) > 50>> - ...intense demand for curatives in conflict zones @@.yellowgreen;increasing prices@@... - <<else>> - ...setbacks in growth hormone human testing expected to @@.yellowgreen;increase prices@@ of traditional formula... - <</if>> - <<else>> - <<if random(1,100) > 50>> - ...new formula @@.gold;cut costs@@ of common curatives by an unprecedented... - <<else>> - ...glut caused by big pharma reorienting towards @@.gold;cheap,@@ mass-produced aphros... - <</if>> - <</if>> -<</if>> diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw deleted file mode 100644 index 9f03d22f9fe077245b2440409d747d1bb1abcde5..0000000000000000000000000000000000000000 --- a/src/uncategorized/neighborsDevelopment.tw +++ /dev/null @@ -1,1909 +0,0 @@ -:: Neighbors Development [nobr] - -<<set $averageProsperity = 0, _agentBonus = 0>> -<<for $i = 0; $i < $arcologies.length; $i++>> - <<if $arcologies[$i].prosperity < 10>> - <<set $arcologies[$i].prosperity = 10>> - <</if>> - <<set $averageProsperity += $arcologies[$i].prosperity>> -<</for>> -<<set $averageProsperity = $averageProsperity/$arcologies.length>> - -<<if $corp.Incorporated == 1>> - <<set _corpBonus = Math.trunc(1000 * Math.pow(App.Corporate.value, 0.1))>> -<</if>> - -<<if $useTabs == 0>>__Arcologies in the Free City__<</if>> - -<<for $i = 0; $i < $arcologies.length; $i++>> - -<br> -'' $arcologies[$i].name'', your <<if $arcologies[$i].direction == 0>>arcology<<else>>neighbor to the $arcologies[$i].direction<</if>>, - -/* PROSPERITY */ - -<<if $arcologies[$i].direction != 0>> - <<switch $arcologies[$i].government>> - <<case "elected officials">> - <<set $arcologies[$i].prosperity += random(-1,1)>> - <<case "a corporation" "an oligarchy">> - <<set $arcologies[$i].prosperity += random(-1,2)>> - <<case "a committee" "your trustees">> - <<set $arcologies[$i].prosperity += random(0,2)>> - <<case "an individual">> - <<set $arcologies[$i].prosperity += random(0,3)>> - <<case "your agent">> - <<set _agentBonus = agentBonus($i)>> - <<set $arcologies[$i].prosperity += random(0,3) + _agentBonus>> - <<default>> - <<set $arcologies[$i].prosperity += random(-1,1)>> - <</switch>> - <<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, 300)>> -<</if>> - -<<if $arcologies[$i].honeymoon > 0>> - <<set $arcologies[$i].honeymoon -= 1>> -<</if>> - -<<if $arcologies[$i].government == "your agent">> - <<set _Agent = App.currentAgent($i)>> - <<setLocalPronouns _Agent>> - is being run by your agent @@.deeppink;<<= SlaveFullName(_Agent)>>.@@ - <<set _agentIndex = $slaveIndices[_Agent.ID]>> - <<if (def _agentIndex) && $slaves[_agentIndex].assignment != "be your agent">> - @@.red;BUG: $slaves[_agentIndex].slaveName also was <<print $slaves[_agentIndex].assignment>>!@@ - <<= assignJob($slaves[_agentIndex], "be your agent")>> - <</if>> - <<if _agentBonus > 0>>@@.green;$He does an excellent job this week.@@<</if>> - The arcology -<<elseif $arcologies[$i].government == "your trustees">> - is being run by @@.mediumseagreen;your trustees.@@ The arcology -<</if>> - -<<if $arcologies[$i].direction == 0>> - <<set _error = 5>> -<<else>> - <<set _error = 10>> -<</if>> -<<set _error -= Math.min(2*$assistant.power, _error)>> -<<set _prosperity = (Math.trunc((0.1*$arcologies[$i].prosperity*random(100-_error,100+_error))/100))>> -has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $showNumbers != 2>><<if ($showNumbers == 1) && (_prosperity > $showNumbersMax)>>m<<else>> million<</if>><<else>>m<</if>>,@@ - -<<if ($arcologies[$i].rival == 1) && ($arcologies[$i].government != "an individual")>> - but it is undergoing some internal turmoil. @@.red;Resentment that has been quietly building among the arcology's elite turns into open rebellion!@@ - <<if $arcologies[$i].PCminority > 0>> - @@.red;Your ownership interest in $arcologies[$i].name has been annulled!@@ - <<set $arcologies[$i].PCminority = 0>> - <</if>> - @@.yellow;After a brief power struggle, it undergoes a change of government.@@ - <<if (def _agentIndex) && _agentIndex != -1>> - <<setLocalPronouns $slaves[_agentIndex]>> - @@.deeppink;$slaves[_agentIndex].slaveName@@ manages to escape with the help of a few loyal citizens and returns to you @@.gold;fearing your displeasure at $his failure.@@ - <<set $slaves[_agentIndex].trust -= 40>> - <<= assignJob($slaves[_agentIndex], "rest")>> /* this takes care of necessary cleanup for agent and agent companion (if any) */ - <</if>> - A controlling interest has been taken by a single individual, leaving the arcology ruled like yours is. - <<set $arcologies[$i].government = "an individual">> - <<set $arcologies[$i].ownership = random(51,61), $arcologies[$i].minority = 100 - $arcologies[$i].ownership - random(1,19), $arcologies[$i].honeymoon += 10>> -<<elseif ($arcologies[$i].government != "your trustees") && ($arcologies[$i].government != "your agent") && ($arcologies[$i].ownership < $arcologies[$i].PCminority) && ($arcologies[$i].direction != 0) && ($arcologies[$i].rival != 1)>> - undergoing a leadership struggle in which you are deeply concerned, since you now own more of it than its current leadership. - <<if random(0,10) < $arcologies[$i].PCminority - $arcologies[$i].ownership>> - @@.yellow;You successfully execute a hostile takeover and now control the arcology.@@ Trustees from among its leading citizens will exercise local control at your direction until you make other arrangements. - <<set $arcologies[$i].honeymoon += 10>> - <<set $arcologies[$i].ownership = 0>> - <<set $arcologies[$i].government = "your trustees">> - <<else>> - The current leadership has not yet exhausted its legalistic recourses, and retains control for the moment, causing considerable disruption. - <<set $arcologies[$i].prosperity -= 3>> - <</if>> -<<elseif ($arcologies[$i].ownership == 0) && ($arcologies[$i].PCminority > 0) && ($arcologies[$i].minority > $arcologies[$i].PCminority)>> - undergoing a leadership struggle in which you are deeply concerned, since your ownership share has diminished to a dangerously low point. - <<if random(0,10) < $arcologies[$i].minority - $arcologies[$i].PCminority>> - @@.yellow;It undergoes a change of government.@@ - <<set $arcologies[$i].honeymoon += 10>> - <<set $arcologies[$i].ownership = $arcologies[$i].minority>> - <<set $arcologies[$i].minority = 0>> - <<switch $arcologies[$i].government>> - <<case "your trustees">> - <<if random(0,2) == 0>> - Its leading citizens form a corporation to run the arcology more efficiently. - <<set $arcologies[$i].government = "a corporation">> - <<else>> - A power struggle is won by a single individual, leaving the arcology ruled like yours is. - <<set $arcologies[$i].government = "an individual">> - <</if>> - <<default>> - <<if random(0,2) == 0>> - The failed individual who led it is run out and replaced by direct democracy. - <<set $arcologies[$i].government = "direct democracy">> - <<else>> - The failed individual who led it is bought out by a corporation. - <<set $arcologies[$i].government = "a corporation">> - <</if>> - <</switch>> - <<else>> - The arcology is paralyzed by dissension over how to respond. - <<set $arcologies[$i].prosperity -= 3>> - <</if>> -<<elseif ($arcologies[$i].ownership != 0) && (($arcologies[$i].ownership < $arcologies[$i].minority) || ($arcologies[$i].ownership < 10)) && ($arcologies[$i].direction != 0) && ($arcologies[$i].rival != 1)>> - undergoing a leadership struggle, since its current government owns less of it than its largest rival for control. - <<if random(0,10) < $arcologies[$i].minority - $arcologies[$i].ownership>> - @@.yellow;It undergoes a change of government.@@ - <<set $arcologies[$i].honeymoon += 10>> - <<set $arcologies[$i].ownership = $arcologies[$i].minority>> - <<set $arcologies[$i].minority = 0>> - <<switch $arcologies[$i].government>> - <<case "elected officials">> - <<if random(0,2) == 0>> - Its elected officials surrender power to a small group of leading citizens. - <<set $arcologies[$i].government = "an oligarchy">> - <<else>> - Its elected officials are forced to give way to a committee of public safety. - <<set $arcologies[$i].government = "a committee">> - <</if>> - <<case "a committee">> - <<if random(0,2) == 0>> - Its ruling committee forms it into a corporation in the hope this will spur growth. - <<set $arcologies[$i].government = "a corporation">> - <<else>> - A power struggle within its ruling committee leaves only a few leading citizens in power. - <<set $arcologies[$i].government = "an oligarchy">> - <</if>> - <<case "an oligarchy">> - <<if random(0,2) == 0>> - Its leading citizens form a corporation to run the arcology more efficiently. - <<set $arcologies[$i].government = "a corporation">> - <<else>> - A power struggle is won by a single individual, leaving the arcology ruled like yours is. - <<set $arcologies[$i].government = "an individual">> - <</if>> - <<case "an individual">> - <<if random(0,2) == 0>> - The failed individual who led it is run out and replaced by direct democracy. - <<set $arcologies[$i].government = "direct democracy">> - <<else>> - The failed individual who led it is bought out by a corporation. - <<set $arcologies[$i].government = "a corporation">> - <</if>> - <<case "a corporation">> - <<if random(0,2) == 0>> - A power struggle within the corporation that runs it is won by a single person. - <<set $arcologies[$i].government = "an individual">> - <<else>> - The corporation that runs it collapses and is replaced by an oligarchy of rich shareholders. - <<set $arcologies[$i].government = "an oligarchy">> - <</if>> - <<default>> - Its direct democracy votes to empower some elected officials in the hope they can lead the arcology out of its problems. - <<set $arcologies[$i].government = "elected officials">> - <</switch>> - <<set _desc = FutureSocieties.decay($i).map((fs) => FutureSocieties.displayName(fs))>> - <<if _desc.length > 2>> - Its citizens take the opportunity to make radical social changes, @@.cyan;purging the <<= _desc.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch)>>@@ favored by the old government. - <<elseif _desc.length == 2>> - Its citizens take the opportunity to make social changes, @@.cyan;discarding the _desc[0] and _desc[1]@@ favored by the old government. - <<elseif _desc.length == 1>> - Its citizens take the opportunity to make social change and @@.cyan;abandon the _desc[0]@@ favored by the old government. - <</if>> - <<else>> - The arcology is paralyzed by internal dissension over how to respond. - <<set $arcologies[$i].prosperity -= 3>> - <</if>> -<<elseif $arcologies[$i].prosperity >= 300>> - at the maximum possible prosperity. -<<elseif $arcologies[$i].prosperity > $averageProsperity + 10>> - much more prosperous than the rest of the Free City, limiting its economic development. - <<set $arcologies[$i].prosperity -= 1>> -<<elseif $arcologies[$i].prosperity >= $averageProsperity - 10>> - about as prosperous as the rest of the Free City. -<<else>> - <<if ($arcologies[$i].honeymoon > 0)>> - far behind the rest of the Free City, making it a good investment and spurring its economic development. It remains in the @@.lightgreen;honeymoon period@@ after its recent change of government, suppressing dissension and further encouraging growth. - <<set $arcologies[$i].prosperity += 2>> - <<if ($arcologies[$i].ownership != 0) && ($arcologies[$i].ownership < 40)>> - <<set $arcologies[$i].ownership += 1>> - <</if>> - <<else>> - not as prosperous as the rest of the Free City, spurring its economic development. - <<set $arcologies[$i].prosperity += 1>> - <</if>> -<</if>> - -/* NATURAL CHANGES TO MINORITY SHARE */ -<<if ($arcologies[$i].government == "your agent") || ($arcologies[$i].government == "your trustees")>> - <<set $arcologies[$i].ownership = 0>> -<</if>> -<<set _owned = $arcologies[$i].minority+$arcologies[$i].ownership+$arcologies[$i].PCminority>> -<<if $arcologies[$i].minority < 10>> - <<set $arcologies[$i].minority = 0>> -<<elseif $arcologies[$i].minority < $arcologies[$i].PCminority>> - <<set $arcologies[$i].minority = 0>> -<<elseif _owned >= 95>> - <<set $arcologies[$i].minority -= random(3,5)>> -<<elseif $arcologies[$i].minority > (100 - _owned)*5>> - <<set $arcologies[$i].minority -= random(3,5)>> -<<elseif $arcologies[$i].minority < (100 - _owned)*4>> - <<if $arcologies[$i].minority < 10>> - <<if $arcologies[$i].ownership + $arcologies[$i].PCminority <= 90>> - <<set $arcologies[$i].minority = 10>> - <</if>> - <<else>> - <<if $arcologies[$i].ownership + $arcologies[$i].PCminority <= 98>> - <<if $arcologies[$i].prosperity < random(0,300)>> - <<set $arcologies[$i].minority += random(0,2)>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].direction != 0>> - -/* AI ARCOLOGY SHARE BUYING AND SELLING */ -<<set _economicUncertainty = App.Utils.economicUncertainty($i)>> -<<if $arcologies[$i].government != "your agent">> - <<if $arcologies[$i].government != "your trustees">> - <<if $arcologies[$i].minority + $arcologies[$i].ownership + $arcologies[$i].PCminority < 100>> - <<set _prosperityDiff = $arcologies[$i].prosperity-$averageProsperity>> - <<if _prosperityDiff > random(-10,50)>> - Its leadership acquires an increased share of its ownership. - <<set $arcologies[$i].ownership += 1>> - <<set $arcologies[$i].prosperity -= 5>> - This places its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>. - <<elseif _prosperityDiff < random(-50,10)>> - <<if $arcologies[$i].ownership > 0>> - <<if $arcologies[$i].rival != 1 || ($arcologies[$i].rival == 1 && $arcologies[$i].ownership > 51 && random(1,2) == 1)>> - Its leadership sells off some of its ownership to stay afloat. - <<set $arcologies[$i].ownership -= 1>> - <<set $arcologies[$i].prosperity += 5>> - This leaves its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition, with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>. - <</if>> - <</if>> - <</if>> - <<if $arcologies[$i].minority+$arcologies[$i].ownership > 100>> - <<set $arcologies[$i].minority = 100-$arcologies[$i].ownership>> - <</if>> - <<else>> - <<if (($arcologies[$i].ownership + $arcologies[$i].PCminority) >= 99) && ($arcologies[$i].rival != 1)>> - <<set $arcologies[$i].ownership = 98 - $arcologies[$i].PCminority>> - <<else>> - <<set $arcologies[$i].minority = Math.clamp(98 - $arcologies[$i].ownership - $arcologies[$i].PCminority, 0, 98)>> - <</if>> - <</if>> - <</if>> -<</if>> - -/* AI ARCOLOGY RENTS TO PC */ - -<<if $arcologies[$i].PCminority > 0>> - <<set _rents = ($arcologies[$i].prosperity*$arcologies[$i].PCminority*2)+random(1,100)>> - <<run cashX(_rents, "rents")>> - This week, you made @@.yellowgreen;<<print cashFormat(_rents)>>@@ from your holdings in this arcology. -<</if>> - -/* CYBER ECONOMIC WARFARE */ -<<if $arcologies[$i].direction == $arcologies[0].CyberEconomicTarget>> - <<if $PC.skill.hacking == -100>> - <<set _Catchchance = 10>> - <<elseif $PC.skill.hacking <= -75>> - <<set _Catchchance = 30>> - <<elseif $PC.skill.hacking <= -50>> - <<set _Catchchance = 40>> - <<elseif $PC.skill.hacking <= -25>> - <<set _Catchchance = 45>> - <<elseif $PC.skill.hacking == 0>> - <<set _Catchchance = 50>> - <<elseif $PC.skill.hacking <= 25>> - <<set _Catchchance = 60>> - <<elseif $PC.skill.hacking <= 50>> - <<set _Catchchance = 70>> - <<elseif $PC.skill.hacking <= 75>> - <<set _Catchchance = 85>> - <<elseif $PC.skill.hacking >= 100>> - <<set _Catchchance = 100>> - <</if>> - <<set _weekModifier = Math.max(1, (100-($week*2)))>> - <<set $arcologies[$i].prosperity -= $arcologies[0].CyberEconomic*2, _WarSpoils = Math.ceil(10+Math.max(((100/_weekModifier)*$arcologies[$i].prosperity*$arcologies[0].CyberEconomic),0))>> - <<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, $AProsperityCap)>> - <<if random(0,100) >= _Catchchance-(10*$arcologies[0].CyberEconomic)>> - <<set $arcologies[0].prosperity -= $arcologies[0].CyberEconomic*3, _redHanded = 1>> - <<run repX(forceNeg(random(100,200)), "war")>> - <<if $secExpEnabled > 0>> - <<set $SecExp.core.authority -= random(100,500)*$arcologies[0].CyberEconomic, $SecExp.core.crimeLow += random(10,25)>> - <</if>> - <<set $arcologies[0].prosperity = Math.clamp($arcologies[0].prosperity, 1, $AProsperityCap)>> - <</if>> - You target $arcologies[$i].name for @@.yellow;digital economic warfare,@@ successfully raiding its coffers for @@.yellowgreen;<<print cashFormat(_WarSpoils)>>@@ this week. - <<run cashX(_WarSpoils, "war")>> - <<if _redHanded == 1>> - A successful trace back to your arcology has exposed your actions, @@.red;damaging your reputation@@ and @@.red;scaring away potential investors.@@ - <<if $secExpEnabled > 0>> - To add insult to injury, @@.red;your authority has been weakened@@ and your actions have painted your arcology as a @@.red;haven for crime.@@ - <</if>> - <</if>> -<<elseif $arcologies[$i].direction == $arcologies[0].CyberReputationTarget>> /* REPUTATION WARFARE */ - <<if $PC.skill.hacking == -100>> - <<set _Catchchance = 10>> - <<elseif $PC.skill.hacking <= -75>> - <<set _Catchchance = 30>> - <<elseif $PC.skill.hacking <= -50>> - <<set _Catchchance = 40>> - <<elseif $PC.skill.hacking <= -25>> - <<set _Catchchance = 45>> - <<elseif $PC.skill.hacking == 0>> - <<set _Catchchance = 50>> - <<elseif $PC.skill.hacking <= 25>> - <<set _Catchchance = 60>> - <<elseif $PC.skill.hacking <= 50>> - <<set _Catchchance = 70>> - <<elseif $PC.skill.hacking <= 75>> - <<set _Catchchance = 85>> - <<elseif $PC.skill.hacking >= 100>> - <<set _Catchchance = 100>> - <</if>> - <<set $arcologies[$i].prosperity -= $arcologies[0].CyberReputation>> - <<if $arcologies[$i].rival != 1>> - <<set $arcologies[$i].ownership -= $arcologies[0].CyberReputation>> - <</if>> - <<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, 300)>> - <<set $arcologies[$i].ownership = Math.clamp($arcologies[$i].ownership, 0, 100)>> - <<if random(0,100) >= _Catchchance-(10*$arcologies[0].CyberReputation)>> - <<set $arcologies[0].prosperity -= $arcologies[0].CyberReputation*3, _redHanded = 1>> - <<run repX(forceNeg(random(100,200)), "war")>> - <<if $secExpEnabled > 0>> - <<set $SecExp.core.authority -= random(100,500)*$arcologies[0].CyberReputation, $SecExp.core.crimeLow += random(10,25)>> - <</if>> - <<set $arcologies[0].prosperity = Math.clamp($arcologies[0].prosperity, 1, 300)>> - <</if>> - You target $arcologies[$i].name's leadership for @@.yellow;character assassination@@ in an attempt to destabilize the arcology. - <<if _redHanded == 1>> - A successful trace back to your arcology has exposed your actions, @@.red;damaging your reputation@@ and @@.red;scaring away potential investors.@@ - <<if $secExpEnabled > 0>> - To add insult to injury, @@.red;your authority has been weakened@@ and your actions have painted your arcology as a @@.red;haven for crime.@@ - <</if>> - <</if>> -<</if>> - - -/* AI ARCOLOGY RENAMING */ -<<for $j = 0; $j < $arcologies.length; $j++>> - <<if $arcologies[$i].direction != $arcologies[$j].direction>> - <<if $arcologies[$i].name == $arcologies[$j].name>> - <<set $arcologies[$i].name = "Arcology X-"+($i < 4 ? $i : $i + 1)>> /* X-4 is reserved for player's arcology, so X-1 is available */ - It resumes its original name, '' $arcologies[$i].name'', since the arcology to the $arcologies[$i].direction of yours is also named $arcologies[$j].name. - <<break>> - <</if>> - <</if>> -<</for>> - -<</if>> - -/* ECONOMIC WARFARE */ - -<<for $j = 0; $j < $arcologies.length; $j++>> - <<if $arcologies[$i].direction == $arcologies[$j].embargoTarget>> - <<set $arcologies[$i].prosperity -= $arcologies[$j].embargo*2>> - <<if $arcologies[$j].direction != 0>> - <<set $arcologies[$j].prosperity -= $arcologies[$j].embargo*2>> - <</if>> - <<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, 300)>> - $arcologies[$j].name targets $arcologies[$i].name for @@.red;economic warfare.@@ - <</if>> -<</for>> - -/* FUTURE SOCIETY PROGRESS */ - -<<set _societiesAdopted = FutureSocieties.activeCount($i)>> -<<switch $arcologies[$i].government>> -<<case "elected officials">> - <<set _efficiency = random(-2,2)>> -<<case "a committee">> - <<set _efficiency = random(-1,2)>> -<<case "an oligarchy" "your trustees">> - <<set _efficiency = random(-1,3)>> -<<case "an individual">> - <<set _efficiency = random(-1,5)>> -<<case "your agent">> - <<set _efficiency = _agentBonus + random(-1,1)>> -<<case "a corporation">> - <<set _efficiency = random(1,2)>> -<<default>> - <<set _efficiency = random(-3,3)>> -<</switch>> - -<<if $arcologies[$i].rival == 1>> - <<set _efficiency += random(0,2)>> -<</if>> - -<<if $arcologies[$i].direction != 0>> - <<run FutureSocieties.applyBroadProgress($i, _efficiency)>> -<</if>> -<<set _passive = new App.Neighbor.PassiveFSInfluence($i)>> -<<if $arcologies[$i].FSSupremacist != "unset">> - <<= _passive.output("FSSupremacist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSSupremacist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Racial Supremacy for $arcologies[$i].FSSupremacistRace people has reached stability and acceptance there. The arcology has been renamed - <<switch $arcologies[$i].FSSupremacistRace>> - <<case "white">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistWhite)>> - <<case "asian">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistAsian)>> - <<case "latina">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistLatina)>> - <<case "middle eastern">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMiddleEastern)>> - <<case "black">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistBlack)>> - <<case "indo-aryan">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistIndoAryan)>> - <<case "pacific islander">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistPacificIslander)>> - <<case "malay">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMalay)>> - <<case "amerindian">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistAmerindian)>> - <<case "southern european">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistSouthernEuropean)>> - <<case "semitic">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistSemitic)>> - <<default>> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSupremacistMixedRace)>> - <</switch>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSSupremacist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on $arcologies[$i].FSSupremacistRace Supremacy. - <<set $arcologies[$i].FSSupremacist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSSupremacist != "unset">> - <<if $corp.Incorporated == 1>> - <<if !$corp.SpecRaces.includes($arcologies[$i].FSSupremacistRace)>> - It's a @@.lightgreen;good market@@ for your corporation's racially inferior slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSSupremacist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSSubjugationist != "unset">> - <<= _passive.output("FSSubjugationist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSSubjugationist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Racial Subjugationism of $arcologies[$i].FSSubjugationistRace people has reached stability and acceptance there. The arcology has been renamed - <<switch $arcologies[$i].FSSubjugationistRace>> - <<case "white">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistWhite)>> - <<case "asian">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistAsian)>> - <<case "latina">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistLatina)>> - <<case "middle eastern">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMiddleEastern)>> - <<case "black">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistBlack)>> - <<case "indo-aryan">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistIndoAryan)>> - <<case "pacific islander">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistPacificIslander)>> - <<case "malay">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMalay)>> - <<case "amerindian">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistAmerindian)>> - <<case "southern european">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistSouthernEuropean)>> - <<case "semitic">> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistSemitic)>> - <<default>> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSubjugationistMixedRace)>> - <</switch>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSSubjugationist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on $arcologies[$i].FSSubjugationistRace Subjugationism. - <<set $arcologies[$i].FSSubjugationist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSSubjugationist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecRaces.includes($arcologies[$i].FSSubjugationistRace)>> - It's a @@.lightgreen;good market@@ for your corporation's $arcologies[$i].FSSubjugationistRace slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSSubjugationist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSRepopulationFocus != "unset">> - <<= _passive.output("FSRepopulationFocus")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSRepopulationFocus >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Repopulationism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesRepopulationist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSRepopulationFocus < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Repopulationism. - <<set $arcologies[$i].FSRepopulationFocus = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSRepopulationFocus != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecMilk > 0>> - It's a @@.lightgreen;good market@@ for your corporation's milky cows, improving sales and helping social progress. - <<set $arcologies[$i].FSRepopulationFocus += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecAge == 1>> - It's a @@.lightgreen;good market@@ for your corporation's youthful captures, improving sales and helping social progress. - <<set $arcologies[$i].FSRepopulationFocus += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecInjection == 5>> - It's a @@.lightgreen;good market@@ for your corporation's milky cows, improving sales and helping social progress. - <<set $arcologies[$i].FSRepopulationFocus += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSRestart != "unset">> - <<= _passive.output("FSRestart")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSRestart >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSRestartResearch = 1>> - Eugenics has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesEugenics)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSRestart < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Eugenics. - <<set $arcologies[$i].FSRestart = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSRestart != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecBalls == -1>> - It's an @@.lightgreen;excellent market@@ for your corporation's neutered slavegirls, improving sales and helping social progress. - <<set $arcologies[$i].FSRestart += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecSexEd == 2>> - It's a @@.lightgreen;good market@@ for your corporation's well trained toys, improving sales and helping social progress. - <<set $arcologies[$i].FSRestart += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecIntelligence == 3>> - It's a @@.lightgreen;good market@@ for your corporation's smarter captures, improving sales and helping social progress. - <<set $arcologies[$i].FSRestart += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSGenderRadicalist != "unset">> - <<= _passive.output("FSGenderRadicalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSGenderRadicalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSGenderRadicalistResearch = 1>> - Gender Radicalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesGenderRadicalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSGenderRadicalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Gender Radicalism. - <<set $arcologies[$i].FSGenderRadicalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSGenderRadicalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecHormones > 0>> - It's a @@.lightgreen;good market@@ for your corporation's hormonally treated slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSGenderRadicalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <<if $corp.SpecPussy == 1 && $corp.SpecDick == 1>> - It's a @@.lightgreen;good market@@ for your corporation's beautiful futanari, improving sales and helping social progress. - <<set $arcologies[$i].FSGenderRadicalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecBalls == -1>> - It's a @@.lightgreen;good market@@ for your corporation's clipped buttsluts, improving sales and helping social progress. - <<set $arcologies[$i].FSGenderRadicalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <<if ($corp.SpecGender == 2) || ($seeDicks == 100)>> - It's a @@.lightgreen;good market@@ for your corporation's feminized slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSGenderRadicalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSGenderFundamentalist != "unset">> - <<= _passive.output("FSGenderFundamentalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSGenderFundamentalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Gender Fundamentalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesGenderFundamentalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSGenderFundamentalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Gender Fundamentalism. - <<set $arcologies[$i].FSGenderFundamentalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSGenderFundamentalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if ($corp.SpecGender == 1) || ($seeDicks == 0)>> - It's a @@.lightgreen;good market@@ for your corporation's enslaved females, improving sales and helping social progress. - <<set $arcologies[$i].FSGenderFundamentalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSPaternalist != "unset">> - <<= _passive.output("FSPaternalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSPaternalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Paternalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesPaternalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSPaternalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Paternalism. - <<set $arcologies[$i].FSPaternalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSPaternalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecTrust > 3>> - It's a @@.lightgreen;good market@@ for your corporation's well-treated companions, improving sales and helping social progress. - <<set $arcologies[$i].FSPaternalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <<if $corp.SpecCosmetics == 1>> - It's a @@.lightgreen;good market@@ for your corporation's meticulously beautified ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSPaternalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecEducation > 0>> - It's a @@.lightgreen;good market@@ for your corporation's educated ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSPaternalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSDegradationist != "unset">> - <<= _passive.output("FSDegradationist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSDegradationist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Degradationism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesDegradationist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSDegradationist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Degradationism. - <<set $arcologies[$i].FSDegradationist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSDegradationist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecTrust < 3>> - It's a @@.lightgreen;good market@@ for your corporation's thoroughly terrified slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSDegradationist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <<if $corp.SpecIntelligence == 1>> - It's a @@.lightgreen;good market@@ for your corporation's idiotic sluts, improving sales and helping social progress. - <<set $arcologies[$i].FSDegradationist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecAmputee == 1>> - It's a @@.lightgreen;good market@@ for your corporation's human sex toys, improving sales and helping social progress. - <<set $arcologies[$i].FSDegradationist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSIntellectualDependency != "unset">> - <<= _passive.output("FSIntellectualDependency")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSIntellectualDependency >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Intellectual Dependency has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesIntellectualDependency)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSIntellectualDependency < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Intellectual Dependency. - <<set $arcologies[$i].FSIntellectualDependency = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSIntellectualDependency != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecIntelligence == 1>> - It's an @@.lightgreen;excellent market@@ for your corporation's idiotic sluts, improving sales and helping social progress. - <<set $arcologies[$i].FSIntellectualDependency += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecEducation == 0>> - It's a @@.lightgreen;good market@@ for your corporation's uneducated slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSIntellectualDependency += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSSlaveProfessionalism != "unset">> - <<= _passive.output("FSSlaveProfessionalism")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSSlaveProfessionalism >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSSlaveProfessionalismResearch = 1>> - Slave Professionalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSlaveProfessionalism)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSSlaveProfessionalism < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Slave Professionalism. - <<set $arcologies[$i].FSSlaveProfessionalism = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSSlaveProfessionalism != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecIntelligence == 3>> - It's an @@.lightgreen;excellent market@@ for your corporation's smarter captures, improving sales and helping social progress. - <<set $arcologies[$i].FSSlaveProfessionalism += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <</if>> - <<if $corp.SpecEducation > 1>> - It's a @@.lightgreen;good market@@ for your corporation's well educated ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSSlaveProfessionalism += 2>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecEducation > 0>> - It's a @@.lightgreen;good market@@ for your corporation's educated ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSSlaveProfessionalism += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <<if $corp.SpecSexEd == 2>> - It's a @@.lightgreen;good market@@ for your corporation's well trained toys, improving sales and helping social progress. - <<set $arcologies[$i].FSSlaveProfessionalism += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecAccent == 2>> - It's a @@.lightgreen;good market@@ for your corporation's linguistically perfect slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSSlaveProfessionalism += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSBodyPurist != "unset">> - <<= _passive.output("FSBodyPurist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSBodyPurist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Body Purism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesBodyPurist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSBodyPurist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Body Purism. - <<set $arcologies[$i].FSBodyPurist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSBodyPurist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecImplants == 0>> - <<if $corp.SpecAmputee != 1>> - It's a @@.lightgreen;good market@@ for your corporation's implant-free slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSBodyPurist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSTransformationFetishist != "unset">> - <<= _passive.output("FSTransformationFetishist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSTransformationFetishist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSTransformationFetishistResearch = 1>> - Transformation Fetishism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesTransformationFetishist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSTransformationFetishist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Transformation Fetishism. - <<set $arcologies[$i].FSTransformationFetishist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSTransformationFetishist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecImplants == 1>> - It's a @@.lightgreen;good market@@ for your corporation's implanted slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSTransformationFetishist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecImplants == 2>> - It's an @@.lightgreen;excellent market@@ for your corporation's absurdly implanted slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSTransformationFetishist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSYouthPreferentialist != "unset">> - <<= _passive.output("FSYouthPreferentialist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSYouthPreferentialist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Youth Preferentialism has reached stability and acceptance there. The arcology has been renamed - <<if $pedo_mode == 1 || $minimumSlaveAge < 6>> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesYouthPreferentialistLow)>> - <<elseif $minimumSlaveAge < 14>> - <<set $arcologies[$i].name = either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow)>> - <<else>> - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesYouthPreferentialist)>> - <</if>> - '' $arcologies[$i].name'' to mark the occasion. - <<set $arcologies[$i].FSYouthPreferentialistResearch = 1>> - <</if>> - <<elseif $arcologies[$i].FSYouthPreferentialist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Youth Preferentialism. - <<set $arcologies[$i].FSYouthPreferentialist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSYouthPreferentialist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAge == 1>> - It's a @@.lightgreen;good market@@ for your corporation's young slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSYouthPreferentialist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSMaturityPreferentialist != "unset">> - <<= _passive.output("FSMaturityPreferentialist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSMaturityPreferentialist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Maturity Preferentialism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesMaturityPreferentialist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSMaturityPreferentialist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Maturity Preferentialism. - <<set $arcologies[$i].FSMaturityPreferentialist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSMaturityPreferentialist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAge == 3>> - It's a @@.lightgreen;good market@@ for your corporation's enslaved MILFs, improving sales and helping social progress. - <<set $arcologies[$i].FSMaturityPreferentialist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSPetiteAdmiration != "unset">> - <<= _passive.output("FSPetiteAdmiration")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSPetiteAdmiration >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Petite Admiration has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesPetiteAdmiration)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSPetiteAdmiration < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Petite Admiration. - <<set $arcologies[$i].FSPetiteAdmiration = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSPetiteAdmiration != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecHeight == 1>> - It's an @@.lightgreen;excellent market@@ for your corporation's minuscule slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSPetiteAdmiration += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecHeight == 2>> - It's a @@.lightgreen;good market@@ for your corporation's shorter captures, improving sales and helping social progress. - <<set $arcologies[$i].FSPetiteAdmiration += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSStatuesqueGlorification != "unset">> - <<= _passive.output("FSStatuesqueGlorification")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSStatuesqueGlorification >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Statuesque Glorification has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesStatuesqueGlorification)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSStatuesqueGlorification < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Statuesque Glorification. - <<set $arcologies[$i].FSStatuesqueGlorification = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSStatuesqueGlorification != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecHeight == 5>> - It's an @@.lightgreen;excellent market@@ for your corporation's gigantic slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSStatuesqueGlorification += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecHeight == 4>> - It's a @@.lightgreen;good market@@ for your corporation's taller captures, improving sales and helping social progress. - <<set $arcologies[$i].FSStatuesqueGlorification += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSSlimnessEnthusiast != "unset">> - <<= _passive.output("FSSlimnessEnthusiast")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSSlimnessEnthusiast >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Slimness Enthusiasm has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesSlimnessEnthusiast)>> - '' $arcologies[$i].name'' to mark the occasion. - <<set $arcologies[$i].FSSlimnessEnthusiastResearch = 1>> - <</if>> - <<elseif $arcologies[$i].FSSlimnessEnthusiast < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Slimness Enthusiasm. - <<set $arcologies[$i].FSSlimnessEnthusiast = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSSlimnessEnthusiast != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecInjection < 2>> - <<if $corp.SpecWeight < 3>> - It's a @@.lightgreen;good market@@ for your corporation's trim slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSSlimnessEnthusiast += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSAssetExpansionist != "unset">> - <<= _passive.output("FSAssetExpansionist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSAssetExpansionist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSAssetExpansionistResearch = 1>> - Asset Expansionism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesAssetExpansionist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSAssetExpansionist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Asset Expansionism. - <<set $arcologies[$i].FSAssetExpansionist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSAssetExpansionist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SPecInjection == 4>> - It's an @@.lightgreen;excellent market@@ for your corporation's world-class tits and ass, improving sales and helping social progress. - <<set $arcologies[$i].FSAssetExpansionist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecInjection == 5>> - It's a @@.lightgreen;good market@@ for your corporation's hugely endowed cows, improving sales and helping social progress. - <<set $arcologies[$i].FSAssetExpansionist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SPecInjection == 3>> - It's a @@.lightgreen;good market@@ for your corporation's stacked slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSAssetExpansionist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSPastoralist != "unset">> - <<= _passive.output("FSPastoralist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSPastoralist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Pastoralism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesPastoralist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSPastoralist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Pastoralism. - <<set $arcologies[$i].FSPastoralist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSPastoralist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecInjection == 5>> - It's an @@.lightgreen;excellent market@@ for your corporation's world-class milk producers, improving sales and helping social progress. - <<set $arcologies[$i].FSPastoralist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecMilk > 0>> - It's an @@.lightgreen;excellent market@@ for your corporation's world-class milk producers, improving sales and helping social progress. - <<set $arcologies[$i].FSPastoralist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSCummunism != "unset">> - <<= _passive.output("FSCummunism")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSCummunism >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Cummunism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesCummunism)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSCummunism < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Cummunism. - <<set $arcologies[$i].FSCummunism = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSCummunism != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecInjection == 5>> - It's an @@.lightgreen;excellent market@@ for your corporation's world-class cum producers, improving sales and helping social progress. - <<set $arcologies[$i].FSCummunism += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecHormones == 2>> - It's a @@.lightgreen;good market@@ for your corporation's masculinized slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSCummunism += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecDick == 1 && $corp.SpecBalls == 1>> - It's a @@.lightgreen;good market@@ for your corporation's slaves standard dicks and balls, improving sales and helping social progress. - <<set $arcologies[$i].FSCummunism += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSPhysicalIdealist != "unset">> - <<= _passive.output("FSPhysicalIdealist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSPhysicalIdealist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Physical Idealism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesPhysicalIdealist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSPhysicalIdealist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Physical Idealism. - <<set $arcologies[$i].FSPhysicalIdealist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSPhysicalIdealist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecMuscle == 5 >> - It's an @@.lightgreen;excellent market@@ for your corporation's ripped chicks, improving sales and helping social progress. - <<set $arcologies[$i].FSPhysicalIdealist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecMuscle == 4>> - It's a @@.lightgreen;good market@@ for your corporation's toned ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSPhysicalIdealist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <<elseif $corp.SpecHeight > 3>> - It's a @@.lightgreen;good market@@ for your corporation's tall ladies, improving sales and helping social progress. - <<set $arcologies[$i].FSPhysicalIdealist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSHedonisticDecadence != "unset">> - <<= _passive.output("FSHedonisticDecadence")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSHedonisticDecadence >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - <<set $arcologies[$i].FSHedonisticDecadenceResearch = 1>> - Decadent Hedonism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesHedonisticDecadence)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSHedonisticDecadence < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Decadent Hedonism. - <<set $arcologies[$i].FSHedonisticDecadence = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSHedonisticDecadence != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecTrust > 3>> - It's an @@.lightgreen;excellent market@@ for your corporation's well kept, happy slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSHedonisticDecadence += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecSexEd == 2>> - It's a @@.lightgreen;good market@@ for your corporation's skilled slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSHedonisticDecadence += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSIncestFetishist != "unset">> - <<= _passive.output("FSIncestFetishist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSIncestFetishist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Incest Fetishism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesIncestFetishist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSIncestFetishist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Incest Fetishism. - <<set $arcologies[$i].FSIncestFetishist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSIncestFetishist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAge == 3>> - It's a @@.lightgreen;good market@@ for your corporation's motherly slaves, especially those that look like peoples mothers, improving sales and helping social progress. - <<set $arcologies[$i].FSIncestFetishist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSChattelReligionist != "unset">> - <<= _passive.output("FSChattelReligionist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSChattelReligionist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Chattel Religionism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesChattelReligionist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSChattelReligionist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Chattel Religionism. - <<set $arcologies[$i].FSChattelReligionist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSChattelReligionist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecSexEd == 2>> - It's an @@.lightgreen;excellent market@@ for your corporation's holy sex slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSChattelReligionist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecSexEd == 1>> - It's a @@.lightgreen;good market@@ for your corporation's aspiring sexual acolytes, improving sales and helping social progress. - <<set $arcologies[$i].FSChattelReligionist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $arcologies[$i].FSRomanRevivalist != "unset">> - <<= _passive.output("FSRomanRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSRomanRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Roman Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesRomanRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSRomanRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Roman Revivalism. - <<set $arcologies[$i].FSRomanRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecEducation > 0>> - It's a @@.lightgreen;good market@@ for your corporation's properly educated slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSRomanRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> - -<<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<= _passive.output("FSNeoImperialist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSNeoImperialist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Neo-Imperialism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesNeoImperialist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSNeoImperialist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Neo-Imperialism. - <<set $arcologies[$i].FSNeoImperialist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecEducation > 0>> - It's a @@.lightgreen;good market@@ for your corporation's properly educated slaves, improving sales and helping advocate for a hierarchical Imperial society. - <<set $arcologies[$i].FSNeoImperialist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> - -<<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<= _passive.output("FSAztecRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSAztecRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Aztec Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesAztecRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSAztecRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Aztec Revivalism. - <<set $arcologies[$i].FSAztecRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAccent == 1>> - It's a @@.lightgreen;good market@@ for your corporation's lovely mix of slave accents, improving sales and helping social progress. - <<set $arcologies[$i].FSAztecRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<= _passive.output("FSEgyptianRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSEgyptianRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Egyptian Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesEgyptianRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSEgyptianRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Egyptian Revivalism. - <<set $arcologies[$i].FSEgyptianRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAccent == 1>> - It's a @@.lightgreen;good market@@ for your corporation's lovely mix of slave accents, improving sales and helping social progress. - <<set $arcologies[$i].FSEgyptianRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<= _passive.output("FSEdoRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSEdoRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Edo Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesEdoRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSEdoRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Edo Revivalism. - <<set $arcologies[$i].FSEdoRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecAccent == 2>> - It's a @@.lightgreen;good market@@ for your corporation's linguistically perfect slaves, improving sales and helping social progress. - <<set $arcologies[$i].FSEdoRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<= _passive.output("FSArabianRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSArabianRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Arabian Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesArabianRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSArabianRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Arabian Revivalism. - <<set $arcologies[$i].FSArabianRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecDevotion == 5>> - It's an @@.lightgreen;excellent market@@ for your corporation's harem-ready devotees, improving sales and helping social progress. - <<set $arcologies[$i].FSArabianRevivalist += 2>> - <<run App.Corporate.earnRevenue(_corpBonus*2, 'foreign')>> - <<elseif $corp.SpecDevotion == 4>> - It's a @@.lightgreen;good market@@ for your corporation's properly broken girls, improving sales and helping social progress. - <<set $arcologies[$i].FSArabianRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<= _passive.output("FSChineseRevivalist")>> - <<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].FSChineseRevivalist >= $FSLockinLevel>> - <<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>> - Chinese Revivalism has reached stability and acceptance there. The arcology has been renamed - <<set $arcologies[$i].name = App.Neighbor.getUnusedName(setup.ArcologyNamesChineseRevivalist)>> - '' $arcologies[$i].name'' to mark the occasion. - <</if>> - <<elseif $arcologies[$i].FSChineseRevivalist < 0>> - $arcologies[$i].name @@.cyan;has given up@@ on Chinese Revivalism. - <<set $arcologies[$i].FSChineseRevivalist = "unset">> - <</if>> - <</if>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">> - <<if $corp.Incorporated == 1>> - <<if $corp.SpecIntelligence == 3>> - It's a @@.lightgreen;good market@@ for your corporation's intelligent Head Girl prospects, improving sales and helping social progress. - <<set $arcologies[$i].FSChineseRevivalist += 1>> - <<run App.Corporate.earnRevenue(_corpBonus, 'foreign')>> - <</if>> - <</if>> - <</if>> -<</if>> -<<run FutureSocieties.overflowToInfluence($i)>> - -/* FUTURE SOCIETY ADOPTION */ - -<<if $arcologies[$i].direction != 0>> - <<if _societiesAdopted < $FSCreditCount>> - <<if ($arcologies[$i].rival == 1) || (_societiesAdopted < ($arcologies[$i].prosperity/25)+($week/25)-3)>> - - <<include "Neighbors FS Adoption">> - - <</if>> - <</if>> -<</if>> /* CLOSES FUTURE SOCIETY ADOPTION */ - -/* INFLUENCE RECEPTION */ - -<<for $j = 0; $j < $arcologies.length; $j++>> -<<if $arcologies[$j].direction != $arcologies[$i].direction>> -<<if $arcologies[$j].influenceTarget == $arcologies[$i].direction>> - -<<set $arcologies[$j].influenceBonus = Math.clamp($arcologies[$j].influenceBonus, 0, $FSLockinLevel)>> -<<set _appliedInfluenceBonus = Math.trunc($arcologies[$j].influenceBonus*0.1)>> -<<set $arcologies[$j].influenceBonus -= _appliedInfluenceBonus*2>> -<<if $policies.culturalOpenness == 1>> - <<if ($arcologies[$i].direction == 0) || ($arcologies[$j].direction == 0)>> - <<set _appliedInfluenceBonus *= 2>> - <</if>> -<<elseif $policies.culturalOpenness == -1>> - <<if ($arcologies[$i].direction == 0) || ($arcologies[$j].direction == 0)>> - <<set _appliedInfluenceBonus /= 2>> - <</if>> -<</if>> -<<if $arcologies[$i].ownership >= 100>> - <<set _appliedInfluenceBonus /= 2>> -<</if>> -<<set $desc = []>> -<<set _alignment = 0>> - -<<if $arcologies[$j].FSSubjugationist > 60>> - <<if ($arcologies[$i].FSSubjugationist != "unset")>> - <<if ($arcologies[$j].FSSubjugationistRace == $arcologies[$i].FSSubjugationistRace)>> - <<set $arcologies[$i].FSSubjugationist += Math.trunc(($arcologies[$j].FSSubjugationist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSSubjugationist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its racially aligned Subjugationism")>> - <<else>> - <<set $arcologies[$i].FSSubjugationist -= Math.trunc(($arcologies[$j].FSSubjugationist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Subjugationism")>> - <</if>> - <<elseif ($arcologies[$i].FSSupremacist != "unset") && ($arcologies[$j].FSSubjugationistRace == $arcologies[$i].FSSupremacistRace)>> - <<set $arcologies[$i].FSSupremacist -= Math.trunc(($arcologies[$j].FSSubjugationist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its opposing Supremacism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSSupremacist > 60>> - <<if ($arcologies[$i].FSSupremacist != "unset")>> - <<if ($arcologies[$j].FSSupremacistRace == $arcologies[$i].FSSupremacistRace)>> - <<set $arcologies[$i].FSSupremacist += Math.trunc(($arcologies[$j].FSSupremacist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSSupremacist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its racially aligned Supremacism")>> - <<else>> - <<set $arcologies[$i].FSSupremacist -= Math.trunc(($arcologies[$j].FSSupremacist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Supremacism")>> - <</if>> - <<elseif ($arcologies[$i].FSSubjugationist != "unset") && ($arcologies[$j].FSSupremacistRace == $arcologies[$i].FSSubjugationistRace)>> - <<set $arcologies[$i].FSSubjugationist -= Math.trunc(($arcologies[$j].FSSupremacist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its opposing Subjugationism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSRepopulationFocus > 60>> - <<if $arcologies[$i].FSRepopulationFocus != "unset">> - <<set $arcologies[$i].FSRepopulationFocus += Math.trunc(($arcologies[$j].FSRepopulationFocus-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSRepopulationFocus > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Repopulationism")>> - <<elseif $arcologies[$i].FSRestart != "unset">> - <<set $arcologies[$i].FSRestart -= Math.trunc(($arcologies[$j].FSRepopulationFocus-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Eugenics")>> - <</if>> -<<elseif $arcologies[$j].FSRestart > 60>> - <<if $arcologies[$i].FSRestart != "unset">> - <<set $arcologies[$i].FSRestart += Math.trunc(($arcologies[$j].FSRestart-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSRestart > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Eugenics")>> - <<elseif $arcologies[$i].FSRepopulationFocus != "unset">> - <<set $arcologies[$i].FSRepopulationFocus -= Math.trunc(($arcologies[$j].FSRestart-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Repopulation Efforts")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSGenderRadicalist > 60>> - <<if $arcologies[$i].FSGenderRadicalist != "unset">> - <<set $arcologies[$i].FSGenderRadicalist += Math.trunc(($arcologies[$j].FSGenderRadicalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSGenderRadicalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Gender Radicalism")>> - <<elseif $arcologies[$i].FSGenderFundamentalist != "unset">> - <<set $arcologies[$i].FSGenderFundamentalist -= Math.trunc(($arcologies[$j].FSGenderRadicalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Gender Fundamentalism")>> - <</if>> -<<elseif $arcologies[$j].FSGenderFundamentalist > 60>> - <<if $arcologies[$i].FSGenderFundamentalist != "unset">> - <<set $arcologies[$i].FSGenderFundamentalist += Math.trunc(($arcologies[$j].FSGenderFundamentalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSGenderFundamentalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Gender Fundamentalism")>> - <<elseif $arcologies[$i].FSGenderRadicalist != "unset">> - <<set $arcologies[$i].FSGenderRadicalist -= Math.trunc(($arcologies[$j].FSGenderFundamentalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Gender Radicalism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSPaternalist > 60>> - <<if $arcologies[$i].FSPaternalist != "unset">> - <<set $arcologies[$i].FSPaternalist += Math.trunc(($arcologies[$j].FSPaternalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSPaternalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Paternalism")>> - <<elseif $arcologies[$i].FSDegradationist != "unset">> - <<set $arcologies[$i].FSDegradationist -= Math.trunc(($arcologies[$j].FSPaternalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Degradationism")>> - <</if>> -<<elseif $arcologies[$j].FSDegradationist > 60>> - <<if $arcologies[$i].FSDegradationist != "unset">> - <<set $arcologies[$i].FSDegradationist += Math.trunc(($arcologies[$j].FSDegradationist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSDegradationist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Degradationism")>> - <<elseif $arcologies[$i].FSPaternalist != "unset">> - <<set $arcologies[$i].FSPaternalist -= Math.trunc(($arcologies[$j].FSDegradationist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Paternalism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSIntellectualDependency > 60>> - <<if $arcologies[$i].FSIntellectualDependency != "unset">> - <<set $arcologies[$i].FSIntellectualDependency += Math.trunc(($arcologies[$j].FSIntellectualDependency-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSIntellectualDependency > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Intellectual Dependency")>> - <<elseif $arcologies[$i].FSSlaveProfessionalism != "unset">> - <<set $arcologies[$i].FSSlaveProfessionalism -= Math.trunc(($arcologies[$j].FSIntellectualDependency-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Slave Professionalism")>> - <</if>> -<<elseif $arcologies[$j].FSSlaveProfessionalism > 60>> - <<if $arcologies[$i].FSSlaveProfessionalism != "unset">> - <<set $arcologies[$i].FSSlaveProfessionalism += Math.trunc(($arcologies[$j].FSSlaveProfessionalism-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSSlaveProfessionalism > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Slave Professionalism")>> - <<elseif $arcologies[$i].FSIntellectualDependency != "unset">> - <<set $arcologies[$i].FSIntellectualDependency -= Math.trunc(($arcologies[$j].FSSlaveProfessionalism-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Intellectual Dependency")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSBodyPurist > 60>> - <<if $arcologies[$i].FSBodyPurist != "unset">> - <<set $arcologies[$i].FSBodyPurist += Math.trunc(($arcologies[$j].FSBodyPurist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSBodyPurist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Body Purism")>> - <<elseif $arcologies[$i].FSTransformationFetishist != "unset">> - <<set $arcologies[$i].FSTransformationFetishist -= Math.trunc(($arcologies[$j].FSBodyPurist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Transformation Fetishism")>> - <</if>> -<<elseif $arcologies[$j].FSTransformationFetishist > 60>> - <<if $arcologies[$i].FSTransformationFetishist != "unset">> - <<set $arcologies[$i].FSTransformationFetishist += Math.trunc(($arcologies[$j].FSTransformationFetishist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSTransformationFetishist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Transformation Fetishism")>> - <<elseif $arcologies[$i].FSBodyPurist != "unset">> - <<set $arcologies[$i].FSBodyPurist -= Math.trunc(($arcologies[$j].FSTransformationFetishist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Body Purism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSYouthPreferentialist > 60>> - <<if $arcologies[$i].FSYouthPreferentialist != "unset">> - <<set $arcologies[$i].FSYouthPreferentialist += Math.trunc(($arcologies[$j].FSYouthPreferentialist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSYouthPreferentialist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Youth Preferentialism")>> - <<elseif $arcologies[$i].FSMaturityPreferentialist != "unset">> - <<set $arcologies[$i].FSMaturityPreferentialist -= Math.trunc(($arcologies[$j].FSYouthPreferentialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Maturity Preferentialism")>> - <</if>> -<<elseif $arcologies[$j].FSMaturityPreferentialist > 60>> - <<if $arcologies[$i].FSMaturityPreferentialist != "unset">> - <<set $arcologies[$i].FSMaturityPreferentialist += Math.trunc(($arcologies[$j].FSMaturityPreferentialist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSMaturityPreferentialist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Maturity Preferentialism")>> - <<elseif $arcologies[$i].FSYouthPreferentialist != "unset">> - <<set $arcologies[$i].FSYouthPreferentialist -= Math.trunc(($arcologies[$j].FSMaturityPreferentialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Youth Preferentialism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSPetiteAdmiration > 60>> - <<if $arcologies[$i].FSPetiteAdmiration != "unset">> - <<set $arcologies[$i].FSPetiteAdmiration += Math.trunc(($arcologies[$j].FSPetiteAdmiration-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSPetiteAdmiration > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Petite Admiration")>> - <<elseif $arcologies[$i].FSStatuesqueGlorification != "unset">> - <<set $arcologies[$i].FSStatuesqueGlorification -= Math.trunc(($arcologies[$j].FSPetiteAdmiration-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Statuesque Glorification")>> - <</if>> -<<elseif $arcologies[$j].FSStatuesqueGlorification > 60>> - <<if $arcologies[$i].FSStatuesqueGlorification != "unset">> - <<set $arcologies[$i].FSStatuesqueGlorification += Math.trunc(($arcologies[$j].FSStatuesqueGlorification-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSStatuesqueGlorification > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Statuesque Glorification")>> - <<elseif $arcologies[$i].FSPetiteAdmiration != "unset">> - <<set $arcologies[$i].FSPetiteAdmiration -= Math.trunc(($arcologies[$j].FSStatuesqueGlorification-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Petite Admiration")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSSlimnessEnthusiast > 60>> - <<if $arcologies[$i].FSSlimnessEnthusiast != "unset">> - <<set $arcologies[$i].FSSlimnessEnthusiast += Math.trunc(($arcologies[$j].FSSlimnessEnthusiast-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSSlimnessEnthusiast > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Slimness Enthusiasm")>> - <<elseif $arcologies[$i].FSAssetExpansionist != "unset">> - <<set $arcologies[$i].FSAssetExpansionist -= Math.trunc(($arcologies[$j].FSSlimnessEnthusiast-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Asset Expansionism")>> - <</if>> -<<elseif $arcologies[$j].FSAssetExpansionist > 60>> - <<if $arcologies[$i].FSAssetExpansionist != "unset">> - <<set $arcologies[$i].FSAssetExpansionist += Math.trunc(($arcologies[$j].FSAssetExpansionist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSAssetExpansionist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Asset Expansionism")>> - <<elseif $arcologies[$i].FSSlimnessEnthusiast != "unset">> - <<set $arcologies[$i].FSSlimnessEnthusiast -= Math.trunc(($arcologies[$j].FSAssetExpansionist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Slimness Enthusiasm")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSPastoralist > 60>> - <<if $arcologies[$i].FSPastoralist != "unset">> - <<set $arcologies[$i].FSPastoralist += Math.trunc(($arcologies[$j].FSPastoralist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSPastoralist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Pastoralism")>> - <<elseif $arcologies[$i].FSCummunism != "unset">> - <<set $arcologies[$i].FSCummunism -= Math.trunc(($arcologies[$j].FSPastoralist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Cummunism")>> - <</if>> -<<elseif $arcologies[$j].FSCummunism > 60>> - <<if $arcologies[$i].FSCummunism != "unset">> - <<set $arcologies[$i].FSCummunism += Math.trunc(($arcologies[$j].FSCummunism-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSCummunism > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Cummunism")>> - <<elseif $arcologies[$i].FSPastoralist != "unset">> - <<set $arcologies[$i].FSPastoralist -= Math.trunc(($arcologies[$j].FSCummunism-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Pastoralism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSPhysicalIdealist > 60>> - <<if $arcologies[$i].FSPhysicalIdealist != "unset">> - <<set $arcologies[$i].FSPhysicalIdealist += Math.trunc(($arcologies[$j].FSPhysicalIdealist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSPhysicalIdealist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Physical Idealism")>> - <<elseif $arcologies[$i].FSHedonisticDecadence != "unset">> - <<set $arcologies[$i].FSHedonisticDecadence -= Math.trunc(($arcologies[$j].FSPhysicalIdealist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Hedonism")>> - <</if>> -<<elseif $arcologies[$j].FSHedonisticDecadence > 60>> - <<if $arcologies[$i].FSHedonisticDecadence != "unset">> - <<set $arcologies[$i].FSHedonisticDecadence += Math.trunc(($arcologies[$j].FSHedonisticDecadence-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSHedonisticDecadence > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Hedonism")>> - <<elseif $arcologies[$i].FSPhysicalIdealist != "unset">> - <<set $arcologies[$i].FSPhysicalIdealist -= Math.trunc(($arcologies[$j].FSHedonisticDecadence-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its Physical Idealism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSIncestFetishist > 60>> - <<if $arcologies[$i].FSIncestFetishist != "unset">> - <<set $arcologies[$i].FSIncestFetishist += Math.trunc(($arcologies[$j].FSIncestFetishist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSIncestFetishist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Incest Fetishism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSChattelReligionist > 60>> - <<if $arcologies[$i].FSChattelReligionist != "unset">> - <<set $arcologies[$i].FSChattelReligionist += Math.trunc(($arcologies[$j].FSChattelReligionist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSChattelReligionist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Chattel Religionism")>> - <</if>> -<</if>> -<<if $arcologies[$j].FSRomanRevivalist > 60>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist += Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSRomanRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Roman Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSRomanRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<<elseif $arcologies[$j].FSAztecRevivalist > 60>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist += Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSAztecRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Aztec Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSAztecRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<<elseif $arcologies[$j].FSEgyptianRevivalist > 60>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist += Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSEgyptianRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Egyptian Revivalism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSEgyptianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<<elseif $arcologies[$j].FSEdoRevivalist > 60>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist += Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSEdoRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Edo Revivalism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSEdoRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<<elseif $arcologies[$j].FSArabianRevivalist > 60>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist += Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSArabianRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Arabian Revivalism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSArabianRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<<elseif $arcologies[$j].FSChineseRevivalist > 60>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist += Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSChineseRevivalist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Chinese Revivalism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Imperialism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> - -<<elseif $arcologies[$j].FSNeoImperialist > 60>> - <<if $arcologies[$i].FSNeoImperialist != "unset">> - <<set $arcologies[$i].FSNeoImperialist += Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<if $arcologies[$i].FSNeoImperialist > $FSLockinLevel>><<set _alignment += 1>><</if>> - <<set $desc.push("helping to advance its Neo-Imperialism")>> - <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">> - <<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSChineseRevivalist != "unset">> - <<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSEdoRevivalist != "unset">> - <<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSArabianRevivalist != "unset">> - <<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSRomanRevivalist != "unset">> - <<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <<elseif $arcologies[$i].FSAztecRevivalist != "unset">> - <<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>> - <<set $desc.push("attacking its incompatible Revivalism")>> - <</if>> -<</if>> - -<<if $desc.length == 0>> - '' $arcologies[$j].name'' attempts to influence it, but has no significant impacts. -<<elseif $desc.length > 2>> - '' $arcologies[$j].name'''s mature culture influences $arcologies[$i].name, $desc[0], - <<for _k = 1; _k < $desc.length; _k++>> - <<if _k < $desc.length-1>> - $desc[_k], - <<else>> - and $desc[_k]. - <</if>> - <</for>> -<<elseif $desc.length == 2>> - '' $arcologies[$j].name'''s culture influences $arcologies[$i].name's $desc[0] and $desc[1]. -<<else>> - '' $arcologies[$j].name'''s culture is beginning to influence $arcologies[$i].name's $desc[0]. -<</if>> - -<<if _appliedInfluenceBonus > 0>> - <<if _appliedInfluenceBonus < 5>> - $arcologies[$j].name is societally advanced, giving it extra influence. - <<else>> - $arcologies[$j].name is societally fanatical, lending it great influence. - <</if>> -<</if>> -<<if $arcologies[$i].ownership >= 100>> - <<if _appliedInfluenceBonus > 0>>However, <</if>>$arcologies[$i].name is under completely unified control, making it resistant to change. -<</if>> - -<<if $arcologies[$j].direction != 0>> - <<if $desc.length == 0>> - '' $arcologies[$j].name'' is not satisfied with the impact its directed influence is having, and withdraws it with the intention of targeting it elsewhere. - <<set $arcologies[$j].influenceTarget = -1>> - <<elseif _alignment >= 4>> - '' $arcologies[$j].name'' is satisfied that its influence has brought $arcologies[$i].name into alignment, and withdraws its direct influence with the intention of targeting it elsewhere. - <<set $arcologies[$j].influenceTarget = -1>> - <</if>> -<</if>> - -<</if>> -<</if>> -<</for>> /* CLOSES INFLUENCE RECEPTION */ - -<<if $arcologies[$i].direction != 0>> - <<if $arcologies[$i].influenceTarget == -1>> - <<run App.Neighbor.selectInfluenceTarget($i)>> - <</if>> -<</if>> - -<<if $arcologies[$i].direction != 0>> - <<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, 300)>> - <<set $arcologies[$i].ownership = Math.clamp($arcologies[$i].ownership, 0, 100)>> - <<set $arcologies[$i].PCminority = Math.clamp($arcologies[$i].PCminority, 0, 100)>> - <<set $arcologies[$i].minority = Math.clamp($arcologies[$i].minority, 0, 100)>> - <<set _owned = $arcologies[$i].ownership + $arcologies[$i].PCminority + $arcologies[$i].minority>> - <<if $arcologies[$i].government != "your agent" && $arcologies[$i].government != "your trustees" && $arcologies[$i].rival != 1>> - <<if _owned < 10>> - <<set $arcologies[$i].ownership += 10>> /* Someone needs to own something */ - <<elseif _owned > 100>> - <<set $arcologies[$i].minority = Math.clamp(100 - $arcologies[$i].ownership - $arcologies[$i].PCminority, 0, 100)>> - <<if $arcologies[$i].ownership + $arcologies[$i].PCminority > 100>> - <<set $arcologies[$i].ownership = 100 - $arcologies[$i].PCminority>> - <</if>> - <</if>> - <</if>> -<</if>> - -<br> -<</for>> - -/* PEACEKEEPERS */ - -<<if $plot>> - <<if $peacekeepers != 0>> - <br> - <<if $peacekeepers.strength >= 50>> - <<set _prisoners = Math.trunc($peacekeepers.attitude/10)+random(0,10)>> - General $peacekeepers.generalName's little empire near the arcology - <<if $peacekeepers.attitude >= 100>> - offers _prisoners menial slaves as tribute; having the area as an avowed client state @@.green;improves your reputation.@@ - <<set $peacekeepers.attitude = 100>> - <<run repX(100, "peacekeepers")>> - <<else>> - delivers _prisoners menial slaves to you in payment for your past support. - <</if>> - <<set $menials += _prisoners>> - <<elseif $peacekeepers.strength < 0>> - @@.yellow;The peacekeeping force led by General $peacekeepers.generalName in the troubled area near the Free City has been withdrawn.@@ - <<if $peacekeepers.undermining>> - Your misinformation campaign against it in the old world media was successful. Before long, everyone in the Free City is confident that you're somehow responsible, @@.green;greatly improving your reputation.@@ - <<set $peacekeepers = 0, $peacekeepersGone = 1>> - <<run repX(2000, "peacekeepers")>> - <<else>> - The cost was ultimately too high. The time when old world countries could afford to waste billions on military adventurism is gone. It will not return. - <<set $peacekeepers = 0, $peacekeepersGone = 1>> - <</if>> - <<else>> - There's a peacekeeping force led by General $peacekeepers.generalName in the troubled area near the Free City. - <<if $peacekeepers.undermining>> - You're paying for a media misinformation campaign in the old world country that sent him. It - <<set $peacekeepers.strength -= $peacekeepers.undermining/10000>> - <<if $peacekeepers.strength < 10>> - has had a significant impact; one of the nation's two major political parties now favors withdrawing the peacekeepers. - <<else>> - has not had a significant impact yet; only a few fringe figures are arguing against the mission. - <</if>> - <</if>> - Unfortunately, the presence of so much old world military power near the Free City causes @@.red;public concern.@@ - <<run repX(-100, "peacekeepers")>> - <</if>> - <br> - <</if>> -<</if>> diff --git a/src/uncategorized/neighborsFSAdoption.tw b/src/uncategorized/neighborsFSAdoption.tw deleted file mode 100644 index 81ff14fed950a09aea08394be1f48f032af2a727..0000000000000000000000000000000000000000 --- a/src/uncategorized/neighborsFSAdoption.tw +++ /dev/null @@ -1,1020 +0,0 @@ -:: Neighbors FS Adoption [nobr] - -<br><br> -'' $arcologies[$i].name'', your <<if $arcologies[$i].direction == 0>>arcology<<else>>neighbor to the $arcologies[$i].direction<</if>>, -is prosperous enough that -<<switch $arcologies[$i].government>> -<<case "elected officials">> - its elected officials consider -<<case "a committee">> - the committee that controls it considers -<<case "an oligarchy" "your trustees">> - its leading citizens consider -<<case "an individual">> - its owner and its citizens consider -<<case "your agent">> - @@.deeppink;your agent@@ and its citizens consider -<<case "a corporation">> - its board of directors considers -<<default>> - its citizens consider -<</switch>> -societal development. -<<set _adopted = 0>> - -<<set _validFSes = FutureSocieties.validAdoptions($i)>> - -/* PRIME RIVALRY FS ADOPTION - IGNORES VALIDITY */ - -<<if $arcologies[$i].rival == 1>> -<<if $arcologies[$i].government == "an individual">> -<<if $rivalryFSAdopted == 0>> - - <<set $rivalryFSAdopted = 1>> - <<set $desc = "Its owner is">> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<if $arcologies[$i].FSSubjugationist != "unset">><<set $arcologies[$i].FSSubjugationist = "unset">><</if>> - $desc preoccupied by belief in the superiority of the $arcologies[0].FSSubjugationistRace race, leading the arcology to @@.yellow;adopt $arcologies[0].FSSubjugationistRace Supremacy.@@ - <<set $arcologies[$i].FSSupremacist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSupremacistRace = $arcologies[0].FSSubjugationistRace>> - <<case "Racial Supremacism">> - <<if $arcologies[$i].FSSupremacist != "unset">><<set $arcologies[$i].FSSupremacist = "unset">><</if>> - $desc preoccupied by a racial animus towards $arcologies[0].FSSupremacistRace people, leaving the arcology to @@.yellow;adopt $arcologies[0].FSSupremacistRace Subjugation.@@ - <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSubjugationistRace = $arcologies[0].FSSupremacistRace>> - <<case "Repopulation Focus">> - <<if $arcologies[$i].FSRepopulationFocus != "unset">><<set $arcologies[$i].FSRepopulationFocus = "unset">><</if>> - $desc obsessed with building a new society based on its Societal Elite, leading the arcology to @@.yellow;adopt Eugenics.@@ - <<set $arcologies[$i].FSRestart = 5>><<set _adopted = 1>> - <<case "Eugenics">> - <<if $arcologies[$i].FSRestart != "unset">><<set $arcologies[$i].FSRestart = "unset">><</if>> - $desc obsessed with breeding a new society, leading the arcology to @@.yellow;adopt Repopulationism.@@ - <<set $arcologies[$i].FSRepopulationFocus = 5>><<set _adopted = 1>> - <<case "Gender Radicalism">> - <<if $arcologies[$i].FSGenderRadicalist != "unset">><<set $arcologies[$i].FSGenderRadicalist = "unset">><</if>> - $desc enthusiastic about knocking slaves up, leading the arcology to @@.yellow;adopt Gender Fundamentalism.@@ - <<set $arcologies[$i].FSGenderFundamentalist = 5>><<set _adopted = 1>> - <<case "Gender Fundamentalism">> - <<if $arcologies[$i].FSGenderFundamentalist != "unset">><<set $arcologies[$i].FSGenderFundamentalist = "unset">><</if>> - $desc enthusiastic about fucking slaves in the butt, leading the arcology to @@.yellow;adopt Gender Radicalism.@@ - <<set $arcologies[$i].FSGenderRadicalist = 5>><<set _adopted = 1>> - <<case "Paternalism">> - <<if $arcologies[$i].FSPaternalist != "unset">><<set $arcologies[$i].FSPaternalist = "unset">><</if>> - $desc partial to screaming and struggling, leading the arcology to @@.yellow;adopt Degradationism.@@ - <<set $arcologies[$i].FSDegradationist = 5>><<set _adopted = 1>> - <<case "Degradationism">> - <<if $arcologies[$i].FSDegradationist != "unset">><<set $arcologies[$i].FSDegradationist = "unset">><</if>> - $desc devoted to their slaves' advancement, leading the arcology to @@.yellow;adopt Paternalism.@@ - <<set $arcologies[$i].FSPaternalist = 5>><<set _adopted = 1>> - <<case "Intellectual Dependency">> - <<if $arcologies[$i].FSIntellectualDependency != "unset">><<set $arcologies[$i].FSIntellectualDependency = "unset">><</if>> - $desc obsessed with crafting the perfect slave, leading the arcology to @@.yellow;adopt Slave Professionalism.@@ - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<set _adopted = 1>> - <<case "Slave Professionalism">> - <<if $arcologies[$i].FSSlaveProfessionalism != "unset">><<set $arcologies[$i].FSSlaveProfessionalism = "unset">><</if>> - $desc worried that they may one day be outsmarted by their chattel, leading the arcology to @@.yellow;adopt Intellectual Dependency.@@ - <<set $arcologies[$i].FSIntellectualDependency = 5>><<set _adopted = 1>> - <<case "Body Purism">> - <<if $arcologies[$i].FSBodyPurist != "unset">><<set $arcologies[$i].FSBodyPurist = "unset">><</if>> - $desc fascinated with extreme surgery, leading the arcology to @@.yellow;adopt Transformation Fetishism.@@ - <<set $arcologies[$i].FSTransformationFetishist = 5>><<set _adopted = 1>> - <<case "Transformation Fetishism">> - <<if $arcologies[$i].FSTransformationFetishist != "unset">><<set $arcologies[$i].FSTransformationFetishist = "unset">><</if>> - $desc concerned by trends in their slaves' health, leading the arcology to @@.yellow;adopt Body Purism.@@ - <<set $arcologies[$i].FSBodyPurist = 5>><<set _adopted = 1>> - <<case "Youth Preferentialism">> - <<if $arcologies[$i].FSYouthPreferentialist != "unset">><<set $arcologies[$i].FSYouthPreferentialist = "unset">><</if>> - $desc devoted to time in bed with their MILF slaves, leading the arcology to @@.yellow;adopt Maturity Preferentialism.@@ - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<set _adopted = 1>> - <<case "Maturity Preferentialism">> - <<if $arcologies[$i].FSMaturityPreferentialist != "unset">><<set $arcologies[$i].FSMaturityPreferentialist = "unset">><</if>> - $desc devoted to fucking nubile young slaves, leading the arcology to @@.yellow;adopt Youth Preferentialism.@@ - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<set _adopted = 1>> - <<case "Petite Admiration">> - <<if $arcologies[$i].FSPetiteAdmiration != "unset">><<set $arcologies[$i].FSPetiteAdmiration = "unset">><</if>> - $desc convinced that tall equals beauty, leading the arcology to @@.yellow;adopt Statuesque Glorification.@@ - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<set _adopted = 1>> - <<case "Statuesque Glorification">> - <<if $arcologies[$i].FSStatuesqueGlorification != "unset">><<set $arcologies[$i].FSStatuesqueGlorification = "unset">><</if>> - $desc enamored by those shorter than them, leading the arcology to @@.yellow;adopt Petite Admiration.@@ - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<set _adopted = 1>> - <<case "Slimness Enthusiasm">> - <<if $arcologies[$i].FSSlimnessEnthusiast != "unset">><<set $arcologies[$i].FSSlimnessEnthusiast = "unset">><</if>> - $desc loves boobs, the bigger, the better, leading the arcology to @@.yellow;adopt Asset Expansionism.@@ - <<set $arcologies[$i].FSAssetExpansionist = 5>><<set _adopted = 1>> - <<case "Asset Expansionism">> - <<if $arcologies[$i].FSAssetExpansionist != "unset">><<set $arcologies[$i].FSAssetExpansionist = "unset">><</if>> - $desc loves a slim slave with tight holes, leading the arcology to @@.yellow;adopt Slimness Enthusiasm.@@ - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<set _adopted = 1>> - <<case "Pastoralism">> - <<if $arcologies[$i].FSPastoralist != "unset">><<set $arcologies[$i].FSPastoralist = "unset">><</if>> - $desc loves cum, leading the arcology to @@.yellow;adopt Cummunism.@@ - <<set $arcologies[$i].FSCummunism = 5>><<set _adopted = 1>> - <<case "Cummunism">> - <<if $arcologies[$i].FSCummunism != "unset">><<set $arcologies[$i].FSCummunism = "unset">><</if>> - $desc addicted to breast milk straight from the nipple, leading the arcology to @@.yellow;adopt Pastoralism.@@ - <<set $arcologies[$i].FSPastoralist = 5>><<set _adopted = 1>> - <<case "Hedonistic Decadence">> - <<if $arcologies[$i].FSHedonisticDecadence != "unset">><<set $arcologies[$i].FSHedonisticDecadence = "unset">><</if>> - $desc devoted to spending time in the gym, leading the arcology to @@.yellow;adopt Physical Idealism.@@ - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<set _adopted = 1>> - <<case "Physical Idealism">> - <<if $arcologies[$i].FSPhysicalIdealist != "unset">><<set $arcologies[$i].FSPhysicalIdealist = "unset">><</if>> - $desc addicted to pleasure, leading the arcology to @@.yellow;adopt Decadent Hedonism.@@ - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<set _adopted = 1>> - <<case "Chattel Religionism">> - <<if $arcologies[$i].FSChattelReligionist != "unset">><<set $arcologies[$i].FSChattelReligionist = "unset">><</if>> - $desc open minded, leading the arcology to @@.yellow;permit cultural freedom.@@ - <<set $arcologies[$i].FSNull = 5>><<set _adopted = 1>> - <<case "Multiculturalism">> - <<if $arcologies[$i].FSNull != "unset">><<set $arcologies[$i].FSNull = "unset">><</if>> - $desc devoutly religious, and interested in a reformation, leading the arcology to @@.yellow;adopt Chattel Religionism.@@ - <<set $arcologies[$i].FSChattelReligionist = 5>><<set _adopted = 1>> - <<case "Roman Revivalism">> - <<if $arcologies[$i].FSRomanRevivalist != "unset">><<set $arcologies[$i].FSRomanRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">><<set $arcologies[$i].FSEgyptianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">><<set $arcologies[$i].FSEdoRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">><<set $arcologies[$i].FSArabianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">><<set $arcologies[$i].FSChineseRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by ancient Aztec history, leading the arcology to @@.yellow;adopt Aztec Revivalism.@@ - <<set $arcologies[$i].FSAztecRevivalist = 5>><<set _adopted = 1>> - <<case "Neo-Imperialism" "Egyptian Revivalism">> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">><<set $arcologies[$i].FSEgyptianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">><<set $arcologies[$i].FSRomanRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">><<set $arcologies[$i].FSEdoRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">><<set $arcologies[$i].FSChineseRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">><<set $arcologies[$i].FSAztecRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by Arabian romanticism, leading the arcology to @@.yellow;adopt Arabian Revivalism.@@ - <<set $arcologies[$i].FSArabianRevivalist = 5>><<set _adopted = 1>> - <<case "Edo Revivalism">> - <<if $arcologies[$i].FSEdoRevivalist != "unset">><<set $arcologies[$i].FSEdoRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">><<set $arcologies[$i].FSRomanRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">><<set $arcologies[$i].FSEgyptianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">><<set $arcologies[$i].FSArabianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">><<set $arcologies[$i].FSAztecRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by the long tale of Chinese history, leading the arcology to @@.yellow;adopt Chinese Revivalism.@@ - <<set $arcologies[$i].FSChineseRevivalist = 5>><<set _adopted = 1>> - <<case "Arabian Revivalism">> - <<if $arcologies[$i].FSArabianRevivalist != "unset">><<set $arcologies[$i].FSArabianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">><<set $arcologies[$i].FSRomanRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">><<set $arcologies[$i].FSEdoRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">><<set $arcologies[$i].FSChineseRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">><<set $arcologies[$i].FSAztecRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by ancient Egyptian history, leading the arcology to @@.yellow;adopt Egyptian Revivalism.@@ - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<set _adopted = 1>> - <<case "Chinese Revivalism">> - <<if $arcologies[$i].FSChineseRevivalist != "unset">><<set $arcologies[$i].FSChineseRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSRomanRevivalist != "unset">><<set $arcologies[$i].FSRomanRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">><<set $arcologies[$i].FSEgyptianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">><<set $arcologies[$i].FSArabianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSAztecRevivalist != "unset">><<set $arcologies[$i].FSAztecRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by Japanese history, leading the arcology to @@.yellow;adopt Edo Revivalism.@@ - <<set $arcologies[$i].FSEdoRevivalist = 5>><<set _adopted = 1>> - <<case "Aztec Revivalism">> - <<if $arcologies[$i].FSAztecRevivalist != "unset">><<set $arcologies[$i].FSAztecRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEgyptianRevivalist != "unset">><<set $arcologies[$i].FSEgyptianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSEdoRevivalist != "unset">><<set $arcologies[$i].FSEdoRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSArabianRevivalist != "unset">><<set $arcologies[$i].FSArabianRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSChineseRevivalist != "unset">><<set $arcologies[$i].FSChineseRevivalist = "unset">><</if>> - <<if $arcologies[$i].FSNeoImperialist != "unset">><<set $arcologies[$i].FSNeoImperialist = "unset">><</if>> - $desc fascinated by classical Roman history, leading the arcology to @@.yellow;adopt Roman Revivalism.@@ - <<set $arcologies[$i].FSRomanRevivalist = 5>><<set _adopted = 1>> - <<default>> - <<set $rivalryFSAdopted = 0>> - <</switch>> - -<<else>> - -/* RIVAL ADOPTION */ - - <<set $desc = "Its owner is">> - <<if $arcologies[0].FSSubjugationist > random(5,60)>> - <<if _validFSes.includes("FSSupremacist") && ($arcologies[$i].FSSubjugationist == "unset") || ($arcologies[$i].FSSubjugationistRace !== $arcologies[0].FSSubjugationistRace)>> - $desc preoccupied by belief in the superiority of the $arcologies[0].FSSubjugationistRace race, leading the arcology to @@.yellow;adopt $arcologies[0].FSSubjugationistRace Supremacy.@@ - <<set $arcologies[$i].FSSupremacist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSupremacistRace = $arcologies[0].FSSubjugationistRace>> - <</if>> - <</if>> - <<if $arcologies[0].FSSupremacist > random(5,60)>> - <<if (_validFSes.includes("FSSubjugationist") && ($arcologies[$i].FSSupremacist == "unset") || ($arcologies[$i].FSSupremacistRace !== $arcologies[0].FSSupremacistRace)>> - $desc preoccupied by a racial animus towards $arcologies[0].FSSupremacistRace people, leading the arcology to @@.yellow;adopt $arcologies[0].FSSupremacistRace Subjugation.@@ - <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSubjugationistRace = $arcologies[0].FSSupremacistRace>> - <</if>> - <</if>> - <<if $arcologies[0].FSRestart > random(5,60)>> - <<if _validFSes.includes("FSRepopulationFocus")>> - $desc obsessed with breeding a new society, leading the arcology to @@.yellow;adopt Repopulationism.@@ - <<set $arcologies[$i].FSRepopulationFocus = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSRepopulationFocus > random(5,60)>> - <<if _validFSes.includes("FSRestart")>> - $desc obsessed with creating a new, better society, leading the arcology to @@.yellow;adopt Eugenics.@@ - <<set $arcologies[$i].FSRestart = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSGenderRadicalist > random(5,60)>> - <<if _validFSes.includes("FSGenderFundamentalist")>> - $desc enthusiastic about knocking slaves up, leading the arcology to @@.yellow;adopt Gender Fundamentalism.@@ - <<set $arcologies[$i].FSGenderFundamentalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSGenderFundamentalist > random(5,60)>> - <<if _validFSes.includes("FSGenderRadicalist")>> - $desc enthusiastic about fucking slaves in the butt, leading the arcology to @@.yellow;adopt Gender Radicalism.@@ - <<set $arcologies[$i].FSGenderRadicalist = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSPaternalist > random(5,60)>> - <<if _validFSes.includes("FSDegradationist")>> - $desc partial to screaming and struggling, leading the arcology to @@.yellow;adopt Degradationism.@@ - <<set $arcologies[$i].FSDegradationist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSDegradationist > random(5,60)>> - <<if _validFSes.includes("FSPaternalist")>> - $desc devoted to their slaves' advancement, leading the arcology to @@.yellow;adopt Paternalism.@@ - <<set $arcologies[$i].FSPaternalist = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSIntellectualDependency > random(5,60)>> - <<if _validFSes.includes("FSSlaveProfessionalism")>> - $desc obsessed with crafting the perfect slave, leading the arcology to @@.yellow;adopt Slave Professionalism.@@ - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSSlaveProfessionalism > random(5,60)>> - <<if _validFSes.includes("FSIntellectualDependency")>> - $desc worried that they may one day be outsmarted by their chattel, leading the arcology to @@.yellow;adopt Intellectual Dependency.@@ - <<set $arcologies[$i].FSIntellectualDependency = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSBodyPurist > random(5,60)>> - <<if _validFSes.includes("FSTransformationFetishist")>> - $desc fascinated with extreme surgery, leading the arcology to @@.yellow;adopt Transformation Fetishism.@@ - <<set $arcologies[$i].FSTransformationFetishist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSTransformationFetishist > random(5,60)>> - <<if _validFSes.includes("FSBodyPurist")>> - $desc concerned by trends in their slaves' health, leading the arcology to @@.yellow;adopt Body Purism.@@ - <<set $arcologies[$i].FSBodyPurist = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSYouthPreferentialist > random(5,60)>> - <<if _validFSes.includes("FSMaturityPreferentialist")>> - $desc devoted to time in bed with their MILF slaves, leading the arcology to @@.yellow;adopt Maturity Preferentialism.@@ - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSMaturityPreferentialist > random(5,60)>> - <<if _validFSes.includes("FSYouthPreferentialist")>> - $desc devoted to fucking nubile young slaves, leading the arcology to @@.yellow;adopt Youth Preferentialism.@@ - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSPetiteAdmiration > random(5,60)>> - <<if _validFSes.includes("FSStatuesqueGlorification")>> - $desc convinced that tall equals beautiful, leading the arcology to @@.yellow;adopt Statuesque Glorification.@@ - <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSStatuesqueGlorification > random(5,60)>> - <<if _validFSes.includes("FSPetiteAdmiration")>> - $desc enamored by those shorter than them, leading the arcology to @@.yellow;adopt Petite Admiration.@@ - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSSlimnessEnthusiast > random(5,60)>> - <<if _validFSes.includes("FSAssetExpansionist")>> - $desc loves boobs, the bigger, the better, leading the arcology to @@.yellow;adopt Asset Expansionism.@@ - <<set $arcologies[$i].FSAssetExpansionist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSAssetExpansionist > random(5,60)>> - <<if _validFSes.includes("FSSlimnessEnthusiast")>> - $desc loves a slim slave with tight holes, leading the arcology to @@.yellow;adopt Slimness Enthusiasm.@@ - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSPastoralist > random(5,60)>> - <<if _validFSes.includes("FSPastoralist")>> - $desc addicted to breast milk straight from the nipple, leading the arcology to @@.yellow;adopt Pastoralism.@@ - <<set $arcologies[$i].FSPastoralist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSCummunism > random(5,60)>> - <<if _validFSes.includes("FSCummunism")>> - $desc obsessed with cum, leading the arcology to @@.yellow;adopt Cummunism.@@ - <<set $arcologies[$i].FSCummunism = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSPhysicalIdealist > random(5,60)>> - <<if _validFSes.includes("FSPhysicalIdealist")>> - $desc pretty devoted to spending time in the gym, leading the arcology to @@.yellow;adopt Physical Idealism.@@ - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSHedonisticDecadence > random(5,60)>> - <<if _validFSes.includes("FSHedonisticDecadence")>> - $desc pretty devoted to indulging their every whim, leading the arcology to @@.yellow;adopt Decadent Hedonism.@@ - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<set _adopted = 1>> - <</if>> - <</if>> - <<if $arcologies[0].FSRomanRevivalist > random(5,60)>> - <<if _validFSes.includes("FSAztecRevivalist")>> - $desc fascinated by ancient Aztec history, leading the arcology to @@.yellow;adopt Aztec Revivalism.@@ - <<set $arcologies[$i].FSAztecRevivalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSAztecRevivalist > random(5,60)>> - <<if _validFSes.includes("FSRomanRevivalist")>> - $desc fascinated by classical Roman history, leading the arcology to @@.yellow;adopt Roman Revivalism.@@ - <<set $arcologies[$i].FSRomanRevivalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSEgyptianRevivalist > random(5,60) || $arcologies[0].FSNeoImperialist > random(5, 60)>> - <<if _validFSes.includes("FSArabianRevivalist")>> - $desc fascinated by Arabian romanticism, leading the arcology to @@.yellow;adopt Arabian Revivalism.@@ - <<set $arcologies[$i].FSArabianRevivalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSEdoRevivalist > random(5,60)>> - <<if _validFSes.includes("FSChineseRevivalist")>> - $desc fascinated by the long tale of Chinese history, leading the arcology to @@.yellow;adopt Chinese Revivalism.@@ - <<set $arcologies[$i].FSChineseRevivalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSArabianRevivalist > random(5,60)>> - <<if _validFSes.includes("FSEgyptianRevivalist")>> - $desc fascinated by ancient Egyptian history, leading the arcology to @@.yellow;adopt Egyptian Revivalism.@@ - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<set _adopted = 1>> - <</if>> - <<elseif $arcologies[0].FSChineseRevivalist > random(5,60)>> - <<if _validFSes.includes("FSEdoRevivalist")>> - $desc fascinated by Japanese history, leading the arcology to @@.yellow;adopt Edo Revivalism.@@ - <<set $arcologies[$i].FSEdoRevivalist = 5>><<set _adopted = 1>> - <</if>> - <</if>> - -<</if>> -<</if>> -<</if>> - -/* AGENT ADOPTION*/ - -<<for _adopted == 0>> -<<if ($arcologies[$i].government == "your agent")>> -<<set _adopted = 1>> /* breaking out of the for loop will preserve this */ -<<set _leader = App.currentAgent($i)>> -<<setLocalPronouns _leader>> - -<<if _validFSes.includes("FSRepopulationFocus") && _leader.fetish == "pregnancy" && $seePreg == 1>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Repopulationism,@@ since as a pregnancy fetishist, $he can't wait to see the female population's bellies swell with life. - <<set $arcologies[$i].FSRepopulationFocus = 5>><<break>> -<<elseif _validFSes.includes("FSRestart") && (_leader.preg < -1 || (_leader.ovaries == 0 && _leader.mpreg != 1)) && _leader.genes == "XX">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Eugenics,@@ since if no-one can get pregnant, $he won't be alone. - <<set $arcologies[$i].FSRestart = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSGenderRadicalist") && _leader.dick > 0>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Gender Radicalism,@@ since $he's a walking, swinging argument for dickgirls. - <<set $arcologies[$i].FSGenderRadicalist = 5>><<break>> -<<elseif _validFSes.includes("FSGenderFundamentalist") &&_leader.pregKnown == 1 || _leader.bellyPreg > 1500>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Gender Fundamentalism,@@ since its citizens find leadership by a pregnant $woman fascinating. - <<set $arcologies[$i].FSGenderFundamentalist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSPaternalist") && _leader.behavioralQuirk == "advocate">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Paternalism,@@ since as an advocate for slavery, $he believes in its benefits. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> -<<elseif _validFSes.includes("FSDegradationist") && _leader.fetish == "sadist">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Degradationism,@@ since as a sexual sadist, $he's excited by the idea of leading a society that applauds $his cruelest impulses. - <<set $arcologies[$i].FSDegradationist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSSlaveProfessionalism") && (_leader.intelligence+_leader.intelligenceImplant >= 120) && (_leader.skill.vagina+_leader.skill.oral+_leader.skill.anal+_leader.skill.whoring+_leader.skill.entertainment >= 400)>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Slave Professionalism,@@ since $he wishes to produce slaves you can be proud of. - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<break>> -<<elseif _validFSes.includes("FSIntellectualDependency") && (_leader.intelligence+_leader.intelligenceImplant >= 120) && (_leader.behavioralFlaw == "arrogant" || _leader.behavioralQuirk == "insecure")>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Intellectual Dependency,@@ - <<if _leader.behavioralQuirk == "insecure">> - since, due to $his own insecurities, needs to be frequently reassured that $he is smarter than the masses. - <<else>> - since $he absolutely needs to feel intellectually superior to $his chattel. - <</if>> - <<set $arcologies[$i].FSIntellectualDependency = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSBodyPurist") && _leader.chem > 50>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Body Purism,@@ since $he knows what long term drug damage feels like, and doesn't want any slave to ever experience it again. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> -<<elseif _validFSes.includes("FSTransformationFetishist") && _leader.boobsImplant > 1000>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Transformation Fetishism,@@ out of a perverse desire to subject all slaves to massive implants like $hers. - <<set $arcologies[$i].FSTransformationFetishist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSYouthPreferentialist") && _leader.actualAge <= 25>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Youth Preferentialism,@@ to buttress acceptance of $his own young age. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> -<<elseif _validFSes.includes("FSMaturityPreferentialist") && _leader.actualAge > 35>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Maturity Preferentialism,@@ since $he has a certain personal interest in promoting the idea that MILFs are sexy. - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSSlimnessEnthusiast") && _leader.behavioralQuirk == "insecure">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Slimness Enthusiasm,@@ since $his history of anorexia has deeply impacted $his idea of beauty. - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<break>> -<<elseif _validFSes.includes("FSAssetExpansionist") && _leader.fetish == "boobs">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Asset Expansionism,@@ since $he's a breast expansion fetishist in addition to being a mere breast fetishist. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> -<<elseif _validFSes.includes("FSAssetExpansionist") && _leader.sexualQuirk == "size queen" && _leader.vagina > 3>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Asset Expansionism,@@ since $he's a stickler for big dicks and seeks to find one large enough to push $him to $his very limit. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSCummunism") && _leader.fetish == "cumslut">> /* this will become the cum focused condition, being replaced with breast focus for milk */ - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Cummunism,@@ since $he already loves sucking down huge loads of cum. - <<set $arcologies[$i].FSCummunism = 5>><<break>> -<<elseif _validFSes.includes("FSPastoralist") && _leader.fetish == "boobs">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Pastoralism,@@ since $he loves boobs and adores suckling them. - <<set $arcologies[$i].FSPastoralist = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSHedonisticDecadence") && _leader.behavioralFlaw == "gluttonous">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Decadent Hedonism,@@ since $he already loves over-eating. - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<break>> -<<elseif _validFSes.includes("FSPhysicalIdealist") && _leader.behavioralQuirk == "fitness">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Physical Idealism,@@ since $he's a fitness fanatic $himself. - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<break>> -<<elseif _validFSes.includes("FSHedonisticDecadence") && _leader.fetish != "none" && _leader.fetishStrength >= 100>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Decadent Hedonism,@@ since $he seeks to satisfy $his powerful fetish. - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSStatuesqueGlorification") && _leader.height >= 200>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Statuesque Glorification,@@ since $he is tired of being one of the tallest in arcology. - <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<break>> -<<elseif _validFSes.includes("FSPetiteAdmiration") && _leader.height >= 170 && _leader.fetish == "dom">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Petite Admiration,@@ since it is far easier to dominate someone much smaller than oneself. - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<break>> -<</if>> -<<if _validFSes.includes("FSIncestFetishist")>> - <<set _lover = $slaves.find(function(s) { return s.ID == _leader.relationshipTarget && areRelated(s, _leader) && s.assignment == "live with your agent"; })>> - <<if (_leader.behavioralQuirk == "sinful" || _leader.sexualQuirk == "perverted") && def _lover && $seeIncest == 1>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Incest Festishism,@@ to share the love and joy $he holds with $his <<print relativeTerm(_leader, _lover)>>. - <<set $arcologies[$i].FSIncestFetishist = 5>><<break>> - <</if>> -<</if>> -<<if _validFSes.includes("FSChattelReligionist") && _leader.behavioralQuirk == "devout">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Chattel Religionism,@@ to share and spread $his deeply held beliefs about the holiness of sexual service. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> -<<elseif _validFSes.includes("FSChattelReligionist") && _leader.behavioralQuirk == "sinful">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Chattel Religionism,@@ since $he's excited by the prospect of getting away with horrible sins against old religions in public. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> -<</if>> -<<if (_validFSes.includes("FSEgyptianRevivalist") && _leader.relationshipTarget != 0)>> - <<set _lover = getSlave(_leader.relationshipTarget)>> - <<if (def _lover) && areRelated(_leader, _lover)>> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Egyptian Revivalism,@@ since $he's already part of a gloriously incestuous relationship. - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<break>> - <</if>> -<<elseif _validFSes.includes("FSChineseRevivalist") && _leader.nationality == "Chinese">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Chinese Revivalism,@@ since $he's Chinese $himself and can claim high honor in such a society. - <<set $arcologies[$i].FSChineseRevivalist = 5>><<break>> -<<elseif _validFSes.includes("FSEdoRevivalist") && _leader.nationality == "Japanese">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Edo Revivalism,@@ since $he's Japanese $himself and can claim high honor in such a society. - <<set $arcologies[$i].FSEdoRevivalist = 5>><<break>> -<<elseif _validFSes.includes("FSAztecRevivalist") && _leader.nationality == "Mexican">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Aztec Revivalism,@@ since $he's Mexican $himself and can claim high honor in such a society. - <<set $arcologies[$i].FSAztecRevivalist = 5>><<break>> -<<elseif _validFSes.includes("FSNeoImperialist") && _leader.nationality == "German">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Neo-Imperialism,@@ since $he's German $himself and can easily cement $his rule with Imperial directives in your name. - <<set $arcologies[$i].FSNeoImperialist = 5>><<break>> -<<elseif _validFSes.includes("FSNeoImperialist") && _leader.nationality == "French">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Neo-Imperialism,@@ since $he's French $himself and can easily cement $his rule with Imperial directives in your name. - <<set $arcologies[$i].FSNeoImperialist = 5>><<break>> -<<elseif _validFSes.includes("FSNeoImperialist") && _leader.nationality == "Spanish">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Neo-Imperialism,@@ since $he's Spanish $himself and can easily cement $his rule with Imperial directives in your name. - <<set $arcologies[$i].FSNeoImperialist = 5>><<break>> -<<elseif _validFSes.includes("FSNeoImperialist") && _leader.nationality == "English">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Neo-Imperialism,@@ since $he's English $himself and can easily cement $his rule with Imperial directives in your name. - <<set $arcologies[$i].FSNeoImperialist = 5>><<break>> -<<elseif _validFSes.includes("FSRomanRevivalist") && _leader.behavioralQuirk == "confident">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Roman Revivalism,@@ since it appeals to $his confident, patrician nature. - <<set $arcologies[$i].FSRomanRevivalist = 5>><<break>> -<<elseif _validFSes.includes("FSArabianRevivalist") && _leader.fetish == "dom">> - Your agent @@.pink;_leader.slaveName@@ successfully pushes it to @@.yellow;adopt Arabian Revivalism,@@ since $he's sexually dominant and quite likes the idea of overseeing slave bazaars. - <<set $arcologies[$i].FSArabianRevivalist = 5>><<break>> -<</if>> - -<<set _adopted = 0>> /* did not break out of the for loop, so no FS was adopted */ -<</if>> -<<break>> -<</for>> - -/* CROSS-FS ADOPTION*/ - -<<for _adopted == 0>> -<<set _adopted = 1>> /* breaking out of the for loop will preserve this */ - -<<if $arcologies[$i].FSSubjugationist > random(50,200)>> - <<if _validFSes.includes("FSDegradationist")>> - The arcology's racial Subjugationist culture @@.yellow;pushes it towards Degradationism.@@ - <<set $arcologies[$i].FSDegradationist = 5>><<break>> - <<elseif (_validFSes.includes("FSAztecRevivalist") && _validFSes.includes("FSEgyptianRevivalist"))>> - <<if random(0,1) == 0>> - The arcology's racial Subjugationist culture @@.yellow;pushes it towards Egyptian Revivalism,@@ since the Ancient Egyptians are famous for keeping a race of slaves. - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<break>> - <<else>> - The arcology's racial Supremacist culture @@.yellow;pushes it towards Aztec Revivalism,@@ since the enslavement and sacrifice of slaves was fundamental to the culture. - <<set $arcologies[$i].FSAztecRevivalist = 5>><<break>> - <</if>> - <</if>> -<</if>> -<<if $arcologies[$i].FSRestart > random(50,200)>> - <<if _validFSes.includes("FSNeoImperialist")>> - The arcology's elitist, eugenicist culture @@.yellow;pushes it towards Neo-Imperialism,@@ since the societal elite view themselves as the only appropriate rulers of their society. - <<set $arcologies[$i].FSNeoImperialist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSSupremacist > random(50,200)>> - <<if _validFSes.includes("FSPaternalist")>> - The arcology's racial Supremacist culture @@.yellow;pushes it towards Paternalism.@@ - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <<elseif (_validFSes.includes("FSEdoRevivalist") && _validFSes.includes("FSChineseRevivalist") && ($arcologies[$i].FSSupremacistRace == "asian")>> - <<if random(0,1) == 0>> - The arcology's racial Supremacist culture @@.yellow;pushes it towards Edo Revivalism,@@ since the beauty and grace of the Japanese people are watchwords there. - <<set $arcologies[$i].FSEdoRevivalist = 5>><<break>> - <<else>> - The arcology's racial Supremacist culture @@.yellow;pushes it towards Chinese Revivalism,@@ since the wisdom of the Middle Kingdom is admired there. - <<set $arcologies[$i].FSChineseRevivalist = 5>><<break>> - <</if>> - <</if>> -<</if>> -<<if $arcologies[$i].FSRepopulationFocus > random(50,200)>> - <<if _validFSes.includes("FSAssetExpansionist")>> - The arcology's Repopulationist culture @@.yellow;pushes it towards Asset Expansionism,@@ since big pregnant bellies go great with huge tits and asses. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSGenderFundamentalist")>> - The arcology's Repopulationist culture @@.yellow;pushes it towards Gender Fundamentalism,@@ since traditional women make better mothers. - <<set $arcologies[$i].FSGenderFundamentalist = 5>><<break>> - <<elseif _validFSes.includes("FSPetiteAdmiration")>> - The arcology's Repopulationist culture @@.yellow;pushes it towards Petite Admiration,@@ since shorter women tend to have an easier time with childbirth. - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSRestart > random(50,200)>> - <<if _validFSes.includes("FSDegradationist")>> - The arcology's elite focused culture @@.yellow;pushes it towards Degradationism,@@ since its lowest class deserves nothing but misery. - <<set $arcologies[$i].FSDegradationist = 5>><<break>> - <<elseif _validFSes.includes("FSSlaveProfessionalism")>> - The arcology's elite focused culture @@.yellow;pushes it towards Slave Professionalism,@@ since the highest class deserve nothing less than the best slaves. - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<break>> - <<elseif _validFSes.includes("FSHedonisticDecadence")>> - The arcology's wide range of imports @@.yellow;pushes it towards Decadent Hedonism,@@ since it has access to so many undiscovered pleasures. - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSGenderRadicalist > random(50,200)>> - <<if _validFSes.includes("FSTransformationFetishist")>> - The arcology's Gender Radicalist culture @@.yellow;pushes it towards Transformation Fetishism,@@ since surgery can turn a slave into anything. - <<set $arcologies[$i].FSTransformationFetishist = 5>><<break>> - <<elseif _validFSes.includes("FSSlimnessEnthusiast")>> - The arcology's Gender Radicalist culture @@.yellow;pushes it towards Slimness Enthusiasm,@@ since that's the kind of body many of its slaves have. - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<break>> - <<elseif _validFSes.includes("FSCummunism")>> - The arcology's Gender Radicalist culture @@.yellow;pushes it towards Cummunism,@@ since many of its slaves are capable of giving cum. - <<set $arcologies[$i].FSCummunism = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSGenderFundamentalist > random(50,200)>> - <<if _validFSes.includes("FSPastoralist")>> - The arcology's Gender Fundamentalist culture @@.yellow;pushes it towards Pastoralism,@@ since its pregnant slaves are already giving milk. - <<set $arcologies[$i].FSPastoralist = 5>><<break>> - <<elseif _validFSes.includes("FSIntellectualDependency")>> - The arcology's Gender Fundamentalist culture @@.yellow;pushes it towards Intellectual Dependency,@@ since women don't need to think to serve men. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSYouthPreferentialist")>> - The arcology's Gender Fundamentalist culture @@.yellow;pushes it towards Youth Preferentialism,@@ since younger slaves are beautiful and fertile. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSPaternalist > random(50,200)>> - <<if _validFSes.includes("FSChattelReligionist")>> - The arcology's Paternalist culture @@.yellow;pushes it towards Chattel Religionism,@@ since many of its slaves are already worshipful. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> - <<elseif _validFSes.includes("FSBodyPurist")>> - The arcology's Paternalist culture @@.yellow;pushes it towards Body Purism,@@ since giving slaves dangerous drugs is hardly good for them. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <<elseif _validFSes.includes("FSRomanRevivalist")>> - The arcology's Paternalist culture @@.yellow;pushes it towards Roman Revivalism,@@ since loyal service to the res publica bears similarity to their existing mores. - <<set $arcologies[$i].FSRomanRevivalist = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSDegradationist > random(50,200)>> - <<if _validFSes.includes("FSTransformationFetishist")>> - The arcology's Degradationist culture @@.yellow;pushes it towards Transformation Fetishism,@@ the ultimate expression of power over slave bodies. - <<set $arcologies[$i].FSTransformationFetishist = 5>><<break>> - <<elseif _validFSes.includes("FSGenderRadicalist")>> - The arcology's Degradationist culture @@.yellow;pushes it towards Gender Radicalism,@@ since the joy of forcing a gender role on a slave is already popular. - <<set $arcologies[$i].FSGenderRadicalist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSIntellectualDependency > random(50,200)>> - <<if _validFSes.includes("FSTransformationFetishist")>> - The arcology's Intellectual Dependency culture @@.yellow;pushes it towards Transformation Fetishism,@@ to give its bimbos a body most fitting. - <<set $arcologies[$i].FSTransformationFetishist = 5>><<break>> - <<elseif _validFSes.includes("FSYouthPreferentialist")>> - The arcology's Intellectual Dependency culture @@.yellow;pushes it towards Youth Preferentialism,@@ since the young have more energy to party. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSHedonisticDecadence")>> - The arcology's Intellectual Dependency culture @@.yellow;pushes it towards Decadent Hedonism,@@ since base instinct already rules slaves' lives. - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<break>> - <<elseif _validFSes.includes("FSRepopulationFocus")>> - The arcology's Intellectual Dependency culture @@.yellow;pushes it towards Repopulationism,@@ since there has been an epidemic of unplanned pregnancies among the slave population. - <<set $arcologies[$i].FSRepopulationFocus = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSSlaveProfessionalism > random(50,200)>> - <<if _validFSes.includes("FSMaturityPreferentialist")>> - The arcology's Slave Professionalism culture @@.yellow;pushes it towards Maturity Preferentialist,@@ since with age comes experience. - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Slave Professionalism culture @@.yellow;pushes it towards Paternalism,@@ since happy slaves are much more willing to be molded in to shape. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <<elseif _validFSes.includes("FSPhysicalIdealist")>> - The arcology's Slave Professionalism culture @@.yellow;pushes it towards Physical Idealism,@@ since a fitting body is required to house the perfect mind. - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<break>> - <<elseif _validFSes.includes("FSChattelReligionist")>> - The arcology's Slave Professionalism culture @@.yellow;pushes it towards Chattel Religionism,@@ since skilled service is already a part of a slave's daily life. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSBodyPurist > random(50,200)>> - <<if _validFSes.includes("FSPhysicalIdealist")>> - The arcology's Body Purist culture @@.yellow;pushes it towards Physical Idealism,@@ since it already takes an intense interest in bodily perfection. - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Body Purist culture @@.yellow;pushes it towards Paternalism,@@ since it's become obvious that happiness is a necessary part of wellness. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSTransformationFetishist > random(50,200)>> - <<if _validFSes.includes("FSAssetExpansionist")>> - The arcology's Transformation Fetishist culture @@.yellow;pushes it towards Asset Expansionism,@@ since it's already overrun with massive tits and asses. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSDegradationist")>> - The arcology's Transformation Fetishist culture @@.yellow;pushes it towards Degradationism,@@ since it's already used to slaves whining about their latest surgeries. - <<set $arcologies[$i].FSDegradationist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSYouthPreferentialist > random(50,200)>> - <<if _validFSes.includes("FSSlimnessEnthusiast")>> - The arcology's Youth Preferentialist culture @@.yellow;pushes it towards Slimness Enthusiasm,@@ since that's the kind of body many of its slaves have. - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<break>> - <<elseif _validFSes.includes("FSRepopulationFocus")>> - The arcology's Youth Preferentialist culture @@.yellow;pushes it towards Repopulationism,@@ since many of its slaves are deliciously ripe for breeding. - <<set $arcologies[$i].FSRepopulationFocus = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSMaturityPreferentialist > random(50,200)>> - <<if _validFSes.includes("FSAssetExpansionist")>> - The arcology's Maturity Preferentialist culture @@.yellow;pushes it towards Asset Expansionism,@@ since that's the kind of body many of its slaves have. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Maturity Preferentialist culture @@.yellow;pushes it towards Paternalism,@@ since its many older slaves have skills best applied by a happy $woman. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSPetiteAdmiration > random(50,200)>> - <<if _validFSes.includes("FSAssetExpansionist")>> - The arcology's Petite Admiration culture @@.yellow;pushes it towards Asset Expansionist,@@ since a $girl with tits wider than $he is tall attracts quite some attention. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Petite Admiration culture @@.yellow;pushes it towards Paternalism,@@ since such tiny <<= $girl>>s need extra special attention. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <<elseif _validFSes.includes("FSIncestFetishist")>> - The arcology's Petite Admiration culture @@.yellow;pushes it towards Incest Fetishism,@@ since age play often goes hand-in-hand with size play. - <<set $arcologies[$i].FSIncestFetishist = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSStatuesqueGlorification > random(50,200)>> - <<if _validFSes.includes("FSPhysicalIdealist")>> - The arcology's Statuesque Glorification culture @@.yellow;pushes it towards Physical Idealism,@@ since being ripped complements being tall. - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<break>> - <<elseif _validFSes.includes("FSDegradationist")>> - The arcology's Statuesque Glorification culture @@.yellow;pushes it towards Degradationism,@@ since those that don't measure up deserve only suffering. - <<set $arcologies[$i].FSDegradationist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSSlimnessEnthusiast > random(50,200)>> - <<if _validFSes.includes("FSYouthPreferentialist")>> - The arcology's Slimness Enthusiast culture @@.yellow;pushes it towards Youth Preferentialism,@@ since younger slaves are often attractively slim. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSBodyPurist")>> - The arcology's Slimness Enthusiast culture @@.yellow;pushes it towards Body Purism,@@ since the last thing they want is prettily slender girls with health trouble. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSAssetExpansionist > random(50,200)>> - <<if _validFSes.includes("FSMaturityPreferentialist")>> - The arcology's Asset Expansionist culture @@.yellow;pushes it towards Maturity Preferentialism,@@ since MILF slaves tend to come with nice big tits. - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSBodyPurist")>> - The arcology's Asset Expansionist culture @@.yellow;pushes it towards Body Purism,@@ since slaves on curatives are slaves not on growth hormones. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <<elseif _validFSes.includes("FSPetiteAdmiration") && _validFSes.includes("FSStatuesqueGlorification")>> - <<if random(0,1) == 1>> - The arcology's Asset Expansionist culture @@.yellow;pushes it towards Petite Admiration,@@ since the smaller a slave's body is, the bigger their breasts will look. - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<break>> - <<else>> - The arcology's Asset Expansionist culture @@.yellow;pushes it towards Statuesque Glorification,@@ as the love of all things huge is rather indiscriminate. - <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<break>> - <</if>> - <</if>> -<</if>> -<<if $arcologies[$i].FSPastoralist > random(50,200)>> - <<if _validFSes.includes("FSBodyPurist")>> - The arcology's Pastoralist culture @@.yellow;pushes it towards Body Purism,@@ since there have been concerns about milk purity. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <<elseif _validFSes.includes("FSAssetExpansionist")>> - The arcology's Pastoralist culture @@.yellow;pushes it towards Asset Expansionism,@@ since they're convinced that there's no such thing as udders that are too big. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSRepopulationFocus")>> - The arcology's Pastoralist culture @@.yellow;pushes it towards Repopulationism,@@ since pregnancy stimulates milk flow. - <<set $arcologies[$i].FSRepopulationFocus = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSCummunism > random(50,200)>> - <<if _validFSes.includes("FSPhysicalIdealist")>> - The arcology's Cummunist culture @@.yellow;pushes it towards Physical Idealism,@@ since big balls and huge loads go hand in hand with masculine muscles. - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<break>> - <<elseif _validFSes.includes("FSAssetExpansionist")>> - The arcology's Cummunist culture @@.yellow;pushes it towards Asset Expansionism,@@ since they're convinced that there's no such thing as balls that are too big. - <<set $arcologies[$i].FSAssetExpansionist = 5>><<break>> - <<elseif _validFSes.includes("FSBodyPurist")>> - The arcology's Cummunist culture @@.yellow;pushes it towards Body Purism,@@ since there have been concerns about cum purity. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSHedonisticDecadence > random(50,200)>> - <<if _validFSes.includes("FSPastoralist")>> - The arcology's Hedonistic culture @@.yellow;pushes it towards Pastoralism,@@ since nothing beats a nice glass of fresh squeezed milk with your cake. - <<set $arcologies[$i].FSPastoralist = 5>><<break>> - <<elseif _validFSes.includes("FSIntellectualDependency")>> - The arcology's Hedonistic culture @@.yellow;pushes it towards Intellectual Dependency,@@ since higher thought is unneeded when you have everything you want. - <<set $arcologies[$i].FSIntellectualDependency = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Hedonistic culture @@.yellow;pushes it towards Paternalism,@@ since happiness is infectious. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <</if>> -<<elseif $arcologies[$i].FSPhysicalIdealist > random(50,200)>> - <<if _validFSes.includes("FSBodyPurist")>> - The arcology's Physical Idealist culture @@.yellow;pushes it towards Body Purism,@@ since it's already used to treating slaves' bodies as temples. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <<elseif _validFSes.includes("FSYouthPreferentialist")>> - The arcology's Physical Idealist culture @@.yellow;pushes it towards Youth Preferentialism,@@ since beauty and athletic prowess do tend to peak early. - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<break>> - <<elseif _validFSes.includes("FSStatuesqueGlorification")>> - The arcology's Physical Idealist culture @@.yellow;pushes it towards Statuesque Glorification,@@ to better emulate the titans of legend. - <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<break>> - <<elseif _validFSes.includes("FSCummunism")>> - The arcology's Physical Idealist culture @@.yellow;pushes it towards Cummunism,@@ since muscular, testosterone filled slaves make admirable cumshots. - <<set $arcologies[$i].FSCummunism = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSIncestFetishist > random(50,200)>> - <<if _validFSes.includes("FSRepopulationFocus")>> - The arcology's Incest Fetishizing culture @@.yellow;pushes it towards Repopulationism,@@ in order to create many new future loving couples. - <<set $arcologies[$i].FSRepopulationFocus = 5>><<break>> - <<elseif _validFSes.includes("FSBodyPurist")>> - The arcology's Incest Fetishizing culture @@.yellow;pushes it towards Body Purism,@@ in order to keep its bloodlines pure. - <<set $arcologies[$i].FSBodyPurist = 5>><<break>> - <<elseif _validFSes.includes("FSPaternalist")>> - The arcology's Incest Fetishizing culture @@.yellow;pushes it towards Paternalism,@@ as healthy slaves live longer allowing relationships to span generations. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <<elseif _validFSes.includes("FSEgyptianRevivalist")>> - The arcology's Incest Fetishizing culture @@.yellow;pushes it towards Egyptian Revivalism,@@ as they naturally seek even more incestuous fun. - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSChattelReligionist > random(50,200)>> - <<if _validFSes.includes("FSPaternalist")>> - The arcology's Chattel Religionist culture @@.yellow;pushes it towards Paternalism,@@ since charitable care for slaves' welfare has become widespread. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <<elseif _validFSes.includes("FSArabianRevivalist")>> - The arcology's Chattel Religionist culture @@.yellow;pushes it towards Arabian Revivalism,@@ since such an intermingling of slavery and faith fascinates them. - <<set $arcologies[$i].FSArabianRevivalist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSRomanRevivalist > random(50,200)>> - <<if _validFSes.includes("FSPaternalist")>> - The arcology's Roman Revivalist culture @@.yellow;pushes it towards Paternalism,@@ since some Roman slaves were traditionally permitted limited rights. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSNeoImperialist > random(50,200)>> - <<if _validFSes.includes("FSRestart")>> - The arcology's Neo-Imperialist culture @@.yellow;pushes it towards Eugenics,@@ since their hegemonic, noble culture naturally views itself as genetically superior to the unwashed masses. - <<set $arcologies[$i].FSRestart = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSAztecRevivalist > random(50,200)>> - <<if _validFSes.includes("FSDegradationist")>> - The arcology's Aztec Revivalist culture @@.yellow;pushes it towards Degradation,@@ since most Aztec war slaves were tortured and sacrificed. - <<set $arcologies[$i].FSDegradationist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSEgyptianRevivalist > random(50,200)>> - <<if _validFSes.includes("FSChattelReligionist")>> - The arcology's Egyptian Revivalist culture @@.yellow;pushes it towards Chattel Religionism,@@ since worship is already becoming an established part of its life. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> - <<elseif _validFSes.includes("FSIncestFetishist")>> - The arcology's Egyptian Revivalist culture @@.yellow;pushes it towards Incest Fetishism,@@ since more incest is only a good thing in its eyes. - <<set $arcologies[$i].FSIncestFetishist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSEdoRevivalist > random(50,200)>> - <<if _validFSes.includes("FSSlimnessEnthusiast")>> - The arcology's Edo Revivalist culture @@.yellow;pushes it towards Slimness Enthusiasm,@@ since slim and elegant slaves are already fashionable there. - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSArabianRevivalist > random(50,200)>> - <<if _validFSes.includes("FSChattelReligionist")>> - The arcology's Arabian Revivalist culture @@.yellow;pushes it towards Chattel Religionism,@@ since the word of God is already a matter of daily significance there. - <<set $arcologies[$i].FSChattelReligionist = 5>><<break>> - <</if>> -<</if>> -<<if $arcologies[$i].FSChineseRevivalist > random(50,200)>> - <<if _validFSes.includes("FSPaternalist")>> - The arcology's Chinese Revivalist culture @@.yellow;pushes it towards Paternalism,@@ since traditional beliefs about duty and order have become accepted. - <<set $arcologies[$i].FSPaternalist = 5>><<break>> - <</if>> -<</if>> - -<<set _adopted = 0>> /* did not break out of the for loop, so no FS was adopted */ -<<break>> -<</for>> - -/* NEIGHBOR ADOPTION*/ - -<<if _adopted == 0>> -<<for $j = 0; $j < $arcologies.length; $j++>> - <<if $arcologies[$i].direction != $arcologies[$j].direction>> - - <<set _influenceBonus = 0>> - <<if $arcologies[$i].direction == $arcologies[$j].influenceTarget>> - $arcologies[$j].name's directed cultural influence gives it some input over $arcologies[$i].name's choice of direction. - <<set _influenceBonus = 20>> - <</if>> - - <<set _opinion = App.Neighbor.opinion($i, $j)>> - <<if _opinion >= 50>> - $arcologies[$i].name is aligned with $arcologies[$j].name socially, encouraging it to consider adopting all its cultural values. - <<set _influenceBonus += _opinion-50>> - <<elseif _opinion <= -50>> - $arcologies[$i].name is culturally opposed to $arcologies[$j].name, encouraging it to resist adopting its cultural values. - <<set _influenceBonus += _opinion+50>> - <</if>> - - <<for _candidate range _validFSes>> - <<if _candidate === "FSSubjugationist">> - <<if ($arcologies[$i].FSSupremacist == "unset") || ($arcologies[$i].FSSupremacistRace != $arcologies[$j].FSSubjugationistRace)>> - <<if $arcologies[$j].FSSubjugationist > random(0,200)-_influenceBonus>> - It @@.yellow;adopts $arcologies[$j].FSSubjugationistRace Subjugation@@ due to influence from its trading partner $arcologies[$j].name. - <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSubjugationistRace = $arcologies[$j].FSSubjugationistRace>> - <<break>> - <</if>> - <</if>> - <<elseif _candidate === "FSSupremacist">> - <<if ($arcologies[$i].FSSubjugationist == "unset") || ($arcologies[$i].FSSubjugationistRace != $arcologies[$j].FSSupremacistRace)>> - <<if $arcologies[$j].FSSupremacist > random(0,200)-_influenceBonus>> - It @@.yellow;adopts $arcologies[$j].FSSupremacistRace Supremacy@@ due to influence from its trading partner $arcologies[$j].name. - <<set $arcologies[$i].FSSupremacist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSupremacistRace = $arcologies[$j].FSSupremacistRace>> - <<break>> - <</if>> - <</if>> - <<else>> - <<if $arcologies[$j][_candidate] > random(0,200)-_influenceBonus>> - It @@.yellow;adopts <<= FutureSocieties.displayName(_candidate)>>@@ due to influence from its trading partner $arcologies[$j].name. - <<set $arcologies[$i][_candidate] = 5>><<set _adopted = 1>> - <<break>> - <</if>> - <</if>> - <</for>> - <<if _adopted == 1>> - <<break>> - <</if>> - <</if>> -<</for>> -<</if>> - -/* RANDOM ADOPTION*/ - -<<if _adopted == 0>> -<<if random(0,4) == 1>> -<<switch $arcologies[$i].government>> -<<case "elected officials">> - <<set $desc = "Its elected leaders are">> -<<case "a committee">> - <<set $desc = "A majority of its ruling committee is">> -<<case "an oligarchy" "your trustees">> - <<set $desc = "Its leading citizens are">> -<<case "an individual">> - <<set $desc = "Its owner is">> -<<case "your agent">> - <<set $desc = "Your agent and its citizens are">> -<<case "a corporation">> - <<set $desc = "Most of its board of directors are">> -<<default>> - <<set $desc = "Its citizens are">> -<</switch>> -<<switch _validFSes.random()>> -<<case "FSSubjugationist">> - <<set _subjugationRace = setup.filterRacesLowercase.random()>> - <<if ($arcologies[$i].FSSupremacist == "unset") || (_subjugationRace != $arcologies[$i].FSSupremacistRace)>> - $desc preoccupied by a racial animus towards _subjugationRace people, leading the arcology to @@.yellow;adopt _subjugationRace Subjugation.@@ - <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSubjugationistRace = _subjugationRace>> - <</if>> -<<case "FSSupremacist">> - <<set _supremacistRace = setup.filterRacesLowercase.random()>> - <<if ($arcologies[$i].FSSubjugationist == "unset") || (_supremacistRace != $arcologies[$i].FSSubjugationistRace)>> - $desc preoccupied by belief in the superiority of the _supremacistRace race, leading the arcology to @@.yellow;adopt _supremacistRace Supremacy.@@ - <<set $arcologies[$i].FSSupremacist = 5>><<set _adopted = 1>> - <<set $arcologies[$i].FSSupremacistRace = _supremacistRace>> - <</if>> -<<case "FSGenderRadicalist">> - $desc enthusiastic about fucking slaves in the butt, leading the arcology to @@.yellow;adopt Gender Radicalism.@@ - <<set $arcologies[$i].FSGenderRadicalist = 5>><<set _adopted = 1>> -<<case "FSGenderFundamentalist">> - $desc enthusiastic about knocking slaves up, leading the arcology to @@.yellow;adopt Gender Fundamentalism.@@ - <<set $arcologies[$i].FSGenderFundamentalist = 5>><<set _adopted = 1>> -<<case "FSPaternalist">> - $desc devoted to their slaves' advancement, leading the arcology to @@.yellow;adopt Paternalism.@@ - <<set $arcologies[$i].FSPaternalist = 5>><<set _adopted = 1>> -<<case "FSDegradationist">> - $desc partial to screaming and struggling, leading the arcology to @@.yellow;adopt Degradationism.@@ - <<set $arcologies[$i].FSDegradationist = 5>><<set _adopted = 1>> -<<case "FSBodyPurist">> - $desc concerned by trends in their slaves' health, leading the arcology to @@.yellow;adopt Body Purism.@@ - <<set $arcologies[$i].FSBodyPurist = 5>><<set _adopted = 1>> -<<case "FSTransformationFetishist">> - $desc fascinated with extreme surgery, leading the arcology to @@.yellow;adopt Transformation Fetishism.@@ - <<set $arcologies[$i].FSTransformationFetishist = 5>><<set _adopted = 1>> -<<case "FSYouthPreferentialist">> - $desc devoted to fucking nubile young slaves, leading the arcology to @@.yellow;adopt Youth Preferentialism.@@ - <<set $arcologies[$i].FSYouthPreferentialist = 5>><<set _adopted = 1>> -<<case "FSMaturityPreferentialist">> - $desc devoted to time in bed with their MILF slaves, leading the arcology to @@.yellow;adopt Maturity Preferentialism.@@ - <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<set _adopted = 1>> -<<case "FSSlimnessEnthusiast">> - $desc partial to a slim slave with tight holes, leading the arcology to @@.yellow;adopt Slimness Enthusiasm.@@ - <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<set _adopted = 1>> -<<case "FSAssetExpansionist">> - $desc enthusiastic about boobs, the bigger, the better, leading the arcology to @@.yellow;adopt Asset Expansionism.@@ - <<set $arcologies[$i].FSAssetExpansionist = 5>><<set _adopted = 1>> -<<case "FSPastoralist">> - $desc addicted to breast milk straight from the nipple, leading the arcology to @@.yellow;adopt Pastoralism.@@ - <<set $arcologies[$i].FSPastoralist = 5>><<set _adopted = 1>> -<<case "FSPhysicalIdealist">> - $desc pretty devoted to spending time in the gym, leading the arcology to @@.yellow;adopt Physical Idealism.@@ - <<set $arcologies[$i].FSPhysicalIdealist = 5>><<set _adopted = 1>> -<<case "FSChattelReligionist">> - $desc devoutly religious, and interested in a reformation, leading the arcology to @@.yellow;adopt Chattel Religionism.@@ - <<set $arcologies[$i].FSChattelReligionist = 5>><<set _adopted = 1>> -<<case "FSRomanRevivalist">> - $desc fascinated by classical Roman history, leading the arcology to @@.yellow;adopt Roman Revivalism.@@ - <<set $arcologies[$i].FSRomanRevivalist = 5>><<set _adopted = 1>> -<<case "FSAztecRevivalist">> - $desc fascinated by ancient Aztec history, leading the arcology to @@.yellow;adopt Aztec Revivalism.@@ - <<set $arcologies[$i].FSAztecRevivalist = 5>><<set _adopted = 1>> -<<case "FSEgyptianRevivalist">> - $desc fascinated by ancient Egyptian history, leading the arcology to @@.yellow;adopt Egyptian Revivalism.@@ - <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<set _adopted = 1>> -<<case "FSEdoRevivalist">> - $desc fascinated by Japanese history, leading the arcology to @@.yellow;adopt Edo Revivalism.@@ - <<set $arcologies[$i].FSEdoRevivalist = 5>><<set _adopted = 1>> -<<case "FSArabianRevivalist">> - $desc fascinated by Arabian romanticism, leading the arcology to @@.yellow;adopt Arabian Revivalism.@@ - <<set $arcologies[$i].FSArabianRevivalist = 5>><<set _adopted = 1>> -<<case "FSChineseRevivalist">> - $desc fascinated by the long tale of Chinese history, leading the arcology to @@.yellow;adopt Chinese Revivalism.@@ - <<set $arcologies[$i].FSChineseRevivalist = 5>><<set _adopted = 1>> -<<case "FSRepopulationFocus">> - $desc concerned for the future, and partial to watching bellies swell, leading the arcology to @@.yellow;adopt Repopulation Efforts.@@ - <<set $arcologies[$i].FSRepopulationFocus = 5>><<set _adopted = 1>> -<<case "FSRestart">> - $desc concerned for the future, and believing their elite could do a better job, leading the arcology to @@.yellow;adopt Eugenics.@@ - <<set $arcologies[$i].FSRestart = 5>><<set _adopted = 1>> -<<case "FSHedonisticDecadence">> - $desc obsessed with indulging their every desire, leading the arcology to @@.yellow;adopt Decadent Hedonism.@@ - <<set $arcologies[$i].FSHedonisticDecadence = 5>><<set _adopted = 1>> -<<case "FSCummunism">> - $desc obsessed with cum, leading the arcology to @@.yellow;adopt Cummunism.@@ - <<set $arcologies[$i].FSCummunism = 5>><<set _adopted = 1>> -<<case "FSIncestFetishist">> - $desc obsessed with their relatives, leading the arcology to @@.yellow;adopt Incest Fetishism.@@ - <<set $arcologies[$i].FSIncestFetishist = 5>><<set _adopted = 1>> -<<case "FSIntellectualDependency">> - $desc partial to airheaded horny bimbos, leading the arcology to @@.yellow;adopt Intellectual Dependency.@@ - <<set $arcologies[$i].FSIntellectualDependency = 5>><<set _adopted = 1>> -<<case "FSSlaveProfessionalism">> - $desc obsessed with crafting the perfect slave, leading the arcology to @@.yellow;adopt Slave Professionalism.@@ - <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<set _adopted = 1>> -<<case "FSPetiteAdmiration">> - $desc enamored by those shorter than them, leading the arcology to @@.yellow;adopt Petite Admiration.@@ - <<set $arcologies[$i].FSPetiteAdmiration = 5>><<set _adopted = 1>> -<<case "FSStatuesqueGlorification">> - $desc convinced that tall equals beauty, leading the arcology to @@.yellow;adopt Statuesque Glorification.@@ - <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<set _adopted = 1>> -<<case "FSNeoImperialist">> - $desc fascinated by the long rule of ancient European monarchs, leading the arcology to @@.yellow;adopt Neo-Imperialism.@@ - <<set $arcologies[$i].FSNeoImperialist = 5>><<set _adopted = 1>> -<</switch>> -<</if>> -<</if>> - -<<if _adopted == 0>> - Its future is bitterly controversial, and no side is predominant this week. The dissension reduces the arcology's prosperity. - <<set $arcologies[$i].prosperity -= 1>> -<</if>> diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw index 427fac1b04748c5a875a4ab9f56e4394bf841622..4eed4de160a64d291e08944d483d862562a19854 100644 --- a/src/uncategorized/nextWeek.tw +++ b/src/uncategorized/nextWeek.tw @@ -287,7 +287,7 @@ <<set $thisWeeksIllegalWares = $merchantIllegalWares.randomMany(1)>> <<set $prisonCircuitIndex++>><<if $prisonCircuitIndex >= $prisonCircuit.length>><<set $prisonCircuitIndex = 0>><</if>> -<<set $coursed = 0, $prestigeAuctioned = 0, $eliteAuctioned = 0, $shelterSlave = 0, $shelterSlaveBought = 0, $slaveMarketLimit = 10 + ($rep / 1000), $slavesSeen = 0, $slavesSacrificedThisWeek = 0, $subSlaves = 0>> +<<set $coursed = 0, $prestigeAuctioned = 0, $eliteAuctioned = 0, $shelterSlave = 0, $shelterSlaveBought = 0, $slaveMarketLimit = 10 + ($rep / 1000), $slavesSeen = 0, $slavesSacrificedThisWeek = 0>> <<if $pit>> <<set $pit.fought = false>> @@ -299,7 +299,7 @@ <<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestTargetID = -1, $subID = -1, $submissiveInterestTargetID = -1, $shelterGirlID = -1>> /% Other arrays %/ -<<set $events = [], $RESSevent = [], $RESSTRevent = [], $RETSevent = [], $RECIevent = [], $RecETSevent = [], $REFIevent = [], $REFSevent = [], $PESSevent = [], $PETSevent = [], $FSAcquisitionEvents = [], $FSNonconformistEvents = [], $REAnalCowgirlSubIDs = [], $REButtholeCheckinIDs = [], $recruit = [], $RETasteTestSubIDs = [], $rebelSlaves = [], $REBoobCollisionSubIDs = [], $REIfYouEnjoyItSubIDs = [], $RESadisticDescriptionSubIDs = [], $REShowerForceSubIDs = [], $RECockmilkInterceptionIDs = [], $REInterslaveBeggingIDs = [], $bedSlaves = [], $eligibleSlaves = []>> +<<set $events = [], $RESSevent = [], $RESSTRevent = [], $RETSevent = [], $RECIevent = [], $RecETSevent = [], $REFIevent = [], $REFSevent = [], $PESSevent = [], $PETSevent = [], $FSAcquisitionEvents = [], $FSNonconformistEvents = [], $REAnalCowgirlSubIDs = [], $REButtholeCheckinIDs = [], $recruit = [], $RETasteTestSubIDs = [], $rebelSlaves = [], $REBoobCollisionSubIDs = [], $REIfYouEnjoyItSubIDs = [], $RESadisticDescriptionSubIDs = [], $REShowerForceSubIDs = [], $RECockmilkInterceptionIDs = [], $REInterslaveBeggingIDs = [], $eligibleSlaves = []>> /% Slave Objects using 0 instead of null. Second most memory eaten up. %/ <<set $activeSlave = 0, $eventSlave = 0, $subSlave = 0, $milkTap = 0, $relation = 0, $relative = 0, $relative2 = 0>> diff --git a/src/uncategorized/officeDescription.tw b/src/uncategorized/officeDescription.tw index 9b51aa2cc4b5cfe1df082830436ec1e5c6e5b538..3c08f3cb5c5d57f464f61ce65b634a06535e71f8 100644 --- a/src/uncategorized/officeDescription.tw +++ b/src/uncategorized/officeDescription.tw @@ -188,7 +188,7 @@ <</switch>> <</if>> <</if>> -<<= printTrinkets()>> +<br> <<= printTrinkets()>> A small mirror resides on your desk, facing you. A $PC.visualAge year old, $PC.faceShape<<if $PC.markings == "freckles">>, freckled<<elseif $PC.markings == "heavily freckled">>, densely freckled<</if>> face stares back at you. diff --git a/src/uncategorized/scheduledEvent.tw b/src/uncategorized/scheduledEvent.tw index 192f35cd6968758c0e13181dcac1d00abac55011..c6c20a114c04db2dc145fade46b0c10002d9457c 100644 --- a/src/uncategorized/scheduledEvent.tw +++ b/src/uncategorized/scheduledEvent.tw @@ -134,15 +134,11 @@ <<goto "SE coursing">> <<elseif $policies.raidingMercenaries == 1 && ($week > ($raided + 6))>> <<goto "SE raiding">> -<<elseif $pit && !$pit.fought && - (($pit.fighterIDs.length > 1 && !$pit.bodyguardFights) - || ($pit.fighterIDs.length > 0 && ($BodyguardID !== 0 && $pit.bodyguardFights) || $pit.animal) - || $pit.slaveFightingBodyguard)>> - <<if $pit.lethal>> - <<goto "SE lethal pit">> - <<else>> - <<goto "SE nonlethal pit">> - <</if>> +<<elseif $pit && !$pit.fought && ( + ($pit.slaveFightingBodyguard) || + ($pit.fighterIDs.length > 0 && ($pit.animal || $pit.bodyguardFights)) || + ($pit.fighterIDs.length > 1))>> + <<goto "SE pit fight">> <<elseif ($bioreactorPerfectedID != 0) && ($bioreactorsAnnounced != 1)>> <<goto "P bioreactor perfected">> <<elseif _schoolFail>> diff --git a/src/uncategorized/seLethalPit.tw b/src/uncategorized/seLethalPit.tw deleted file mode 100644 index c483fdf266f46199da4601652acaa7872d53e3b4..0000000000000000000000000000000000000000 --- a/src/uncategorized/seLethalPit.tw +++ /dev/null @@ -1,132 +0,0 @@ -:: SE lethal pit [nobr] - -<<includeDOM App.Facilities.Pit.fight(true)>> -/* -<<if !$pit.animalFights>> -<<else>> - <<if _winner == _fighterOne>> - <<if !canSee(_winner)>> - _winner.slaveName centers $himself and hones in on the _animal.species's rapid breath. $He readies $himself, knowing $he has a single chance to live. With heavy steps, the _animal.species rushes at $him, fully prepared to slaughter the helpless combatant. _winner.slaveName gambles everything on a single high slash, a slash that cuts the _animal.species's undefended neck wide open. _winner.slaveName collapses to the ground, fully aware of the _animal.species's final gurgles and the @@.red;deep scratches in $his side.@@ $He lived this time, barely, but $he doubts $he can do it again. - <<run healthDamage(_winner, 80)>> - <<if $pit.audience == "paid">> - The audience is awestruck by the blind $girl's triumph, and your @@.yellowgreen;cut of the betting@@ is enormous. - <<run cashX(50000, "pit", _winner)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;awestruck@@ by the blind $girl's triumph. - <<run repX(2000, "pit", _winner)>> - <</if>> - <<elseif (_winner.muscles > 30)>> - _winner.slaveName is so massively muscular that $he's actually impeded by $his lack of speed and flexibility. The _animal.species is suitably cautious, and it does its best to avoid $his sword. The two go back and forth for a while — the slave slashing and swinging, the animal leaping out of the way. $activeSlave.slaveName finally manages to get the better of the _animal.species, though, and manages to catch the tip of $his sword on the animal's leg. With a loud <<switch _animal.type>><<case "canine">>yelp<<case "hooved">>whinny<<case "feline">>howl<</switch>>, the _animal.species stumbles back, giving the slave a chance to bring $his sword down in an overhead swing, nearly removing the _animal.species's head. - <<if $pit.audience == "paid">> - The audience is reasonably impressed by the show of strength, and your @@.yellowgreen;cut of the betting@@ is reasonable. - <<run cashX(1000, "pit", _winner)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;reasonably impressed@@ by the show of strength. - <<run repX(50, "pit", _winner)>> - <</if>> - <</if>> - <<else>> - <<if !canSee(_loser)>> - The _animal.species isn't aware that its opponent is blind, and either way, it wouldn't have cared. It slowly paces around the flailing _loser.slaveName, looking for an opening. Seeing one, the _animal.species <<if _animal.type == "hooved">>rushes<<else>>lunges<</if>> at $him, ending $his life in one fell swoop. - <<if $pit.audience == "paid">> - The audience found the fight embarrassing, and your @@.yellowgreen;cut of the betting@@ is pitiful. - <<run cashX(40, "pit", _loser)>> - <<elseif $pit.audience == "free">> - The audience is @@.red;annoyed@@ by this waste of a fight. - <<run repX(-20, "pit", _loser)>> - <</if>> - <<elseif (_winnerDeadliness <= _loserDeadliness+3)>> - <<if _loser.skill.combat > 0>> - _loser.slaveName is fairly confident in $his fighting abilities, and $he knows that this fight is fairly evenly matched. - <<else>> - _loser.slaveName doesn't know how to handle a sword, but $he feels fairly confident in $his chances all the same. - <</if>> - $He doesn't know how to go about attacking an animal, though, so $he decides to play it safe and keep the _animal.species at sword's length. The _animal.species make a few false lunges at the slave, all the while keeping out of reach. After a few minutes of this, though, it's evident that _loser.slaveName is beginning to tire: $his sword is beginning to swing slower and slower, and $his stance isn't as straight. The animal seems to sense this, and, spotting an opening, makes a final lunge. Its <<switch _animal.type>><<case "canine" "feline">>teeth sink into $his throat<<case "hooved">>hooves connect with $his skull<</switch>>, ending $his life almost immediately. - <<elseif (_loser.belly >= 300000)>> - _loser.slaveName's belly is too big to possibly defend, so $he can't help but watch in horror as the _animal.species lunges at $him, <<switch _animal.type>><<case "canine" "feline">>fangs and claws out<<case "hooved">>headfirst<</switch>>. _loser.slaveName's belly ruptures like a popped water balloon, showering the animal with - <<if _loser.pregType > 0>> - blood. _loser.slaveName collapses into the pile of organs and babies released from _his2 body. - <<elseif _loser.bellyImplant > 0>> - blood and filler. _loser.slaveName collapses into the pool of organs and fluid released from _his2 body. - <<else>> - blood and <<print _loser.inflationType>>. _loser.slaveName collapses into the pool of organs and fluid released from _his2 body. - <</if>> - With a <<switch _animal.type>><<case "canine" "feline">>growl<<case "hooved">>snort<</switch>>, the _animal.species quickly finishes $him off<<if _animal.type == "hooved">> with a kick to the head<</if>>. - <<if $pit.audience == "paid">> - The audience is not very impressed by this easy kill, and your @@.yellowgreen;cut of the betting@@ is unimpressive. - <<run cashX(2000, "pit", _loser)>> - <<elseif $pit.audience == "free">> - the audience is @@.green;not very impressed@@ by this easy kill. - <<run repX(100, "pit", _loser)>> - <</if>> - <<elseif (_loser.boobs > 1200)>> - _loser.slaveName's tits are too big to possibly defend, so $he can't help but <<if canSee(_loser)>>watch<<else>>cringe<</if>> in horror as the _animal.species lunges at $him, <<switch _animal.type>><<case "canine" "feline">>fangs and claws out<<case "hooved">>headfirst<</switch>>. _loser.slaveName's reflexively drops _his2 sword to clasp _his2 hand<<if hasBothArms(_loser)>>s<</if>> over _his2 ruined breasts, gushing blood<<if _loser.boobsImplant > 400>> and implant fluid<</if>>. The _animal.species follows up with a <<switch _animal.type>><<case "canine" "feline">>fierce bite to <<if hasBothLegs(_loser)>>one of $his legs<<elseif hasAnyLegs(_loser)>>$his leg<<else>>$his rear<</if>>, causing $him to collapse. A second later, the animal has finished $him off.<<case "hooved">>swift kick to the head, causing $him to drop like a rock. Another blow to the head finishes $him off.<</switch>> - <<if $pit.audience == "paid">> - The audience is not very impressed by this easy kill, and your @@.yellowgreen;cut of the betting@@ is unimpressive. - <<run cashX(2000, "pit", _loser)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;not very impressed@@ by this easy kill. - <<run repX(100, "pit", _loser)>> - <</if>> - <<else>> - <<if (_loser.skill.combat > 0)>> - _loser.slaveName is reasonably confident in $his fighting abilities, but $he isn't sure how to go about attacking the _animal.species. $He decides to open with a series of wide horizontal slashes, but the beast manages to stay out of range of $his sword. Realizing this isn't working, $he lunges at the animal, leaving $his side exposed. The _animal.species sees this and <<switch _animal.type>><<case "canine" "feline">>leaves some @@.red;deep claw marks in $his side.@@ Bleeding<<case "hooved">>headbutts $him as hard as it can, sending $him flying into the side of $pit.name. Battered<</switch>> and unable to stand, $activeSlave.slaveName can do little to stop the _animal.species from finishing $him off with a <<switch _animal.type>><<case "canine">>fierce bite of its fangs to $his throat.<<case "feline">>ferocious swipe of its claws to $his throat.<<case "hooved">>swift kick to the head.<</switch>> - <<if $pit.audience == "paid">> - The audience is reasonably impressed by the blood, and your @@.yellowgreen;cut of the betting@@ is reasonable. - <<run cashX(4000, "pit", _loser)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;reasonably impressed@@ by the blood. - <<run repX(200, "pit", _loser)>> - <</if>> - <<else>> - <<switch _animal.type>> - <<case "canine" "feline">> - _loser.slaveName doesn't stand a chance, and $he knows it. $He comes in with a furious overhead slash, which the _animal.species dodges with ease. It also dodges the next few slashes before coming to a standstill. With a furious growl, it runs around $him, just out of reach of $his sword, before jumping at the wall of $pit.name and launching itself off. Its <<if _animal.type == "canine">>teeth<<else>>claws<</if>> connect with _loser.slaveName's throat, completely severing $his windpipe. $He falls to $his knees, eyes wide and clutching $his throat, before completely collapsing. - <<case "hooved">> - The _animal.species paws at the ground for a few seconds before launching itself at $activeSlave.slaveName. $He just barely manages to get out of the way, and the _animal.species has to backpedal to avoid smashing into the wall. $activeSlave.slaveName isn't out of danger just yet, though — $he is still standing directly behind the _animal.species. $He realizes this too late, as both of the its hooves connect with $his jaw. With a sickening //crunch//, $he flies backwards, $his body slamming into the other wall of $pit.name. - <</switch>> - <<if $pit.audience == "paid">> - The audience is reasonably impressed by the violence, and your @@.yellowgreen;cut of the betting@@ is reasonable. - <<run cashX(4000, "pit", _loser)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;reasonably impressed@@ by the violence. - <<run repX(200, "pit", _loser)>> - <</if>> - <</if>> - <</if>> - <</if>> - - <br><br> - <<if _winner == _fighterOne>> - You let the winner _winner.slaveName, shaking as $he comes off the adrenaline, drugs, and the fear, exit the pit. - - <<if _winner.fetish == "mindbroken">> - $He was already so broken before today that $he will not be seriously affected by having killed with $his own hand<<if hasBothArms(_winner)>>s<</if>>. - <<elseif _winner.devotion > 95>> - $He is so worshipful of you that $he does not see killing an animal as special in $his own internal listing of things that $he has willingly done and would willingly do again on your behalf. - <<elseif _winner.devotion > 80>> - $He will never forget having killed an animal with $his own hand<<if hasBothArms(_winner)>>s<</if>>. The only way $he will be able to live with $himself is to @@.hotpink;subsume $his will to yours,@@ telling $himself that the killing was to serve and obey you. - <<set _winner.devotion += 10>> - <<elseif (_winner.fetishKnown == 1) && (_winner.fetishStrength > 60) && (_winner.fetish == "sadist")>> - $He has sunk even deeper into cruelty, callousness, and a total disregard of the value of other lives. Going forward, $he's even @@.hotpink;less likely to question@@ even the most abominable commands. - <<set _winner.devotion += 4>> - <<elseif _winner.devotion > 50>> - $He will never forget having killed an animal with $his own hand<<if hasBothArms(_winner)>>s<</if>>. The only way $he will be able to live with $himself is to tell $himself that the killing was done on your orders. - <<else>> - $He will never forget having killed an animal with $his own hand<<if hasBothArms(_winner)>>s<</if>>. The only way $he will be able to live with $himself is to @@.mediumorchid;blame you,@@ telling $himself that the killing was the only choice you gave $his if $he wanted to live. - <<set _winner.devotion -= 10>> - <</if>> - - <<if (_winner.fetish != "sadist")>> - <<if random(1,100) > 50>> - Cruelty and callousness seeps its way into $his sexuality; $he has become a @@.lightcoral;bloody sadist.@@ - <<set _winner.fetish = "sadist">> - <<set _winner.fetishKnown = 1>> - <<set _winner.fetishStrength = 65>> - <</if>> - <</if>> - <<else>> - Another week, another slave killed by your animals. - <</if>> -<</if>> -*/ diff --git a/src/uncategorized/seNonlethalPit.tw b/src/uncategorized/seNonlethalPit.tw deleted file mode 100644 index 92f9935106a0a715085e80c8cfb45c0d956fe939..0000000000000000000000000000000000000000 --- a/src/uncategorized/seNonlethalPit.tw +++ /dev/null @@ -1,79 +0,0 @@ -:: SE nonlethal pit [nobr] - -<<includeDOM App.Facilities.Pit.fight(false)>> -/* -<<if !$pit.animal>> -<<else>> - <<set $activeSlave = _fighterOne>> - - <<if canDoVaginal($activeSlave)>> - <<set _sexAct = "vaginal">> - <<set _orifice = either("pussy", "cunt", "slit")>> - <<elseif canDoAnal($activeSlave)>> - <<set _sexAct = "anal">> - <<set _orifice = either("asshole", "rear hole")>> - <<else>> - <<set _sexAct = "oral">> - <<set _orifice = "mouth">> - <</if>> - - <<if ($activeSlave.muscles > -30) && ($activeSlave.weight <= 95) && ($activeSlave.health.condition >= -50) && ($activeSlave.bellyPreg <= 5000) && ($activeSlave.bellyImplant <= 4000) && (!isInLabor($activeSlave)) && ($activeSlave.bellyFluid <= 2000)>> - <<set _canRun = 1>> - <<else>> - <<set _canRun = 0>> - <</if>> - - <<if ($activeSlave.devotion > 50) || ($activeSlave.devotion > 20 && ($activeSlave.fetish == "masochist" || $activeSlave.fetish == "humiliation" || $activeSlave.sexualQuirk == "perverted" || $activeSlave.behavioralQuirk == "sinful"))>> - <<set _agree = 1>> - <<else>> - <<set _agree = 0>> - <</if>> - - <<if $pit.audience == "none">>You are alone above $pit.name, left to watch the animal use your slave in private.<<elseif $pit.audience == "free">>Your guests line the rim of $pit.name, joking and laughing.<<else>>The attendees line the rim of $pit.name, making bets on how long $he'll last.<</if>> - - <<if $arcologies[0].FSRomanRevivalist != "unset" || $arcologies[0].FSDegradationist != "unset">> - They @@.green;strongly approve@@ of you using this method of punishment; this advances ideas from antiquity about what public events should be. - <<if $arcologies[0].FSRomanRevivalist != "unset">> - <<run repX(10*$FSSingleSlaveRep*($arcologies[0].FSRomanRevivalist/$FSLockinLevel), "pit", $activeSlave)>> - <<set $arcologies[0].FSRomanRevivalist += 0.2*$FSSingleSlaveRep>> - <<elseif $arcologies[0].FSDegradationist != "unset">> - <<run repX(10*$FSSingleSlaveRep*($arcologies[0].FSDegradationist/$FSLockinLevel), "pit", $activeSlave)>> - <<set $arcologies[0].FSDegradationist += 0.2*$FSSingleSlaveRep>> - <</if>> - <</if>> - - <br><br> - $activeSlave.slaveName and the _animal.species enter $pit.name from opposite sides. $activeSlave.slaveName is naked and $his wrists have been bound, and $he has already been given $his instructions: $he is to try to avoid being caught and <<if _agree == 1>>fucked<<else>>raped<</if>> by the animal for five minutes, and if $he succeeds, $he wins. The _animal.species has been given a large dose of aphrodisiacs, and its lust is apparent — its _animal.dickSize cock is clearly visible, even from where you are seated. It isn't in a hurry, and slowly saunters over to where the <<if _agree == 1>>determined<<else>>terrified<</if>> slave is standing. After what seems to be a moment of deliberation, $he finally makes $his move, and starts <<if _canRun == 1>>running<<else>>moving as quickly as $he can<</if>> in the opposite direction. The _animal.species quickly follows suit, breaking out into a full sprint toward $him. - <<if random(1,100) < 30 && _canRun>> - $activeSlave.slaveName is quick, though, and $he manages to avoid the animal for the full five minutes, and drops to $his knees in relief and exhaustion once the bell sounds and the _animal.species is leashed and pulled back into its cage. - <<if $pit.audience == "paid">> - The audience is fairly impressed by this impressive display of sportsmanship, and so is your @@.yellowgreen;cut of the betting.@@ - <<run cashX(2500, "pit", $activeSlave)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;fairly impressed@@ by this impressive display of sportsmanship. - <<run repX(100, "pit", $activeSlave)>> - <</if>> - <<else>> - <<set _minutesLasted = random(1,5)>> - <<if _canRun == 1>> - $activeSlave.slaveName is quick, but not quick enough. $He manages to last almost <<= num(_minutesLasted)>> full minutes before the _animal.species finally catches $him. - <<elseif _canRun == 0>> - $activeSlave.slaveName isn't quick enough to avoid the beast, and $he only manages to last a pitiful thirty seconds before the _animal.species catches $him. - <</if>> - <<if $pit.audience == "paid">> - The audience is not very impressed by this mediocre display, and your @@.yellowgreen;cut of the betting@@ is equally unimpressive. - <<run cashX(500, "pit", $activeSlave)>> - <<elseif $pit.audience == "free">> - The audience is @@.green;not very impressed@@ by this mediocre display. - <<run repX(25, "pit", $activeSlave)>> - <</if>> - It <<if _animal.type != "hooved">>swipes at $his <<if hasAnyLegs($activeSlave)>>leg<<if hasBothLegs($activeSlave)>>s<</if>><<else>>lower body<</if>><<else>>headbutts $him<</if>>, causing $him to go down hard. It doesn't waste a moment, and mounts $him quicker than you thought would have been possible for a _animal.species. It takes a few tries, but it finally manages to find $his _orifice, causing <<if $audience != "none">>the crowd to go wild and<</if>> $activeSlave.slaveName to give a long, drawn-out <<if _agree == 1>>moan<<else>>scream<</if>> as its _animal.dickSize cock <<if (_orifice == "pussy" && $activeSlave.vagina == 0) || (_orifice == "asshole" && $activeSlave.anus == 0)>>@@.limegreen;breaks in@@<<else>>fills<</if>> $his _orifice. Without hesitation, it begins to steadily thrust, pounding $him harder and harder as it grows closer and closer to climax. After several minutes, you see the animal finally stop thrusting as the barely-there slave gives a loud <<if _agree == 1>>moan<<else>>groan<</if>>. <<if $audience != "none">>The crowd gives a loud cheer as the<<else>>The<</if>> animal pulls out, leaving the thoroughly fucked-out $activeSlave.slaveName lying there, cum streaming out of $his _orifice. - <</if>> - <<set $slaves[$slaveIndices[_fighterOne.ID]] = _fighterOne>> - <<if !$pit.bodyguardFights || ($BodyguardID != _fighterOne.ID)>> - <<set $pit.fighterIDs.push(_fighterOne.ID)>> - <</if>> -<</if>> - -<<set $pitFightsTotal++>> -*/ diff --git a/src/uncategorized/sellSlave.tw b/src/uncategorized/sellSlave.tw index 583e2fa2da81350ca92fc11dc8f11247c7e9fedb..7815c4bff9489255ed98cc53fbf9519a6d348b86 100644 --- a/src/uncategorized/sellSlave.tw +++ b/src/uncategorized/sellSlave.tw @@ -373,7 +373,7 @@ A reputable slave appraiser arrives promptly to inspect $him and certify $his qu <<elseif _careers.length > 1>> _careers[1] and <<print _careers[0]>>. <<else>> - <<print _careers[0]>>. Providing $him the same additional value if $he had a relevant career. + <<print _careers[0]>>, providing $him the same additional value if $he had a relevant career. <</if>> <</if>> diff --git a/submodules/sugarcube-2 b/submodules/sugarcube-2 index 7bf41720322c05d1ada96df689644fac938f9ffc..c9351665e98ed6f74c6afa0bb5e181f5bd58ef0f 160000 --- a/submodules/sugarcube-2 +++ b/submodules/sugarcube-2 @@ -1 +1 @@ -Subproject commit 7bf41720322c05d1ada96df689644fac938f9ffc +Subproject commit c9351665e98ed6f74c6afa0bb5e181f5bd58ef0f