diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 77854e982ad0a54bd4b81558fee78ffe1129e132..42887f82a0e8310816fb004af21ff6e9a0ac48b5 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -320,10 +320,20 @@ App.Data.resetOnNGPlus = { oralAppeal: 0, vaginalAppeal: 0, analAppeal: 0, - sexualOpeness: 0 + sexualOpeness: 0, + bestialityOpeness: 0 }, - FCTV: {}, + FCTV: { + receiver: -1, + channel: {}, + pcViewership: { + count: 0, + frequency: 4, + }, + remote: 0, + weekEnabled: 0 + }, assistant: {}, targetArcology: {fs: "New"}, readySlaves: 0, @@ -560,6 +570,7 @@ App.Data.resetOnNGPlus = { nurseryGrowthStimsSetting: 0, MadamIgnoresFlaws: 0, farmyardBreeding: 0, + farmyardRestraints: 0, farmyardShows: 0, DJignoresFlaws: 0, slaveFightingBG: 0, @@ -768,10 +779,10 @@ App.Data.resetOnNGPlus = { masterSuiteNameCaps: "The Master Suite", // Nursery Subsection - nursery: 0, /* counts the number of children the nursery can support */ + nursery: 0, /* counts the number of children the nursery can support */ nurseryNannies: 0, /* counts the number of nannies the nursery can support */ nurseryBabies: 0, /* counts the number of children currently in the nursery */ - MatronInfluence: 0, /* check for whether the children are influenced by the Matron */ + MatronInfluence: 0, /* check for whether the children are influenced by the Matron */ nannyInfluence: 0, /* check for whether the children are influenced by the nannies */ nurseryDecoration: "standard", nurseryWeight: 0, @@ -790,25 +801,72 @@ App.Data.resetOnNGPlus = { sortNurseryList: "Unsorted", targetAgeNursery: 18, - // Farmyard Subsection %/ + // Farmyard Subsection farmyard: 0, farmyardShowgirls: [], /* array of farmhands putting on shows */ farmyardFarmers: [], /* array of farmhands farming */ farmMenials: 0, farmMenialsSpace: 0, farmyardDecoration: "standard", - farmyardUpgrade: { - pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0 + farmyardUpgrades: { + pump: 0, + fertilizer: 0, + hydroponics: 0, + machinery: 0, + seeds: 0, }, farmyardCrops: 0, - farmyardStable: 0, + farmyardStables: 0, farmyardKennels: 0, farmyardCages: 0, activeCanine: 0, activeHooved: 0, activeFeline: 0, animalsBought: { - canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0 + 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, }, canines: [], hooved: [], diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js index 90610f5a58d21fbc6250685ace9cd24b6822d33e..edbe529ea86d206fb4c53e2937d89c7f07980e3c 100644 --- a/js/003-data/miscData.js +++ b/js/003-data/miscData.js @@ -1544,7 +1544,7 @@ App.Data.misc = { /* stuff that reveals genitals */ humiliatingClothes: ["a bra", "a button-up shirt", "a chattel habit", "a fallen nuns habit", "a skimpy loincloth", "a sports bra", "a string bikini", "a striped bra", "a succubus outfit", "a sweater", "a t-shirt", "a tank-top", "a thong", "a tube top", "clubslut netting", "pasties", "restrictive latex", "shibari ropes", "slutty jewelry", "uncomfortable straps", "Western clothing"], - highHeels: ["boots", "extreme heels", "extreme platform heels", "heels", "platform heels", "pumps"], + highHeels: ["boots", "extreme heels", "extreme platform heels", "heels", "platform heels"], heightBoostingShoes: ["extreme heels", "extreme platform heels", "heels", "platform heels", "platform shoes", "pumps"], veryYoungCareers: ["a babysitter", "a beggar", "a beggar", "a bully hunter", "a bully", "a camp counselor", "a cheerleader", "a child actress", "a child prodigy", "a child prostitute", "a child prostitute", "a child soldier", "a child soldier", "a club manager", "a club recruiter", "a club treasurer", "a cum dump", "a dropout", "a dropout", "a drug mule", "a farmer's daughter", "a girl scout", "a girl scout", "a hall monitor", "a handmaiden", "a hospital volunteer", "a housesitter", "a juvenile delinquent", "a juvenile delinquent", "a latchkey kid", "a lemonade stand operator", "a marching band leader", "a meat toilet", "a military brat", "a model-UN star", "a model", "a noblewoman", "a pageant star", "a paper girl", "a part-time farm laborer", "a pick-pocket", "a refugee", "a refugee", "a refugee", "a school nurse's assistant", "a shrine maiden", "a street thug", "a street urchin", "a street urchin", "a street urchin", "a student council president", "a student from a boarding school", "a student from a private school", "a student from a public school", "a student from a public school", "a student from a public school", "a student from a public school", "a student from a public school", "a sweatshop worker", "a sweatshop worker", "a sweatshop worker", "a sweatshop worker", "a teacher's pet", "an apprentice", "an aspiring pop star", "an idol", "an orphan", "an orphan", "an orphan", "an orphan", "an orphan", "being homeschooled by her parents", "captain of the kendo club", "from a lower class family", "from a lower class family", "from a lower class family", "from a middle class family", "from a middle class family", "from an upper class family", "homeless", "homeless", "homeless"], diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js index ef65cc82ec9746c896fd5832379c0fe96928f40b..36a63d97ba43d0e04c20b3073a257e7b672fb972 100644 --- a/js/003-data/policiesData.js +++ b/js/003-data/policiesData.js @@ -319,6 +319,14 @@ App.Data.Policies.Selection = { requirements: function() { return (V.arcologies[0].FSEgyptianRevivalist === "unset"); }, } ], + "policies.bestialityOpeness": [ + { + title: "Bestiality Acceptance", + text: "you will use your personal influence to spur acceptance of bestiality.", + activatedText: "you are using your personal influence to spur the acceptance of bestiality.", + requirements: function() { return (V.seeBestiality === 1); }, + } + ] }, PopulationPolicies: { "policies.proRefugees": [ @@ -1712,7 +1720,7 @@ App.Data.Policies.Selection = { note: `Will help advance Edo Revivalism` } ], - "arcologies[0].FSEdoRevivalist >= 90": [ + "arcologies[0].FSEdoRevivalistLaw": [ { title: "Cultural Insularity", titleClass: "lime", @@ -1876,7 +1884,7 @@ App.Data.Policies.Selection = { requirements: function() { return (V.arcologies[0].FSRestartDecoration >= 100 && V.rep >= 5000); }, onImplementation: function() { repX(-4000, "policies"); - Engine.play("Breeder Proposal"); + SugarCube.Engine.play("Breeder Proposal"); }, hide: {ifActivated: 1}, // Repeal is not possible. note: `Will greatly damage your reputation for even proposing` diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js index 781a17b19982bf75c7c2b558769c65df06a4ac3c..b5d8e78164b5f2378e5cb699a66c5dbab78dfc3a 100644 --- a/js/003-data/slaveMods.js +++ b/js/003-data/slaveMods.js @@ -191,3 +191,208 @@ App.Medicine.Modification.Brands = { }, } }; + + +App.Medicine.Modification.Color = { + Primary: [ + {value: "auburn"}, + {value: "black"}, + {value: "blazing red"}, + {value: "blonde"}, + {value: "blue-violet"}, + {value: "blue"}, + {value: "brown"}, + {value: "burgundy"}, + {value: "chestnut"}, + {value: "chocolate brown"}, + {value: "copper"}, + {value: "dark blue"}, + {value: "dark brown"}, + {value: "dark orchid"}, + {value: "deep red"}, + {value: "ginger"}, + {value: "golden"}, + {value: "green-yellow"}, + {value: "green"}, + {value: "grey"}, + {value: "hazel"}, + {value: "jet black"}, + {value: "neon blue"}, + {value: "neon green"}, + {value: "neon pink"}, + {value: "pink"}, + {value: "platinum blonde"}, + {value: "purple"}, + {value: "red"}, + {value: "sea green"}, + {value: "silver"}, + {value: "strawberry-blonde"}, + {value: "white"}, + ], + Secondary: [ + { + title: "None", + value: "" + }, + { + title: "Black", + value: " with black highlights" + }, + { + title: "Blazing red", + value: " with blazing red highlights" + }, + { + title: "Blonde", + value: " with blonde highlights" + }, + { + title: "Grey", + value: " with grey highlights" + }, + { + title: "Neon blue", + value: " with neon blue highlights" + }, + { + title: "Neon green", + value: " with neon green highlights" + }, + { + title: "Neon pink", + value: " with neon pink highlights" + }, + { + title: "Rainbow", + value: " with rainbow highlights" + }, + { + title: "Silver", + value: " with silver highlights" + }, + { + title: "White", + value: " with white highlights" + }, + ] +}; + +App.Medicine.Modification.hairStyles = { + Normal: [ + { + title: "Afro", + value: "afro" + }, + { + title: "Braided", + value: "braided" + }, + { + title: "Cornrows", + value: "cornrows" + }, + { + title: "Curled", + value: "curled" + }, + { + title: "Dreadlocks", + value: "dreadlocks" + }, + { + title: "Eary", + value: "eary" + }, + { + title: "In a bun", + value: "bun" + }, + { + title: "In a messy bun", + value: "messy bun" + }, + { + title: "In a ponytail", + value: "ponytail" + }, + { + title: "In tails", + value: "tails" + }, + { + title: "Luxurious", + value: "luxurious" + }, + { + title: "Messy", + value: "messy" + }, + { + title: "Neat", + value: "neat" + }, + { + title: "Permed", + value: "permed" + }, + { + title: "Shaved sides", + value: "strip" + }, + { + title: "Up", + value: "up" + }, + ], + Cut: [ + { + title: "Shaved", + value: "shaved", + hLength: 0 + }, + { + title: "Trimmed short", + value: "Salon", + hLength: 10 + }, + { + title: "Buzzcut", + value: "buzzcut", + hLength: 1 + }, + ], + Length: [ + { + title: "Very short", + hLength: 5 + }, + { + title: "Short", + hLength: 10 + }, + { + title: "Shoulder length", + hLength: 30 + }, + { + title: "Long", + hLength: 60 + }, + { + title: "Very long", + hLength: 100 + }, + { + title: "Apply hair growth stimulating treatment", + hLength: 0, + requirements: function(slave) { return (slave.hLength === 1); } + }, + { + title: "Apply extensions", + onApplication: function(slave) { slave.hLength += 10; }, + requirements: function(slave) { return (!slave.hLength === 1 && slave.hLength < 150); } + }, + ] +}; + + diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index e5db8973851d24928b25034ddc4d665ec0ebb965..b6d2f7d04d96dad84685d95ef6a49eab2bf6a3bc 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -2934,10 +2934,13 @@ shoes: may accept strings, use at own risk "none" "heels" +"platform heels" "pumps" "extreme heels" +"extreme platform heels" "boots" "flats" +"platform shoes" vaginalAccessory: diff --git a/src/Mods/SecExp/js/secExp.js b/src/Mods/SecExp/js/secExp.js index ad1c54f0f63d5e5437efeb7c2cc63440a87d4aa0..a739c0e6192ea9c13dc460d49ffec937b713aa23 100644 --- a/src/Mods/SecExp/js/secExp.js +++ b/src/Mods/SecExp/js/secExp.js @@ -370,246 +370,7 @@ App.SecExp.Check = (function() { }; function general() { - if (jsDef(V.secExp)) { - if (V.secExpEnabled !== 1) { - V.secExpEnabled = V.secExp; - } - delete V.secExp; - } - if (typeof V.secExpEnabled !== "number") { - V.secExpEnabled = 0; - } - V.SecExp = V.SecExp || SecExpBase(); - V.SecExp.settings = V.SecExp.settings || {}; - delete V.SecExp.settings.show; - - delete V.SecExp.army; - - if (V.secExpEnabled > 0) { - Object.assign(V.secBots, { - active: V.secBots.active || V.arcologyUpgrade.drones > 0 ? 1 : 0, - ID: -1, - isDeployed: V.secBots.isDeployed || 0, - troops: Math.max(V.secBots.troops, V.arcologyUpgrade.drones > 0 ? 30 : 0), - maxTroops: Math.max(V.secBots.maxTroops, V.arcologyUpgrade.drones > 0 ? 30 : 0) - }); - - V.SecExp.core = V.SecExp.core || {}; - - V.SecExp.core.trade = V.SecExp.core.trade || 0; - if (passage() === "Acquisition" || V.SecExp.core.trade === 0) { - let init = jsRandom(20, 30); - if (V.terrain === "urban") { - init += jsRandom(10, 10); - } else if (V.terrain === "ravine") { - init -= jsRandom(5, 5); - } - if (["BlackHat", "capitalist", "celebrity", "wealth"].includes(V.PC.career)) { - init += jsRandom(5, 5); - } else if (["escort", "gang", "servant"].includes(V.PC.career)) { - init -= jsRandom(5, 5); - } - V.SecExp.core.trade = init; - } - if (jsDef(V.trade)) { - V.SecExp.core.trade = V.trade; - } - - V.SecExp.core.authority = V.SecExp.core.authority || 0; - if (jsDef(V.authority)) { - V.SecExp.core.authority = V.authority; - } - - V.SecExp.security = V.SecExp.security || {}; - V.SecExp.security.cap = V.SecExp.security.cap || 100; - if (jsDef(V.security)) { - V.SecExp.security.cap = V.security; - } - V.SecExp.core.crimeLow = V.SecExp.core.crimeLow || 30; - if (jsDef(V.crime)) { - V.SecExp.core.crimeLow = V.crime; - } - - V.SecExp.settings.difficulty = V.SecExp.settings.difficulty || 1; - if (jsDef(V.difficulty)) { - V.SecExp.settings.difficulty = V.difficulty; - } - - V.SecExp.settings.battle = V.SecExp.settings.battle || {}; - if (!jsDef(V.SecExp.settings.battle.enabled)) { - V.SecExp.settings.battle.enabled = 1; - } - if (jsDef(V.battlesEnabled)) { - V.SecExp.settings.battle.enabled = V.battlesEnabled; - } - delete V.SecExp.battle; - - V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {}; - V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1; - if (jsDef(V.battleFrequency)) { - V.SecExp.settings.battle.frequency = V.battleFrequency; - } - V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0; - if (jsDef(V.forceBattle)) { - V.SecExp.settings.battle.force = V.forceBattle; - } - - if (jsDef(V.readiness)) { - if(V.readiness === 10) { - V.sectionInFirebase = 1; - } - } - - V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0; - - if (!jsDef(V.SecExp.settings.battle.allowSlavePrestige)) { - V.SecExp.settings.battle.allowSlavePrestige = 1; - } - if (jsDef(V.allowPrestigeFromBattles)) { - V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles; - } - - V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 0; - if (jsDef(V.majorBattlesEnabled)) { - V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled; - } - - if (!jsDef(V.SecExp.settings.battle.major.gameOver)) { - V.SecExp.settings.battle.major.gameOver = 1; - } - if (jsDef(V.majorBattleGameOver)) { - V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver; - } - V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0; - if (jsDef(V.forceMajorBattle)) { - V.SecExp.settings.battle.major.force = V.forceMajorBattle; - } - V.SecExp.settings.battle.major.mult = V.SecExp.settings.battle.major.mult || 1; - - V.SecExp.settings.rebellion = V.SecExp.settings.rebellion || {}; - if (!jsDef(V.SecExp.settings.rebellion.enabled)) { - V.SecExp.settings.rebellion.enabled = 1; - } - if (jsDef(V.rebellionsEnabled)) { - V.SecExp.settings.rebellion.enabled = V.rebellionsEnabled; - } - - V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0; - if (jsDef(V.forceRebellion)) { - V.SecExp.settings.rebellion.force = V.forceRebellion; - } - if (!jsDef(V.SecExp.settings.rebellion.gameOver)) { - V.SecExp.settings.rebellion.gameOver = 1; - } - if (jsDef(V.rebellionGameOver)) { - V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver; - } - - V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1; - if (jsDef(V.rebellionSpeed)) { - V.SecExp.settings.rebellion.speed = V.rebellionSpeed; - } - - if (V.SecExp.settings.battle.enabled + V.SecExp.settings.rebellion.enabled > 0) { - V.SecExp.settings.showStats = V.SecExp.settings.showStats || 0; - if (jsDef(V.showBattleStatistics)) { - V.SecExp.settings.showStats = V.showBattleStatistics; - } - } - - V.SecExp.buildings = V.SecExp.buildings || {}; - V.SecExp.buildings.propHub = V.SecExp.buildings.propHub || {}; - V.SecExp.buildings.propHub.active = V.SecExp.buildings.propHub.active || 0; - if (V.SecExp.buildings.pr === null) { - delete V.SecExp.buildings.pr; - } - if (jsDef(V.SecExp.buildings.pr)) { - V.SecExp.buildings.propHub = V.SecExp.buildings.pr; - delete V.SecExp.buildings.pr; - } - if (jsDef(V.propHub)) { - V.SecExp.buildings.propHub.active = V.propHub; - } - - if (V.SecExp.buildings.propHub.active > 0) { - V.SecExp.buildings.propHub.recuriterOffice = V.SecExp.buildings.propHub.recuriterOffice || 0; - V.SecExp.buildings.propHub.campaign = V.SecExp.buildings.propHub.campaign || 0; - if (jsDef(V.propCampaign)) { - V.SecExp.buildings.propHub.campaign = V.propCampaign; - } - - V.SecExp.buildings.propHub.miniTruth = V.SecExp.buildings.propHub.miniTruth || 0; - if (jsDef(V.miniTruth)) { - V.SecExp.buildings.propHub.miniTruth = V.miniTruth; - } - - V.SecExp.buildings.propHub.secretService = V.SecExp.buildings.propHub.secretService || 0; - if (jsDef(V.secretService)) { - V.SecExp.buildings.propHub.secretService = V.secretService; - } - if (jsDef(V.SecExp.buildings.propHub.SS)) { - V.SecExp.buildings.propHub.secretService = V.SecExp.buildings.propHub.SS; - delete V.SecExp.buildings.propHub.SS; - } - - if (V.SecExp.buildings.propHub.campaign >= 1) { - V.SecExp.buildings.propHub.focus = V.SecExp.buildings.propHub.focus || "social engineering"; - if (jsDef(V.propFocus) && V.propFocus !== "none") { - V.SecExp.buildings.propHub.focus = V.propFocus; - } - } - - if (jsDef(V.RecuriterOffice)) { - V.recuriterOffice = V.RecuriterOffice; - } - const vars = ['recuriterOffice', 'fakeNews', 'controlLeaks', 'marketInfiltration', 'blackOps']; - for(let i = 0; i < vars.length; i++) { - if (jsDef(V[vars[i]]) && V[vars[i]] > 0) { - V.SecExp.buildings.propHub[vars[i]] = V[vars[i]]; - delete V[vars[i]]; - } else { - V.SecExp.buildings.propHub[vars[i]] = V.SecExp.buildings.propHub[vars[i]] || 0; - } - } - } - - V.SecExp.buildings.barracks = V.SecExp.buildings.barracks || {}; - V.SecExp.buildings.barracks.active = V.SecExp.buildings.barracks.active || 0; - if (jsDef(V.secBarracks)) { - V.SecExp.buildings.barracks.active = V.secBarracks; - } - - if (V.SecExp.buildings.barracks.active > 0) { - V.SecExp.buildings.barracks.upgrades = V.SecExp.buildings.barracks.upgrades || {}; - V.SecExp.buildings.barracks.upgrades.size = V.SecExp.buildings.barracks.upgrades.size || 0; - V.SecExp.buildings.barracks.upgrades.luxury = V.SecExp.buildings.barracks.upgrades.luxury || 0; - V.SecExp.buildings.barracks.upgrades.training = V.SecExp.buildings.barracks.upgrades.training || 0; - V.SecExp.buildings.barracks.upgrades.loyaltyMod = V.SecExp.buildings.barracks.upgrades.loyaltyMod || 0; - if (jsDef(V.secBarracksUpgrades)) { - V.SecExp.buildings.barracks.upgrades = V.secBarracksUpgrades; - } - } - - V.SecExp.proclamation = V.SecExp.proclamation || {}; - V.SecExp.proclamation.cooldown = V.SecExp.proclamation.cooldown || 0; - if (jsDef(V.proclamationsCooldown)) { - V.SecExp.proclamation.cooldown = V.proclamationsCooldown; - } - V.SecExp.proclamation.currency = V.SecExp.proclamation.currency || ""; - if (jsDef(V.proclamationCurrency)) { - V.SecExp.proclamation.currency = V.proclamationCurrency; - } - V.SecExp.proclamation.type = V.SecExp.proclamation.type || "crime"; - if (jsDef(V.proclamationType)) { - if (V.proclamationType !== "none") { - V.SecExp.proclamation.type = V.proclamationType; - } - } - } - - if (jsDef(V.SecExp.core)) { - delete V.SecExp.core.crimeCap; - } + App.SecExp.generalBC(); } // Closes general check function. function secRestPoint() { diff --git a/src/Mods/SecExp/js/secExpBC.js b/src/Mods/SecExp/js/secExpBC.js new file mode 100644 index 0000000000000000000000000000000000000000..efbc3f89b41104e62e9f9cb74b4c3a268f8dcdf7 --- /dev/null +++ b/src/Mods/SecExp/js/secExpBC.js @@ -0,0 +1,243 @@ +// @ts-nocheck +App.SecExp.generalBC = function (){ + if (jsDef(V.secExp)) { + if (V.secExpEnabled !== 1) { + V.secExpEnabled = V.secExp; + } + delete V.secExp; + } + if (typeof V.secExpEnabled !== "number") { + V.secExpEnabled = 0; + } + V.SecExp = V.SecExp || SecExpBase(); + V.SecExp.settings = V.SecExp.settings || {}; + delete V.SecExp.settings.show; + + delete V.SecExp.army; + + if (V.secExpEnabled > 0) { + Object.assign(V.secBots, { + active: V.secBots.active || V.arcologyUpgrade.drones > 0 ? 1 : 0, + ID: -1, + isDeployed: V.secBots.isDeployed || 0, + troops: Math.max(V.secBots.troops, V.arcologyUpgrade.drones > 0 ? 30 : 0), + maxTroops: Math.max(V.secBots.maxTroops, V.arcologyUpgrade.drones > 0 ? 30 : 0) + }); + + V.SecExp.core = V.SecExp.core || {}; + + V.SecExp.core.trade = V.SecExp.core.trade || 0; + if (passage() === "Acquisition" || V.SecExp.core.trade === 0) { + let init = jsRandom(20, 30); + if (V.terrain === "urban") { + init += jsRandom(10, 10); + } else if (V.terrain === "ravine") { + init -= jsRandom(5, 5); + } + if (["BlackHat", "capitalist", "celebrity", "wealth"].includes(V.PC.career)) { + init += jsRandom(5, 5); + } else if (["escort", "gang", "servant"].includes(V.PC.career)) { + init -= jsRandom(5, 5); + } + V.SecExp.core.trade = init; + } + if (jsDef(V.trade)) { + V.SecExp.core.trade = V.trade; + } + + V.SecExp.core.authority = V.SecExp.core.authority || 0; + if (jsDef(V.authority)) { + V.SecExp.core.authority = V.authority; + } + + V.SecExp.security = V.SecExp.security || {}; + V.SecExp.security.cap = V.SecExp.security.cap || 100; + if (jsDef(V.security)) { + V.SecExp.security.cap = V.security; + } + V.SecExp.core.crimeLow = V.SecExp.core.crimeLow || 30; + if (jsDef(V.crime)) { + V.SecExp.core.crimeLow = V.crime; + } + + V.SecExp.settings.difficulty = V.SecExp.settings.difficulty || 1; + if (jsDef(V.difficulty)) { + V.SecExp.settings.difficulty = V.difficulty; + } + + V.SecExp.settings.battle = V.SecExp.settings.battle || {}; + if (!jsDef(V.SecExp.settings.battle.enabled)) { + V.SecExp.settings.battle.enabled = 1; + } + if (jsDef(V.battlesEnabled)) { + V.SecExp.settings.battle.enabled = V.battlesEnabled; + } + delete V.SecExp.battle; + + V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {}; + V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1; + if (jsDef(V.battleFrequency)) { + V.SecExp.settings.battle.frequency = V.battleFrequency; + } + V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0; + if (jsDef(V.forceBattle)) { + V.SecExp.settings.battle.force = V.forceBattle; + } + + if (jsDef(V.readiness)) { + if(V.readiness === 10) { + V.sectionInFirebase = 1; + } + } + + V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0; + + if (!jsDef(V.SecExp.settings.battle.allowSlavePrestige)) { + V.SecExp.settings.battle.allowSlavePrestige = 1; + } + if (jsDef(V.allowPrestigeFromBattles)) { + V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles; + } + + V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 0; + if (jsDef(V.majorBattlesEnabled)) { + V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled; + } + + if (!jsDef(V.SecExp.settings.battle.major.gameOver)) { + V.SecExp.settings.battle.major.gameOver = 1; + } + if (jsDef(V.majorBattleGameOver)) { + V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver; + } + V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0; + if (jsDef(V.forceMajorBattle)) { + V.SecExp.settings.battle.major.force = V.forceMajorBattle; + } + V.SecExp.settings.battle.major.mult = V.SecExp.settings.battle.major.mult || 1; + + V.SecExp.settings.rebellion = V.SecExp.settings.rebellion || {}; + if (!jsDef(V.SecExp.settings.rebellion.enabled)) { + V.SecExp.settings.rebellion.enabled = 1; + } + if (jsDef(V.rebellionsEnabled)) { + V.SecExp.settings.rebellion.enabled = V.rebellionsEnabled; + } + + V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0; + if (jsDef(V.forceRebellion)) { + V.SecExp.settings.rebellion.force = V.forceRebellion; + } + if (!jsDef(V.SecExp.settings.rebellion.gameOver)) { + V.SecExp.settings.rebellion.gameOver = 1; + } + if (jsDef(V.rebellionGameOver)) { + V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver; + } + + V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1; + if (jsDef(V.rebellionSpeed)) { + V.SecExp.settings.rebellion.speed = V.rebellionSpeed; + } + + if (V.SecExp.settings.battle.enabled + V.SecExp.settings.rebellion.enabled > 0) { + V.SecExp.settings.showStats = V.SecExp.settings.showStats || 0; + if (jsDef(V.showBattleStatistics)) { + V.SecExp.settings.showStats = V.showBattleStatistics; + } + } + + V.SecExp.buildings = V.SecExp.buildings || {}; + V.SecExp.buildings.propHub = V.SecExp.buildings.propHub || {}; + V.SecExp.buildings.propHub.active = V.SecExp.buildings.propHub.active || 0; + if (V.SecExp.buildings.pr === null) { + delete V.SecExp.buildings.pr; + } + if (jsDef(V.SecExp.buildings.pr)) { + V.SecExp.buildings.propHub = V.SecExp.buildings.pr; + delete V.SecExp.buildings.pr; + } + if (jsDef(V.propHub)) { + V.SecExp.buildings.propHub.active = V.propHub; + } + + if (V.SecExp.buildings.propHub.active > 0) { + V.SecExp.buildings.propHub.recuriterOffice = V.SecExp.buildings.propHub.recuriterOffice || 0; + V.SecExp.buildings.propHub.campaign = V.SecExp.buildings.propHub.campaign || 0; + if (jsDef(V.propCampaign)) { + V.SecExp.buildings.propHub.campaign = V.propCampaign; + } + + V.SecExp.buildings.propHub.miniTruth = V.SecExp.buildings.propHub.miniTruth || 0; + if (jsDef(V.miniTruth)) { + V.SecExp.buildings.propHub.miniTruth = V.miniTruth; + } + + V.SecExp.buildings.propHub.secretService = V.SecExp.buildings.propHub.secretService || 0; + if (jsDef(V.secretService)) { + V.SecExp.buildings.propHub.secretService = V.secretService; + } + if (jsDef(V.SecExp.buildings.propHub.SS)) { + V.SecExp.buildings.propHub.secretService = V.SecExp.buildings.propHub.SS; + delete V.SecExp.buildings.propHub.SS; + } + + if (V.SecExp.buildings.propHub.campaign >= 1) { + V.SecExp.buildings.propHub.focus = V.SecExp.buildings.propHub.focus || "social engineering"; + if (jsDef(V.propFocus) && V.propFocus !== "none") { + V.SecExp.buildings.propHub.focus = V.propFocus; + } + } + + if (jsDef(V.RecuriterOffice)) { + V.recuriterOffice = V.RecuriterOffice; + } + const vars = ['recuriterOffice', 'fakeNews', 'controlLeaks', 'marketInfiltration', 'blackOps']; + for(let i = 0; i < vars.length; i++) { + if (jsDef(V[vars[i]]) && V[vars[i]] > 0) { + V.SecExp.buildings.propHub[vars[i]] = V[vars[i]]; + delete V[vars[i]]; + } else { + V.SecExp.buildings.propHub[vars[i]] = V.SecExp.buildings.propHub[vars[i]] || 0; + } + } + } + + V.SecExp.buildings.barracks = V.SecExp.buildings.barracks || {}; + V.SecExp.buildings.barracks.active = V.SecExp.buildings.barracks.active || 0; + if (jsDef(V.secBarracks)) { + V.SecExp.buildings.barracks.active = V.secBarracks; + } + + if (V.SecExp.buildings.barracks.active > 0) { + V.SecExp.buildings.barracks.upgrades = V.SecExp.buildings.barracks.upgrades || {}; + V.SecExp.buildings.barracks.upgrades.size = V.SecExp.buildings.barracks.upgrades.size || 0; + V.SecExp.buildings.barracks.upgrades.luxury = V.SecExp.buildings.barracks.upgrades.luxury || 0; + V.SecExp.buildings.barracks.upgrades.training = V.SecExp.buildings.barracks.upgrades.training || 0; + V.SecExp.buildings.barracks.upgrades.loyaltyMod = V.SecExp.buildings.barracks.upgrades.loyaltyMod || 0; + if (jsDef(V.secBarracksUpgrades)) { + V.SecExp.buildings.barracks.upgrades = V.secBarracksUpgrades; + } + } + + V.SecExp.proclamation = V.SecExp.proclamation || {}; + V.SecExp.proclamation.cooldown = V.SecExp.proclamation.cooldown || 0; + if (jsDef(V.proclamationsCooldown)) { + V.SecExp.proclamation.cooldown = V.proclamationsCooldown; + } + V.SecExp.proclamation.currency = V.SecExp.proclamation.currency || ""; + if (jsDef(V.proclamationCurrency)) { + V.SecExp.proclamation.currency = V.proclamationCurrency; + } + V.SecExp.proclamation.type = V.SecExp.proclamation.type || "crime"; + if (jsDef(V.proclamationType)) { + if (V.proclamationType !== "none") { + V.SecExp.proclamation.type = V.proclamationType; + } + } + } + + if (jsDef(V.SecExp.core)) { + delete V.SecExp.core.crimeCap; + } +}; diff --git a/src/Mods/SpecialForce/SpecialForce.js b/src/Mods/SpecialForce/SpecialForce.js index dc53b2c38a1a24b3924d8d15b79f41dc01696d13..88ca2598303e22be61244f454caadede97a07118 100644 --- a/src/Mods/SpecialForce/SpecialForce.js +++ b/src/Mods/SpecialForce/SpecialForce.js @@ -215,359 +215,6 @@ App.SF.Init = function() { // V.arcologies[0].SFRaid = 1; V.arcologies[0].SFRaidTarget = -1; }; -/* no-usedOnce */ -App.SF.BC = function() { - function InitClean() { - delete V.SFMODToggle; - delete V.securityForceActive; - delete V.securityForceCreate; - delete V.securityForceEventSeen; - } - - function MainClean() { - delete V.securityForceActive; - delete V.securityForceRecruit; - delete V.securityForceTrade; - delete V.securityForceBooty; - delete V.securityForceIncome; - delete V.securityForceMissionEfficiency; - delete V.securityForceProfitable; - delete V.TierTwoUnlock; - delete V.securityForceDepravity; - delete V.SFAO; - delete V.securityForceUpgradeTokenReset; - delete V.securityForceUpgradeToken; - delete V.securityForceGiftToken; - delete V.securityForceRulesOfEngagement; - delete V.securityForceFocus; - delete V.securityForceAccountability; - delete V.securityForceName; - delete V.SubsidyActive; - delete V.securityForceSubsidyActive; - } - - function ColonelClean() { - delete V.ColonelCore; - delete V.securityForceColonelToken; - delete V.securityForceColonelSexed; - delete V.ColonelRelationship; - delete V.securityForceSexedColonelToken; - } - - function TradeShowClean() { - delete V.OverallTradeShowAttendance; - delete V.CurrentTradeShowAttendance; - delete V.TradeShowIncome; - delete V.TotalTradeShowIncome; - delete V.TradeShowHelots; - delete V.TotalTradeShowHelots; - } - - function UnitsClean() { - delete V.securityForceInfantryPower; - delete V.securityForceArcologyUpgrades; - delete V.securityForceVehiclePower; - delete V.securityForceDronePower; - delete V.securityForceStimulantPower; - delete V.securityForceHeavyBattleTank; - delete V.securityForceAircraftPower; - delete V.securityForceSpacePlanePower; - delete V.securityForceAC130; - delete V.securityForceSatellitePower; - delete V.securityForceGiantRobot; - delete V.securityForceMissileSilo; - delete V.securityForceAircraftCarrier; - delete V.securityForceSubmarine; - delete V.securityForceHeavyAmphibiousTransport; - delete V.securityForcePersonnel; - delete V.securityForceFortressZeppelin; - delete V.securityForceHeavyTransport; - } - - if (typeof V.SF !== "object") { - if (V.securityForceEventSeen < 1) { - V.securityForceActive = -1; - } else { - V.securityForceActive = 2; - } - V.SF = {Toggle: V.SFMODToggle, Active: V.securityForceActive}; - InitClean(); - if (V.securityForceName === undefined) { - V.securityForceName = "the special force"; - } - if (V.SF.Active >= 1) { - Object.assign(V.SF, { - Depravity: V.securityForceDepravity, - Upgrade: V.securityForceUpgradeToken, - Gift: V.securityForceGiftToken, - UC: {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}, - ROE: V.securityForceRulesOfEngagement, - Target: V.securityForceFocus, - Regs: V.securityForceAccountability, - Lower: V.securityForceName, - }); - MainClean(); - - if (V.ColonelCore === undefined) { - V.ColonelCore = ""; - } - if (V.ColonelDiscussion === undefined) { - V.ColonelDiscussion = 0; - } - if (V.ColonelSexed === undefined) { - V.ColonelSexed = 0; - } - V.SF.Colonel = { - Core: V.ColonelCore, - Talk: V.securityForceColonelToken, - Fun: V.securityForceColonelSexed, - Status: V.ColonelRelationship - }; - ColonelClean(); - - if (V.TradeShowIncome === undefined) { - V.TradeShowIncome = 0; - } - if (V.TotalTradeShowIncome === undefined) { - V.TotalTradeShowIncome = 0; - } - if (V.TradeShowHelots === undefined) { - V.TradeShowHelots = 0; - } - if (V.TotalTradeShowHelots === undefined) { - V.TotalTradeShowHelots = 0; - } - V.SF.MercCon = { - History: V.OverallTradeShowAttendance, - CanAttend: V.CurrentTradeShowAttendance, - Income: V.TradeShowIncome, - Revenue: V.TotalTradeShowIncome, - Menials: V.TradeShowHelots, - TotalMenials: V.TotalTradeShowHelots, - Mercs: 0, - TotalMercs: 0 - }; - TradeShowClean(); - if (V.SF.MercCon.History > 0) { - V.SF.MercCon.CanAttend = 1; - } - - if (V.securityForceHeavyBattleTank === undefined) { - V.securityForceHeavyBattleTank = 0; - } - if (V.securityForceSpacePlanePower === undefined) { - V.securityForceSpacePlanePower = 0; - } - if (V.securityForceAC130 === undefined) { - V.securityForceAC130 = 0; - } - if (V.securityForceSatellitePower === undefined) { - V.securityForceSatellitePower = 0; - } - if (V.securityForceGiantRobot === undefined) { - V.securityForceGiantRobot = 0; - } - if (V.securityForceMissileSilo === undefined) { - V.securityForceMissileSilo = 0; - } - if (V.securityForceAircraftCarrier === undefined) { - V.securityForceAircraftCarrier = 0; - } - if (V.securityForceSubmarine === undefined) { - V.securityForceSubmarine = 0; - } - if (V.securityForceHeavyAmphibiousTransport === undefined) { - V.securityForceHeavyAmphibiousTransport = 0; - } - - V.SF.ArmySize = V.securityForcePersonnel; - - V.SF.SatLaunched = 0; - - V.SF.Squad = { - Armoury: V.securityForceInfantryPower, - Firebase: V.securityForceArcologyUpgrades, - AV: V.securityForceVehiclePower, - TV: V.securityForceVehiclePower, - Drones: V.securityForceDronePower, - Drugs: V.securityForceStimulantPower, - PGT: V.securityForceHeavyBattleTank, - AA: V.securityForceAircraftPower, - TA: V.securityForceAircraftPower, - SpacePlane: V.securityForceSpacePlanePower, - GunS: V.securityForceAC130, - Satellite: V.securityForceSatellitePower, - GiantRobot: V.securityForceGiantRobot, - MissileSilo: V.securityForceMissileSilo, - AircraftCarrier: V.securityForceAircraftCarrier, - Sub: V.securityForceSubmarine, - HAT: V.securityForceHeavyAmphibiousTransport - }; - UnitsClean(); - } else { - App.SF.Init(); - } - } else if (typeof V.SF === "object") { - V.SF.FS = V.SF.FS || {}; - V.SF.FS.Tension = V.SF.FS.Tension || -1; - - if (V.SF.Toggle && V.SF.Active >= 1) { - V.SF.UC = V.SF.UC || {}; - V.SF.Depravity = V.SF.Depravity || 0; - V.SF.Upgrade = V.SF.Upgrade || 0; - V.SF.Gift = V.SF.Gift || 0; - V.SF.UC.Assign = V.SF.UC.Assign || 0; - V.SF.UC.Lock = V.SF.UC.Lock || 0; - V.SF.ROE = V.SF.ROE || "hold"; - V.SF.Target = V.SF.Target || "recruit"; - V.SF.Regs = V.SF.Regs || "strict"; - V.SF.Lower = V.SF.Lower || "the special force"; - - V.SF.ArmySize = V.SF.ArmySize || 40; - - V.SF.Squad = V.SF.Squad || {}; - for (let i = 0; i < App.SF.upgrades.list('all').length; i++) { - V.SF.Squad[App.SF.upgrades.list('all')[i]] = V.SF.Squad[App.SF.upgrades.list('all')[i]] || 0; - } - - V.SF.SatLaunched = V.SF.SatLaunched || 0; - - V.SF.Colonel = V.SF.Colonel || {}; - V.SF.Colonel.Core = V.SF.Colonel.Core || ""; - V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; - V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; - V.SF.Colonel.Status = V.SF.Colonel.Status || 0; - - V.SF.MercCon = V.SF.MercCon || {}; - V.SF.MercCon.History = V.SF.MercCon.History || 0; - V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || 0; - if (V.SF.MercCon.History >= 1) { - V.SF.MercCon.CanAttend = -1; - } - V.SF.MercCon.Income = V.SF.MercCon.Income || 0; - V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; - V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; - V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; - V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; - - if (typeof V.SF.Squad.Satellite === "object") { - if (V.SF.Squad.Satellite.InOrbit > 0) { - V.SF.SatLaunched = V.SF.Squad.Satellite.InOrbit; delete V.SF.Squad.Satellite.InOrbit; - } - V.SF.Squad.Satellite = V.SF.Squad.Satellite.lv; - } - - delete V.SF.FS.upgrade; delete V.SF.UC.num; - - if (jsDef(V.choice)) { - V.SF.Gift = V.choice; - } - - if (V.Tour !== undefined) { - V.SF.tour = V.Tour || 0; - } - - if (V.SF.Squad.Troops) { - V.SF.ArmySize = V.SF.Squad.Troops; - delete V.SF.Squad.Troops; - } - - if (V.SF.MercCon !== undefined) { - if( V.SF.MercCon.View !== undefined) { - delete V.SF.MercCon.View; - } - if (V.SF.MercCon.Helots !== undefined) { - V.SF.MercCon.Menials = V.SF.MercCon.Helots; - delete V.SF.MercCon.Helots; - } - if (V.SF.MercCon.TotalHelots !== undefined) { - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; - delete V.SF.MercCon.TotalHelots; - } - } - - if (V.SF.SpecOps !== undefined && V.SF.SpecOpsLock !== undefined) { - V.SF.UC = {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}; - } - - if (V.SFUC !== undefined) { - V.SF.UC.num = V.SFUC || 0; - } - - if (V.SpecOpsLock !== undefined) { - V.SF.SpecOpsLock = V.SpecOpsLock; - } - - if (V.SF.U !== undefined) { - V.SF.Upgrade = V.SF.U || 0; - } - - if (V.SF.WG !== undefined) { - V.SF.Gift = V.SF.WG || 0; - } - - if (V.SF.Depravity < 0) { - V.SF.Depravity = 0; - } - - if (V.SFUnit !== undefined) { - if (V.SFUnit.AT !== undefined) { - V.SFUnitTA = 0; - } - if (V.SFTradeShow !== undefined) { - V.SF.MercCon = V.SFTradeShow; - } - delete V.SFTradeShow; - if (V.SFColonel !== undefined) { - V.SF.Colonel = V.SFColonel; - } - - if (V.SF.Squad !== undefined && V.SF.Squad.Satellite !== undefined && V.SatLaunched !== undefined) { - V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: V.SatLaunched}; - V.SF.Squad.Satellite = V.SF.Squad.Sat; - delete V.SF.Squad.Sat; - delete V.SatLaunched; - } - } - } // closes: V.SF.Toggle && V.SF.Active >= 1 - } - - delete V.Tour; delete V.SFColonel; delete V.SFUnit; - delete V.SF.tour; delete V.SF.Caps; delete V.SF.Size; delete V.choice; - delete V.SF.Units; delete V.SpecOpsLock; delete V.SF.U; delete V.SF.WG; - delete V.SF.Subsidy; delete V.SF.SpecOps; delete V.SF.SpecOpsLock; delete V.SFUC; - - if (V.SF.BadOutcome !== undefined) { - delete V.SF.BadOutcome; - } - if (V.arcologies[0].SFRaid !== undefined) { - delete V.arcologies[0].SFRaid; - } - if (V.arcologies[0].SFRaidTarget !== undefined) { - delete V.arcologies[0].SFRaidTarget; - } - if (V.SF.Facility !== undefined) { - delete V.SF.Facility; - } - - if (V.SF.MWU !== undefined) { - delete V.SF.MWU; - } - if (V.SF.Bonus !== undefined) { - delete V.SF.Bonus; - } - - InitClean(); - MainClean(); - ColonelClean(); - TradeShowClean(); - UnitsClean(); - - if (V.week < 72 && V.SF.Active !== -1) { V.SF.Active = -1; } -}; -/* usedOnce */ - App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100) { const Revivalisms = ['Arabian_Revivalism', 'Aztec_Revivalism', 'Chinese_Revivalism', 'Edo_Revivalism', 'Egyptian_Revivalism', 'Multiculturalism', 'Roman_Revivalism']; let FS_OPTIONS = ['Asset_Expansionism', 'Body_Purism', 'Chattel_Religionism', 'Degradationism', 'Eugenics', 'Gender_radicalism', 'Gender_traditionalism', 'Hedonistic_Decadence', 'Maturity_Preferentialism', 'Paternalism', 'Physical_Idealism', 'Repopulation', 'Slave_Pastoralism', 'Slimness_Enthusiasm', 'Transformation_Fetishism', 'Youth_Preferentialism']; diff --git a/src/Mods/SpecialForce/SpecialForceBC.js b/src/Mods/SpecialForce/SpecialForceBC.js new file mode 100644 index 0000000000000000000000000000000000000000..7b848c1b539e874ff337b2cf52eee7749d799c8d --- /dev/null +++ b/src/Mods/SpecialForce/SpecialForceBC.js @@ -0,0 +1,353 @@ +// @ts-nocheck +/* no-usedOnce */ +App.SF.BC = function() { + function InitClean() { + delete V.SFMODToggle; + delete V.securityForceActive; + delete V.securityForceCreate; + delete V.securityForceEventSeen; + } + + function MainClean() { + delete V.securityForceActive; + delete V.securityForceRecruit; + delete V.securityForceTrade; + delete V.securityForceBooty; + delete V.securityForceIncome; + delete V.securityForceMissionEfficiency; + delete V.securityForceProfitable; + delete V.TierTwoUnlock; + delete V.securityForceDepravity; + delete V.SFAO; + delete V.securityForceUpgradeTokenReset; + delete V.securityForceUpgradeToken; + delete V.securityForceGiftToken; + delete V.securityForceRulesOfEngagement; + delete V.securityForceFocus; + delete V.securityForceAccountability; + delete V.securityForceName; + delete V.SubsidyActive; + delete V.securityForceSubsidyActive; + } + + function ColonelClean() { + delete V.ColonelCore; + delete V.securityForceColonelToken; + delete V.securityForceColonelSexed; + delete V.ColonelRelationship; + delete V.securityForceSexedColonelToken; + } + + function TradeShowClean() { + delete V.OverallTradeShowAttendance; + delete V.CurrentTradeShowAttendance; + delete V.TradeShowIncome; + delete V.TotalTradeShowIncome; + delete V.TradeShowHelots; + delete V.TotalTradeShowHelots; + } + + function UnitsClean() { + delete V.securityForceInfantryPower; + delete V.securityForceArcologyUpgrades; + delete V.securityForceVehiclePower; + delete V.securityForceDronePower; + delete V.securityForceStimulantPower; + delete V.securityForceHeavyBattleTank; + delete V.securityForceAircraftPower; + delete V.securityForceSpacePlanePower; + delete V.securityForceAC130; + delete V.securityForceSatellitePower; + delete V.securityForceGiantRobot; + delete V.securityForceMissileSilo; + delete V.securityForceAircraftCarrier; + delete V.securityForceSubmarine; + delete V.securityForceHeavyAmphibiousTransport; + delete V.securityForcePersonnel; + delete V.securityForceFortressZeppelin; + delete V.securityForceHeavyTransport; + } + + if (typeof V.SF !== "object") { + if (V.securityForceEventSeen < 1) { + V.securityForceActive = -1; + } else { + V.securityForceActive = 2; + } + V.SF = {Toggle: V.SFMODToggle, Active: V.securityForceActive}; + InitClean(); + if (V.securityForceName === undefined) { + V.securityForceName = "the special force"; + } + if (V.SF.Active >= 1) { + Object.assign(V.SF, { + Depravity: V.securityForceDepravity, + Upgrade: V.securityForceUpgradeToken, + Gift: V.securityForceGiftToken, + UC: {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}, + ROE: V.securityForceRulesOfEngagement, + Target: V.securityForceFocus, + Regs: V.securityForceAccountability, + Lower: V.securityForceName, + }); + MainClean(); + + if (V.ColonelCore === undefined) { + V.ColonelCore = ""; + } + if (V.ColonelDiscussion === undefined) { + V.ColonelDiscussion = 0; + } + if (V.ColonelSexed === undefined) { + V.ColonelSexed = 0; + } + V.SF.Colonel = { + Core: V.ColonelCore, + Talk: V.securityForceColonelToken, + Fun: V.securityForceColonelSexed, + Status: V.ColonelRelationship + }; + ColonelClean(); + + if (V.TradeShowIncome === undefined) { + V.TradeShowIncome = 0; + } + if (V.TotalTradeShowIncome === undefined) { + V.TotalTradeShowIncome = 0; + } + if (V.TradeShowHelots === undefined) { + V.TradeShowHelots = 0; + } + if (V.TotalTradeShowHelots === undefined) { + V.TotalTradeShowHelots = 0; + } + V.SF.MercCon = { + History: V.OverallTradeShowAttendance, + CanAttend: V.CurrentTradeShowAttendance, + Income: V.TradeShowIncome, + Revenue: V.TotalTradeShowIncome, + Menials: V.TradeShowHelots, + TotalMenials: V.TotalTradeShowHelots, + Mercs: 0, + TotalMercs: 0 + }; + TradeShowClean(); + if (V.SF.MercCon.History > 0) { + V.SF.MercCon.CanAttend = 1; + } + + if (V.securityForceHeavyBattleTank === undefined) { + V.securityForceHeavyBattleTank = 0; + } + if (V.securityForceSpacePlanePower === undefined) { + V.securityForceSpacePlanePower = 0; + } + if (V.securityForceAC130 === undefined) { + V.securityForceAC130 = 0; + } + if (V.securityForceSatellitePower === undefined) { + V.securityForceSatellitePower = 0; + } + if (V.securityForceGiantRobot === undefined) { + V.securityForceGiantRobot = 0; + } + if (V.securityForceMissileSilo === undefined) { + V.securityForceMissileSilo = 0; + } + if (V.securityForceAircraftCarrier === undefined) { + V.securityForceAircraftCarrier = 0; + } + if (V.securityForceSubmarine === undefined) { + V.securityForceSubmarine = 0; + } + if (V.securityForceHeavyAmphibiousTransport === undefined) { + V.securityForceHeavyAmphibiousTransport = 0; + } + + V.SF.ArmySize = V.securityForcePersonnel; + + V.SF.SatLaunched = 0; + + V.SF.Squad = { + Armoury: V.securityForceInfantryPower, + Firebase: V.securityForceArcologyUpgrades, + AV: V.securityForceVehiclePower, + TV: V.securityForceVehiclePower, + Drones: V.securityForceDronePower, + Drugs: V.securityForceStimulantPower, + PGT: V.securityForceHeavyBattleTank, + AA: V.securityForceAircraftPower, + TA: V.securityForceAircraftPower, + SpacePlane: V.securityForceSpacePlanePower, + GunS: V.securityForceAC130, + Satellite: V.securityForceSatellitePower, + GiantRobot: V.securityForceGiantRobot, + MissileSilo: V.securityForceMissileSilo, + AircraftCarrier: V.securityForceAircraftCarrier, + Sub: V.securityForceSubmarine, + HAT: V.securityForceHeavyAmphibiousTransport + }; + UnitsClean(); + } else { + App.SF.Init(); + } + } else if (typeof V.SF === "object") { + V.SF.FS = V.SF.FS || {}; + V.SF.FS.Tension = V.SF.FS.Tension || -1; + + if (V.SF.Toggle && V.SF.Active >= 1) { + V.SF.UC = V.SF.UC || {}; + V.SF.Depravity = V.SF.Depravity || 0; + V.SF.Upgrade = V.SF.Upgrade || 0; + V.SF.Gift = V.SF.Gift || 0; + V.SF.UC.Assign = V.SF.UC.Assign || 0; + V.SF.UC.Lock = V.SF.UC.Lock || 0; + V.SF.ROE = V.SF.ROE || "hold"; + V.SF.Target = V.SF.Target || "recruit"; + V.SF.Regs = V.SF.Regs || "strict"; + V.SF.Lower = V.SF.Lower || "the special force"; + + V.SF.ArmySize = V.SF.ArmySize || 40; + + V.SF.Squad = V.SF.Squad || {}; + for (let i = 0; i < App.SF.upgrades.list('all').length; i++) { + V.SF.Squad[App.SF.upgrades.list('all')[i]] = V.SF.Squad[App.SF.upgrades.list('all')[i]] || 0; + } + + V.SF.SatLaunched = V.SF.SatLaunched || 0; + + V.SF.Colonel = V.SF.Colonel || {}; + V.SF.Colonel.Core = V.SF.Colonel.Core || ""; + V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; + V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; + V.SF.Colonel.Status = V.SF.Colonel.Status || 0; + + V.SF.MercCon = V.SF.MercCon || {}; + V.SF.MercCon.History = V.SF.MercCon.History || 0; + V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || 0; + if (V.SF.MercCon.History >= 1) { + V.SF.MercCon.CanAttend = -1; + } + V.SF.MercCon.Income = V.SF.MercCon.Income || 0; + V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; + V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; + V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; + V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; + + if (typeof V.SF.Squad.Satellite === "object") { + if (V.SF.Squad.Satellite.InOrbit > 0) { + V.SF.SatLaunched = V.SF.Squad.Satellite.InOrbit; delete V.SF.Squad.Satellite.InOrbit; + } + V.SF.Squad.Satellite = V.SF.Squad.Satellite.lv; + } + + delete V.SF.FS.upgrade; delete V.SF.UC.num; + + if (jsDef(V.choice)) { + V.SF.Gift = V.choice; + } + + if (V.Tour !== undefined) { + V.SF.tour = V.Tour || 0; + } + + if (V.SF.Squad.Troops) { + V.SF.ArmySize = V.SF.Squad.Troops; + delete V.SF.Squad.Troops; + } + + if (V.SF.MercCon !== undefined) { + if( V.SF.MercCon.View !== undefined) { + delete V.SF.MercCon.View; + } + if (V.SF.MercCon.Helots !== undefined) { + V.SF.MercCon.Menials = V.SF.MercCon.Helots; + delete V.SF.MercCon.Helots; + } + if (V.SF.MercCon.TotalHelots !== undefined) { + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; + delete V.SF.MercCon.TotalHelots; + } + } + + if (V.SF.SpecOps !== undefined && V.SF.SpecOpsLock !== undefined) { + V.SF.UC = {Assign: V.SF.SpecOps, Lock: V.SF.SpecOpsLock}; + } + + if (V.SFUC !== undefined) { + V.SF.UC.num = V.SFUC || 0; + } + + if (V.SpecOpsLock !== undefined) { + V.SF.SpecOpsLock = V.SpecOpsLock; + } + + if (V.SF.U !== undefined) { + V.SF.Upgrade = V.SF.U || 0; + } + + if (V.SF.WG !== undefined) { + V.SF.Gift = V.SF.WG || 0; + } + + if (V.SF.Depravity < 0) { + V.SF.Depravity = 0; + } + + if (V.SFUnit !== undefined) { + if (V.SFUnit.AT !== undefined) { + V.SFUnitTA = 0; + } + if (V.SFTradeShow !== undefined) { + V.SF.MercCon = V.SFTradeShow; + } + delete V.SFTradeShow; + if (V.SFColonel !== undefined) { + V.SF.Colonel = V.SFColonel; + } + + if (V.SF.Squad !== undefined && V.SF.Squad.Satellite !== undefined && V.SatLaunched !== undefined) { + V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: V.SatLaunched}; + V.SF.Squad.Satellite = V.SF.Squad.Sat; + delete V.SF.Squad.Sat; + delete V.SatLaunched; + } + } + } // closes: V.SF.Toggle && V.SF.Active >= 1 + } + + delete V.Tour; delete V.SFColonel; delete V.SFUnit; + delete V.SF.tour; delete V.SF.Caps; delete V.SF.Size; delete V.choice; + delete V.SF.Units; delete V.SpecOpsLock; delete V.SF.U; delete V.SF.WG; + delete V.SF.Subsidy; delete V.SF.SpecOps; delete V.SF.SpecOpsLock; delete V.SFUC; + + if (V.SF.BadOutcome !== undefined) { + delete V.SF.BadOutcome; + } + if (V.arcologies[0].SFRaid !== undefined) { + delete V.arcologies[0].SFRaid; + } + if (V.arcologies[0].SFRaidTarget !== undefined) { + delete V.arcologies[0].SFRaidTarget; + } + if (V.SF.Facility !== undefined) { + delete V.SF.Facility; + } + + if (V.SF.MWU !== undefined) { + delete V.SF.MWU; + } + if (V.SF.Bonus !== undefined) { + delete V.SF.Bonus; + } + + InitClean(); + MainClean(); + ColonelClean(); + TradeShowClean(); + UnitsClean(); + + if (V.week < 72 && V.SF.Active !== -1) { V.SF.Active = -1; } +}; +/* usedOnce */ diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 6784f3a1b75a48c2bbedbf6ffa70f5c895513227..e595875d8c85665ffc837754889a2a6187195cef 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -302,8 +302,8 @@ App.Update.globalVariables = function(node) { // Farmyard Subsection 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.farmyardUpgrade !== "object") { - V.farmyardUpgrade = { + if (typeof V.farmyardUpgrades !== "object") { + V.farmyardUpgrades = { pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0 }; } @@ -914,7 +914,7 @@ App.Update.globalVariables = function(node) { } } - policies.BC(); + App.Update.policies(); // Player Arcology { @@ -923,7 +923,7 @@ App.Update.globalVariables = function(node) { } else { assistant.object(); } - FCTV.manage(); + App.Update.FCTV(); if (jQuery.isEmptyObject(V.FSPromenade)) { V.FSPromenade = { Subjugationist: 0, diff --git a/src/data/backwardsCompatibility/policiesBC.js b/src/data/backwardsCompatibility/policiesBC.js new file mode 100644 index 0000000000000000000000000000000000000000..861bd621fd7562681ca91ba7aedaac0713191f97 --- /dev/null +++ b/src/data/backwardsCompatibility/policiesBC.js @@ -0,0 +1,85 @@ +// @ts-nocheck +App.Update.policies = function() { + function convertMain(variable, pro, anti) { + if (V[pro]) { + V.policies[variable] = 1; + } else if (V[anti]) { + V.policies[variable] = -1; + } + } + + function convertRetirement(variable, retireType, amountRequired) { + if (V[retireType] && V[amountRequired]) { + V.policies.retirement[variable] = V[amountRequired]; + } + } + + if (V.releaseID < 1069) { + V.policies.childProtectionAct = V.childProtectionAct; + V.policies.culturalOpenness = V.CulturalOpenness; + V.policies.sexualOpeness = V.sexualOpeness; + V.policies.proRefugees = V.ProRefugees; + V.policies.publicFuckdolls = V.publicFuckdolls; + + V.policies.proRecruitment = V.ProRecruitment; + V.policies.cash4Babies = V.Cash4Babies; + V.policies.regularParties = V.RegularParties; + V.policies.publicPA = V.PAPublic; + V.policies.coursingAssociation = V.CoursingAssociation; + + V.policies.raidingMercenaries = V.RaidingMercenaries; + V.policies.mixedMarriage = V.MixedMarriage; + V.policies.goodImageCampaign = V.goodImageCampaign; + V.policies.alwaysSubsidizeRep = V.alwaysSubsidizeRep; + V.policies.alwaysSubsidizeGrowth = V.alwaysSubsidizeGrowth; + + convertMain('immmigrationCash', 'ProImmigrationCash', 'AntiImmigrationCash'); + convertMain('immmigrationRep', 'ProImmigrationRep', 'AntiImmigrationRep'); + convertMain('enslavementCash', 'ProEnslavementCash', 'AntiEnslavementCash'); + convertMain('enslavementRep', 'ProEnslavementRep', 'AntiEnslavementRep'); + convertMain('cashForRep', 'CashForRep', 'RepForCash'); + + convertMain('oralAppeal', 'OralEncouragement', 'OralDiscouragement'); + convertMain('vaginalAppeal', 'VaginalEncouragement', 'VaginalDiscouragement'); + convertMain('analAppeal', 'AnalEncouragement', 'AnalDiscouragement'); + + convertRetirement('sex', 'SexMilestoneRetirement', 'retirementSex'); + convertRetirement('milk', 'MilkMilestoneRetirement', 'retirementMilk'); + convertRetirement('cum', 'CumMilestoneRetirement', 'retirementCum'); + convertRetirement('births', 'BirthsMilestoneRetirement', 'retirementBirths'); + convertRetirement('kills', 'KillsMilestoneRetirement', 'retirementKills'); + + if (V.BioreactorRetirement) { + V.policies.retirement.fate = "bioreactor"; + } else if (V.ArcadeRetirement) { + V.policies.retirement.fate = "arcade"; + } else if (V.CitizenRetirement) { + V.policies.retirement.fate = "citizen"; + } + + V.policies.retirement.menial2Citizen = V.citizenRetirementMenials; + V.policies.retirement.customAgePolicy = V.policies.retirement.customAgePolicySet || V.CustomRetirementAgePolicy; + V.policies.retirement.physicalAgePolicy = V.PhysicalRetirementAgePolicy; + + V.policies.SMR.basicSMR = V.BasicSMR; + V.policies.SMR.healthInspectionSMR = V.HealthInspectionSMR; + V.policies.SMR.educationSMR = V.EducationSMR; + V.policies.SMR.frigiditySMR = V.FrigiditySMR; + + V.policies.SMR.weightSMR = V.BasicWeightSMR; + V.policies.SMR.honestySMR = V.HonestySMR; + + V.policies.SMR.beauty.basicSMR = V.BasicBeautySMR; + V.policies.SMR.beauty.qualitySMR = V.QualityBeautySMR; + + V.policies.SMR.height.basicSMR = V.BasicHeightSMR; + V.policies.SMR.height.advancedSMR = V.AdvancedHeightSMR; + + V.policies.SMR.intelligence.basicSMR = V.BasicIntelligenceSMR; + V.policies.SMR.intelligence.qualitySMR = V.QualityIntelligenceSMR; + + V.policies.SMR.eugenics.faceSMR = V.FaceEugenicsSMR; + V.policies.SMR.eugenics.heightSMR = V.HeightEugenicsSMR; + V.policies.SMR.eugenics.intelligenceSMR = V.IntelligenceEugenicsSMR; + } +}; diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 8461bfc531bcaede0e9f50d46fbe08f2f87f722e..f59942c5d265bb168672a53b52526c62d52b1b84 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -1032,7 +1032,7 @@ App.SlaveAssignment.choosesOwnClothes = (function() { if (slave.fetish === "mindbroken") { if (hasBothLegs(slave) && slave.heels === 1) { - shoes.push({text: `${He} finds ${he} can inexplicably walk if ${he} wears heels; a daily lesson for ${him}, as ${he} forgets shortly after leaving.`, shoes: jsEither(["boots", "extreme heels", "heels", "pumps"])}); + shoes.push({text: `${He} finds ${he} can inexplicably walk if ${he} wears heels; a daily lesson for ${him}, as ${he} forgets shortly after leaving.`, shoes: jsEither(["boots", "extreme heels", "heels"])}); } if (V.arcologies[0].FSIntellectualDependencyLawBeauty === 1 || V.arcologies[0].FSStatuesqueGlorification > 0) { shoes.push({text: `A fleeting thought of heels crosses ${his} mind, so ${he} grabs the nearest pair.`, shoes: jsEither(["extreme heels", "heels", "pumps"])}); diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js index 39e21d396acf790e065deaebe4f49dd805989812..3ba0331829ad501fd5dfb6ecdd4cbee127db4798 100644 --- a/src/endWeek/saClothes.js +++ b/src/endWeek/saClothes.js @@ -867,21 +867,6 @@ App.SlaveAssignment.clothes = (function() { if (slave.shoes === "pumps") { r.push(`While ${he} can just barely stand with ${his} heeled pumps, ${he} is incapable of taking a step in them.`); } - if (slave.devotion >= -20 && slave.fetish === "submissive" && slave.fetishKnown === 1) { - r.push(`${He} <span class="hotpink">loves being forced</span> to crawl around like some kind of animal.`); - slave.devotion += 1; - } else if (slave.devotion > 50) { - r.push(`${He} accepts being forced to crawl around on`); - if (hasAllLimbs(slave)) { - r.push(`all fours.`); - } else { - r.push(`the ground.`); - } - } else { - r.push(`${He} <span class="mediumorchid">resents being forced</span> to crawl around like some kind of animal, but it keeps ${him} properly <span class="gold">afraid.</span>`); - slave.devotion -= 2; - slave.trust -= 4; - } } } } diff --git a/src/endWeek/saPleaseYou.js b/src/endWeek/saPleaseYou.js index 351b644217e763232430745b0211b3ce8cfe71e8..835972b037a1c1f0750595b42e182ba09a108e01 100644 --- a/src/endWeek/saPleaseYou.js +++ b/src/endWeek/saPleaseYou.js @@ -1211,7 +1211,7 @@ App.SlaveAssignment.pleaseYou = (function() { } slave.trust += 1; } else if (!canWalk(slave)) { - r.push(`You carry ${him} around with you all week, using ${him} as your personal sex toy and bedwarmer.`); + r.push(`You keep ${him} around you all week, using ${him} as your personal sex toy and bedwarmer.`); if (isAmputee(slave)) { r.push(`Without arms and legs,`); } else if (!hasAnyLegs(slave)) { @@ -1220,16 +1220,18 @@ App.SlaveAssignment.pleaseYou = (function() { r.push(`With just one leg,`); } else if (tooFatSlave(slave)) { r.push(`Immobilized by ${his} own weight,`); + } else if (!canMove(eventSlave)) { + r.push(`Immobilized by ${his} own swollen body,`); } else if (tooBigBreasts(slave)) { - r.push(`Immobilized by ${his} own tits,`); + r.push(`Restricted by ${his} own tits,`); } else if (tooBigBelly(slave)) { - r.push(`Immobilized by ${his} own swollen orb of a midsection,`); + r.push(`Restricted by ${his} own swollen orb of a midsection,`); } else if (tooBigBalls(slave)) { - r.push(`Immobilized by ${his} own oversized testicles,`); + r.push(`Restricted by ${his} own oversized testicles,`); } else if (tooBigDick(slave)) { - r.push(`Immobilized by ${his} own oversized cock,`); + r.push(`Restricted by ${his} own oversized cock,`); } else if (tooBigButt(slave)) { - r.push(`Immobilized by ${his} own massive ass,`); + r.push(`Restricted by ${his} own massive ass,`); } else { r.push(`With ${his} clipped heels,`); } diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js index fea31cb0dafea7f40d70e490c8592772ed314ca8..ef38d9d3e78cae9f55b4d469c8d952e11a3e2f35 100644 --- a/src/endWeek/saServeYourOtherSlaves.js +++ b/src/endWeek/saServeYourOtherSlaves.js @@ -110,7 +110,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { if (slave.fuckdoll > 0) { r.push(`is positioned as a sperm dispenser for fertile slaves to ride or milk at their discretion.`); } else if (slave.fetish === "mindbroken") { - if (slave.career === "a breeding bull" && canWalk(slave)) { + if (slave.career === "a breeding bull" && canMove(slave)) { r.push(`is allowed to freely breed any fertile slaves ${he} can find.`); } else { r.push(`is left as a sperm dispenser for fertile slaves to ride or milk at their discretion.`); @@ -230,8 +230,10 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { slave.devotion += 1; } } - if (hasAnyLegs(slave) && !canWalk(slave)) { + if (!canWalk(slave) && canMove(slave)) { r.push(`Since ${he}'s forced to crawl around, ${he}'s especially vulnerable.`); + } else if (!canMove(slave)) { + r.push(`Since ${he}'s completely immobile, ${he}'s especially vulnerable.`); } if (V.subSlaves <= 0) { V.subSlaves = 1; @@ -331,8 +333,8 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { } r.push(`is serving <strong>${domName}</strong> this week.`); - if (hasAnyLegs(domSlave) && !canWalk(slave)) { - r.push(`Since ${subName} cannot stand, ${domName} has no trouble taking whatever ${he2} wants from ${him}.`); + if (hasAnyLegs(domSlave) && !canMove(slave)) { + r.push(`Since ${subName} cannot move, ${domName} has no trouble taking whatever ${he2} wants from ${him}.`); } else if (isAmputee(domSlave)) { r.push(`Since ${he2} has no limbs, ${domName} has to put forth extra effort taking whatever ${he2} wants from ${subName}.`); } @@ -1180,7 +1182,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { domSlave.fetishKnown = 1; } r.push(`the first indication ${subName} gets of what ${he}'s in for this week is when ${domName}`); - if (canWalk(domSlave)) { + if (canStand(domSlave)) { if (domName.mpreg > 0 || domName.ovaries > 0) { r.push(`pushes a full-term belly into ${subName}'s back and`); } diff --git a/src/endWeek/saWorkTheFarm.js b/src/endWeek/saWorkTheFarm.js index 274cfd76de013a243bc21773a4a585672bae33dd..dac4a52c36cf272898ff8916b618777694942bab 100644 --- a/src/endWeek/saWorkTheFarm.js +++ b/src/endWeek/saWorkTheFarm.js @@ -1,566 +1,361 @@ +// FIXME: needs further review + /** * @param {App.Entity.SlaveState} slave - * @returns {string} + * @returns {DocumentFragment} */ App.SlaveAssignment.workTheFarm = function(slave) { - const arcology = V.arcologies[0]; - const { - he, him, his, He, His - } = getPronouns(slave), - incomeStats = getSlaveStatisticData(slave, V.facility.farmyard); - - let food = Math.trunc(App.Facilities.Farmyard.foodAmount(slave)); - let t = `works as a farmhand this week. `; - - - const foodTotal = (slave, food) => { - t += foodFarmer(); - t += foodDevotion(slave); - t += foodMuscles(slave); - t += foodWeight(slave); - t += foodHealth(slave); - t += foodSight(slave); - t += foodHearing(slave); - - t += V.foodMarket ? `As a result, ${he} produces <span class="chocolate">${massFormat(food)}</span> of food over the week. ` : ``; - }; - - const foodFarmer = () => { - if (V.Farmer) { - return `${V.Farmer.slaveName} watches over ${him}, making sure that ${he} doesn't slack off and works as hard as ${he} should. `; + let frag = document.createDocumentFragment(); + + const + { he, him, his, He, His } = getPronouns(slave), + incomeStats = getSlaveStatisticData(slave, V.facility.farmyard), + + slaveApproves = () => sexualQuirks.includes(slave.sexualQuirk) || behavorialQuirks.includes(slave.behavioralQuirk) || fetishes.includes(slave.fetish), + + sexualQuirks = ["perverted", "unflinching"], + behavorialQuirks = ["sinful"], + fetishes = ["humiliation", "masochist"], + + foodAmount = Math.trunc(App.Facilities.Farmyard.foodAmount(slave)); + + function fullReport(slave) { + const report = App.UI.DOM.appendNewElement("div", frag); + + let r = []; + + r.push(intro()); + r.push(farmer(slave)); + r.push(devotion(slave)); + r.push(muscles(slave)); + r.push(weight(slave)); + r.push(health(slave)); + r.push(sight(slave)); + r.push(hearing(slave)); + r.push(food()); + + r.push(slaveShows(slave)); + r.push(longTermEffects(slave)); + r.push(slaveVignettes()); + + $(report).append(r.join(' ')); + } + + const intro = () => `${He} works as a farmhand this week.`; + + function farmer(slave) { + const F = getPronouns(S.Farmer); + + if (S.Farmer) { + if (slave.devotion < V.FarmerDevotionThreshold) { + slave.devotion += V.FarmerDevotionBonus; + } + + if (slave.devotion < V.FarmerTrustThreshold) { + slave.trust += V.FarmerTrustBonus; + } + + if (slave.health.condition < 100) { + improveCondition(slave, V.FarmerHealthBonus); + } + + return `${S.Farmer.slaveName} watches over ${him}, making sure that ${he} doesn't slack off and works as hard as ${he} should. ${F.He}'s a tough boss, but a fair one. ${slave.slaveName} benefits from ${F.his} care while working in ${V.farmyardName}.`; } - return ``; - }; + } - const foodDevotion = slave => { + function devotion(slave) { if (slave.devotion > 50) { - return `${He}'s so devoted to you that ${he} works harder and produces more food. `; + return `${He}'s so devoted to you that ${he} works harder and produces more food.`; } else if (slave.devotion < -50) { - return `${He}'s so resistant that ${he} doesn't work as hard, and thus produces less food. `; + return `${He}'s so resistant that ${he} doesn't work as hard, and thus produces less food.`; } else { - return ``; // TODO: third case for neutral? + return `${He} doesn't feel particularly compelled to work hard or slack off and produces an average amount of food.`; } - }; + } + + function health(slave) { + let r = []; - const foodHealth = slave => { - return foodHealthCondition(slave) + foodHealthIllness(slave); - }; + r.push(healthCondition(slave)); + r.push(healthIllness(slave)); - const foodHealthCondition = slave => { + return r.join(' '); + } + + function healthCondition(slave) { if (slave.health.condition > 50) { - return `${His} shining health helps ${him} work harder and longer. `; + return `${His} shining health helps ${him} work harder and longer.`; } else if (slave.health.condition < -50) { - return `${His} poor health impedes ${his} ability to work efficiently. `; - } else { - return ``; // TODO: third case? + return `${His} poor health impedes ${his} ability to work efficiently.`; } - }; + } + + function healthIllness(slave) { + let + r = [], + health = ``, + exhaustion = ``; - const foodHealthIllness = slave => { - let t = ``; if (slave.health.illness > 0 || slave.health.tired > 60) { - t += ` ${He} performed worse this week due to<span class="red">`; if (slave.health.illness === 1) { - t += ` feeling under the weather`; + health = `feeling under the weather`; } else if (slave.health.illness === 2) { - t += ` a minor illness`; + health = `a minor illness`; } else if (slave.health.illness === 3) { - t += ` being sick`; + health = `being sick`; } else if (slave.health.illness === 4) { - t += ` being very sick`; + health = `being very sick`; } else if (slave.health.illness === 5) { - t += ` a terrible illness`; - } - if (slave.health.illness > 0 && slave.health.tired > 60) { - t += ` and`; - foodHealthTired(slave); + health = `a terrible illness`; } - t += `.</span> `; - t += foodTired(slave); - } - return t; - }; - - const foodHealthTired = slave => { - if (slave.health.tired > 90) { - return ` exhaustion`; - } else if (slave.health.tired > 60) { - return ` being tired`; - } - return ``; - }; - - const foodTired = slave => { - let t = ``; - if (!slave.fuckdoll) { - if (slaveResting(slave)) { - t = ` ${He} spends reduced hours working the soil in order to <span class="green">offset ${his} lack of rest.</span>`; - } else if (slave.health.tired + 20 >= 90 && !willWorkToDeath(slave)) { - t = ` ${He} attempts to refuse work due to ${his} exhaustion, but can do little to stop it or the resulting <span class="trust dec">severe punishment.</span> ${He} <span class="devotion dec">purposefully underperforms,</span> choosing ${his} overall well-being over the consequences, <span class="red">greatly reducing yields.</span>`; - slave.devotion -= 10; - slave.trust -= 5; - } else { - t = ` Hours of manual labor quickly add up, leaving ${him} <span class="red">physically drained</span> by the end of the day.`; + if (slave.health.tired > 90) { + exhaustion = `exhaustion`; + } else if (slave.health.tired > 60) { + exhaustion = `being tired`; } + + r.push(`${He} performed worse this week due to <span class="health dec">${health}${slave.health.illness > 0 && slave.health.tired > 60 ? ` and ` : ``}${exhaustion}.</span>`); + + r.push(tired(slave)); } - tired(slave); - return t; - }; + return r; + } - const foodMuscles = slave => { + function tired(slave) { + if (slaveResting(slave)) { + return `${He} spends reduced hours working the soil in order to <span class="health dec">offset ${his} lack of rest.</span>`; + } else if (slave.health.tired + 20 >= 90 && !willWorkToDeath(slave)) { + return `${He} attempts to refuse work due to ${his} exhaustion, but can do little to stop it or the resulting <span class="trust dec">severe punishment.</span> ${He} <span class="devotion dec">purposefully underperforms,</span> choosing ${his} overall well-being over the consequences, <span class="health dec">greatly reducing yields.</span>`; + } else { + return `Hours of manual labor quickly add up, leaving ${him} <span class="health dec">physically drained</span> by the end of the day.`; + } + } + + function muscles(slave) { if (slave.muscles > 50) { - return `${His} muscular form helps ${him} work better, increasing ${his} productivity. `; + return `${His} muscular form helps ${him} work better, increasing ${his} productivity.`; } else if (slave.muscles < -50) { - return `${He} is so weak that ${he} is not able to work effectively. `; - } else { - return ``; // TODO: third case? + return `${He} is so weak that ${he} is not able to work effectively.`; } - }; + } - const foodWeight = slave => { - return slave.weight > 95 ? `${He} is so overweight that ${he} has to stop every few minutes to catch ${his} breath, and so ${his} productivity suffers. ` : ``; - }; + function weight(slave) { + if (slave.weight > 95) { + return `${He} is so overweight that ${he} has to stop every few minutes to catch ${his} breath, and so ${his} productivity suffers. `; + } + } - const foodSight = slave => { + function sight(slave) { if (!canSee(slave)) { - return `${His} blindness makes it extremely difficult for ${him} to work, severely limiting ${his} production. `; + return `${His} blindness makes it extremely difficult for ${him} to work, severely limiting ${his} production.`; } else if (!canSeePerfectly(slave)) { - return `${His} nearsightedness makes it harder for ${him} to work as hard as ${he} otherwise would. `; - } else { - return ``; // TODO: third case? + return `${His} nearsightedness makes it harder for ${him} to work as hard as ${he} otherwise would.`; } - }; + } - const foodHearing = slave => { + function hearing(slave) { if (slave.hears === -1) { - return `${He} is hard-of-hearing, which gets in the way of ${his} work whenever ${he} misses directions${V.Farmer ? ` from ${V.Farmer.slaveName}` : ``}. `; + return `${He} is hard-of-hearing, which gets in the way of ${his} work whenever ${he} misses directions${S.Farmer ? ` from ${S.Farmer.slaveName}` : ``}.`; } else if (slave.hears < -1) { - return `${He} is deaf, which gets in the way of ${his} work whenever ${he} misses directions${V.Farmer ? ` from ${V.Farmer.slaveName}` : ``}. `; - } else { - return ``; // TODO: third case? + return `${He} is deaf, which gets in the way of ${his} work whenever ${he} misses directions${S.Farmer ? ` from ${S.Farmer.slaveName}` : ``}.`; } - }; + } + function food() { + const fsGain = 0.0001 * foodAmount; - if (V.Farmer) { - // TODO: keep oral check? replace with something else? - t += `While there, ${he} benefits from ${V.Farmer.slaveName}'s ${V.Farmer.physicalAge < 21 ? `youthful energy` : `care`} ${V.Farmer.skill.oral ? ` and talented tongue` : ``}.`; - if (slave.devotion < V.FarmerDevotionThreshold) { - slave.devotion += V.FarmerDevotionBonus; - } - if (slave.devotion < V.FarmerTrustThreshold) { - slave.trust += V.FarmerTrustBonus; - } - if (slave.health.condition < 100) { - improveCondition(slave, V.FarmerHealthBonus); + FutureSocieties.DecorationBonus(V.farmyardDecoration, fsGain); + + if (V.foodMarket) { + return `As a result, ${he} produces <span class="chocolate">${massFormat(foodAmount)}</span> of food over the week.`; } } // Open Food Production if (V.foodMarket) { - if (food < 1) { - food = 1; - } - V.food += food; - V.foodTotal += food; - incomeStats.food += food; - - foodTotal(slave, food); + V.food += foodAmount; + V.foodTotal += foodAmount; + incomeStats.food += foodAmount; } // Close Food Production // Open Shows - incomeStats.income += App.Facilities.Farmyard.farmShowsIncome(slave); + function slaveShows(slave) { + if (V.farmyardShows) { + return App.Facilities.Farmyard.putOnShows(slave); + } + } - if (V.farmyardShows) { - t += `${He} also puts on shows with animals this week. `; + // Close Shows - // Open FS Subsection + // Open Long-Term Effects - if (arcology.FSSupremacist !== "unset") { - if (slave.race === arcology.FSSupremacistRace) { - t += `Society <span class="red">disapproves</span> of your allowing a member of the elite race to be degraded in such a fashion, and thus ${he} didn't earn as much. `; - } - } - if (arcology.FSSubjugationist !== "unset") { - if (slave.race === arcology.FSSubjugationistRace) { - t += `Society <span class="green">approves</span> of the degradation you submit your ${arcology.FSSubjugationistRace} slaves to, and so ${he} earns you a bit more. `; - } else { - t += `Society doesn't disapprove of ${him} not being ${arcology.FSSubjugationistRace}, but ${he} doesn't earn as much as ${he} would if ${he} was. `; - } - } - if (arcology.FSRepopulationFocus !== "unset") { - if (slave.pregWeek > 16) { - if (slave.eggType !== "human") { - t += `Society is <span class="red">disgusted</span> by ${his} pregnancy when they realize that what it is in ${his} womb is not human. `; - } else { - t += `Society <span class="green">greatly approves</span> of your having pregnant slaves ${V.seeBestiality ? `have sex` : `put on shows`} with animals. `; - } - } - } - if (arcology.FSRestart !== "unset") { - if (slave.pregWeek > 16) { - if (slave.eggType !== "human") { - t += `Society is disgusted by ${his} pregnancy until they learn that what is in ${his} womb is not human. `; + function longTermEffects(slave) { + let r = []; + + if (slave.fetishKnown && slaveApproves || slave.energy > 95) { + if (V.farmyardShows) { + if (V.seeBestiality) { + r.push(`Getting fucked by animals is the perfect job for ${him}, as far as ${he} can tell. <span class="devotion inc">${He} is happy</span> to spend ${his} days being utterly degraded.`); + slave.devotion += 1; } else { - t += `Society is <span class="red">extremely disgusted</span> by ${his} pregnancy and the fact that you would have ${him} ${V.seeBestiality ? `have sex` : `put on shows`} with animals while sporting a baby bump. `; + r.push(`${He} loves putting on shows with animals, and as far as ${he} can tell, it's the perfect job for ${him}. It isn't as degrading as ${he} would like, but <span class="devotion inc">${he} is happy nonetheless.</span>`); + slave.devotion += 2; } } + + slave.need = 0; } - if (arcology.FSGenderRadicalist !== "unset") { - if (slave.dick > 0) { - t += `${His} patrons <span class="green">approve</span> of the fact that ${he} has a dick. `; - } else { - t += `${His} patrons <span class="red">are disappointed</span> that ${he} doesn't have a dick. `; - } - } - if (arcology.FSGenderFundamentalist !== "unset") { - if (slave.pregWeek > 16) { - t += `${His} viewers <span class="green">approve</span> of the fact that ${he} is sporting a baby bump. `; - } else { - t += `${His} viewers <span class="red">are disappointed</span> that ${he} isn't pregnant. `; - } - if (slave.dick > 0) { - // TODO: something here? - } - } - if (arcology.FSPaternalist !== "unset") { - if (V.seeBestiality && V.farmyardBreeding) { - t += `Your citizens are <span class="red">very disapproving</span> of the fact that you would allow something as degrading as having your slaves be knocked up by filthy beasts. `; - } else { - t += `Your citizens <span class="red">disapprove</span> of the fact that you would allow your slaves to be degraded in such a manner. `; - } - } - if (arcology.FSDegradationist !== "unset") { - if (V.seeBestiality && V.farmyardBreeding) { - t += `Your citizens are <span class="green">very approving</span> of the fact that you would allow something as degrading as having your slaves be knocked up by filthy beasts. `; - } else { - t += `Your citizens <span class="green">approve</span> of the fact that you would allow your slaves to be degraded in such a manner. `; - } - } - if (arcology.FSBodyPurist !== "unset") { - /* TODO: requirements for these might change */ - if (slave.boobsImplant > 0) { - // TODO: add stuff here - } - if (slave.buttImplant > 0) { - // TODO: add stuff here - } - if (slave.faceImplant > 0) { - // TODO: add stuff here - } - if (slave.lipsImplant > 0) { - // TODO: add stuff here + + return r; + } + + // Close Long-Term Effects + + // Open Vignettes + + function slaveVignettes() { + if (V.showVignettes) { + const + vignette = GetVignette(slave); + + let r = []; + + r.push(`<span class="story-label">This week</span> ${vignette.text}`); + + if (vignette.type === "cash") { + r.push(vignetteCash(vignette)); } - } - if (arcology.FSTransformationFetishist !== "unset") { - /* TODO: requirements for these might change */ - if (slave.boobsImplant > 0) { - // TODO: add stuff here + + if (vignette.type === "devotion") { + r.push(vignetteDevotion(vignette)); } - if (slave.buttImplant > 0) { - // TODO: add stuff here + + if (vignette.type === "trust") { + r.push(vignetteTrust(vignette)); } - if (slave.faceImplant > 0) { - // TODO: add stuff here + + if (vignette.type === "health") { + r.push(vignetteHealth(vignette)); } - if (slave.lipsImplant > 0) { - // TODO: add stuff here + + if (vignette.type === "rep") { + r.push(vignetteReputation(vignette)); } + + return r.join(' '); } - if (arcology.FSYouthPreferentialist !== "unset") { - if (slave.visualAge > 25) { // TODO: not sure about this age - t += `${arcology.name}'s citizens <span class="red">disapprove</span> of your using such old slaves to put on shows. `; - } else { - t += `${arcology.name}'s citizens <span class="green">approve</span> of your using young slaves to put on shows. `; - } + } + + function vignetteCash(vignette) { + const + FResultNumber = FResult(slave), + cash = Math.trunc(FResultNumber * vignette.effect); + + incomeStats.income += cash; + + if (vignette.effect > 0) { + cashX(cash, "slaveAssignmentFarmyardVign", slave); + + return `<span class="yellowgreen">making you an extra ${cashFormat(cash)}.</span>`; + } else if (vignette.effect < 0) { + cashX(forceNeg(cash), "slaveAssignmentFarmyardVign", slave); + + return `<span class="reputation dec">losing you ${cashFormat(Math.abs(cash))}.</span>`; + } else { + return `an incident without lasting effect.`; } - if (arcology.FSMaturityPreferentialist !== "unset") { - if (slave.visualAge > 25) { // TODO: not sure about this age - t += `${arcology.name}'s citizens <span class="green">approve</span> of your using mature slaves to put on shows. `; + } + + function vignetteDevotion(vignette) { + slave.devotion += 1 * vignette.effect; + + if (vignette.effect > 0) { + if (slave.devotion > 50) { + return `<span class="devotion inc">increasing ${his} devotion to you.</span>`; + } else if (slave.devotion >= 20) { + return `<span class="devotion inc">increasing ${his} acceptance of you.</span>`; + } else if (slave.devotion >= -20) { + return `<span class="devotion inc">reducing ${his} dislike of you.</span>`; } else { - t += `${arcology.name}'s citizens <span class="red">disapprove</span> of your using such young slaves to put on shows. `; - } - } - if (arcology.FSSlimnessEnthusiast !== "unset") { - if (slave.weight > 10) { - t += `Society finds your using a slave with such a flabby body <span class="red">absolutely disgusting.</span> `; - } - if (slave.boobs > 799) { - t += `Your citizens ${slave.weight > 10 ? `also ` : ``} don't approve of you using a slave with such large tits as a showgirl. `; - } - if (slave.butt > 3) { - // TODO: write this - } - } - if (arcology.FSAssetExpansionist !== "unset") { - if (slave.weight > 10) { - // TODO: should weight be in here? - } - if (slave.boobs > 799) { - // TODO: write this - } - if (slave.butt > 3) { - // TODO: write this - } - } - if (arcology.FSPastoralist !== "unset") { - if (slave.boobs > 799) { - // TODO: does this make sense? - } - if (slave.lactation > 0) { - // TODO: write this - } - } - if (arcology.FSPhysicalIdealist !== "unset") { - if (slave.height > 169) { - // TODO: write this + return `<span class="devotion inc">reducing ${his} hatred of you.</span>`; + } + } else if (vignette.effect < 0) { + if (slave.devotion > 50) { + return `<span class="devotion dec">reducing ${his} devotion to you.</span>`; + } else if (slave.devotion >= 20) { + return `<span class="devotion dec">reducing ${his} acceptance of you.</span>`; + } else if (slave.devotion >= -20) { + return `<span class="devotion dec">increasing ${his} dislike of you.</span>`; } else { - // TODO: write this + return `<span class="devotion dec">increasing ${his} hatred of you.</span>`; } + } else { + return `an incident without lasting effect.`; } - if (arcology.FSHedonisticDecadence !== "unset") { - if (slave.weight > 10) { - // TODO: write this + } + + function vignetteTrust(vignette) { + slave.trust += 1 * vignette.effect; + + if (vignette.effect > 0) { + if (slave.trust > 20) { + return `<span class="trust inc">increasing ${his} trust in you.</span>`; + } else if (slave.trust >= -20) { + return `<span class="trust inc">reducing ${his} fear of you.</span>`; } else { - // TODO: write this + return `<span class="trust inc">reducing ${his} terror of you.</span>`; } - } - if (arcology.FSChattelReligionist !== "unset") { - if (slave.devotion <= 20) { - // TODO: write this + } else if (vignette.effect < 0) { + if (slave.trust > 20) { + return `<span class="trust dec">reducing ${his} trust in you.</span>`; + } else if (slave.trust >= -20) { + return `<span class="trust dec">increasing ${his} fear of you.</span>`; } else { - // TODO: write this + return `<span class="trust dec">increasing ${his} terror of you.</span>`; } - } - - // Close FS Subsection - - if (setup.entertainmentCareers.includes(slave.career)) { - t += ` ${He} has experience with putting on shows from ${his} life before ${he} was a slave, making ${him} more effective at putting on shows. `; - } - if (setup.farmerCareers.includes(slave.career)) { // TODO: does this even make sense to include? - // TODO: write this - } - if (slave.prestige === 1) { - t += `Because some of your citizens already know of ${him}, ${he} earns more. `; - } else if (slave.prestige === 2) { - t += `Because a lot of your citizens already know of ${him}, ${he} earns quite a bit more. `; - } else if (slave.prestige === 3) { - t += `Because ${he} is so famous, ${he} earns a lot more then ${he} would otherwise. `; - } - if (slave.porn.prestige === 1) { // TODO: are prestige and pornPrestige mutually exclusive? - t += `${He} earns a bit more because some of your citizens already know ${him} from porn. `; - } else if (slave.porn.prestige === 2) { - t += `${He} earns quite a bit more because a lot of your citizens already know ${him} from porn. `; - } else if (slave.porn.prestige === 3) { - t += `${He} earns a lot more because ${he} is so famous from porn. `; - } - if (slave.health.condition > 20) { - t += `${He} is in such excellent health that ${he} is able to put on longer and more energetic shows, earning you more. `; - } else if (slave.health.condition < -20) { - t += `${His} poor health negatively affects ${his} ability to put on good shows, cutting into your profits. `; - } - if (slave.face > 40) { - t += `${He} is so ${slave.genes === "XY" ? `handsome` : `beautiful`} that ${his} audience is willing to pay more to watch ${him} put on shows. `; - } else if (slave.face > 10) { - t += `${He} is so ${slave.genes === "XY" ? `good-looking` : `pretty`} that ${his} audience is willing to pay more to watch ${him} put on shows. `; - } else if (slave.face < -10) { - t += `${His} audience isn't willing to pay as much because of how unattractive ${his} face is. `; - } else if (slave.face < -40) { - t += `${His} audience isn't willing to pay as much because of how hard ${his} face is to look at. `; - } - // TODO: write this block with different combinations of trust / devotion - if (slave.devotion > 50) { - // TODO: write this - } else if (slave.devotion < -50) { - // TODO: write this - } - if (slave.trust > 50) { - // TODO: write this - } else if (slave.trust < -50) { - // TODO: write this - } - if (slave.weight > 30 && arcology.FSHedonisticDecadence === "unset") { - t += `Your citizens are not willing to pay as much to see such a fat slave put on shows, so ${he} loses some income. `; - } else if (slave.weight < -30) { - t += `Your citizens don't like watching such a sickly-looking slaves put on shows, so ${he} loses some income. `; - } - if (slave.muscles > 30) { - // TODO: write this - do we want something for muscles? - } else if (slave.muscles < -30) { - // TODO: write this - maybe something about the slave's ability to handle the animal? - } - if (!canSeePerfectly(slave)) { - t += `${His} ${!canSee(slave) ? `blindness makes it impossible` : `nearsightedness makes it harder`}} for ${him} to see what ${he}'s doing, affecting ${his} ability to put on a good show. `; - } - if (slave.hears < 0) { - t += `${His} ${slave.hears < -1 ? `lack of` : `poor`} hearing makes it difficult for ${him} to do a good job of putting on a show. `; - } - if (slave.boobs > 800) { - // TODO: write this - } - if (slave.butt > 4) { - // TODO: write this - } - if (slave.preg > 10) { - // TODO: write this - } - if (slave.health.tired > 60) { - t += `${He} is so tired that the energy in ${his} shows is basically nonexistent, affecting ${his} profits. `; - } - if (slave.chem > 10) { - // TODO: write this - would this make sense to include? - } - if (slave.intelligence > 50) { - // TODO: write this - include something about .intelligenceImplant? - } else if (slave.intelligence < -50) { - // TODO: write this - } - if (slave.energy <= 20) { - // TODO: write this - } else if (slave.energy <= 40) { - // TODO: write this - } else if (slave.energy <= 60) { - // TODO: write this - } else if (slave.energy <= 80) { - // TODO: write this - } else if (slave.energy <= 95) { - // TODO: write this } else { - // TODO: write this + return `an incident without lasting effect.`; } - if (slave.fetish === "submissive") { - // TODO: write this - } else if (slave.fetish === "humiliation") { - // TODO: write this - } else if (slave.fetish === "masochist") { - // TODO: write this - } // TODO: incorporate quirks } - // Close Shows + function vignetteHealth(vignette) { + if (vignette.effect > 0) { + improveCondition(slave, 2 * vignette.effect); - // Open Long-Term Effects + return `<span class="reputation inc">improving ${his} health.</span>`; + } else if (vignette.effect < 0) { + healthDamage(slave, 2 * vignette.effect); - if (slave.fetishKnown && (slave.fetish === "submissive" || slave.fetish === "humiliation" || slave.fetish === "masochist") || slave.energy > 95) { - if (V.farmyardShows) { - if (V.seeBestiality) { - t += `Getting fucked by animals is the perfect job for ${him}, as far as ${he} can tell. <span class="devotion inc">${He} is happy</span> to spend ${his} days being utterly degraded. `; - } else { - t += `${He} loves putting on shows with animals, and as far as ${he} can tell, it's the perfect job for ${him}. <span class="devotion inc">${He} is happy</span> to spend ${his} days doing something so degrading. `; // TODO: not sure how degrading putting on shows is - } - } - slave.devotion += 1; - if (slave.need) { - slave.need = 0; + return `<span class="reputation dec">affecting ${his} health.</span>`; + } else { + return `an incident without lasting effect.`; } } - if (slave.behavioralQuirk === "fitness") { - t += `${slave.slaveName} <span class="devotion inc">privately enjoys</span> the exercise ${he} receives while working in ${V.farmyardName}. `; - slave.devotion += 1; - } - // Close Long-Term Effects + function vignetteReputation(vignette) { + const FResultNumber = FResult(slave); - // Open Vignettes + repX(Math.trunc(FResultNumber * vignette.effect * 0.1), "vignette", slave); + incomeStats.rep += Math.trunc(FResultNumber * vignette.effect * 0.1); - if (V.showVignettes) { - const vignette = GetVignette(slave); - t += `<span class="story-label">This week</span> ${vignette.text}`; - if (vignette.type === "cash") { - let FResultNumber = FResult(slave); - const cashVign = Math.trunc(FResultNumber * vignette.effect); - if (vignette.effect > 0) { - t += ` <span class="yellowgreen">making you an extra ${cashFormat(cashVign)}.</span> `; - cashX(cashVign, "slaveAssignmentFarmyardVign", slave); - } else if (vignette.effect < 0) { - t += ` <span class="red">losing you ${cashFormat(Math.abs(cashVign))}.</span> `; - cashX(forceNeg(cashVign), "slaveAssignmentFarmyardVign", slave); - } else { - t += ` an incident without lasting effect. `; - } - incomeStats.income += cashVign; - } else if (vignette.type === "devotion") { - if (vignette.effect > 0) { - if (slave.devotion > 50) { - t += ` <span class="devotion inc">increasing ${his} devotion to you.</span> `; - } else if (slave.devotion >= 20) { - t += ` <span class="devotion inc">increasing ${his} acceptance of you.</span> `; - } else if (slave.devotion >= -20) { - t += ` <span class="devotion inc">reducing ${his} dislike of you.</span> `; - } else { - t += ` <span class="devotion inc">reducing ${his} hatred of you.</span> `; - } - } else if (vignette.effect < 0) { - if (slave.devotion > 50) { - t += ` <span class="devotion dec">reducing ${his} devotion to you.</span> `; - } else if (slave.devotion >= 20) { - t += ` <span class="devotion dec">reducing ${his} acceptance of you.</span> `; - } else if (slave.devotion >= -20) { - t += ` <span class="devotion dec">increasing ${his} dislike of you.</span> `; - } else { - t += ` <span class="devotion dec">increasing ${his} hatred of you.</span> `; - } - } else { - t += ` an incident without lasting effect. `; - } - slave.devotion += 1 * vignette.effect; - } else if (vignette.type === "trust") { - if (vignette.effect > 0) { - if (slave.trust > 20) { - t += ` <span class="trust inc">increasing ${his} trust in you.</span> `; - } else if (slave.trust >= -20) { - t += ` <span class="trust inc">reducing ${his} fear of you.</span> `; - } else { - t += ` <span class="trust inc">reducing ${his} terror of you.</span> `; - } - } else if (vignette.effect < 0) { - if (slave.trust > 20) { - t += ` <span class="trust dec">reducing ${his} trust in you.</span> `; - } else if (slave.trust >= -20) { - t += ` <span class="trust dec">increasing ${his} fear of you.</span> `; - } else { - t += ` <span class="trust dec">increasing ${his} terror of you.</span> `; - } - } else { - t += ` an incident without lasting effect. `; - } - slave.trust += 1 * vignette.effect; - } else if (vignette.type === "health") { - if (vignette.effect > 0) { - t += ` <span class="green">improving ${his} health.</span> `; - improveCondition(slave, 2 * vignette.effect); - } else if (vignette.effect < 0) { - t += ` <span class="red">affecting ${his} health.</span> `; - healthDamage(slave, 2 * vignette.effect); - } else { - t += ` an incident without lasting effect. `; - } + if (vignette.effect > 0) { + return `<span class="reputation inc">gaining you a bit of reputation.</span>`; + } else if (vignette.effect < 0) { + return `<span class="reputation dec">losing you a bit of reputation.</span>`; } else { - let FResultNumber = FResult(slave); - if (vignette.effect > 0) { - t += ` <span class="green">gaining you a bit of reputation.</span> `; - } else if (vignette.effect < 0) { - t += ` <span class="red">losing you a bit of reputation.</span> `; - } else { - t += ` an incident without lasting effect. `; - } - repX(Math.trunc(FResultNumber * vignette.effect * 0.1), "vignette", slave); - incomeStats.rep += Math.trunc(FResultNumber * vignette.effect * 0.1); + return `an incident without lasting effect.`; } } // Close Vignettes - // Facility Decorations - const fsGain = 0.0001 * food; - FutureSocieties.DecorationBonus(V.farmyardDecoration, fsGain); + fullReport(slave); - return t; + return frag; }; diff --git a/src/events/RESS/devotedAnalVirgin.js b/src/events/RESS/devotedAnalVirgin.js index a710cd1c96dcc41af2c5ec7fa54c92b54c4e464c..f3e983c1212ad55daa058970dceaae9a528a44dd 100644 --- a/src/events/RESS/devotedAnalVirgin.js +++ b/src/events/RESS/devotedAnalVirgin.js @@ -92,7 +92,7 @@ App.Events.RESSDevotedAnalVirgin = class RESSDevotedAnalVirgin extends App.Event } t.push(`lavishing attention on ${his} nipples to ensure that ${he} has fun, too.`); } - t.push(`${He} leaves your office feeling <span class="hotpink">very close to ${his} ${WrittenMaster()} indeed,</span> and seems to have forgotten ${his} unfucked butthole, for now.`); + t.push(`${He} leaves your office feeling <span class="hotpink">very close to ${his} ${WrittenMaster(eventSlave)} indeed,</span> and seems to have forgotten ${his} unfucked butthole, for now.`); eventSlave.devotion += 4; if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) { diff --git a/src/events/RESS/devotedVirgin.js b/src/events/RESS/devotedVirgin.js index dd9089ef9c5523106b44669b65fdaa8afc95122f..5a9b3cd19076eff58f32c2f0cf91c82e1d33fb6e 100644 --- a/src/events/RESS/devotedVirgin.js +++ b/src/events/RESS/devotedVirgin.js @@ -74,7 +74,7 @@ App.Events.RESSDevotedVirgin = class RESSDevotedVirgin extends App.Events.BaseEv if (eventSlave.belly >= 5000) { t.push(`${eventSlave.bellyPreg >= 3000 ? "gravid" : "rounded"}`); } - t.push(`body against you and shivering with delight. ${He} shudders, almost uncontrollably, when you grind your ${PC.dick === 0 ? "clitoris" : "dick"} against ${his} moistened, wet pussy between ${his} thighs, taking extra care not to penetrate the willing slave. ${He} leaves your office feeling <span class="hotpink">very close to ${his} ${WrittenMaster()} indeed,</span> and seems to have forgotten ${his} unfucked vagina, for now.`); + t.push(`body against you and shivering with delight. ${He} shudders, almost uncontrollably, when you grind your ${PC.dick === 0 ? "clitoris" : "dick"} against ${his} moistened, wet pussy between ${his} thighs, taking extra care not to penetrate the willing slave. ${He} leaves your office feeling <span class="hotpink">very close to ${his} ${WrittenMaster(eventSlave)} indeed,</span> and seems to have forgotten ${his} unfucked vagina, for now.`); eventSlave.devotion += 4; return t; diff --git a/src/events/RESS/frighteningDick.js b/src/events/RESS/frighteningDick.js index 1b976c93c4288cc4d10c374fd7dce9c974f39769..08dbb8360bd7a62be335a8e93afa315cd3f58639 100644 --- a/src/events/RESS/frighteningDick.js +++ b/src/events/RESS/frighteningDick.js @@ -11,7 +11,7 @@ App.Events.RESSFrighteningDick = class RESSFrighteningDick extends App.Events.Ba [ // single event slave s => s.fetish !== "mindbroken", hasAnyArms, - hasAnyLegs, + canMove, canTalk, s => s.assignment === Job.HOUSE, s => s.attrXY <= 35 || s.behavioralFlaw === "hates men" || s.sexualFlaw === "repressed", diff --git a/src/events/RESS/imScared.js b/src/events/RESS/imScared.js index 0277a821fd4c4a19f28d2c4b5c46bf0fbe7f488f..8df132ff2c21793c445e651a2e4250edd2d23297 100644 --- a/src/events/RESS/imScared.js +++ b/src/events/RESS/imScared.js @@ -8,7 +8,7 @@ App.Events.RESSImScared = class RESSImScared extends App.Events.BaseEvent { [ // single event slave s => s.fetish !== "mindbroken", hasAnyArms, - hasAnyLegs, + canMove, canTalk, s => s.assignment !== Job.QUARTER, s => s.trust < -50, @@ -111,7 +111,7 @@ App.Events.RESSImScared = class RESSImScared extends App.Events.BaseEvent { t.push(`against your big ${PC.boobsImplant !== 0 ? "firm" : "soft"} breasts,`); } else if (V.PC.boobs >= 300) { t.push(`against your soft breasts,`); - } else if (V.PC.title == 0) { + } else if (V.PC.title === 0) { t.push(`against your flat chest,`); } else { t.push(`into your shoulder,`); @@ -156,7 +156,7 @@ App.Events.RESSImScared = class RESSImScared extends App.Events.BaseEvent { } else { t.push(`drained of ${his} milk, you tell ${eventSlave.slaveName} to pay close attention. ${He} ${watchListenFreezes} in horror as the slave's gigantic breasts are massaged and squeezed, while the milkers attached to ${his} absurd nipples tug and pull with industrial power. ${He} can't ${canSee(eventSlave) ? "look away; the orbs of jiggling flesh being manipulated are each as big as the slave's torso" : "shut out the sound of those enormous jiggling orbs of flesh being so roughly manipulated"}. It's good for milk production to drain slaves completely on occasion, and the machine doesn't stop until every drop is wrung from both udders.`); if (!canSee(eventSlave)) { - t.push(`You force the horrified slave's ${hasBothArms(eventSlave) ? "hands" : "hand"} onto its breasts so that ${he} may get a good sense of just how big and swollen they are and how hard the milker is pulling at them.`); + t.push(`You force the horrified slave's ${hasBothArms(eventSlave) ? "hands" : "hand"} onto its breasts so that ${he} may get a good sense of just how big and swollen they are and how hard the milker is pulling at them.`); } t.push(`You run a hand over to ${eventSlave.slaveName}'s own breast and, teasing ${his} nipple, tell ${him} that unless ${he} wants to experience that twice a day,`); } diff --git a/src/events/RESS/passingDeclaration.js b/src/events/RESS/passingDeclaration.js index 4b918926b2c7c114b8b4fb40881332ec85f21a55..9784ff3543611c360f62387a020232d0702413f6 100644 --- a/src/events/RESS/passingDeclaration.js +++ b/src/events/RESS/passingDeclaration.js @@ -8,7 +8,7 @@ App.Events.RESSPassingDeclaration = class RESSPassingDeclaration extends App.Eve [ // single event slave s => s.fetish !== "mindbroken", hasAnyArms, - hasAnyLegs, + canWalk, canTalk, s => s.devotion > 50, s => s.trust > 50, diff --git a/src/facilities/farmyard/farmyard.js b/src/facilities/farmyard/farmyard.js new file mode 100644 index 0000000000000000000000000000000000000000..dbc376eeab74c58e6bbf98f16402e498a82a6802 --- /dev/null +++ b/src/facilities/farmyard/farmyard.js @@ -0,0 +1,357 @@ +App.Facilities.Farmyard.clearAnimalsBought = function() { + for (const i in V.animalsBought) { + V.animalsBought[i] = 0; + } +}; + +App.Facilities.Farmyard.upgrades = function() { + const frag = new DocumentFragment(), + + 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); + + if (!farmyardUpgrades.pump) { + const + desc = document.createElement("div"), + upgrade = document.createElement("div"), + note = document.createElement("span"); + + upgrade.classList.add("indent"); + note.classList.add("note"); + + upgrade.append(App.UI.DOM.passageLink("Upgrade the water pump", "Farmyard", () => { + cashX(forceNeg(pumpCost)); + farmyardUpgrades.pump = 1; + })); + + note.append(` Costs ${cashFormat(pumpCost)} and slightly decreases upkeep costs.`); + + desc.append(`${V.farmyardNameCaps} is currently using the basic water pump that it came with.`); + + upgrade.append(note); + frag.append(desc, upgrade); + } else { + const desc = document.createElement("div"); + + desc.append(`The water pump in ${V.farmyardName} is a more efficient model, slightly improving the amount of crops it produces.`); + + frag.append(desc); + + if (!farmyardUpgrades.fertilizer) { + const + upgrade = document.createElement("div"), + note = document.createElement("span"); + + upgrade.classList.add("indent"); + note.classList.add("note"); + + upgrade.append(App.UI.DOM.passageLink("Use a higher-quality fertilizer", "Farmyard", () => { + cashX(forceNeg(fertilizerCost)); + farmyardUpgrades.fertilizer = 1; + })); + note.append(` Costs ${cashFormat(fertilizerCost)} and moderately increases crop yield and slightly increases upkeep costs.`); + + upgrade.append(note); + frag.append(upgrade); + } else { + const desc = document.createElement("div"); + + desc.append(`${V.farmyardNameCaps} is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs.`); + + frag.append(desc); + + if (!farmyardUpgrades.hydroponics) { + const + upgrade = document.createElement("div"), + note = document.createElement("span"); + + upgrade.classList.add("indent"); + note.classList.add("note"); + + upgrade.append(App.UI.DOM.passageLink("Purchase an advanced hydroponics system", "Farmyard", () => { + cashX(forceNeg(hydroponicsCost)); + farmyardUpgrades.hydroponics = 1; + })); + + note.append(` Costs ${cashFormat(hydroponicsCost)} and moderately decreases upkeep costs.`); + + upgrade.append(note); + frag.append(upgrade); + } else { + const desc = document.createElement("div"); + + desc.append(`${V.farmyardNameCaps} is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs.`); + + frag.append(desc); + + if (!farmyardUpgrades.seeds) { + const + upgrade = document.createElement("div"), + note = document.createElement("span"); + + upgrade.classList.add("indent"); + note.classList.add("note"); + + upgrade.append(App.UI.DOM.passageLink("Purchase genetically modified seeds", "Farmyard", () => { + cashX(forceNeg(seedsCost)); + farmyardUpgrades.seeds = 1; + })); + + note.append(` Costs ${cashFormat(seedsCost)} and moderately increases crop yield and slightly increases upkeep costs.`); + + upgrade.append(note); + frag.append(upgrade); + } else { + const desc = document.createElement("div"); + + desc.append(`${V.farmyardNameCaps} is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs.`); + + frag.append(desc); + + if (!farmyardUpgrades.machinery) { + const + upgrade = document.createElement("div"), + note = document.createElement("span"); + + upgrade.classList.add("indent"); + note.classList.add("note"); + + upgrade.append(App.UI.DOM.passageLink("Upgrade the machinery", "Farmyard", () => { + cashX(forceNeg(machineryCost)); + farmyardUpgrades.machinery = 1; + })); + + note.append(` Costs ${cashFormat(machineryCost)} and moderately increases crop yield and slightly increases upkeep costs.`); + + upgrade.append(note); + frag.append(upgrade); + } else { + const desc = document.createElement("div"); + + desc.append(`The machinery in ${V.farmyardName} has been upgraded, and is more efficient, significantly increasing crop yields and significantly decreasing upkeep costs.`); + + frag.append(desc); + } + } + } + } + } + + return frag; +}; + +App.Facilities.Farmyard.animalHousing = function() { + const frag = new DocumentFragment(), + + baseCost = Math.trunc(5000 * V.upgradeMultiplierArcology), + upgradedCost = Math.trunc(10000 * V.upgradeMultiplierArcology); + + let + farmyardKennels = V.farmyardKennels, + farmyardStables = V.farmyardStables, + farmyardCages = V.farmyardCages; + + + + // MARK: Kennels + + const + CL = V.canines.length, + + dogs = CL === 1 ? V.canines[0] : CL < 3 ? + `several different breeds of dogs` : + `all kinds of dogs`, + canines = CL === 1 ? V.canines[0].species === "dog" ? + V.canines[0].breed : V.canines[0].speciesPlural : CL < 3 ? + `several different ${V.canines.every( + c => c.species === "dog") ? + `breeds of dogs` : `species of canines`}` : + `all kinds of canines`, + + kennels = document.createElement("div"), + kennelsNote = document.createElement("span"), + kennelsUpgrade = document.createElement("div"); + + kennelsNote.classList.add("note"); + kennelsUpgrade.classList.add("indent"); + + if (farmyardKennels === 0) { + kennels.append(App.UI.DOM.passageLink("Add kennels", "Farmyard", + () => { + cashX(forceNeg(baseCost)); + V.farmyardKennels = 1; + })); + + kennelsNote.append(` Costs ${cashFormat(baseCost)}, will incur upkeep costs, and unlocks domestic canines`); + + kennels.append(kennelsNote); + } else if (farmyardKennels === 1) { + kennels.append(App.UI.DOM.passageLink("Kennels", "Farmyard Animals")); + kennels.append(` have been built in one corner of ${V.farmyardName}, and are currently ${CL < 1 ? `empty` : `occupied by ${dogs}.`}`); + + if (V.rep > 10000) { + kennelsUpgrade.append(App.UI.DOM.passageLink("Upgrade kennels", "Farmyard", + () => { + cashX(forceNeg(upgradedCost)); + V.farmyardKennels = 2; + })); + + kennelsNote.append(` Costs ${cashFormat(upgradedCost)}, will incur additional upkeep costs, and unlocks exotic canines`); + + kennelsUpgrade.append(kennelsNote); + kennels.append(kennelsUpgrade); + } + } else if (farmyardKennels === 2) { + kennels.append(App.UI.DOM.passageLink("Large kennels", "Farmyard Animals")); + kennels.append(` have been built in one corner of ${V.farmyardName}, and are currently ${CL < 1 ? `empty` : `occupied by ${canines}`} `); + } + + + + // MARK: Stables + + const + HL = V.hooved.length, + + hooved = HL === 1 ? V.hooved[0] : HL < 3 ? + `several different types of hooved animals` : + `all kinds of hooved animals`, + + stables = document.createElement("div"), + stablesNote = document.createElement("span"), + stablesUpgrade = document.createElement("div"); + + stablesNote.classList.add("note"); + stablesUpgrade.classList.add("indent"); + + if (farmyardStables === 0) { + stables.append(App.UI.DOM.passageLink("Add stables", "Farmyard", + () => { + cashX(forceNeg(baseCost)); + V.farmyardStables = 1; + })); + + stablesNote.append(` Costs ${cashFormat(baseCost)}, will incur upkeep costs, and unlocks domestic hooved animals`); + + stables.append(stablesNote); + } else if (farmyardStables === 1) { + stables.append(App.UI.DOM.passageLink("Stables", "Farmyard Animals")); + stables.append(` have been built in one corner of ${V.farmyardName}, and are currently ${HL < 1 ? `empty` : `occupied by ${hooved}.`}`); + + if (V.rep > 10000) { + stablesUpgrade.append(App.UI.DOM.passageLink("Upgrade stables", "Farmyard", + () => { + cashX(forceNeg(upgradedCost)); + V.farmyardStables = 2; + })); + + stablesNote.append(` Costs ${cashFormat(upgradedCost)}, will incur additional upkeep costs, and unlocks exotic hooved animals`); + + stablesUpgrade.append(stablesNote); + stables.append(stablesUpgrade); + } + } else if (farmyardStables === 2) { + stables.append(App.UI.DOM.passageLink("Large stables", "Farmyard Animals")); + stables.append(` have been built in one corner of ${V.farmyardName}, and are currently ${HL < 1 ? `empty` : `occupied by ${hooved}`} `); + } + + + + // MARK: Cages + + const + FL = V.felines.length, + + cats = FL === 1 ? V.felines[0] : FL < 3 ? + `several different breeds of cats` : + `all kinds of cats`, + felines = FL === 1 ? V.felines[0].species === "cat" ? + V.felines[0].breed : V.felines[0].speciesPlural : FL < 3 ? + `several different ${V.felines.every( + c => c.species === "cat") ? + `breeds of cats` : `species of felines`}` : + `all kinds of felines`, + + cages = document.createElement("div"), + cagesNote = document.createElement("span"), + cagesUpgrade = document.createElement("div"); + + cagesNote.classList.add("note"); + cagesUpgrade.classList.add("indent"); + + if (farmyardCages === 0) { + cages.append(App.UI.DOM.passageLink("Add cages", "Farmyard", + () => { + cashX(forceNeg(baseCost)); + V.farmyardCages = 1; + })); + + cagesNote.append(` Costs ${cashFormat(baseCost)}, will incur upkeep costs, and unlocks domestic felines`); + + cages.append(cagesNote); + } else if (farmyardCages === 1) { + cages.append(App.UI.DOM.passageLink("Cages", "Farmyard Animals")); + cages.append(` have been built in one corner of ${V.farmyardName}, and are currently ${FL < 1 ? `empty` : `occupied by ${cats}.`}`); + + if (V.rep > 10000) { + cagesUpgrade.append(App.UI.DOM.passageLink("Upgrade cages", "Farmyard", + () => { + cashX(forceNeg(upgradedCost)); + V.farmyardCages = 2; + })); + + cagesNote.append(` Costs ${cashFormat(upgradedCost)}, will incur additional upkeep costs, and unlocks exotic felines`); + + cagesUpgrade.append(cagesNote); + cages.append(cagesUpgrade); + } + } else if (farmyardCages === 2) { + cages.append(App.UI.DOM.passageLink("Large cages", "Farmyard Animals")); + cages.append(` have been built in one corner of ${V.farmyardName}, and are currently ${FL < 1 ? `empty` : `occupied by ${felines}`} `); + } + + + + // MARK: Remove Housing + + const + removeHousing = document.createElement("div"), + removeCost = ((farmyardKennels + farmyardStables + farmyardCages) * 5000) * V.upgradeMultiplierArcology; + + if (farmyardKennels || farmyardStables || farmyardCages) { + removeHousing.append(document.createElement("br")); + + removeHousing.append(App.UI.DOM.passageLink("Remove the animal housing", "Farmyard", + () => { + V.farmyardKennels = 0; + V.farmyardStables = 0; + V.farmyardCages = 0; + + V.farmyardShows = 0; + V.farmyardBreeding = 0; + V.farmyardRestraints = 0; + + V.canines = []; + V.hooved = []; + V.felines = []; + + App.Facilities.Farmyard.clearAnimalsBought(); + })); + + removeHousing.append(` Will cost ${cashFormat(removeCost)}`); + } + + + + frag.append(" ", kennels); + frag.append(" ", stables); + frag.append(" ", cages); + frag.append(" ", removeHousing); + + return frag; +}; diff --git a/src/facilities/farmyard/farmyard.tw b/src/facilities/farmyard/farmyard.tw index 60d10497b5c54964ad83dc078deb82b11b090c34..b05f981da858a72dada11eb43bfb02d94d837f20 100644 --- a/src/facilities/farmyard/farmyard.tw +++ b/src/facilities/farmyard/farmyard.tw @@ -12,58 +12,58 @@ <<set _CL = $canines.length, _HL = $hooved.length, _FL = $felines.length, _FyL = App.Entity.facilities.farmyard.employeesIDs().size>> <p class="scene-intro"> - $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and concrete that is $arcologies[0].name. Animals are kept in pens, tended to by your slaves, while <<if $farmyardUpgrade.hydroponics == 1>>rows of hydroponics equipment<<else>>makeshift fields<</if>> grow crops. + $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and concrete that is $arcologies[0].name. Animals are kept in pens, tended to by your slaves, while <<if $farmyardUpgrades.hydroponics == 1>>rows of hydroponics equipment<<else>>makeshift fields<</if>> grow crops. <<switch $farmyardDecoration>> <<case "Roman Revivalist">> - Its red tiles and white stone walls are the very picture of a Roman farm villa's construction, as are the marble statues and reliefs. Saturn and Ceres look over the prosperity of the fields<<if $seeBestiality == 1>>, Mercury watches over the health of the animals, and Feronia ensures strong litters in your slaves.<<else>> and Mercury watches over the health of the animals.<</if>>. The slaves here are all looked after well, as they have one of the most important jobs in $arcologies[0].name. + Its red tiles and white stone walls are the very picture of a Roman farm villa's construction, as are the marble statues and reliefs. Saturn and Ceres look over the prosperity of the fields<<if $seeBestiality>>, Mercury watches over the health of the animals, and Feronia ensures strong litters in your slaves.<<else>> and Mercury watches over the health of the animals.<</if>>. The slaves here are all looked after well, as they have one of the most important jobs in $arcologies[0].name. <<case "Aztec Revivalist">> It can't completely recreate the floating farms in the ancient Aztec fashion, but it comes as close as it can, shallow pseudo-canals dividing each field into multiple sections. Smooth stone and colorful murals cover the walls, depicting bloody stories of gods and mortals alike. <<case "Egyptian Revivalist">> - It does its best to capture the wide open nature of ancient Egyptian farms, including mimicking the irrigation systems fed by the Nile. The stone walls are decorated with murals detailing its construction and your prowess in general, <<if $seeBestiality == 1>>with animal-bloated slaves featured prominently.<<else>>hieroglyphs spelling out a volumes of praise.<</if>> + It does its best to capture the wide open nature of ancient Egyptian farms, including mimicking the irrigation systems fed by the Nile. The stone walls are decorated with murals detailing its construction and your prowess in general, <<if $seeBestiality>>with animal-bloated slaves featured prominently.<<else>>hieroglyphs spelling out a volumes of praise.<</if>> <<case "Edo Revivalist">> It does its best to mimic the rice patties and thatch roofed buildings of the Edo period despite the wide variety of crops tended by various slaves. Not every crop can thrive in flooded fields, but the ones that can take advantage of your attention to detail. <<case "Arabian Revivalist">> - //This is a placeholder// + Large plots of olive trees and date palms line the outer edges of the main crop area, while a combination of wheat, flax, and barley occupies the interior space. Irrigation canals snake through the area, ensuring every inch of cropland is well-watered. <<case "Chinese Revivalist">> - It does its best to capture the terraces that covered the ancient Chinese hills and mountains, turning every floor into ribbons of fields following a slight incline. Slaves wade through crops that can handle flooding and splash through the irrigation of the others when they aren't tending <<if $seeBestiality == 1>>or breeding with<</if>> your animals. + It does its best to capture the terraces that covered the ancient Chinese hills and mountains, turning every floor into ribbons of fields following a slight incline. Slaves wade through crops that can handle flooding and splash through the irrigation of the others when they aren't tending <<if $seeBestiality>>or breeding with<</if>> your animals. <<case "Chattel Religionist">> - It runs like a well oiled machine, slaves bent in humble service as they tend crops grown on the Prophet's command, or see to the animals' needs. Their clothing is tucked up and out of the way as they see to their tasks, keeping them clean as they work <<if $seeBestiality == 1>>around animal bloated bellies<</if>> as divine will dictates. + It runs like a well oiled machine, slaves bent in humble service as they tend crops grown on the Prophet's command, or see to the animals' needs. Their clothing is tucked up and out of the way as they see to their tasks, keeping them clean as they work <<if $seeBestiality>>around animal bloated bellies<</if>> as divine will dictates. <<case "Degradationist">> - It is constructed less as a converted warehouse and more as something to visit, allowing guests to enjoy the spectacle of slaves <<if $seeBestiality == 1>>being pounded by eager animals<<else>>elbow deep in scrubbing animal waste<</if>> to their satisfaction. + It is constructed less as a converted warehouse and more as something to visit, allowing guests to enjoy the spectacle of slaves <<if $seeBestiality>>being pounded by eager animals<<else>>elbow deep in scrubbing animal waste<</if>> to their satisfaction. <<case "Repopulation Focus">> - It teems with life, both in the belly of every animal and the belly of every slave, though the latter makes tending the fields difficult. They're ordered to take care, as they carry the future <<if $seeBestiality == 1>>of this farm<<else>>of the arcology<</if>> in their bellies. + It teems with life, both in the belly of every animal and the belly of every slave, though the latter makes tending the fields difficult. They're ordered to take care, as they carry the future <<if $seeBestiality>>of this farm<<else>>of the arcology<</if>> in their bellies. <<case "Eugenics">> - It holds a wide variety of crops and animals, but the best of the best is easy to find. They're set apart from the others, given only the best care and supplies<<if $seeBestiality == 1>>and bred with only the highest quality slaves<</if>>, while the sub-par stock is neglected off to the side. + It holds a wide variety of crops and animals, but the best of the best is easy to find. They're set apart from the others, given only the best care and supplies<<if $seeBestiality>>and bred with only the highest quality slaves<</if>>, while the sub-par stock is neglected off to the side. <<case "Asset Expansionist">> It is not easy to look after animals and till fields with such enormous body parts, but your slaves are diligent regardless, working hard to provide food and livestock for the arcology. <<case "Transformation Fetishist">> - //This is a placeholder// + /* TODO: */ <<case "Gender Radicalist">> - //This is a placeholder// + /* TODO: */ <<case "Gender Fundamentalist">> - //This is a placeholder// + /* TODO: */ <<case "Physical Idealist">> - Its animals are in exceptional shape, their coats unable to hide how muscular they are, requiring your slaves to be equally toned to control them. There's plenty of space for their exercise as well<<if $seeBestiality == 1>> and an abundance of curatives for the slaves full of their fierce kicking offspring<</if>>. + Its animals are in exceptional shape, their coats unable to hide how muscular they are, requiring your slaves to be equally toned to control them. There's plenty of space for their exercise as well<<if $seeBestiality>> and an abundance of curatives for the slaves full of their fierce kicking offspring<</if>>. <<case "Supremacist">> It is a clean and orderly operation, stables and cages mucked by a multitude of inferior slaves, along with grooming your animals and harvesting your crops. <<case "Subjugationist">> It is a clean and orderly operation, stables and cages mucked by a multitude of $arcologies[0].FSSubjugationistRace slaves, while the others are tasked with grooming your animals and harvesting your crops. <<case "Paternalist">> - It's full of healthy animals, crops, and slaves, the former's every need diligently looked after by the latter. The fields flourish to capacity under such care, and the animals give the distinct impression of happiness. <<if $seeBestiality == 1>>Some more than others if the growing bellies of your slaves are anything to go by, the only indication that such rutting takes place.<</if>> /* TODO: this sentence seems weird */ + It's full of healthy animals, crops, and slaves, the former's every need diligently looked after by the latter. The fields flourish to capacity under such care, and the animals give the distinct impression of happiness<<if $seeBestiality>> — some more than others if the growing bellies of your slaves are anything to go by, the only indication that such rutting takes place<</if>>. <<case "Pastoralist">> - //This is a placeholder// + /* TODO: */ <<case "Maturity Preferentialist">> - //This is a placeholder// + /* TODO: */ <<case "Youth Preferentialist">> - //This is a placeholder// + /* TODO: */ <<case "Body Purist">> - //This is a placeholder// + /* TODO: */ <<case "Slimness Enthusiast">> It features trim animals and slaves alike, not a pound of excess among them. The feed for both livestock and crops are carefully maintained to ensure optimal growth without waste, letting them flourish without being weighed down. <<case "Hedonistic">> - It features wider gates and stalls, for both the humans visiting or tending the occupants, and the animals starting to mimic their handlers <<if $seeBestiality == 1>>and company<</if>>, with plenty of seats along the way. + It features wider gates and stalls, for both the humans visiting or tending the occupants, and the animals starting to mimic their handlers <<if $seeBestiality>>and company<</if>>, with plenty of seats along the way. <<default>> - It is very much a converted warehouse still, sectioned off in various 'departments'<<if $farmyardUpgrade.machinery == 1>> with machinery placed where it can be<<if $farmyardUpgrade.hydroponics > 0>> and plumbing for the hydroponics system running every which way<</if>><</if>>. + It is very much a converted warehouse still, sectioned off in various 'departments'<<if $farmyardUpgrades.machinery == 1>> with machinery placed where it can be<<if $farmyardUpgrades.hydroponics > 0>> and plumbing for the hydroponics system running every which way<</if>><</if>>. <</switch>> <<if _FyL > 2>> @@ -79,7 +79,8 @@ <<if $farmMenials > 0>> <<set $menials += $farmMenials>> <</if>> - <<set $farmyardName = "the Farmyard", $farmyard = 0, $farmyardDecoration = "standard", $farmMenials = 0, $farmMenialsSpace = 0, $farmyardShows = 0, $farmyardBreeding = 0, $farmyardUpgrade = {pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0}, $farmyardCrops = 0, $farmyardKennels = 0, $farmyardStable = 0, $farmyardCages = 0, $activeCanine = 0, $activeHooved = 0, $activeFeline = 0, $animalsBought = {canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0}, $pitAnimal = 0, $pitAnimalType = 0, $canines = [], $hooved = [], $felines = []>> + <<set $farmyardName = "the Farmyard", $farmyard = 0, $farmyardDecoration = "standard", $farmMenials = 0, $farmMenialsSpace = 0, $farmyardShows = 0, $farmyardBreeding = 0, $farmyardUpgrade = {pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0}, $farmyardCrops = 0, $farmyardKennels = 0, $farmyardStables = 0, $farmyardCages = 0, $activeCanine = 0, $activeHooved = 0, $activeFeline = 0, $pitAnimal = 0, $pitAnimalType = 0, $canines = [], $hooved = [], $felines = []>> + <<run App.Facilities.Farmyard.clearAnimalsBought()>> <<run App.Arcology.cellUpgrade($building, App.Arcology.Cell.Manufacturing, "Farmyard", "Manufacturing")>> <</link>> </div> @@ -226,231 +227,12 @@ </span> <span id="upgrades"> -<<if $farmyardUpgrade.pump == 0>> - [[Upgrade the water pump|Farmyard][cashX(forceNeg(Math.trunc(5000*$upgradeMultiplierArcology)), "farmyard"), $farmyardUpgrade.pump = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(5000*$upgradeMultiplierArcology))>> and slightly increases crop yield. - </span> - <br> -<<else>> - The water pump in $farmyardName is a more efficient model, slightly improving the amount of crops $farmyardName produces. - <br> - <<if $farmyardUpgrade.fertilizer == 0>> - [[Use a higher-quality fertilizer|Farmyard][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology)), "farmyard"), $farmyardUpgrade.fertilizer = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology))>> moderately increases crop yield and slightly increases upkeep costs. - </span> - <br> - <<else>> - $farmyardNameCaps is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs. - <br> - <<if $farmyardUpgrade.hydroponics == 0>> - [[Purchase a hydroponics system|Farmyard][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology)), "farmyard"), $farmyardUpgrade.hydroponics = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology))>> and moderately decreases upkeep costs. - </span> - <br> - <<else>> - $farmyardNameCaps is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs. - <br> - <<if $farmyardUpgrade.seeds == 0>> - [[Purchase genetically modified seeds|Farmyard][cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"),$farmyardUpgrade.seeds = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(20000*$upgradeMultiplierArcology))>> and significantly increases crop yield and moderately increases upkeep costs. - </span> - <br> - <<else>> - $farmyardNameCaps is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs. - <br> - <<if $farmyardUpgrade.machinery == 0>> - [[Upgrade the machinery|Farmyard][cashX(forceNeg(Math.trunc(50000*$upgradeMultiplierArcology)), "farmyard"), $farmyardUpgrade.machinery = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(50000*$upgradeMultiplierArcology))>> significantly increases crop yield and significantly decreases upkeep costs. - </span> - <br> - <<else>> - The machinery in $farmyardName has been upgraded, and is more efficient, significantly increasing crop yields and significantly decreasing upkeep costs. - <br> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> +<<includeDOM App.Facilities.Farmyard.upgrades()>> +<br> </span> <span id="animalhousing"> -<<if ($farmyardKennels == 0)>> - <br> - [[Add kennels|Farmyard][cashX(forceNeg(Math.trunc(5000*$upgradeMultiplierArcology)), "farmyard"), $farmyardKennels = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(5000*$upgradeMultiplierArcology))>> and allows you to keep dogs - </span> - <br> -<<elseif ($farmyardKennels == 1)>> - <br> - <<link "Kennels" "FarmyardAnimals">><</link>> have been built in one corner of $farmyardName, and are currently <<if _CL <= 0>>empty.<<else>>occupied by - <<if _CL == 1>> - <<print $canines>>. - <<elseif _CL <= 3>> - a couple different breeds of dogs. - <<else>> - all kinds of dogs. - <</if>> - <</if>> - - <<if $rep > 10000>> - <br> - [[Upgrade kennels|Farmyard][cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $farmyardKennels = 2]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(20000*$upgradeMultiplierArcology))>> and allows you to keep exotic canines - </span> - <</if>> -<<elseif ($farmyardKennels == 2)>> - <br> - <<link "Large kennels" "FarmyardAnimals">><</link>> have been built in one corner of $farmyardName, and are currently <<if _CL <= 0>>empty.<<else>>occupied by - <<if _CL == 1>> - <<print $canines>>. - <<elseif _CL <= 3>> - a couple different - <<set $onlyDogs = $canines.every(c => c.species == "dog")>> - <<if $onlyDogs>> - breeds of dogs. - <<else>> - types of canines. - <</if>> - <<else>> - all kinds of canines. - <</if>> - <</if>> -<</if>> - -<<if ($farmyardStable == 0)>> - <br> - [[Add stables|Farmyard][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology)), "farmyard"), $farmyardStable = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology))>> and allows you to keep hooved animals - </span> - <br> -<<elseif ($farmyardStable == 1)>> - <br> - <<link "Stables" "FarmyardAnimals">><</link>> have been built at the far end of $farmyardName, and are currently <<if _HL <= 0>>empty.<<else>>occupied by - <<if _HL == 1>> - <<print $hooved>>. - <<elseif _HL <= 3>> - a couple different types of hooved animals. - <<else>> - all kinds of hooved animals. - <</if>> - <</if>> - <<if $rep > 15000>> - <br> - [[Upgrade stables|Farmyard][cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $farmyardStable = 2]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(20000*$upgradeMultiplierArcology))>> and allows you to keep exotic hooved animals - </span> - <</if>> -<<elseif $farmyardStable == 2>> - <br> - <<link "Large stables" "FarmyardAnimals">><</link>> have been build at the far end of $farmyardName, and are currently <<if _HL <= 0>>empty.<<else>>occupied by - <<if _HL == 1>> - <<print $hooved>>. - <<elseif _HL <= 3>> - a couple different types of hooved animals. - <<else>> - all kinds of hooved animals. - <</if>> - <</if>> -<</if>> - -<<if ($farmyardCages == 0)>> - <br> - [[Add cages|Farmyard][cashX(forceNeg(Math.trunc(5000*$upgradeMultiplierArcology)), "farmyard"), $farmyardCages = 1]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(5000*$upgradeMultiplierArcology))>> and allows you to keep cats - </span> - <br> -<<elseif ($farmyardCages == 1)>> - <br> - <<link "Cages" "FarmyardAnimals">><</link>> have been built in one corner of $farmyardName, and are currently <<if _FL <= 0>>empty.<<else>>occupied by - <<if _FL == 1>> - <<print $felines>>. - <<elseif _FL <= 3>> - a couple different breeds of cats. - <<else>> - all kinds of cats. - <</if>> - <</if>> - <<if $rep > 15000>> - <br> - [[Upgrade cages|Farmyard][cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $farmyardCages = 2]] - <span class="note"> - Costs <<print cashFormat(Math.trunc(20000*$upgradeMultiplierArcology))>> and allows to keep exotic felines - </span> - <</if>> - <br> -<<elseif ($farmyardCages == 2)>> - <br> - <<link "Large cages" "FarmyardAnimals">><</link>> have been built in one corner of $farmyardName, and are currently <<if _FL <= 0>>empty.<<else>>occupied by - <<if _FL == 1>> - <<print $felines>>. - <<elseif _FL <= 3>> - a couple different - <<set $onlyCats = $felines.every(f => f.species == "cat")>> - <<if $onlyCats>> - breeds of cats. - <<else>> - types of felines. - <</if>> - <<else>> - all kinds of felines. - <</if>> - <</if>> - <br> -<</if>> -<br> - -<<if $farmyardKennels > 0 || $farmyardStable > 0 || $farmyardCages > 0>> - <<set _removeCost = Math.trunc(($farmyardKennels+$farmyardStable+$farmyardCages)*5000)*$upgradeMultiplierArcology>> - [[Remove the animal housing|Farmyard][cashX(forceNeg(_removeCost), "farmyard"), $farmyardKennels = 0, $farmyardStable = 0, $farmyardCages = 0, $activeCanine = 0, $activeHooved = 0, $activeFeline = 0, $farmyardShows = 0, $farmyardBreeding = 0, $farmyardRestraints = 0, $animalsBought = { - canines: 0, - hooved: 0, - felines: 0, - labradorRetrievers: 0, - germanShepherds: 0, - goldenRetrievers: 0, - frenchBulldogs: 0, - bulldogs: 0, - beagles: 0, - poodles: 0, - rottweilers: 0, - yorkshireTerriers: 0, - siberianHuskies: 0, - horses: 0, - siameses: 0, - persians: 0, - maineCoons: 0, - ragdolls: 0, - bengals: 0, - abbysinians: 0, - birmans: 0, - orientalShorthairs: 0, - sphynxes: 0, - russianBlues: 0, - wolves: 0, - foxes: 0, - jackals: 0, - dingos: 0, - zebras: 0, - cougars: 0, - jaguars: 0, - pumas: 0, - lynx: 0, - leopards: 0, - lions: 0, - tigers: 0 - }, $canines = [], $hooved = [], $felines = []]] - //Will cost @@.yellowgreen;<<print cashFormat(_removeCost)>>@@// -<</if>> +<<includeDOM App.Facilities.Farmyard.animalHousing()>> </span> <br><hr><br> diff --git a/src/facilities/farmyard/farmyardAnimals.tw b/src/facilities/farmyard/farmyardAnimals.tw index 9ab40b0e9d5b48597187d3fe392dbd5652ef551f..ede08720990317141f558c395a6802701d75547f 100644 --- a/src/facilities/farmyard/farmyardAnimals.tw +++ b/src/facilities/farmyard/farmyardAnimals.tw @@ -1,10 +1,10 @@ -:: FarmyardAnimals [nobr] +:: Farmyard Animals [nobr] -<<set $nextButton = "Back", $nextLink = "Farmyard", $returnTo = "FarmyardAnimals", $encyclopedia = "Farmyard">> +<<set $nextButton = "Back", $nextLink = "Farmyard", $returnTo = "Farmyard Animals", $encyclopedia = "Farmyard">> /* TODO: write some descriptions for the different animals in their cages */ -<<if $farmyardKennels > 0 || $farmyardStable > 0 || $farmyardCages > 0>> +<<if $farmyardKennels > 0 || $farmyardStables > 0 || $farmyardCages > 0>> <br> ''Domestic Animals'' <hr> @@ -15,12 +15,14 @@ <br>//Cost <<print cashFormat(20000)>> each// /* TODO: this number is mostly a placeholder, will need adjusting */ <br> <<if $animalsBought.labradorRetrievers <= 0>> - <<link "Purchase dogs" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.labradorRetrievers = 1, $animalsBought.canines += 1, $canines.push("Labrador Retrievers")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Labrador Retriever", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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>> @@ -28,42 +30,42 @@ <</if>> <</if>> -<<if $farmyardStable > 0>> +<<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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.horses = 1, $animalsBought.hooved += 1, $hooved.push("horses")>><</link>> + <<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|FarmyardAnimals][$activeHooved = {species: "horse", speciesCap: "Horse", speciesPlural: "horses", type: "hooved", dickSize: "huge", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bulls = 1, $animalsBought.hooved += 1, $hooved.push("bulls")>><</link>> + <<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|FarmyardAnimals][$activeHooved = {species: "bull", speciesCap: "Bull", speciesPlural: "bulls", type: "hooved", dickSize: "huge", ballType: "horse"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.pigs = 1, $animalsBought.hooved += 1, $hooved.push("pigs")>><</link>> + <<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|FarmyardAnimals][$activeHooved = {species: "pig", speciesCap: "Pig", speciesPlural: "pigs", type: "hooved", dickSize: "large", ballType: "horse"}]] + [[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>> @@ -73,7 +75,7 @@ <</if>> <br> -<<if $farmyardKennels > 1 || $farmyardStable > 1 || $farmyardCages > 1>> +<<if $farmyardKennels > 1 || $farmyardStables > 1 || $farmyardCages > 1>> <br> ''Exotic Animals'' <hr> @@ -84,13 +86,15 @@ <br>//Cost <<print cashFormat(20000)>> each// <br> <<if $animalsBought.wolves <= 0>> - <<link "Purchase wolves" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.wolves = 1, $animalsBought.canines += 1, $canines.push("wolves")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "wolf", speciesCap: "Wolf", speciesPlural: "wolves", type: "canine", dickSize: "large", ballType: "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>> @@ -104,13 +108,14 @@ <br>//Cost <<print cashFormat(30000)>> each// /* TODO: this number is mostly a placeholder, will need adjusting */ <br> <<if $animalsBought.lions <= 0>> - <<link "Purchase lions" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.lions = 1, $animalsBought.felines += 1, $felines.push("lions")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "lion", speciesCap: "Lion", speciesPlural: "lions", type: "feline", dickSize: "large", ballType: "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>> diff --git a/src/facilities/farmyard/farmyardReport.tw b/src/facilities/farmyard/farmyardReport.tw index 7d002ca8e0004040250904520b70ab5918708443..f1f3443c0b0576a383498b8498646cc3c34cac52 100644 --- a/src/facilities/farmyard/farmyardReport.tw +++ b/src/facilities/farmyard/farmyardReport.tw @@ -1,3 +1,3 @@ :: Farmyard Report [nobr] -<<print App.Facilities.Farmyard.farmyardReport()>> +<<includeDOM App.Facilities.Farmyard.farmyardReport()>> diff --git a/src/facilities/farmyard/food/foodAmount.js b/src/facilities/farmyard/food/foodAmount.js new file mode 100644 index 0000000000000000000000000000000000000000..af0650ff655820872849bdab1d2a43bf34bd86fc --- /dev/null +++ b/src/facilities/farmyard/food/foodAmount.js @@ -0,0 +1,86 @@ +/** + * @param {App.Entity.SlaveState} slave + * @returns {number} + */ +App.Facilities.Farmyard.foodAmount = function(slave) { + let food = 150; + + if (!slave) { + throw `Current slave is not valid. Please report this`; + } + + if (V.farmyardUpgrades.pump) { + food += 15; + } + + if (V.farmyardUpgrades.fertilizer) { + food += 35; + } + + if (V.farmyardUpgrades.seeds) { + food += 65; + } + + if (V.farmyardUpgrades.machinery) { + food += 65; + } + + if (S.Farmer !== 0) { + food *= 1.1; + + if (S.Farmer.skill.farmer >= V.masteredXP) { + food *= 1.2; + } + + if (setup.farmerCareers.includes(S.Farmer.career)) { + food *= 1.2; + } + } + + if (slave.devotion > 50) { + food *= 1.1; + } else if (slave.devotion < -50) { + food *= 0.8; + } + + if (slaveResting(slave)) { + food *= 0.9; + } else if (slave.health.tired + 20 >= 90 && !willWorkToDeath(slave)) { + slave.devotion -= 10; + slave.trust -= 5; + food *= 0.9; + } + + if (slave.muscles > 30) { // slave is muscular or more + food *= 1.1; + } else if (slave.muscles <= -6) { // slave is weak or less + food *= 0.8; + } + + if (slave.weight > 95) { // slave is overweight or more + food *= 0.9; + } else if (slave.weight > 130) { // slave is fat or more + food *= 0.8; + } else if (slave.weight > 160) { // slave is obese or more + food *= 0.7; + } else if (slave.weight > 190) { // slave is very obese or more + food *= 0.6; + } + + if (!canSee(slave)) { // slave is blind + food *= 0.6; + } else if (!canSeePerfectly(slave)) { // slave is nearsighted + food *= 0.8; + } + + if (slave.hears === -1) { // slave is hard of hearing + food *= 0.8; + } else if (slave.hears < -1) { // slave is deaf + food *= 0.6; + } + + food *= restEffects(slave, 20); + food = Math.trunc(Math.max(food, 1)); + + return food; +}; diff --git a/src/facilities/farmyard/futureAnimals.tw b/src/facilities/farmyard/futureAnimals.tw index eda757aaee2bf7455bb3eafbf37d40d74b2229e2..f4d1ab464f04368977ba10d8a05b8df03935f976 100644 --- a/src/facilities/farmyard/futureAnimals.tw +++ b/src/facilities/farmyard/futureAnimals.tw @@ -1,108 +1,108 @@ /* Putting them here because commenting them out was breaking for some reason */ <<if $animalsBought.germanShepherds == 0>> - <<link "Purchase German Shepherds" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.germanShepherds = 1, $animalsBought.canines += 1, $canines.push("German Shepherds")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "German Shepherd", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.goldenRetrievers = 1, $animalsBought.canines += 1, $canines.push("Golden Retrievers")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Golden Retriever", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.frenchBulldogs = 1, $animalsBought.canines += 1, $canines.push("French Bulldogs")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "French Bulldog", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bulldogs = 1, $animalsBought.canines += 1, $canines.push("Bulldogs")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Bulldog", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.beagles = 1, $animalsBought.canines += 1, $canines.push("Beagles")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Beagle", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.poodles = 1, $animalsBought.canines += 1, $canines.push("Poodles")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Poodle", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.rottweilers = 1, $animalsBought.canines += 1, $canines.push("Rottweilers")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Rottweiler", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.yorkshireTerriers = 1, $animalsBought.canines += 1, $canines.push("Yorkshire Terriers")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Yorkshire Terrier", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.siberianHuskies = 1, $animalsBought.canines += 1, $canines.push("Siberian Huskies")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dog", speciesCap: "Dog", speciesPlural: "dogs", breed: "Siberian Husky", type: "canine", dickSize: "big", ballType: "dog"}]] + [[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>> @@ -114,120 +114,120 @@ Cats: <br><br> <<if $animalsBought.siameses == 0>> - <<link "Purchase Siamese cats" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.siameses = 1, $animalsBought.felines += 1, $felines.push("Siamese cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Siamese", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.persians = 1, $animalsBought.felines += 1, $felines.push("Persian cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Persian", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.maineCoons = 1, $animalsBought.felines += 1, $felines.push("Maine Coon cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Maine Coon", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.ragdolls = 1, $animalsBought.felines += 1, $felines.push("Ragdoll cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Ragdoll", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.bengals = 1, $animalsBought.felines += 1, $felines.push("Bengal cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Bengal", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.abbysinians = 1, $animalsBought.felines += 1, $felines.push("Abbysinian cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Abbysinian", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.birmans = 1, $animalsBought.felines += 1, $felines.push("Birman cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Birman", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.orientalShorthairs = 1, $animalsBought.felines += 1, $felines.push("Oriental Shorthair cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Oriental Shorthair", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.sphynxes = 1, $animalsBought.felines += 1, $felines.push("Sphynx cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Sphynx", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.russianBlues = 1, $animalsBought.felines += 1, $felines.push("Russian Blue cats")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cat", speciesCap: "Cat", speciesPlural: "cats", breed: "Russian Blue", type: "feline", dickSize: "small", ballType: "cat"}]] + [[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>> @@ -236,39 +236,39 @@ <</if>> <<if $animalsBought.foxes == 0>> - <<link "Purchase foxes" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.foxes = 1, $animalsBought.canines += 1, $canines.push("foxes")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "fox", speciesCap: "Fox", speciesPlural: "foxes", type: "canine", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.jackals = 1, $animalsBought.canines += 1, $canines.push("jackals")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "jackal", speciesCap: "Jackal", speciesPlural: "jackals", type: "canine", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.dingos = 1, $animalsBought.canines += 1, $canines.push("dingos")>><</link>> + <<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|FarmyardAnimals][$activeCanine = {species: "dingo", speciesCap: "Dingo", speciesPlural: "dingos", type: "canine", dickSize: "large", ballType: "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>> @@ -276,16 +276,16 @@ <</if>> -<<if $farmyardStable > 1>> +<<if $farmyardStables > 1>> <br> Hooved Animals: <br><br> <<if $animalsBought.zebras == 0>> - <<link "Purchase zebras" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(20000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.zebras = 1, $animalsBought.hooved += 1, $hooved.push("zebras")>><</link>> + <<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|FarmyardAnimals][$activeHooved = {species: "zebra", speciesCap: "Zebra", speciesPlural: "zebras", type: "hooved", dickSize: "huge", ballType: "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>> @@ -294,65 +294,65 @@ <</if>> <<if $animalsBought.cougars == 0>> - <<link "Purchase cougars" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.cougars = 1, $animalsBought.felines += 1, $felines.push("cougars")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "cougar", speciesCap: "Cougar", speciesPlural: "cougars", type: "feline", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.jaguars = 1, $animalsBought.felines += 1, $felines.push("jaguars")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "jaguar", speciesCap: "Jaguar", speciesPlural: "jaguars", type: "feline", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.lynx = 1, $animalsBought.felines += 1, $felines.push("lynx")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "lynx", speciesCap: "Lynx", speciesPlural: "lynx", type: "feline", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.leopards = 1, $animalsBought.felines += 1, $felines.push("leopards")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "leopard", speciesCap: "Leopard", speciesPlural: "leopards", type: "feline", dickSize: "large", ballType: "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" "FarmyardAnimals">><<set cashX(forceNeg(Math.trunc(30000*$upgradeMultiplierArcology)), "farmyard"), $animalsBought.tigers = 1, $animalsBought.felines += 1, $felines.push("tigers")>><</link>> + <<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|FarmyardAnimals][$activeFeline = {species: "tiger", speciesCap: "Tiger", speciesPlural: "tigers", type: "feline", dickSize: "large", ballType: "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>> diff --git a/src/facilities/farmyard/reports/farmyardReport.js b/src/facilities/farmyard/reports/farmyardReport.js index e1905757b1b701bb909a612a68664c10dd0be6ce..05b0ae7a5b814ac304e302f0c80f5736a59f9a66 100644 --- a/src/facilities/farmyard/reports/farmyardReport.js +++ b/src/facilities/farmyard/reports/farmyardReport.js @@ -1,77 +1,57 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { - "use strict"; + let frag = document.createDocumentFragment(); const - Farmer = V.Farmer, - FL = App.Entity.facilities.farmyard.employeesIDs().size; + slaves = App.Utils.sortedEmployees(App.Entity.facilities.farmyard), + devBonus = (V.farmyardDecoration !== "standard") ? 1 : 0, + Farmer = S.Farmer; let - t = ``, profits = 0, - foodWeek = 0; - let he, him, his, hers, himself, girl, loli, He, His; // TODO: alternative method? + foodWeek = 0, + farmerBonus = 0; - // FARMER + // MARK: Farmer - const farmerHealth = slave => { + function farmerChanges() { + farmerHealth(Farmer); + farmerDevotion(Farmer); + farmerTrust(Farmer); + farmerLivingRules(Farmer); + farmerCashBonus(Farmer); + } + + function farmerHealth(slave) { if (slave.health.condition < -80) { - improveCondition(slave, 20); + improveCondition(Farmer, 20); } else if (slave.health.condition < -40) { - improveCondition(slave, 15); + improveCondition(Farmer, 15); } else if (slave.health.condition < 0) { - improveCondition(slave, 10); + improveCondition(Farmer, 10); } else if (slave.health.condition < 90) { - improveCondition(slave, 7); + improveCondition(Farmer, 7); } - }; + } - const farmerFetish = slave => { - if (slave.fetish !== 'dom') { - if (fetishChangeChance(slave) > jsRandom(0, 100)) { - slave.fetishKnown = 1; - slave.fetish = 'dom'; - return 1; - } - } else if (!slave.fetishKnown) { - slave.fetishKnown = 1; - return 1; - } else { - slave.fetishStrength += 4; - return 2; - } - }; + function farmerDevotion(slave) { + slave.devotion += devBonus; - const farmerFetishEffects = (fetish = 0) => { - if (fetish === 1) { - return `${He} isn't above sampling the merchandise ${himself}; before long it's obvious to ${his} workers that ${he} <span class="lightcoral">really likes fucking them.</span> `; - } else if (fetish === 2) { - return `${He}'s careful that all of the farmhands under ${his} supervision are all ready to work every morning, and ${he} <span class="lightsalmon">becomes more dominant.</span> `; + if (slave.devotion < 45) { + slave.devotion += 5; } - }; - - const farmerSkill = slave => { - let t = ``; + } - if (slave.skill.farmer <= 10) { - t += `Though ${slave.slaveName} does ${his} best to manage the farmyard, with ${his} lack of skill ${he} can do little. `; - } else if (slave.skill.farmer <= 30) { - t += `${slave.slaveName}'s basic skills marginally <span class="yellowgreen">improve</span> business at ${V.farmyardName}. `; - } else if (slave.skill.farmer <= 60) { - t += `${slave.slaveName}'s skills <span class="yellowgreen">improve</span> business at ${V.farmyardName}. `; - } else if (slave.skill.farmer < 100) { - t += `${slave.slaveName}'s skills greatly <span class="yellowgreen">improve</span> business at ${V.farmyardName}. `; - } else { - t += `${slave.slaveName}'s mastery immensely <span class="yellowgreen">improves</span> business at ${V.farmyardName}. `; + function farmerTrust(slave) { + if (slave.trust < 45) { + slave.trust += 5; } + } - t += slave.actualAge > 35 ?`${His} age and experience also contribute. ` : ``; - - return t; - }; + const farmerLivingRules = slave => slave.rules.living = 'luxurious'; - const farmerCashBonus = slave => { + function farmerCashBonus(slave) { let FarmerCashBonus = Math.min(0.2, slave.skill.farmer * 0.002); FarmerCashBonus += slave.intelligence + slave.intelligenceImplant > 15 ? 0.05 : 0; @@ -93,6 +73,7 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { FarmerCashBonus += 0.05; } + // TODO: keep this? if (Farmer.relationshipTarget === slave.ID) { FarmerCashBonus -= 0.05; } else if (areRelated(Farmer, slave)) { @@ -100,142 +81,209 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { } return FarmerCashBonus; - }; + } - const farmerExperience = slave => { - if (setup.farmerCareers.includes(slave.career)) { - return `${He} has experience from ${his} life before ${he} was a slave that helps ${him} in the difficult life of managing animals and property. `; - } else if (slave.skill.farmer >= V.masteredXP) { - return `${He} has experience from working for you that helps ${him} in the difficult life of managing animals and property. `; + + function farmerText() { + let r = []; + + r.push(farmerIntro(Farmer)); + r.push(farmerRelationshipPC(Farmer)); + r.push(farmerFetishEffects(Farmer, farmerFetish(Farmer))); + r.push(farmerSkill(Farmer)); + r.push(farmerAgeSkill(Farmer)); + r.push(farmerExperience(Farmer)); + r.push(farmerIntelligence(Farmer)); + r.push(farmerSmell(Farmer)); + r.push(farmerRelationshipSlaves(Farmer)); + r.push(farmerContracts(Farmer)); + + return r.join(' '); + } + + function farmerFetish(slave) { + if (slave.fetish !== 'dom') { + if (fetishChangeChance(slave) > jsRandom(0, 100)) { + slave.fetishKnown = 1; + slave.fetish = 'dom'; + return 1; + } + } else if (!slave.fetishKnown) { + slave.fetishKnown = 1; + return 1; } else { - slave.skill.farmer += jsRandom(1, Math.ceil((slave.intelligence + slave.intelligenceImplant) / 32)); + slave.fetishStrength += 4; + return 2; } - }; + } + + function farmerFetishEffects(slave, fetish = 0) { + const + { he, his, himself, He } = getPronouns(slave); + if (fetish === 1) { + return `${He} isn't above sampling the merchandise ${himself}; before long it's obvious to ${his} workers that ${he} <span class="lightcoral">really likes fucking them.</span> `; + } else if (fetish === 2) { + return `${He}'s careful that all of the farmhands under ${his} supervision are all ready to work every morning, and ${he} <span class="lightsalmon">becomes more dominant.</span> `; + } + } + + function farmerSkill(slave) { + const + { he, his, His } = getPronouns(slave); + + let r = []; + + if (slave.skill.farmer <= 10) { + r.push(`Though ${slave.slaveName} does ${his} best to manage the farmyard, with ${his} lack of skill ${he} can do little.`); + } else if (slave.skill.farmer <= 30) { + r.push(`${slave.slaveName}'s basic skills marginally <span class="yellowgreen">improve</span> business at ${V.farmyardName}.`); + } else if (slave.skill.farmer <= 60) { + r.push(`${slave.slaveName}'s skills <span class="yellowgreen">improve</span> business at ${V.farmyardName}.`); + } else if (slave.skill.farmer < 100) { + r.push(`${slave.slaveName}'s skills greatly <span class="yellowgreen">improve</span> business at ${V.farmyardName}.`); + } else { + r.push(`${slave.slaveName}'s mastery immensely <span class="yellowgreen">improves</span> business at ${V.farmyardName}.`); + } - const farmerDick = slave => { - if (slave.dick > 2 && canPenetrate(slave)) { - return `${His} turgid dick helps ${him} manage ${his} workers. `; + if (slave.actualAge > 35) { + r.push(`${His} age and experience also contribute.`); } - }; + return r.join(' '); + } + + function farmerExperience(slave) { + const { he, his, him, He } = getPronouns(slave); + + if (setup.farmerCareers.includes(slave.career)) { + return `${He} has experience from ${his} life before ${he} was a slave that helps ${him} in the difficult life of managing animals and property.`; + } else if (slave.skill.farmer >= V.masteredXP) { + return `${He} has experience from working for you that helps ${him} in the difficult life of managing animals and property.`; + } else { + slave.skill.farmer += jsRandom(1, Math.ceil((slave.intelligence + slave.intelligenceImplant) / 32)); + } + } - /** @param {App.Entity.SlaveState} Farmer */ function farmerRelationshipSlaves(Farmer) { - const p = getPronouns(Farmer); - for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.farmyard)) { + const { he, his, He } = getPronouns(Farmer); - let t = ``; + for (const slave of slaves) { + let r = []; if (Farmer.rivalryTarget === slave.ID) { - t += `${p.He} forces ${p.his} ${rivalryTerm(Farmer)} to service all the slaves in ${V.farmyardName}. `; // TODO: not sure about this + r.push(`${He} leverages the fact that ${he} is ${slave.slaveName}'s superior to make ${his} ${rivalryTerm(Farmer)}'s life a living hell.`); slave.devotion -= 2; slave.trust -= 2; + if (canDoVaginal(slave)) { seX(slave, 'vaginal', 'public', 'penetrative', 10); } + if (canDoAnal(slave)) { seX(slave, 'anal', 'public', 'penetrative', 10); } + seX(slave, 'oral', 'public', 'penetrative', 10); if (jsRandom(1, 100) > 65) { Farmer.rivalry++; slave.rivalry++; } } else if (Farmer.relationshipTarget === slave.ID) { - t += `${p.He} dotes over ${p.his} ${relationshipTerm(Farmer)}, ${slave.slaveName}, making sure ${he} isn't worked too hard, but unfortunately manages to get in the way of ${his} work. `; + r.push(`${He} dotes over ${his} ${relationshipTerm(Farmer)}, ${slave.slaveName}, making sure ${he} isn't worked too hard, but unfortunately manages to get in the way of ${his} work.`); slave.devotion++; } else if (areRelated(Farmer, slave)) { - t += `${p.He} pays special attention to ${p.his} ${relativeTerm(Farmer, slave)}, ${slave.slaveName}, making sure ${he} is treated well and showing off ${his} skills. `; + r.push(`${He} pays special attention to ${his} ${relativeTerm(Farmer, slave)}, ${slave.slaveName}, making sure ${he} is treated well and showing off ${his} skills.`); slave.trust++; } - return t; + return r; } } - const farmerWorks = slave => { + function farmerContracts(slave) { + const { he, his, himself } = getPronouns(slave); + let - t = ``, - oldCash = V.cash, - seed, - beauty; + r = [], + seed = V.farmyardShowgirls ? App.Facilities.Farmyard.farmShowsIncome(slave) : jsRandom(1, 10) * (jsRandom(150, 170) + (farmerBonus * 10)); - if (V.showEWD) { - t += `<br> ${He} ${App.SlaveAssignment.workTheFarm(slave)}`; - } else { - App.SlaveAssignment.workTheFarm(slave); + if (V.farmyardShows && !V.farmyardShowgirls) { + r.push(`<p class="indent">Since ${he} doesn't have enough showgirls to entertain your arcology's citizens, ${he} puts on shows with your animals on ${his} own, earning <span class="yellowgreen">${cashFormat(seed)}.</span></p>`); + } else if (!V.farmyardFarmers) { + r.push(`<p class="indent">Since ${V.farmyardName} doesn't have anyone tending to the crops, ${he} looks after them ${himself}, earning <span class="yellowgreen">${cashFormat(seed)}.</span></p>`); } - seed = V.cash - oldCash; - cashX(Math.trunc(0.5 * seed), 'farmyard'); - seed = Math.trunc(1.5 * seed); - profits += seed; - beauty = Beauty(V.activeSlave); + return r; + } - t += `<br> Since ${he} doesn't have enough farmhands to manage to keep ${him} busy, ${he} sees ${beauty} customers ${himself} (${Math.trunc(beauty / 7)} a day), earning you <span class="yellowgreen">${cashFormat(seed)}</span> ${He} can charge more for ${his} time, since many citizens find it erotic to fuck the Farmer. `; + function farmerRelationshipPC(slave) { + const { he, his, wife } = getPronouns(slave); - return t; - }; + if (slave.relationship === -3 && slave.devotion > 50) { + return `As your loving ${wife}, ${he} does ${his} best to ensure ${V.farmyardName} runs smoothly.`; + } + } - const farmerEndWeek = slave => { - let t = ``; + function farmerAgeSkill(slave) { + const { His } = getPronouns(slave); - if (V.showEWD) { - t += `<br><br>`; - /* 000-250-006 */ // TODO: legacy - needed? - if (V.seeImages && V.seeReportImages) { - t += `<div class="imageRef tinyImg"> - ${SlaveArt(slave, 0, 0)} - </div>`; - } - /* 000-250-006 */ - t += `<span class="slave-name">${SlaveFullName(slave)}</span> is serving as the Farmer. `; - t += `<br> `; - t += App.SlaveAssignment.choosesOwnClothes(slave); - t += `<<include "SA rules">>`; - t += `<<include "SA diet">>`; - t += `<<include "SA long term effects">>`; - t += App.SlaveAssignment.drugs(slave); - t += `<<include "SA relationships">>`; - t += `<<include "SA rivalries">>`; - t += `<br><<include "SA devotion">>`; - } else { - App.SlaveAssignment.choosesOwnClothes(slave); - t += `<<silently>><<include "SA rules">><</silently>>`; - t += `<<silently>><<include "SA diet">><</silently>>`; - t += `<<silently>><<include "SA long term effects">><</silently>>`; - App.SlaveAssignment.drugs(slave); - t += `<<silently>><<include "SA relationships">><</silently>>`; - t += `<<silently>><<include "SA rivalries">><</silently>>`; - t += `<<silently>><br><<include "SA devotion">><</silently>>`; + if (slave.actualAge > 35) { + return `${His} age and experience also contribute.`; } + } - return t; - }; + function farmerIntelligence(slave) { + const { He } = getPronouns(slave); - const farmerRelationshipPC = slave => slave.relationship === -3 && slave.devotion > 50 ? `As your loving ${wife}, ${he} does ${his} best to ensure ${V.farmyardName} runs smoothly. ` : ``; + if (slave.intelligence + slave.intelligenceImplant > 15) { + return `${He} is a clever manager.`; + } + } - const farmerAgeSkill = slave => slave.actualAge > 35 ? `${His} age and experience also contribute. ` : ``; + function farmerSmell(slave) { + const { him, His } = getPronouns(slave); - const farmerIntelligence = slave => slave.intelligence + slave.intelligenceImplant > 15 ? `${He} is a clever manager. ` : ``; + if (!canSmell(slave)) { + return `${His} lack of a sense of smell protects ${him} from that omnipresent barnyard stench.`; + } + } - const farmerSmell = slave => !canSmell(slave) ? `${His} lack of a sense of smell protects ${him} from that omnipresent barnyard stench. ` : ``; + const farmerIntro = slave => `<span class="indent">${SlaveFullName(slave)} is serving as the Farmer</span>.`; - const farmerIntro = slave => ` ${SlaveFullName(slave)} is serving as the Farmer. `; + if (Farmer) { + const + farmerEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); - const farmerDevotion = slave => slave.devotion < 45 ? slave.devotion += 5 : null; + V.i = V.slaveIndices[Farmer.ID]; + App.Utils.setLocalPronouns(Farmer); // needed for "include"s - const farmerTrust = slave => slave.trust < 45 ? slave.trust += 5 : null; + if (V.showEWD) { + const + farmerEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - const farmerLivingRules = slave => slave.rules.living !== 'luxurious' ? slave.rules.living = 'luxurious' : null; + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", farmerEntry, App.Art.SlaveArtElement(Farmer, 0, 0), ["imageRef", "tinyImg"]); + } + $(farmerEntry).append(`<span class="slave-name">${SlaveFullName(Farmer)}</span> is serving as the Farmer.`); + $(farmerEntry).append(App.SlaveAssignment.standardSlaveReport(Farmer, false)); + } else { + App.SlaveAssignment.standardSlaveReport(Farmer, true); + } + + farmerChanges(); + $(farmerEffects).append(farmerText()); + } - // FARMHANDS - const farmhandCount = count => count > 0 ? ` There ${count !== 1 ? `are ${count} farmhands` : `is one farmhand`} working out of ${V.farmyardName}.` : ``; + // MARK: Farmhands - const farmhandLivingRules = slave => { + function farmhandCount(count) { + return `<strong>There ${count > 1 ? `are ${count} farmhands` : `is one farmhand`} working out of ${V.farmyardName}.</strong>`; + } + + function farmhandLivingRules(slave) { switch (V.farmyardDecoration) { case 'Degradation': case 'standard': @@ -246,11 +294,11 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { break; default: slave.rules.living = 'normal'; + break; } - // TODO: should FS with 'spare' living rules cause minor health damage and devotion / trust loss? - }; + } - const farmhandHealth = slave => { + function farmhandHealth(slave) { if (slave.health.condition < -80) { improveCondition(slave, 20); } else if (slave.health.condition < -40) { @@ -260,10 +308,9 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { } else if (slave.health.condition < 90) { improveCondition(slave, 7); } - }; + } - // TODO: check over all of these numbers, make sure they make sense - const farmhandDevotion = slave => { + function farmhandDevotion(slave) { if (slave.devotion <= 20 && slave.trust >= -20) { slave.devotion -= 5; slave.trust -= 5; } else if (slave.devotion < 45) { @@ -271,84 +318,109 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { } else if (slave.devotion > 50) { slave.devotion -= 4; } - }; - - const farmhandEndWeek = slave => { - let t = ``; - - if (V.showEWD) { - t += `<br><br>`; - /* 000-250-006 */ // TODO: legacy - needed? - if (V.seeImages && V.seeReportImages) { - t += `<div class="imageRef tinyImg"> - ${SlaveArt(slave, 0, 0)} - </div>`; - } - /* 000-250-006 */ - t += `<span class="slave-name">${SlaveFullName(slave)}</span> ${slave.choosesOwnAssignment === 2 ? `<<include "SA chooses own job">>` : `is working out of ${V.farmyardName}`}. `; - t += `<br> ${He} ${App.SlaveAssignment.workTheFarm(slave)}`; - t += `<br> `; - t += App.SlaveAssignment.choosesOwnClothes(slave); - t += `<<include "SA rules">>`; - t += `<<include "SA diet">>`; - t += `<<include "SA long term effects">>`; - t += App.SlaveAssignment.drugs(slave); - t += `<<include "SA relationships">>`; - t += `<<include "SA rivalries">>`; - t += `<br><<include "SA devotion">>`; - } else { - t += `<<silently>><<include "SA chooses own job">><</silently>>`; - App.SlaveAssignment.choosesOwnClothes(slave); - t += `<<silently>><<include "SA rules">><</silently>>`; - t += `<<silently>><<include "SA diet">><</silently>>`; - t += `<<silently>><<include "SA long term effects">><</silently>>`; - App.SlaveAssignment.drugs(slave); - t += `<<silently>><<include "SA relationships">><</silently>>`; - t += `<<silently>><<include "SA rivalries">><</silently>>`; - t += `<<silently>><br><<include "SA devotion">><</silently>>`; - } - - return t; - }; + } - const farmhandProfit = slave => { + function farmhandProfit(slave) { let incomeStats = getSlaveStatisticData(slave, slave.assignment === Job.FARMYARD ? V.facility.farmyard : undefined); return incomeStats.income; - }; + } - const farmhandFood = slave => { + function farmhandFood(slave) { let incomeStats = getSlaveStatisticData(slave, slave.assignment === Job.FARMYARD ? V.facility.farmyard : undefined), - foodWeek = 0; + foodWeek = incomeStats.food || 0; - foodWeek += incomeStats.food; if (V.farmMenials > 0) { foodWeek += (V.farmMenials * 350); } return foodWeek; - }; + } - const farmhandTrust = slave => slave.trust < 30 ? slave.trust += 5 : null; + function farmhandTrust(slave) { + if (slave.trust < 30) { + slave.trust += 5; + } + } - const farmhandEnergy = slave => slave.energy > 40 && slave.energy < 95 ? slave.energy++ : null; + function farmhandEnergy(slave) { + if (slave.energy > 40 && slave.energy < 95) { + slave.energy++; + } + } + if (slaves) { + const intro = App.UI.DOM.appendNewElement("p", frag, '', "indent"); - // MENIALS + let r = []; + + r.push(farmhandCount(slaves.length)); + + for (const slave of slaves) { + V.i = V.slaveIndices[slave.ID]; + + slave.devotion += devBonus; + + App.Utils.setLocalPronouns(slave); // needed for "include"s + + if (V.showEWD) { + const + slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); + + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + + $(slaveEntry).append(`<span class="slave-name">${SlaveFullName(slave)}</span> `); + + if (slave.choosesOwnAssignment === 2) { + $(slaveEntry).append(App.UI.DOM.renderPassage("SA chooses own job")); + } else { + $(slaveEntry).append(`is working out of ${V.farmyardName}.`); + } - if (V.farmMenials > 0) { + farmhandLivingRules(slave); + farmhandHealth(slave); + farmhandDevotion(slave); + farmhandTrust(slave); + farmhandEnergy(slave); + farmhandFood(slave); + + profits += farmhandProfit(slave); + + const farmhandContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); + + $(farmhandContent).append(App.SlaveAssignment.workTheFarm(slave)); + $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { // silently discard return values + App.SlaveAssignment.workTheFarm(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + $(intro).append(r); + } + + + + // MARK: Menials + + if (V.farmMenials) { let farmMenialProductivity = 9; - if (V.farmyardUpgrade.pump) { + if (V.farmyardUpgrades.pump) { farmMenialProductivity += 1; } - if (V.farmyardUpgrade.fertilizer) { + + if (V.farmyardUpgrades.fertilizer) { farmMenialProductivity += 2; } - if (V.farmyardUpgrade.seeds) { + + if (V.farmyardUpgrades.seeds) { farmMenialProductivity += 3; } - if (V.farmyardUpgrade.machinery) { + + if (V.farmyardUpgrades.machinery) { farmMenialProductivity += 3; } @@ -356,19 +428,20 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { } - // FARMYARD - const farmyardStatsRecords = () => { - // TODO: check over these setters and remove those we don't need + // MARK: Farmyard + + function farmyardStatsRecords() { const f = V.facility.farmyard; + if (typeof f === "undefined") { return; } + f.farmhandIncome = 0; f.customers = 0; f.farmhandCosts = 0; f.rep = 0; - f.adsCosts = V.farmyardAdsSpending; f.maintenance = V.farmyard * V.facilityCost; f.totalIncome = f.farmhandIncome + f.adsIncome; f.totalExpenses = f.farmhandCosts + f.maintenance; @@ -380,117 +453,72 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { f.farmhandCosts += i.cost; f.rep += i.rep; } - }; + } - const farmyardDecoration = () => { - let t = ``; + function farmyardDecoration() { + let r = []; // TODO: add checks for the different FSs if (V.farmyardDecoration !== 'standard') { - if (!profits && !foodWeek) { - t += `<br>`; - } - t += `<br>${V.farmyardNameCaps}'s customer's enjoyed `; - if (V.seeBestiality && V.farmyardBreeding > 0 && (V.canines.length || V.hooved.length || V.felines.length)) { - t += `<span class="green">watching farmhands fuck animals in ${V.farmyardDecoration} surroundings.</span>`; - } else if (V.farmyardShows) { - t += `<span class="green">watching farmhands put on shows in ${V.farmyardDecoration} surroundings.</span>`; - } else { - // TODO: not sure about this one - t += `<span class="green">partaking of ${V.farmyardName}'s fine produce in its ${V.farmyardDecoration} décor.</span>`; - } - } + const decorationEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); - return t; - }; + $(decorationEffects).append(document.createElement("br")); - const farmyardProfit = (profit, foodWeek) => { - let t = ``; + r.push(`${V.farmyardNameCaps}'s customer's enjoyed`); - if (profit || foodWeek) { - t += `<br><br>${V.farmyardNameCaps} `; - if (profit) { - t += `makes you <span class="yellowgreen">${cashFormat(Math.trunc(profit))}</span>`; - } - if (profit && foodWeek && V.foodMarket) { - t += ` and `; - } - if (foodWeek && V.foodMarket) { - t += `produced <span class="chocolate"> ${massFormat(foodWeek)}</span> of food`; + if (V.seeBestiality && V.policies.bestialityOpeness && (V.canines || V.hooved || V.felines)) { + 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>`); + } else { + r.push(`<span class="green">partaking of ${V.farmyardName}'s fine produce in its ${V.farmyardDecoration} décor.</span>`); } - t += ` this week. `; - } - return t; - }; - - const farmyardStatsDisplay = () => `<<includeDOM App.Facilities.Farmyard.Stats(false)>><<timed 50ms>><<replace #farmyardstats>><<includeDOM App.Facilities.Farmyard.Stats(true)>><</replace>><</timed>>`; - - t += `<span id="farmyardstats"></span>`; - - // MAIN LOOP + $(decorationEffects).append(r.join(' ')); + } - if (Farmer) { - t += farmerHealth(Farmer); - t += farmerDevotion(Farmer); - t += farmerTrust(Farmer); - t += farmerLivingRules(Farmer); - - getSlaveStatisticData(Farmer, V.facility.farmyard); // make sure we have registered living expenses - - t += farmerIntro(Farmer); - t += farmerRelationshipPC(Farmer); - t += farmerFetishEffects(farmerFetish(Farmer)); - t += farmerSkill(Farmer); - t += farmerCashBonus(Farmer); - t += farmerAgeSkill(Farmer); - t += farmerExperience(Farmer); - t += farmerIntelligence(Farmer); - t += farmerDick(Farmer); - t += farmerSmell(Farmer); - t += farmerRelationshipSlaves(Farmer); - t += farmerWorks(Farmer); + return r; } - t += farmhandCount(FL); + function farmyardProfit(profit, food) { + const profitContent = App.UI.DOM.appendNewElement("p", frag, '', "indent"); - if (Farmer) { - t += farmerEndWeek(Farmer); - } - - if (FL > 0) { - let oldCash = V.cash, - oldFood = V.food; + let r = []; - for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.farmyard)) { - V.i = V.slaveIndices[slave.ID]; + $(profitContent).append(document.createElement("br")); - ({ - he, him, his, hers, himself, girl, He, His, loli - } = getPronouns(slave)); + if (profit || food) { + r.push(V.farmyardNameCaps); - farmhandLivingRules(slave); - farmhandHealth(slave); - farmhandDevotion(slave); - farmhandTrust(slave); - farmhandEnergy(slave); - farmhandFood(slave); - profits += farmhandProfit(slave); + if (profit) { + r.push(`makes you <span class="yellowgreen">${cashFormat(Math.trunc(profit))}</span>`); + } - t += farmhandEndWeek(slave); + if (V.foodMarket) { + if (profit && food) { + r.push(`and`); + } + if (food) { + r.push(`produced <span class="chocolate"> ${massFormat(food)}</span> of food`); + } + } + r.push(`this week.`); } - profits += V.cash - oldCash; // FIXME: equal to 0 - what is this supposed to represent? - oldCash = V.cash; - foodWeek += V.food + oldFood; + return $(profitContent).append(r.join(' ')); } + // FIXME: no idea what I'm doing here + const statsSpan = document.createElement("span"); + farmyardStatsRecords(); - t += farmyardProfit(profits, foodWeek); - t += farmyardDecoration(); - t += farmyardStatsDisplay(); + farmyardProfit(profits, foodWeek); + farmyardDecoration(); V.food += foodWeek; - return t; + frag.append(App.Facilities.Farmyard.Stats(false)); + statsSpan.append(App.Facilities.Farmyard.Stats(true)); + + return frag; }; diff --git a/src/facilities/farmyard/shows/farmShowsIncome.js b/src/facilities/farmyard/shows/farmShowsIncome.js new file mode 100644 index 0000000000000000000000000000000000000000..f80c965449435cfc3a0d8bfc0563f561d8d50390 --- /dev/null +++ b/src/facilities/farmyard/shows/farmShowsIncome.js @@ -0,0 +1,602 @@ +/** + * @param {App.Entity.SlaveState} slave + * @returns {number} + */ +App.Facilities.Farmyard.farmShowsIncome = function(slave) { + const + arcology = V.arcologies[0], + heavyMods = SlaveStatsChecker.modScore(slave).total > 20, + + sexualQuirks = ["perverted", "unflinching"], + behavioralQuirks = ["sinful"], + fetishes = ["humiliation", "masochist"]; + + let cash = 7500; + + if (!slave) { + return null; + } else { + if (S.Farmer) { + cash *= 1.1; + if (S.Farmer.skill.farmer >= V.masteredXP) { + cash *= 1.1; + } + } + + // MARK: FS Effects + + if (arcology.FSSupremacist !== "unset") { + if (isSuperiorRace(slave)) { + if (V.seeBestiality) { + cash *= 0.8; + repX(-10, "shows"); + } else { + cash *= 1.2; + } + } else { + cash *= 0.9; + } + } + + if (arcology.FSSubjugationist !== "unset") { + if (isInferiorRace(slave)) { + if (V.seeBestiality) { + cash *= 1.2; + repX(10, "shows"); + } else { + cash *= 0.8; + } + } else { + cash *= 0.9; + } + } + + if (arcology.FSRepopulationFocus !== "unset") { + if (isPreg(slave)) { + if (slave.eggType === "human") { + cash *= 1.2; + repX(15, "shows"); + } else { + cash *= 0.8; + repX(-15, "shows"); + } + } + } + + if (arcology.FSRestart !== "unset") { + if (isPreg(slave)) { + if (isEliteBreeder(slave)) { + if (slave.eggType === "human") { + cash *= 0.7; + repX(-20, "shows"); + } else { + cash *= 0.6; + repX(-25, "shows"); + } + } else { + if (slave.eggType === "human") { + cash *= 0.8; + repX(-15, "shows"); + } else { + cash += 0.9; + repX(-10, "shows"); + } + } + } else { + if (V.seeBestiality && isEliteBreeder(slave)) { + cash *= 0.7; + repX(-10, "shows"); + } + } + } + + if (arcology.FSGenderRadicalist !== "unset") { + if (slave.genes === "XX") { + if (slave.dick > 0) { + cash *= 1.2; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + } + } + + if (arcology.FSGenderFundamentalist !== "unset") { + if (isPreg(slave) || setup.fakeBellies.includes(slave.bellyAccessory)) { + cash *= 1.1; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + + // FIXME: keep this? not sure it makes sense + if (slave.genes === "XX") { + if (slave.dick > 0) { + cash *= 0.8; + } else { + cash *= 1.1; + } + } + } + + if (arcology.FSPaternalist !== "unset") { + if (V.seeBestiality) { + if (V.farmyardBreeding) { + if (V.farmyardRestraints) { + cash *= 0.5; + } else { + cash *= 0.7; + } + } else { + if (V.farmyardRestraints) { + cash *= 0.8; + } else { + cash *= 0.9; + } + } + } else { + // TODO: something here? + } + } + + if (arcology.FSDegradationist !== "unset") { + if (V.seeBestiality) { + if (V.farmyardBreeding) { + if (V.farmyardRestraints) { + cash *= 1.5; + } else { + cash *= 1.3; + } + } else { + if (V.farmyardRestraints) { + cash *= 1.2; + } else { + cash *= 1.1; + } + } + } else { + // TODO: something here? + } + } + + if (arcology.FSBodyPurist !== "unset") { + if (SlaveStatsChecker.isModded(slave)) { + if (heavyMods) { + cash *= 0.7; + repX(-15, "shows"); + } else { + cash *= 0.8; + repX(-10, "shows"); + } + } + } + + if (arcology.FSTransformationFetishist !== "unset") { + if (SlaveStatsChecker.isModded(slave)) { + if (heavyMods) { + cash *= 1.3; + repX(15, "shows"); + } else { + cash *= 1.2; + repX(10, "shows"); + } + } + } + + if (arcology.FSYouthPreferentialist !== "unset") { + if (isYoung(slave)) { + cash *= 1.2; + repX(10, "shows"); + } else { + cash *= 0.8; + repX(-5, "shows"); + } + } + + if (arcology.FSMaturityPreferentialist !== "unset") { + if (!isYoung(slave)) { + cash *= 1.2; + repX(10, "shows"); + } else { + cash *= 0.8; + repX(-5, "shows"); + } + } + + if (arcology.FSSlimnessEnthusiast !== "unset") { + if (slimLawPass(slave)) { + cash *= 1.1; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + } + + // FIXME: marked for possible rewrite + if (arcology.FSAssetExpansionist !== "unset") { + if (isStacked(slave)) { + cash *= 1.1; + repX(10, "shows"); + } + } + + if (arcology.FSPastoralist !== "unset") { + if (slave.boobs >= 1000) { + cash *= 1.2; + repX(10, "shows"); + } + + if (slave.lactation > 0) { + cash *= 1.1; + repX(5, "shows"); + } + } + + // FIXME: marked for review + if (arcology.FSPhysicalIdealist !== "unset") { + if (genderLawPass(slave)) { + cash *= 1.1; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + + if (slave.muscles > 30) { // slave is muscular or more + cash *= 1.1; + } else { + cash *= 0.9; + } + } + + if (arcology.FSHedonisticDecadence !== "unset") { + if (slave.weight > 10) { // slave is curvy or more + cash *= 1.1; + } else { + cash *= 0.9; + } + } + + if (arcology.FSChattelReligionist !== "unset") { // TODO: I don't know what to put for this one + if (slave.devotion < 21) { // if slave is careful or less + cash *= 0.9; + } + } + + if (arcology.FSPetiteAdmiration !== "unset") { + if (heightPass(slave)) { + cash *= 1.1; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + } + + if (arcology.FSStatuesqueGlorification !== "unset") { + if (heightPass(slave)) { + cash *= 1.1; + repX(10, "shows"); + } else { + cash *= 0.9; + repX(-5, "shows"); + } + } + + if (arcology.FSRomanRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSAztecRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSEgyptianRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSEdoRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSArabianRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSChineseRevivalist !== "unset") { + // TODO: + } + + // Close FS Effects + + if (setup.entertainmentCareers.includes(slave.career)) { + cash *= 1.1; + } + + // FIXME: can slaves' careers overlap categories? + if (setup.farmerCareers.includes(slave.career)) { + cash *= 1.1; + } + + if (slave.prestige === 1) { // slave is prestigious + cash *= 1.1; + } else if (slave.prestige === 2) { // slave is very prestigious + cash *= 1.5; + } else if (slave.prestige === 3) { // slave is extremely prestigious + cash *= 1.9; + } + + if (slave.porn.prestige === 1) { // slave is prestigious from porn + cash *= 1.1; + } else if (slave.porn.prestige === 2) { // slave is very prestigious from porn + cash *= 1.4; + } else if (slave.porn.prestige === 3) { // slave is extremely prestigious from porn + cash *= 1.7; + } + + // FIXME: needed when using healthPenalty()? + if (slave.health.condition > 50) { // slave is very healthy or more + cash *= 1.2; + } else if (slave.health.condition < -20) { + cash *= 0.9; + } + + // TODO: add checks for family and relationships + + if (slave.face > 40) { // slave is beautiful or more + cash *= 1.4; + } else if (slave.face > 10) { // slave is very pretty or more + cash *= 1.1; + } else if (slave.face < -10) { // slave is less than unattractive + cash *= 0.9; + } else if (slave.face < -40) { // slave is less than ugly + cash *= 0.7; + } + + setSlaveDevotion(cash); + setSlaveTrust(cash); + + if (slave.weight > 30) { // slave is curvy or more + if (arcology.FSHedonisticDecadence !== "unset") { + cash *= 0.8; + } + } else if (slave.weight < -30) { // slave is very thin or less + cash *= 0.8; // TODO: put this on a scale + } + + // FIXME: marked for rewrite + if (slave.muscles > 30) { // slave is muscular or more + cash *= 0.9; + } else if (slave.muscles < -30) { // slave is very weak or less + cash *= 0.6; + } + + if (!canSeePerfectly(slave)) { + if (canSee(slave)) { + cash *= 0.8; + } else { + cash *= 0.6; + } + } + + if (!canHear(slave)) { + cash *= 0.8; + } + + if (isPreg(slave)) { + cash *= 0.8; // TODO: not sure how to incorporate pregnancy + } + // TODO: incorporate skills + cash *= healthPenalty(slave); + + if (slave.intelligence > 50) { // slave is very smart or better + cash *= 1.4; + } else if (slave.intelligence < -50) { // slave is very slow or less + cash *= 0.6; + } + + if (slave.energy > 95) { // slave is a nymphomaniac + cash *= 1.5; + } else if (slave.energy > 80) { // slave has powerful sex drive + cash *= 1.3; + } else if (slave.energy > 60) { // slave has good sex drive + cash *= 1.1; + } else if (slave.energy > 40) { // slave has average sex drive + cash *= 0.9; + } else if (slave.energy > 20) { // slave has poor sex drive + cash *= 0.8; + } else { // slave has no sex drive + cash *= 0.6; + } + + switch (slave.fetish) { + case "submissive": + case "humiliation": + if (V.seeBestiality) { + if (slave.fetishKnown) { + cash *= 1.1; + } else { + slave.fetishKnown = jsRandom(1, 100) > 80 ? 1 : 0; + } + } else { + if (slave.fetishKnown) { + cash *= 0.9; + } else { + slave.fetishKnown = jsRandom(1, 100) > 80 ? 1 : 0; + } + } + break; + + default: + break; + } + + switch (slave.behavioralFlaw) { + case "devout": + case "arrogant": + cash *= 0.9; + break; + + default: + break; + } + + switch (slave.behavioralQuirk) { + case "sinful": + cash *= 1.1; + break; + + default: + break; + } + + switch (slave.sexualFlaw) { + case "shamefast": + cash *= 1.1; + break; + + default: + break; + } + + switch (slave.sexualQuirk) { + case "perverted": + cash *= 1.1; + break; + + default: + break; + } + + return cash; + } + + function setSlaveDevotion(amount) { + const slaveApproves = () => + sexualQuirks.includes(slave.sexualQuirk) || + behavioralQuirks.includes(slave.behavioralQuirk) || + fetishes.includes(slave.fetish); + + if (slave.devotion > 50) { + amount *= 1.5; + + if (V.seeBestiality) { + if (slaveApproves) { + slave.devotion += 2; + } else { + slave.devotion--; + } + } + + if (V.farmyardBreeding) { + if (slaveApproves) { + slave.devotion += 2; + } else { + slave.devotion--; + } + } + + if (V.farmyardRestraints) { + if (slaveApproves) { + slave.devotion += 3; + } else { + slave.devotion -= 2; + } + } + } else if (slave.devotion < -50) { + amount *= 0.5; + + if (V.seeBestiality) { + if (slaveApproves) { + slave.devotion++; + } else { + slave.devotion -= 2; + } + } + + if (V.farmyardBreeding) { + if (slaveApproves) { + slave.devotion++; + } else { + slave.devotion -= 2; + } + } + + if (V.farmyardRestraints) { + if (slaveApproves) { + slave.devotion += 2; + } else { + slave.devotion -= 3; + } + } + } + + return amount; + } + + function setSlaveTrust(amount) { + const slaveApproves = () => + sexualQuirks.includes(slave.sexualQuirk) || + behavioralQuirks.includes(slave.behavioralQuirk) || + fetishes.includes(slave.fetish); + + if (slave.trust > 50) { + amount *= 1.2; + + if (V.seeBestiality) { + if (slaveApproves) { + slave.trust += 2; + } else { + slave.trust--; + } + } + + if (V.farmyardBreeding) { + if (slaveApproves) { + slave.trust += 2; + } else { + slave.trust--; + } + } + + if (V.farmyardRestraints) { + if (slaveApproves) { + slave.trust += 3; + } else { + slave.trust -= 2; + } + } + } else if (slave.trust < -50) { + amount *= slave.devotion > 50 ? 1.2 : 0.9; + + if (V.seeBestiality) { + if (slaveApproves) { + slave.trust++; + } else { + slave.trust -= 2; + } + } + + if (V.farmyardBreeding) { + if (slaveApproves) { + slave.trust++; + } else { + slave.trust -= 2; + } + } + + if (V.farmyardRestraints) { + if (slaveApproves) { + slave.trust += 2; + } else { + slave.trust -= 3; + } + } + } + + return amount; + } +}; diff --git a/src/facilities/farmyard/shows/saFarmyardShows.js b/src/facilities/farmyard/shows/saFarmyardShows.js new file mode 100644 index 0000000000000000000000000000000000000000..7efaf5cb0bd6789d29a64535b1c22fb6f909fdba --- /dev/null +++ b/src/facilities/farmyard/shows/saFarmyardShows.js @@ -0,0 +1,443 @@ +/** + * Returns a string describing the effects of the slave putting on shows only + * To see full effects, see farmyardShows.js + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ +App.Facilities.Farmyard.putOnShows = function(slave) { + const + { he, him, his, hers, He, His } = getPronouns(slave), + incomeStats = getSlaveStatisticData(slave, V.facility.farmyard), + arcology = V.arcologies[0], + _beautiful = beautiful(slave), + _pretty = pretty(slave), + + heavyMods = SlaveStatsChecker.modScore(slave).total > 20; + + let r = []; + + incomeStats.income += App.Facilities.Farmyard.farmShowsIncome(slave); + + r.push(`${He} also puts on shows with animals this week.`); + + // Open FS Subsection + + if (arcology.FSSupremacist !== "unset") { + if (isSuperiorRace(slave)) { + if (V.seeBestiality) { + r.push(`Society <span class="reputation dec">disapproves</span> of your allowing a member of the elite race to be degraded in such a fashion, and thus ${he} didn't earn as much.`); + } else { + r.push(`Since ${arcology.FSSupremacistRace} slaves are in fashion, ${he} attracts a little more attention than if ${he} wasn't ${arcology.FSSupremacistRace}.`); + } + } else { + r.push(`Society doesn't disapprove of ${him} not being ${arcology.FSSupremacistRace}, but ${he} doesn't earn as much as ${he} would if ${he} was.`); + } + } + + if (arcology.FSSubjugationist !== "unset") { + if (isInferiorRace(slave)) { + if (V.seeBestiality) { + r.push(`Society <span class="reputation inc">approves</span> of the degradation you submit your ${arcology.FSSubjugationistRace} slaves to, and so ${he} earns you a bit more.`); + } else { + r.push(`Fewer people want to go see a ${arcology.FSSubjugationistRace} slave put on a show, and so ${he} doesn't earn as much as ${he} otherwise could.`); + } + } else { + r.push(`Society doesn't disapprove of ${him} not being ${arcology.FSSubjugationistRace}, but ${he} doesn't earn as much as ${he} would if ${he} was.`); + } + } + + if (arcology.FSRepopulationFocus !== "unset") { + if (isPreg(slave)) { + if (slave.eggType === "human") { + r.push(`Society <span class="reputation inc">greatly approves</span> of your having pregnant slaves ${V.seeBestiality ? `have sex` : `put on shows`} with animals.`); + } else { + r.push(`Society is <span class="reputation dec">disgusted</span> by ${his} pregnancy when they realize that what it is in ${his} womb is not human.`); + } + } + } + + if (arcology.FSRestart !== "unset") { + if (isPreg(slave)) { + if (isEliteBreeder(slave)) { + if (slave.eggType === "human") { + r.push(`Society is <span class="reputation dec">horrified</span> by the fact that you would dare defile a slave deemed fit for humanity's revival in such a manner, especially one that is carrying the future of the planet.`); + } else { + r.push(`Society is <span class="reputation dec">absolutely repulsed</span> by the fact that you would dare defile a slave deemed fit for humanity's revival in such a manner, especially when they learn that what is in ${his} womb is not even human.`); + } + } else { + if (slave.eggType === "human") { + r.push(`Society is <span class="reputation dec">extremely disgusted</span> by ${his} pregnancy and the fact that you would have ${him} ${V.seeBestiality ? `have sex` : `put on shows`} with animals while sporting a baby bump.`); + } else { + r.push(`Society is disgusted by ${his} pregnancy until they learn that what is in ${his} womb is not human.`); + } + } + } else { + if (V.seeBestiality && isEliteBreeder(slave)) { + r.push(`Society is <span class="reputation dec">heavily disapproving</span> of the fact that you would dare defile a slave deemed fit for humanity's revival in such a manner.`); + } + } + } + + if (arcology.FSGenderRadicalist !== "unset") { + if (slave.dick > 0) { + r.push(`${His} patrons <span class="reputation inc">approve</span> of the fact that ${he} has a dick.`); + } else { + r.push(`${His} patrons <span class="reputation dec">are disappointed</span> that ${he} doesn't have a dick.`); + } + } + + if (arcology.FSGenderFundamentalist !== "unset") { + if (isPreg(slave) || setup.fakeBellies.includes(slave.bellyAccessory)) { + r.push(`${His} viewers <span class="reputation inc">approve</span> of the fact that ${he} is sporting a baby bump${setup.fakeBellies.includes(slave.bellyAccessory) ? `, even though ${hers} isn't real` : ``}.`); + } else { + r.push(`${His} viewers <span class="reputation dec">are disappointed</span> that ${he} isn't pregnant.`); + } + } + + if (arcology.FSPaternalist !== "unset") { + if (V.seeBestiality) { + if (V.farmyardBreeding) { + if (V.farmyardRestraints) { + r.push(`Your citizens are <span class="reputation dec">extremely disapproving</span> of the fact that you would allow your slaves to be treated as nothing more than a bound breeding toy for your animals.`); + } else { + r.push(`Your citizens are <span class="reputation dec">highly disapproving</span> of the fact that you would allow your slaves to be treated as nothing more than a breeding toy for your animals.`); + } + } else { + if (V.farmyardRestraints) { + r.push(`Your citizens are <span class="reputation dec">very disapproving</span> of the fact that you would allow your slaves to be treated as nothing more than a bound toy for your animals.`); + } else { + r.push(`Your citizens are <span class="reputation dec">disapproving</span> of the fact that you would allow your slaves to be treated as nothing more than a toy for your animals.`); + } + } + } else { + // TODO: + } + } + + if (arcology.FSDegradationist !== "unset") { + if (V.seeBestiality) { + if (V.farmyardBreeding) { + if (V.farmyardRestraints) { + r.push(`Your citizens are <span class="reputation dec">extremely approving</span> of the fact that you would allow your slaves to be treated as nothing more than a bound breeding toy for your animals.`); + } else { + r.push(`Your citizens are <span class="reputation dec">highly approving</span> of the fact that you would allow your slaves to be treated as nothing more than a breeding toy for your animals.`); + } + } else { + if (V.farmyardRestraints) { + r.push(`Your citizens are <span class="reputation dec">very approving</span> of the fact that you would allow your slaves to be treated as nothing more than a bound toy for your animals.`); + } else { + r.push(`Your citizens are <span class="reputation dec">approving</span> of the fact that you would allow your slaves to be treated as nothing more than a toy for your animals.`); + } + } + } else { + // TODO: + } + } + + if (arcology.FSBodyPurist !== "unset") { + if (SlaveStatsChecker.isModded(slave)) { + r.push(`The members of the audience <span class="reputation dec">disapprove</span> that you would use a slave with ${heavyMods ? `such heavy` : ``} modifications to put on shows.`); + } + } + + if (arcology.FSTransformationFetishist !== "unset") { + if (SlaveStatsChecker.isModded(slave)) { + r.push(`The members of the audience <span class="reputation inc">approve</span> that you would use a slave with ${heavyMods ? `such heavy` : ``} modifications to put on shows.`); + } + } + + if (arcology.FSYouthPreferentialist !== "unset") { + if (isYoung(slave)) { + r.push(`${arcology.name}'s citizens <span class="reputation dec">disapprove</span> of your using such old slaves to put on shows.`); + } else { + r.push(`${arcology.name}'s citizens <span class="reputation inc">approve</span> of your using young slaves to put on shows.`); + } + } + + if (arcology.FSMaturityPreferentialist !== "unset") { + if (isYoung(slave)) { + r.push(`${arcology.name}'s citizens <span class="reputation inc">approve</span> of your using mature slaves to put on shows.`); + } else { + r.push(`${arcology.name}'s citizens <span class="reputation dec">disapprove</span> of your using such young slaves to put on shows.`); + } + } + + if (arcology.FSSlimnessEnthusiast !== "unset") { + if (slimLawPass(slave)) { + r.push(`${His} slim body <span class="reputation inc">attracts a wider audience.</span>`); + } else { + r.push(`Society finds your using a slave with such a flabby body <span class="reputation dec">disgusting.</span>`); + } + } + + // FIXME: marked for possible rewrite + if (arcology.FSAssetExpansionist !== "unset") { + if (isStacked(slave)) { + r.push(`Society <span class="reputation inc">approves</span> of the fact that you respect their ideals in using a slave with larger assets.`); + } + } + + if (arcology.FSPastoralist !== "unset") { + if (slave.boobs >= 1000) { + r.push(`The fact that ${slave.slaveName} has such large udders <span class="reputation inc">pleases your citizens.</span>`); + } + + if (slave.lactation > 0) { + r.push(`Your citizens ${slave.boobs >= 1000 ? `also ` : ``}<span class="reputation inc">approve</span> of the fact that ${he} is visibly lactating.`); + } + } + + // FIXME: marked for review + if (arcology.FSPhysicalIdealist !== "unset") { + if (genderLawPass(slave)) { + r.push(`The fact that ${slave.slaveName} has what is considered the ideal form also <span class="reputation inc">helps ${him} attract attention,</span> and so ${he} earns a bit more.`); + } else { + r.push(`${His} form isn't exactly what ${arcology.name}'s citizens consider ideal, and so ${he} doesn't <span class="reputation dec">earn as much.</span>`); + } + } + + // FIXME: marked for rewrite + if (arcology.FSHedonisticDecadence !== "unset") { + if (slave.weight > 10) { + r.push(`Since ${slave.slaveName} is large enough for ${arcology.name}'s citizens, ${he} earns slightly more.`); + } else { + r.push(`${He} doesn't earn quite as much ${he} would have if ${he} was a bit larger in size.`); + } + } + + if (arcology.FSChattelReligionist !== "unset") { + if (slave.devotion <= 20) { + // TODO: write this + } else { + // TODO: write this + } + } + + if (arcology.FSPetiteAdmiration !== "unset") { + if (heightPass(slave)) { + r.push(`The fact that you are using such small slaves <span class="reputation inc">pleases your citizens.</span>`); + } else { + r.push(`The fact that you are using such small slaves <span class="reputation dec">displeases your citizens.</span>`); + } + } + + if (arcology.FSStatuesqueGlorification !== "unset") { + if (heightPass(slave)) { + r.push(`Your citizens <span class="reputation inc">approve</span> of your using such statuesque slaves for putting on shows.`); + } else { + r.push(`Your citizens <span class="reputation dec">disapprove</span> of your not using taller slaves for putting on shows.`); + } + } + + if (arcology.FSRomanRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSAztecRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSEgyptianRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSEdoRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSArabianRevivalist !== "unset") { + // TODO: + } + + if (arcology.FSChineseRevivalist !== "unset") { + // TODO: + } + + // Close FS Subsection + + if (setup.entertainmentCareers.includes(slave.career)) { + r.push(`${He} has experience with putting on shows from ${his} life before ${he} was a slave, making ${him} more effective at putting on shows.`); + } + + // FIXME: can slaves' careers overlap categories? + if (setup.farmerCareers.includes(slave.career)) { + r.push(`${He} ${setup.entertainmentCareers.includes(slave.career) ? `also` : ``} has experience in working with animals from ${his} life before ${he} was a slave, making ${him} more effective at putting on shows.`); + } + + if (slave.prestige === 1) { + r.push(`Because some of your citizens already know of ${him}, ${he} earns more.`); + } else if (slave.prestige === 2) { + r.push(`Because a lot of your citizens already know of ${him}, ${he} earns quite a bit more.`); + } else if (slave.prestige === 3) { + r.push(`Because ${he} is so famous, ${he} earns a lot more then ${he} would otherwise.`); + } + + if (slave.porn.prestige === 1) { + r.push(`${He} earns a bit more because some of your citizens already know ${him} from porn.`); + } else if (slave.porn.prestige === 2) { + r.push(`${He} earns quite a bit more because a lot of your citizens already know ${him} from porn.`); + } else if (slave.porn.prestige === 3) { + r.push(`${He} earns a lot more because ${he} is so famous from porn.`); + } + + if (slave.health.condition > 50) { + r.push(`${He} is in such excellent health that ${he} is able to put on longer and more energetic shows, earning you more.`); + } else if (slave.health.condition < -20) { + r.push(`${His} poor health negatively affects ${his} ability to put on good shows, cutting into your profits.`); + } + + // TODO: add checks for family and relationships + + if (slave.face > 40) { + r.push(`${He} is so ${_beautiful} that ${his} audience is willing to pay more to watch ${him} put on shows.`); + } else if (slave.face > 10) { + r.push(`${He} is so ${_pretty} that ${his} audience is willing to pay more to watch ${him} put on shows.`); + } else if (slave.face < -10) { + r.push(`${His} audience isn't willing to pay as much because of how unattractive ${his} face is.`); + } else if (slave.face < -40) { + r.push(`${His} audience isn't willing to pay as much because of how hard ${his} face is to look at.`); + } + + // TODO: incorporate seeBestiality, breeding, and restraints + if (slave.devotion > 50) { + if (slave.trust > 50) { + r.push(`${He} is so devoted that ${he} works ${his} hardest to make ${his} show a good one.`); + } else if (slave.trust < -50) { + r.push(`${He} is both devoted to you and terrified of you, so ${he} tries ${his} best to make ${his} show a good one.`); + } + } else if (slave.devotion < -50) { + if (slave.trust > 50) { + r.push(`${slave.slaveName} purposefully does the bare minimum ${he} can get away with to spite you.`); + } else if (slave.trust < -50) { + r.push(`${slave.slaveName} refuses to do anything without punishment, which is evident from ${his} meager earnings.`); + } + } + + // FIXME: marked for rewrite + if (slave.weight > 30) { + if (arcology.FSHedonisticDecadence === "unset") { + r.push(`Your citizens are not willing to pay as much to see such a fat slave put on shows, so ${he} loses some income.`); + } + } else if (slave.weight < -30) { + r.push(`Your citizens don't like watching such a sickly-looking slaves put on shows, so ${he} loses some income.`); + } + + if (slave.muscles > 30) { + // TODO: write this - do we want something for muscles? + } else if (slave.muscles < -30) { + r.push(`${slave.slaveName} is so weak that ${he} cannot even properly handle the animals ${he}'s assigned to ${V.seeBestiality ? `fuck` : `work with`}, and isn't able to put on any sort of meaningful show.`); + } + + if (!canSeePerfectly(slave)) { + r.push(`${His} ${!canSee(slave) ? `blindness makes it impossible` : `nearsightedness makes it harder`} for ${him} to see what ${he}'s doing, affecting ${his} ability to put on a good show.`); + } + + if (slave.hears < 0) { + r.push(`${His} ${slave.hears < -1 ? `lack of` : `poor`} hearing makes it difficult for ${him} to hear what ${his} audience wants from ${him}, which really affects ${his} earnings.`); + } + + // FIXME: marked for rewrite + if (isPreg(slave)) { + r.push(`${His}${slave.bellyPreg > 100000 ? ` advanced` : ``} pregnancy makes it more difficult for him to effectively put on a good show.`); + } + + if (slave.health.tired > 60) { + r.push(`${He} is so tired that the energy in ${his} shows is basically nonexistent, affecting ${his} profits.`); + } + + if (slave.intelligence > 50) { + r.push(`Because ${he} is so intelligent, ${he} is able to tailor ${his} shows to ${his} audience, helping ${him} bring in more in profits.`); + } else if (slave.intelligence < -50) { + r.push(`${He} is so slow that all ${he} can really do is just ${V.seeBestiality ? `lie there and take it` : `put on the most basic of moves`}, which your audience finds dull and uninteresting.`); + } + + if (slave.energy > 95) { + r.push(`The fact that ${he} is a nymphomaniac helps ${him} to go for longer, allowing ${him} to really put on an amazing show.`); + } else if (slave.energy > 80) { + r.push(`The fact that ${his} sex drive is so powerful helps ${him} to really put on good shows.`); + } else if (slave.energy > 60) { + r.push(`The fact that ${his} sex drive is so good helps ${him} to put on good shows.`); + } else if (slave.energy > 40) { + r.push(`${His} average sex drive allows ${him} to put on a decent show.`); + } else if (slave.energy > 20) { + r.push(`The fact that ${his} sex drive is so poor affects ${his} performance.`); + } else { + r.push(`The fact that ${his} sex drive is nonexistant really hinders ${his} ability to put on a decent show.`); + } + + // TODO: add more to the fetishes and flaws / quirks + switch (slave.fetish) { + case "submissive": + if (V.seeBestiality) { + if (slave.fetishKnown) { + r.push(`${He} is so submissive that ${he} willingly accepts ${his} position as an animal's fucktoy and <span class="reputation inc">is able to put on a decent show</span>.`); + } else { + r.push(`${S.HeadGirl ? `${S.HeadGirl.slaveName} notices` : `You notice`} that ${slave.slaveName} seems to have really taken to ${his} position as a fucktoy for animals. <span class="lightcoral">${He}'s a submissive!</span>`); + } + } else { + if (slave.fetishKnown) { + r.push(`Being a submissive, ${he} <span class="reputation dec">doesn't have the confidence required</span> to really put on a good show.`); + } else { + r.push(`${slave.slaveName} doesn't seem to have the type of fortitude needed to put on a show, and after some probing, you discover why - it turns out <span class="lightcoral">${he}'s a submissive!</span>`); + } + } + break; + + case "humiliation": + if (V.seeBestiality) { + if (slave.fetishKnown) { + r.push(`${slave.slaveName} uses the most of this humiliating experience to really put on a show, to <span class="reputation inc">the approval of ${his} audience</span>.`); + } else { + // TODO: + } + } else { + // TODO: not sure about this one + } + break; + + default: + break; + } + + switch (slave.behavioralFlaw) { + case "arrogant": + r.push(`Because ${he} is so arrogant, ${he} tries ${his} hardest to avoid ${V.seeBestiality ? `fucking animals` : `putting on shows`}, <span class="cash dec">which affects ${his} profits</span> and <span class="reputation dec">your reputation.</span>`); + break; + + case "devout": + r.push(`${He} often prays ${V.seeBestiality ? ` while getting fucked by animals` : ` during ${his} shows`}, which your citizens <span class="reputation dec">find off-putting.</span>`); + break; + + default: + break; + } + + switch (slave.behavioralQuirk) { + case "sinful": + r.push(`${He} relishes in ${his} ability to do something so sinful and depraved, and <span class="reputation inc">really puts on a show.</span>`); + break; + + default: + break; + } + + switch (slave.sexualFlaw) { + case "shamefast": + r.push(`${His} crippling shamefastness <span class="reputation dec">limits ${his} ability</span> to put on a decent show.`); + break; + + default: + break; + } + + switch (slave.sexualQuirk) { + case "perverted": + r.push(`${His} shows are a <span class="reputation inc">real spectacle,</span> since ${he} is so perverted that ${he} is willing to go far beyond the bare minimum.`); + break; + + default: + break; + } + + return r.join(' '); +}; diff --git a/src/facilities/nursery/childInteract.tw b/src/facilities/nursery/childInteract.tw index e485043b328268ab1281a47770ff9fb2b561f76d..76f18de06ba35e10122e1f6d252958317d3cf364 100644 --- a/src/facilities/nursery/childInteract.tw +++ b/src/facilities/nursery/childInteract.tw @@ -60,7 +60,7 @@ FIXME: <br><br>__Take slave to another room:__ [[Wardrobe|Wardrobe Use][$degradation = 0]] -| [[Auto salon|Salon][$degradation = 0, $primaryHairColor = "", $secondaryHairColor = "", $artificialEyeColor = "" ,$artificialEyeShape = "", $artificialEyeFill = "", $tattooChoice = "", $piercingLevel = ""]] +| [[Auto salon|Salon][$degradation = 0, $tattooChoice = "", $piercingLevel = ""]] | [[Body mod studio|Body Modification][$degradation = 0, $tattooChoice = undefined]] | [[Remote surgery|Remote Surgery][$degradation = 0]] | [[Configure cybernetics|Prosthetics Configuration][$prostheticsConfig = "main"]] @@ -305,7 +305,7 @@ FIXME: <<replace "#miniscene">><<include "BeastFucked">><br> <</replace>> <</link>> | <</if>> - <<if $farmyardStable > 0 && $activeHooved.species != 0>> + <<if $farmyardStables > 0 && $activeHooved.species != 0>> <<link "Let a $activeHooved.species mount $him">> <<set $animalType = "hooved">> <<replace "#miniscene">><<include "BeastFucked">><br> <</replace>> diff --git a/src/facilities/nursery/widgets/children/longChildDescription.js b/src/facilities/nursery/widgets/children/longChildDescription.js index c4aa78761a622c029132e842c450a625e3437158..450353465b8c4f5e4969c136c4f78de75959b799 100644 --- a/src/facilities/nursery/widgets/children/longChildDescription.js +++ b/src/facilities/nursery/widgets/children/longChildDescription.js @@ -11,15 +11,15 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event PC = V.PC, slaves = V.slaves, desc = child.actualAge < 13 ? `child` : `teen`, // TODO: - girl = V.girl, father = child.father === -1 ? PC : getSlave(child.father), mother = child.mother === -1 ? PC : getSlave(child.mother); let r = ``; - const - { he, him, his, hers, himself, boy, He, His } = getPronouns(child); + const { + he, him, his, hers, himself, boy, He, His, girl + } = getPronouns(child); // helper functions function accent(child) { diff --git a/src/facilities/statistics.js b/src/facilities/statistics.js index 4690d66e91ef59ebbc4d6f56cd9696a336838a46..448b0da00ff0648068614b0ab03032249c2f60de 100644 --- a/src/facilities/statistics.js +++ b/src/facilities/statistics.js @@ -507,7 +507,7 @@ App.Facilities.Farmyard.Stats = (function() { const H = new App.Facilities.StatsHelper(); const assureList = [ "farmhandIncome", "farmhandCosts", "maintenance", "totalIncome", "totalExpenses", "food", "profit" ]; - /** Generate the arcade statistics table + /** Generate the Farmyard statistics table * @param {boolean} showDetails * @returns {HTMLElement|DocumentFragment} */ diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 326153feebfb9de116e42e385fa908fcc02ddb89..c73026fe4263074d52d6341330cf7fa3143fc67a 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -40,7 +40,6 @@ You should have received a copy of the GNU General Public License along with thi <</for>> <<run assistant.object()>> -<<run FCTV.manage()>> <<run repX(1000, "event")>> <<run setup.prostheticIDs.forEach(function(id) { $prosthetics[id] = {amount: 0, research: 0}; diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 60ffe65235274f9f99f47bd72db652c28b06260a..d12cd289cfaf93b0ed9bea9b31bbf1c08be0fc0e 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -1873,19 +1873,15 @@ globalThis.walkPast = (function() { t += `is working in ${V.dairyName}, looking after your stock.`; break; default: /* WALKPASTS START HERE */ - if (slave.heels === 1 && !["flats", "none"].includes(slave.shoes) && canWalk(slave)) { - t += `walks past your desk with the tiny swaying steps ${he} must take in order to walk on ${his} surgically altered leg`; - if (hasBothLegs(slave)) { - t += `s`; - } - t += `. ${He} is on ${his} way to `; - } else if (["heels", "pumps"].includes(slave.shoes) && canWalk(slave)) { + if (slave.heels === 1 && canWalk(slave)) { + t += `walks past your desk with the tiny swaying steps ${he} must take in order to walk on ${his} surgically altered legs. ${He} is on ${his} way to `; + } else if (["heels", "platform heels", "pumps"].includes(slave.shoes) && canWalk(slave)) { t += `walks past your desk with the swaying steps ${he} must take in ${his} high heels. ${He} is on ${his} way to `; } else if (slave.shoes === "boots" && canWalk(slave)) { t += `walks past your desk with the confident gait encouraged by ${his} high heeled boots. ${He} is on ${his} way to `; - } else if (slave.shoes === "extreme heels" && canWalk(slave)) { + } else if (["extreme heels", "extreme platform heels"].includes(slave.shoes) && canWalk(slave)) { t += `walks past your desk with the tiny swaying steps ${he} must take in ${his} ridiculous heels. ${He} is on ${his} way to `; - } else if (slave.heels === 1) { + } else if (slave.heels === 1 && canMove(slave)) { t += `crawls past your desk on `; if (hasBothArms(slave) && hasBothLegs(slave)) { t += `all fours, `; @@ -1896,7 +1892,21 @@ globalThis.walkPast = (function() { } else if (!hasAnyLegs(slave)) { t += `is carried past your desk by one of your other slaves. ${He} is on ${his} way to `; } else if (!canWalk(slave)) { - t += `is helped past your desk by one of your other slaves. ${He} is on ${his} way to `; + if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + t += `wheels past your desk on ${his} way to`; + } else { + t += `crawls past your desk on `; + if (hasBothArms(slave) && hasBothLegs(slave)) { + t += `all fours, `; + } else { + t += `the ground, `; + } + t += `since ${he} has expanded past the point of being able to walk. ${He} is on ${his} way to `; + } + } else { + t += `is helped past your desk by one of your other slaves. ${He} is on ${his} way to `; + } } else { t += `walks past your desk on ${his} way to `; } diff --git a/src/interaction/policies/policies.js b/src/interaction/policies/policies.js index a266ae3e29fca26bd3ea82b645142664a8aba8d5..b2e5ee597a90982a3ddcee19cb83096e3d8a470d 100644 --- a/src/interaction/policies/policies.js +++ b/src/interaction/policies/policies.js @@ -1,7 +1,6 @@ globalThis.policies = (function() { return { countEugenicsSMRs: countEugenicsSMRs, - BC: BC, cost: cost, }; @@ -19,91 +18,6 @@ globalThis.policies = (function() { return value; } - function BC() { - function convertMain(variable, pro, anti) { - if (V[pro]) { - V.policies[variable] = 1; - } else if (V[anti]) { - V.policies[variable] = -1; - } - } - - function convertRetirement(variable, retireType, amountRequired) { - if (V[retireType] && V[amountRequired]) { - V.policies.retirement[variable] = V[amountRequired]; - } - } - - if (V.releaseID < 1069) { - V.policies.childProtectionAct = V.childProtectionAct; - V.policies.culturalOpenness = V.CulturalOpenness; - V.policies.sexualOpeness = V.sexualOpeness; - V.policies.proRefugees = V.ProRefugees; - V.policies.publicFuckdolls = V.publicFuckdolls; - - V.policies.proRecruitment = V.ProRecruitment; - V.policies.cash4Babies = V.Cash4Babies; - V.policies.regularParties = V.RegularParties; - V.policies.publicPA = V.PAPublic; - V.policies.coursingAssociation = V.CoursingAssociation; - - V.policies.raidingMercenaries = V.RaidingMercenaries; - V.policies.mixedMarriage = V.MixedMarriage; - V.policies.goodImageCampaign = V.goodImageCampaign; - V.policies.alwaysSubsidizeRep = V.alwaysSubsidizeRep; - V.policies.alwaysSubsidizeGrowth = V.alwaysSubsidizeGrowth; - - convertMain('immmigrationCash', 'ProImmigrationCash', 'AntiImmigrationCash'); - convertMain('immmigrationRep', 'ProImmigrationRep', 'AntiImmigrationRep'); - convertMain('enslavementCash', 'ProEnslavementCash', 'AntiEnslavementCash'); - convertMain('enslavementRep', 'ProEnslavementRep', 'AntiEnslavementRep'); - convertMain('cashForRep', 'CashForRep', 'RepForCash'); - - convertMain('oralAppeal', 'OralEncouragement', 'OralDiscouragement'); - convertMain('vaginalAppeal', 'VaginalEncouragement', 'VaginalDiscouragement'); - convertMain('analAppeal', 'AnalEncouragement', 'AnalDiscouragement'); - - convertRetirement('sex', 'SexMilestoneRetirement', 'retirementSex'); - convertRetirement('milk', 'MilkMilestoneRetirement', 'retirementMilk'); - convertRetirement('cum', 'CumMilestoneRetirement', 'retirementCum'); - convertRetirement('births', 'BirthsMilestoneRetirement', 'retirementBirths'); - convertRetirement('kills', 'KillsMilestoneRetirement', 'retirementKills'); - - if (V.BioreactorRetirement) { - V.policies.retirement.fate = "bioreactor"; - } else if (V.ArcadeRetirement) { - V.policies.retirement.fate = "arcade"; - } else if (V.CitizenRetirement) { - V.policies.retirement.fate = "citizen"; - } - - V.policies.retirement.menial2Citizen = V.citizenRetirementMenials; - V.policies.retirement.customAgePolicy = V.policies.retirement.customAgePolicySet || V.CustomRetirementAgePolicy; - V.policies.retirement.physicalAgePolicy = V.PhysicalRetirementAgePolicy; - - V.policies.SMR.basicSMR = V.BasicSMR; - V.policies.SMR.healthInspectionSMR = V.HealthInspectionSMR; - V.policies.SMR.educationSMR = V.EducationSMR; - V.policies.SMR.frigiditySMR = V.FrigiditySMR; - - V.policies.SMR.weightSMR = V.BasicWeightSMR; - V.policies.SMR.honestySMR = V.HonestySMR; - - V.policies.SMR.beauty.basicSMR = V.BasicBeautySMR; - V.policies.SMR.beauty.qualitySMR = V.QualityBeautySMR; - - V.policies.SMR.height.basicSMR = V.BasicHeightSMR; - V.policies.SMR.height.advancedSMR = V.AdvancedHeightSMR; - - V.policies.SMR.intelligence.basicSMR = V.BasicIntelligenceSMR; - V.policies.SMR.intelligence.qualitySMR = V.QualityIntelligenceSMR; - - V.policies.SMR.eugenics.faceSMR = V.FaceEugenicsSMR; - V.policies.SMR.eugenics.heightSMR = V.HeightEugenicsSMR; - V.policies.SMR.eugenics.intelligenceSMR = V.IntelligenceEugenicsSMR; - } - } - function cost() { return 5000; } })(); /** diff --git a/src/interaction/prostheticConfig.tw b/src/interaction/prostheticConfig.tw index ec3649a7dc5c4fd2cce0ab24930a5fb71149237e..8a68dbe21a99b923a830f662d4882e026c8c74ad 100644 --- a/src/interaction/prostheticConfig.tw +++ b/src/interaction/prostheticConfig.tw @@ -115,7 +115,7 @@ This room is lined with shelves and cabinets; it could be easily mistaken for a </p> <p class="indent"> - $He has <<print App.Desc.eyesColor(getSlave($AS))>>. To change $his eye color visit the [[auto salon|Salon][$primaryHairColor = "", $secondaryHairColor = "", $primaryTailColor = "", $secondaryTailColor = "", $artificialEyeColor = "", $artificialEyeShape = "",$artificialEyeFill = ""]]. + $He has <<print App.Desc.eyesColor(getSlave($AS))>>. To change $his eye color visit the [[auto salon|Salon]]. </p> <</if>> diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js index 032cbb0348e469513e4a6a8a224572a675e88f0b..71cbccd05a848523b39eb7ce8bea823696ffa6df 100644 --- a/src/interaction/slaveInteract.js +++ b/src/interaction/slaveInteract.js @@ -61,13 +61,6 @@ App.UI.SlaveInteract.modify = function(slave) { makeRoomLink(el, "Auto salon", "Salon", ' Modify hair (color, length, style), nails, and even skin color.', () => { V.activeSlave = slave; - V.primaryHairColor = ""; - V.secondaryHairColor = ""; - V.primaryTailColor = ""; - V.secondaryTailColor = ""; - V.artificialEyeColor = ""; - V.artificialEyeShape = ""; - V.artificialEyeFill = ""; } ); @@ -791,7 +784,7 @@ App.UI.SlaveInteract.diet = function(slave) { if ((slave.muscles > 5 || slave.fuckdoll === 0) && canWalk(slave)) { muscle.push({text: `Slim down`, updateSlave: {diet: "slimming"}}); } else if (!canWalk(slave)) { - muscle.push({text: `Slim down`, disabled: `${He} can't move and thus can't trim down`}); + muscle.push({text: `Slim down`, disabled: `${He} can't walk and thus can't trim down`}); } else if (slave.fuckdoll > 0) { muscle.push({text: `Slim down`, disabled: `${He} has no muscles left to lose`}); } @@ -1110,14 +1103,14 @@ App.UI.SlaveInteract.useSlaveDisplay = function(slave) { } else if (slave.clit >= 4) { sexOptions.push({text: `Have another slave ride ${his} clit-dick`, scene: `FSlaveSlaveDick`}); } - if (V.seeBestiality && V.cheatMode === 1) { - if (V.farmyardKennels > 0 && V.activeCanine !== 0) { + 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.farmyardStable > 0 && V.activeHooved !== 0) { + if (V.farmyardStables > 0 && V.activeHooved) { sexOptions.push({text: `Let a ${V.activeHooved.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "hooved"}}); } - if (V.farmyardCages > 0 && V.activeFeline !== 0) { + if (V.farmyardCages > 0 && V.activeFeline) { sexOptions.push({text: `Have a ${V.activeFeline.species} mount ${him}`, scene: `BeastFucked`, update: {animalType: "feline"}}); } } @@ -2204,6 +2197,21 @@ App.UI.SlaveInteract.rules = function(slave) { } } + // Mobility Aids + if (slave.fuckdoll > 0) { + // Sex toys don't move around on their own// + } else if (canMove(slave)) { + div = document.createElement("div"); + div.append("Use of mobility aids: "); + App.UI.DOM.appendNewElement("span", div, slave.rules.mobility, "bold"); + choices = [ + {value: "restrictive"}, + {value: "permissive"}, + ]; + div.append(listChoices(choices, "mobility")); + p.append(div); + } + // Punishment div = document.createElement("div"); div.append("Typical punishment: "); diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 5be576962ca5afce0b39732b498a65cd20d8935b..7e78cef8ba5171088bbdc4ec2e9006f26e4a546f 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -462,17 +462,12 @@ globalThis.getWrittenTitle = function(slave) { } }; -/** Get the written title for a given slave, or for the most recently enunciated slave, write it into global state, and return it. +/** Get the written title for a given slave, or for the active slave if none is provided. * @param {App.Entity.SlaveState} [slave] * @returns {string} */ globalThis.WrittenMaster = function(slave) { - if (slave !== undefined) { - V.writtenTitle = getWrittenTitle(slave); - } else if (V.writtenTitle === undefined) { - V.writtenTitle = getWrittenTitle(V.activeSlave); - } - return V.writtenTitle; + return getWrittenTitle(slave || V.activeSlave); }; /** Get all the enunciations used by a particular slave as a destructurable object. @@ -659,7 +654,6 @@ globalThis.getEnunciation = function(slave) { */ globalThis.Enunciate = function(slave) { V.enunciate = getEnunciation(slave); - V.writtenTitle = getWrittenTitle(slave); }; /** @@ -1842,7 +1836,7 @@ globalThis.Deadliness = function(slave) { deadliness -= getLimbCount(slave, 4) * 0.25; deadliness += getLimbCount(slave, 5) * 1.25; deadliness += getLimbCount(slave, 6) * 2.5; - if (hasBothLegs(slave) && !canWalk(slave)) { + if (hasBothLegs(slave) && !canStand(slave)) { deadliness -= 20; } diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 2f5b97a3dd332f048f98eb72162ef773808cc4d6..f3627cce627dba083f81d4546cd29ed5ef60a6d0 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -608,10 +608,10 @@ globalThis.calculateCosts = (function() { return ( ( (facility) - +(0.1*V.farmyardUpgrade.fertilizer*facility) - -(0.2*V.farmyardUpgrade.hydroponics*facility) - +(0.2*V.farmyardUpgrade.seeds*facility) - -(0.4*V.farmyardUpgrade.machinery*facility) + +(0.1*V.farmyardUpgrades.fertilizer*facility) + -(0.2*V.farmyardUpgrades.hydroponics*facility) + +(0.2*V.farmyardUpgrades.seeds*facility) + -(0.4*V.farmyardUpgrades.machinery*facility) )*2 ); } @@ -1199,8 +1199,10 @@ globalThis.getSlaveCostArray = function(s) { retval.push({text: "Increased living expenses due to muffled hearing", value: 15}); } if ((s.assignment !== Job.DAIRY || V.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { - if (!canWalk) { + if (!canMove) { retval.push({text: "Increased living expenses due to immobility", value: rulesCost}); + } else if (!canWalk) { + retval.push({text: "Increased living expenses due to limited mobility", value: rulesCost * 0.50}); } else { if (!hasAllLimbs(s)) { retval.push({ diff --git a/src/js/food.js b/src/js/food.js deleted file mode 100644 index 6ff8ce76947e838f606b7ad3394e1b040a6d8ec8..0000000000000000000000000000000000000000 --- a/src/js/food.js +++ /dev/null @@ -1,332 +0,0 @@ -/** - * @param {App.Entity.SlaveState} slave - * @returns {number} - */ -App.Facilities.Farmyard.foodAmount = function(slave) { - if (!slave) { - return `Current slave is not valid. Please report this`; - } - let food = 150; // kg of food produced per week by slave, before upgrades - if (V.farmyardUpgrade.pump === 1) { - food += 15; // pump upgrade for farmyard - } - if (V.farmyardUpgrade.fertilizer === 1) { - food += 35; // fertilizer upgrade for farmyard - } - if (V.farmyardUpgrade.seeds === 1) { - food += 65; // seeds upgrade for farmyard - } - if (V.farmyardUpgrade.machinery === 1) { - food += 65; // machinery upgrade for farmyard - } - if (V.Farmer !== 0) { // if a farmer is assigned - food *= 1.1; // TODO: expand this to account for farmer XP and skill - if (V.Farmer.skill.farmer >= V.masteredXP) { // if farmer is master - food *= 1.1; - } - } - if (slave.devotion > 50) { - food *= 1.1; - } else if (slave.devotion < -50) { - food *= 0.8; - } - if (slave.muscles > 30) { // slave is muscular or more - food *= 1.1; - } else if (slave.muscles <= -6) { // slave is weak or less - food *= 0.8; - } - if (slave.weight > 95) { // slave is overweight or more - food *= 0.9; - } else if (slave.weight > 130) { // slave is fat or more - food *= 0.8; - } else if (slave.weight > 160) { // slave is obese or more - food *= 0.7; - } else if (slave.weight > 190) { // slave is very obese or more - food *= 0.6; - } - if (!canSee(slave)) { // slave is blind - food *= 0.6; - } else if (!canSeePerfectly(slave)) { // slave is nearsighted - food *= 0.8; - } - if (slave.hears === -1) { // slave is hard of hearing - food *= 0.8; - } else if (slave.hears < -1) { // slave is deaf - food *= 0.6; - } - food *= restEffects(slave, 20); - food = Math.trunc(food); - food = Math.clamp(food, 1, 1000000000000000000); - return food; -}; - -/** - * @param {App.Entity.SlaveState} slave - * @returns {number} - */ -App.Facilities.Farmyard.farmShowsIncome = function(slave) { - // TODO: incorporate farmyardRestraints - let arcology = V.arcologies[0]; - let cash = 100; // TODO: this is just a placeholder - if (!slave) { - return null; - } else { - if (V.Farmer !== 0) { // farmer is assigned - cash *= 1.1; - if (V.Farmer.skill.farmer >= V.masteredXP) { // farmer is master - cash *= 1.1; - } - } - /* OPEN FS EFFECTS */ - if (arcology.FSSupremacist !== "unset") { - if (slave.race === arcology.FSSupremacistRace) { // slave is of supreme race - cash *= 0.9; // TODO: should supreme race slaves receive a penalty? - repX(-10, "food"); // TODO: should this cause a rep loss - } - } - if (arcology.FSSubjugationist !== "unset") { - if (slave.race === arcology.FSSubjugationistRace) { // slave is of subjugated race - cash *= 1.1; - repX(10, "food"); // TODO: should this cause a rep gain? - } else { - cash *= 0.9; // TODO: should unsubjugated race slaves receive a penalty? - } - } - if (arcology.FSRepopulationFocus !== "unset") { - if (slave.pregWeek > 16) { // slave is visibly pregnant - if (slave.eggType !== "human") { // with a non-human - cash *= 1.1; - } - cash *= 1.2; - } else { // slave is not visibly pregnant - cash *= 0.8; // TODO: should non-pregnant slaves receive a penalty? - } - } - if (arcology.FSRestart !== "unset") { - if (slave.pregWeek > 16) { // slave is visibly pregnant - if (slave.eggType !== "human") { // with a non-human - cash *= 0.9; - repX(-15, "food"); - } - cash *= 0.6; - repX(-10, "food"); - } - } - if (arcology.FSGenderRadicalist !== "unset") { - if (slave.dick > 0) { // TODO: does this make sense? - cash *= 1.1; - } else { - cash *= 0.8; - } - } - if (arcology.FSGenderFundamentalist !== "unset") { - if (slave.dick > 0) { - cash *= 1.1; // TODO: does this make sense? - } else { - cash *= 0.8; - } - } - if (arcology.FSPaternalist !== "unset") { - if (V.seeBestiality) { - if (V.farmyardBreeding === 1) { // slaves are being bred - cash *= 0.8; - } else { // slaves are putting on shows - cash *= 0.9; - } - } - } - if (arcology.FSDegradationist !== "unset") { - if (V.seeBestiality) { - if (V.farmyardBreeding === 1) { // slaves are being bred - cash *= 1.2; - } else { // slaves are putting on shows - cash *= 1.1; - } - } - } - if (arcology.FSBodyPurist !== "unset") { - if (slave.boobsImplant > 0) { // slave has breast implants - cash *= 0.9; - } - if (slave.buttImplant > 0) { // slave has butt implants - cash *= 0.9; - } - if (slave.faceImplant > 0) { // slave has had facial surgery - cash *= 0.9; - } - if (slave.lipsImplant > 0) { // slave has lip implants - cash *= 0.9; - } - } - if (arcology.FSTransformationFetishist !== "unset") { - if (slave.boobsImplant > 0) { // slave has breast implants - cash *= 1.1; - } - if (slave.buttImplant > 0) { // slave has butt implants - cash *= 1.1; - } - if (slave.faceImplant > 0) { // slave has had facial surgery - cash *= 1.1; - } - if (slave.lipsImplant > 0) { // slave has lip implants - cash *= 1.1; - } - } - if (arcology.FSYouthPreferentialist !== "unset") { - if (slave.visualAge > 25) { // slave looks older than 25 - cash *= 0.8; // TODO: not sure what age this should be - } else { - cash *= 1.2; - } - } - if (arcology.FSMaturityPreferentialist !== "unset") { - if (slave.visualAge > 25) { // slave looks older than 25 - cash *= 1.2; // TODO: not sure what age this should be - } else { - cash *= 0.8; - } - } - if (arcology.FSSlimnessEnthusiast !== "unset") { - if (slave.weight > 10) { // slave is curvy or more - cash *= 0.9; // TODO: not sure what weight this should be - } // TODO: should implants affect income? - if (slave.boobs > 799) { // slave has larger than a D cup - cash *= 0.9; // TODO: should this be smaller? - } - if (slave.butt > 3) { // slave has bigger than a bubble butt - cash *= 0.9; - } - } - if (arcology.FSAssetExpansionist !== "unset") { - if (slave.weight > 10) { // slave is curvy or more - cash *= 1.1; // TODO: not sure what weight this should be - } // TODO: should implants affect income? - if (slave.boobs > 799) { // slave has larger than a D cup - cash *= 1.1; // TODO: should this be smaller? - } - if (slave.butt > 3) { // slave has bigger than a bubble butt - cash *= 1.1; - } - } - if (arcology.FSPastoralist !== "unset") { - if (slave.boobs > 799) { // slave has larger than a D cup - cash *= 1.2; - } - if (slave.lactation > 0) { // slave is lactating - cash *= 1.1; - } - } - if (arcology.FSPhysicalIdealist !== "unset") { - if (slave.height > 169) { // slave is tall or taller - cash *= 1.1; - } else if (slave.height < 160) { // slave is short or shorter - cash *= 0.9; - } - } - if (arcology.FSHedonisticDecadence !== "unset") { - if (slave.weight > 10) { // slave is curvy or fatter - cash *= 1.1; - } else if (slave.weight < -10) { // slave is thin or thinner - cash *= 0.9; - } - } - if (arcology.FSChattelReligionist !== "unset") { // TODO: I don't know what to put for this one - if (slave.devotion < 21) { // if slave is careful or less - cash *= 0.9; - } - } - // TODO: should I add the ancient cultures FS? - /* CLOSE FS EFFECTS */ - - if (setup.entertainmentCareers.includes(slave.career)) { - cash *= 1.1; - } else if (setup.farmerCareers.includes(slave.career)) { - cash *= 1.1; - } - if (slave.prestige === 1) { // slave is prestigious - cash *= 1.1; - } else if (slave.prestige === 2) { // slave is very prestigious - cash *= 1.2; - } else if (slave.prestige === 3) { // slave is extremely prestigious - cash *= 1.3; - } - if (slave.porn.prestige === 1) { // slave is prestigious from porn - cash *= 1.1; - } else if (slave.porn.prestige === 2) { // slave is very prestigious from porn - cash *= 1.2; - } else if (slave.porn.prestige === 3) { // slave is extremely prestigious from porn - cash *= 1.3; - } // TODO: add relationship checks - if (slave.face > 40) { // slave is beautiful or more - cash *= 1.3; - } else if (slave.face > 10) { // slave is very pretty or more - cash *= 1.1; - } else if (slave.face < -10) { // slave is less than unattractive - cash *= 0.9; - } else if (slave.face < -40) { // slave is less than ugly - cash *= 0.7; - } - if (slave.devotion > 50) { // slave is devoted or more - cash *= 1.1; - } else if (slave.devotion < -50) { // slave is reluctant or less - cash *= 0.8; - } - if (slave.trust > 50) { // slave is trusting or more - cash *= 1.1; - } else if (slave.trust < -50) { // slave is less than frightened - cash *= 0.8; // TODO: should trust be a factor? - } - if (slave.weight > 30) { // slave is curvy or more - cash *= 0.8; // TODO: tie in Hedonistic FS - } else if (slave.weight < -30) { // slave is very thin or less - cash *= 0.8; // TODO: put this on a scale - } - if (slave.muscles > 30) { // slave is muscular or more - cash *= 0.9; // TODO: tie in height eugenics policy - } else if (slave.muscles < -30) { // slave is very weak or less - cash *= 0.9; // TODO: should this be on a scale? - } - if (!canSeePerfectly(slave)) { // slaves eyesight is nearsighted or worse - cash *= 0.9; // TODO: should nearsighted and blind slaves receive a penalty? - } - if (slave.hears < 0) { // slave is hard of hearing or less - cash *= 0.9; // TODO: should hard of hearing slaves receive a penalty? - } - if (slave.boobs > 800) { // slave has a DD cup or bigger - cash *= 0.9; // TODO: would this make sense? - } - if (slave.butt > 4) { // slave has an enormous butt or bigger - cash *= 0.9; // TODO: would this make sense? - } - if (slave.preg > 10) { // slave is pregnant and showing - cash *= 0.8; // TODO: not sure how to incorporate pregnancy - } // TODO: incorporate skills - cash *= healthPenalty(slave); - if (slave.intelligence > 50) { // slave is very smart or better - cash *= 1.1; - } else if (slave.intelligence < -50) { // slave is very slow or less - cash *= 0.8; - } - if (slave.energy <= 20) { // slave has no sex drive - cash *= 0.7; - } else if (slave.energy <= 40) { // slave has poor sex drive - cash *= 0.8; - } else if (slave.energy <= 60) { // slave has average sex drive - cash *= 0.9; - } else if (slave.energy <= 80) { // slave has good sex drive - cash *= 1.1; - } else if (slave.energy <= 95) { // slave has powerful sex drive - cash *= 1.2; - } else { // slave is a nymphomaniac - cash *= 1.3; - } - if (slave.fetish === "submissive") { - cash *= 1.1; - } else if (slave.fetish === "humiliation") { - cash *= 1.1; - } else if (slave.fetish === "masochist") { - cash *= 1.1; - } // TODO: tie in quirks and flaws - return cash; - } -}; diff --git a/src/js/modification.js b/src/js/modification.js index aaedaf67f8498577e15f90fa6c04ed815924f6e8..2a9358b08cdf07248ec5b33b88270aa6a3782fee 100644 --- a/src/js/modification.js +++ b/src/js/modification.js @@ -556,224 +556,3 @@ App.Medicine.Modification.setTattoo = function(slave, location, design) { slave[`${location}Tat`] = design; return r; }; - -/** - * @param {App.Entity.PlayerState|App.Entity.SlaveState} entity - * @param {boolean} player - * @returns {HTMLDivElement} - */ -App.Medicine.Modification.eyeSelector = function(entity, player = false) { - const {He, him, his} = getPronouns(entity); - - let selectedSide = "none"; - let selectedIris = "none"; - let selectedPupil = "none"; - let selectedSclera = "none"; - - let removeDiv = document.createElement("div"); - removeDiv.classList.add("choices"); - let applyDiv = document.createElement("div"); - - const container = document.createElement("div"); - container.append( - `${player ? "You have" : `${He} has`} ${App.Desc.eyesColorLong(entity)}, ${hasBothEyes( - entity) ? "they are" : "it is"} ${App.Desc.eyesType(entity)}.`, - removeDiv, "You have a number of contact lenses in various colors available. ", - App.UI.DOM.makeElement("span", `You can change what ${player ? "your" : his} eyes look like.`, "note"), - assembleLinks(), applyDiv - ); - updateRemoveDiv(); - updateApplyDiv(); - return container; - - function assembleLinks() { - const sides = ["left", "right", "both"]; - const irisColors = ["amber", "black", "blue", "brown", "green", "hazel", "orange", "pale-grey", "pink", "red", - "sky-blue", "turquoise", "white", "yellow"]; - const pupilShapes = ["none", "circular", "almond-shaped", "bright", "catlike", "demonic", "devilish", - "goat-like", "heart-shaped", "hypnotic", "serpent-like", "star-shaped", "teary", "vacant", "wide-eyed"]; - const scleraColors = ["none", "white", "amber", "black", "blue", "brown", "green", "hazel", "orange", - "pale-grey", "pink", "red", "sky-blue", "turquoise", "yellow"]; - const div = document.createDocumentFragment(); - div.append( - assembleList("Side: ", sides, value => selectedSide = value, selectedIris), - assembleList("Iris: ", irisColors, value => selectedIris = value, selectedSide), - assembleList("Pupil: ", pupilShapes, value => selectedPupil = value, selectedPupil), - assembleList("Sclera: ", scleraColors, value => selectedSclera = value, selectedSclera) - ); - return div; - } - - /** - * @param {string} name - * @param {Array<string>} list - * @param {Function}callback - * @param {string} selected - * @returns {HTMLDivElement} - */ - function assembleList(name, list, callback, selected) { - const links = []; - - for (let i = 0; i < list.length; i++) { - addToggle(list[i], callback, links, list[i] === selected); - } - - const div = document.createElement("div"); - div.classList.add("choices"); - div.append(name, App.UI.DOM.arrayToList(links, " | ", " | ")); - return div; - } - - /** - * @param {string} value - * @param {Function} callback - * @param {Array<HTMLAnchorElement>} links - * @param {boolean} [disabled] - */ - function addToggle(value, callback, links, disabled = false) { - const a = document.createElement("a"); - a.append(capFirstChar(value)); - if (disabled) { - a.classList.add("disabled"); - } - a.onclick = () => { - for (let link of links) { - link.classList.remove("disabled"); - } - a.classList.add("disabled"); - callback(value); - updateRemoveDiv(); - updateApplyDiv(); - }; - links.push(a); - } - - function updateApplyDiv() { - $(applyDiv).empty(); - if (selectedSide !== "none" && selectedIris !== "none") { - // make the following easier to read - let both = selectedSide === "both"; - let leftGlass = !hasLeftEye(entity) || getLeftEyeType(entity) === 2; - let rightGlass = !hasRightEye(entity) || getRightEyeType(entity) === 2; - - // base eye - let r = player ? "" : ` ${him}`; - if (both) { - if (leftGlass && rightGlass) { - r += ` ${selectedIris} glass eyes`; - } else if (leftGlass || rightGlass) { - r += ` a glass eye and a ${selectedIris} lens`; - } else { - r += ` ${selectedIris} lenses`; - } - } else { - r += " a"; - if ((selectedSide === "left" && leftGlass) || (selectedSide === "right" && rightGlass)) { - r += ` ${selectedIris} glass eye`; - } else { - r += ` ${selectedIris} lens`; - } - } - // pupil & sclera - if (selectedPupil !== "none" || selectedSclera !== "none") { - r += " with"; - if (selectedPupil !== "none") { - r += ` ${both ? selectedPupil : addA(selectedPupil)}`; - if (both) { - r += " pupils"; - } else { - r += " pupil"; - } - if (selectedSclera !== "none") { - r += " and"; - } - } - if (selectedSclera !== "none") { - r += ` ${selectedSclera}`; - if (both) { - r += " sclerae"; - } else { - r += " sclera"; - } - } - } - if (!both) { - r += ` for ${player ? "your" : his} ${selectedSide} eye`; - } - r += "?"; - - const a = document.createElement("a"); - a.append(player ? "Take" : "Give"); - a.onclick = applyLink; - applyDiv.append(a, r); - if (!player) { - applyDiv.append(" ", - App.UI.DOM.makeElement("span", "This is independent from eyewear choices.", "note")); - } - } - } - - function applyLink() { - // make sure the eye exists; give glass eye if there is none - if ((selectedSide === "left" || selectedSide === "both") && getLeftEyeType(entity) === 0) { - eyeSurgery(entity, "left", "glass"); - } - if ((selectedSide === "right" || selectedSide === "both") && getRightEyeType(entity) === 0) { - eyeSurgery(entity, "right", "glass"); - } - - // apply modifications - setEyeColorFull(entity, selectedIris, - selectedPupil === "none" ? "" : selectedPupil, - selectedSclera === "none" ? "" : selectedSclera, - selectedSide); - cashX(forceNeg(V.modCost), "slaveMod", entity); - - App.UI.reload(); - } - - - function updateRemoveDiv() { - $(removeDiv).empty(); - const links = []; - let _n = 0; - // remove lenses - if (hasLeftEye(entity) && getLeftEyeColor(entity) !== getGeneticEyeColor(entity, "left")) { - _n++; - links.push(removeLink("Remove left lens", () => resetEyeColor(entity, "left"))); - } - if (hasRightEye(entity) && getRightEyeColor(entity) !== getGeneticEyeColor(entity, "right")) { - _n++; - links.push(removeLink("Remove right lens", () => resetEyeColor(entity, "right"))); - } - if (_n === 2) { - links.push(removeLink("Remove both lenses", () => resetEyeColor(entity, "both"))); - } - // remove glass eyes - _n = 0; - if (getLeftEyeType(entity) === 2) { - _n++; - links.push(removeLink("Remove left glass eye", () => eyeSurgery(entity, "left", "remove"))); - } - if (getRightEyeType(entity) === 2) { - _n++; - links.push(removeLink("Remove right glass eye", () => eyeSurgery(entity, "right", "remove"))); - } - if (_n === 2) { - links.push(removeLink("Remove both glass eyes", () => eyeSurgery(entity, "both", "remove"))); - } - if (links.length > 0) { - removeDiv.append(App.UI.DOM.arrayToList(links, " | ", " | ")); - } - } - - function removeLink(text, callback) { - const a = document.createElement("a"); - a.append(text); - a.onclick = () => { - callback(); - App.UI.reload(); - }; - return a; - } -}; diff --git a/src/js/salon.js b/src/js/salon.js index 812dee1f258f663bbfcddef16011b2301b6ce023..4069c507d753be823befbfcb7ebdd2f69d627b6f 100644 --- a/src/js/salon.js +++ b/src/js/salon.js @@ -1,11 +1,235 @@ +/** + * @param {App.Entity.PlayerState|App.Entity.SlaveState} entity + * @param {boolean} player + * @returns {HTMLDivElement} + */ +App.Medicine.Modification.eyeSelector = function(entity, player = false) { + const {He, him, his} = getPronouns(entity); + + let selectedSide = "none"; + let selectedIris = "none"; + let selectedPupil = "none"; + let selectedSclera = "none"; + + let removeDiv = document.createElement("div"); + removeDiv.classList.add("choices"); + let applyDiv = document.createElement("div"); + + const container = document.createElement("div"); + container.append( + `${player ? "You have" : `${He} has`} ${App.Desc.eyesColorLong(entity)}, ${hasBothEyes( + entity) ? "they are" : "it is"} ${App.Desc.eyesType(entity)}.`, + removeDiv, "You have a number of contact lenses in various colors available. ", + App.UI.DOM.makeElement("span", `You can change what ${player ? "your" : his} eyes look like.`, "note"), + assembleLinks(), applyDiv + ); + updateRemoveDiv(); + updateApplyDiv(); + return container; + + function assembleLinks() { + const sides = ["left", "right", "both"]; + const irisColors = ["amber", "black", "blue", "brown", "green", "hazel", "orange", "pale-grey", "pink", "red", + "sky-blue", "turquoise", "white", "yellow"]; + const pupilShapes = ["none", "circular", "almond-shaped", "bright", "catlike", "demonic", "devilish", + "goat-like", "heart-shaped", "hypnotic", "serpent-like", "star-shaped", "teary", "vacant", "wide-eyed"]; + const scleraColors = ["none", "white", "amber", "black", "blue", "brown", "green", "hazel", "orange", + "pale-grey", "pink", "red", "sky-blue", "turquoise", "yellow"]; + const div = document.createDocumentFragment(); + div.append( + assembleList("Side: ", sides, value => selectedSide = value, selectedIris), + assembleList("Iris: ", irisColors, value => selectedIris = value, selectedSide), + assembleList("Pupil: ", pupilShapes, value => selectedPupil = value, selectedPupil), + assembleList("Sclera: ", scleraColors, value => selectedSclera = value, selectedSclera) + ); + return div; + } + + /** + * @param {string} name + * @param {Array<string>} list + * @param {Function}callback + * @param {string} selected + * @returns {HTMLDivElement} + */ + function assembleList(name, list, callback, selected) { + const links = []; + + for (let i = 0; i < list.length; i++) { + addToggle(list[i], callback, links, list[i] === selected); + } + + const div = document.createElement("div"); + div.classList.add("choices"); + div.append(name, App.UI.DOM.arrayToList(links, " | ", " | ")); + return div; + } + + /** + * @param {string} value + * @param {Function} callback + * @param {Array<HTMLAnchorElement>} links + * @param {boolean} [disabled] + */ + function addToggle(value, callback, links, disabled = false) { + const a = document.createElement("a"); + a.append(capFirstChar(value)); + if (disabled) { + a.classList.add("disabled"); + } + a.onclick = () => { + for (let link of links) { + link.classList.remove("disabled"); + } + a.classList.add("disabled"); + callback(value); + updateRemoveDiv(); + updateApplyDiv(); + }; + links.push(a); + } + + function updateApplyDiv() { + $(applyDiv).empty(); + if (selectedSide !== "none" && selectedIris !== "none") { + // make the following easier to read + let both = selectedSide === "both"; + let leftGlass = !hasLeftEye(entity) || getLeftEyeType(entity) === 2; + let rightGlass = !hasRightEye(entity) || getRightEyeType(entity) === 2; + + // base eye + let r = player ? "" : ` ${him}`; + if (both) { + if (leftGlass && rightGlass) { + r += ` ${selectedIris} glass eyes`; + } else if (leftGlass || rightGlass) { + r += ` a glass eye and a ${selectedIris} lens`; + } else { + r += ` ${selectedIris} lenses`; + } + } else { + r += " a"; + if ((selectedSide === "left" && leftGlass) || (selectedSide === "right" && rightGlass)) { + r += ` ${selectedIris} glass eye`; + } else { + r += ` ${selectedIris} lens`; + } + } + // pupil & sclera + if (selectedPupil !== "none" || selectedSclera !== "none") { + r += " with"; + if (selectedPupil !== "none") { + r += ` ${both ? selectedPupil : addA(selectedPupil)}`; + if (both) { + r += " pupils"; + } else { + r += " pupil"; + } + if (selectedSclera !== "none") { + r += " and"; + } + } + if (selectedSclera !== "none") { + r += ` ${selectedSclera}`; + if (both) { + r += " sclerae"; + } else { + r += " sclera"; + } + } + } + if (!both) { + r += ` for ${player ? "your" : his} ${selectedSide} eye`; + } + r += "?"; + + const a = document.createElement("a"); + a.append(player ? "Take" : "Give"); + a.onclick = applyLink; + applyDiv.append(a, r); + if (!player) { + applyDiv.append(" ", + App.UI.DOM.makeElement("span", "This is independent from eyewear choices.", "note")); + } + } + } + + function applyLink() { + // make sure the eye exists; give glass eye if there is none + if ((selectedSide === "left" || selectedSide === "both") && getLeftEyeType(entity) === 0) { + eyeSurgery(entity, "left", "glass"); + } + if ((selectedSide === "right" || selectedSide === "both") && getRightEyeType(entity) === 0) { + eyeSurgery(entity, "right", "glass"); + } + + // apply modifications + setEyeColorFull(entity, selectedIris, + selectedPupil === "none" ? "" : selectedPupil, + selectedSclera === "none" ? "" : selectedSclera, + selectedSide); + cashX(forceNeg(V.modCost), "slaveMod", entity); + + App.UI.reload(); + } + + function updateRemoveDiv() { + $(removeDiv).empty(); + const links = []; + let _n = 0; + // remove lenses + if (hasLeftEye(entity) && getLeftEyeColor(entity) !== getGeneticEyeColor(entity, "left")) { + _n++; + links.push(removeLink("Remove left lens", () => resetEyeColor(entity, "left"))); + } + if (hasRightEye(entity) && getRightEyeColor(entity) !== getGeneticEyeColor(entity, "right")) { + _n++; + links.push(removeLink("Remove right lens", () => resetEyeColor(entity, "right"))); + } + if (_n === 2) { + links.push(removeLink("Remove both lenses", () => resetEyeColor(entity, "both"))); + } + // remove glass eyes + _n = 0; + if (getLeftEyeType(entity) === 2) { + _n++; + links.push(removeLink("Remove left glass eye", () => eyeSurgery(entity, "left", "remove"))); + } + if (getRightEyeType(entity) === 2) { + _n++; + links.push(removeLink("Remove right glass eye", () => eyeSurgery(entity, "right", "remove"))); + } + if (_n === 2) { + links.push(removeLink("Remove both glass eyes", () => eyeSurgery(entity, "both", "remove"))); + } + if (links.length > 0) { + removeDiv.append(App.UI.DOM.arrayToList(links, " | ", " | ")); + } + } + + function removeLink(text, callback) { + const a = document.createElement("a"); + a.append(text); + a.onclick = () => { + callback(); + App.UI.reload(); + }; + return a; + } +}; + /** * Update ears in salon * @param {App.Entity.SlaveState} slave - * @param {object} + * @param {object} params + * @param {number|string} [params.primaryEarColor] + * @param {string} [params.secondaryEarColor] * @returns {node} */ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColor = ""} = {}) { const frag = new DocumentFragment(); + let updatePrimary = (newVal) => { primaryEarColor = newVal; apply(); }; + let updateSecondary = (newVal) => { secondaryEarColor = newVal; apply(); }; if (slave.earT !== "none" && slave.earTColor !== "hairless") { const {His, his} = getPronouns(slave); @@ -21,6 +245,7 @@ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColo "Match current hair", () => { slave.earTColor = slave.hColor; + App.Art.refreshSlaveArt(slave, 3, "artFrame"); apply(); } ) @@ -34,98 +259,14 @@ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColo div = document.createElement("div"); div.classList.add("choices"); - div.append(`Colors: `); - - const primaryEarColorArray = [ - "auburn", - "black", - "blazing red", - "blonde", - "blue-violet", - "blue", - "brown", - "burgundy", - "chestnut", - "chocolate brown", - "copper", - "dark blue", - "dark brown", - "dark orchid", - "deep red", - "ginger", - "golden", - "green-yellow", - "green", - "grey", - "hazel", - "jet black", - "neon blue", - "neon green", - "neon pink", - "pink", - "platinum blonde", - "purple", - "red", - "sea green", - "silver", - "strawberry-blonde", - "white", - ]; - - div.append(createList(primaryEarColorArray)); + div.append(`Colors:`); + div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary)); frag.append(div); - div = document.createElement("div"); div.classList.add("choices"); - div.append(`Highlights: `); - const secondaryEarColorArray = [ - { - title: "None", - value: "" - }, - { - title: "Black", - value: " with black highlights" - }, - { - title: "Blazing red", - value: " with blazing red highlights" - }, - { - title: "Blonde", - value: " with blonde highlights" - }, - { - title: "Grey", - value: " with grey highlights" - }, - { - title: "Neon blue", - value: " with neon blue highlights" - }, - { - title: "Neon green", - value: " with neon green highlights" - }, - { - title: "Neon pink", - value: " with neon pink highlights" - }, - { - title: "Rainbow", - value: " with rainbow highlights" - }, - { - title: "Silver", - value: " with silver highlights" - }, - { - title: "White", - value: " with white highlights" - }, - ]; - div.append(createList(secondaryEarColorArray)); + div.append(`Highlights:`); + div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary)); frag.append(div); if (primaryEarColor !== 0) { @@ -133,9 +274,10 @@ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColo p.classList.add("choices"); p.append( App.UI.DOM.link( - `Dye ${his} ears`, + `Color ${his} ears`, () => { slave.earTColor = (primaryEarColor + secondaryEarColor); + App.Art.refreshSlaveArt(slave, 3, "artFrame"); cashX(forceNeg(V.modCost), "slaveMod", slave); App.Medicine.Salon.ears(slave); // discard selections after locking them in. } @@ -147,35 +289,21 @@ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColo } return jQuery("#salonEars").empty().append(frag); - function createList(array) { + function createList(array, method) { const links = []; for (const item of array) { - if (typeof item === "string") { - links.push( - App.UI.DOM.link( - capFirstChar(item), - () => { - primaryEarColor = item; - apply(); - } - ) - ); - } else { - const title = item.title || capFirstChar(item.value); - links.push( - App.UI.DOM.link( - title, - () => { - secondaryEarColor = item.value; - apply(); - } - ) - ); - } + const title = item.title || capFirstChar(item.value); + links.push( + App.UI.DOM.link( + title, + () => method(item.value) + ) + ); } return App.UI.DOM.generateLinksStrip(links); } function apply() { + App.Art.refreshSlaveArt(slave, 3, "artFrame"); App.Medicine.Salon.ears( slave, { @@ -185,3 +313,482 @@ App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColo ); } }; + +/** + * Update hair in salon + * @param {App.Entity.SlaveState} slave + * @param {object} params + * @param {number|string} [params.primaryHairColor] + * @param {string} [params.secondaryHairColor] + * @returns {node} + */ +App.Medicine.Salon.hair = function(slave, {primaryHairColor = 0, secondaryHairColor = ""} = {}) { + const frag = new DocumentFragment(); + let updatePrimary = (newVal) => { primaryHairColor = newVal.value; apply(); }; + let updateSecondary = (newVal) => { secondaryHairColor = newVal.value; apply(); }; + const {His, his, He, him} = getPronouns(slave); + + if (slave.bald !== 1) { + frag.append(hairDye()); + frag.append(hairStyle()); + frag.append(hairLength()); + frag.append(hairMaint()); + } else { + // Bald + if (slave.hStyle === "bald") { + frag.append(`${He} is completely bald.`); + } else { + frag.append(wigDye()); + } + frag.append(wigStyle()); + frag.append(wigLength()); + } + return jQuery("#salonHair").empty().append(frag); + + function hairDye() { + const frag = new DocumentFragment(); + let div; + let p; + frag.append(`${His} hair is ${slave.hColor}.`); + + div = document.createElement("div"); + div.classList.add("choices"); + if (slave.origHColor !== slave.hColor) { + div.append( + App.UI.DOM.link( + "Restore natural color", + () => { + slave.hColor = slave.origHColor; + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + } + ) + ); + div.append(" or "); + App.UI.DOM.appendNewElement("span", div, "choose a new one: ", "note"); + } else { + App.UI.DOM.appendNewElement("span", div, `Choose a dye color before dyeing ${his} hair:`, "note"); + } + frag.append(div); + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Colors:`); + div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary)); + frag.append(div); + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Highlights:`); + div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary)); + frag.append(div); + + if (primaryHairColor !== 0) { + p = document.createElement("p"); + p.classList.add("choices"); + p.append( + App.UI.DOM.link( + `Color ${his} hair`, + () => { + slave.hColor = (primaryHairColor + secondaryHairColor); + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + cashX(forceNeg(V.modCost), "slaveMod", slave); + App.Medicine.Salon.hair(slave); // discard selections after locking them in. + } + ) + ); + p.append(` ${primaryHairColor}${secondaryHairColor} now?`); + frag.append(p); + } + return frag; + } + + function hairStyle() { + const frag = new DocumentFragment(); + let div; + let method; + div = document.createElement("div"); + if (slave.hStyle !== "shaved") { + div.append(`${His} ${slave.hStyle} hair is ${lengthToEitherUnit(slave.hLength)} long. `); + } else { + div.append(`${His} hair is shaved smooth. `); + } + App.UI.DOM.appendNewElement("span", div, `General hairstyles will conform to hair length and clothing choices.`, "note"); + frag.append(div); + + // Normal styles + div = document.createElement("div"); + div.classList.add("choices"); + method = (newVal) => { + slave.hStyle = newVal.value; + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + }; + if (slave.hLength > 1) { + div.append(`Style ${his} hair:`); + div.append(createList(App.Medicine.Modification.hairStyles.Normal, method)); + } else { + App.UI.DOM.appendNewElement("span", div, `${His} hair is too short to style meaningfully`, "note"); + } + frag.append(div); + + // Short styles, includes cutting + div = document.createElement("div"); + div.classList.add("choices"); + method = (newVal) => { + slave.hStyle = newVal.value; + slave.hLength = newVal.hLength; + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + }; + if (slave.hLength > 1) { + div.append(`Cut and style ${his} hair:`); + div.append(createList(App.Medicine.Modification.hairStyles.Cut, method)); + } + frag.append(div); + + return frag; + } + + function hairLength() { + const frag = new DocumentFragment(); + let div = document.createElement("div"); + div.classList.add("choices"); + let method = (newVal) => { + if (newVal.hasOwnProperty("onApplication")) { + newVal.onApplication(slave); + } + if (newVal.hasOwnProperty("hLength")) { + slave.hLength = newVal.hLength; + } + apply(); + }; + const oldHLength = (V.showInches === 2) ? Math.round(slave.hLength / 2.54) : slave.hLength; + + App.UI.DOM.appendNewElement("span", div, `Cut or lengthen ${his} hair:`); + div.append(createList(App.Medicine.Modification.hairStyles.Length, method)); + div.append(" | Custom length: "); + div.append( + App.UI.DOM.makeTextBox( + oldHLength, + v => { + v = Math.max(v, 0); // Positive hair length only + // If they entered "inches," convert + if (V.showInches === 2) { + v = Math.round(v * 2.54); + } + slave.hLength = v; + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + }, + true + ) + ); + if (V.showInches === 1) { + div.append(`cm (${cmToInchString(slave.hLength)})`); + } else if (V.showInches === 2) { + div.append(`inches`); + } + + frag.append(div); + + return frag; + } + + function hairMaint() { + let div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Have ${his} hair carefully maintained at its current length: `); + let haircuts; + let text; + if (slave.haircuts === 1) { + text = "Cease maintenance"; + haircuts = 0; + } else { + text = "Begin maintenance"; + haircuts = 1; + } + div.append( + App.UI.DOM.link( + text, + () => slave.haircuts = haircuts + ) + ); + return div; + } + + function wigDye() { + const frag = new DocumentFragment(); + let div; + let p; + frag.append(`${His} current wig is ${slave.hColor}. `); + + if (slave.hStyle !== "bald") { + frag.append( + App.UI.DOM.link( + "Remove wig", + () => { + slave.hStyle = "bald"; + slave.hLength = 0; + // I'm not going to charge you for taking off a fucking wig. + apply(); + } + ) + ); + frag.append(" or "); + App.UI.DOM.appendNewElement("span", frag, "choose a new one: ", "note"); + } else { + App.UI.DOM.appendNewElement("span", frag, `Choose a wig color:`, "note"); + } + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Colors:`); + div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary)); + frag.append(div); + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Highlights:`); + div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary)); + frag.append(div); + + if (primaryHairColor !== 0) { + p = document.createElement("p"); + p.classList.add("choices"); + p.append( + App.UI.DOM.link( + `Change`, + () => { + slave.earTColor = (primaryHairColor + secondaryHairColor); + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + cashX(forceNeg(V.modCost), "slaveMod", slave); + App.Medicine.Salon.hair(slave); // discard selections after locking them in. + } + ) + ); + p.append(` ${his} wig color to ${primaryHairColor}${secondaryHairColor} now?`); + frag.append(p); + } + return frag; + } + + function wigLength() { + const frag = new DocumentFragment(); + if (slave.hStyle === "bald") { + return frag; + } + let div = document.createElement("div"); + div.classList.add("choices"); + const array = []; + for (const number of [10, 30, 60, 90, 120, 150]) { + const obj = {}; + obj.title = lengthToEitherUnit(number); + obj.hLength = number; + array.push(obj); + } + let method = (newVal) => { + slave.hLength = newVal.hLength; + apply(); + }; + const oldHLength = (V.showInches === 2) ? Math.round(slave.hLength / 2.54) : slave.hLength; + App.UI.DOM.appendNewElement("span", div, `Set wig length to:`, "choices"); + div.append(createList(array, method)); + div.append(" | Custom length: "); + div.append( + App.UI.DOM.makeTextBox( + oldHLength, + v => { + v = Math.max(v, 10); // Wigs must be at least 10 cm + // If they entered "inches," convert + if (V.showInches === 2) { + v = Math.round(v * 2.54); + } + slave.hLength = v; + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + }, + true + ) + ); + if (V.showInches === 1) { + div.append(`cm (${cmToInchString(slave.hLength)})`); + } else if (V.showInches === 2) { + div.append(`inches`); + } + + frag.append(div); + + return frag; + } + + function wigStyle() { + const frag = new DocumentFragment(); + let div = document.createElement("div"); + div.classList.add("choices"); + const method = (newVal) => { + slave.hStyle = newVal.value; + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + }; + + if (slave.hStyle !== "bald") { + frag.append(`${His} ${slave.hStyle} wig is ${lengthToEitherUnit(slave.hLength)} long. `); + } else { + frag.append(`${He} is not wearing a wig. `); + } + App.UI.DOM.appendNewElement("span", frag, `General hairstyles will conform to hair length and clothing choices.`, "note"); + + div = document.createElement("div"); + div.classList.add("choices"); + if (slave.hStyle === "bald") { + div.append(`Give ${him} a wig:`); + } else { + div.append(`Set wig style:`); + } + div.append(createList(App.Medicine.Modification.hairStyles.Normal, method)); + frag.append(div); + return frag; + } + + function createList(array, method) { + const links = []; + for (const item of array) { + if (item.hasOwnProperty("requirements")) { + if (item.requirements(slave) === false) { + continue; + } + } + const title = item.title || capFirstChar(item.value); + links.push( + App.UI.DOM.link( + title, + () => method(item) + ) + ); + } + return App.UI.DOM.generateLinksStrip(links); + } + + function apply() { + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + App.Medicine.Salon.hair( + slave, + { + primaryHairColor: primaryHairColor, + secondaryHairColor: secondaryHairColor, + } + ); + } +}; + +/** + * Update hair in salon + * @param {App.Entity.SlaveState} slave + * @param {object} params + * @param {number|string} [params.primaryTailColor] + * @param {string} [params.secondaryTailColor] + * @returns {node} + */ +App.Medicine.Salon.tail = function(slave, {primaryTailColor = 0, secondaryTailColor = ""} = {}) { + const frag = new DocumentFragment(); + let updatePrimary = (newVal) => { primaryTailColor = newVal.value; apply(); }; + let updateSecondary = (newVal) => { secondaryTailColor = newVal.value; apply(); }; + const {His, his} = getPronouns(slave); + + if (slave.tail !== "none") { + frag.append(tailDye()); + } + + return jQuery("#salonTail").empty().append(frag); + + function tailDye() { + const frag = new DocumentFragment(); + let div; + let p; + frag.append(`${His} tail is ${slave.tailColor}.`); + + div = document.createElement("div"); + div.classList.add("choices"); + if (slave.origHColor !== slave.hColor) { + div.append( + App.UI.DOM.link( + "Match current hair", + () => { + slave.tailColor = slave.hColor; + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + cashX(forceNeg(V.modCost), "slaveMod", slave); + apply(); + } + ) + ); + div.append(" or "); + App.UI.DOM.appendNewElement("span", div, "choose a new one: ", "note"); + } else { + App.UI.DOM.appendNewElement("span", div, `Choose a dye color before dyeing ${his} tail:`, "note"); + } + frag.append(div); + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Colors:`); + div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary)); + frag.append(div); + + div = document.createElement("div"); + div.classList.add("choices"); + div.append(`Highlights:`); + div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary)); + frag.append(div); + + if (primaryTailColor !== 0) { + p = document.createElement("p"); + p.classList.add("choices"); + p.append( + App.UI.DOM.link( + `Color ${his} tail`, + () => { + slave.tailColor = (primaryTailColor + secondaryTailColor); + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + cashX(forceNeg(V.modCost), "slaveMod", slave); + App.Medicine.Salon.tail(slave); // discard selections after locking them in. + } + ) + ); + p.append(` ${primaryTailColor}${secondaryTailColor} now?`); + frag.append(p); + } + return frag; + } + + function createList(array, method) { + const links = []; + for (const item of array) { + if (item.hasOwnProperty("requirements")) { + if (item.requirements(slave) === false) { + continue; + } + } + const title = item.title || capFirstChar(item.value); + links.push( + App.UI.DOM.link( + title, + () => method(item) + ) + ); + } + return App.UI.DOM.generateLinksStrip(links); + } + + function apply() { + App.Art.refreshSlaveArt(slave, 3, "artFrame"); + App.Medicine.Salon.tail( + slave, + { + primaryTailColor: primaryTailColor, + secondaryTailColor: secondaryTailColor, + } + ); + } +}; diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index e0adc5cbe33f5bddf80a9a136338c11fdcafe010..8469e52d0b93db064628fbde85acca2f28094766 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -138,7 +138,7 @@ App.UI.SlaveSummaryRenderers = function() { } if (slave.vagina === 0) { makeSpan(c, "VV", "lime"); - } else if ((slave.pregKnown === 1) && canWalk(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) { + } else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) { makeSpan(c, "NBP", "pink"); } if (slave.anus === 0) { @@ -460,7 +460,7 @@ App.UI.SlaveSummaryRenderers = function() { } if (slave.vagina === 0) { helpers.makeSpan(c, "Virgin.", "lime"); - } else if ((slave.pregKnown === 1) && canWalk(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) { + } else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) { helpers.makeSpan(c, "Naked, barefoot, and pregnant.", "pink"); } if (slave.anus === 0) { diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js index 2c8cb5c43b01df5cad743276c4ecb99926dc6aea..afb63c489bc68e8724150118ee675ace188fd813 100644 --- a/src/js/statsChecker/statsChecker.js +++ b/src/js/statsChecker/statsChecker.js @@ -834,28 +834,16 @@ globalThis.canStand = function(slave) { return false; } else if (!hasAnyLegs(slave)) { return false; + } else if (slave.heels === 1 && (slave.shoes !== "pumps")) { + return false; } else if (slave.heels === 1 && !setup.highHeels.includes(slave.shoes)) { return false; } else if (tooFatSlave(slave)) { return false; } else if (tooBigBreasts(slave)) { return false; - } else if (slave.physicalAge <= 3) { - if (slave.belly >= 150000 + (slave.muscles * 500)) { - return false; - } - } else if (slave.physicalAge <= 12) { - if (slave.belly >= 450000 + (slave.muscles * 800)) { - return false; - } - } else if (slave.physicalAge < 18) { - if (slave.belly >= 450000 + (slave.muscles * 1000)) { - return false; - } - } else if (slave.physicalAge >= 18) { - if (slave.belly >= 1500000 + (slave.muscles * 2000)) { - return false; - } + } else if (tooBigBelly(slave)) { + return false; } return true; }; @@ -877,20 +865,20 @@ globalThis.canMove = function(slave) { if (slave.boobs > 25000 + (slave.muscles * 20)) { return false; } - if (slave.belly >= 100000) { + if (slave.belly >= 150000) { return false; } - if (slave.balls >= 30 + (slave.muscles * 0.3) && slave.physicalAge <= 3) { + if (slave.balls >= 30 + (slave.muscles * 0.3)) { return false; } } else if (slave.physicalAge <= 12) { if (slave.boobs > 100000 + (slave.muscles * 50)) { return false; } - if (slave.belly >= 400000) { + if (slave.belly >= 300000) { return false; } - if (slave.balls >= 60 + (slave.muscles * 0.5) && slave.physicalAge <= 12) { + if (slave.balls >= 60 + (slave.muscles * 0.5)) { return false; } } else if (slave.physicalAge < 18) { @@ -1018,13 +1006,13 @@ globalThis.tooBigBreasts = function(slave) { globalThis.tooBigBelly = function(slave) { if (!slave) { return null; - } else if (slave.belly >= 450000 + (slave.muscles * 2000) && slave.physicalAge >= 18) { + } else if (slave.belly >= 450000 + (slave.muscles * 2000) && slave.physicalAge >= 18) { // 250k - 650k return true; - } else if (slave.belly >= 350000 + (slave.muscles * 1000) && slave.physicalAge >= 13) { + } else if (slave.belly >= 350000 + (slave.muscles * 1000) && slave.physicalAge >= 13) { // 250k - 450k return true; - } else if (slave.belly >= 30000 + (slave.muscles * 500) && slave.physicalAge <= 3) { + } else if (slave.belly >= 120000 + (slave.muscles * 500) && slave.physicalAge <= 3) { // 70k - 170k return true; - } else if (slave.belly >= 150000 + (slave.muscles * 800) && slave.physicalAge <= 12) { + } else if (slave.belly >= 150000 + (slave.muscles * 800) && slave.physicalAge <= 12) { // 70k - 230k return true; } return false; diff --git a/src/js/vignettes.js b/src/js/vignettes.js index 7719f6ccd13a0bfa02462adb29aa57a0567376f2..5940f773f52d3e2321638a280114bbefba8ee42d 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -2,11 +2,11 @@ * @param {App.Entity.SlaveState} slave * @returns {{text: string, type: string, effect: number}} */ -globalThis.GetVignette = function(slave) { +globalThis.GetVignette = function (slave) { /** @type {{text: string, type: string, effect: number}[]} */ let vignettes = []; - const {he, him, his, hers, himself, boy, He/* , His */} = getPronouns(slave); + const { he, him, his, hers, himself, boy, He } = getPronouns(slave); if (slave.assignment === window.Job.WHORE || slave.assignment === window.Job.BROTHEL || slave.assignment === window.Job.MADAM) { let seed = jsRandom(1, 10); @@ -1144,7 +1144,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (!canWalk(slave)) { + if (!canMove || (!canWalk(slave) && canMove(slave) && slave.rules.mobility === "restrictive")) { vignettes.push({ text: `${his} lack of mobility severely hindered ${his} attempts to find customers,`, type: "cash", @@ -3113,7 +3113,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (!canWalk(slave)) { + if (!canMove || (!canWalk(slave) && canMove(slave) && slave.rules.mobility === "restrictive")) { vignettes.push({ text: `${his} lack of mobility severely hindered ${his} attempts to please citizens,`, type: "rep", @@ -4204,7 +4204,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (canWalk(slave)) { + if (canStand(slave)) { vignettes.push({ text: `${he} slipped and fell in an errant puddle of various bodily fluids,`, type: "health", @@ -4234,73 +4234,7 @@ globalThis.GetVignette = function(slave) { effect: 0, }); } else if (slave.assignment === window.Job.FARMYARD || slave.assignment === window.Job.FARMER) { - if (canWalk(slave)) { - vignettes.push({ - text: `${he} rather comically injured ${himself} by stepping on a rake,`, - type: "health", - effect: -1, - }); - } - // TODO: add more vignettes - if ((V.farmyardBreeding) && (V.seeBestiality)) { - vignettes.push({ - text: `a citizen didn't realize how disgusting he found bestiality until he attended one of ${V.farmyardName}'s shows,`, - type: "rep", - effect: -1, - }); - vignettes.push({ - text: `a citizen attended one of ${V.farmyardName}'s shows and discovered he had a bestiality fetish,`, - type: "rep", - effect: 1, - }); - vignettes.push({ - text: `${he} dreamt that you decided to have ${him} do nothing but fuck animals for the rest of ${his} life,`, - type: "devotion", - effect: -1 - }); - vignettes.push({ - text: `${he} dreamt that you wouldn't come to ${his} aid when one of ${his} bestial partners became overeager,`, - type: "trust", - effect: -1 - }); - if ((V.canines.length > 0) && hasAnyNaturalLegs(slave)) { - vignettes.push({ - text: `an over-excited dog left scratch marks on ${his} leg,`, - type: "health", - effect: -1 - }); - } - if (V.hooved.length > 0) { - vignettes.push({ - text: `${he} was injured by a particularly well-endowed horse,`, - type: "health", - effect: -1 - }); - } - if (V.felines.length > 0) { - vignettes.push({ - text: `${he} managed to take two tigers at once, aweing the crowd,`, - type: "cash", - effect: 1 - }); - } - } else { - vignettes.push({ - text: `${he} worked extra hard, and managed to sell extra produce,`, - type: "cash", - effect: 1, - }); - } - vignettes.push({ - text: `${he} felt energized by the simulated outdoor environment`, - type: "health", - effect: 1, - }); - vignettes.push({ - text: `the pesticides ${he} accidentally inhaled made ${him} feel nauseous,`, - type: "health", - effect: -1, - }); + vignettes.push(farmyardVignettes(slave)); } else if (slave.assignment === window.Job.REST || slave.assignment === window.Job.SPA) { switch (slave.behavioralFlaw) { case "anorexic": @@ -4454,6 +4388,12 @@ globalThis.GetVignette = function(slave) { type: "health", effect: -1, }); + } else if (canMove(slave)) { + vignettes.push({ + text: `${he} was so horny that ${he} sleepcrawled into your room, only to fall and bump ${his} head while climbing into bed with you,`, + type: "health", + effect: -1, + }); } else { if (hasAnyArms(slave)) { if (slave.rules.release.masturbation === 1) { @@ -4593,6 +4533,12 @@ globalThis.GetVignette = function(slave) { type: "health", effect: 1, }); + } else if (canMove(slave) && slave.rules.mobility === "permissive") { + vignettes.push({ + text: `${he} spent much of ${his} free time making use of ${his} restored mobility by exploring the arcology,`, + type: "health", + effect: 1, + }); } vignettes.push({ text: `${he} spent much of ${his} free time napping,`, @@ -4600,5 +4546,93 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } + return jsEither(vignettes); + + + + // MARK: Farmyard + + function farmyardVignettes(slave) { + let r = []; + + if (canWalk(slave)) { + r.push({ + text: `${he} rather comically injured ${himself} by stepping on a rake,`, + type: "health", + effect: -1, + }); + } + + if ((V.farmyardBreeding) && (V.seeBestiality)) { + r.push({ + text: `a citizen didn't realize how disgusting he found bestiality until he attended one of ${V.farmyardName}'s shows,`, + type: "rep", + effect: -1, + }); + + r.push({ + text: `a citizen attended one of ${V.farmyardName}'s shows and discovered he had a bestiality fetish,`, + type: "rep", + effect: 1, + }); + + r.push({ + text: `${he} dreamt that you decided to have ${him} do nothing but fuck animals for the rest of ${his} life,`, + type: "devotion", + effect: -1 + }); + + r.push({ + text: `${he} dreamt that you wouldn't come to ${his} aid when one of ${his} bestial partners became overeager,`, + type: "trust", + effect: -1 + }); + + if ((V.canines.length > 0) && hasAnyNaturalLegs(slave)) { + r.push({ + text: `an over-excited dog left scratch marks on ${his} leg,`, + type: "health", + effect: -1 + }); + } + + if (V.hooved.length > 0) { + r.push({ + text: `${he} was injured by a particularly well-endowed horse,`, + type: "health", + effect: -1 + }); + } + + if (V.felines.length > 0) { + r.push({ + text: `${he} managed to take two tigers at once, aweing the crowd,`, + type: "cash", + effect: 1 + }); + + } + } else { + r.push({ + text: `${he} worked extra hard, and managed to sell extra produce,`, + type: "cash", + effect: 1, + }); + } + + r.push({ + text: `${he} felt energized by the simulated outdoor environment`, + type: "health", + effect: 1, + }); + + r.push({ + text: `the pesticides ${he} accidentally inhaled made ${him} feel nauseous,`, + type: "health", + effect: -1, + }); + + return jsEither(r); + } }; diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js index 7e39a4bee79aeeb4ad3f9f440984b1061a3671c6..e33859127c5f8a4d3ad4a5c8f87ea5268594896e 100644 --- a/src/npc/descriptions/belly/belly.js +++ b/src/npc/descriptions/belly/belly.js @@ -188,14 +188,8 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is nothing more than a womb with a ${loli} attached. ${He} struggles to not be lost under the squirming mass of infants that dwarf ${his} body.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - r.push(`stand up`); - } else { - r.push(`get to ${his} feet`); - } - r.push(`and aid ${him} through ${his} daily affairs.`); + if (!market) { + r.push(`${He} requires multiple slaves to move ${him} and aid ${him} through ${his} daily affairs.`); } } else { r.push(`and ${he} is nothing more than a womb with a ${girl} attached. ${He} is physically unable to keep ${his} boundless middle off the ground for long, if at all.`); @@ -245,14 +239,8 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is nothing more than an obscene over-filled implant with a ${loli} attached. ${He} struggles to not be lost under the straining mass that dwarfs ${his} body.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - r.push(`stand up`); - } else { - r.push(`get to ${his} feet`); - } - r.push(`and aid ${him} through ${his} daily affairs.`); + if (!market) { + r.push(`${He} requires multiple slaves to move ${him} and aid ${him} through ${his} daily affairs.`); } } else { r.push(`and ${he} is nothing more than an over-filled implant with a ${girl} attached. ${He} is physically unable to keep ${his} boundless middle off the ground for long, if at all.`); @@ -319,24 +307,8 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`an overstuffed womb with a ${loli} attached. ${He} struggles to not be lost under the squirming mass of infants that fill ${his} body.`); } - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere`); - } + if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame can keep ${his}`); @@ -345,25 +317,6 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`life brimming belly off the ground; but only for a moment. ${He} opts to not try this often as ${his} occupants are liable to voice their complaints with a hail of kicks.`); } - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); - } - } } else if (slave.height < 150) { r.push(`and ${he} is nothing more than`); if (slave.belly > (slave.pregAdaptation * 1000)) { @@ -371,25 +324,6 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`an overstuffed womb with a ${girl} attached. ${He} struggles to remain seen under the squirming mass of infants that fill ${his} body.`); } - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); - } - } } else if (slave.muscles > 90) { r.push(`and ${his} muscular body`); if (slave.belly > (slave.pregAdaptation * 1000)) { @@ -397,26 +331,7 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`perfectly handles`); } - r.push(`${his} monolithic belly, though ${he} still can't move with it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere`); - } - } + r.push(`${his} monolithic belly, though ${he} still can't really function with it.`); } else { r.push(`and ${he} is nothing more than`); if (slave.belly > (slave.pregAdaptation * 1000)) { @@ -425,24 +340,24 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`an overstuffed womb with a ${girl} attached.`); } r.push(`${He} is physically unable to keep ${his} straining belly off the ground.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + } + if (slave.physicalAge > 12) { + if (canWalk(slave)) { + r.push(`Amazingly, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Amazingly, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`As unpleasant as it may be, ${he} is still capable of slowly dragging ${himself} along the ground.`); } + } else if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } if (slave.weight > 190) { @@ -497,24 +412,8 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`fills ${his} body.`); } - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } + if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame can keep ${his}`); @@ -522,25 +421,6 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`straining`); } r.push(`belly off the ground; but only for a moment. ${He} opts to not try this often as ${his} implant is already at its limit and could do without being slammed against the floor.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } - } } else if (slave.height < 150) { r.push(`and ${he} is nothing more than a ready-to-rupture implant with a ${girl} attached. ${He} struggles to remain seen under the straining mass that`); if (slave.belly > (slave.pregAdaptation * 1000)) { @@ -548,25 +428,6 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`fills ${his} body.`); } - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } - } } else if (slave.muscles > 90) { r.push(`and ${his} muscular body`); if (slave.belly > (slave.pregAdaptation * 1000)) { @@ -574,50 +435,31 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`perfectly handles`); } - r.push(`${his} monolithic belly, though ${he} still can't move with it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } - } + r.push(`${his} monolithic belly, though ${he} still can't really function with it.`); } else { r.push(`and ${he} is nothing more than a ready-to-rupture implant with a ${girl} attached. ${He} is physically unable to keep ${his}`); if (slave.belly > (slave.pregAdaptation * 1000)) { r.push(`straining`); } r.push(`belly off the ground.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + } + if (slave.physicalAge > 12) { + if (canWalk(slave)) { + r.push(`Amazingly, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Amazingly, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`As unpleasant as it may be, ${he} is still capable of slowly dragging ${himself} along the ground.`); } + } else if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } if (slave.weight > 190) { @@ -647,89 +489,86 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is nothing more than a womb with a ${loli} attached. ${He} has to be careful not to get crushed under ${his} own quivering mass.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); + } + } else if (slave.muscles >= 75) { + r.push(`and ${his} muscular body barely allows ${him} to manage ${his} titanic belly.`); + if (canWalk(slave)) { + r.push(`${He} walks a slow, ponderous waddle fitting for a ${girl} of ${his} size and weight.`); + } else if (canStand(slave)) { + r.push(`${He} gets a serious workout just from standing with such a heavy stomach.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`Despite ${his} size and weight, ${he} requires little assistance to get to ${his} feet, but still must use a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere, but, despite ${his} size and weight, is still able to get in and out of it on ${his} own.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Impressively, ${he} is strong enough to keep ${his} belly from dragging along the ground as ${he} crawls.`); } + } else { + r.push(`It does not stop it from completely immodilizing ${him}, however.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame barely keeps ${his} titanic belly off the ground; with considerable effort, of course.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } + } else { + r.push(`A talent that is ultimately meaningless when it is so unwieldy it immobilizes you.`); } } else if (slave.height < 150) { r.push(`and ${he} is nothing more than a womb with a ${girl} attached. ${He} has to be careful not to get crushed under ${his} own quivering mass.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } + r.push(`Dragging the mass along is nigh impossible due to its sheer weight.`); } + } else { if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } - } else if (slave.muscles > 90) { - r.push(`and ${his} muscular body barely allows ${him} to manage ${his} titanic belly.`); } else { r.push(`and ${he} is nothing more than a womb with a ${girl} attached. While ${he} can barely heft ${his} titanic belly off the floor, it takes a considerable amount of effort to do so and quickly comes to rest back where it started.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } + } else { + r.push(`A talent that is ultimately meaningless when it is so unwieldy it immobilizes you.`); } } if (slave.weight > 190) { @@ -766,89 +605,86 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is nothing more than a greatly overfilled implant with a ${loli} attached. ${He} has to be careful not to get crushed under ${his} own taut mass.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (!market) { + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); + } + } else if (slave.muscles >= 75) { + r.push(`and ${his} muscular body barely allows ${him} to manage ${his} titanic belly.`); + if (canWalk(slave)) { + r.push(`${He} walks a slow, ponderous waddle fitting for a ${girl} of ${his} size and weight.`); + } else if (canStand(slave)) { + r.push(`${He} gets a serious workout just from standing with such a heavy stomach.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`Despite ${his} size and weight, ${he} requires little assistance to get to ${his} feet, but still must use a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere, but, despite ${his} size and weight, is still able to get in and out of it on ${his} own.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Impressively, ${he} is strong enough to keep ${his} belly from dragging along the ground as ${he} crawls.`); } + } else { + r.push(`It does not stop it from completely immodilizing ${him}, however.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame barely keeps ${his} titanic belly off the ground; with considerable effort, of course.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } + } else { + r.push(`A talent that is ultimately meaningless when it is so unwieldy it immobilizes you.`); } } else if (slave.height < 150) { r.push(`and ${he} is nothing more than a greatly overfilled implant with a ${girl} attached. ${He} has to be careful not to get crushed under ${his} own taut mass.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } + r.push(`Dragging the mass along is nigh impossible due to its sheer weight.`); } + } else { if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`${He} requires multiple slaves to move ${his} bulk when ${he} must go somewhere.`); } } - } else if (slave.muscles > 90) { - r.push(`and ${his} muscular body barely allows ${him} to manage ${his} titanic belly.`); } else { r.push(`and ${he} is nothing more than a greatly overfilled implant with a ${girl} attached. While ${he} can barely heft ${his} titanic belly off the floor, it takes a considerable amount of effort to do so and quickly comes to rest back where it started.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is powerful enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } + } else { + r.push(`A talent that is ultimately meaningless when it is so unwieldy it immobilizes you.`); } } if (slave.weight > 190) { @@ -880,88 +716,75 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${his} youthful figure is grotesquely bloated by ${his} pregnancy. ${He} can't keep ${his} gigantic belly off the floor and fights a losing battle to not be pinned by it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); - } + if (!market) { + r.push(`${He} requires assistance to move when ${he} must go somewhere.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame barely keeps ${his} gigantic belly off the ground; with considerable effort, of course.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } else if (slave.height < 150) { r.push(`and ${his} small figure is utterly dwarfed by ${his} pregnancy. ${He} can't keep ${his} gigantic belly off the floor and fights a losing battle to not be pinned by it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } else if (slave.muscles > 30) { r.push(`and ${his} fit body barely allows ${him} to manage ${his} gigantic belly.`); - } else { - r.push(`and ${he} is dwarfed by ${his} pregnancy. While ${he} can keep barely ${his} gigantic belly off the floor, it takes a considerable amount of effort to do so.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks a slow, ponderous waddle fitting for a ${girl} of ${his} size and weight.`); + } else if (canStand(slave)) { + r.push(`${His} legs get a serious workout just from standing with such a heavy stomach.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`Despite ${his} size and weight, ${he} requires no assistance to get to ${his} feet, but still must use a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere, but, despite ${his} size and weight, is still able to get in and out of it on ${his} own.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); + r.push(`Impressively, ${he} is strong enough to keep ${his} belly from dragging along the ground as ${he} crawls.`); + } + } + } else { + r.push(`and ${he} is dwarfed by ${his} pregnancy. While ${he} can keep barely ${his} gigantic belly off the floor, it takes a considerable amount of effort to do so.`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`get to ${his} feet.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + } else { + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } @@ -989,88 +812,75 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${his} youthful figure is grotesquely bloated by ${his} overfilled implant. ${He} can't keep ${his} gigantic belly off the floor and fights a losing battle to not be pinned by it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } + if (!market) { + r.push(`${He} requires assistance to move when ${he} must go somewhere.`); } } else if (slave.height >= 185) { r.push(`but ${his} tall frame barely keeps ${his} gigantic belly off the ground; with considerable effort, of course.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires multiple slaves to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } else if (slave.height < 150) { r.push(`and ${his} small figure is utterly dwarfed by ${his} overfilled implant. ${He} can't keep ${his} gigantic belly off the floor and fights a losing battle to not be pinned by it.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } else if (slave.muscles > 30) { r.push(`and ${his} fit body barely allows ${him} to manage ${his} gigantic belly.`); - } else { - r.push(`and ${he} is dwarfed by ${his} overfilled implant. While ${he} can keep barely ${his} gigantic belly off the floor, it takes a considerable amount of effort to do so.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks a slow, ponderous waddle fitting for a ${girl} of ${his} size and weight.`); + } else if (canStand(slave)) { + r.push(`${His} legs get a serious workout just from standing with such a heavy stomach.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`Despite ${his} size and weight, ${he} requires no assistance to get to ${his} feet, but still must use a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere, but, despite ${his} size and weight, is still able to get in and out of it on ${his} own.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); + r.push(`Impressively, ${he} is strong enough to keep ${his} belly from dragging along the ground as ${he} crawls.`); + } + } + } else { + r.push(`and ${he} is dwarfed by ${his} overfilled implant. While ${he} can keep barely ${his} gigantic belly off the floor, it takes a considerable amount of effort to do so.`); + if (canWalk(slave)) { + r.push(`Impressively, once helped to ${his} feet, ${he} is still able to waddle along despite ${his} size.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires considerable assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`get to ${his} feet.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires considerable assistance to get in and out of it.`); } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`Dragging the mass along is becoming a challenge between its awkward size and sheer weight.`); } } } @@ -1098,69 +908,60 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is more belly than ${girl}. ${He} can barely keep ${his} massive belly from touching the floor.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (!market) { + r.push(`${He} requires assistance to move when ${he} must go somewhere.`); + } + } else if (slave.height >= 185) { + r.push(`but ${his} tall frame keeps ${his} massive belly off the ground.`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } - } else if (slave.height >= 185) { - r.push(`but ${his} tall frame keeps ${his} massive belly off the ground.`); } else if (slave.height < 150) { r.push(`and ${he} is more belly than ${girl}. ${He} can barely keep ${his} massive belly from touching the floor.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } } else if (slave.muscles > 30) { r.push(`and ${his} fit body allows ${him} to carry ${his} oversized belly normally with effort.`); } else { r.push(`and ${he} is more belly than ${girl}.While ${he} can keep ${his} massive belly from touching the floor, it takes a lot of effort to do so.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } } @@ -1186,69 +987,60 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } else if (slave.physicalAge <= 12) { r.push(`and ${he} is more belly than ${girl}. ${He} can barely keep ${his} massive belly from touching the floor.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); + if (!market) { + r.push(`${He} requires assistance to move when ${he} must go somewhere.`); + } + } else if (slave.height >= 185) { + r.push(`but ${his} tall frame keeps ${his} massive belly off the ground.`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`get to ${his} feet.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } - } else if (slave.height >= 185) { - r.push(`but ${his} tall frame keeps ${his} massive belly off the ground.`); } else if (slave.height < 150) { r.push(`and ${he} is more belly than ${girl}. ${He} can barely keep ${his} massive belly from touching the floor.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } } else if (slave.muscles > 30) { r.push(`and ${his} fit body allows ${him} to carry ${his} oversized belly normally with effort.`); } else { r.push(`and ${he} is more belly than ${girl}.While ${he} can keep ${his} massive belly from touching the floor, it takes a lot of effort to do so.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); } } } @@ -1268,55 +1060,91 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is massively pregnant, beyond any typical pregnancy,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} belly pins ${him} to the ground. ${His} toddlerish form is dwarfed by ${his} pregnancy, and try as ${he} might ${he} cannot even drag the oversized thing.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); + r.push(`and ${his} belly pins ${him} to the ground.`); + if (canWalk(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of still walking, despite ${his} toddlerish form being dwarfed by ${his} oversized pregnancy.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright, despite ${his} toddlerish form being dwarfed by ${his} oversized pregnancy.`); + } else { + r.push(`${His} toddlerish form is dwarfed by ${his} pregnancy, and try as ${he} might ${he} cannot even drag the oversized thing.`); + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`get to ${his} feet.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); - } } } else if (slave.physicalAge <= 12) { r.push(`and ${he} can barely function with ${his} oversized belly.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of still walking, if barely.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright, if barely.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`${He} can barely even crawl with such a huge stomach bulging out from ${him}. It takes everything ${he} has to avoid being forced to drag ${himself} along.`); } } } else if (slave.height >= 185) { r.push(`but ${his} tall frame barely bears ${his} oversized, drum-taut belly.`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} long limbs give ${him} an edge in crawling with such a large stomach, if it's any consolation.`); + } + } } else if (slave.height < 150) { r.push(`and ${he} can barely function with ${his} oversized belly.`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`Crawling with such a mass extending from ${his} body is near impossible, so ${he} is forced to drag ${himself} on ${his} side should ${he} need to go somewhere.`); + } + } } else if (slave.muscles > 30) { r.push(`and ${his} fit body allows ${him} to carry ${his} oversized belly without too much trouble.`); } else { r.push(`and ${he} can barely function with ${his} oversized belly.`); + if (canWalk(slave)) { + r.push(`${He} walks with an exaggerated waddle in an attempt to keep balance with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's substantial weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${He} can barely even crawl with such a huge stomach bulging out from ${him}. It takes everything ${he} has to avoid being forced to drag ${himself} along.`); + } + } } if (slave.weight > 190) { r.push(`${His} massively fat belly is stretched considerably; ${his} folds are nearly pulled flat from the strain. ${His} pregnancy is covered in a thick layer of fat, save for the bulging upper portion where ${his} fat is thinnest.`); @@ -1352,45 +1180,36 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks massively pregnant, beyond any typical pregnancy,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} belly pins ${him} to the ground. ${His} toddlerish form is dwarfed by ${his} implant, and try as ${he} might ${he} cannot even drag the oversized thing.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); - } else { - r.push(`stand up.`); - } - } else { - if (!market) { - r.push(`get to ${his} feet,`); + r.push(`and ${his} belly pins ${him} to the ground.`); + if (canWalk(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of still walking, despite ${his} toddlerish form being dwarfed by ${his} oversized implant.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright, despite ${his} toddlerish form being dwarfed by ${his} oversized implant.`); + } else { + r.push(`${His} toddlerish form is dwarfed by ${his} implant, and try as ${he} might ${he} cannot even drag the oversized thing.`); + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`get to ${his} feet.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); - } } } else if (slave.physicalAge <= 12) { r.push(`and ${he} can barely function with ${his} oversized belly.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of still walking, if barely.`); + } else if (canStand(slave)) { + r.push(`Impressively, ${he} is strong enough that, if helped to ${his} feet first, ${he} is capable of remaining upright, if barely.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + r.push(`${He} can barely even crawl with such a huge stomach bulging out from ${him}. It takes everything ${he} has to avoid being forced to drag ${himself} along.`); } } } else if (slave.height >= 185) { @@ -1419,44 +1238,36 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`${He} is massively pregnant,`); if (slave.physicalAge <= 3) { r.push(`and ${his} giant belly is as big as ${he} is.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} can barely waddle with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`${He} can barely even crawl with such a huge stomach bulging out from ${him}. It takes everything ${he} has just to avoid being immobilized by it.`); } } } else if (slave.physicalAge <= 12) { r.push(`and ${his} giant belly is nearly as big as ${he} is.`); - if (hasAnyNaturalLegs(slave)) { - r.push(`${He} requires assistance to`); - if (!hasBothLegs(slave)) { - if (!market) { - r.push(`stand up,`); + if (canWalk(slave)) { + r.push(`${He} can barely waddle with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); } else { - r.push(`stand up.`); + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); } } else { - if (!market) { - r.push(`get to ${his} feet,`); - } else { - r.push(`get to ${his} feet.`); - } - } - if (!market) { - r.push(`and uses a wheeled stand to support ${his} pregnancy when ${he} must walk anywhere.`); + r.push(`${He} can barely crawl with such a huge stomach bulging out from ${him}, pushing into the ground.`); } } } else if (slave.weight > 190) { @@ -1500,22 +1311,36 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`${He} looks full term with octuplets,`); if (slave.physicalAge <= 3) { r.push(`and ${his} giant belly is as big as ${he} is.`); - if (hasAnyLegs(slave)) { - r.push(`${He} requires assistance to get to ${his}`); - if (!market) { - r.push(`feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere`); + if (canWalk(slave)) { + r.push(`${He} can barely waddle with such an awkward bulge hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back heavily arched in an attempt to support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } } else { - r.push(`feet.`); + r.push(`${He} can barely crawl with such a huge stomach bulging out from ${him}, pushing into the ground.`); } } } else if (slave.physicalAge <= 12) { r.push(`and ${his} giant belly is nearly as big as ${he} is.`); - if (hasAnyLegs(slave)) { - r.push(`${He} requires assistance to get to ${his}`); - if (!market) { - r.push(`feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } } else { - r.push(`feet.`); + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); } } } else if (slave.weight > 190) { @@ -1542,9 +1367,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not too obvious. Only the firmness at its top gives away ${his} pregnancy.`); } else if (slave.height >= 185) { @@ -1583,9 +1438,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with septuplets,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not obvious. Only the firmness at ${his} belly's top and the weight in its sway give any hint that something's bulging it outwards.`); } else if (slave.height >= 185) { @@ -1610,9 +1495,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not too obvious. Only the firmness at its top gives away ${his} pregnancy.`); } else if (slave.height >= 185) { @@ -1649,9 +1564,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with sextuplets,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not obvious. Only the firmness at ${his} belly's top and the weight in its sway give any hint that something's bulging it outwards.`); } else if (slave.height >= 185) { @@ -1676,9 +1621,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not too obvious. Only the firmness at its top gives away ${his} pregnancy.`); } else if (slave.height >= 185) { @@ -1713,9 +1688,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with quintuplets,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not obvious. Only the firmness at ${his} belly's top and the weight in its sway give any hint that something's bulging it outwards.`); } else if (slave.height >= 185) { @@ -1740,9 +1745,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not too obvious. Only the firmness at its top gives away ${his} pregnancy.`); } else if (slave.height >= 185) { @@ -1775,9 +1810,39 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with quadruplets,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.weight > 190) { r.push(`but ${he}'s so massively fat that it's not obvious. Only the firmness at ${his} belly's top and the weight in its sway give any hint that something's bulging it outwards.`); } else if (slave.height >= 185) { @@ -1802,7 +1867,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1835,7 +1915,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with triplets,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1862,7 +1957,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1893,7 +2003,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks full term with twins,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach pushes into the floor as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1920,7 +2045,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyPreg > 0) { r.push(`${He} is enormously pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} womb making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach hangs heavily, navel tickling the floor, as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly lewdly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1949,7 +2089,22 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} looks hugely pregnant,`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} implant making ${him} resemble an over inflated blow-up doll.`); + if (canWalk(slave)) { + r.push(`${His} walk is more of an awkward waddle as ${he} struggles to handle the weight hanging from ${his} middle.`); + } else if (canStand(slave)) { + r.push(`${He} stands with ${his} back arched to better support ${his} stomach's weight.`); + } else if (canMove(slave)) { + if (slave.rules.mobility === "permissive") { + if (hasBothLegs(slave)) { + r.push(`${He} requires assistance to get to ${his} feet, and uses a wheeled stand to support ${his} middle when ${he} must walk anywhere.`); + } else { + r.push(`${He} uses a wheelchair when ${he} must go somewhere and requires assistance to get in and out of it.`); + } + } else { + r.push(`${His} stomach hangs heavily, navel tickling the floor, as ${he} crawls.`); + } + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} huge, drum-taut belly dominates ${his} poor little frame.`); } else if (slave.weight > 190) { @@ -1975,7 +2130,12 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { r.push(`${His} middle is enormously distended with ${slave.inflationType},`); if (slave.physicalAge <= 3) { - r.push(`and ${his} toddlerish body is absolutely filled by ${his} bloated innards. ${He} can barely move ${himself} and resembles an over inflated blow-up doll.`); + r.push(`and ${his} toddlerish body is absolutely filled by ${his} bloated innards.`); + if (canWalk(slave)) { + r.push(`${He} can barely waddle and resembles an over inflated blow-up doll.`); + } else { + r.push(`${He} greatly resembles an over inflated blow-up doll.`); + } } else if (slave.physicalAge <= 12) { r.push(`and ${his} massive, drum-taut belly dominates ${his} poor little frame.`); } else if (slave.weight > 130) { @@ -6678,7 +6838,7 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { r.push(`${slave.slaveName}'s mini dress barely clings to ${his} hugely swollen belly, leaving it looking much shorter than it really is.`); } else if (slave.bellyImplant > 0) { - r.push(`${slave.slaveName}'s mini dress barely clings to ${his} huge implant-filled belly, leaving it looking much shorter than it really is.`); + r.push(`${slave.slaveName}'s mini dress barely clings to ${his} big implant-filled belly, leaving it looking much shorter than it really is.`); } else { r.push(`${slave.slaveName}'s mini dress tightly clings to ${his} big pregnant belly, leaving it looking much shorter than it really is.`); } @@ -11444,7 +11604,7 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`${slave.slaveName}'s harem girl outfit sensually accentuates ${his} toned belly.`); } break; - case "a comfortable bodysuit": + case "a comfortable bodysuit": // WIP belly overhaul point if (slave.belly >= 1000000) { // WIP// } else if (slave.belly >= 750000) { @@ -11462,27 +11622,41 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else if (slave.weight > 190) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} massively fat belly, displaying every fold, roll and motion in it.`); } else if (slave.bellyPreg >= 10000 || (slave.bellyAccessory === "a huge empathy belly") || (slave.bellyAccessory === "a large empathy belly")) { - r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} big pregnant belly, displaying ${his} popped`); - if (!["a huge empathy belly", "a large empathy belly"].includes(slave.bellyAccessory)) { - r.push(`navel and any movement ${his} babies make.`); + if (slave.bellyAccessory === "a large empathy belly" || slave.bellyAccessory === "a huge empathy belly") { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} big pregnant belly, displaying ${his} popped navel.`); + } else if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} hugely swollen belly, displaying ${his} bloated figure and every jiggle of ${his} full stomach.`); + } else if (slave.bellyImplant > 0) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} big implant-filled belly, prominently displaying ${his} popped navel.`); } else { - r.push(`navel.`); + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} big pregnant belly, displaying ${his} popped navel and any movement ${his} babies make.`); } } else if (slave.weight > 160) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} hugely fat belly, displaying every fold, roll and motion in it.`); } else if (slave.weight > 130) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} big fat belly, displaying every fold and roll in it.`); - } else if (slave.bellyPreg >= 5000 || (slave.bellyAccessory === "a medium empathy belly")) { - r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} pregnant belly, displaying ${his} popped`); - if (!["a medium empathy belly"].includes(slave.bellyAccessory)) { - r.push(`navel and any movement ${his} babies make.`); + } else if (slave.belly >= 5000 || (slave.bellyAccessory === "a medium empathy belly")) { + if (slave.bellyAccessory === "a medium empathy belly") { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} pregnant belly, displaying ${his} popped navel.`); + } else if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} jiggling ${slave.inflationType}-filled belly, displaying ${his} bloating and every motion ${his} contents make.`); + } else if (slave.bellyImplant > 0) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} implant-filled belly, prominently displaying ${his} flattening navel.`); } else { - r.push(`navel.`); + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} pregnant belly, displaying ${his} flattening navel and any movement ${his} babies make.`); } } else if (slave.weight > 95) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} fat belly, displaying every fold and roll in it.`); - } else if (((slave.bellyPreg >= 1500) || (slave.bellyAccessory === "a small empathy belly"))) { - r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} growing belly, displaying ${his} ripening body.`); + } else if (slave.belly >= 1500 || slave.bellyAccessory === "a small empathy belly") { + if (slave.bellyAccessory === "a small empathy belly") { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} small pregnant belly, displaying ${his} ripening body.`); + } else if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} ${slave.inflationType}-swollen belly, displaying ${his} bloated body.`); + } else if (slave.bellyImplant > 0) { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} implant-rounded belly, displaying ${his} swollen body.`); + } else { + r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} growing belly, displaying ${his} ripening body.`); + } } else if (slave.weight > 30) { r.push(`${slave.slaveName}'s bodysuit tightly clings to ${his} chubby belly, displaying every fold and roll in it.`); } @@ -11520,8 +11694,16 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { r.push(`${slave.slaveName}'s jacket barely closes over ${his} pregnant belly leaving its buttons threatening to pop.`); } else if (slave.weight > 95) { r.push(`${slave.slaveName}'s jacket barely closes over ${his} fat belly forcing plenty of flab out from under its bottom and between the straining buttons.`); - } else if (((slave.bellyPreg >= 1500) || (slave.bellyAccessory === "a small empathy belly"))) { - r.push(`${slave.slaveName}'s jacket bulges with ${his} growing belly, which can be seen peeking out from underneath.`); + } else if (slave.belly >= 1500 || slave.bellyAccessory === "a small empathy belly") { + if (slave.bellyAccessory === "a small empathy belly") { + r.push(`${slave.slaveName}'s jacket bulges with ${his} small pregnant belly, which can be seen peeking out from underneath.`); + } else if (slave.bellyFluid >= slave.bellyPreg && slave.bellyFluid >= slave.bellyImplant) { + r.push(`${slave.slaveName}'s mini dress tightly clings to ${his} ${slave.inflationType}-swollen belly.`); + } else if (slave.bellyImplant > 0) { + r.push(`${slave.slaveName}'s mini dress tightly clings to ${his} implant-rounded belly.`); + } else { + r.push(`${slave.slaveName}'s jacket bulges with ${his} growing belly, which can be seen peeking out from underneath.`); + } } else if (slave.weight > 30) { r.push(`${slave.slaveName}'s jacket bulges with ${his} chubby belly, which can be seen peeking out from underneath as it hangs over ${his} waist of ${his} pants.`); } @@ -12643,22 +12825,40 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } } if (heavyBelly === 1) { - if (canWalk(slave)) { + if (canMove(slave)) { r.push(`${His}`); if (slave.bellyPreg >= 3000) { r.push(`pregnancy`); } else { r.push(`stomach`); } - r.push(`is so massive that it is difficult for ${him} to move.`); + r.push(`is so massive that it is difficult for ${him} to function.`); if (slave.muscles > 95) { - r.push(`However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support it.`); + r.push(`However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his}`); + if (hasBothArms(slave)) { + r.push(`arms`); + } else if (hasAnyArms(slave)) { + r.push(`arm`); + } else { + r.push(`rippling back muscles`); + } + r.push(`to support it during day to day affairs.`); } else if (slave.muscles > 30) { - r.push(`${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} arms under ${his} belly to help take its weight.`); + r.push(`${He} can barely manage to perform daily tasks, and usually moves`); + if (hasAnyArms(slave)) { + if (hasBothArms(slave)) { + r.push(`with ${his} arms under ${his} belly`); + } else { + r.push(`with ${his} arm under ${his} belly`); + } + r.push(`to help with its weight.`); + } else { + r.push(`hunched over due to the weight of ${his} belly.`); + } } else if (slave.muscles > 5) { - r.push(`${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight.`); + r.push(`${He} requires assistance to do things, and tends to lean on things to help relieve the weight.`); } else { - r.push(`${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can.`); + r.push(`${He} requires frequent assistance, and tries to stay seated as much as ${he} can.`); } } else if (slave.belly >= 750000) { r.push(`It dwarfs ${his} torso, making ${him} a vestigial accessory to ${his} belly.`); diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js index 97c279fe42747ba27ccc520db5c3557fcb25b448..63bab1973489cec437094ac516ed076d1dc32444 100644 --- a/src/npc/descriptions/boobs/boobs.js +++ b/src/npc/descriptions/boobs/boobs.js @@ -260,9 +260,7 @@ App.Desc.boobs = function() { const noun = App.Desc.boobBits.noun(slave.boobs, false, false); const adjNoun = App.Desc.boobBits.noun(slave.boobs, false, true); let r = ''; - const {he, his, him, - He, His, - girl} = getPronouns(slave); + const {he, his, him, His, girl} = getPronouns(slave); switch (slave.clothes) { case "a Fuckdoll suit": @@ -1424,7 +1422,7 @@ App.Desc.boobs = function() { */ App.Desc.boobsExtra = function(slave, {market, eventDescription} = {}) { const thisArcology = V.arcologies[0]; - const {he, his, him, He, His, girl} = getPronouns(slave); + const {he, his, him, He, His, girl, himself} = getPronouns(slave); function penthouseAccessibility() { let rt = ''; @@ -1474,11 +1472,21 @@ App.Desc.boobsExtra = function(slave, {market, eventDescription} = {}) { r += `hunched over due to the weight of ${his} tits.`; } } else if (slave.muscles > 5) { - r += `${He} requires assistance to get to ${his} feet, and uses a stand to support them when ${he} must remain upright for more than a short time.`; + r += `${He} requires assistance to get to ${his} feet, and`; + if (slave.rules.mobility === "permissive") { + r += ` uses a stand to support them when ${he} must remain upright for more than a short time.`; + } else { + r += ` has to make use of walls and objects to support ${himself} or risk falling under their weight.`; + } } else if ((slave.assignment === App.Data.Facilities.dairy.jobs.cow.assignment) && (V.dairyRestraintsSetting > 1) && (dairyTest(slave))) { r += `The straps that secure ${him} to the milking machine have become less necessary since ${his} breasts grew to the point where they pin ${him} to it.`; } else { - r += `${He} cannot get to ${his} feet unaided, and uses a wheeled stand to support ${his} boobs when ${he} must walk or remain upright.`; + r += `${He} cannot get to ${his} feet unaided, and`; + if (slave.rules.mobility === "permissive") { + r += ` uses a wheeled stand to support ${his} boobs when ${he} must walk or remain upright.`; + } else { + r += ` has to make use of walls and objects to support ${himself} and remain upright.`; + } } return r; } diff --git a/src/npc/descriptions/describePiercings.js b/src/npc/descriptions/describePiercings.js index d1a66a8ea26f15ca4d9b21a0ae750eb6a975a17c..0c8f026cd6f98a48a0bbeee6a192bbaf9e29f651 100644 --- a/src/npc/descriptions/describePiercings.js +++ b/src/npc/descriptions/describePiercings.js @@ -803,8 +803,10 @@ App.Desc.piercing = function(slave, surface) { if (slave.devotion > 20) { if (slave.energy > 90) { r.push(`${His} very special body allows ${him} to wear an incredibly lewd piece of jewelry: a thin golden chain that runs from nipple to nipple, through ${his} pierced cockhead. The chain is short, and any motion at all tugs at ${his} nipples and penis.`); - if (canWalk(slave)) { + if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive" && hasBothLegs(slave))) { r.push(`The stimulation is almost unbearable, and the mere act of walking sometimes causes ${him} to cum.`); + } else if (canMove(slave)) { + r.push(`The stimulation is almost unbearable, as any effort to move ${himself} starts building up an orgasm.`); } } } diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js index 0b0a67fd0dd013f9cded7abdc6b894b0b0e0abc1..e2ebc55d67eb375951dd1f83766a306d7187bbc3 100644 --- a/src/npc/descriptions/descriptionWidgets.js +++ b/src/npc/descriptions/descriptionWidgets.js @@ -1083,8 +1083,10 @@ App.Desc.shortLimbs = function(slave) { } r += " "; - if (!canWalk(slave)) { + if (!canMove(slave)) { r += " Immob "; + } else if (!canWalk(slave)) { + r += " Hindered "; } if (slave.heels === 1) { r += " Heel "; @@ -1196,8 +1198,10 @@ App.Desc.longLimbs = function(slave) { } } - if (!canWalk(slave)) { + if (!canMove(slave)) { r += "Immobile. "; + } else if (!canWalk(slave)) { + r += "Hindered. "; } if (slave.heels === 1) { r += "Heeled. "; diff --git a/src/npc/interaction/FSuckle.tw b/src/npc/interaction/FSuckle.tw index 4a2a5eb7eb129d2db6d19cb3ea8ee583230cb2b9..a145d6c893f5e8a7b6e81d2fd4b2b16de2c7cd7c 100644 --- a/src/npc/interaction/FSuckle.tw +++ b/src/npc/interaction/FSuckle.tw @@ -35,7 +35,7 @@ You <<if _mood == 2>>demand<<else>>beckon<</if>> <<= getSlave($AS).slaveName>> t to take a seat on the floor close to you. <</if>> -<<if canWalk(getSlave($AS))>> +<<if canMove(getSlave($AS))>> <<if getSlave($AS).fetish == "mindbroken">> $He complies without a thought. <<elseif getSlave($AS).devotion > 20 && getSlave($AS).trust > 20>> diff --git a/src/npc/interaction/fAnus.tw b/src/npc/interaction/fAnus.tw index 2218ff43a6ea48b24d9451d0f88897eb20ec9c4a..a22547fa64668fd0f90be640855620a0e6a11314 100644 --- a/src/npc/interaction/fAnus.tw +++ b/src/npc/interaction/fAnus.tw @@ -196,7 +196,7 @@ You call $him over so you can <</if>> <<if $postSexCleanUp > 0>> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> <<if getSlave($AS).anus < 2>> <<set _Anus = "tight butt">> <<elseif getSlave($AS).anus < 3>> diff --git a/src/npc/interaction/fBellyFuck.tw b/src/npc/interaction/fBellyFuck.tw index bb2c5857ae12c972aa1dfdc0435fb2d6295a8f7e..ee82cebde746b0d9c6ae5bd3f89368e2a2f26f67 100644 --- a/src/npc/interaction/fBellyFuck.tw +++ b/src/npc/interaction/fBellyFuck.tw @@ -28,7 +28,7 @@ You have $him brought to you so that you can fuck $his hyperpregnant body. massive belly. <</if>> $He won't be a particularly able lover, but enjoying $his immobility is half the point. -<<elseif !canWalk(getSlave($AS))>> +<<elseif !canStand(getSlave($AS))>> $He can't support $himself, so $he is left leaning against $his <<if getSlave($AS).bellyPreg >= 1000000>> impossibly exploded baby bump. diff --git a/src/npc/interaction/fButt.tw b/src/npc/interaction/fButt.tw index 99d02192b0a64675463bcfc2b8e4c63fa1e37850..72ca222ef02c34e6c63a3402733d4f910597d74f 100644 --- a/src/npc/interaction/fButt.tw +++ b/src/npc/interaction/fButt.tw @@ -206,7 +206,7 @@ You call $him over so you can $His still-tight ass keeps your load inside $him. <</if>> -<<if canWalk(getSlave($AS)) && $postSexCleanUp > 0>> +<<if canMove(getSlave($AS)) && $postSexCleanUp > 0>> <<switch getSlave($AS).assignment>> <<case "whore">> $He heads to the bathroom to clean $his <<if canDoVaginal(getSlave($AS)) && canDoAnal(getSlave($AS))>>holes before returning to selling them publicly.<<elseif canDoVaginal(getSlave($AS)) || canDoAnal(getSlave($AS))>>fuckhole before returning to selling it publicly.<<else>>face before returning to selling $his mouth publicly.<</if>> diff --git a/src/npc/interaction/fDick.tw b/src/npc/interaction/fDick.tw index 4463b3e59ad556f1d0ebb1555167dc48feca9985..9842daff7b691e7d6523f7fa8e84ce4c7a4bc716 100644 --- a/src/npc/interaction/fDick.tw +++ b/src/npc/interaction/fDick.tw @@ -217,7 +217,7 @@ <</if>> <</if>> -<<if canWalk(getSlave($AS)) && getSlave($AS).fetish != "mindbroken" && $postSexCleanUp > 0>> +<<if canMove(getSlave($AS)) && getSlave($AS).fetish != "mindbroken" && $postSexCleanUp > 0>> <<switch getSlave($AS).assignment>> <<case "whore">> $He heads to the bathroom to clean $his dick before returning to selling $his body publicly. @@ -248,7 +248,7 @@ <<case "work as a servant">> $He rushes to wash $his dick, impatient to get back to $his undiminished chores. <<case "work as a nanny">> - $He runs off to wash off $his dick before heading back to the $nurseryName. + $He hurries off to wash off $his dick before heading back to the $nurseryName. <</switch>> <</if>> diff --git a/src/npc/interaction/fKiss.tw b/src/npc/interaction/fKiss.tw index c708b599c0b01f490dd1c1a72b12203340a52d19..0cd7acad44532fea6b209e12eaafb8192af83302 100644 --- a/src/npc/interaction/fKiss.tw +++ b/src/npc/interaction/fKiss.tw @@ -7,27 +7,27 @@ You tell <<= getSlave($AS).slaveName>> to <<switch getSlave($AS).mouthAccessory>> <<case "none">> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> approach you. <<else>> have another slave help $him to your desk. <</if>> <<case "dildo gag">> - <<if hasAnyArms(getSlave($AS))>> + <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> remove $his dildo gag and approach you. <<else>> have another slave remove $his dildo gag and set $him down on your desk. <</if>> <<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">> <<case "massive dildo gag">> - <<if hasAnyArms(getSlave($AS))>> + <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> pull $his enormous dildo gag out of the depths of $his throat and approach you. <<else>> have another slave pull the enormous dildo gag out of the depths of $his throat and set $him down on your desk. <</if>> <<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">> <<default>> - <<if hasAnyArms(getSlave($AS))>> + <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> undo $his gag and approach you. <<else>> have another slave undo $his gag and set $him down on your desk. @@ -92,7 +92,7 @@ You tell <<= getSlave($AS).slaveName>> to <<if canSee(getSlave($AS))>> into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense attention from $his <<= WrittenMaster()>> disconcerting, and $he looks down after a moment, blushing. <<else>> - upon $his face. $He finds the intense attention from $his <<= WrittenMaster()>>disconcerting, and $he looks down after a moment, blushing. + upon $his face. $He finds the intense attention from $his <<= WrittenMaster()>> disconcerting, and $he looks down after a moment, blushing. <</if>> <<elseif (getSlave($AS).devotion > 20)>> $He hurriedly complies, happy to be near you. Once $he's close, you take a moment to gaze deeply diff --git a/src/npc/interaction/fLickPussy.tw b/src/npc/interaction/fLickPussy.tw index d060cddc6a5c768cbed77a2007ff331791c4e18d..c164ca8caf00f677ddf39f588abd71311e9db44b 100644 --- a/src/npc/interaction/fLickPussy.tw +++ b/src/npc/interaction/fLickPussy.tw @@ -6,7 +6,7 @@ <<set _devotion = getSlave($AS).devotion>> /*for brevity*/ -<<if canWalk(getSlave($AS))>> +<<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> You summon <<= getSlave($AS).slaveName>> to your office and order $him to lie down on the couch. $He does so <<if _devotion > 95>> with a smile, skipping over to give you a quick kiss before $he complies with your request. @@ -21,10 +21,10 @@ You have <<= getSlave($AS).slaveName>> brought into your office and placed on your couch. <</if>> -After $he is situated, you go over to $him<<if getSlave($AS).clothes != "no clothing">> and take off $his clothing, causing $him to <<if _devotion > 50>>give you a soft smile<<else>>give you an angry glare<</if>><</if>>. You suddenly grab $his hips and pull $his crotch to your face, causing $him to give a shriek of surprise. Looking at $him directly in the eyes, you begin to run your tongue along $his labia, drawing a soft moan from $him. The combination of the pleasure and the intense look from the _womanP $he<<if _devotion > 95>> loves <<elseif _devotion > 50>>'s accepted as $his <<= WrittenMaster(getSlave($AS))>><<else>> hates/*not sure what to use for "reluctant"*/<</if>> makes $him blush, but you don't let up. +After $he is situated, you go over to $him<<if getSlave($AS).clothes != "no clothing">> and take off $his clothing, causing $him to <<if _devotion > 50>>give you a soft smile<<else>>give you an angry glare<</if>><</if>>. You suddenly grab $his hips and pull $his crotch to your face, causing $him to <<if canTalk(getSlave($AS))>>give a shriek of surprise<<else>>shudder in surprise<</if>>. Looking at $him directly in the eyes, you begin to run your tongue along $his labia, drawing a <<if canTalk(getSlave($AS))>>soft<<else>>silent<</if>> moan from $him. The combination of the pleasure and the intense look from the _womanP $he<<if _devotion > 95>> loves <<elseif _devotion > 50>>'s accepted as $his <<= WrittenMaster(getSlave($AS))>><<else>> hates/*not sure what to use for "reluctant"*/<</if>> makes $him blush, but you don't let up. <<if getSlave($AS).dick == 0>> - You give $his clit a few experimental tweaks, causing $his moans to intensify<<if hasBothLegs(getSlave($AS))>> and $his legs to tighten around your head<</if>>. + You give $his clit a few experimental tweaks, causing $his <<if canTalk(getSlave($AS))>>moans<<else>>squirming<</if>> to intensify<<if hasBothLegs(getSlave($AS))>> and $his legs to tighten around your head<</if>>. <</if>> -Before $he cums, though, you pull back, causing $him to whine in frustration. You begin again, then pull back again just before $he orgasms. You repeat this several more times, each time causing $him to become more and more frustrated. Finally, one last stroke of your tongue causes $him to go over the edge, making $him scream out <<if _devotion > 50>>your name<</if>> in ecstasy<<if getSlave($AS).dick > 0>><<if canAchieveErection(getSlave($AS))>> and spray cum across $his chest<<else>> and dribble cum from $his limp dick<</if>><</if>>. You send $him back to $his assignment before calling in another slave to clean up the mess. +Before $he cums, though, you pull back, causing $him to whine in frustration. You begin again, then pull back again just before $he orgasms. You repeat this several more times, each time causing $him to become more and more frustrated. Finally, one last stroke of your tongue causes $him to go over the edge, making $him <<if canTalk(getSlave($AS))>>scream out <<if _devotion > 50>>your name<</if>><<else>>spasm<</if>> in ecstasy<<if getSlave($AS).dick > 0>><<if canAchieveErection(getSlave($AS))>> and spray cum across $his chest<<else>> and dribble cum from $his limp dick<</if>><</if>>. You send $him back to $his assignment before calling in another slave to clean up the mess. <<set getSlave($AS).counter.vaginal++, $vaginalTotal++>> diff --git a/src/npc/interaction/fRelation.tw b/src/npc/interaction/fRelation.tw index d3863431b65406ebe9269ca18460e1a7617db8c3..f61c686d1d5e27c892f1480e7de73fbbc317d972 100644 --- a/src/npc/interaction/fRelation.tw +++ b/src/npc/interaction/fRelation.tw @@ -39,7 +39,7 @@ You call both <<= getSlave($AS).slaveName>> and $slaves[$partner].slaveName to your office. -<<if canWalk(getSlave($AS)) && canWalk($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 50) && canPenetrate(getSlave($AS)) && canPenetrate($slaves[$partner]) && ($slaves[$partner].anus > 0) && (getSlave($AS).anus > 0) && ($PC.dick != 0)>> +<<if canMove(getSlave($AS)) && canMove($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 50) && canPenetrate(getSlave($AS)) && canPenetrate($slaves[$partner]) && ($slaves[$partner].anus > 0) && (getSlave($AS).anus > 0) && ($PC.dick != 0)>> There are three stiff pricks available. Since <<= getSlave($AS).slaveName>> was already in your office, $he goes on the bottom. $He lies on the floor, spreads $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>buttocks, relaxes $his anus, and then begs $his _partnerRel to buttfuck $him. $slaves[$partner].slaveName does, slipping _his2 cock into _his2 _activeSlaveRel's ass. _He2 then stops and waits for you to buttfuck _him2 in turn. It isn't a particularly convenient way to fuck, but it's got the virtue of being uncommon. $slaves[$partner].slaveName, both fucking and getting fucked, comes in _his2 _activeSlaveRel's rectum first. They switch places so <<= getSlave($AS).slaveName>> can have a turn in the middle, leaving you to finish into <<= getSlave($AS).slaveName>>'s already cum-soaked hole. <<set getSlave($AS).counter.anal += 2, getSlave($AS).counter.penetrative++, $slaves[$partner].counter.anal += 2, $slaves[$partner].counter.penetrative++, $analTotal += 4, $penetrativeTotal += 2>> <<elseif ($slaves[$partner].devotion - getSlave($AS).devotion > 20) && ($slaves[$partner].devotion <= 50)>> @@ -50,12 +50,12 @@ You call both <<= getSlave($AS).slaveName>> and $slaves[$partner].slaveName to y <<= getSlave($AS).slaveName>> is a lot more ready and willing for this than $slaves[$partner].slaveName, so<<if ($PC.dick == 0)>>while getting into a strap-on,<</if>> you sit $him on the couch and make $slaves[$partner].slaveName sit on $his lap, facing $him. In this position, <<= getSlave($AS).slaveName>> can reach around and spread $his _partnerRel's <<if $seeRace == 1>>$slaves[$partner].race <</if>>buttocks for _him2, controlling _him2 all the while in case _he2 has hesitations about this. $slaves[$partner].slaveName knows that _he2's trapped, and lets _his2 _activeSlaveRel hold _his2 ass wide so you can use _him2. They're face to face, and it's not hard to tell that $slaves[$partner].slaveName is glaring daggers at <<= getSlave($AS).slaveName>>. You reward <<= getSlave($AS).slaveName>> for $his obedience and punish $slaves[$partner].slaveName for _his2 resistance by forcing _him2 to suck <<= getSlave($AS).slaveName>> off while you finish using $slaves[$partner].slaveName. <<set getSlave($AS).counter.oral++, $slaves[$partner].counter.oral++, $oralTotal++>> <<= VCheck.Partner()>> -<<elseif canWalk(getSlave($AS)) && canWalk($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (hasAnyArms(getSlave($AS))) && (["mother", "father", "sole parent"].includes(_activeSlaveRel))>> +<<elseif canMove(getSlave($AS)) && canMove($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (hasAnyArms(getSlave($AS))) && (["mother", "father", "sole parent"].includes(_activeSlaveRel))>> <<= getSlave($AS).slaveName>> gives you a little smile when $he <<if canHear(getSlave($AS))>>hears<<else>>learns<</if>> you wish to fuck $him and $his _daughter2 $slaves[$partner].slaveName<<if ($PC.dick == 0)>> and <<if canSee(getSlave($AS))>>sees<<else>>acknowledges<</if>> your strap-on<</if>>. On your direction, <<= getSlave($AS).slaveName>> sits on the couch. When $slaves[$partner].slaveName enters, _his2 _activeSlaveRel spreads $his arms and tells _him2 to sit on $his lap. $slaves[$partner].slaveName gets the idea and straddles $him so they're face to face. You take $slaves[$partner].slaveName from behind; _he2 gasps as _he2 feels _his2 _activeSlaveRel's hand<<if (hasBothArms($slaves[$partner]))>>s<</if>> stimulate _him2 from the front. They make out shamelessly while you take your pleasure. When you finish, <<= getSlave($AS).slaveName>> lies down on the couch so $slaves[$partner].slaveName can ride $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>face. As $he sucks the cum out of $his _daughter2's sopping fuckhole, $slaves[$partner].slaveName sucks you hard again. In the mood for something harder this time, you jam yourself into the older <<= getSlave($AS).slaveName>>. $slaves[$partner].slaveName gets off <<= getSlave($AS).slaveName>>'s face so _he2 can offer _himself2 for fondling and groping while you pound <<= getSlave($AS).slaveName>>. After you're done, $slaves[$partner].slaveName returns _his2 _activeSlaveRel's affection and gives $him some gentle oral as the older slave lies there exhausted. <<set getSlave($AS).counter.oral += 2, $slaves[$partner].counter.oral += 2, $oralTotal += 2>> <<= VCheck.Both()>> <<= VCheck.Partner()>> -<<elseif canWalk(getSlave($AS)) && canWalk($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (["daughter", "son"].includes(_activeSlaveRel))>> +<<elseif canMove(getSlave($AS)) && canMove($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (["daughter", "son"].includes(_activeSlaveRel))>> <<= getSlave($AS).slaveName>> is enthusiastic when $he <<if canHear(getSlave($AS))>>hears<<else>>notices<</if>> you order $slaves[$partner].slaveName to come over. $His total immersion in sexual slavery has clearly uncovered a willingness to get very close to $his _partnerRel. You<<if ($PC.dick == 0)>> don a strap-on,<</if>> lie on the floor and instruct $slaves[$partner].slaveName to ride you. _He2 complies, and finds _his2 $daughter <<= getSlave($AS).slaveName>> <<if ($slaves[$partner].dick > 0)>> stroking _his2 cock while _he2 humps _his2 <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>butt up and down on your cock. @@ -65,12 +65,12 @@ You call both <<= getSlave($AS).slaveName>> and $slaves[$partner].slaveName to y Your use of $slaves[$partner].slaveName's <<if $slaves[$partner].physicalAge >= 24>>mature<<else>>surprisingly young<</if>> body is the focus. _He2 finds _himself2 caught up in a miasma of sexual pleasure and perversion, moaning and blushing as your <<if ($PC.dick == 0)>>strap-on and fingers<<else>>cock<</if>> and <<= getSlave($AS).slaveName>>'s mouth tour _his2 body. When you finish in _his2 <<if ($slaves[$partner].dick > 0)>>asshole, _his2 $daughter hastens to lavish attention on $his _partnerRel's well fucked, cum filled butt.<<else>>pussy, _his2 $daughter hastens to lavish attention on $his _partnerRel's well fucked, cum filled cunt.<</if>> <<set getSlave($AS).counter.oral += 2, $slaves[$partner].counter.oral += 2, $oralTotal += 2>> <<= VCheck.Partner()>> -<<elseif canDoVaginal(getSlave($AS)) && canDoVaginal($slaves[$partner]) && canWalk(getSlave($AS)) && canWalk($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 50) && (["twin brother", "twin sister"].includes(_activeSlaveRel))>> +<<elseif canDoVaginal(getSlave($AS)) && canDoVaginal($slaves[$partner]) && canMove(getSlave($AS)) && canMove($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 50) && (["twin brother", "twin sister"].includes(_activeSlaveRel))>> <<= getSlave($AS).slaveName>> and $slaves[$partner].slaveName are such devoted sex slaves that they've long since lost any hesitations about their partnership, and generally approach sex as though their bodies were interchangeable. (This means that they almost never masturbate, for one thing, preferring to have sex with each other, instead.) Giggling and kissing each other, they eagerly kneel before your chair and give you simultaneous oral sex, making an effort to play with their symmetry. They kiss around your <<if ($PC.dick == 0)>>pussy<<else>>cock, making a complete seal around you with their lips<</if>>, one on each side. Then they jump up on your desk and press their <<if (getSlave($AS).dick > 0) && ($slaves[$partner].dick > 0)>>cocks<<elseif (getSlave($AS).dick > 0) || ($slaves[$partner].dick > 0)>>cock and pussy<<else>>pussies<</if>> against one another<<if ($PC.dick == 0)>> while you don a strap-on<</if>>, spreading their legs to offer you everything. You switch back and forth, with the twin you're not in rubbing and grinding against the one you are, until both of $slaves[$partner].slaveName and <<= getSlave($AS).slaveName>> are lying on the desk<<if ($PC.dick != 0)>> with cum dripping out of them<</if>>, making out tiredly. <<set $slaves[$partner].counter.oral++, getSlave($AS).counter.oral++, $oralTotal++>> <<= VCheck.Both()>> <<= VCheck.Partner()>> -<<elseif canWalk(getSlave($AS)) && canWalk($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (["sister", "brother", "half-sister", "half-brother", "twin sister", "twin brother"].includes(_activeSlaveRel))>> +<<elseif canMove(getSlave($AS)) && canMove($slaves[$partner]) && (getSlave($AS).devotion > 50) && ($slaves[$partner].devotion > 20) && (["sister", "brother", "half-sister", "half-brother", "twin sister", "twin brother"].includes(_activeSlaveRel))>> You call <<= getSlave($AS).slaveName>>'s _partnerRel $slaves[$partner].slaveName in for some incestuous fun, but see no reason to wait for _him2. When _he2 arrives, it's to the <<if canSee($slaves[$partner])>>sight<<else>>scene<</if>> of <<= getSlave($AS).slaveName>> sitting on the couch with $his legs spread with you <<if (getSlave($AS).vagina > -1)>>gently fucking $his pussy<<else>>using $his asshole<</if>><<if ($PC.dick == 0)>> with a strap-on<</if>>. You pull out and order $slaves[$partner].slaveName to orally service _his2 _activeSlaveRel. _He2 gets down before the spread-eagled slave $girl to get to work. After watching <<= getSlave($AS).slaveName>> enjoy the attention for a while, you move behind the busy $slaves[$partner].slaveName and pull _him2 into a good position so you can fuck _him2 while _he2 sucks. After a few thrusts, <<= getSlave($AS).slaveName>>'s eyes roll back. <<if (getSlave($AS).voice == 0) || (getSlave($AS).accent >= 3)>>$He gestures that it feels really good when you make $his _partnerRel moan into $him.<<else>>"Oh <<Master>>," $he squeals, "it feel<<s>> <<s>>o good when you make _him2 moan into me!"<</if>> <<set $slaves[$partner].counter.oral++, getSlave($AS).counter.oral++, $oralTotal++>> <<= VCheck.Both()>> diff --git a/src/npc/interaction/fSlaveFeed.tw b/src/npc/interaction/fSlaveFeed.tw index e7d6fe2cc5a86b40a31abd995d9e7e68220a77b5..ca07b79a564874b0253e78ec60d3660a44132bfd 100644 --- a/src/npc/interaction/fSlaveFeed.tw +++ b/src/npc/interaction/fSlaveFeed.tw @@ -824,12 +824,12 @@ Next, you see to <<= getSlave($AS).slaveName>>. You help the bloated <<= getSlave($AS).slaveName>> to the couch to recover and, more importantly, keep $his meal down. Only once $he has had several minutes to unwind<<if getSlave($AS).devotion > 10>> and plenty of time to tease you with $his swollen body, do you tell <<else>> do you order<</if>> $him to keep drinking from $milkTap.slaveName so that $he is always filled with <<if getSlave($AS).inflation == 3>>two gallons<<elseif getSlave($AS).inflation == 2>>four liters<<else>>two liters<</if>> of <<= getSlave($AS).inflationType>>. You give $his <<if getSlave($AS).inflation == 3>>taut, firm globe of a belly a pat<<elseif getSlave($AS).inflation == 2>>wobbly, sloshing belly a pat<<else>>distended, sloshing belly a pat<</if>> and send $him on $his way. <<if getSlave($AS).inflation == 3>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his over-stuffed belly as $he goes<<else>>$His belly is so taut it barely wobbles at all as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility === "permissive">>$He gingerly leaves your office, massaging $his over-stuffed belly as $he goes<<else>>$His belly is so taut it barely wobbles at all as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. <<run healthDamage(getSlave($AS), 1)>> <<elseif getSlave($AS).inflation == 2>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility === "permissive">>$He gingerly leaves your office, massaging $his stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. <<elseif getSlave($AS).inflation == 1>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility === "permissive">>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. <</if>> <br><br> <<if $milkTap.fuckdoll == 0>> diff --git a/src/npc/interaction/fVagina.tw b/src/npc/interaction/fVagina.tw index 028877f94692bddd85efb3916cc31919964532c3..7386318b2a323f9095eb7e68e84905a71d2f051d 100644 --- a/src/npc/interaction/fVagina.tw +++ b/src/npc/interaction/fVagina.tw @@ -94,7 +94,7 @@ You call $him over so you can <<set _fSpeed = random(1,100)>> <</if>> -<<if canWalk(getSlave($AS)) && getSlave($AS).fetish != "mindbroken">> +<<if canMove(getSlave($AS)) && getSlave($AS).fetish != "mindbroken">> You decide to fuck $him <<if (_fPosition <= 20)>> in the missionary position. @@ -513,7 +513,7 @@ You call $him over so you can Your cum slides right out of $his gaping hole. <</if>> - <<if canWalk(getSlave($AS)) && $postSexCleanUp > 0>> + <<if canMove(getSlave($AS)) && $postSexCleanUp > 0>> $He uses <<if getSlave($AS).vagina > 0>>a quick douche to clean $his <<if getSlave($AS).vagina < 2>>tight<<elseif getSlave($AS).vagina > 3>>loose<</if>> pussy<<else>>an enema to clean $his <<if getSlave($AS).anus < 2>>tight<<elseif getSlave($AS).anus < 3>>used<<else>>gaping<</if>> butthole<</if>>, <<switch getSlave($AS).assignment>> <<case "work in the brothel">> diff --git a/src/npc/interaction/fillUpButt.tw b/src/npc/interaction/fillUpButt.tw index fb6591c6a9dbaf3b75947e3c07b870080a9b6435..ea27556981a0d9e9288973914e7f901091372dbb 100644 --- a/src/npc/interaction/fillUpButt.tw +++ b/src/npc/interaction/fillUpButt.tw @@ -74,7 +74,7 @@ before shoving the equipment into $his <<run deflate(getSlave($AS))>> <<set getSlave($AS).pregKnown = 1>> <<elseif getSlave($AS).fetish == "mindbroken">> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to present $his buttocks and anus but $he remains still and unresponsive. Talking to a broken mind is pointless. <</if>> You reach around and grab $his @@ -129,9 +129,9 @@ before shoving the equipment into $his <<else>> $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you push $him onto your desk and admire $his distended, <<= getSlave($AS).skin>> stomach. You give the gut orb a slap, eliciting a slight grunt from the broken slave and touch of wiggling and sloshing from $his middle. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise.<</if>> <<elseif getSlave($AS).devotion < -20>> - <<if canWalk(getSlave($AS))>> - You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. Opposed to the thought of being filled <<if getSlave($AS).inflation > 0>>more <</if>>with <<= getSlave($AS).inflationType>>, $he tries to step back, but you catch $him and pull $him closer to you as you reach around and grab $his - <<elseif (hasAnyLegs(getSlave($AS)))>> + <<if canMove(getSlave($AS))>> + You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. Opposed to the thought of being filled <<if getSlave($AS).inflation > 0>>more <</if>>with <<= getSlave($AS).inflationType>>, $he tries to <<if canWalk(getSlave($AS))>>step back<<else>>crawl away<</if>>, but you catch $him and pull $him closer to you as you reach around and grab $his + <<elseif !isAmputee(getSlave($AS))>> You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. $He's opposed to the thought of being filled <<if getSlave($AS).inflation > 0>>more <</if>>with <<= getSlave($AS).inflationType>>, but since $he is immobile, can't escape. You reach around and grab $his <<else>> $He's opposed to the thought of being filled with <<if getSlave($AS).inflation > 0>>more <</if>><<= getSlave($AS).inflationType>>, but as an amputee can do nothing about it. You reach around and grab $his @@ -191,14 +191,14 @@ before shoving the equipment into $his <</if>> butthole, and setting it on low. <<if getSlave($AS).inflation == 2>> - $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. + $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. <<elseif getSlave($AS).inflation == 1>> - $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. <<else>> - $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise.<</if>> + $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise.<</if>> <<elseif (getSlave($AS).devotion <= 20)>> - <<if canWalk(getSlave($AS))>> - You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. $He complies without comment, standing in front of you. + <<if canMove(getSlave($AS))>> + You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. $He complies without comment, <<if canStand(getSlave($AS))>>standing in front of you.<<else>>turning $his rear to you.<</if>> <<elseif !isAmputee(getSlave($AS))>> You instruct $him to present $his anus for a <<= getSlave($AS).inflationType>> enema. $He complies without comment, readying $his ass for you. <<else>> @@ -256,15 +256,15 @@ before shoving the equipment into $his <</if>> butthole, and setting it on low. <<if getSlave($AS).inflation == 2>> - $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. + $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. <<elseif getSlave($AS).inflation == 1>> - $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. <<else>> - $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. <</if>> <<elseif getSlave($AS).devotion <= 50>> - <<if canWalk(getSlave($AS))>> - You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He hesitates but eventually stands in front of you showing $his buttocks before presenting $his anus. + <<if canMove(getSlave($AS))>> + You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He hesitates but eventually <<if canStand(getSlave($AS))>>stands<<else>>crawls<</if>> in front of you showing $his buttocks before presenting $his anus. <<elseif !isAmputee(getSlave($AS))>> You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He hesitates but eventually shifts $his buttocks to face you before presenting $his anus. <<else>> @@ -310,15 +310,20 @@ before shoving the equipment into $his <</if>> butthole, and setting it on low. <<if getSlave($AS).inflation == 2>> - $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. + $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. <<elseif getSlave($AS).inflation == 1>> - $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. <<else>> - $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He sighs contently, hoping you'll give $him more attention. You pat $his belly and tell $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. <</if>> <<else>> - <<if canWalk(getSlave($AS))>> - You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He eagerly stands in front of you showing $his buttocks before happily presenting $his anus to you, spreading $his butt cheeks and turning to face you. + <<if canMove(getSlave($AS))>> + You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He eagerly + <<if canStand(getSlave($AS))>> + stands in front of you showing $his buttocks before happily presenting $his anus to you, spreading $his butt cheeks and turning to face you. + <<else>> + crawls to you, showing $his buttocks in motion before happily presenting $his anus to you. + <</if>> <<elseif !isAmputee(getSlave($AS))>> You instruct $him to present $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>anus for a <<= getSlave($AS).inflationType>> enema. $He eagerly shifts around to show $his buttocks before happily presenting $his anus to you, spreading $his butt cheeks and turning to face you. <<else>> @@ -364,22 +369,22 @@ before shoving the equipment into $his <</if>> butthole, and setting it on low. <<if getSlave($AS).inflation == 2>> - $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. + $His sloshing belly slowly grows even larger with <<= getSlave($AS).inflationType>>. You rest a hand on $his back as $his swelling belly forces $him to rise off your lap. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his taut, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise. <<elseif getSlave($AS).inflation == 1>> - $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His bloated belly slowly swells even larger with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his jiggly, soft, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise. <<else>> - $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canWalk(getSlave($AS))>>push $him to $his feet<<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. + $His belly slowly swells with <<= getSlave($AS).inflationType>>. You slip a hand under $his stomach to feel it grow in your palm. Once the enema is complete and $he is plugged, you <<if canStand(getSlave($AS))>>push $him to $his <<if hasBothLegs(getSlave($AS))>>feet<<else>>foot<</if>><<else>>help $him onto your desk<</if>> and admire $his distended, <<= getSlave($AS).skin>> stomach. $He sighs contently, before eagerly begging for more. You pat $his belly and tell $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise. <</if>> <</if>> <<if _pregDiscovery == 0>> <<set getSlave($AS).inflation += 1>> <<if getSlave($AS).inflation == 3>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his bloated guts as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his bloated guts as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. <<run healthDamage(getSlave($AS), 10)>> <<elseif getSlave($AS).inflation == 2>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his full guts as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his full guts as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. <<elseif getSlave($AS).inflation == 1>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. <</if>> <<run SetBellySize(getSlave($AS))>> <</if>> diff --git a/src/npc/interaction/fillUpFace.tw b/src/npc/interaction/fillUpFace.tw index f2986ca9e036c430a48d1c2940d8ee1b38d3ae81..0dceca83318667996d724f31e658a9983a52c9a8 100644 --- a/src/npc/interaction/fillUpFace.tw +++ b/src/npc/interaction/fillUpFace.tw @@ -28,7 +28,7 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <<run deflate(getSlave($AS))>> <<set getSlave($AS).pregKnown = 1>> <<elseif getSlave($AS).fetish == "mindbroken">> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to take a seat on your lap and open $his mouth wide for the hose, but $he remains still and unresponsive. Talking to a broken mind is pointless. <</if>> You reach out and wrap your arms around $his @@ -63,9 +63,9 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <</if>> belly, pulling $him into your lap. You force the hose down $his throat, strapping it to $his head to prevent it from slipping out, and turn the flow to low. With everything in place, you return your hands to $his gurgling stomach.<<if getSlave($AS).inflation == 2>>You can feel $his <<= getSlave($AS).skin>> belly growing taut with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give the firm orb of $his belly a slap, eliciting a large belch from the broken slave and no motion at all from $his gut. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover. After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<elseif getSlave($AS).inflation == 1>>You can feel $his <<= getSlave($AS).skin>> belly growing larger with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give the jiggling orb of $his belly a slap, eliciting a burp from the broken slave and tons of motion from $his gut. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover, After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<else>>You can feel $his <<= getSlave($AS).skin>> belly swelling with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give $his bloated belly a slap, eliciting a small burp from the broken slave and a little jiggle from $his gut. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his sloshing bulk onto the couch to recover. After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the hiccupping <<= getSlave($AS).slaveName>> ready to be moved<</if>>. <<elseif getSlave($AS).devotion < -20>> - <<if canWalk(getSlave($AS))>> - You instruct $him to take a seat on your lap and open $his mouth wide for the hose. Opposed to the thought of being filled <<if getSlave($AS).inflation > 0>>more <</if>>with <<= getSlave($AS).inflationType>>, $he tries to step back, but you catch $him and pull $him into your lap, wrapping your arms around $his - <<elseif (hasAnyLegs(getSlave($AS)))>> + <<if canMove(getSlave($AS))>> + You instruct $him to take a seat on your lap and open $his mouth wide for the hose. Opposed to the thought of being filled <<if getSlave($AS).inflation > 0>>more <</if>>with <<= getSlave($AS).inflationType>>, $he tries to <<if canWalk(getSlave($AS))>>step back<<else>>crawl away<</if>>, but you catch $him and pull $him into your lap, wrapping your arms around $his + <<elseif (hasAnyLimbs(getSlave($AS)))>> You inform $him $he'll be taking a seat on your lap, opening $his mouth wide for the hose, and drinking until you tell $him $he is full enough. $He's opposed to the thought of being filled with<<if getSlave($AS).inflation > 0>> more<</if>> <<= getSlave($AS).inflationType>>, but since $he is immobile, $he can't escape. You heft $him onto your lap, wrapping your arms around $his <<else>> $He's opposed to the thought of being filled with <<if getSlave($AS).inflation > 0>>more <</if>><<= getSlave($AS).inflationType>>, but as an amputee can do nothing about it. You heft $him onto your lap, wrapping your arms around $him @@ -101,9 +101,9 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <</if>> belly. You force the hose down $his throat, strapping it to $his head to prevent $him from removing it, and turn the flow to low. With everything in place, you return your hands to $his gurgling stomach.<<if getSlave($AS).inflation == 2>>You can feel $his <<= getSlave($AS).skin>> belly growing taut with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give the firm orb of $his belly a slap, eliciting gagging from the overfilled slave and no motion at all from $his gut. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover. After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<elseif getSlave($AS).inflation == 1>>You can feel $his <<= getSlave($AS).skin>> belly growing larger with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give the jiggling orb of $his belly a slap, eliciting a burp from the full slave and tons of motion from $his gut. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover. After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<else>>You can feel $his <<= getSlave($AS).skin>> belly swelling with <<= getSlave($AS).inflationType>> as it pushes out against your hands. Once you have given $him $his fill, you give $his bloated belly a slap, eliciting a shudder from the bloated slave and a little jiggle from $his gut. $He <<if canSee(getSlave($AS))>>looks in your eyes<<else>>faces you<</if>>, as though almost demanding answers. $He looks apprehensive about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his sloshing bulk onto the couch to recover. After a few minutes of rest, and several glares from you when it appears $his meal might be coming back up, is the hiccupping <<= getSlave($AS).slaveName>> ready to be moved<</if>>. <<elseif getSlave($AS).devotion <= 20>> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to take a seat on your lap and open $his mouth wide for the hose. $He complies without comment and settles $himself onto your lap, shuddering slightly as you wrap your arms around $his - <<elseif (hasAnyLegs(getSlave($AS)))>> + <<elseif (hasAnyLimbs(getSlave($AS)))>> You inform $him $he'll be taking a seat on your lap, opening $his mouth wide for the hose, and drinking until you tell $him $he is full enough. $He complies without comment. You heft $him onto your lap, wrapping your arms around $his <<else>> $He's hesitant of being filled with <<if getSlave($AS).inflation > 0>>more <</if>><<= getSlave($AS).inflationType>>, but as an amputee can do nothing about it. You heft $him onto your lap, wrapping your arms around $his @@ -139,9 +139,9 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <</if>> belly. You insert the hose down $his throat, choosing to hold it place instead of strapping it to $him, and turn the flow to low. With everything in place, you place your free hand on $his gurgling stomach.<<if getSlave($AS).inflation == 2>>You can feel $his <<= getSlave($AS).skin>> belly growing taut with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give the firm orb of $his belly a slap, eliciting a restrained gag from the overfilled slave and no motion at all from $his gut. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover. $His meal attempts to come back up on $his several times, but $he holds it down for fear of punishment should $he vomit. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<elseif getSlave($AS).inflation == 1>>You can feel $his <<= getSlave($AS).skin>> belly growing larger with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give the jiggling orb of $his belly a slap, eliciting a strained burp from the full slave and tons of motion from $his gut. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his hiccupping bulk onto the couch to recover. $His meal attempts to come back up on $his several times, but $he holds it down for fear of punishment should $he vomit. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<else>>You can feel $his <<= getSlave($AS).skin>> belly swelling with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give $his bloated belly a slap, eliciting a small shudder from the bloated slave and a little jiggle from $his gut. $He looks up at you quizzically, unsure about what you will do next. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his sloshing bulk onto the couch to recover. $His meal attempts to come back up on $his several times, but $he holds it down for fear of punishment should $he vomit. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<</if>>. <<elseif getSlave($AS).devotion <= 50>> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to take a seat on your lap and open $his mouth wide for the hose. $He hesitates but eventually settles $himself onto your lap as you wrap your arms around $his - <<elseif (hasAnyLegs(getSlave($AS)))>> + <<elseif (hasAnyLimbs(getSlave($AS)))>> You inform $him $he'll be taking a seat on your lap, opening $his mouth wide for the hose, and drinking until you tell $him $he is full enough. $He hesitates for a moment, before demonstrating acceptance. You heft $him onto your lap, wrapping your arms around $his <<else>> $He's mildly hesitant of being filled with <<if getSlave($AS).inflation > 0>>more <</if>><<= getSlave($AS).inflationType>>, but as an amputee can do nothing about it. You heft $him onto your lap, wrapping your arms around $his @@ -177,9 +177,9 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <</if>> belly. You <<if hasAnyArms(getSlave($AS))>>hand $him the hose<<else>>place the hose in $his mouth<</if>>, allowing $him to drink from it at $his own pace, as you keep a hand on the tap to control the flow. With everything in place, you place your free hand on $his gurgling stomach.<<if getSlave($AS).inflation == 2>>You can feel $his <<= getSlave($AS).skin>> belly growing taut with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give the firm orb of $his belly a couple gentle pats, eliciting a small hiccup, that $he immediately apologizes for, from the overfilled slave and no motion at all from $his gut. $He sighs contently, hoping you'll give $him more attention. You order $him to keep $himself filled with two gallons of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his heavy body onto the couch to recover. $His meal attempts to come back up on $his several times, but $he dutifully holds it down. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<elseif getSlave($AS).inflation == 1>>You can feel $his <<= getSlave($AS).skin>> belly growing larger with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give the jiggling orb of $his belly a couple pats, eliciting a small hiccup, that $he immediately apologizes for, from the full slave and tons of motion from $his gut. $He sighs contently, hoping you'll give $him more attention. You order $him to keep $himself filled with four liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his heavy body onto the couch to recover. $His meal attempts to come back up on $him several times, but $he dutifully holds it down. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<<else>>You can feel $his <<= getSlave($AS).skin>> belly swelling with <<= getSlave($AS).inflationType>> as it pushes out against your hand. Once you have given $him $his fill, you give $his bloated belly a couple pats, eliciting a small hiccup, that $he immediately apologizes for, from the bloated slave and a little jiggle from $his gut. $He sighs contently, hoping you'll give $him more attention. You order $him to keep $himself filled with two liters of <<= getSlave($AS).inflationType>> until you say otherwise, before helping $his sloshing body onto the couch to recover. $His meal attempts to come back up on $his several times, but $he dutifully holds it down. Only after a few minutes of rest is the groaning <<= getSlave($AS).slaveName>> ready to be moved<</if>>. <<else>> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to take a seat on your lap and open $his mouth wide for the hose. $He eagerly settles $himself onto your lap as you wrap your arms around $his - <<elseif (hasAnyLegs(getSlave($AS)))>> + <<elseif (hasAnyLimbs(getSlave($AS)))>> You inform $him $he'll be taking a seat on your lap, opening $his mouth wide for the hose, and drinking until you tell $him $he is full enough. $He squirms with excitement as you heft $him onto your lap, wrapping your arms around $his <<else>> $He's devotedly <<if canSee(getSlave($AS))>>looks<<else>>smiles<</if>> at you as you heft $him onto your lap, wrapping your arms around $his @@ -219,12 +219,12 @@ You attach a hose to $dairyName tap with the pipes set to pump <<= getSlave($AS) <<if _pregDiscovery == 0>> <<set getSlave($AS).inflation += 1>> <<if getSlave($AS).inflation == 3>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his over-stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his over-stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. Being filled so full @@.red;surely had negative effects@@ on $his health. <<run healthDamage(getSlave($AS), 10)>> <<elseif getSlave($AS).inflation == 2>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his stuffed belly as $he goes<<else>>$His belly wobbles heavily as $he is helped from your office<</if>>. <<elseif getSlave($AS).inflation == 1>> - <<if canWalk(getSlave($AS))>>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>>$He gingerly leaves your office, massaging $his distended belly as $he goes<<else>>$His belly wobbles as $he is helped from your office<</if>>. <</if>> <<run SetBellySize(getSlave($AS))>> <</if>> diff --git a/src/npc/interaction/fondleButt.tw b/src/npc/interaction/fondleButt.tw index 2da14590e42757bb51814871e3ceccdb30494bbe..7a0700f3904320c370783601b05fd49f20e40d3f 100644 --- a/src/npc/interaction/fondleButt.tw +++ b/src/npc/interaction/fondleButt.tw @@ -67,7 +67,7 @@ as well as $his couch-like <</if>> buttocks. $He looks longingly into your eyes as you continue to move around $his posterior, pinching with your fingers and slapping with your palms before reaching to touch your fingertips against $his sphincter. $He moans and quivers slightly when you rub your fingers around $his virgin anus. $He starts to wiggle $his ass while you circle around $his anus, not breaking contact with $him with your fingers. You keep squeezing $his buttocks firmly — first one, then the other and then finally both. $He can't resist gyrating $his hips in arousal while in your grasp. - <<if canWalk(getSlave($AS))>> + <<if canStand(getSlave($AS))>> You strongly pull $his body closer towards you by $his buttocks, turn $him around, and push $him down to bend $him over your desk. <<else>> You move closer towards $him, turn $him around and firmly hold $him down on desk, face-down so that $his butt is facing you up into the air. @@ -94,7 +94,7 @@ as well as $his <</if>> buttocks a few hard smacks for good measure. $His face is in ecstasy as $he stands and turns to face you, gently rubbing the red spots on $his buttocks and looking at you hungrily as if $he wants more. <<elseif (getSlave($AS).devotion > 50) && (getSlave($AS).anus == 0)>> - <<if canWalk(getSlave($AS))>> + <<if canStand(getSlave($AS))>> $He accepts your orders happily and waves $his virgin anus to you, spreading $his butt cheeks in front of you with $his hands before turning to face you. <</if>> You reach around and grab $his @@ -118,7 +118,7 @@ as well as $his couch-like <</if>> buttocks with both hands before rubbing along them, feeling the shape of $his<<if $seeRace == 1>> <<= getSlave($AS).race>><</if>> ass with your fingers and squeezing gently. $He looks passionately into your eyes as you continue to move around $his posterior gently reaching to touch your fingertips against $his sphincter while rubbing $his ass at the same time. $He sighs as you rub your fingertips around $his virgin anus. $He starts to wiggle $his ass while you circle around $his anus, not breaking contact with $him with your fingers. You keep squeezing $his buttocks tenderly — first one, then the other and then both and $he can't resist gyrating $his hips enticingly while in your grasp. - <<if canWalk(getSlave($AS))>> + <<if canStand(getSlave($AS))>> You pull $his body closer towards you by $his buttocks, turn $him around, and bend $him over your desk. <<else>> You move closer towards $him, turn $him around and push $him down on desk, face-down so that $his butt is facing you up into the air. @@ -154,7 +154,7 @@ as well as $his <<Master>>," $he says happily. <</if>> <<elseif (getSlave($AS).devotion > 20) && (getSlave($AS).anus == 0)>> - <<if canWalk(getSlave($AS))>> + <<if canStand(getSlave($AS))>> $He accepts your orders without comment and presents $his virgin anus to you before turning to face you. <</if>> You reach around and grab $his @@ -282,7 +282,7 @@ as well as $his <</if>> buttocks before rubbing along them, feeling the shape of $his<<if $seeRace == 1>> <<= getSlave($AS).race>><</if>> ass with your fingers and squeezing gently. $He tries to break out of your grasp as you rub fingers around $his virgin anus. $He writhes as you continue to move around $his posterior, gently reaching to touch your fingertips against $his sphincter while rubbing $his ass at the same time. $He struggles to stay still while you circle around $his unbroken anus, not breaking contact with $him with your fingers. You look at $his face and $he has <<if !canSee(getSlave($AS))>>reflexively <</if>>shut $his eyes, trying not to think about what's happening to $his butt. This only encourages you to continue. You keep squeezing $his buttocks tenderly — first one, then the other and then finally both and $he can't help but quiver while in your grasp. You pull $his body closer towards you by $his buttocks, turn $him around, and push $him down, bending $him over your desk while $he tries to push away. You look at $his rear while you squeeze $his cheeks and rub them with your firm hands. You wander along the outline of $his posterior with both your eyes and hands, then look at $his virgin butthole as you trace it with your fingers and thumb. Eventually, you decide to stop. $He slowly stands and looks in your eyes, as though almost demanding answers. $He looks apprehensive about what you will do next. <<elseif getSlave($AS).fetish == "mindbroken">> - <<if canWalk(getSlave($AS))>> + <<if canMove(getSlave($AS))>> You instruct $him to present $his buttocks and anus but $he remains still and unresponsive. Talking to a broken mind is pointless. <</if>> You reach around and grab $his diff --git a/src/npc/interaction/forceFeeding.tw b/src/npc/interaction/forceFeeding.tw index 4c7a27e63d93a67806cc30ecc7da60c985774059..89a56c3a1a869d80a8219ff79528b1d988863cbe 100644 --- a/src/npc/interaction/forceFeeding.tw +++ b/src/npc/interaction/forceFeeding.tw @@ -33,7 +33,7 @@ buckets overflowing with slave food. $He is going to eat it all and you're going $He grimaces at the <<if canSee(getSlave($AS))>>sight<<elseif canSmell(getSlave($AS))>>smell<<else>>thought<</if>> of the food that will soon be going into $him. $He knows you won't let it come back up later. <</if>> -<<if canWalk(getSlave($AS))>> +<<if canMove(getSlave($AS))>> You instruct $him to take a seat on your lap and open <<if getSlave($AS).fetish == "mindbroken">> wide, but $he remains still and unresponsive. Talking to a broken mind is pointless. @@ -41,7 +41,7 @@ buckets overflowing with slave food. $He is going to eat it all and you're going wide. <</if>> <<if getSlave($AS).devotion < -20>> - Opposed to the thought of being forced to eat all that food, $he tries to step back, but you catch $him and pull $him into your lap, wrapping an arm + Opposed to the thought of being forced to eat all that food, $he tries to <<if canWalk(getSlave($AS))>>step back<<else>>crawl away<</if>>, but you catch $him and pull $him into your lap, wrapping an arm <<elseif getSlave($AS).fetish == "submissive">> $He meekly settles into your lap and shudders as $he feels your dominant hand wrap <<elseif getSlave($AS).behavioralFlaw == "gluttonous">> @@ -527,7 +527,7 @@ and a little jiggle from $his gut. <<set getSlave($AS).pregKnown = 1>> <<else>> <<if getSlave($AS).inflation == 3>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He gingerly leaves your office, massaging $his over-stuffed belly as $he goes. <<else>> $His belly wobbles heavily as $he is helped from your office. @@ -535,13 +535,13 @@ and a little jiggle from $his gut. Being filled so full @@.red;surely had negative effects@@ on $his health. <<run healthDamage(getSlave($AS), 10)>> <<elseif getSlave($AS).inflation == 2>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He gingerly leaves your office, massaging $his stuffed belly as $he goes. <<else>> $His belly wobbles heavily as $he is helped from your office. <</if>> <<elseif getSlave($AS).inflation == 1>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He gingerly leaves your office, massaging $his distended belly as $he goes. <<else>> $His belly wobbles as $he is helped from your office. diff --git a/src/npc/interaction/passage/fMarry.tw b/src/npc/interaction/passage/fMarry.tw index 82a603b0b961e64a088c67eb6b4405f66ae2c2ab..37008dddbcad5ae79c04910793442242c1d284ef 100644 --- a/src/npc/interaction/passage/fMarry.tw +++ b/src/npc/interaction/passage/fMarry.tw @@ -461,7 +461,7 @@ You tell <<= getSlave($AS).slaveName>> that you're going to marry $him. (A propo <<replace "#result">> You order <<= getSlave($AS).slaveName>> to go change into bridal lingerie. <<if _reactionType == 0>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He hurries off, still crying. When $he returns, $he's wearing <<else>> $He is helped out, still crying. When $he is returned, $he's wearing @@ -469,13 +469,13 @@ You tell <<= getSlave($AS).slaveName>> that you're going to marry $him. (A propo <<elseif _reactionType == 1>> $He is helped out, completely unaware of $his pending marriage. When $he is returned, $he's wearing <<elseif _reactionType == 2>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He shuffles off, still sobbing. When $he returns, $he's wearing <<else>> $He is helped out, still sobbing. When $he is returned, $he's wearing <</if>> <<else>> - <<if canWalk(getSlave($AS))>> + <<if canWalk(getSlave($AS)) || (canMove(getSlave($AS)) && getSlave($AS).rules.mobility == "permissive")>> $He hurries off to fulfill your orders. When $he returns, $he's wearing <<else>> $He is helped out to get dressed. When $he is returned, $he's wearing diff --git a/src/npc/interaction/passage/fSlaveSlaveDick.tw b/src/npc/interaction/passage/fSlaveSlaveDick.tw index 31db8f4c7b6fd025d05c7f441aa72e88e82105ce..d97314d7e1c6847c7cd5b0b1082ddc2711c6f180 100644 --- a/src/npc/interaction/passage/fSlaveSlaveDick.tw +++ b/src/npc/interaction/passage/fSlaveSlaveDick.tw @@ -8,7 +8,7 @@ <h2>Select an eligible slave</h2> -<<set _eligibles = $slaves.filter((s) => (s.ID != $activeSlave.ID) && isSlaveAvailable(s) && canDoVaginal(s) && canWalk(s) /* amp-amp scene is not written */)>> +<<set _eligibles = $slaves.filter((s) => (s.ID != $activeSlave.ID) && isSlaveAvailable(s) && canDoVaginal(s) && canStand(s) /* amp-amp scene is not written */)>> <<for _i = 0; _i < _eligibles.length; _i++>> <div> <<set _name = SlaveFullName(_eligibles[_i])>> diff --git a/src/personalAssistant/assistant.js b/src/personalAssistant/assistant.js index 19712cbac6e288288d68d496f898fbbc34304187..848c946ec417d7bf96e5e383c36b1b1dbc983d9c 100644 --- a/src/personalAssistant/assistant.js +++ b/src/personalAssistant/assistant.js @@ -6,45 +6,7 @@ globalThis.assistant = (function() { }; function BC() { - function convert(oldVar, variable, value = null) { - if (jsDef(V[oldVar])) { - if (typeof V[oldVar] !== "number" || (typeof V[oldVar] === "number" && V[oldVar] > 0)) { - V.assistant[variable] = value === null ? V[oldVar] : value; - } - } - delete V[oldVar]; - } - - const object = Object.assign({}, - { - personality: V.assistant, - name: V.assistantName, - power: V.assistantPower, - appearance: V.assistantAppearance, - }); - V.assistant = object; - delete V.assistantName; delete V.assistantPower; - delete V.assistantAppearance; delete V.assistantPronouns; - - convert('marketAssistantAnnounced', 'market', {}); - convert('assistantExtra1', 'Extra1'); - convert('assistantExtra2', 'Extra2'); - convert('assistantNameAnnounced', 'announcedName'); - convert('assistantBodyDesire', 'bodyDesire'); - convert('assistantOptions', 'options'); - convert('assistantFSOptions', 'fsOptions'); - convert('assistantFSAppearance', 'fsAppearance'); - - if (V.assistant.market) { - Object.assign(V.assistant.market, - { - relationship: V.marketAssistantRelationship, - limit: V.marketAssistantLimit, - aggressiveness: V.marketAssistantAggressiveness, - }); - } - delete V.marketAssistantRelationship; delete V.marketAssistantLimit; - delete V.marketAssistantAggressiveness; delete V.marketAssistantPronouns; + App.Update.assistantBC(); } function pronouns() { @@ -67,20 +29,18 @@ globalThis.assistant = (function() { function manage() { V.assistant = V.assistant || {}; - Object.assign(V.assistant, - { - personality: V.assistant.personality || 0, - name: V.assistant.name || "your personal assistant", - power: V.assistant.power || 0, - appearance: V.assistant.appearance || "normal", + Object.assign(V.assistant, { + personality: V.assistant.personality || 0, + name: V.assistant.name || "your personal assistant", + power: V.assistant.power || 0, + appearance: V.assistant.appearance || "normal", }); if (V.assistant.market) { - Object.assign(V.assistant.market, - { - relationship: V.assistant.market.relationship || "cute", - limit: V.assistant.market.limit || 0, - aggressiveness: V.assistant.market.aggressiveness || 0, + Object.assign(V.assistant.market, { + relationship: V.assistant.market.relationship || "cute", + limit: V.assistant.market.limit || 0, + aggressiveness: V.assistant.market.aggressiveness || 0, }); } if (V.week < 18) { diff --git a/src/personalAssistant/assistantBC.js b/src/personalAssistant/assistantBC.js new file mode 100644 index 0000000000000000000000000000000000000000..c7ef8a4f3d827f4f7e055f08f43f047ee0f126f1 --- /dev/null +++ b/src/personalAssistant/assistantBC.js @@ -0,0 +1,39 @@ +// @ts-nocheck +App.Update.assistantBC = function() { + function convert(oldVar, variable, value = null) { + if (jsDef(V[oldVar])) { + if (typeof V[oldVar] !== "number" || (typeof V[oldVar] === "number" && V[oldVar] > 0)) { + V.assistant[variable] = value === null ? V[oldVar] : value; + } + } + delete V[oldVar]; + } + + V.assistant = Object.assign({}, { + personality: V.assistant, + name: V.assistantName, + power: V.assistantPower, + appearance: V.assistantAppearance, + }); + delete V.assistantName; delete V.assistantPower; + delete V.assistantAppearance; delete V.assistantPronouns; + + convert('marketAssistantAnnounced', 'market', {}); + convert('assistantExtra1', 'Extra1'); + convert('assistantExtra2', 'Extra2'); + convert('assistantNameAnnounced', 'announcedName'); + convert('assistantBodyDesire', 'bodyDesire'); + convert('assistantOptions', 'options'); + convert('assistantFSOptions', 'fsOptions'); + convert('assistantFSAppearance', 'fsAppearance'); + + if (V.assistant.market) { + Object.assign(V.assistant.market, { + relationship: V.marketAssistantRelationship, + limit: V.marketAssistantLimit, + aggressiveness: V.marketAssistantAggressiveness, + }); + } + delete V.marketAssistantRelationship; delete V.marketAssistantLimit; + delete V.marketAssistantAggressiveness; delete V.marketAssistantPronouns; +}; diff --git a/src/pregmod/FCTV/FCTV.js b/src/pregmod/FCTV/FCTV.js index 9522066b5ae09a4dcb500d177fa9f6498f12cad7..dddd2dd60bca9a4b1a6c5752bbd1aaf4f13ca7c2 100644 --- a/src/pregmod/FCTV/FCTV.js +++ b/src/pregmod/FCTV/FCTV.js @@ -17,7 +17,6 @@ weekEnabled - The week FCTV was installed. globalThis.FCTV = (function() { return { channels: channels, - manage: manage, showChannel: showChannel, incrementChannel: incrementChannel, incrementShow: incrementShow, @@ -30,38 +29,6 @@ globalThis.FCTV = (function() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; } - function manage() { - function convert(a, b) { - return V.FCTVreceiver ? a : b; - } - delete V.FCTVenable; - - V.FCTV.receiver = V.FCTV.receiver > -1 ? V.FCTV.receiver : -1; - if (convert && V.receiverAvailable) { - V.FCTV.receiver = V.FCTVreceiver > 0 ? V.FCTVreceiver : 0; - } - - if (V.FCTV.receiver > -1) { - V.FCTV.channel = V.FCTV.channel || {}; - V.FCTV.pcViewership = V.FCTV.pcViewership || {}; - - for (let i = 0; i < channels().length; i++) { - let channel = num(channels()[i], true); - let currentChannel = 'show' + capFirstChar(channel); - V.FCTV.channel[channel] = convert(V[currentChannel], V.FCTV.channel[channel]) || 0; - } - V.FCTV.channel.last = convert(V.lastShow, V.FCTV.channel.last) || -1; - - V.FCTV.pcViewership.count = convert(V.FCTVcount, V.FCTV.pcViewership.count) || 0; - V.FCTV.pcViewership.frequency = convert(V.FCTVrate, V.FCTV.pcViewership.frequency) || 4; - V.FCTV.remote = convert(V.FCTVremote, V.FCTV.remote) || 0; - - if (V.FCTVreceiver && !V.FCTV.weekEnabled) { - V.FCTV.weekEnabled = V.receiverAvailable > 1 ? V.receiverAvailable : 0; - } - } - } - function showChannel(i) { let x = { canSelect: 1, diff --git a/src/pregmod/FCTV/FCTVBC.js b/src/pregmod/FCTV/FCTVBC.js new file mode 100644 index 0000000000000000000000000000000000000000..6f0de99139ba891aec74e47efaa8a7098a6e5d8d --- /dev/null +++ b/src/pregmod/FCTV/FCTVBC.js @@ -0,0 +1,29 @@ + +App.Update.FCTV = function() { + function convert(a, b) { + return V.FCTVreceiver ? a : b; + } + V.FCTV = V.FCTV || {}; + V.FCTV.receiver = V.FCTV.receiver > -1 ? V.FCTV.receiver : -1; + if (convert && V.receiverAvailable) { + V.FCTV.receiver = V.FCTVreceiver > 0 ? V.FCTVreceiver : 0; + } + + V.FCTV.channel = V.FCTV.channel || {}; + V.FCTV.pcViewership = V.FCTV.pcViewership || {}; + const channelList = FCTV.channels(); + for (let i = 0; i < channelList.length; i++) { + const channel = num(channelList[i], true); + const currentChannel = 'show' + capFirstChar(channel); + V.FCTV.channel[channel] = convert(V[currentChannel], V.FCTV.channel[channel]) || 0; + } + V.FCTV.channel.last = convert(V.lastShow, V.FCTV.channel.last) || -1; + + V.FCTV.pcViewership.count = convert(V.FCTVcount, V.FCTV.pcViewership.count) || 0; + V.FCTV.pcViewership.frequency = convert(V.FCTVrate, V.FCTV.pcViewership.frequency) || 4; + V.FCTV.remote = convert(V.FCTVremote, V.FCTV.remote) || 0; + + if (V.FCTVreceiver && !V.FCTV.weekEnabled) { + V.FCTV.weekEnabled = V.receiverAvailable > 1 ? V.receiverAvailable : 0; + } +}; diff --git a/src/pregmod/widgets/seBirthWidgets.tw b/src/pregmod/widgets/seBirthWidgets.tw index c1872443110e79ad8c2af4a48f0e5c0a2143047c..5285e60e86fdfa52cad050540f3c481d849f30b8 100644 --- a/src/pregmod/widgets/seBirthWidgets.tw +++ b/src/pregmod/widgets/seBirthWidgets.tw @@ -123,8 +123,14 @@ <<if $slaves[$i].induce == 1>> <<set $suddenBirth += 20>> <</if>> -<<if !canWalk($slaves[$i])>> +<<if !canMove($slaves[$i])>> <<set $suddenBirth += 10>> +<<elseif !canWalk($slaves[$i])>> + <<if $slaves[$i].rules.mobility == "permissive">> + <<set $suddenBirth += 3>> + <<else>> + <<set $suddenBirth += 5>> + <</if>> <</if>> <<if $slaves[$i].fetish == "mindbroken">> <<set $suddenBirth += 18>> diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw index 5b365daa246306f026575687ddd11c9cb3f83d64..17f817d179fa90ec35a62eac0bb05f81e68dfd89 100644 --- a/src/uncategorized/costsReport.tw +++ b/src/uncategorized/costsReport.tw @@ -7,7 +7,7 @@ <<capture $i>> <br style="clear:both"><<if $lineSeparations == 0>><br><<else>><hr style="margin:0"><</if>> [[$slaves[$i].slaveName|Slave Interact][$activeSlave = $slaves[$i]]] will $slaves[$i].assignment. - <<includeDOM SlaveExpenses (V.slaves[V.i])>> + <<includeDOM slaveExpenses($slaves[$i])>> <</capture>> <</for>> diff --git a/src/uncategorized/costsReportSlaves.tw b/src/uncategorized/costsReportSlaves.tw index ae0467edc474f629deb9c74255662f840c8890c3..0bfb98f93d160dc90419775e5e848ad647063f67 100644 --- a/src/uncategorized/costsReportSlaves.tw +++ b/src/uncategorized/costsReportSlaves.tw @@ -8,6 +8,6 @@ <<capture $i>> <br style="clear:both"><<if $lineSeparations == 0>><br><<else>><hr style="margin:0"><</if>> [[$slaves[$i].slaveName|Slave Interact][$activeSlave = $slaves[$i]]] will $slaves[$i].assignment. - <<includeDOM SlaveExpenses (V.slaves[V.i])>> + <<includeDOM slaveExpenses($slaves[$i])>> <</capture>> <</for>> diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw index 4004c7f2d221c535da500a3e67b4d8e82c8c6538..c5b32164e1197cef02bb9a8e63729140053f1c3a 100644 --- a/src/uncategorized/dairyReport.tw +++ b/src/uncategorized/dairyReport.tw @@ -63,7 +63,7 @@ <<if _slave.belly >= 5000>> <<set _MMWorkout++>> <</if>> - <<if !canWalk(_slave)>> /* big bonus if they can't move themselves and are fat as cows */ + <<if !canMove(_slave)>> /* big bonus if they can't move themselves and are fat as cows */ <<if _slave.weight >= 70>> <<set _MMWorkout += 2>> <</if>> @@ -79,6 +79,22 @@ <<if _slave.belly >= 5000>> <<set _MMWorkout += 2>> <</if>> + <<elseif !canWalk(_slave)>> /* smaller bonus if they are fat as cows and need assistanace with moving */ + <<if _slave.weight >= 70>> + <<set _MMWorkout += 1>> + <</if>> + <<if _slave.weight >= 160>> + <<set _MMWorkout += 1>> + <</if>> + <<if _slave.boobs >= 20000>> + <<set _MMWorkout += 1>> + <</if>> + <<if _slave.balls >= 30>> + <<set _MMWorkout += 1>> + <</if>> + <<if _slave.belly >= 5000>> + <<set _MMWorkout += 1>> + <</if>> <</if>> <<if ($dairyStimulatorsSetting < 2) && ($Milkmaid.dick > 4) && (canPenetrate($Milkmaid)) && _prostateStim != 1>> <<if (_slave.balls > 0) && (_slave.prostate > 0)>> diff --git a/src/uncategorized/freeRangeDairyAssignmentScene.tw b/src/uncategorized/freeRangeDairyAssignmentScene.tw index 113cb90f27a87c8e0bc2e849f1f892a6fb4dc64a..91b07256059868e1de973e85924d63848c95fc51 100644 --- a/src/uncategorized/freeRangeDairyAssignmentScene.tw +++ b/src/uncategorized/freeRangeDairyAssignmentScene.tw @@ -22,7 +22,7 @@ /* AROUSAL WHEN ENTERING */ <<set _aroused = false >> <<if App.Entity.facilities.dairy.employeesIDs().size > 1 && canSee($activeSlave)>> - While <<if canWalk($activeSlave) >>walking<<else>>being carried<</if>> to $his designated stall, $he passes the other cows currently at their milking machines. Not being hurried, $he occasionally watches a cow in detail. + While <<if canWalk($activeSlave)>>walking<<elseif canMove($activeSlave)>>being helped<<else>>being carried<</if>> to $his designated stall, $he passes the other cows currently at their milking machines. Not being hurried, $he occasionally watches a cow in detail. <div> <<if $activeSlave.fetish == "boobs">> /* TODO: check if there actually are lactating cows at the dairy */ diff --git a/src/uncategorized/manageArcology.tw b/src/uncategorized/manageArcology.tw index 0b76b7221c2b427d8e8044ed7049d83adc368824..0815c66caadd79ee21370d5ba69f817359e4accd 100644 --- a/src/uncategorized/manageArcology.tw +++ b/src/uncategorized/manageArcology.tw @@ -107,7 +107,6 @@ </div> <div> - <<run FCTV.manage()>> <<if $FCTV.receiver > -1 && !$FCTV.weekEnabled>> You have not installed an FCTV receiver. Installing this receiver yourself will cost <<print cashFormat(Math.trunc(25000*$upgradeMultiplierArcology*$HackingSkillMultiplier))>>. diff --git a/src/uncategorized/masterSuiteReport.tw b/src/uncategorized/masterSuiteReport.tw index beebf96c583f4c9e24e7b5243e0b66986703053f..011d38e4bb5f810e78c101a6bdbfcaf3c86d0645 100644 --- a/src/uncategorized/masterSuiteReport.tw +++ b/src/uncategorized/masterSuiteReport.tw @@ -365,7 +365,7 @@ <<if $verboseDescriptions == 1>> <br> $He <<= App.SlaveAssignment.pleaseYou(_slave)>> <br> - <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canWalk(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> + <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canMove(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> When $his breasts begin to feel full and you aren't around, $he avails $himself to the penthouse milkers and <<set $servantMilkersMultiplier = 0.25>> <<run App.SlaveAssignment.getMilked(_slave)>> @@ -385,7 +385,7 @@ <<silently>> <<include "SA chooses own job">> <<run App.SlaveAssignment.pleaseYou(_slave)>> - <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canWalk(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> + <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canMove(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> <<set $servantMilkersMultiplier = 0.25>> <<run App.SlaveAssignment.getMilked(_slave)>> <<set $servantMilkersMultiplier = 1>> diff --git a/src/uncategorized/newSlaveIntro.tw b/src/uncategorized/newSlaveIntro.tw index f8f47d1f01d3a3383bb874dcf7f4b28499633603..44c4d5cf6691a27f2e62c86217d2b1740eafd640 100644 --- a/src/uncategorized/newSlaveIntro.tw +++ b/src/uncategorized/newSlaveIntro.tw @@ -95,7 +95,7 @@ <</if>> <p> -The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlave)>></span> <<if !hasAnyLegs($activeSlave)>><<if isAmputee($activeSlave)>>lies<<else>>rests<</if>> helplessly on your desk,<<elseif !canWalk($activeSlave)>>kneels before your desk,<<else>>stands before your desk,<</if>> +The legalities completed, <span class='slave-name'><<= SlaveFullName($activeSlave)>></span> <<if !hasAnyLegs($activeSlave)>><<if isAmputee($activeSlave)>>lies<<else>>rests<</if>> helplessly on your desk,<<elseif !canStand($activeSlave)>>kneels before your desk,<<else>>stands before your desk,<</if>> <<if $activeSlave.devotion < -50>> <<if canSee($activeSlave)>>looking you in the eyes<<else>>directly facing you<</if>> with defiance. <<elseif $activeSlave.devotion < -20>> diff --git a/src/uncategorized/officeDescription.tw b/src/uncategorized/officeDescription.tw index 1c2bf5c9aaccb9bbbe6626d6873070a5640e2168..d65e275d37d2728335e46fbc03428e18518e71b7 100644 --- a/src/uncategorized/officeDescription.tw +++ b/src/uncategorized/officeDescription.tw @@ -7,11 +7,11 @@ <<if $clubAdsSpending >= 5000>> A corner of your desk is piled with sample merchandise from the campaign promoting your club. - <<set _eventSlaves = $slaves.filter(function(s) { return s.assignment == "serve in the club" && canWalk(s); })>> + <<set _eventSlaves = $slaves.filter(function(s) { return s.assignment == "serve in the club"; })>> <<if _eventSlaves.length > 0>> <<set $activeSlave = _eventSlaves.random()>> <<setLocalPronouns $activeSlave>> - <<if random(1,2) == 1>> + <<if random(1,2) == 1 || !canStand($activeSlave)>> This includes a sex toy based on $activeSlave.slaveName's <<if (random(1,3) == 1) && ($activeSlave.skill.vaginal >= 100)>> <<if $activeSlave.vagina > 3>>massive vagina<<elseif $activeSlave.vagina > 2>>gaping cunt<<elseif $activeSlave.vagina > 1>>hot cunt<<elseif $activeSlave.vagina > 0>>tight pussy<<else>>virgin pussy<</if>>. @@ -38,11 +38,11 @@ <<else>> A corner of your desk is piled with sample merchandise from the campaign promoting $brothelName. <</if>> - <<set _eventSlaves = $slaves.filter(function(s) { return s.assignment == "work in the brothel" && canWalk(s); })>> + <<set _eventSlaves = $slaves.filter(function(s) { return s.assignment == "work in the brothel"; })>> <<if _eventSlaves.length > 0>> <<set $activeSlave = _eventSlaves.random()>> <<setLocalPronouns $activeSlave>> - <<if random(1,2) == 1>> + <<if random(1,2) == 1 || !canStand($activeSlave)>> This includes a sex toy based on $activeSlave.slaveName's <<if (random(1,3) == 1) && ($activeSlave.skill.vaginal >= 100)>> <<if $activeSlave.vagina > 3>>massive vagina<<elseif $activeSlave.vagina > 2>>gaping cunt<<elseif $activeSlave.vagina > 1>>hot cunt<<elseif $activeSlave.vagina > 0>>tight pussy<<else>>virgin pussy<</if>>. diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index 17f1785363d4cb98d9102f8b3a395fde3980e2a5..ef6befa207f6033b25e16362784657e726cc9734 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -1247,7 +1247,7 @@ <<elseif ($slaves[$i].assignment == "be the Schoolteacher")>> $His paraphilia is satisfied by $his work as the Schoolteacher. <<set _para = 1>> - <<elseif canWalk($slaves[$i]) && ($slaves[$i].rules.release.slaves === 1 || App.Utils.hasFamilySex($slaves[$i])) && $universalRulesConsent == 0>> + <<elseif canMove($slaves[$i]) && ($slaves[$i].rules.release.slaves === 1 || App.Utils.hasFamilySex($slaves[$i])) && $universalRulesConsent == 0>> $His paraphilia makes pinning down and raping other slaves very satisfying. <<set _para = 1>> <<else>> @@ -1278,7 +1278,7 @@ <<elseif ($slaves[$i].assignment == "be the Wardeness")>> $His paraphilia is satisfied by $his work as your Wardeness. <<set _para = 1>> - <<elseif canWalk($slaves[$i]) && ($slaves[$i].rules.release.slaves === 1 || App.Utils.hasFamilySex($slaves[$i])) && $universalRulesConsent == 0>> + <<elseif canMove($slaves[$i]) && ($slaves[$i].rules.release.slaves === 1 || App.Utils.hasFamilySex($slaves[$i])) && $universalRulesConsent == 0>> $His paraphilia makes pinning down and brutally raping other slaves very satisfying. <<set _para = 1>> <<else>> @@ -4464,7 +4464,7 @@ <<if canGetPregnant($slaves[$i]) && (($slaves[$i].assignment == "work in the dairy" && $dairyPregSetting == 0) || $slaves[$i].assignment != "work in the dairy")>> <<set _conceptionSeed = random(1,100)>> - <<set _studIgnoresRules = (_Stud && $universalRulesImpregnation == "Stud" && _Stud.career == "a breeding bull" && _Stud.fetish == "mindbroken" && canWalk(_Stud)) ? 1 : 0>> + <<set _studIgnoresRules = (_Stud && $universalRulesImpregnation == "Stud" && _Stud.career == "a breeding bull" && _Stud.fetish == "mindbroken" && canMove(_Stud)) ? 1 : 0>> <<if ($universalRulesImpregnation == "PC") && canImpreg($slaves[$i], $PC)>> $slaves[$i].slaveName is ripe for breeding, so you ejaculate inside $him often. When you bore of $his fertile <<if $slaves[$i].mpreg == 1>>ass<<else>>cunt<</if>>, you keep $him around as you fuck other slaves so you can pull out of them, shove your cock into $him, and fill $him with your seed anyway. @@ -4602,7 +4602,7 @@ <</if>> /* closes HG impregnation */ <<elseif _Stud && $slaves[$i].ID != $StudID && $universalRulesImpregnation == "Stud">> <<setLocalPronouns _Stud 2>> - <<if ($slaves[$i].StudExclude == 1 || $slaves[$i].breedingMark == 1) && (_Stud.career != "a breeding bull" || _Stud.fetish != "mindbroken" || !canWalk(_Stud))>> + <<if ($slaves[$i].StudExclude == 1 || $slaves[$i].breedingMark == 1) && (_Stud.career != "a breeding bull" || _Stud.fetish != "mindbroken" || !canMove(_Stud))>> It's _Stud.slaveName's role to provide sperm for fertile slaves, but $slaves[$i].slaveName is not included on the list. <<elseif $universalHGImpregnateMasterSuiteToggle == 1 && ["serve in the master suite", "be your Concubine"].includes($slaves[$i].assignment)>> It's _Stud.slaveName's role to provide sperm for fertile slaves, but $slaves[$i].slaveName is off-limits. @@ -4617,7 +4617,7 @@ <<if _Stud.fuckdoll > 0>> provide sperm for $him; all $he needs to do is signal the suit to stimulate an ejaculation. <<elseif _Stud.fetish == "mindbroken">> - <<if _Stud.career == "a breeding bull" && canWalk(_Stud)>> + <<if _Stud.career == "a breeding bull" && canMove(_Stud)>> impregnate fertile slaves, a task the amorous Stud performs with gusto and little regard for rules. <<set _studRandiness = 1>> <<else>> @@ -6752,8 +6752,6 @@ <</if>> <</if>> -/* LONG TERM PHYSICAL EFFECTS */ - <<if $slaves[$i].fuckdoll == 0>> <<if (!jQuery.isEmptyObject($slaves[$i].brand))>> <<if ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel") || ($slaves[$i].assignment == "serve in the club")>> @@ -6771,6 +6769,10 @@ <</if>> <</if>> +/* LONG TERM PHYSICAL EFFECTS */ +/* start here! +<<= App.SlaveAssignment.longTermPhysicalEffects($slaves[$i])>> +*/ <<if $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken">> <<set _visionFlag = 0>> <<if getBestVision($slaves[$i]) === 0>> @@ -7669,67 +7671,250 @@ <</if>> <<if $slaves[$i].fuckdoll == 0>> - <<if !canWalk($slaves[$i])>> - $He is immobilized by $his + <<if !canWalk($slaves[$i]) || !canMove($slaves[$i])>> + <<set _mobility = 1>> <<set _anchors = []>> - <<if tooBigBreasts($slaves[$i])>> - <<set _anchors.push("tits")>> - <</if>> - <<if tooBigBelly($slaves[$i])>> - <<set _anchors.push("belly")>> - <</if>> - <<if tooBigDick($slaves[$i])>> - <<set _anchors.push("dick")>> - <</if>> - <<if tooBigButt($slaves[$i])>> - <<set _anchors.push("butt")>> - <</if>> - <<if tooBigBalls($slaves[$i])>> - <<set _anchors.push("balls")>> - <</if>> - <<if tooFatSlave($slaves[$i])>> - <<set _anchors.push("fat body")>> + <<if !canMove($slaves[$i])>> + <<set _mobility = 0>> + <<if tooFatSlave($slaves[$i])>> + <<set _anchors.push("fat body")>> + <</if>> + <<if ($slaves[$i].physicalAge <= 3)>> + <<if $slaves[$i].boobs > 25000 + ($slaves[$i].muscles * 20)>> + <<set _anchors.push("tits")>> + <</if>> + <<if $slaves[$i].belly >= 150000>> + <<set _anchors.push("belly")>> + <</if>> + <<if $slaves[$i].balls >= 30 + ($slaves[$i].muscles * 0.3)>> + <<set _anchors.push("balls")>> + <</if>> + <<elseif ($slaves[$i].physicalAge <= 12)>> + <<if $slaves[$i].boobs > 100000 + ($slaves[$i].muscles * 50)>> + <<set _anchors.push("tits")>> + <</if>> + <<if $slaves[$i].belly >= 300000>> + <<set _anchors.push("belly")>> + <</if>> + <<if $slaves[$i].balls >= 60 + ($slaves[$i].muscles * 0.5)>> + <<set _anchors.push("balls")>> + <</if>> + <<elseif ($slaves[$i].physicalAge < 18)>> + <<if $slaves[$i].boobs > 250000 + ($slaves[$i].muscles * 100)>> + <<set _anchors.push("tits")>> + <</if>> + <<if $slaves[$i].belly >= 600000>> + <<set _anchors.push("belly")>> + <</if>> + <<if $slaves[$i].balls >= 90 + ($slaves[$i].muscles * 0.7)>> + <<set _anchors.push("balls")>> + <</if>> + <<else>> + <<if $slaves[$i].boobs > 500000 + ($slaves[$i].muscles * 200)>> + <<set _anchors.push("tits")>> + <</if>> + <<if $slaves[$i].belly >= 1000000>> + <<set _anchors.push("belly")>> + <</if>> + <<if $slaves[$i].balls >= 90 + ($slaves[$i].muscles * 0.7)>> + <<set _anchors.push("balls")>> + <</if>> + <</if>> + <<else>> + <<if tooBigBreasts($slaves[$i])>> + <<set _anchors.push("tits")>> + <</if>> + <<if tooBigBelly($slaves[$i])>> + <<set _anchors.push("belly")>> + <</if>> + <<if tooBigDick($slaves[$i])>> + <<set _anchors.push("dick")>> + <</if>> + <<if tooBigButt($slaves[$i])>> + <<set _anchors.push("butt")>> + <</if>> + <<if tooBigBalls($slaves[$i])>> + <<set _anchors.push("balls")>> + <</if>> + <<if tooFatSlave($slaves[$i])>> + <<set _anchors.push("fat body")>> + <</if>> <</if>> - <<if _anchors.length > 0>> - <<print _anchors.reduce(function(res, ch, i, arr) { return res + (i === arr.length - 1 ? ' and ' : ', ') + ch; })>> - <<if (isAmputee($slaves[$i]))>> - <<if _anchors.length > 1>>but ultimately $his limblessness<<else>>or would be if $he had limbs<</if>>, - <<elseif (!hasAnyLegs($slaves[$i]))>> - <<if _anchors.length > 1>>but ultimately $his leglessness<<else>>or would be if $he had legs<</if>>, - <<elseif (!hasBothLegs($slaves[$i]))>> - <<if _anchors.length > 1>>but ultimately $his missing leg<<else>>or would be if $he had both legs<</if>>, - <<elseif $slaves[$i].heels == 1 && !["boots", "extreme heels", "heels", "pumps"].includes($slaves[$i].shoes)>> - <<if _anchors.length > 1>>but ultimately $his heels having been clipped<<else>>or would be if $his heels weren't clipped<</if>>, + <<if _mobility>> + $His + <<if _anchors.length > 0>> + <<print _anchors.reduce(function(res, ch, i, arr) { return res + (i === arr.length - 1 ? ' and ' : ', ') + ch; })>> + <<if (isAmputee($slaves[$i]))>> + <<if _anchors.length > 1>>but ultimately $his limblessness<<else>>or would be if $he had limbs<</if>>, + <<elseif (!hasAnyLegs($slaves[$i]))>> + <<if _anchors.length > 1>>but ultimately $his leglessness<<else>>or would be if $he had legs<</if>>, + <<elseif (!hasBothLegs($slaves[$i]))>> + <<if _anchors.length > 1>>but ultimately $his missing leg<<else>>or would be if $he had both legs<</if>>, + <<elseif $slaves[$i].heels == 1 && !setup.highHeels.includes($slaves[$i].shoes)>> + <<if _anchors.length > 1>>but ultimately $his heels having been clipped<<else>>or would be if $his heels weren't clipped<</if>>, + <</if>> + render<<if _anchors.length == 1>>s<</if>> + <<else>> + <<if (isAmputee($slaves[$i]))>> + limblessness renders + <<elseif (!hasAnyLegs($slaves[$i]))>> + leglessness renders + <<elseif (!hasBothLegs($slaves[$i]))>> + missing leg renders + <<elseif $slaves[$i].heels == 1 && !["boots", "extreme heels", "heels"].includes($slaves[$i].shoes)>> + clipped heels render + <</if>> <</if>> + $him incapable of walking, <<else>> - <<if (isAmputee($slaves[$i]))>> - limblessness, - <<elseif (!hasAnyLegs($slaves[$i]))>> - leglessness, - <<elseif (!hasBothLegs($slaves[$i]))>> - missing leg, - <<elseif $slaves[$i].heels == 1 && !["boots", "extreme heels", "heels", "pumps"].includes($slaves[$i].shoes)>> - heels having been clipped, + $He is immobilized by $his + <<if _anchors.length > 0>> + <<print _anchors.reduce(function(res, ch, i, arr) { return res + (i === arr.length - 1 ? ' and ' : ', ') + ch; })>> + <<if (isAmputee($slaves[$i]))>> + <<if _anchors.length > 1>>but ultimately $his limblessness<<else>>or would be if $he had limbs<</if>>, + <<elseif (!hasAnyLegs($slaves[$i]))>> + <<if _anchors.length > 1>>but ultimately $his leglessness<<else>>or would be if $he had legs<</if>>, + <</if>> + <<else>> + <<if (isAmputee($slaves[$i]))>> + limblessness, + <<elseif (!hasAnyLegs($slaves[$i]))>> + leglessness, + <</if>> <</if>> <</if>> - making $his life more difficult. Other slaves have to help $him at times, which + making $his life more difficult. <<if $slaves[$i].fetish != "mindbroken">> - <<if $slaves[$i].devotion > 50>> + <<if _mobility>> + <<if $slaves[$i].rules.mobility == "restrictive">> + <<if $slaves[$i].devotion < -20>> + $He <span class="mediumorchid">hates being forced</span> to crawl around like some kind of animal, but it keeps $him properly <span class="gold">afraid.</span> + <<set $slaves[$i].devotion -= 2>> + <<set $slaves[$i].trust -= 4>> + <<elseif $slaves[$i].devotion >= -20>> + <<if $slaves[$i].fetish == "submissive">> + <<if $slaves[$i].fetishKnown == 1>> + $He <span class="hotpink">loves being forced</span> to crawl around like some kind of animal. + <<set $slaves[$i].devotion += 1>> + <<else>> + $He seems to enjoy $his forced prostration to anyone that comes $his way. @@.lightcoral;$He's a natural submissive!@@ + <<set $slaves[$i].fetishKnown = 1>> + <</if>> + <<set _likesImmobility = 1>> + <<elseif $slaves[$i].fetish == "humiliation">> + <<if $slaves[$i].fetishKnown == 1>> + $He <span class="hotpink">revels in the humiliation</span> of being forced to crawl around in the dirt. + <<set $slaves[$i].devotion += 1>> + <<else>> + $He seems to be excited by the humiliation not being able to walk brings. @@.lightcoral;$He's enjoys being degraded!@@ + <<set $slaves[$i].fetishKnown = 1>> + <</if>> + <<set _likesImmobility = 1>> + <<elseif $slaves[$i].devotion > 50>> + It is your will that $he crawl around on + <<if (hasAllLimbs($slaves[$i]))>> + all fours, + <<else>> + the ground, + <</if>> + so $he embraces it as normality. + <<elseif $slaves[$i].devotion > 20>> + $He accepts being forced to crawl around on + <<if (hasAllLimbs($slaves[$i]))>> + all fours + <<else>> + the ground + <</if>> + as part of slave life. + <<else>> + Being forced to crawl around on + <<if (hasAllLimbs($slaves[$i]))>> + all fours + <<else>> + the ground + <</if>> + @@.hotpink;breaks down any remaining dignity@@ $he may have and keeps $him @@.gold;well aware of $his total vulnerability@@ to punishment. + <<set $slaves[$i].devotion += 2>> + <<set $slaves[$i].trust -= 1>> + <</if>> + <</if>> + <<else>> + <<if $slaves[$i].devotion > 50>> + @@.mediumaquamarine;$He is thankful@@ that $he serves a <<= writtenMaster($slaves[$i])>> so kind as to permit $him the tools $he needs to not be reduced to crawling. + <<set $slaves[$i].trust += 1>> + <<elseif $slaves[$i].devotion > 20>> + @@.mediumaquamarine;$He appreciates@@ being given the means to maintain some semblance of mobility. + <<set $slaves[$i].trust += 2>> + <<elseif $slaves[$i].devotion >= -20>> + @@.mediumaquamarine;$He takes full advantage@@ of the provided mobility aids to avoid being forced to crawl everywhere. + <<set $slaves[$i].trust += 3>> + <<else>> + Anything is better than crawling on the floor, so $he makes full use of the provided mobility aids @@.mediumaquamarine;to avoid such an indignity.@@ + <</if>> + <</if>> + <<else>> + <<if $slaves[$i].devotion < -20>> + $He can't can't escape those looking to prey upon $him, <span class="gold">terrifying $him.</span> + <<set $slaves[$i].trust -= 4>> + <<elseif $slaves[$i].devotion >= -20>> + <<if $slaves[$i].fetish == "submissive">> + <<if $slaves[$i].fetishKnown == 1>> + $He <span class="hotpink">loves having no choice but to be submissive</span> if $he wants assistance. + <<set $slaves[$i].devotion += 1>> + <<else>> + $He seems to enjoy being at the mercy of you and your chattel. @@.lightcoral;$He's a natural submissive!@@ + <<set $slaves[$i].fetishKnown = 1>> + <</if>> + <<set _likesImmobility = 1>> + <<elseif $slaves[$i].fetish == "humiliation">> + <<if $slaves[$i].fetishKnown == 1>> + $He <span class="hotpink">revels in the humiliation</span> of being completely stripped of any ability to do things on $his own. + <<set $slaves[$i].devotion += 1>> + <<else>> + $He seems to be excited by the humiliation complete immobility brings. @@.lightcoral;$He's enjoys being degraded!@@ + <<set $slaves[$i].fetishKnown = 1>> + <</if>> + <<set _likesImmobility = 1>> + <<elseif $slaves[$i].devotion > 50>> + Since you want to keep $him from moving, $he's perfectly happy to sit around and wait for your attention. + <<elseif $slaves[$i].devotion > 20>> + $He accepts $his inability to move as part of slave life. + <<else>> + Being completely unable to move leaves $him at the mercy of others, @@.hotpink;destroying any semblance of self-reliance $he has@@ and keeps $him @@.gold;well aware of $his total vulnerability@@ to punishment. + <<set $slaves[$i].devotion += 3>> + <<set $slaves[$i].trust -= 1>> + <</if>> + <</if>> + <</if>> + <</if>> + <<if _mobility>> + Other slaves have to help $him at times, which + <<else>> + $He requires help to do nearly everything, which + <</if>> + <<if $slaves[$i].fetish != "mindbroken">> + <<if _likesImmobility>> + suits $his fetish just fine. + <<elseif $slaves[$i].devotion > 50>> the devoted slave bears with equanimity. <<elseif $slaves[$i].devotion > 20>> $he can't help @@.mediumorchid;resenting@@ a little. <<set $slaves[$i].devotion -= 1>> <<elseif $slaves[$i].devotion >= -20>> - $he @@.mediumorchid;actively resents.@@ - <<set $slaves[$i].devotion -= 2>> + <<if $slaves[$i].trust >= -20>> + $he @@.mediumorchid;actively resents.@@ + <<set $slaves[$i].devotion -= 2>> + <<else>> + $he appreciates in $his frightening life. + <<set $slaves[$i].trust += 1>> + <</if>> <<else>> - $he @@.mediumorchid;utterly detests.@@ - <<set $slaves[$i].devotion -= 2>> - <</if>> - <<if $slaves[$i].devotion < 10>> <<if $slaves[$i].trust >= -20>> - $He's @@.gold;aware of $his total vulnerability@@ to punishment. - <<set $slaves[$i].trust -= 1>> + $he @@.mediumorchid;utterly detests.@@ + <<set $slaves[$i].devotion -= 2>> + <<else>> + $he needs in these dark times. + <<set $slaves[$i].trust += 2>> <</if>> <</if>> <<else>> @@ -7745,7 +7930,7 @@ <</if>> <<set $slaves[$i].muscles -= 3>> <</if>> - <<elseif !canWalk($slaves[$i]) && ($slaves[$i].diet != "muscle building")>> + <<elseif !canMove($slaves[$i]) && ($slaves[$i].diet != "muscle building")>> <<if $slaves[$i].muscles > -80>> Since $he is effectively incapable of moving $himself, <<if $universalRulesImmobileSlavesMaintainMuscles == 1 && $slaves[$i].muscles >= 0>> @@ -7880,13 +8065,15 @@ $His titanic breasts are so massive they dwarf $his body. $He <<if $slaves[$i].sexualFlaw == "breast growth">>happily embraces<<else>>has no choice but to accept<</if>> immobility. <<elseif ($slaves[$i].boobs > 20000)>> $His immense breasts are so huge they rest upon the floor even when $he tries to stand, taking the weight off $his tiny body. - <<if $slaves[$i].sexualFlaw == "breast growth">> - $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. - <<elseif $slaves[$i].devotion <= 50>> - $He finds pulling them along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - $He finds pulling them along a big burden, but $his devotion to you is far stronger than $his discomfort. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breast growth">> + $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. + <<elseif $slaves[$i].devotion <= 50>> + $He finds pulling them along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + $He finds pulling them along a big burden, but $his devotion to you is far stronger than $his discomfort. + <</if>> <</if>> <<elseif ($slaves[$i].boobs > 4700 + ($slaves[$i].muscles * 20))>> <<if canWalk($slaves[$i])>> @@ -7907,7 +8094,7 @@ <<else>> $His giant tits are debilitatingly big. $He does everything $he can to keep comfortable and pain free as to not bother you. <</if>> - <<else>> + <<elseif canMove($slaves[$i])>> $His giant breasts are so big they pin $him to the floor, taking the weight off $his tiny body. <<if $slaves[$i].sexualFlaw == "breast growth">> $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. @@ -7983,13 +8170,15 @@ <<if isSlaveAvailable($slaves[$i])>> <<if ($slaves[$i].boobs > 40000)>> $His immense breasts are so huge they rest upon the floor even when $he tries to stand, taking the weight off $his small body. - <<if $slaves[$i].sexualFlaw == "breast growth">> - $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. - <<elseif $slaves[$i].devotion <= 50>> - $He finds pulling them along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - $He finds pulling them along a burden, but $his devotion to you is far stronger than $his discomfort. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breast growth">> + $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. + <<elseif $slaves[$i].devotion <= 50>> + $He finds pulling them along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + $He finds pulling them along a burden, but $his devotion to you is far stronger than $his discomfort. + <</if>> <</if>> <<elseif ($slaves[$i].boobs > 9500 + ($slaves[$i].muscles * 50))>> <<if canWalk($slaves[$i])>> @@ -8013,13 +8202,15 @@ <</if>> <<else>> $His giant breasts are so big they pin $him to the floor, taking the weight off $his young body. - <<if $slaves[$i].sexualFlaw == "breast growth">> - $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. - <<elseif $slaves[$i].devotion <= 50>> - $He finds pulling them along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - $He finds pulling them along a little annoying, but your will is far more important to $him. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breast growth">> + $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. + <<elseif $slaves[$i].devotion <= 50>> + $He finds pulling them along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + $He finds pulling them along a little annoying, but your will is far more important to $him. + <</if>> <</if>> <</if>> <<elseif ($slaves[$i].boobs > 5000)>> @@ -8089,24 +8280,28 @@ <<if isSlaveAvailable($slaves[$i])>> <<if ($slaves[$i].boobs > 25000 + ($slaves[$i].muscles * 100))>> $His immense breasts are so big they pin $him to the floor, taking the weight off $his youthful body. - <<if $slaves[$i].sexualFlaw == "breast growth">> - $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. - <<elseif $slaves[$i].devotion <= 50>> - $He finds pulling them along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - $He finds pulling them along a little annoying, but your will is far more important to $him. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breast growth">> + $He's perfectly fine with dragging them along as a testament to how much $he's managed to grow. + <<elseif $slaves[$i].devotion <= 50>> + $He finds pulling them along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + $He finds pulling them along a little annoying, but your will is far more important to $him. + <</if>> <</if>> <<elseif ($slaves[$i].boobs > 17000)>> $His giant tits are debilitatingly big. - <<if $slaves[$i].sexualFlaw == "breast growth">> - No amount of discomfort or pain could dissuade $him from going bigger. - <<elseif $slaves[$i].devotion <= 50>> - They are @@.mediumorchid;very uncomfortable@@ and @@.red;painful@@ for $his youthful form. - <<set $slaves[$i].devotion -= 3>> - <<run healthDamage($slaves[$i], 10)>> - <<else>> - $He finds them painfully uncomfortable, but finds ways to mitigate it to not distract you with $his worries. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breast growth">> + No amount of discomfort or pain could dissuade $him from going bigger. + <<elseif $slaves[$i].devotion <= 50>> + They are @@.mediumorchid;very uncomfortable@@ and @@.red;painful@@ for $his youthful form. + <<set $slaves[$i].devotion -= 3>> + <<run healthDamage($slaves[$i], 10)>> + <<else>> + $He finds them painfully uncomfortable, but finds ways to mitigate it to not distract you with $his worries. + <</if>> <</if>> <<elseif ($slaves[$i].boobs > 10000)>> <<if ($slaves[$i].muscles <= 30)>> @@ -8367,13 +8562,15 @@ $His _belly belly is so large it dwarfs $his body. $He <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>>enjoys<<else>>has no choice but to accept<</if>> being an accessory to $his belly. <<elseif $slaves[$i].belly >= 100000>> $His _belly belly is so large it reaches the floor <<if hasAnyLegs($slaves[$i])>>even when $he stands<<else>>no matter how $he rests<</if>>, taking the weight off $his tiny body. - <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> - Such an inconvenience means little when you're living the dream of being a baby-filled breeder. - <<elseif $slaves[$i].devotion <= 50>> - $He finds dragging it along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - $He's fine with this though, as it is much easier than trying to waddle along. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> + Such an inconvenience means little when you're living the dream of being a baby-filled breeder. + <<elseif $slaves[$i].devotion <= 50>> + $He finds dragging it along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + $He's fine with this though, as it is much easier than trying to waddle along. + <</if>> <</if>> <<elseif $slaves[$i].belly >= 30000>> <<if canWalk($slaves[$i])>> @@ -8401,17 +8598,19 @@ <</if>> <</if>> <<elseif $slaves[$i].physicalAge < 13>> - <<if $slaves[$i].belly >= 600000>> + <<if $slaves[$i].belly >= 300000>> $His _belly belly is so large it dwarfs $his body. $He <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>>enjoys<<else>>has no choice but to accept<</if>> being an accessory to $his belly. <<elseif $slaves[$i].belly >= 300000>> $His _belly belly is so large it reaches the floor <<if hasAnyLegs($slaves[$i])>>even when $he stands<<else>>no matter how $he rests<</if>>, taking the weight off $his young figure. - <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> - Such an inconvenience means little when you're living the dream of being a baby-filled breeder. - <<elseif $slaves[$i].devotion <= 50>> - $He finds dragging it along @@.mediumorchid;mildly annoying.@@ - <<set $slaves[$i].devotion -= 1>> - <<else>> - While it is quite a nuisance, your will outweighs $his opinions. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> + Such an inconvenience means little when you're living the dream of being a baby-filled breeder. + <<elseif $slaves[$i].devotion <= 50>> + $He finds dragging it along @@.mediumorchid;mildly annoying.@@ + <<set $slaves[$i].devotion -= 1>> + <<else>> + While it is quite a nuisance, your will outweighs $his opinions. + <</if>> <</if>> <<elseif $slaves[$i].belly >= 120000>> <<if canWalk($slaves[$i])>> @@ -8451,17 +8650,19 @@ <</if>> <</if>> <<elseif $slaves[$i].physicalAge < 18>> - <<if $slaves[$i].belly >= 750000>> + <<if $slaves[$i].belly >= 60000>> $His _belly belly is so large it dwarfs $his body. $He <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>>enjoys<<else>>has no choice but to accept<</if>> being an accessory to $his belly. <<elseif $slaves[$i].belly >= 300000>> $His _belly belly is so large it reaches the floor <<if hasAnyLegs($slaves[$i])>>even when $he stands<<else>>no matter how $he rests<</if>>, taking the weight off $his body. - <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> - Such an inconvenience means little when you're living the dream of being a baby-filled breeder. - <<elseif $slaves[$i].devotion <= 50>> - $He finds dragging it along @@.mediumorchid;a painful problem.@@ - <<set $slaves[$i].devotion -= 5>> - <<else>> - While moving it is a problem, $he struggles through it for you. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> + Such an inconvenience means little when you're living the dream of being a baby-filled breeder. + <<elseif $slaves[$i].devotion <= 50>> + $He finds dragging it along @@.mediumorchid;a painful problem.@@ + <<set $slaves[$i].devotion -= 5>> + <<else>> + While moving it is a problem, $he struggles through it for you. + <</if>> <</if>> <<elseif $slaves[$i].belly >= 200000>> <<if canWalk($slaves[$i])>> @@ -8501,17 +8702,19 @@ <</if>> <</if>> <<else>> - <<if $slaves[$i].belly >= 1000000>> + <<if $slaves[$i].belly >= 1500000>> $His _belly belly is so large it dwarfs $his body. $He <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>>enjoys<<else>>has no choice but to accept<</if>> being an accessory to $his belly. - <<elseif $slaves[$i].belly >= 450000>> + <<elseif $slaves[$i].belly >= 1000000>> $His _belly belly is so large it reaches the floor <<if hasAnyLegs($slaves[$i])>>even when $he stands<<else>>no matter how $he rests<</if>>, taking the weight off $his body. - <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> - Such an inconvenience means little when you're living the dream of being a baby-filled breeder. - <<elseif $slaves[$i].devotion <= 50>> - $He finds dragging it along @@.mediumorchid;a painful problem.@@ - <<set $slaves[$i].devotion -= 5>> - <<else>> - While moving it is a problem, $he struggles through it for you. + <<if canMove($slaves[$i])>> + <<if $slaves[$i].sexualFlaw == "breeder" && $slaves[$i].preg > 0>> + Such an inconvenience means little when you're living the dream of being a baby-filled breeder. + <<elseif $slaves[$i].devotion <= 50>> + $He finds dragging it along @@.mediumorchid;a painful problem.@@ + <<set $slaves[$i].devotion -= 5>> + <<else>> + While moving it is a problem, $he struggles through it for you. + <</if>> <</if>> <<elseif $slaves[$i].belly >= 300000>> <<if canWalk($slaves[$i])>> @@ -8983,7 +9186,7 @@ <</if>> <</if>> - <<if canWalk($slaves[$i])>> + <<if canMove($slaves[$i])>> <<if ($slaves[$i].dick >= 30)>> <<if ($slaves[$i].devotion <= 50)>> $His titanic penis rests upon the floor even when $he stands. $He finds moving @@.mediumorchid;terrifying@@ since $he drags $his cock along. @@ -9016,7 +9219,7 @@ $He's @@.mediumaquamarine;thankful@@ to you for providing living spaces adapted to life with an enormous dick. <<set $slaves[$i].trust += 1>> <</if>> - <<else>> + <<elseif canMove($slaves[$i])>> $His giant penis makes life a struggle: $he has to drag it along as $he moves, has trouble fitting into beds and sitting in chairs, and constantly has to make sure to not get $his dick caught in doors. <<if ($slaves[$i].devotion > 50)>> Since $he's devoted to you, $he just does $his best. @@ -9030,7 +9233,7 @@ <</if>> <</if>> - <<if canWalk($slaves[$i])>> + <<if canMove($slaves[$i])>> <<if ($slaves[$i].balls > 90)>> $His titanic balls rest upon the floor even when $he stands. <<if ($slaves[$i].devotion <= 50)>> @@ -9062,7 +9265,7 @@ $He's @@.mediumaquamarine;thankful@@ to you for providing living spaces adapted to life with enormous testicles. <<set $slaves[$i].trust += 1>> <</if>> - <<else>> + <<elseif canMove($slaves[$i])>> $His giant balls make life a struggle: <<if $buttAccessibility == 1 || $pregAccessibility == 1 || $boobAccessibility == 1>>$he has trouble using appliances and furniture, and has to be constantly mindful of things striking $his oversensitive testicles, but at least the doors have already been widened for your other slaves<<else>>$he barely fits through doors, has trouble using appliances and furniture, and has to be constantly mindful of things striking $his oversensitive testicles<</if>>. <<if ($slaves[$i].devotion > 50)>> Since $he's devoted to you, $he just does $his best. @@ -9093,8 +9296,8 @@ <</if>> <</if>> <<elseif ($slaves[$i].sexualFlaw == "breeder") && ($slaves[$i].hips > 2)>> - $He @@.hotpink;loves@@ how $his wide body basically screams "fertility goddess". - <<set $slaves[$i].devotion += 1>> + $He @@.hotpink;loves@@ how $his wide body basically screams "fertility goddess". + <<set $slaves[$i].devotion += 1>> <</if>> <<if canWalk($slaves[$i])>> @@ -9154,6 +9357,7 @@ <</if>> <</if>> +/* health blips */ <<if ($curativeSideEffects != 0)>> <<if ($slaves[$i].chem > 10)>> <<if random(1,200) < $slaves[$i].chem + $slaves[$i].physicalAge - $slaves[$i].health.condition - (5*$slaves[$i].curatives)>> @@ -9198,7 +9402,7 @@ <<run healthDamage($slaves[$i], 2)>> <</if>> <<if random(1,200) < 5>> - $He experienced @@.red;severe@@ health complications due to $his weight this week. After extensive surgery, $his health was stabilized, though $his survival is not assured. + $He experienced @@.red;severe health complications@@ due to $his weight this week. After extensive surgery, $his health was stabilized, though $his survival is not assured. <<run healthDamage($slaves[$i], 80)>> <</if>> <<elseif $slaves[$i].weight > 160>> @@ -9207,21 +9411,22 @@ <<run healthDamage($slaves[$i], 1)>> <</if>> <<if random(1,200) < 5>> - $He experienced @@.red;severe@@ health complications due to $his weight this week. After extensive surgery, $his health was stabilized. + $He experienced @@.red;severe health complications@@ due to $his weight this week. After extensive surgery, $his health was stabilized. <<run healthDamage($slaves[$i], 40)>> <</if>> <<elseif $slaves[$i].weight > 130>> <<if random(1,200) < 5>> - $He experienced @@.red;severe@@ health complications due to $his weight this week. After some rest, $he recovered. + $He experienced @@.red;severe health complications@@ due to $his weight this week. After some rest, $he recovered. <<run healthDamage($slaves[$i], 20)>> <</if>> <<elseif $slaves[$i].weight > 95>> <<if random(1,200) < 5>> - $He experienced @@.red;minor@@ health complications due to $his weight this week. After some rest, $he recovered. + $He experienced @@.red;minor health complications@@ due to $his weight this week. After some rest, $he recovered. <<run healthDamage($slaves[$i], 5)>> <</if>> <</if>> <</if>> +/* end here! */ /* LANGUAGE */ diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw index e47fed9f833329a931f0ac70d5f2be0b179bb949..e78749e593765d34c85f894bb9d1522296ce685d 100644 --- a/src/uncategorized/saRules.tw +++ b/src/uncategorized/saRules.tw @@ -1417,14 +1417,14 @@ <<case "get treatment in the clinic">> <<if $slaves[$i].relationship > 2>> <<set _lover = $slaveIndices[$slaves[$i].relationshipTarget]>> - <<if !canWalk($slaves[_lover]) || !isSlaveAvailable($slaves[_lover])>> + <<if !canMove($slaves[_lover]) || !isSlaveAvailable($slaves[_lover])>> <<set _lover = 0>> <</if>> <<else>> <<set _lover = 0>> <</if>> <<if _lover == 0 && $seeIncest == 1>> - <<set _famVisitor = randomRelatedSlave($slaves[$i], (s) => { return canWalk(s) && isSlaveAvailable(s) && App.Utils.sexAllowed($slaves[$i], s); } )>> + <<set _famVisitor = randomRelatedSlave($slaves[$i], (s) => { return canMove(s) && isSlaveAvailable(s) && App.Utils.sexAllowed($slaves[$i], s); } )>> <</if>> <<if $slaves[$i].devotion < -50>> is so unhappy that $he has little interest in getting off<<if App.Utils.releaseRestricted($slaves[$i])>>, making the rule restricting $his sexual outlets superfluous<</if>>. diff --git a/src/uncategorized/salon.tw b/src/uncategorized/salon.tw index a15e95da093ed093715f64a285bd79a3c3314f20..2d0ef9efd71a2d4bd67968bdb7d759e3af25611a 100644 --- a/src/uncategorized/salon.tw +++ b/src/uncategorized/salon.tw @@ -17,13 +17,15 @@ </span> /* 000-250-006 */ -<<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt(getSlave($AS), 3, 0)>></div> - <<else>> - <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt(getSlave($AS), 3, 0)>></div> +<span id="artFrame"> + <<if $seeImages == 1>> + <<if $imageChoice == 1>> + <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt(getSlave($AS), 3, 0)>></div> + <<else>> + <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt(getSlave($AS), 3, 0)>></div> + <</if>> <</if>> -<</if>> +</span> /* 000-250-006 */ /* EYES */ @@ -154,267 +156,11 @@ /* HAIR */ <h3>Hair</h3> -<div> - <<if getSlave($AS).bald != 1>> - $His hair is <<= getSlave($AS).hColor>>. - <<if getSlave($AS).origHColor != getSlave($AS).hColor>> - [[Restore natural color|Salon][getSlave($AS).hColor = getSlave($AS).origHColor]] or <span class="note">choose a new one:</span> - <<else>> - <span class="note">Choose a dye color before dyeing $his hair:</span> - <</if>> - <div class="choices"> - Colors: - [[Auburn|Salon][$primaryHairColor = "auburn"]] - | [[Black|Salon][$primaryHairColor = "black"]] - | [[Blazing Red|Salon][$primaryHairColor = "blazing red"]] - | [[Blonde|Salon][$primaryHairColor = "blonde"]] - | [[Blue-Violet|Salon][$primaryHairColor = "blue-violet"]] - | [[Blue|Salon][$primaryHairColor = "blue"]] - | [[Brown|Salon][$primaryHairColor = "brown"]] - | [[Burgundy|Salon][$primaryHairColor = "burgundy"]] - | [[Chestnut|Salon][$primaryHairColor = "chestnut"]] - | [[Chocolate|Salon][$primaryHairColor = "chocolate brown"]] - | [[Copper|Salon][$primaryHairColor = "copper"]] - | [[Dark Blue|Salon][$primaryHairColor = "dark blue"]] - | [[Dark Brown|Salon][$primaryHairColor = "dark brown"]] - | [[Dark Orchid|Salon][$primaryHairColor = "dark orchid"]] - | [[Deep Red|Salon][$primaryHairColor = "deep red"]] - | [[Ginger|Salon][$primaryHairColor = "ginger"]] - | [[Golden|Salon][$primaryHairColor = "golden"]] - | [[Green-yellow|Salon][$primaryHairColor = "green-yellow"]] - | [[Green|Salon][$primaryHairColor = "green"]] - | [[Grey|Salon][$primaryHairColor = "grey"]] - | [[Hazel|Salon][$primaryHairColor = "hazel"]] - | [[Jet Black|Salon][$primaryHairColor = "jet black"]] - | [[Neon Blue|Salon][$primaryHairColor = "neon blue"]] - | [[Neon Green|Salon][$primaryHairColor = "neon green"]] - | [[Neon Pink|Salon][$primaryHairColor = "neon pink"]] - | [[Pink|Salon][$primaryHairColor = "pink"]] - | [[Platinum Blonde|Salon][$primaryHairColor = "platinum blonde"]] - | [[Purple|Salon][$primaryHairColor = "purple"]] - | [[Red|Salon][$primaryHairColor = "red"]] - | [[Sea Green|Salon][$primaryHairColor = "sea green"]] - | [[Silver|Salon][$primaryHairColor = "silver"]] - | [[Strawberry-Blonde|Salon][$primaryHairColor = "strawberry-blonde"]] - | [[White|Salon][$primaryHairColor = "white"]] - </div> - - <div class="choices"> - Highlights: - [[None|Salon][$secondaryHairColor = ""]] - | [[Black|Salon][$secondaryHairColor = " with black highlights"]] - | [[Blazing Red|Salon][$secondaryHairColor = " with blazing red highlights"]] - | [[Blonde|Salon][$secondaryHairColor = " with blonde highlights"]] - | [[Grey|Salon][$secondaryHairColor = " with grey highlights"]] - | [[Neon Blue|Salon][$secondaryHairColor = " with neon blue highlights"]] - | [[Neon Green|Salon][$secondaryHairColor = " with neon green highlights"]] - | [[Neon Pink|Salon][$secondaryHairColor = " with neon pink highlights"]] - | [[Rainbow|Salon][$secondaryHairColor = " with rainbow highlights"]] - | [[Silver|Salon][$secondaryHairColor = " with silver highlights"]] - | [[White|Salon][$secondaryHairColor = " with white highlights"]] - </div> - - <<if $primaryHairColor != 0>> - <div class="choices"> - [["Dye " + $his + " hair"|Salon][getSlave($AS).hColor = ($primaryHairColor + $secondaryHairColor),cashX(forceNeg($modCost), "slaveMod", getSlave($AS)), $primaryHairColor = 0, $secondaryHairColor = ""]] $primaryHairColor $secondaryHairColor now? - </div> - <</if>> - - <div> - <<if getSlave($AS).hStyle !== "shaved">> - $His <<= getSlave($AS).hStyle>> hair is <<= lengthToEitherUnit(getSlave($AS).hLength)>> long. - <<else>> - $His hair is shaved smooth. - <</if>> - <span class="note">General hairstyles will conform to hair length and clothing choices.</span> - </div> - <div class="choices"> - <<if getSlave($AS).hLength > 1>> - Style $his hair: - [[Afro|Salon][getSlave($AS).hStyle = "afro",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Braided|Salon][getSlave($AS).hStyle = "braided",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Cornrows|Salon][getSlave($AS).hStyle = "cornrows",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Curled|Salon][getSlave($AS).hStyle = "curled",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Dreadlocks|Salon][getSlave($AS).hStyle = "dreadlocks",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Eary|Salon][getSlave($AS).hStyle = "eary",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a bun|Salon][getSlave($AS).hStyle = "bun",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a messy bun|Salon][getSlave($AS).hStyle = "messy bun",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a ponytail|Salon][getSlave($AS).hStyle = "ponytail",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In tails|Salon][getSlave($AS).hStyle = "tails",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Luxurious|Salon][getSlave($AS).hStyle = "luxurious",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Messy|Salon][getSlave($AS).hStyle = "messy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Neat|Salon][getSlave($AS).hStyle = "neat",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Permed|Salon][getSlave($AS).hStyle = "permed",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Shaved sides|Salon][getSlave($AS).hStyle = "strip",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Up|Salon][getSlave($AS).hStyle = "up",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <<else>> - <span class="note">$His hair is too short to style meaningfully</span> - <</if>> - </div> - - <div class="choices"> - <<if getSlave($AS).hLength > 1>> - Cut and style $his hair: - [[Shaved|Salon][getSlave($AS).hStyle = "shaved",getSlave($AS).hLength = 0,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Trimmed short|Salon][getSlave($AS).hStyle = "trimmed",getSlave($AS).hLength = 10,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Buzzcut|Salon][getSlave($AS).hStyle = "buzzcut",getSlave($AS).hLength = 1,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - </div> - - <div class="choices"> - Cut or lengthen $his hair: - <<if getSlave($AS).hLength > 5>> - [[Very short|Salon][getSlave($AS).hLength = 5,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - <<if getSlave($AS).hLength > 10>> - | [[Short|Salon][getSlave($AS).hLength = 10,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - <<if getSlave($AS).hLength > 30>> - | [[Shoulder length|Salon][getSlave($AS).hLength = 30,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - <<if getSlave($AS).hLength > 60>> - | [[Long|Salon][getSlave($AS).hLength = 60,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - <<if getSlave($AS).hLength > 100>> - | [[Very long|Salon][getSlave($AS).hLength = 100,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - <<if getSlave($AS).hLength == 1>> - | [[Apply hair growth stimulating treatment|Salon][getSlave($AS).hLength = 1,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <<elseif getSlave($AS).hLength < 150>> - | [[Apply extensions|Salon][getSlave($AS).hLength += 10,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - <</if>> - | Custom length: <<textbox "_newHLength" _oldHLength "Salon">> - <<if $showInches == 1>> - cm (<<= cmToInchString(getSlave($AS).hLength)>>) - <<elseif $showInches == 2>> - inches - <</if>> - [[Apply|Salon][cashX(forceNeg($modCost), "slaveMod", getSlave($AS)), getSlave($AS).hLength = (Number(_newHLength) || getSlave($AS).hLength)]] - </div> - - <div class="choices"> - Have $his hair carefully maintained at its current length: - <<if getSlave($AS).haircuts == 1>> - [[Cease maintenance|Salon][getSlave($AS).haircuts = 0]] - <<else>> - [[Begin maintenance|Salon][getSlave($AS).haircuts = 1]] - <</if>> - </div> - <<else>> - <<if getSlave($AS).hStyle == "bald">> - $He is completely bald. - <<else>> - $His current wig is <<= getSlave($AS).hColor>>. - <<if getSlave($AS).hStyle != "bald">> - [[Remove wig|Salon][getSlave($AS).hStyle = "bald",getSlave($AS).hLength = 0,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] or <span class="note">choose a new one:</span> - <<else>> - <span class="note">Choose a wig color:</span> - <</if>> - - <div class="choices"> - Colors: - [[Auburn|Salon][$primaryHairColor = "auburn"]] - | [[Black|Salon][$primaryHairColor = "black"]] - | [[Blazing Red|Salon][$primaryHairColor = "blazing red"]] - | [[Blonde|Salon][$primaryHairColor = "blonde"]] - | [[Blue-Violet|Salon][$primaryHairColor = "blue-violet"]] - | [[Blue|Salon][$primaryHairColor = "blue"]] - | [[Brown|Salon][$primaryHairColor = "brown"]] - | [[Burgundy|Salon][$primaryHairColor = "burgundy"]] - | [[Chestnut|Salon][$primaryHairColor = "chestnut"]] - | [[Chocolate|Salon][$primaryHairColor = "chocolate brown"]] - | [[Copper|Salon][$primaryHairColor = "copper"]] - | [[Dark Blue|Salon][$primaryHairColor = "dark blue"]] - | [[Dark Brown|Salon][$primaryHairColor = "dark brown"]] - | [[Dark Orchid|Salon][$primaryHairColor = "dark orchid"]] - | [[Deep Red|Salon][$primaryHairColor = "deep red"]] - | [[Ginger|Salon][$primaryHairColor = "ginger"]] - | [[Golden|Salon][$primaryHairColor = "golden"]] - | [[Green-yellow|Salon][$primaryHairColor = "green-yellow"]] - | [[Green|Salon][$primaryHairColor = "green"]] - | [[Grey|Salon][$primaryHairColor = "grey"]] - | [[Hazel|Salon][$primaryHairColor = "hazel"]] - | [[Jet Black|Salon][$primaryHairColor = "jet black"]] - | [[Neon Blue|Salon][$primaryHairColor = "neon blue"]] - | [[Neon Green|Salon][$primaryHairColor = "neon green"]] - | [[Neon Pink|Salon][$primaryHairColor = "neon pink"]] - | [[Pink|Salon][$primaryHairColor = "pink"]] - | [[Platinum Blonde|Salon][$primaryHairColor = "platinum blonde"]] - | [[Purple|Salon][$primaryHairColor = "purple"]] - | [[Red|Salon][$primaryHairColor = "red"]] - | [[Sea Green|Salon][$primaryHairColor = "sea green"]] - | [[Silver|Salon][$primaryHairColor = "silver"]] - | [[Strawberry-Blonde|Salon][$primaryHairColor = "strawberry-blonde"]] - | [[White|Salon][$primaryHairColor = "white"]] - </div> - - <div class="choices"> - Highlights: - [[None|Salon][$secondaryHairColor = ""]] - | [[Black|Salon][$secondaryHairColor = " with black highlights"]] - | [[Blazing Red|Salon][$secondaryHairColor = " with blazing red highlights"]] - | [[Blonde|Salon][$secondaryHairColor = " with blonde highlights"]] - | [[Grey|Salon][$secondaryHairColor = " with grey highlights"]] - | [[Neon Blue|Salon][$secondaryHairColor = " with neon blue highlights"]] - | [[Neon Green|Salon][$secondaryHairColor = " with neon green highlights"]] - | [[Neon Pink|Salon][$secondaryHairColor = " with neon pink highlights"]] - | [[Rainbow|Salon][$secondaryHairColor = " with rainbow highlights"]] - | [[Silver|Salon][$secondaryHairColor = " with silver highlights"]] - | [[White|Salon][$secondaryHairColor = " with white highlights"]] - </div> - - <<if $primaryHairColor != 0>> - <div class="choices"> - [[Change|Salon][getSlave($AS).hColor = ($primaryHairColor + $secondaryHairColor),cashX(forceNeg($modCost), "slaveMod", getSlave($AS)), $primaryHairColor = 0, $secondaryHairColor = ""]] $his wig color to $primaryHairColor $secondaryHairColor - </div> - <</if>> - <</if>> +<p id="salonHair"></p> +<script> + App.Medicine.Salon.hair(getSlave(V.AS)); +</script> - <div> - <<if getSlave($AS).hStyle != "bald">> - $His <<= getSlave($AS).hStyle>> wig is <<= lengthToEitherUnit(getSlave($AS).hLength)>> long. - <span class="note">General hairstyles will conform to hair length and clothing choices.</span> - - <<if getSlave($AS).hLength == 0>><<set getSlave($AS).hLength = 10>><</if>> - - <div class="choices"> - Set wig length to: - <<if getSlave($AS).hLength != 10>>[[lengthToEitherUnit(10)|Salon][getSlave($AS).hLength = 10,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - <<if getSlave($AS).hLength != 30>>[[lengthToEitherUnit(30)|Salon][getSlave($AS).hLength = 30,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - <<if getSlave($AS).hLength != 60>>[[lengthToEitherUnit(60)|Salon][getSlave($AS).hLength = 60,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - <<if getSlave($AS).hLength != 90>>[[lengthToEitherUnit(90)|Salon][getSlave($AS).hLength = 90,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - <<if getSlave($AS).hLength != 120>>[[lengthToEitherUnit(120)|Salon][getSlave($AS).hLength = 120,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - <<if getSlave($AS).hLength != 150>>[[lengthToEitherUnit(150)|Salon][getSlave($AS).hLength = 150,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]<</if>> - </div> - <<else>> - $He is not wearing a wig. - <</if>> - <div class="choices"> - <<if getSlave($AS).hStyle != "bald">> - Set wig style: - <<else>> - Give $him a wig: - <</if>> - [[Afro|Salon][getSlave($AS).hStyle = "afro",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Braided|Salon][getSlave($AS).hStyle = "braided",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Cornrows|Salon][getSlave($AS).hStyle = "cornrows",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Curled|Salon][getSlave($AS).hStyle = "curled",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Dreadlocks|Salon][getSlave($AS).hStyle = "dreadlocks",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Eary|Salon][getSlave($AS).hStyle = "eary",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a bun|Salon][getSlave($AS).hStyle = "bun",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a messy bun|Salon][getSlave($AS).hStyle = "messy bun",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In a ponytail|Salon][getSlave($AS).hStyle = "ponytail",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[In tails|Salon][getSlave($AS).hStyle = "tails",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Luxurious|Salon][getSlave($AS).hStyle = "luxurious",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Messy|Salon][getSlave($AS).hStyle = "messy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Neat|Salon][getSlave($AS).hStyle = "neat",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Permed|Salon][getSlave($AS).hStyle = "permed",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Shaved sides|Salon][getSlave($AS).hStyle = "strip",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Up|Salon][getSlave($AS).hStyle = "up",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - </div> - </div> - <</if>> -</div> /* MAKEUP */ <h3>Makeup</h3> @@ -540,71 +286,10 @@ | [[Tiger Stripes|Salon][getSlave($AS).skin = "tiger striped",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] </div> -<<if getSlave($AS).tail != "none">> - $His tail is <<= getSlave($AS).tailColor>>. - <<if getSlave($AS).tailColor != getSlave($AS).hColor>> - [[Match current hair|Salon][getSlave($AS).tailColor = getSlave($AS).hColor]] or <span class="note">choose a new one:</span> - <<else>> - <span class="note">Choose a dye color before dyeing $his tail:</span> - <</if>> - <div class="choices"> - Colors: - [[Auburn|Salon][$primaryTailColor = "auburn"]] - | [[Black|Salon][$primaryTailColor = "black"]] - | [[Blazing Red|Salon][$primaryTailColor = "blazing red"]] - | [[Blonde|Salon][$primaryTailColor = "blonde"]] - | [[Blue-Violet|Salon][$primaryTailColor = "blue-violet"]] - | [[Blue|Salon][$primaryTailColor = "blue"]] - | [[Brown|Salon][$primaryTailColor = "brown"]] - | [[Burgundy|Salon][$primaryTailColor = "burgundy"]] - | [[Chestnut|Salon][$primaryTailColor = "chestnut"]] - | [[Chocolate|Salon][$primaryTailColor = "chocolate brown"]] - | [[Copper|Salon][$primaryTailColor = "copper"]] - | [[Dark Blue|Salon][$primaryTailColor = "dark blue"]] - | [[Dark Brown|Salon][$primaryTailColor = "dark brown"]] - | [[Dark Orchid|Salon][$primaryTailColor = "dark orchid"]] - | [[Deep Red|Salon][$primaryTailColor = "deep red"]] - | [[Ginger|Salon][$primaryTailColor = "ginger"]] - | [[Golden|Salon][$primaryTailColor = "golden"]] - | [[Green-yellow|Salon][$primaryTailColor = "green-yellow"]] - | [[Green|Salon][$primaryTailColor = "green"]] - | [[Grey|Salon][$primaryTailColor = "grey"]] - | [[Hazel|Salon][$primaryTailColor = "hazel"]] - | [[Jet Black|Salon][$primaryTailColor = "jet black"]] - | [[Neon Blue|Salon][$primaryTailColor = "neon blue"]] - | [[Neon Green|Salon][$primaryTailColor = "neon green"]] - | [[Neon Pink|Salon][$primaryTailColor = "neon pink"]] - | [[Pink|Salon][$primaryTailColor = "pink"]] - | [[Platinum Blonde|Salon][$primaryTailColor = "platinum blonde"]] - | [[Purple|Salon][$primaryTailColor = "purple"]] - | [[Red|Salon][$primaryTailColor = "red"]] - | [[Sea Green|Salon][$primaryTailColor = "sea green"]] - | [[Silver|Salon][$primaryTailColor = "silver"]] - | [[Strawberry-Blonde|Salon][$primaryTailColor = "strawberry-blonde"]] - | [[White|Salon][$primaryTailColor = "white"]] - </div> - - <div class="choices"> - Highlights: - [[None|Salon][$secondaryTailColor = ""]] - | [[Black|Salon][$secondaryTailColor = " with black highlights"]] - | [[Blazing Red|Salon][$secondaryTailColor = " with blazing red highlights"]] - | [[Blonde|Salon][$secondaryTailColor = " with blonde highlights"]] - | [[Grey|Salon][$secondaryTailColor = " with grey highlights"]] - | [[Neon Blue|Salon][$secondaryTailColor = " with neon blue highlights"]] - | [[Neon Green|Salon][$secondaryTailColor = " with neon green highlights"]] - | [[Neon Pink|Salon][$secondaryTailColor = " with neon pink highlights"]] - | [[Rainbow|Salon][$secondaryTailColor = " with rainbow highlights"]] - | [[Silver|Salon][$secondaryTailColor = " with silver highlights"]] - | [[White|Salon][$secondaryTailColor = " with white highlights"]] - </div> - - <<if $primaryTailColor != 0>> - <div class="choices"> - [["Dye " + $his + " tail"|Salon][getSlave($AS).tailColor = ($primaryTailColor + $secondaryTailColor),cashX(forceNeg($modCost), "slaveMod", getSlave($AS)), $primaryTailColor = 0, $secondaryTailColor = ""]] $primaryTailColor $secondaryTailColor now? - </div> - <</if>> -<</if>> +<p id="salonTail"></p> +<script> + App.Medicine.Salon.tail(getSlave(V.AS)); +</script> /* MARKS */ <div> @@ -666,7 +351,7 @@ | [[Dark Blue|Salon][getSlave($AS).eyebrowHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Brown|Salon][getSlave($AS).eyebrowHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Orchid|Salon][getSlave($AS).eyebrowHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Deep Red|Salon][$primaryHairColor = "deep red"]] + | [[Deep Red|Salon][getSlave($AS).eyebrowHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Ginger|Salon][getSlave($AS).eyebrowHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Golden|Salon][getSlave($AS).eyebrowHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Green-yellow|Salon][getSlave($AS).eyebrowHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] @@ -757,7 +442,7 @@ | [[Dark Blue|Salon][getSlave($AS).pubicHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Brown|Salon][getSlave($AS).pubicHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Orchid|Salon][getSlave($AS).pubicHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Deep Red|Salon][$primaryHairColor = "deep red"]] + | [[Deep Red|Salon][getSlave($AS).pubicHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Ginger|Salon][getSlave($AS).pubicHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Golden|Salon][getSlave($AS).pubicHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Green-yellow|Salon][getSlave($AS).pubicHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] @@ -831,7 +516,7 @@ | [[Dark Blue|Salon][getSlave($AS).underArmHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Brown|Salon][getSlave($AS).underArmHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Dark Orchid|Salon][getSlave($AS).underArmHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] - | [[Deep Red|Salon][$primaryHairColor = "deep red"]] + | [[Deep Red|Salon][getSlave($AS).underArmHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Ginger|Salon][getSlave($AS).underArmHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Golden|Salon][getSlave($AS).underArmHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]] | [[Green-yellow|Salon][getSlave($AS).underArmHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]