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/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/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..9544ffe99889ef97cf08607fc96ca843184fb3fa 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\)" -- "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/cheats/mod_EditSlaveCheatDatatypeCleanupNew.tw b/src/cheats/mod_EditSlaveCheatDatatypeCleanupNew.tw index 41ee8e1e832badd9f695a8e7afe8efe7fce17bd4..fd55cbd63b4d62d96f2d1a73f3312335c242cadb 100644 --- a/src/cheats/mod_EditSlaveCheatDatatypeCleanupNew.tw +++ b/src/cheats/mod_EditSlaveCheatDatatypeCleanupNew.tw @@ -20,21 +20,7 @@ <<set $rep = Number($rep) || 0>> <<set $cash = Number($cash) || 0>> <<set $week = Number($week) || 1>> -<<set $tempSlave.preg = Number($tempSlave.preg) || 0>> -<<set $tempSlave.pregType = Number($tempSlave.pregType) || 0>> -<<if $tempSlave.broodmother == 0>> - <<set WombInit($tempSlave)>> /* just to make sure */ - <<set $tempSlave.womb.length = 0>> /* simple way to delete all fetuses */ - <<set WombImpregnate($tempSlave, $tempSlave.pregType, $tempSlave.pregSource, $tempSlave.preg)>> /* recreates fetuses */ -<<else>> - <<set WombNormalizePreg($tempSlave)>> -<</if>> -<<set $tempSlave.pregWeek = Number($tempSlave.pregWeek) || Math.max($tempSlave.preg, 0)>> -<<if $tempSlave.preg <= 0>> - <<set $tempSlave.pregKnown = 0>> -<<elseif $tempSlave.preg > 0>> - <<set $tempSlave.pregKnown = 1>> -<</if>> +<<set WombUpdatePregVars($tempSlave)>> <<set $tempSlave.pregAdaptation = Number($tempSlave.pregAdaptation) || 0>> <<if $tempSlave.pregAdaptation <= 0>> <<if $tempSlave.genes === "XY">> /* copied from GenerateXYPregAdaptation */ 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/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/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/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..4ecf3c17775b2b33ae8311b97596fc420751be74 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(); @@ -1918,7 +1918,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 +2209,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 +2415,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 +2492,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 +2557,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 +2765,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 +2773,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..3dd3ed3f4cd02b4efb8478aca1fac259f2041472 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,9 @@ 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; - } - 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 +259,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 +303,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 +1448,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" && App.EndWeek.saVars.subSlaveRatio <= 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 +1782,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/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/intro/customizeSlaveTrade/customizeSlaveTrade.js b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js index 186861aa9b5fda008e21ce435cb40a4ec17bc156..b2fcabbea86d509fdb0efefedfdc056abd092574 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(); } ), diff --git a/src/events/scheduled/pitFight.js b/src/events/scheduled/pitFight.js index a1dc35c52244ee7328c3509bf5f81cb721fdd7b8..11d4d6c97ac427d44e31250200984ade74f304d2 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 = Array.from(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(`Fighters:\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..b97489ea2faa7981b6593a0c0101efdc532a24c0 100644 --- a/src/events/scheduled/pitFightLethal.js +++ b/src/events/scheduled/pitFightLethal.js @@ -1,13 +1,31 @@ +// 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])), fighterDeadliness(getSlave(fighters[1])), fight(), postFight()); + frag.append( + intro(), + fighterDeadliness(getSlave(fighters[0])), + !V.pit.animal ? fighterDeadliness(getSlave(fighters[1])) : '', + fight(), + postFight(), + ); return frag; @@ -16,8 +34,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 +46,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 +70,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 +271,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 +320,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 +669,148 @@ 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; - } - - 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 = "sadist"; - winner.fetishKnown = 1; - winner.fetishStrength = 65; - } - } + r.push(`You let the winner ${winner.slaveName}, shaking as ${he} comes off the adrenaline, drugs, and fear, exit the pit.`); - 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}.`); + 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.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 += 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; + 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; + V.pit.slaveFightingBodyguard = null; - if (winner.skill.combat === 0) { - r.push(`With lethal experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); + if (winner.skill.combat === 0) { + r.push(`With lethal experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan); - winner.skill.combat++; - } + winner.skill.combat++; + } - winner.counter.pitKills++; + winner.counter.pitKills++; + winner.counter.pitWins++; - if (!V.pit.bodyguardFights || S.Bodyguard.ID !== winner.ID) { - V.pit.fighterIDs.push(winner.ID); + if (!V.pit.bodyguardFights || S.Bodyguard.ID !== winner.ID) { + V.pit.fighterIDs.push(winner.ID); + } } V.pitKillsTotal++; - - removeSlave(loser); - V.pitFightsTotal++; - winner.counter.pitWins++; + + loser.hasOwnProperty('slaveName') ? removeSlave(loser) : null; App.Events.addNode(postFightDiv, r); @@ -654,27 +820,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..d635b43845fe822101311d002e7a3d620bfcc58f 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 aphrodisics, 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 winnerDeadliness = deadliness(winner); - const loserDeadliness = deadliness(loser); + const r = []; - 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 (animal) { + const slave = getSlave(fighters[0]); + const {he, him, his, He} = getPronouns(slave); - const r = []; + const approves = slave.devotion > 50 || (slave.devotion > 20 && (slave.fetish === "masochist" || slave.fetish === "humiliation" || slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful")); - fightDiv.classList.add("pit-section"); + // 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}.`); - if (animal) { - // + // 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 (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,355 @@ 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`}.`; - - const virginitySpan = App.UI.DOM.makeElement("span", ``, ["virginity", "loss"]); + if (animal) { + if (winner.hasOwnProperty('species')) { + // TODO: add effects (gain masochist, etc) + const slave = getSlave(fighters[0]); + const {him, his} = getPronouns(slave); - r.push(`You throw the victor's strap-on down to ${winner.slaveName}.`); + const approves = slave.devotion > 50 || (slave.devotion > 20 && (slave.fetish === "masochist" || slave.fetish === "humiliation" || slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful")); - 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 pussy = ['pussy', 'cunt', 'slit']; + const asshole = ['asshole', 'rear hole', 'anus']; + const mouth = ['mouth', 'throat']; - 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.`); + const orifice = () => canDoVaginal(slave) ? either(pussy) : canDoAnal(slave) ? either(asshole) : either(mouth); + const consummation = App.UI.DOM.makeElement('span', `breaks in`, ["virginity", "loss"]); - 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`},`); + 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()}.`); - 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.bodyguardFights || V.BodyguardID !== slave.ID) { + V.pit.fighterIDs.push(slave.ID); } - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + // 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.`); + } - knockMeUp(loser, 50, 1, winner.ID); - } + 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.`); - 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`},`); + 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`},`); - 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.`); - } + 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 (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 (canDoVaginal(loser)) { - r.push(winnerPenetrates(cunt)); + 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)) { - 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, 0, winner.ID); - } + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - actX(loser, vaginal); - } else if (canDoAnal(loser)) { - r.push(winnerPenetrates(anus)); + knockMeUp(loser, 50, 0, winner.ID); + } - if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { - r.push(loserProtest); + actX(loser, vaginal); + } else if (canDoVaginal(loser)) { + r.push(winnerPenetrates(cunt)); - knockMeUp(loser, 50, 1, winner.ID); - } + if (canPenetrate(winner) && canImpreg(loser, winner)) { + r.push(loserProtest); - actX(loser, anal); - } else { - r.push(facefuck); + knockMeUp(loser, 50, 0, winner.ID); + } - 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`},`); + actX(loser, vaginal); + } else if (canDoAnal(loser)) { + r.push(winnerPenetrates(anus)); + + if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) { + r.push(loserProtest); + + 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); - - 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 (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); + 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 +1007,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 +1094,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 +1107,7 @@ App.Facilities.Pit.fight.nonlethal = function(fighters) { return rapeEffectsDiv; - function winnerEffects() { + function winnerEffects() { const winnerEffectsDiv = document.createElement("div"); const r = []; @@ -1043,9 +1155,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 +1222,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 b00dbe93e67e5925a6660a0c1fdf53794dca9253..7d646bf9f79726cfb9e0ee169169e07ea67e87b7 100644 --- a/src/facilities/farmyard/reports/farmyardReport.js +++ b/src/facilities/farmyard/reports/farmyardReport.js @@ -453,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/pit/pit.js b/src/facilities/pit/pit.js index 1c223828f429244a4a2c7109c28663516a57c740..4da800a9faad71e18a2db756fc433c858d5518f6 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 one of your slaves to fight 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/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/interaction/killSlave.js b/src/interaction/killSlave.js index a3e1c9a02963809001cd63722e1f997b604898b9..881d0179bb4ceb3400a880b0eaaf43cedb491657 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 = { @@ -139,25 +139,26 @@ App.UI.SlaveInteract.killSlave = function(slave) { ); 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 { 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/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..c6639b6d0dbfd5bce96287efc11c7e57af0fa1e1 100644 --- a/src/js/birth/birth.js +++ b/src/js/birth/birth.js @@ -4880,8 +4880,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 +4947,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 +5087,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 +5112,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 +5126,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/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/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/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js new file mode 100644 index 0000000000000000000000000000000000000000..c7968e9983d23431261f778deefb4d82ac47190d --- /dev/null +++ b/src/npc/interaction/fAnimal.js @@ -0,0 +1,994 @@ + +/** + * @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]; + + 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 = ["mouth", "throat"]; + break; + case vaginal: + orifice = ["pussy", "cunt"]; + hole = 0; + break; + case anal: + orifice = ["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` : ``}. `); + } + + mainSpan.append(r.join(' ')); + + 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 ${act === vaginal ? `pussy` : `asshole`}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} 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 fills ${his} ${act === vaginal ? `pussy` : `asshole`} 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} ${act === vaginal ? `pussy` : `asshole`}. `); + } + } + + mainSpan.append(r.join(' ')); + + 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 ${act === vaginal ? `pussy` : `asshole`}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} 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 fills ${his} ${act === vaginal ? `pussy` : `asshole`} 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} ${act === vaginal ? `pussy` : `asshole`}. `); + } + } + + mainSpan.append(r.join(' ')); + + 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 ${act === vaginal ? `pussy` : `asshole`}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} 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 fills ${his} ${act === vaginal ? `pussy` : `asshole`} 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} ${act === vaginal ? `pussy` : `asshole`}. `); + } + } + + mainSpan.append(r.join(' ')); + + 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 ${act === vaginal ? `pussy` : `asshole`}. `); + } + + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} 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 fills ${his} ${act === vaginal ? `pussy` : `asshole`} 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} ${act === vaginal ? `pussy` : `asshole`}. `); + } + } + + mainSpan.append(r.join(' ')); + + 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[0]}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice[1]}. 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[0]}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice[1]}. 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[0]}. 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[0]}` : + orifice[0]}, 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[1]} 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[0]} 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().`); + } + } + + mainSpan.append(r.join(' ')); + + 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; + } + } + } + + mainSpan.append(r.join(' ')); + + 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/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/uncategorized/economics.tw b/src/uncategorized/economics.tw index 5b1bcdbb510c9fcac94c0b59a81c69a43e61bca3..e108f2ea75093c15f67462e7f9176fc541884f84 100644 --- a/src/uncategorized/economics.tw +++ b/src/uncategorized/economics.tw @@ -18,8 +18,7 @@ <br><br> <<if $useTabs == 0>> - <<include "Neighbors Development">> - <br> + <<includeDOM App.EndWeek.neighborsDevelopment()>> <<includeDOM App.EndWeek.arcmgmt()>> <<if $FSAnnounced > 0>> @@ -69,7 +68,7 @@ <div id="Arcologies" class="tab-content"> <div class="content"> - <<include "Neighbors Development">> + <<includeDOM App.EndWeek.neighborsDevelopment()>> </div> </div> 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 4ce25632e4ee77e3e9ae5536109346081d4a617d..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>> 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/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