diff --git a/.eslintrc.json b/.eslintrc.json index 40306b2f37321f533f26f843fc27e6b391ab859d..61718141ee6d319c12643ab4ead29002d66cdc1a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,12 +24,17 @@ "postdisplay": true }, "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module", + "ecmaVersion": 2019, + "sourceType": "script", "ecmaFeatures": { "impliedStrict": true } }, + "settings": { + "jsdoc": { + "mode": "typescript" + } + }, "rules": { "no-prototype-builtins": "off", "semi": ["warn", "always"], diff --git a/devTools/types/FC.d.ts b/devTools/types/FC.d.ts deleted file mode 100644 index 62dfb445d64976e658659ace3d888e545972f9bf..0000000000000000000000000000000000000000 --- a/devTools/types/FC.d.ts +++ /dev/null @@ -1,640 +0,0 @@ -declare global { - namespace App { - namespace Art {} - - namespace Corporate {} - - namespace Data { - namespace Pronouns { - class Definition { - pronoun: string; - possessive: string; - possessivePronoun: string; - object: string; - objectReflexive: string; - noun: string; - } - } - - class JobDesc { - position: string; - assignment: string; - publicSexUse: boolean; - fuckdollAccepted: boolean; - broodmotherAccepted?: boolean; - /** workers can take part time jobs in addition to their main (full-time) one */ - partTime?: boolean; - } - - class ManagerJobDesc extends JobDesc { - shouldWalk: boolean; - shouldHold: boolean; - shouldSee: boolean; - shouldHear: boolean; - shouldTalk: boolean; - shouldThink: boolean; - requiredDevotion: number; - /** Applicable careers */ - careers: string[]; - /** Applicable skill name */ - skill: string; - } - } - - namespace Debug {} - namespace Desc {} - - namespace Encyclopedia { - namespace Entries {} - } - - namespace Facilities {} - - namespace Interact {} - - namespace Intro {} - - namespace MainView {} - - namespace RA { - class NumericTarget { - cond: string; - val: number; - } - - class NumericRange { - min: number; - max: number; - } - - class RuleConditions { - function: boolean | string; - data: any; - assignment: string[]; - selectedSlaves: number[]; - excludedSlaves: number[]; - } - - class RuleSurgerySettings { - eyes: number; - hears: number; - smells: number; - tastes: number; - lactation: number; - prostate: number; - cosmetic: number; - accent: number; - shoulders: number; - shouldersImplant: number; - boobs: NumericTarget; - hips: number; - hipsImplant: number; - butt: NumericTarget; - faceShape: string; - lips: NumericTarget; - holes: number; - hair: number; - bodyhair: number; - vasectomy: boolean; - bellyImplant: string; - tummy: number; - earShape: number; - horn: number; - } - - class RuleGrowthSetters { - boobs: NumericTarget; - butt: NumericTarget; - lips: NumericTarget; - dick: NumericTarget; - balls: NumericTarget; - intensity: number; - } - - class RuleReleaseSetters { - masturbation: number; - partner: number; - family: number; - slaves: number; - master: number; - } - - class RuleSetters { - releaseRules: RuleReleaseSetters; - lactationRules: string; - mobilityRules: string; - restRules: string; - toyHole: string; - clitSetting: string; - clitSettingXY: number; - clitSettingXX: number; - clitSettingEnergy: number; - speechRules: string; - clothes: string; - collar: string; - faceAccessory: string; - mouthAccessory: string; - shoes: string; - armAccessory: string; - legAccessory: string; - chastityVagina: number; - chastityAnus: number; - chastityPenis: number; - virginAccessory: string; - aVirginAccessory: string; - vaginalAccessory: string; - aVirginDickAccessory: string; - dickAccessory: string; - bellyAccessory: string; - aVirginButtplug: string; - buttplug: string; - vaginalAttachment: string; - buttplugAttachment: string; - iris: string; - pupil: string; - sclera: string; - makeup: number; - nails: number; - hColor: string; - hLength: number; - haircuts: number; - hStyle: string; - eyebrowHColor: string; - eyebrowHStyle: string; - eyebrowFullness: string; - markings: string; - pubicHColor: string; - pubicHStyle: string; - nipplesPiercing: number; - areolaePiercing: number; - clitPiercing: number; - vaginaLube: number; - vaginaPiercing: number; - dickPiercing: number; - anusPiercing: number; - lipsPiercing: number; - tonguePiercing: number; - earPiercing: number; - nosePiercing: number; - eyebrowPiercing: number; - navelPiercing: number; - corsetPiercing: number; - boobsTat: string | number; - buttTat: string | number; - vaginaTat: string | number; - dickTat: string | number; - lipsTat: string | number; - anusTat: string | number; - shouldersTat: string | number; - armsTat: string | number; - legsTat: string | number; - backTat: string | number; - stampTat: string | number; - birthsTat: string | number; - abortionTat: string | number; - pitRules: number; - curatives: number; - livingRules: string; - relationshipRules: string; - standardPunishment: string; - standardReward: string; - weight: NumericRange; - diet: string; - dietCum: number; - dietMilk: number; - onDiet: number; - muscles: NumericTarget; - XY: number; - XX: number; - gelding: number; - preg: boolean; - abortion: string[]; - growth: RuleGrowthSetters; - hyper_drugs: number; - aphrodisiacs: number; - autoSurgery: number; - autoBrand: number; - pornFeed: number; - pornFameSpending: number; - dietGrowthSupport: number; - eyewear: string; - earwear: string; - setAssignment: string; - facilityRemove: boolean; - removalAssignment: string; - surgery: RuleSurgerySettings; - underArmHColor: string; - underArmHStyle: string; - drug: string; - eyes: string; - pregSpeed: string; - bellyImplantVol: number; - teeth: string; - label: string; - removeLabel: string; - skinColor: string; - inflationType: string; - brandTarget: string; - brandDesign: string; - scarTarget: string; - scarDesign: string; - hornColor: string; - labelTagsClear: boolean; - } - - interface Rule { - ID: string; - name: string; - condition: RuleConditions; - set: RuleSetters; - } - } - - namespace SecExp {} - namespace SF {} - - namespace UI { - namespace DOM { - namespace Widgets {} - - function makeElement<K extends keyof HTMLElementTagNameMap>(tag: K, content: string | Node, classNames?: string | string[]): HTMLElementTagNameMap[K]; - function appendNewElement<K extends keyof HTMLElementTagNameMap>(tag: K, parent: ParentNode, content?: string | Node, classNames?: string | string[]): HTMLElementTagNameMap[K]; - } - namespace Hotkeys {} - namespace View {} - namespace SlaveSummary { - type AppendRenderer = (slave: FC.SlaveState, parentNode: Node) => void; - - class AbbreviationState { - clothes: number; - devotion: number; - diet: number; - drugs: number; - genitalia: number; - health: number; - hormoneBalance: number; - mental: number; - nationality: number; - origins: number; - physicals: number; - race: number; - rules: number; - rulesets: number; - skills: number; - } - class State { - abbreviation: AbbreviationState; - } - } - } - - namespace Update {} - namespace Utils {} - - namespace Medicine { - namespace Surgery { - /** - * Describes surgical procedure - */ - class Procedure { - /** - * Type code that identifies this kind of procedure. - * Currently unused, but planned for future use by RA for prioritizing procedures - */ - typeId: string; - /** - * Short label for the procedure. Can be used as a link text. - */ - label: string; - /** - * If procedure is targeted at changing object characteristic, this is the net change (signed) - */ - targetEffect: number; - /** - * Description of the procedure, more or less detailed - */ - description: string; - /** - * Money costs (positive when you pay for it) - */ - costs: number; - /** - * Projected health loss (positive when health decreases) - */ - healthCosts: number; - /** - * Function to perform the procedure - * If action is undefined, the procedure can't be applied (and .description contains the reason) - */ - action: slaveOperation; - /** - * surgery type for passages like "Surgery Degradation" - */ - surgeryType: string; - } - - class SizingOptions { - /** include possible augmentation procedures */ - augmentation?: boolean; - /** include possible reduction procedures */ - reduction?: boolean; - /** include option to install string implants */ - strings?: boolean; - /** include implant change options */ - replace?: boolean; - } - } - namespace OrganFarm { - namespace Organs { - } - } - } - } - - namespace FC { - // black magic to make TypeScript understand that App.Entity.SlaveState is a type - type SlaveState = InstanceType<typeof App.Entity.SlaveState>; - - type FSPolicy = number | "unset"; - - interface ArcologyState { - name: string; - direction: string | NoObject; - government: string; - leaderID: number; - honeymoon: number; - prosperity: number; - ownership: number; - minority: number; - PCminority: number; - demandFactor: number; - FSSupremacist: FSPolicy; - FSSupremacistRace: string | NoObject; - FSSubjugationist: FSPolicy; - FSSubjugationistRace: string | NoObject; - FSGenderRadicalist: FSPolicy; - FSGenderFundamentalist: FSPolicy; - FSPaternalist: FSPolicy; - FSDegradationist: FSPolicy; - FSBodyPurist: FSPolicy; - FSTransformationFetishist: FSPolicy; - FSYouthPreferentialist: FSPolicy; - FSMaturityPreferentialist: FSPolicy; - FSSlimnessEnthusiast: FSPolicy; - FSAssetExpansionist: FSPolicy; - FSPastoralist: FSPolicy; - FSPhysicalIdealist: FSPolicy; - FSChattelReligionist: FSPolicy; - FSRomanRevivalist: FSPolicy; - FSAztecRevivalist: FSPolicy; - FSEgyptianRevivalist: FSPolicy; - FSEdoRevivalist: FSPolicy; - FSArabianRevivalist: FSPolicy; - FSChineseRevivalist: FSPolicy; - FSNeoImperialist: FSPolicy; - FSNull: FSPolicy; - embargo: number; - embargoTarget: number; - influenceTarget: number; - influenceBonus: number; - CyberEconomic: number; - CyberEconomicTarget: number; - CyberReputation: number; - CyberReputationTarget: number; - rival: number; - FSRestart: FSPolicy; - FSRepopulationFocus: FSPolicy; - FSHedonisticDecadence: FSPolicy; - FSIntellectualDependency: FSPolicy; - FSSlaveProfessionalism: FSPolicy; - FSPetiteAdmiration: FSPolicy; - FSStatuesqueGlorification: FSPolicy; - FSCummunism: FSPolicy; - FSIncestFetishist: FSPolicy; - FSGenderRadicalistResearch: number; - FSGenderFundamentalistResearch: number; - FSPaternalistResearch: number; - FSDegradationistResearch: number; - FSBodyPuristResearch: number; - FSTransformationFetishistResearch: number; - FSYouthPreferentialistResearch: number; - FSMaturityPreferentialistResearch: number; - FSSlimnessEnthusiastResearch: number; - FSAssetExpansionistResearch: number; - FSPastoralistResearch: number; - FSPhysicalIdealistResearch: number; - FSRepopulationFocusResearch: number; - FSRestartResearch: number; - FSHedonisticDecadenceResearch: number; - FSHedonisticDecadenceDietResearch: number; - FSIntellectualDependencyResearch: number; - FSSlaveProfessionalismResearch: number; - FSPetiteAdmirationResearch: number; - FSStatuesqueGlorificationResearch: number; - FSCummunismResearch: number; - FSIncestFetishistResearch: number; - FSSupremacistDecoration: number; - FSSubjugationistDecoration: number; - FSGenderRadicalistDecoration: number; - FSGenderFundamentalistDecoration: number; - FSPaternalistDecoration: number; - FSDegradationistDecoration: number; - FSBodyPuristDecoration: number; - FSTransformationFetishistDecoration: number; - FSYouthPreferentialistDecoration: number; - FSMaturityPreferentialistDecoration: number; - FSSlimnessEnthusiastDecoration: number; - FSAssetExpansionistDecoration: number; - FSPastoralistDecoration: number; - FSPhysicalIdealistDecoration: number; - FSChattelReligionistDecoration: number; - FSRomanRevivalistDecoration: number; - FSNeoImperialistDecoration: number; - FSAztecRevivalistDecoration: number; - FSEgyptianRevivalistDecoration: number; - FSEdoRevivalistDecoration: number; - FSArabianRevivalistDecoration: number; - FSChineseRevivalistDecoration: number; - FSRepopulationFocusDecoration: number; - FSRestartDecoration: number; - FSHedonisticDecadenceDecoration: number; - FSIntellectualDependencyDecoration: number; - FSSlaveProfessionalismDecoration: number; - FSPetiteAdmirationDecoration: number; - FSStatuesqueGlorificationDecoration: number; - FSCummunismDecoration: number; - FSIncestFetishistDecoration: number; - FSSupremacistLawME: number; - FSSupremacistSMR: number; - FSSubjugationistLawME: number; - FSSubjugationistSMR: number; - FSGenderRadicalistLawFuta: number; - FSGenderRadicalistLawBeauty: number; - FSGenderFundamentalistLawBimbo: number; - FSGenderFundamentalistSMR: number; - FSGenderFundamentalistLawBeauty: number; - FSPaternalistLaw: number; - FSPaternalistSMR: number; - FSDegradationistLaw: number; - FSDegradationistSMR: number; - FSBodyPuristLaw: number; - FSBodyPuristSMR: number; - FSTransformationFetishistSMR: number; - FSYouthPreferentialistLaw: number; - FSYouthPreferentialistSMR: number; - FSMaturityPreferentialistLaw: number; - FSMaturityPreferentialistSMR: number; - FSSlimnessEnthusiastSMR: number; - FSSlimnessEnthusiastLaw: number; - FSAssetExpansionistSMR: number; - FSPastoralistLaw: number; - FSPastoralistSMR: number; - FSPhysicalIdealistSMR: number; - FSPhysicalIdealistLaw: number; - FSPhysicalIdealistStrongFat: number; - FSChattelReligionistLaw: number; - FSChattelReligionistSMR: number; - FSChattelReligionistCreed: number; - FSRomanRevivalistLaw: number; - FSRomanRevivalistSMR: number; - FSNeoImperialistLaw1: number; - FSNeoImperialistLaw2: number; - FSNeoImperialistSMR: number; - FSAztecRevivalistLaw: number; - FSAztecRevivalistSMR: number; - FSEgyptianRevivalistLaw: number; - FSEgyptianRevivalistSMR: number; - FSEdoRevivalistLaw: number; - FSEdoRevivalistSMR: number; - FSArabianRevivalistLaw: number; - FSArabianRevivalistSMR: number; - FSChineseRevivalistLaw: number; - FSChineseRevivalistSMR: number; - FSRepopulationFocusLaw: number; - FSRepopulationFocusSMR: number; - FSRestartLaw: number; - FSRestartSMR: number; - FSHedonisticDecadenceLaw: number; - FSHedonisticDecadenceLaw2: number; - FSHedonisticDecadenceStrongFat: number; - FSHedonisticDecadenceSMR: number; - FSIntellectualDependencyLaw: number; - FSIntellectualDependencyLawBeauty: number; - FSIntellectualDependencySMR: number; - FSSlaveProfessionalismLaw: number; - FSSlaveProfessionalismSMR: number; - FSPetiteAdmirationLaw: number; - FSPetiteAdmirationLaw2: number; - FSPetiteAdmirationSMR: number; - FSStatuesqueGlorificationLaw: number; - FSStatuesqueGlorificationLaw2: number; - FSStatuesqueGlorificationSMR: number; - FSEgyptianRevivalistIncestPolicy: number; - FSEgyptianRevivalistInterest: number; - FSRepopulationFocusPregPolicy: number; - FSRepopulationFocusMilfPolicy: number; - FSRepopulationFocusInterest: number; - FSEugenicsChastityPolicy: number; - FSEugenicsSterilizationPolicy: number; - FSEugenicsInterest: number; - childhoodFertilityInducedNCSResearch: number; - hackingEconomic: number; - hackingEconomicTarget: number; - hackingReputationTarget: number; - hackingReputation: number; - } - - enum NoObject { - Value = 0 - } - - type SlaveStateOrZero = SlaveState | NoObject; - - type DefaultGameStateVariables = typeof App.Data.defaultGameStateVariables; - type ResetOnNGPVariables = typeof App.Data.resetOnNGPlus; - interface GameVariables extends DefaultGameStateVariables, ResetOnNGPVariables {} - - namespace SlaveSummary { - interface SmartPiercing { - setting: { - off: string, - submissive: string, - lesbian: string, - oral: string, - humiliation: string, - anal: string, - boobs: string, - sadist: string, - masochist: string, - dom: string, - pregnancy: string, - vanilla: string, - all: string, - none: string, - monitoring: string, - men: string, - women: string, - "anti-men": string, - "anti-women": string, - } - } - } - - namespace SecExp { - interface UnitData { - troops: number, - maxTroops: number, - equip: number - } - interface PlayerUnitData extends UnitData { - active: number, - ID: number, - isDeployed: number - } - interface PlayerHumanUnitData extends PlayerUnitData { - platoonName: string, - training: number, - loyalty: number, - cyber: number, - medics: number, - SF: number, - commissars: number - } - } - - namespace Facilities { - interface Pit { - /** Defaults to "the Pit" if not otherwise set. */ - name: string; - - /** Has a slave fight an animal if not null. */ - animal: Animal; - /** The type of audience the Pit has. */ - audience: "none" | "free" | "paid"; - /** Whether or not the bodyguard is fighting this week. */ - bodyguardFights: boolean; - /** An array of the IDs of slaves assigned to the Pit. */ - fighterIDs: number[]; - /** Whether or not a fight has taken place during the week. */ - fought: boolean; - /** Whether or not the fights in the Pit are lethal. */ - lethal: boolean; - /** The ID of the slave fighting the bodyguard for their life. */ - slaveFightingBodyguard: number; - /** The virginities of the loser not allowed to be taken. */ - virginities: "neither" | "vaginal" | "anal" | "all" - } - - class Animal { - name: string; - species: string; - type: string; - articleAn: boolean; - } - } - } - - const V: FC.GameVariables; -} - -export {}; diff --git a/devTools/types/FC/RA.d.ts b/devTools/types/FC/RA.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c95e44014278d3fec55761d202ae063b181db14 --- /dev/null +++ b/devTools/types/FC/RA.d.ts @@ -0,0 +1,195 @@ +declare namespace FC { + namespace RA { + interface NumericTarget { + cond: string; + val: number; + } + + interface NumericRange { + min: number; + max: number; + } + + interface RuleConditions { + function: boolean | string; + data: any; + assignment: Assignment[]; + selectedSlaves: number[]; + excludedSlaves: number[]; + } + + interface RuleSurgerySettings { + eyes: number; + hears: number; + smells: number; + tastes: number; + lactation: number; + prostate: number; + cosmetic: number; + accent: number; + shoulders: number; + shouldersImplant: number; + boobs: NumericTarget; + hips: number; + hipsImplant: number; + butt: NumericTarget; + faceShape: FaceShape; + lips: NumericTarget; + holes: number; + hair: number; + bodyhair: number; + vasectomy: boolean; + bellyImplant: string; + tummy: number; + earShape: number; + horn: number; + } + + interface RuleGrowthSetters { + boobs: NumericTarget; + butt: NumericTarget; + lips: NumericTarget; + dick: NumericTarget; + balls: NumericTarget; + intensity: number; + } + + interface RuleReleaseSetters { + masturbation: number; + partner: number; + family: number; + slaves: number; + master: number; + } + + interface RuleSetters { + releaseRules: RuleReleaseSetters; + lactationRules: WithNone<"induce" | "maintain"> | null; + mobilityRules: Rules.Mobility; + restRules: string; + toyHole: FC.ToyHole; + clitSetting: SmartPiercingSetting; + clitSettingXY: number; + clitSettingXX: number; + clitSettingEnergy: number; + speechRules: Rules.Speech; + clothes: string; + collar: string; + faceAccessory: string; + mouthAccessory: string; + shoes: string; + armAccessory: string; + legAccessory: string; + chastityVagina: number; + chastityAnus: number; + chastityPenis: number; + virginAccessory: string; + aVirginAccessory: string; + vaginalAccessory: string; + aVirginDickAccessory: string; + dickAccessory: string; + bellyAccessory: string; + aVirginButtplug: string; + buttplug: string; + vaginalAttachment: string; + buttplugAttachment: string; + iris: string; + pupil: string; + sclera: string; + makeup: number; + nails: number; + hColor: string; + hLength: number; + haircuts: number; + hStyle: string; + eyebrowHColor: string; + eyebrowHStyle: string; + eyebrowFullness: FC.EyebrowThickness; + markings: "remove beauty marks" | "remove birthmarks" | "remove both"; + pubicHColor: string; + pubicHStyle: string; + nipplesPiercing: FC.PiercingType; + areolaePiercing: FC.PiercingType; + clitPiercing: number; + vaginaLube: number; + vaginaPiercing: FC.PiercingType; + dickPiercing: number; + anusPiercing: FC.PiercingType; + lipsPiercing: number; + tonguePiercing: FC.PiercingType; + earPiercing: FC.PiercingType; + nosePiercing: FC.PiercingType; + eyebrowPiercing: FC.PiercingType; + navelPiercing: FC.PiercingType; + corsetPiercing: number; + boobsTat: string | number; + buttTat: string | number; + vaginaTat: string | number; + dickTat: string | number; + lipsTat: string | number; + anusTat: string | number; + shouldersTat: string | number; + armsTat: string | number; + legsTat: string | number; + backTat: string | number; + stampTat: string | number; + birthsTat: string | number; + abortionTat: string | number; + pitRules: number; + curatives: number; + livingRules: Rules.Living; + relationshipRules: Rules.Relationship; + standardPunishment: Rules.Punishment; + standardReward: Rules.Reward; + weight: NumericRange; + diet: string; + dietCum: number; + dietMilk: number; + onDiet: number; + muscles: NumericTarget; + XY: number; + XX: number; + gelding: number; + preg: boolean; + abortion: string[]; + growth: RuleGrowthSetters; + hyper_drugs: number; + aphrodisiacs: number; + autoSurgery: number; + autoBrand: number; + pornFeed: number; + pornFameSpending: number; + dietGrowthSupport: number; + eyewear: string; + earwear: string; + setAssignment: Assignment; + facilityRemove: boolean; + removalAssignment: Assignment; + surgery: RuleSurgerySettings; + underArmHColor: string; + underArmHStyle: string; + drug: string; + eyes: string; + pregSpeed: string; + bellyImplantVol: number; + teeth: string; + label: string; + removeLabel: string; + skinColor: string; + inflationType: FC.InflationLiquid; + brandTarget: string; + brandDesign: string; + scarTarget: string; + scarDesign: string; + hornColor: string; + labelTagsClear: boolean; + } + + interface Rule { + ID: string; + name: string; + condition: RuleConditions; + set: RuleSetters; + } + } +} diff --git a/devTools/types/FC/SecExp.d.ts b/devTools/types/FC/SecExp.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..145b963d8a541fb485f52782ab9817544eb641a5 --- /dev/null +++ b/devTools/types/FC/SecExp.d.ts @@ -0,0 +1,26 @@ +declare namespace FC { + namespace SecExp { + + interface UnitData { + troops: number, + maxTroops: number, + equip: number + } + + interface PlayerUnitData extends UnitData { + active: number, + ID: number, + isDeployed: number + } + + interface PlayerHumanUnitData extends PlayerUnitData { + platoonName: string, + training: number, + loyalty: number, + cyber: number, + medics: number, + SF: number, + commissars: number + } + } +} diff --git a/devTools/types/FC/UI.d.ts b/devTools/types/FC/UI.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..75680e0ff630fb7da286266fc9e18b3d76623be2 --- /dev/null +++ b/devTools/types/FC/UI.d.ts @@ -0,0 +1,34 @@ +declare namespace FC { + namespace UI { + namespace DOM { + namespace Widgets {} + } + namespace Hotkeys {} + namespace View {} + namespace SlaveSummary { + type AppendRenderer = (slave: FC.SlaveState, parentNode: Node) => void; + + interface AbbreviationState { + clothes: number; + devotion: number; + diet: number; + drugs: number; + genitalia: number; + health: number; + hormoneBalance: number; + mental: number; + nationality: number; + origins: number; + physicals: number; + race: number; + rules: number; + rulesets: number; + skills: number; + } + + interface State { + abbreviation: AbbreviationState; + } + } + } +} diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..14edfb60253542fe0b5ee5cf5261cd5b2ff5f77e --- /dev/null +++ b/devTools/types/FC/arcology.d.ts @@ -0,0 +1,175 @@ +declare namespace FC { + type FutureSociety = "FSArabianRevivalist" | "FSAztecRevivalist" | "FSChattelReligionist" | "FSChineseRevivalist" | "FSNeoImperialist" + | "FSEdoRevivalist" | "FSEgyptianRevivalist" | "FSRomanRevivalist" + | "FSAssetExpansionist" | "FSTransformationFetishist" | "FSBodyPurist" + | "FSPaternalist" | "FSDegradationist" + | "FSGenderFundamentalist" | "FSGenderRadicalist" + | "FSPhysicalIdealist" | "FSSlimnessEnthusiast" | "FSHedonisticDecadence" + | "FSSlaveProfessionalism" | "FSIntellectualDependency" + | "FSMaturityPreferentialist" | "FSYouthPreferentialist" + | "FSPastoralist" + | "FSPetiteAdmiration" | "FSStatuesqueGlorification" + | "FSRepopulationFocus" | "FSRestart" + | "FSSubjugationist" | "FSSupremacist" + | "FSCummunism" | "FSIncestFetishist" | "FSNull"; + + type FSPolicyValue = number | "unset"; + + // direction with respect to the player's arcology + type ArcologyDirection = "east" | "north" | "northeast" | "northwest" | "south" | "southeast" | "southwest" | "west"; + + interface ArcologyState extends Record<FutureSociety, FSPolicyValue> { + name: string; + direction: Zeroable<ArcologyDirection>; + government: string; + leaderID: number; + honeymoon: number; + prosperity: number; + ownership: number; + minority: number; + PCminority: number; + demandFactor: number; + FSSupremacistRace: Zeroable<Race>; + FSSubjugationistRace: Zeroable<Race>; + embargo: number; + embargoTarget: Zeroable<ArcologyDirection>; + influenceTarget: Zeroable<ArcologyDirection>; + influenceBonus: number; + CyberEconomic: number; + CyberEconomicTarget: Zeroable<ArcologyDirection>; + CyberReputation: number; + CyberReputationTarget: Zeroable<ArcologyDirection>; + rival: number; + FSGenderRadicalistResearch: Bool; + FSGenderFundamentalistResearch: Bool; + FSPaternalistResearch: Bool; + FSDegradationistResearch: Bool; + FSBodyPuristResearch: Bool; + FSTransformationFetishistResearch: Bool; + FSYouthPreferentialistResearch: Bool; + FSMaturityPreferentialistResearch: Bool; + FSSlimnessEnthusiastResearch: Bool; + FSAssetExpansionistResearch: Bool; + FSPastoralistResearch: Bool; + FSPhysicalIdealistResearch: Bool; + FSRepopulationFocusResearch: Bool; + FSRestartResearch: Bool; + FSHedonisticDecadenceResearch: Bool; + FSHedonisticDecadenceDietResearch: Bool; + FSIntellectualDependencyResearch: Bool; + FSSlaveProfessionalismResearch: Bool; + FSPetiteAdmirationResearch: Bool; + FSStatuesqueGlorificationResearch: Bool; + FSCummunismResearch: Bool; + FSIncestFetishistResearch: Bool; + FSSupremacistDecoration: number; + FSSubjugationistDecoration: number; + FSGenderRadicalistDecoration: number; + FSGenderFundamentalistDecoration: number; + FSPaternalistDecoration: number; + FSDegradationistDecoration: number; + FSBodyPuristDecoration: number; + FSTransformationFetishistDecoration: number; + FSYouthPreferentialistDecoration: number; + FSMaturityPreferentialistDecoration: number; + FSSlimnessEnthusiastDecoration: number; + FSAssetExpansionistDecoration: number; + FSPastoralistDecoration: number; + FSPhysicalIdealistDecoration: number; + FSChattelReligionistDecoration: number; + FSRomanRevivalistDecoration: number; + FSNeoImperialistDecoration: number; + FSAztecRevivalistDecoration: number; + FSEgyptianRevivalistDecoration: number; + FSEdoRevivalistDecoration: number; + FSArabianRevivalistDecoration: number; + FSChineseRevivalistDecoration: number; + FSRepopulationFocusDecoration: number; + FSRestartDecoration: number; + FSHedonisticDecadenceDecoration: number; + FSIntellectualDependencyDecoration: number; + FSSlaveProfessionalismDecoration: number; + FSPetiteAdmirationDecoration: number; + FSStatuesqueGlorificationDecoration: number; + FSCummunismDecoration: number; + FSIncestFetishistDecoration: number; + FSSupremacistLawME: number; + FSSupremacistSMR: number; + FSSubjugationistLawME: number; + FSSubjugationistSMR: number; + FSGenderRadicalistLawFuta: number; + FSGenderRadicalistLawBeauty: number; + FSGenderFundamentalistLawBimbo: number; + FSGenderFundamentalistSMR: number; + FSGenderFundamentalistLawBeauty: number; + FSPaternalistLaw: number; + FSPaternalistSMR: Bool; + FSDegradationistLaw: number; + FSDegradationistSMR: Bool; + FSBodyPuristLaw: number; + FSBodyPuristSMR: Bool; + FSTransformationFetishistSMR: Bool; + FSYouthPreferentialistLaw: number; + FSYouthPreferentialistSMR: Bool; + FSMaturityPreferentialistLaw: number; + FSMaturityPreferentialistSMR: Bool; + FSSlimnessEnthusiastSMR: Bool; + FSSlimnessEnthusiastLaw: number; + FSAssetExpansionistSMR: Bool; + FSPastoralistLaw: number; + FSPastoralistSMR: Bool; + FSPhysicalIdealistSMR: number; + FSPhysicalIdealistLaw: number; + FSPhysicalIdealistStrongFat: number; + FSChattelReligionistLaw: number; + FSChattelReligionistSMR: Bool; + FSChattelReligionistCreed: number; + FSRomanRevivalistLaw: number; + FSRomanRevivalistSMR: Bool; + FSNeoImperialistLaw1: number; + FSNeoImperialistLaw2: number; + FSNeoImperialistSMR: number; + FSAztecRevivalistLaw: number; + FSAztecRevivalistSMR: Bool; + FSEgyptianRevivalistLaw: number; + FSEgyptianRevivalistSMR: Bool; + FSEdoRevivalistLaw: number; + FSEdoRevivalistSMR: Bool; + FSArabianRevivalistLaw: number; + FSArabianRevivalistSMR: Bool; + FSChineseRevivalistLaw: number; + FSChineseRevivalistSMR: Bool; + FSRepopulationFocusLaw: number; + FSRepopulationFocusSMR: Bool; + FSRestartLaw: number; + FSRestartSMR: Bool; + FSHedonisticDecadenceLaw: number; + FSHedonisticDecadenceLaw2: number; + FSHedonisticDecadenceStrongFat: number; + FSHedonisticDecadenceSMR: Bool; + FSIntellectualDependencyLaw: number; + FSIntellectualDependencyLawBeauty: number; + FSIntellectualDependencySMR: Bool; + FSSlaveProfessionalismLaw: number; + FSSlaveProfessionalismSMR: Bool; + FSPetiteAdmirationLaw: number; + FSPetiteAdmirationLaw2: number; + FSPetiteAdmirationSMR: Bool; + FSStatuesqueGlorificationLaw: number; + FSStatuesqueGlorificationLaw2: number; + FSStatuesqueGlorificationSMR: Bool; + FSEgyptianRevivalistIncestPolicy: number; + FSEgyptianRevivalistInterest: number; + FSRepopulationFocusPregPolicy: number; + FSRepopulationFocusMilfPolicy: number; + FSRepopulationFocusInterest: number; + FSEugenicsChastityPolicy: number; + FSEugenicsSterilizationPolicy: number; + FSEugenicsInterest: number; + childhoodFertilityInducedNCSResearch: Bool; + hackingEconomic: number; + hackingEconomicTarget: number; + hackingReputationTarget: number; + hackingReputation: number; + } +} diff --git a/devTools/types/FC/common.d.ts b/devTools/types/FC/common.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aaa29fa7f206dfebdbf98464ccd8103fa07cd1d4 --- /dev/null +++ b/devTools/types/FC/common.d.ts @@ -0,0 +1,14 @@ +declare namespace FC { + type WithNone<T> = T | "none"; + + const enum Bool { + False = 0, + True = 1 + } + + const enum NoObject { + Value = 0 + } + + type Zeroable<T> = T | NoObject; +} diff --git a/devTools/types/FC/data.d.ts b/devTools/types/FC/data.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6efdfe4f8217a064dbdd580d08b11e422b5de85 --- /dev/null +++ b/devTools/types/FC/data.d.ts @@ -0,0 +1,100 @@ +declare namespace FC { + namespace Data { + + namespace Wardrobe { + interface ClothingOptionBase { + name: string; + fs?: string; // FSPolicy; + } + interface ClothingOption extends ClothingOptionBase { + value: string; + } + + interface UpdatingClothingOption extends ClothingOptionBase { + updateSlave: DeepPartialSlaveState; + } + } + namespace Pronouns { + interface Definition { + pronoun: string; + possessive: string; + possessivePronoun: string; + object: string; + objectReflexive: string; + noun: string; + } + } + + interface JobDesc { + position: string; + assignment: Assignment; + publicSexUse: boolean; + fuckdollAccepted: boolean; + broodmotherAccepted?: boolean; + /** workers can take part time jobs in addition to their main (full-time) one */ + partTime?: boolean; + } + + interface ManagerJobDesc extends JobDesc { + shouldWalk: boolean; + shouldHold: boolean; + shouldSee: boolean; + shouldHear: boolean; + shouldTalk: boolean; + shouldThink: boolean; + requiredDevotion: number; + /** Applicable careers */ + careers: string[]; + /** Applicable skill name */ + skill: string; + positionAbbreviation?: string; + } + + interface FacilityDesc { + /** Base name for state variables */ + baseName: string; + /** Generic name for UI (Brothel, Club, etc.) + * If null, baseName is used instead + */ + genericName: string | null; + jobs: Record<string, JobDesc>; + defaultJob: string; + manager: ManagerJobDesc | null; + } + + interface ProstheticDefinition { + name: string; + adjust: number; + craft: number; + research: number; + level: number; + costs: number; + } + + namespace SlaveSummary { + interface SmartPiercing { + setting: { + off: string, + submissive: string, + lesbian: string, + oral: string, + humiliation: string, + anal: string, + boobs: string, + sadist: string, + masochist: string, + dom: string, + pregnancy: string, + vanilla: string, + all: string, + none: string, + monitoring: string, + men: string, + women: string, + "anti-men": string, + "anti-women": string, + } + } + } + } +} diff --git a/devTools/types/FC/gameState.d.ts b/devTools/types/FC/gameState.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a4c37a313dc41e8b97dbc76181a6bef4c2c80f1a --- /dev/null +++ b/devTools/types/FC/gameState.d.ts @@ -0,0 +1,195 @@ +declare namespace FC { + /**@deprecated */ + type SlaveStateOrZero = Zeroable<SlaveState>; + /**@deprecated */ + type HumanStateOrZero = Zeroable<HumanState>; + + type DefaultGameStateVariables = typeof App.Data.defaultGameStateVariables; + type ResetOnNGPVariables = typeof App.Data.resetOnNGPlus; + + interface Enunciation { + title: string; + say: string; + s: string; + S: string; + ss: string; + c: string; + C: string; + cc: string; + z: string; + Z: string; + zz: string; + ch: string; + Ch: string; + ps: string; + Ps: string; + sh: string; + Sh: string; + sc: string; + Sc: string; + sch: string; + Sch: string; + x: string; + X: string; + } + + interface PeacekeepersState { + generalName: string; + strength: number; + attitude: number; + independent: number; + undermining: number; + influenceAnnounced: number; + tastes: number; + } + + interface DeprecatedGameVariables { + /** @deprecated */ + events: string[]; + /** @deprecated */ + RESSevent: string[]; + /** @deprecated */ + RESSTRevent: string[]; + /** @deprecated */ + RETSevent: string[]; + /** @deprecated */ + RECIevent: string[]; + /** @deprecated */ + RecETSevent: string[]; + /** @deprecated */ + REFIevent: string[]; + /** @deprecated */ + REFSevent: string[]; + /** @deprecated */ + PESSevent: string[]; + /** @deprecated */ + PETSevent: string[]; + /** @deprecated */ + FSAcquisitionEvents: string[]; + /** @deprecated */ + FSNonconformistEvents: string[]; + /** @deprecated */ + REAnalCowgirlSubIDs: number[]; + /** @deprecated */ + RETasteTestSubIDs: number[]; + /** @deprecated */ + rebelSlaves: string[]; + /** @deprecated */ + REBoobCollisionSubIDs: string[]; + /** @deprecated */ + REIfYouEnjoyItSubIDs: string[]; + /** @deprecated */ + RESadisticDescriptionSubIDs: string[]; + /** @deprecated */ + REShowerForceSubIDs: string[]; + /** @deprecated */ + RESimpleAssaultIDs: string[]; + /** @deprecated */ + RECockmilkInterceptionIDs: number[]; + /** @deprecated */ + REInterslaveBeggingIDs: number[]; + /** @deprecated */ + bedSlaves: SlaveState[]; + /** @deprecated */ + eligibleSlaves: SlaveState[]; + /** @deprecated */ + RERepressedAnalVirginSubIDs: number[]; + + /** @deprecated */ + surgeryType: string; + + /** @deprecated */ + i: number; + + relationLinks?: Record<number, {father: number, mother: number}>; + + spire: number; + customPronouns?: Record<number, Data.Pronouns.Definition>; + } + + export type HeadGirlTraining = "health" | "paraphilia" | "soften" | "flaw" | "obedience" | + "entertain skill" | "oral skill" | "fuck skill" | "anal skill" | "whore skill"; + + export interface HeadGirlTrainee { + ID: number; + training: HeadGirlTraining; + } + + /** + * These variabels shall not be in the game state and there is a hope they will be exterminated in the future + */ + interface TemporaryVariablesInTheGameState { + gameover?: string; + slaveMarket?: "TSS" | "GRI" | "SCP" | "LDE" | "TGA" | "HA" | "TFS" | "TCR" | "NUL" | "corporate"; + prisonCrime?: Zeroable<string>; + enunciate?: Enunciation; + activeSlaveOneTimeMinAge?: number; + activeSlaveOneTimeMaxAge?: number; + one_time_age_overrides_pedo_mode?: number; + fixedNationality?: string; + fixedRace?: string; + oneTimeDisableDisability?: number; + sortQuickList?: string; + slaveAfterRA?: SlaveState; + + slavesToImportMax?: number; + + brandApplied?: number; + degradation?: number; + partner?: number | "daughter" | "father" | "mother" | "sister" | "relation" | "relationship" | "rivalry" | ""; + + activeArcologyIdx?: number; + + passageSwitchHandler?: () => void; + showAllEntries?: { + costsBudget: number; + repBudget: number; + }; + + brothelSpots?: number; + clubSpots?: number; + dairySpots?: number; + servantsQuartersSpots?: number; + clubBonuses?: number; + brothelSlavesGettingHelp?: number; + clubSlavesGettingHelp?: number; + + lastWeeksRepErrors?: string; + lastWeeksCashErrors?: string; + + slaveUsedRest?: 1; + arcadeDemandDegResult?: 1 | 2 | 3 | 4 | 5; + + FarmerDevotionThreshold?: number; + FarmerDevotionBonus?: number; + FarmerTrustThreshold?: number; + FarmerTrustBonus?: number; + FarmerHealthBonus?: number; + + milkmaidDevotionThreshold?: number; + milkmaidDevotionBonus?: number; + milkmaidTrustThreshold?: number; + milkmaidTrustBonus?: number; + milkmaidHealthBonus?: number; + + HGTrainSlavesIDs?: HeadGirlTrainee[]; + heroSlaveID?: number; + pornFameBonus?: number; + seed?: number; + applyCareerBonus?: Bool; + prostheticsConfig?: string; + nationalitiescheck?: object; + cellPath?: number[]; + relation: number; + + heroSlaves: SlaveTemplate[]; + + //#region FCTV + usedRemote: Bool; + //#endregion + } + + export interface GameVariables extends DefaultGameStateVariables, ResetOnNGPVariables, + DeprecatedGameVariables, TemporaryVariablesInTheGameState { + } +} diff --git a/devTools/types/FC/global.d.ts b/devTools/types/FC/global.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3a562c171ea5f29b7b63c63ae370baf7b01e2cd0 --- /dev/null +++ b/devTools/types/FC/global.d.ts @@ -0,0 +1,21 @@ +declare global { + // extensions + interface Array<T> { + toStringExt(delimiter?: string, lastDelimiter?: string): string; + includes(needle: any): boolean; // because we use silly unions with 0 + } + + interface Number { + toFixedHTML(fractionDigits?: number): string; + } + + interface Window { + storyProxy?: object; + } + + const V: FC.GameVariables; + function createReadonlyProxy<T>(target: T): Readonly<T>; + function createCheatProxy<T>(target: T): T; +} + +export {} diff --git a/devTools/types/FC/human.d.ts b/devTools/types/FC/human.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..775c8bc1b85bb0257881b95c2ecd378373c604f0 --- /dev/null +++ b/devTools/types/FC/human.d.ts @@ -0,0 +1,439 @@ +import {DeepPartial} from "ts-essentials"; +declare global { + export namespace FC { + export type SlaveState = InstanceType<typeof App.Entity.SlaveState>; + export type PlayerState = InstanceType<typeof App.Entity.PlayerState>; + + export type DeepPartialSlaveState = DeepPartial<SlaveState>; + + type SlaveStateRequiredAttributes = "ID" | "slaveName"; + export interface SlaveTemplate extends DeepPartial<Omit<SlaveState, SlaveStateRequiredAttributes>>, + Pick<SlaveState, SlaveStateRequiredAttributes> { + removedLimbs?: number[]; + } + + export type SlaveUpdate = DeepPartialSlaveState; + + //#region SlaveState types + namespace Rules { + type Living = "spare" | "normal" | "luxurious"; + type Rest = "none" | "cruel" | "restrictive" | "permissive" | "mandatory"; + type Mobility = "restrictive" | "permissive"; + type Speech = "restrictive" | "permissive" | "accent elimination" | "language lessons"; + type Relationship = "restrictive" | "just friends" | "permissive"; + type Lactation = "none" | "induce" | "maintain"; + type Punishment = "confinement" | "whipping" | "chastity" | "situational"; + type Reward = "relaxation" | "drugs" | "orgasm" | "situational" | "confinement"; + + interface LivingFreezed extends Record<string, Living> { + LUXURIOUS: 'luxurious'; + NORMAL: 'normal'; + SPARE: 'spare'; + } + } + + + + type Assignment = + // Penthouse Assignments + 'rest' | 'please you' | 'take classes' | 'be a servant' | 'whore' | 'serve the public' | 'be a subordinate slave' | + 'get milked' | 'work a glory hole' | 'stay confined' | + // Leadership Assignments + 'guard you' | 'be your Head Girl' | 'recruit girls' | 'be your agent' | 'live with your agent' | + // Facility Assignments + 'be confined in the arcade' | 'be the Madam' | 'work in the brothel' | 'be the Wardeness' | 'be confined in the cellblock' | + 'be the DJ' | 'serve in the club' | 'be the Nurse' | 'get treatment in the clinic' | 'be the Milkmaid' | 'work in the dairy' | + 'be the Farmer' | 'work as a farmhand' | 'live with your Head Girl' | 'be your Concubine' | 'serve in the master suite' | + 'be the Matron' | 'work as a nanny' | 'be the Schoolteacher' | 'learn in the schoolroom' | 'be the Stewardess' | + 'work as a servant' | 'be the Attendant' | 'rest in the spa' | + // Does this one exist? + 'labor in the production line' | + // Other + 'choose her own job' | + // Pseudo-jobs + '@Lurcher' | '@Pit' | '@be imported' | '@lay in tank'; + + interface AssignmentFreeze extends Record<string, Assignment> { + // Penthouse Assignments + REST: 'rest'; + FUCKTOY: 'please you'; + CLASSES: 'take classes'; + HOUSE: 'be a servant'; + WHORE: 'whore'; + PUBLIC: 'serve the public'; + SUBORDINATE: 'be a subordinate slave'; + MILKED: 'get milked'; + GLORYHOLE: 'work a glory hole'; + CONFINEMENT: 'stay confined'; + // Leadership Assignments + BODYGUARD: 'guard you'; + HEADGIRL: 'be your Head Girl'; + RECRUITER: 'recruit girls'; + AGENT: 'be your agent'; + AGENTPARTNER: 'live with your agent'; + // Facility Assignments + ARCADE: 'be confined in the arcade'; + MADAM: 'be the Madam'; + BROTHEL: 'work in the brothel'; + WARDEN: 'be the Wardeness'; + CELLBLOCK: 'be confined in the cellblock'; + DJ: 'be the DJ'; + CLUB: 'serve in the club'; + NURSE: 'be the Nurse'; + CLINIC: 'get treatment in the clinic'; + MILKMAID: 'be the Milkmaid'; + DAIRY: 'work in the dairy'; + FARMER: 'be the Farmer'; + FARMYARD: 'work as a farmhand'; + HEADGIRLSUITE: 'live with your Head Girl'; + CONCUBINE: 'be your Concubine'; + MASTERSUITE: 'serve in the master suite'; + MATRON: 'be the Matron'; + NURSERY: 'work as a nanny'; + TEACHER: 'be the Schoolteacher'; + SCHOOL: 'learn in the schoolroom'; + STEWARD: 'be the Stewardess'; + QUARTER: 'work as a servant'; + ATTENDANT: 'be the Attendant'; + SPA: 'rest in the spa'; + // Does this one exist? + BABY_FACTORY: 'labor in the production line'; + // Other + CHOICE: 'choose her own job'; + // Pseudo-jobs + LURCHER: '@Lurcher'; + PIT: '@Pit'; + IMPORTED: '@be imported'; + TANK: '@lay in tank'; + } + type Fetish = WithNone<"mindbroken" | "submissive" | "cumslut" | "humiliation" | "buttslut" | "boobs" | "sadist" | + "masochist" | "dom" | "pregnancy">; + type BehavioralFlaw = WithNone< + | "arrogant" // clings to her dignity, thinks slavery is beneath her + | "bitchy" // : can 't keep her opinions to herself + | "odd" // says and does odd things + | "hates men" // hates men + /** hates women */ + | "hates women" + | "gluttonous" // likes eating, gains weight + | "anorexic" // dislikes eating and being forced to eat, loses weight + | "devout" // resistance through religious faith + | "liberated" // believes slavery is wrong + >; + + type BehavioralQuirk = WithNone< + /** believes she has value as a slave */ + | "confident" + /** often has as witty or cunning remark ready, knows when to say it */ + | "cutting" + /** is funny */ + | "funny" + /** loves working out */ + | "fitness" + /** likes spending time with women */ + | "adores women" + /** likes spending time with men */ + | "adores men" + /** defines herself on the thoughts of others */ + | "insecure" + /** breaks cultural norms */ + | "sinful" + /** advocates slavery */ + | "advocate">; + + type SexualFlaw = WithNone< + /** hates oral sex */ + | "hates oral" + /** hates anal sex */ + | "hates anal" + /** dislikes penetrative sex */ + | "hates penetration" + /** nervous when naked */ + | "shamefast" + /** believes sex should be based on love and consent */ + | "idealistic" + /** dislikes sex */ + | "repressed" + /** inert during sex */ + | "apathetic" + /** sexually crude and has little sense of what partners find disgusting during sex */ + | "crude" + /** sexually judgemental and often judges her sexual partners' performance */ + | "judgemental" + /** disregards herself in sex */ + | "neglectful" + /** addicted to cum */ + | "cum addict" + /** addicted to anal */ + | "anal addict" + /** addicted to being the center of attention */ + | "attention whore" + /** addicted to her own breasts */ + | "breast growth" + /** sexually abusive */ + | "abusive" + /** loves causing pain and suffering */ + | "malicious" + /** hates herself */ + | "self hating" + /** addicted to being pregnant */ + | "breeder">; + + type SexualQuirk = WithNone< + /** can take a facefucking */ + "gagfuck queen" + /** knows how far she can go without getting hurt */ + | "painal queen" + /** knows how much resistance her partners want */ + | "strugglefuck queen" + /** is a tease */ + | "tease" + /** enjoys the closeness of sex */ + | "romantic" + /** enjoys breaking sexual boundaries */ + | "perverted" + /** enjoys bring her partners to orgasm */ + | "caring" + /** willing to do anything */ + | "unflinching" + /** prefers big cocks */ + | "size queen">; + + type BreastShape = "normal" | "perky" | "saggy" | "torpedo-shaped" | "downward-facing" | "wide-set" | "deflated"; + type Diet = "healthy" | "restricted" | "corrective" | "muscle building" | "fattening" | "slimming" | "XX" | "XY" | "XXY" | + "cum production" | "cleansing" | "fertility"; + type Drug = "no drugs" | + "breast injections" | "butt injections" | "lip injections" | "nipple enhancers" | "penis enhancement" | "testicle enhancement" | + "intensive breast injections" | "intensive butt injections" | "intensive penis enhancement"| "intensive testicle enhancement"| + "fertility drugs" | "super fertility drugs" | + "psychosuppressants" | "psychostimulants" | "steroids" | + "hyper breast injections" | "hyper butt injections" | "hyper penis enhancement" | "hyper testicle enhancement" | + "female hormone injections" | "male hormone injections" | "priapism agents" | + "anti-aging cream" | "appetite suppressors" | "hormone enhancers" | "hormone blockers" | + "penis atrophiers" | "testicle atrophiers" | "clitoris atrophiers" | "labia atrophiers" | "nipple atrophiers" | "lip atrophiers" | + "breast redistributors" | "butt redistributors" | "sag-B-gone" | "growth stimulants"; + + type EarWear = WithNone<"hearing aids" | "muffling ear plugs" | "deafening ear plugs">; + type EarShape = WithNone<"damaged" | "normal" | "pointy" | "elven" | "ushi" | "robot">; + type EarTypeKemonomimi = WithNone<"normal" | "neko" | "inu" | "kit" | "tanuki" | "usagi">; + type EyebrowStyle = "bald" | "curved" | "elongated" | "high-arched" | "natural" | "rounded" | "shaved" | "shortened" | + "slanted inwards" | "slanted outwards" | "straight"; + type EyebrowThickness = "pencil-thin" | "thin" | "threaded" | "natural" | "tapered" | "thick" | "bushy"; + type EyeWear = WithNone<"glasses" | "blurring glasses" | "corrective glasses" | "blurring contacts" | "corrective contacts">; + type FaceShape = "masculine" | "androgynous" | "normal" | "cute" | "sensual" | "exotic"; + type GenderGenes = "XX" | "XY" | "YY"; + type GestationDrug = "slow gestation" | "speed up" | "labor suppressors"; + type HornType = WithNone<"curved succubus horns" | "backswept horns" | "cow horns" | "one long oni horn" | + "two long oni horns" | "small horns">; + type InflationLiquid = WithNone<"water" | "cum" | "milk" | "food" | "aphrodisiac" | "curative" | "tightener" | "urine">; + type TailType = WithNone<"mod" | "combat" | "sex">; + type Markings = WithNone<"beauty mark" | "birthmark" | "freckles" | "heavily freckled">; + type TailShape = WithNone<"neko" | "inu" | "kit" | "kitsune" | "tanuki" | "ushi" | "usagi" | "risu" | "uma">; + type ToyHole = "all her holes" | "mouth" | "boobs" | "pussy" | "ass" | "dick"; + type OvaryImplantType = 0 | "fertility" | "sympathy" | "asexual"; + type NippleShape = "huge" | "puffy" | "inverted" | "tiny" | "cute" | "partially inverted" | "fuckable"; + /** + * 0: no; 1: yes; 2: heavy + */ + type PiercingType = 0 | 1 | 2; + type Race = "amerindian" | "asian" | "black" | "indo-aryan" | "latina" | "malay" | "middle eastern" | "mixed race" | + "pacific islander" | "semitic" | "southern european" | "white"; + type SizingImplantType = WithNone<"normal" | "string" | "fillable" | "advanced fillable" | "hyper fillable">; + type SmartPiercingSetting = WithNone<"off" | "all" | "no default setting" | "women" | "men" | "vanilla" | "oral" | "anal" | + "boobs" | "submissive" | "humiliation" | "pregnancy" | "dom" | "masochist" | "sadist" | "anti-women" | "anti-men">; + type TeethType = "normal" | "crooked" | "gapped" | "straightening braces" | "cosmetic braces" | "removable" | "pointy" | + "fangs" | "fang" | "baby" | "mixed"; + type MinorInjury = Zeroable<"black eye" | "bad bruise" | "split lip" | "sore ass">; + + type AnimalKind = "human" | "dog" | "pig" | "horse" | "cow"; + type SpermType = AnimalKind | "sterile"; + + type GeneticQuirk = 0 | 1 | 2; + interface GeneticQuirks { + /** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */ + macromastia: GeneticQuirk | 3; + /** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. + * + * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */ + gigantomastia: GeneticQuirk | 3; + /** is prone to having twins, shorter pregnancy recovery rate */ + fertility: GeneticQuirk; + /** is prone to having multiples, even shorter pregnancy recovery rate + * + * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */ + hyperFertility: GeneticQuirk; + /** pregnancy does not block ovulation, slave can become pregnant even while pregnant */ + superfetation: GeneticQuirk; + /** Pleasurable pregnancy and orgasmic birth. Wider hips, looser and wetter vagina. High pregadaptation and low birth damage. */ + uterineHypersensitivity: GeneticQuirk; + /** is abnormally tall. gigantism + dwarfism - is very average*/ + gigantism: GeneticQuirk; + /** is abnormally short. gigantism + dwarfism - is very average*/ + dwarfism: GeneticQuirk; + /** has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */ + pFace: GeneticQuirk; + /** has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */ + uFace: GeneticQuirk; + /** has pale skin, white hair and red eyes */ + albinism: GeneticQuirk; + /** may have mismatched eyes, the eye color stored here is always the left eye */ + heterochromia: GeneticQuirk | string; + /** ass never stops growing. Increased growth rate, reduced shrink rate. */ + rearLipedema: GeneticQuirk; + /** has (or will have) a huge dong */ + wellHung: GeneticQuirk; + /** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */ + wGain: GeneticQuirk; + /** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */ + wLoss: GeneticQuirk; + /** body attempts to normalize to an androgynous state */ + androgyny: GeneticQuirk; + /** constantly gains muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */ + mGain: GeneticQuirk; + /** constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */ + mLoss: GeneticQuirk; + /** slave can only ever birth girls */ + girlsOnly: GeneticQuirk; + } + interface FetusGenetics { + gender: GenderGenes; + name: string; + surname: Zeroable<string>; + mother: number; + motherName: string; + father: number; + fatherName: string; + nationality: string; + race: Race; + intelligence: number; + face: number; + faceShape: FaceShape; + eyeColor: string + hColor: string; + skin: string; + markings: Markings; + behavioralFlaw: BehavioralFlaw; + sexualFlaw: SexualFlaw; + pubicHStyle: string; + underArmHStyle: string; + clone: Zeroable<string>; + cloneID: number; + geneticQuirks: Partial<GeneticQuirks>; + fetish: Fetish; + spermY: number; + inbreedingCoeff?: number; + } + interface Fetus { + ID: string; + /** initial age */ + age: number; + /** initial real age (first week in mother) */ + realAge: number; + motherID: number; + /** We can store who is father too. */ + fatherID: number; + volume: number; + reserve: string; + identical: number; + splitted?: number; + twinID?: string; + genetics?: FetusGenetics; + } + //#endregion + + type LimbState = InstanceType<typeof App.Entity.LimbState>; + + interface LimbsState { + arm: { + left: LimbState; + right: LimbState; + }; + leg: { + left: LimbState, + right: LimbState; + }; + PLimb: number; + } + + interface PregnancyData { + type: string; + normalOvaMin: number; + normalOvaMax: number; + normalBirth: number; + minLiveBirth: number; + drugsEffect: number; + fetusWeek: number[]; + fetusSize: number[]; + fetusRate: number[]; + sizeType: number; + } + + type HumanState = SlaveState | PlayerState; + + export namespace Medicine { + export namespace Surgery { + /** + * Describes surgical procedure + */ + export interface Procedure { + /** + * Type code that identifies this kind of procedure. + * Currently unused, but planned for future use by RA for prioritizing procedures + */ + typeId: string; + /** + * Short label for the procedure. Can be used as a link text. + */ + label: string; + /** + * If procedure is targeted at changing object characteristic, this is the net change (signed) + */ + targetEffect: number; + /** + * Description of the procedure, more or less detailed + */ + description: string; + /** + * Money costs (positive when you pay for it) + */ + costs: number; + /** + * Projected health loss (positive when health decreases) + */ + healthCosts: number; + /** + * Function to perform the procedure + * If action is undefined, the procedure can't be applied (and .description contains the reason) + */ + action: slaveOperation; + /** + * surgery type for passages like "Surgery Degradation" + */ + surgeryType: string; + } + + export interface SizingOptions { + /** include possible augmentation procedures */ + augmentation?: boolean; + /** include possible reduction procedures */ + reduction?: boolean; + /** include option to install string implants */ + strings?: boolean; + /** include implant change options */ + replace?: boolean; + } + } + export namespace OrganFarm { + interface GrowingOrgan { + type: string; + weeksToCompletion: number; + ID: number; + } + export namespace Organs { + } + } + } + } +} + +export {} diff --git a/devTools/types/FC/medicine.d.ts b/devTools/types/FC/medicine.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/devTools/types/FC/misc.d.ts b/devTools/types/FC/misc.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..482eb2f4e1679489e11eb63e7e2cec57f9c0a380 --- /dev/null +++ b/devTools/types/FC/misc.d.ts @@ -0,0 +1,30 @@ +declare namespace FC { + export type Gingering = "antidepressant" | "depressant" | "stimulant" | "vasoconstrictor" | "vasodilator" | "aphrodisiac" | "ginger" | number; + export type GingeringDetection = "slaver" | "mercenary" | "force" | number; + + export namespace SlaveSummary { + export interface SmartPiercing { + setting: { + off: string, + submissive: string, + lesbian: string, + oral: string, + humiliation: string, + anal: string, + boobs: string, + sadist: string, + masochist: string, + dom: string, + pregnancy: string, + vanilla: string, + all: string, + none: string, + monitoring: string, + men: string, + women: string, + "anti-men": string, + "anti-women": string, + } + } + } +} diff --git a/devTools/types/SugarCubeExtensions.d.ts b/devTools/types/SugarCubeExtensions.d.ts index a23a6887d5af9a8e38c371296a525221b8fc1c4d..9c8d0bafddfc6021a42efc0975c3934c2f11d518 100644 --- a/devTools/types/SugarCubeExtensions.d.ts +++ b/devTools/types/SugarCubeExtensions.d.ts @@ -123,7 +123,7 @@ declare module "twine-sugarcube" { baseNationalities: string[]; paraphiliaList: string[]; // actually FC.SexualFlaw[] - prosthetics: Record<string, FC.Data.ProsteticDefinition>; + prosthetics: Record<string, FC.Data.ProstheticDefinition>; } // These are SugarCube private APIs used in the project diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index a1fcf88d6c78b7184ecd2ef50af5ef1034671d29..a223343999c65f7c96dfd231391ca3858be97772 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -467,7 +467,7 @@ App.Data.resetOnNGPlus = { averageDevotion: 0, enduringTrust: 0, enduringDevotion: 0, - /** @type {App.RA.Rule[]} */ + /** @type {FC.RA.Rule[]} */ defaultRules: [], REFeminizationCheckinIDs: [], diff --git a/src/004-base/facility.js b/src/004-base/facility.js index 09222e7fc6d80c208e91de8e2c6609ec6fff6fcc..ef0b46020c2394d9dd468c83ebb9133865e47753 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -6,10 +6,10 @@ App.Data.FacilityDesc = class { * If null, baseName is used instead */ this.genericName = ""; - /** @type {Object.<string, App.Data.JobDesc>} */ + /** @type {Object.<string, FC.Data.JobDesc>} */ this.jobs = {}; this.defaultJob = ""; - /** @type {App.Data.ManagerJobDesc} */ + /** @type {FC.Data.ManagerJobDesc} */ this.manager = null; } }; @@ -19,7 +19,7 @@ App.Entity.Facilities = {}; App.Entity.Facilities.Job = class { constructor() { - /** @type {App.Data.JobDesc} */ + /** @type {FC.Data.JobDesc} */ this.desc = null; /** @type {App.Entity.Facilities.Facility} */ this.facility = null; @@ -164,7 +164,7 @@ App.Entity.Facilities.Job = class { App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job { constructor() { super(); - /** @type {App.Data.ManagerJobDesc} */ + /** @type {FC.Data.ManagerJobDesc} */ this.desc = null; } @@ -227,7 +227,7 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job { App.Entity.Facilities.Facility = class { /** - * @param {App.Data.FacilityDesc} desc defines state variable for this facility + * @param {FC.Data.FacilityDesc} desc defines state variable for this facility * @param {Object.<string, App.Entity.Facilities.Job>} [jobs] job object that are not default * @param {App.Entity.Facilities.ManagingJob} [manager] */ @@ -525,7 +525,7 @@ App.Entity.Facilities.FacilitySingleJob = class extends App.Entity.Facilities.Jo App.Entity.Facilities.SingleJobFacility = class extends App.Entity.Facilities.Facility { /** - * @param {App.Data.FacilityDesc} desc defines state variable for this facility + * @param {FC.Data.FacilityDesc} desc defines state variable for this facility * @param {Object.<string, App.Entity.Facilities.Job>} [jobs] job object that are not default * @param {App.Entity.Facilities.ManagingJob} [manager] */ diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index b84da47a8fac4ef04bc4dfb02733349d70c61db4..6d4ec8ba5cfed98d933c920ebc78fe7c5eb3cef2 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1820,7 +1820,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { return ruleCleanup; - /** @param {App.RA.Rule} rule */ + /** @param {FC.RA.Rule} rule */ function ruleCleanup(rule) { // ensure rule has all required properties let newRule = App.RA.ruleDeepAssign(emptyDefaultRule(), rule); @@ -1829,7 +1829,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { return newRule; } - /** @param {App.RA.RuleConditions} cond */ + /** @param {FC.RA.RuleConditions} cond */ function cleanupConditions(cond) { if (cond.excludeSpecialSlaves !== undefined) { if (cond.excludeSpecialSlaves) { @@ -1843,7 +1843,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { if (cond.specialSlaves !== undefined) { const f = App.Data.Facilities; // facilities with heads - /** @type {App.Data.FacilityDesc[]} */ + /** @type {FC.Data.FacilityDesc[]} */ const fwh = [ f.brothel, f.cellblock, @@ -1904,7 +1904,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { } } - /** @param {App.RA.RuleSetters} set */ + /** @param {FC.RA.RuleSetters} set */ function settersSchemeCleanup(set) { /** * Moves properties of the given object, whose names start with prefix to the subject newProp @@ -1930,7 +1930,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { } /** - * @param {App.RA.RuleSetters} set + * @param {FC.RA.RuleSetters} set */ function correctStringValues(set) { for (const [k, v] of Object.entries(set)) { @@ -1956,7 +1956,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { } /** - * @param {App.RA.RuleSetters} set + * @param {FC.RA.RuleSetters} set */ function migrateReleaseRules(set) { if (typeof set.releaseRules === 'string') { @@ -2002,7 +2002,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { } } - /** @param {App.RA.RuleSetters} set */ + /** @param {FC.RA.RuleSetters} set */ function cleanupSetters(set) { settersSchemeCleanup(set); migrateReleaseRules(set); diff --git a/src/data/utility/pronounsUtils.js b/src/data/utility/pronounsUtils.js index 45197d0b940b015d5c9c4a1bd0ba2c6a386132b6..98c54f3762d9913d44e5e305b34dea53b94a2013 100644 --- a/src/data/utility/pronounsUtils.js +++ b/src/data/utility/pronounsUtils.js @@ -22,7 +22,7 @@ App.Data.Pronouns.Kind = Object.freeze({ * @param {string} object * @param {string} objectReflexive * @param {string} noun - * @returns {App.Data.Pronouns.Definition} + * @returns {FC.Data.Pronouns.Definition} */ App.Data.Pronouns.makePronounsData = function( pronoun, possessive, possessivePronoun, object, objectReflexive, noun) { diff --git a/src/endWeek/saLongTermEffects.js b/src/endWeek/saLongTermEffects.js new file mode 100644 index 0000000000000000000000000000000000000000..7ba175872fd802a4971a6ef13c8494b239af1543 --- /dev/null +++ b/src/endWeek/saLongTermEffects.js @@ -0,0 +1,2543 @@ +App.SlaveAssignment.longTermEffects = (function() { + "use strict"; + + let r; + + // eslint-disable-next-line no-unused-vars + let he, him, his, hers, himself, girl, loli, He, His, wife; + + let gigantomastiaMod; + let rearQuirk; + let uterineHypersensitivityMod; + let effect; + + return saLongTermEffects; + + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function saLongTermEffects(slave) { + r = []; + + gigantomastiaMod = slave.geneticQuirks.gigantomastia === 2 ? (slave.geneticQuirks.macromastia === 2 ? 3 : 2) : 1; + rearQuirk = slave.geneticQuirks.rearLipedema === 2 ? 2 : 0; + uterineHypersensitivityMod = slave.geneticQuirks.uterineHypersensitivity === 2 ? 2 : 1; + const oldEnergy = slave.energy; + + ({ + // eslint-disable-next-line no-unused-vars + he, him, his, hers, himself, girl, He, His, loli, wife + } = getPronouns(slave)); + + if (slave.fuckdoll > 0) { + fuckdollConversion(slave); + } + if (assignmentVisible(slave) && (slave.assignment !== "live with your Head Girl" || V.HGSuiteSurgery === 0)) { + if (hasSurgeryRule(slave, V.defaultRules) && slave.useRulesAssistant === 1 && slave.indentureRestrictions < 2 && V.cash > 0) { + r.push(`rulesAutosurgery(slave)`); + } + } + r.push(App.SlaveAssignment.clothes(slave)); + r.push(App.SlaveAssignment.longTermMentalEffects(slave)); + piercingEffects(slave); + if (slave.lactation >= 2 || (slave.lactation > 0 && slave.lactationAdaptation >= 100)) { + heavyLactationEffects(slave); + } + implantEffects(slave); + if (slave.diet === "muscle building") { // Why is this here? Probably something to do with hormones. + muscleBuildingEffects(slave); + } + if (slave.aphrodisiacs > random(0, 2)) { + aphrodisiacEffects(slave); + } + hormoneBalance(slave); // includes App.SlaveAssignment.hormonesEffects() + if (slave.pubertyXX === 0 && slave.pubertyXY === 0) { + puberty(slave); + } + r.push(App.SlaveAssignment.pregnancy(slave)); + if (slave.bellyFluid >= 1500) { + r.push(App.SlaveAssignment.inflation(slave)); + inflationEffects(slave); + } + bellySagging(slave); + bellyImplantStuff(slave); + if (slave.fetish !== "mindbroken") { + mindbreak(slave); + if (slave.fuckdoll === 0) { + mentalTension(slave); + if (!canTalk(slave)) { + noTalkingFixesFlaws(slave); + } + if (slave.breedingMark === 1 && V.propOutcome === 1) { + breedingMark(slave); + } + solidSlaveFoodEffects(slave); + } + } + r.push(App.SlaveAssignment.saSocialEffects(slave)); + if (slave.fuckdoll === 0) { // swap to fuckdoll suit in the future + brandEffects(slave); + if (slave.fetish !== "mindbroken") { + disabilityEffects(slave); + } + } + r.push(App.SlaveAssignment.longTermPhysicalEffects(slave)); + anaphrodisiacEffects(slave, oldEnergy); // must come after all .energy gains! + if (slave.accent > 0 && slave.fetish !== "mindbroken") { + languageLearning(slave); + } + if (slave.prestige > 0) { + prestige(slave); + } + pornEffects(slave); + ageAndExpiration(slave); + if (V.arcologies[0].FSRestart !== "unset") { + pregnancyCheck(slave); + } + if (slave.preg > slave.pregData.normalBirth / 8) { + mainLaborTiggers(slave); + } + endWeekHealthDamage(slave); // contained in healthFunctions.js + slaveDeath(slave); + if ((slave.hStyle !== "shaved" && slave.hStyle !== "buzzcut" && slave.hStyle !== "trimmed") && slave.bald !== 1 && slave.haircuts === 0) { + hairGrowth(slave); + } + + const frag = document.createDocumentFragment(); + $(frag).append(...App.Events.spaceSentences(r)); + return frag; + } + + /** + * Calculate current total base of the slave's boobs, since it'll be changing throughout the passage + * @param {App.Entity.SlaveState} slave + * + */ + function boobSize(slave) { + return slave.boobs - slave.boobsImplant - slave.boobsMilk; + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function fuckdollConversion(slave) { + if (slave.fuckdoll >= 100) { + r.push(`${He} is perfectly adapted to life in a Fuckdoll suit.`); + } else { + if (slave.fuckdoll <= 5) { + r.push(`This is ${his} first week as a living sex toy. ${He} is <span class="devotion dec">utterly terrified</span> by the prospect of spending the rest of ${his} life like this. ${He} is <span class="fuckdoll">forced to adapt</span> to life as a Fuckdoll. ${He} must remain still, and do ${his} best to cooperate with anyone who guides ${him} by touch. When ${he} obeys commands relayed by ${his} suit, ${he} is rewarded with orgasms; when ${he} does not, ${he} is punished with pain.`); + slave.trust -= 10; + if (slave.skill.entertainment > 50) { + r.push(`${He} <span class="stat drop">begins to forget ${his} entertainment skills</span> under the terrible stress of total confinement.`); + slave.skill.entertainment = 50; + } + } else if (slave.fuckdoll <= 15) { + r.push(`This is ${his} second week as a living sex toy. ${His} suit continues ${his} training as a living sex toy, <span class="fuckdoll">forcing ${him} to accept any treatment</span> ${he} is subjected to. Though the suit is capable of resisting unacceptable movement to a degree, and it includes integral shackles to secure the toy in any position desired, the Fuckdoll is now severely punished if ${he} attempts any resistance at all.`); + if (slave.skill.whoring > 50) { + r.push(`${He} <span class="stat drop">loses ${his} refined courtesanship,</span> since all ${he} has to remember now is how to be used.`); + slave.skill.whoring = 50; + } + } else if (slave.fuckdoll <= 25) { + r.push(`This week ${he} <span class="fuckdoll">learns the most basic commands</span> ${his} suit can pass, those for simple postures.`); + if (isAmputee(slave)) { + r.push(`These are very simple, since ${he} lacks limbs.`); + } else { + r.push(`One command directs ${him} to remain standing, but cock ${his} hips to offer ${his} rear hole. Another requires ${him} to get instantly down`); + if (hasAllLimbs(slave)) { + r.push(`on all fours`); + } else { + r.push(`to the floor`); + } + r.push(`and arch ${his} back, offering both ${his} face hole and`); + if (slave.vagina > -1) { + r.push(`lower holes.`); + } else { + r.push(`rear hole.`); + } + } + if (slave.behavioralQuirk !== "none") { + r.push(`With no stimulation other than use, ${he} <span class="stat drop">quickly forgets what used to make ${his} behavior special.</span>`); + slave.behavioralQuirk = "none"; + } + if (slave.career !== "a Fuckdoll") { + r.push(`${His} procedural memory has largely been overwritten by tonal commands; <span class="noteworthy">${his} only meaningful career experience is now the profession of a living sex toy.</span>`); + slave.career = "a Fuckdoll"; + } + } else if (slave.fuckdoll <= 35) { + r.push(`This week ${he} <span class="fuckdoll">learns more advanced posture commands.</span>`); + if (!hasAnyLegs(slave)) { + r.push(`These remain quite simple, since ${he} lacks`); + if (isAmputee(slave)) { + r.push(`limbs.`); + } else { + r.push(`legs.`); + } + } else { + r.push(`${He} practices balance in the heels integral to the suit, and learns to stand and bend at the waist, all the way down, while keeping ${his} legs straight, putting ${his} face hole and ${his}`); + if (slave.vagina > -1) { + r.push(`lower holes`); + } else { + r.push(`rear hole`); + } + r.push(`at convenient waist height.`); + } + if (slave.sexualQuirk !== "none") { + r.push(`${His} sex life now consists of things that enter ${his} holes. ${He} learns to desire any use at all, since nothing else interrupts the infinite boredom. ${He} <span class="red">quickly forgets what used to make ${his} sexual tendencies distinctive.</span>`); + slave.sexualQuirk = "none"; + } + } else if (slave.fuckdoll <= 45) { + r.push(`This week ${he} <span class="fuckdoll">learns basic sexual commands</span> from ${his} suit. Usually, if something is inserted into ${his}`); + if (slave.vagina > -1) { + r.push(`holes,`); + } else { + r.push(`lower hole,`); + } + r.push(`${he} is to relax. If a specific command is given, ${he} is taught to rhythmically tighten`); + if (slave.vagina > -1) { + r.push(`${his} holes,`); + } else { + r.push(`the hole,`); + } + r.push(`massaging whatever's inside.`); + if (slave.skill.vaginal > 25) { + r.push(`Being trained in this uncomplicated act <span class="stat drop">quickly teaches ${him} to ignore ${his} vaginal talents.</span>`); + slave.skill.vaginal = 25; + } + if (slave.skill.anal > 25) { + r.push(`${He}'s forced to use ${his} sphincter as hard as ${he} can, and ${he} <span class="stat drop">quickly forgets all anal refinement.</span>`); + slave.skill.anal = 25; + } + } else if (slave.fuckdoll <= 55) { + r.push(`This week ${he} <span class="fuckdoll">learns more basic sexual commands</span> from ${his} suit. Usually, if something is inserted into ${his} throat, ${he} is to relax and accept a facefucking. If a specific command is given, ${he} is taught to suck as powerfully as ${he} can, on pain of punishment.`); + if (slave.skill.oral > 25) { + r.push(`Being trained to suck so hard <span class="stat drop">quickly erases ${his} finer oral habits.</span>`); + slave.skill.oral = 25; + } + if (slave.behavioralFlaw !== "none") { + r.push(`${He} has now been obeying ${his} suit out of a desire to avoid punishment for so long that <span class="flaw break">${he} loses any propensity to misbehave in distinctive ways.</span>`); + slave.behavioralFlaw = "none"; + } + } else if (slave.fuckdoll <= 65) { + r.push(`This week ${he} <span class="fuckdoll">receives training for finer arousal control</span> from ${his} suit. ${He} can now be warmed up before use, to make ${him} as desperate as possible; or ${he} can be warmed up and left to suffer.`); + if (slave.fetishStrength > 50) { + r.push(`${He}'s now so desperate for any stimulation that ${he} <span class="fetish loss">begins to forget what once aroused ${him}.</span> ${He} now wants whatever ${he} can get.`); + slave.fetishStrength = 50; + } + if (slave.sexualFlaw !== "none") { + r.push(`${He}'s trained to perform thorough mechanical obedience, <span class="flaw break">utterly destroying ${his} sexual deficiencies.</span>`); + slave.sexualFlaw = "none"; + } + } else if (slave.fuckdoll <= 75) { + r.push(`This week ${he} <span class="fuckdoll">begins to learn more advanced commands</span> from ${his} suit. ${He} is taught a command that instructs ${him} to take a more active role in penetrative sex. When that command is given, ${he} must fuck ${himself} against any`); + if (V.PC.dick !== 0) { + r.push(`cocks`); + } else { + r.push(`phalli`); + } + r.push(`that are currently inside ${him}, as hard as ${he} possibly can.`); + if (slave.fetish !== "none" && slave.fetish !== "mindbroken") { + r.push(`${He} <span class="fetish loss">no longer retains any sexual preferences</span> at all. ${He} just wants to be penetrated.`); + slave.fetish = "none"; + slave.fetishStrength = 0; + } + if (slave.intelligence + slave.intelligenceImplant > 50) { + r.push(`${He} was once highly intelligent, but total concentration of all ${his} mental abilities on simple tonal commands <span class="stat drop">dulls ${his} intelligence.</span>`); + slave.intelligence -= 30; + } + } else if (slave.fuckdoll <= 85) { + r.push(`This week ${he} <span class="fuckdoll">learns some more advanced commands</span> from ${his} suit.`); + if (isAmputee(slave)) { + r.push(`If ${his} limbless torso is placed atop a dick and a command is given, ${he} is to do ${his} best to bounce on it.`); + } else { + r.push(`${He} learns a special command, on which ${he} is to slowly squat down, impaling ${himself} on any phallus beneath ${him}. Once ${his} hole is filled, ${he} is to bounce up and down, using ${his} hole to milk the phallus.`); + } + if (slave.skill.entertainment > 15) { + r.push(`There is <span class="stat drop">no entertainment and no elegance</span> for ${him} anymore. ${He} cannot even hear the lewd noises ${his} holes make.`); + slave.skill.entertainment = 15; + } + if (slave.skill.whoring > 15) { + r.push(`${He} <span class="stat drop">cannot remember prostitution</span> at all. ${He} can barely remember anything but being fucked.`); + slave.skill.whoring = 15; + } + if (slave.intelligence + slave.intelligenceImplant > 15) { + r.push(`${His} <span class="stat drop">mind steadily degrades</span> under the stress of this treatment.`); + slave.intelligence -= 40; + } + if (slave.intelligenceImplant !== 0) { + r.push(`An education holds no bearing for ${his} new skillset, so it <span class="stat drop">wastes away.</span>`); + slave.intelligenceImplant = 0; + } + } else if (slave.fuckdoll <= 95) { + r.push(`This week ${he} <span class="fuckdoll">begins ${his} final adaptation</span> into a perfect living sex toy. ${His} suit starts to actively punish any detectable mental activity when ${him} is not obeying commands or being used.`); + if (slave.intelligence > -50) { + r.push(`${He} was once reasonably intelligent, but the incredible stress of this treatment <span class="stat drop">suppresses ${his} ability to think coherently.</span>`); + slave.intelligence = -50; + } + } + slave.fuckdoll = Math.clamp(slave.fuckdoll + 10, 0, 100); + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function piercingEffects(slave) { + let masochistic = 0; + if (slave.vaginaPiercing > 1) { + if (slave.vagina > -1 && slave.labia < 2 && random(1, 100) > 90) { + r.push(`The weight of ${his} labial piercings <span class="change positive">stretches out ${his} pussylips a bit.</span>`); + slave.labia += 1; + } + } + if (slave.nipplesPiercing === 1) { + if (slave.nipples === "tiny") { + if (random(1, 100) > 95) { + r.push(`${His} piercings keep ${his} nipples half-hard all the time, and <span class="change positive">${his} nipples have stretched out a bit.</span>`); + slave.nipples = "cute"; + } + } else if (slave.nipples === "partially inverted") { + if (random(1, 100) > 70) { + r.push(`${His} piercings keep ${his} nipples half-hard all the time, which <span class="change positive">permanently protrudes them.</span>`); + if (random(1, 2) === 1) { + r.push(`It turns out they're pretty cute.`); + slave.nipples = "cute"; + } else { + r.push(`It turns out they're nice and puffy.`); + slave.nipples = "puffy"; + } + masochistic = 1; + } else { + r.push(`Having ${his} nipples held protruded by ${his} piercings is uncomfortable, which ${he}`); + masochistic = 2; + } + } else if (slave.nipples === "inverted") { + if (random(1, 100) > 90) { + r.push(`${His} piercings keep ${his} nipples half-hard all the time, which eventually <span class="change positive">permanently protrudes them.</span>`); + if (random(1, 2) === 1) { + r.push(`It turns out they're absolutely massive.`); + slave.nipples = "huge"; + } else { + r.push(`It turns out they're nice and puffy.`); + slave.nipples = "puffy"; + } + masochistic = 1; + } else { + r.push(`Having ${his} nipples held protruded by ${his} piercings is very uncomfortable, which ${he}`); + masochistic = 2; + } + } + } else if (slave.nipplesPiercing === 2) { + if (slave.nipples === "tiny") { + if (random(1, 100) > 80) { + r.push(`${He}'s got so much metal in ${his} nipples that the weight <span class="change positive">stretches and lengthens them.</span>`); + slave.nipples = "cute"; + } + } else if (slave.nipples === "partially inverted") { + if (random(1, 100) > 50) { + r.push(`${He}'s got so much metal in ${his} nipples that the weight <span class="change positive">permanently protrudes them.</span>`); + if (random(1, 2) === 1) { + r.push(`It turns out they're pretty cute.`); + slave.nipples = "cute"; + } else { + r.push(`It turns out they're nice and puffy.`); + slave.nipples = "puffy"; + } + masochistic = 1; + } else { + r.push(`Having ${his} nipples held protruded by ${his} piercings is uncomfortable, which ${his}`); + masochistic = 2; + } + } else if (slave.nipples === "inverted") { + if (random(1, 100) > 70) { + r.push(`${He}'s got so much metal in ${his} nipples that the weight <span class="change positive">permanently protrudes them.</span>`); + if (random(1, 2) === 1) { + r.push(`It turns out they're absolutely massive.`); + slave.nipples = "huge"; + } else { + r.push(`It turns out they're nice and puffy.`); + slave.nipples = "puffy"; + } + masochistic = 1; + } else { + r.push(`Having ${his} nipples held protruded by ${his} piercings is extremely uncomfortable, which ${he}`); + masochistic = 2; + } + } + if (masochistic === 1) { + if (slave.fetish === "masochist" && slave.fetishKnown === 1) { + r.push(`This is <span class="devotion inc">a long and extremely uncomfortable experience, which ${he} gets off on.</span>`); + slave.devotion += 4; + } else { + r.push(`This is <span class="devotion dec">a long and extremely uncomfortable experience.</span>`); + slave.devotion -= 4; + } + } else if (masochistic === 2) { + if (slave.fetish === "masochist" && slave.fetishKnown === 1) { + r.push(`<span class="devotion inc">gets off on.</span>`); + slave.devotion += 2; + } else { + r.push(`<span class="devotion dec">hates.</span>`); + slave.devotion -= 2; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function heavyLactationEffects(slave) { + if (slave.nipples !== "huge" && slave.nipples !== "fuckable") { + if (slave.nipples === "tiny") { + if (random(1, 100) > 70) { + r.push(`Having ${his} heavy milk production forced through ${his} tiny nipples <span class="change positive">stretches and engorges them.</span>`); + slave.nipples = "cute"; + } + } else if (slave.nipples === "cute" || slave.nipples === "inverted") { + if (random(1, 100) > 80) { + r.push(`${He}'s lactating so heavily that ${his} permanently swollen nipples gradually become accustomed to the constant flow of milk. They <span class="change positive">become puffy</span> and engorged.`); + slave.nipples = "puffy"; + } + } else if (slave.nipples === "partially inverted" || slave.nipples === "inverted") { + if (random(1, 100) > 80) { + r.push(`${He}'s lactating so heavily that ${his} swollen nipples almost never retreat into their inverted state. Lactation has <span class="change positive">permanently protruded them,</span> leaving them engorged and puffy.`); + slave.nipples = "puffy"; + } + } else { + if (random(1, 100) > 90) { + r.push(`Lactation has <span class="change positive">swollen ${his} nipples</span> to an absurd size, making ${his} status as a cow obvious even when ${his} chest faucets aren't gushing cream.`); + slave.nipples = "huge"; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function implantEffects(slave) { + let implantsSwellBoobs = 0; + if (slave.boobsImplantType === "string") { + r.push(`${His} string implants absorb fluid, <span class="change positive">slowly swelling ${his} breasts.</span>`); + slave.boobsImplant += 50; + slave.boobs += 50; + effect = random(1, 10); + if (slave.boobs > 50000) { + r.push(`Since they are as large as ${his} body can handle, some serum is drained from them.`); + slave.boobs -= 100; + slave.boobsImplant -= 100; + } else if (slave.boobsImplant > 25000 && effect >= 2) { + r.push(`As they grow they <span class="health dec">greatly irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 20); + } else if (slave.boobsImplant > 15000 && effect >= 3) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 10); + } else if (slave.boobsImplant > 10000 && effect >= 4) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 10); + } else if (slave.boobsImplant > 8000 && effect >= 5) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 10); + } else if (slave.boobsImplant > 6000 && effect >= 6) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 10); + } else if (slave.boobsImplant > 4500 && effect >= 7) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 10); + } else if (slave.boobsImplant > 3000 && effect >= 8) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 7); + } else if (slave.boobsImplant > 2000 && effect >= 9) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 5); + } else if (slave.boobsImplant > 1000 && effect > 9) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} breasts.`); + healthDamage(slave, 3); + } + } + if (slave.boobsImplant >= slave.boobs + slave.boobsMilk && slave.boobsImplant > 0) { + /* catch in case breast implants get larger than boobs */ + r.push(`${His} breast tissue has naturally <span class="change positive">stretched and grown</span> to accommodate ${his} implants better.`); + slave.boobs = slave.boobsImplant + slave.boobsMilk + 10; + } else if (slave.boobsImplant > 1000) { + if (slave.boobs - slave.boobsImplant < 1000) { + if (random(1, 100) > 60) { + implantsSwellBoobs = 1; + } + } + } else if (slave.boobsImplant > 600) { + if (slave.boobs - slave.boobsImplant < 500) { + if (random(1, 100) > 60) { + implantsSwellBoobs = 1; + } + } + } else if (slave.boobsImplant > 0) { + if (slave.boobs - slave.boobsImplant < 300) { + if (random(1, 100) > 60) { + implantsSwellBoobs = 1; + } + } + } + if (implantsSwellBoobs === 1) { + r.push(`${His} breast tissue has naturally <span class="change positive">stretched and grown</span> to accommodate ${his} implants a bit better.`); + slave.boobs += 50; + } + if (slave.buttImplantType === "string") { + r.push(`${His} string implants absorb fluid <span class="change positive">slowly swelling ${his} ass.</span>`); + slave.buttImplant += .25; + slave.butt += .25; + if (slave.butt + slave.buttImplant > 10 && slave.buttImplant > 1) { + r.push(`Since they as large as ${his} body can handle, some serum is drained from them.`); + slave.butt -= 1; + slave.buttImplant -= 1; + } + effect = random(1, 8); + if (slave.buttImplant > 7 && effect >= 2) { + r.push(`As they grow they <span class="health dec">greatly irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 20); + } else if (slave.buttImplant > 6 && effect >= 2) { + r.push(`As they grow they <span class="health dec">greatly irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 20); + } else if (slave.buttImplant > 5 && effect >= 3) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 10); + } else if (slave.buttImplant > 4 && effect >= 4) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 10); + } else if (slave.buttImplant > 3 && effect >= 5) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 5); + } else if (slave.buttImplant > 2 && effect >= 6) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 5); + } else if (slave.buttImplant > 1 && effect >= 7) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 3); + } else if (slave.buttImplant > 0 && effect > 7) { + r.push(`As they grow they <span class="health dec">irritate</span> the tissue of ${his} cheeks.`); + healthDamage(slave, 3); + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function muscleBuildingEffects(slave) { + if (slave.muscles > 30) { + if (slave.face - slave.faceImplant > 10 && random(1, 100) > 90 && slave.drugs === "steroids") { + r.push(`All the hormones in ${his} system from ${his} heavy, steroid enhanced workouts <span class="change negative">harden ${his} face a little.</span>`); + slave.face -= 5; + } + if (boobSize(slave) > 250) { + if (random(1, 100) > 95) { + r.push(`All the hormones in ${his} system from ${his} heavy workouts <span class="change negative">shrink ${his} breasts slightly.</span>`); + slave.boobs -= 50; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function aphrodisiacEffects(slave) { + let Effects = []; + if (V.aphrodisiacUpgradeRefine !== 1) { + if (slave.dick > 1 && slave.geneticQuirks.wellHung !== 2) { + Effects.push("DickShrink"); + } + if (slave.balls > 1) { + Effects.push("BallsShrink"); + } + if (slave.clit > 0 && slave.geneticQuirks.wellHung !== 2) { + Effects.push("ClitSmaller"); + } + if (slave.voice < 3 && slave.voice > 0) { + Effects.push("VoiceHigher"); + } + if (slave.vagina > -1 && slave.ovaries !== 0 && slave.vaginaLube < 2) { + Effects.push("VaginaWetter"); + } + let rearQuirkDivider = rearQuirk === 0 ? 1 : rearQuirk; + if (((slave.butt - slave.buttImplant) < 2 + rearQuirk) && (slave.geneMods.NCS === 0 || (random(1, 100) > 75 / rearQuirkDivider))) { + Effects.push("ButtBigger"); + } + if ((boobSize(slave) < 500 * gigantomastiaMod) && ((slave.geneMods.NCS === 0) || (random(1, 100) > 75 / gigantomastiaMod))) { + Effects.push("BoobsBigger"); + } + if (slave.face - slave.faceImplant <= 10) { + Effects.push("FaceSofter"); + } + if (slave.faceShape === "masculine") { + Effects.push("FaceSofterAndrogynous"); + } else if (slave.faceShape === "androgynous" && slave.geneticQuirks.androgyny !== 2) { + Effects.push("FaceNormal"); + } + } + if (slave.devotion <= 20) { + Effects.push("Devoted"); + } + if (slave.trust <= 20) { + Effects.push("Trusting"); + } + if (slave.attrXY < 95) { + Effects.push("MaleAttracted"); + } + if (slave.attrXY < 95) { + Effects.push("FemaleAttracted"); + } + if (Effects.length > 0) { + switch (Effects.random()) { + case "DickShrink": + if (slave.geneMods.NCS === 1 && slave.dick > 2 && random(1, 100) > 25) { + r.push(`Dependence on the hormone-based aphrodisiacs combined with ${his} <span class="ncs">NCS</span> makes <span class="change negative">${his} dick shrink down to be more childlike.</span>`); + slave.dick -= 1; + } else { + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change negative">${his} dick atrophy.</span>`); + } + slave.dick -= 1; + break; + case "BallsShrink": + if (slave.geneMods.NCS === 1 && slave.balls > 2 && random(1, 100) > 25) { + r.push(`Dependence on the hormone-based aphrodisiacs combined with ${his} <span class="ncs">NCS</span> makes <span class="change negative">${his} balls shrink down to be more childlike.</span>`); + slave.balls -= 1; + } else { + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change negative">${his} testicles atrophy.</span>`); + } + slave.balls -= 1; + break; + case "VoiceHigher": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">${his} voice higher and more feminine.</span>`); + slave.voice += 1; + break; + case "VaginaWetter": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">${his} vagina produce more copious natural lubricant.</span>`); + slave.vaginaLube += 1; + break; + case "ButtBigger": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">the natural size of ${his} butt increase.</span>`); + slave.butt += 1; + break; + case "BoobsBigger": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">the natural size of ${his} tits increase.</span>`); + slave.boobs += 100; + break; + case "FaceSofter": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">${his} facial structure soften and become sexier.</span>`); + r.push(faceIncrease(slave, 10)); + break; + case "FaceSofterAndrogynous": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">${his} face soften into androgyny.</span>`); + slave.faceShape = "androgynous"; + break; + case "FaceNormal": + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change positive">${his} face soften into femininity.</span>`); + slave.faceShape = "normal"; + break; + case "ClitSmaller": + if (slave.geneMods.NCS === 1 && slave.clit > 1 && random(1, 100) > 50) { + r.push(`Dependence on the hormone-based aphrodisiacs combined with ${his} <span class="ncs">NCS</span> makes <span class="change negative">${his} clit shrink down to be more childlike.</span>`); + slave.clit -= 1; + } else { + r.push(`Dependence on the hormone-based aphrodisiacs makes <span class="change negative">${his} clit shrink significantly.</span>`); + } + slave.clit -= 1; + break; + case "Devoted": + r.push(`Hormonal effects make ${him} a bit more <span class="devotion inc">docile.</span>`); + slave.devotion += 1; + break; + case "Trusting": + r.push(`Hormonal effects make ${him} a bit more <span class="trust inc">trusting.</span>`); + slave.trust += 1; + break; + case "MaleAttracted": + r.push(`Dependence on the hormone-based aphrodisiacs makes ${him} become <span class="improvement">more attracted to men.</span>`); + slave.attrXY += 3; + break; + case "FemaleAttracted": + r.push(`Dependence on the hormone-based aphrodisiacs makes ${him} become <span class="improvement">more attracted to women.</span>`); + slave.attrXX += 3; + break; + default: + r.push(`ERROR: bad aphro addict effect: ${Effects}`); + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function hormoneBalance(slave) { + if (slave.diet === "XX") { + slave.hormoneBalance += 4; + } else if (slave.diet === "XXY") { + if (slave.hormoneBalance > 0) { + slave.hormoneBalance -= 8; + } else if (slave.hormoneBalance < 0) { + slave.hormoneBalance += 8; + } + } else if (slave.diet === "XY") { + slave.hormoneBalance -= 4; + } + if (slave.drugs === "fertility drugs") { + slave.hormoneBalance += 4; + } else if (slave.drugs === "female hormone injections") { + slave.hormoneBalance += 20; + } else if (slave.drugs === "male hormone injections") { + slave.hormoneBalance -= 20; + } else if (slave.drugs === "testicle enhancement") { + slave.hormoneBalance -= 4; + } else if (slave.drugs === "steroids") { + slave.hormoneBalance -= 4; + } else if (slave.drugs === "super fertility drugs") { + slave.hormoneBalance += 8; + } else if (slave.drugs === "hyper testicle enhancement") { + slave.hormoneBalance -= 12; + } + if (slave.hormones === 1) { + slave.hormoneBalance += 4; + } else if (slave.hormones === 2) { + slave.hormoneBalance += 12; + } else if (slave.hormones === -1) { + slave.hormoneBalance -= 4; + } else if (slave.hormones === -2) { + slave.hormoneBalance -= 12; + } + if (V.hormoneUpgradePower === 1) { + if (slave.hormones === 1) { + slave.hormoneBalance += 2; + } else if (slave.hormones === 2) { + slave.hormoneBalance += 6; + } else if (slave.hormones === -1) { + slave.hormoneBalance -= 2; + } else if (slave.hormones === -2) { + slave.hormoneBalance -= 6; + } + } + if (slave.drugs === "hormone enhancers") { + if (slave.hormones === 1) { + slave.hormoneBalance += 4; + } else if (slave.hormones === 2) { + slave.hormoneBalance += 12; + } else if (slave.hormones === -1) { + slave.hormoneBalance -= 4; + } else if (slave.hormones === -2) { + slave.hormoneBalance -= 12; + } + if (V.hormoneUpgradePower === 1) { + if (slave.hormones === 1) { + slave.hormoneBalance += 1; + } else if (slave.hormones === 2) { + slave.hormoneBalance += 3; + } else if (slave.hormones === -1) { + slave.hormoneBalance -= 1; + } else if (slave.hormones === -2) { + slave.hormoneBalance -= 3; + } + } + } + /* NCS helps primary sexual maturity */ + if (slave.geneMods.NCS === 0) { + slave.hormoneBalance = Math.clamp(slave.hormoneBalance, -400, 400); + } else { + slave.hormoneBalance = Math.clamp(slave.hormoneBalance * 1.5, -400, 400); + } + /* androgyny really wants to sit around 0 and will fight changes to do so */ + if (slave.geneticQuirks.androgyny === 2) { + if (slave.hormoneBalance > 6) { + slave.hormoneBalance -= 10; + } else if (slave.hormoneBalance < -6) { + slave.hormoneBalance += 10; + } + } + let supp = 0; + if (slave.drugs !== "hormone blockers") { + r.push(App.SlaveAssignment.hormonesEffects(slave)); + } else if (slave.drugs === "hormone blockers") { + r.push(`The hormone blockers ${he} is on suppress ${his} hormones, natural or not.`); + if (slave.energy > 20) { + r.push(`${His} libido is similarly`); + supp = 1; + slave.energy--; + } + if (supp === 1) { + if ((slave.attrXX !== 50 || slave.attrXY !== 50) && slave.fuckdoll === 0 && slave.fetish !== "mindbroken") { + r.push(`<span class="stat drop">suppressed,</span> alongside what ${he} <span class="stat drop">finds sexually attractive.</span> Though that may not be a bad thing, should ${he} find a sex repulsive.`); + } else { + r.push(`<span class="stat drop">suppressed.</span>`); + } + } else if ((slave.attrXX !== 50 || slave.attrXY !== 50) && slave.fuckdoll === 0 && slave.fetish !== "mindbroken") { + r.push(`${His} <span class="stat drop">sexual tastes are also suppressed by the drugs,</span> though that may not be a bad thing should ${he} find a sex repulsive.`); + } + if (slave.attrXX > 50) { + slave.attrXX--; + } else if (slave.attrXX < 50) { + slave.attrXX++; + } + if (slave.attrXY > 50) { + slave.attrXY--; + } else if (slave.attrXY < 50) { + slave.attrXY++; + } + if (slave.hormoneBalance > 0) { + slave.hormoneBalance -= 5; + } else if (slave.hormoneBalance < 0) { + slave.hormoneBalance += 5; + } + } + + if (slave.genes === "XX") { + if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX > 0) { + if (slave.balls > 0 && slave.ballType !== "sterile" && slave.pubertyXY > 0) { + if (slave.hormoneBalance > 20) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 20) / 25); + } else if (slave.hormoneBalance < 20) { + slave.hormoneBalance += Math.ceil((20 - slave.hormoneBalance) / 25); + } + } else { + if (slave.hormoneBalance > 60) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 60) / 25); + } else if (slave.hormoneBalance < 60) { + slave.hormoneBalance += Math.ceil((60 - slave.hormoneBalance) / 25); + } + } + } else { + if (slave.balls > 0 && slave.ballType !== "sterile" && slave.pubertyXY > 0) { + if (slave.hormoneBalance > -20) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance + 20) / 25); + } else if (slave.hormoneBalance < -20) { + slave.hormoneBalance += Math.ceil((-20 - slave.hormoneBalance) / 25); + } + } else { + if (slave.hormoneBalance > 20) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 20) / 25); + } else if (slave.hormoneBalance < 20) { + slave.hormoneBalance += Math.ceil((20 - slave.hormoneBalance) / 25); + } + } + } + } else if (slave.genes === "XY") { + if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX > 0) { + if (slave.balls > 0 && slave.ballType !== "sterile" && slave.pubertyXY > 0) { + if (slave.hormoneBalance > 20) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 20) / 25); + } else if (slave.hormoneBalance < 20) { + slave.hormoneBalance += Math.ceil((20 - slave.hormoneBalance) / 25); + } + } else { + if (slave.hormoneBalance > 40) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 40) / 25); + } else if (slave.hormoneBalance < 40) { + slave.hormoneBalance += Math.ceil((40 - slave.hormoneBalance) / 25); + } + } + } else { + if (slave.balls > 0 && slave.ballType !== "sterile" && slave.pubertyXY > 0) { + if (slave.hormoneBalance > -40) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance + 40) / 25); + } else if (slave.hormoneBalance < -40) { + slave.hormoneBalance += Math.ceil((-40 - slave.hormoneBalance) / 25); + } + } else { + if (slave.hormoneBalance > 20) { + slave.hormoneBalance -= Math.ceil((slave.hormoneBalance - 20) / 25); + } else if (slave.hormoneBalance < 20) { + slave.hormoneBalance += Math.ceil((20 - slave.hormoneBalance) / 25); + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function puberty(slave) { + if (V.precociousPuberty === 1) { + let earlyPubertyFlag = 0; + let precocious = 0; + if (slave.physicalAge < slave.pubertyAgeXX && (slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0) { // Female type + /* Just having NCS speeds precocious Puberty, but also hormonal puberty affects are + * increased while secondary growth is suppressed + */ + if (slave.geneMods.NCS === 1) { + precocious -= 0.8; + } + if (slave.diet === "XX" || slave.diet === "XXY") { + precocious -= 0.1; + } else if (slave.diet === "fertility") { + precocious -= 0.1; + } + if (slave.drugs === "fertility drugs") { + precocious -= 0.1; + } else if (slave.drugs === "female hormone injections") { + precocious -= 1; + } else if (slave.drugs === "male hormone injections") { + precocious += 1; + } else if (slave.drugs === "testicle enhancement") { + precocious += 0.1; + } else if (slave.drugs === "steroids") { + precocious += 0.2; + if (boobSize(slave) > 100 && random(1, 100) < 30 / gigantomastiaMod && gigantomastiaMod !== 3) { + if (slave.geneMods.NCS === 1 && boobSize(slave) > 300 && random(1, 100) > 25 * gigantomastiaMod) { + r.push(`Hormonal effects work with ${his} <span class="ncs">NCS</span> and cause <span class="change negative">${his} tits to shrink down.</span>`); + slave.boobs -= 50 / gigantomastiaMod; + slave.energy += 1; + } else { + r.push(`${He} feels an <span class="change negative">unusual calmness</span> in ${his} belly and breasts.`); + } + slave.boobs -= 50 / gigantomastiaMod; + } + if (slave.geneMods.NCS === 0) { + if (slave.clit < 2 && random(1, 100) < 10) { + r.push(`${He} feels <span class="change positive">unusual warmness</span> in ${his} clitoris.`); + slave.clit += 1; + } + } + } else if (slave.drugs === "super fertility drugs") { + precocious -= 0.5; + if (slave.geneMods.NCS === 0) { + r.push(`${He} feels an <span class="change positive">unusual warm feeling</span> in ${his} belly and breasts.`); + if (boobSize(slave) < 400 * gigantomastiaMod && random(1, 100) < 30) { + r.push(`${His} breasts feel <span class="change positive">heavy, hot and sensitive.</span>`); + slave.boobs += 50; + if (random(1, 100) < 10 && slave.breastMesh !== 1) { + slave.boobShape = "perky"; + } + } + if (slave.hips < 2 && random(1, 100) < 10 * uterineHypersensitivityMod) { + r.push(`${He} feels <span class="change positive">strange minor pains</span> in ${his} pelvis.`); + slave.hips += 1; + } + if (slave.butt < 4 && random(1, 100) < 10 + (5 * rearQuirk)) { + r.push(`${He} feels a <span class="change positive">strange weight</span> on ${his} rear.`); + slave.butt += 1; + } + if (slave.labia < 2 && random(1, 100) < 10) { + r.push(`${He} feels an <span class="change positive">unusual tenderness</span> in ${his} labia.`); + slave.labia += 1; + } + } + } else if (slave.drugs === "hyper testicle enhancement") { + precocious += .5; + } + if (slave.hormones === 1) { + precocious -= 0.1; + } else if (slave.hormones === 2) { + precocious -= 0.2; + } else if (slave.hormones === -1) { + precocious += 0.2; + } else if (slave.hormones === -2) { + precocious += 0.4; + } + if (slave.drugs === "hormone enhancers") { + if (slave.hormones === 1) { + precocious -= 0.1; + } else if (slave.hormones === 2) { + precocious -= 0.2; + } else if (slave.hormones === -1) { + precocious += 0.1; + } else if (slave.hormones === -2) { + precocious += 0.2; + } + } else if (slave.drugs === "hormone blockers") { + precocious += 1; + } + if (slave.geneMods.NCS === 1) { + precocious *= 2; + } + slave.pubertyAgeXX += precocious; + if (slave.physicalAge < slave.pubertyAgeXX && slave.physicalAge > slave.pubertyAgeXX - 3 && slave.pubertyAgeXX < V.fertilityAge) { + if (slave.geneMods.NCS === 0) { + r.push(`${His} body is showing signs of <span class="puberty">early puberty.</span>`); + } else { + r.push(`A routine scan confirms that ${his} body is advancing towards <span class="puberty">early puberty,</span> despite not really showing signs of secondary sexual characteristics.`); + } + earlyPubertyFlag = 1; + } + } + if (slave.physicalAge < slave.pubertyAgeXY && slave.balls >= 1 && slave.pubertyXY === 0) { // Male type + precocious = 0; + /* Just having NCS speeds precocious Puberty, but also hormonal puberty affects are increased while secondary growth is suppressed */ + if (slave.geneMods.NCS === 1) { + precocious -= 0.8; + } + if (slave.diet === "XY" || slave.diet === "XXY") { + precocious -= 0.1; + } + if (slave.drugs === "fertility drugs") { + precocious += 0.2; + } else if (slave.drugs === "female hormone injections") { + precocious += 1; + } else if (slave.drugs === "male hormone injections") { + precocious -= 1; + } else if (slave.drugs === "testicle enhancement") { + precocious -= 0.1; + } else if (slave.drugs === "steroids") { + precocious -= 0.2; + } else if (slave.drugs === "hyper testicle enhancement") { + precocious -= 0.5; + if (slave.geneMods.NCS === 0) { + r.push(`${He} feels an <span class="change positive">unusual warm feeling</span> in ${his} groin.`); + if (slave.dick < 4 && random(1, 100) < 30) { + r.push(`${His} penis feels <span class="change positive">heavy, hot and oversensitive.</span>`); + slave.dick += 1; + } + if (slave.balls < 4 && random(1, 100) < 30) { + r.push(`${His} balls feel <span class="change positive">heavy, full and oversensitive.</span>`); + slave.balls += 1; + } + } + } else if (slave.drugs === "super fertility drugs") { + precocious -= 1; + if (slave.geneMods.NCS === 0) { + r.push(`${He} feels <span class="change positive">unusual warm feeling</span> in ${his} breasts.`); + if (boobSize(slave) < 400 * gigantomastiaMod && random(1, 100) < 30 && gigantomastiaMod !== 3) { + r.push(`${His} chest feels <span class="change positive">hot and sensitive.</span>`); + slave.boobs += 50; + if (random(1, 100) < 10 && slave.breastMesh !== 1) { + slave.boobShape = "perky"; + } + } + if (slave.hips < 2 && random(1, 100) < 10 * uterineHypersensitivityMod) { + r.push(`${He} feels <span class="change positive">strange minor pains</span> in ${his} pelvis.`); + slave.hips += 1; + } + if (slave.butt < 4 && random(1, 100) < 10 + (5 * rearQuirk)) { + r.push(`${He} feels a <span class="change positive">strange weight</span> to ${his} rear.`); + slave.butt += 1; + } + } + if (slave.dick > 1 && random(1, 100) < 30) { + if (slave.geneMods.NCS === 1 && slave.dick > 2 && random(1, 100) > 25) { + r.push(`Hormonal effects work with ${his} <span class="ncs">NCS</span> and cause <span class="change negative">${his} dick to shrink.</span>`); + slave.dick -= 1; + } else { + r.push(`${He} feels an <span class="change negative">unusual lightness</span> in ${his} penis.`); + } + slave.dick -= 1; + } + if (slave.balls > 1 && random(1, 100) < 30) { + if (slave.geneMods.NCS === 1 && slave.balls > 2 && random(1, 100) > 25) { + r.push(`Hormonal effects work with ${his} <span class="ncs">NCS</span> and cause <span class="change negative">${his} balls to shrink.</span>`); + slave.balls -= 1; + } else { + r.push(`${He} feels an <span class="change negative">unusual emptiness</span> to ${his} scrotum.`); + } + slave.balls -= 1; + } + } + if (slave.hormones === 1) { + precocious += 0.2; + } else if (slave.hormones === 2) { + precocious += 0.4; + } else if (slave.hormones === -1) { + precocious -= 0.1; + } else if (slave.hormones === -2) { + precocious -= 0.2; + } + if (slave.drugs === "hormone enhancers") { + if (slave.hormones === 1) { + precocious += 0.1; + } else if (slave.hormones === 2) { + precocious += 0.2; + } else if (slave.hormones === -1) { + precocious -= 0.1; + } else if (slave.hormones === -2) { + precocious -= 0.2; + } + } else if (slave.drugs === "hormone blockers") { + precocious += 1; + } + if (slave.geneMods.NCS === 1) { + precocious *= 2; + } + slave.pubertyAgeXY += precocious; + if (slave.physicalAge < slave.pubertyAgeXY && slave.physicalAge > slave.pubertyAgeXY - 3 && slave.pubertyAgeXY < V.potencyAge && earlyPubertyFlag !== 1) { + if (slave.geneMods.NCS === 0) { + r.push(`${His} body is showing signs of <span class="puberty">early puberty.</span>`); + } else { + r.push(`A routine scan confirms that ${his} body is advancing towards <span class="puberty">early puberty,</span> despite not really showing signs of secondary sexual characteristics.`); + } + } + } + } + /* puberty - not announced for allowing surprise pregnancy */ + if (slave.ovaries === 1 || slave.mpreg === 1) { + if (slave.pubertyXX === 0) { + if (slave.physicalAge >= slave.pubertyAgeXX) { + slave.pubertyXX = 1; + if (slave.geneticQuirks.gigantomastia === 3 && random(1, 100) < slave.hormoneBalance) { + slave.geneticQuirks.gigantomastia = 2; + } + if (slave.geneticQuirks.macromastia === 3 && random(1, 100) < slave.hormoneBalance) { + slave.geneticQuirks.macromastia = 2; + } + } + } + } + if (slave.balls > 0 && slave.ballType !== "sterile") { + if (slave.pubertyXY === 0) { + if (slave.physicalAge >= slave.pubertyAgeXY) { + slave.pubertyXY = 1; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function inflationEffects(slave) { + if (setup.fakeBellies.includes(slave.bellyAccessory)) { + r.push(`${He} has trouble keeping ${himself} full of`); + switch (slave.inflationType) { + case "cum": + case "food": + case "milk": + case "urine": + case "water": + r.push(slave.inflationType); + break; + default: + r.push(`${slave.inflationType}s`); + } + r.push(`with the weight of the fake belly resting on ${his} swollen stomach, forcing it to be removed.`); + slave.bellyAccessory = "none"; + } + if (slave.fetish !== "mindbroken" && slave.fuckdoll === 0) { + if (slave.bellyFluid >= 10000) { + if (slave.fetish !== "masochist" && slave.sexualFlaw !== "hates self") { + r.push(`Being so distended with fluids is <span class="devotion dec">very uncomfortable</span> to ${him}.`); + slave.devotion -= 3; + } + if (slave.fetish === "none" && fetishChangeChance(slave) > random(0, 100)) { + r.push(`Having such a round, heavy belly leads ${him} to <span class="fetish gain">begin fantasizing about being pregnant.</span>`); + slave.fetish = "pregnancy"; + slave.fetishStrength = 10; + slave.fetishKnown = 1; + } + } else if (slave.bellyFluid >= 1500) { + if (slave.fetish === "humiliation") { + r.push(`Having to walk around with a belly full of`); + switch (slave.inflationType) { + case "cum": + case "food": + case "milk": + case "urine": + case "water": + r.push(slave.inflationType); + break; + default: + r.push(`${slave.inflationType}s`); + } + r.push(`is completely humiliating, and`); + if (slave.fetishKnown === 0) { + r.push(`${he} revels in the attention. <span class="fetish gain">${He}'s a humiliation fetishist!</span>`); + slave.fetishKnown = 1; + } else { + r.push(`${he} <span class="devotion inc">loves it.</span>`); + slave.devotion += 2; + if (slave.fetishStrength < 100) { + r.push(`Every eye on ${his} swollen stomach <span class="fetish inc">strengthens ${his} fetish</span> further.`); + slave.fetishStrength++; + } + } + } else { + r.push(`Having to walk around with a belly full of`); + switch (slave.inflationType) { + case "cum": + case "food": + case "milk": + case "urine": + case "water": + r.push(slave.inflationType); + break; + default: + r.push(`${slave.inflationType}s`); + } + r.push(`is <span class="devotion dec">completely humiliating.</span>`); + slave.devotion -= 2; + if (slave.fetish !== "humiliation" && fetishChangeChance(slave) > random(0, 100)) { + r.push(`However, all the eyes on ${him} and ${his} jiggling middle <span class="fetish gain">makes ${him} begin to crave humiliation.</span>`); + slave.fetish = "humiliation"; + slave.fetishStrength = 10; + slave.fetishKnown = 1; + } + } + } + const seed = random(1, 100); + switch (slave.inflationType) { + case "cum": + case "milk": + if (slave.behavioralFlaw === "none" && slave.behavioralQuirk === "none" && seed > 70) { + r.push(`Filling ${his} guts with ${slave.inflationType} all week <span class="flaw gain">drives ${him} to gluttony.</span>`); + slave.behavioralFlaw = "gluttonous"; + } else if (slave.behavioralFlaw === "none" && slave.behavioralQuirk === "none" && seed > 40) { + if (slave.inflationType === "cum" && slave.fetish === "cumslut") { + // cumsluts don't do this + } else { + r.push(`Filling ${his} guts with ${slave.inflationType} all week <span class="flaw gain">drives ${him} to hate eating and food.</span>`); + slave.behavioralFlaw = "anorexic"; + } + } + break; + case "food": + if (slave.behavioralFlaw === "none" && slave.behavioralQuirk !== "fitness" && seed > 70) { + r.push(`Stuffing ${his} face with food all week <span class="flaw gain">drives ${him} to gluttony.</span>`); + slave.behavioralFlaw = "gluttonous"; + } else if (slave.behavioralFlaw === "none" && slave.behavioralQuirk !== "fitness" && seed > 40) { + r.push(`Stuffing ${his} face with food all week <span class="flaw gain">drives ${him} to hate eating.</span>`); + slave.behavioralFlaw = "anorexic"; + } + break; + } + } + + if (slave.bellyFluid >= 10000 && V.seeExtreme === 1 && slave.health.health <= -100 && slave.geneMods.rapidCellGrowth !== 1) { + r.push(`${He} feels an <span class="health dec">unusual intense pain</span> in ${his} bloated belly.`); + burst(slave); + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function bellySagging(slave) { + if (slave.belly >= 1000000) { + if (slave.bellySag < 50) { + slave.bellySag += 1; + if (slave.preg > 0) { + slave.bellySagPreg += 1; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 50) { + slave.bellySagPreg += 1; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 5; + slave.bellySagPreg += 5; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 3; + if (slave.preg > 0) { + slave.bellySagPreg += 3; + } + } + } else if (slave.belly >= 750000) { + if (slave.bellySag < 30) { + slave.bellySag += 0.7; + if (slave.preg > 0) { + slave.bellySagPreg += 0.7; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 30) { + slave.bellySagPreg += 0.7; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 2; + slave.bellySagPreg += 2; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 1; + if (slave.preg > 0) { + slave.bellySagPreg += 1; + } + } + } else if (slave.belly >= 600000) { + if (slave.bellySag < 20) { + slave.bellySag += 0.5; + if (slave.preg > 0) { + slave.bellySagPreg += 0.5; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 20) { + slave.bellySagPreg += 0.5; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 1; + slave.bellySagPreg += 1; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 1; + if (slave.preg > 0) { + slave.bellySagPreg += 1; + } + } + } else if (slave.belly >= 450000) { + if (slave.bellySag < 15) { + slave.bellySag += 0.4; + if (slave.preg > 0) { + slave.bellySagPreg += 0.4; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 15) { + slave.bellySagPreg += 0.4; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 0.6; + slave.bellySagPreg += 0.6; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 0.5; + if (slave.preg > 0) { + slave.bellySagPreg += 0.5; + } + } + } else if (slave.belly >= 300000) { + if (slave.bellySag < 10) { + slave.bellySag += 0.3; + if (slave.preg > 0) { + slave.bellySagPreg += 0.3; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 10) { + slave.bellySagPreg += 0.3; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 0.5; + slave.bellySagPreg += 0.5; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 0.5; + if (slave.preg > 0) { + slave.bellySagPreg += 0.5; + } + } + } else if (slave.belly >= 100000) { + if (slave.bellySag < 10) { + slave.bellySag += 0.2; + if (slave.preg > 0) { + slave.bellySagPreg += 0.2; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 10) { + slave.bellySagPreg += 0.2; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 0.3; + slave.bellySagPreg += 0.3; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 0.3; + if (slave.preg > 0) { + slave.bellySagPreg += 0.3; + } + } + } else if (slave.bellyPreg >= 10000 || slave.bellyImplant >= 10000) { + if (slave.bellySag < 5) { + slave.bellySag += 0.1; + if (slave.preg > 0) { + slave.bellySagPreg += 0.1; + } + } else if (slave.preg > 0 && slave.bellySagPreg < 5) { + slave.bellySagPreg += 0.1; + } + if (slave.pregControl === "speed up") { + slave.bellySag += 0.2; + slave.bellySagPreg += 0.2; + } + if (slave.geneMods.rapidCellGrowth === 1) { + slave.bellySag += 0.2; + if (slave.preg > 0) { + slave.bellySagPreg += 0.2; + } + } + } + if (slave.bellySagPreg > slave.bellySag) { + slave.bellySagPreg = slave.bellySag; + } + + if (slave.bellySag > 0 && slave.belly < 1500 && slave.geneMods.rapidCellGrowth !== 1) { + if (slave.muscles > 95) { + if (random(1, 100) > 1) { + r.push(`${His} stretched, extreme muscles <span class="change positive">firm up readily</span> after`); + if (slave.bellySagPreg > 0) { + r.push(`${his} pregnancy.`); + slave.bellySag -= 0.5; + slave.bellySagPreg -= 0.5; + if (slave.bellySag < 0) { + slave.bellySag = 0; + slave.bellySagPreg = 0; + } + } else { + r.push(`being heavily distended for so long.`); + slave.bellySag -= 0.5; + if (slave.bellySag < 0) { + slave.bellySag = 0; + } + } + } + } else if (slave.muscles >= 30) { + if (random(1, 100) > 20) { + r.push(`${His} stretched, muscular belly <span class="change positive">firms up</span> after`); + if (slave.bellySagPreg > 0) { + r.push(`${his} pregnancy.`); + slave.bellySag -= 0.4; + slave.bellySagPreg -= 0.4; + if (slave.bellySag < 0) { + slave.bellySag = 0; + slave.bellySagPreg = 0; + } + } else { + r.push(`being heavily distended for so long.`); + slave.bellySag -= 0.4; + if (slave.bellySag < 0) { + slave.bellySag = 0; + } + } + } + } else if (slave.muscles >= 5) { + if (random(1, 100) > 40) { + r.push(`${His} stretched, toned belly <span class="change positive">firms up</span> after`); + if (slave.bellySagPreg > 0) { + r.push(`${his} pregnancy.`); + slave.bellySag -= 0.3; + slave.bellySagPreg -= 0.3; + if (slave.bellySag < 0) { + slave.bellySag = 0; + slave.bellySagPreg = 0; + } + } else { + r.push(`being heavily distended for so long.`); + slave.bellySag -= 0.3; + if (slave.bellySag < 0) { + slave.bellySag = 0; + } + } + } + } else { + if (random(1, 100) > 60) { + r.push(`${His} belly <span class="change positive">regains some firmness</span> after`); + if (slave.bellySagPreg > 0) { + r.push(`${his} pregnancy.`); + slave.bellySag -= 0.2; + slave.bellySagPreg -= 0.2; + if (slave.bellySag < 0) { + slave.bellySag = 0; + slave.bellySagPreg = 0; + } + } else { + r.push(`being heavily distended for so long.`); + slave.bellySag -= 0.2; + if (slave.bellySag < 0) { + slave.bellySag = 0; + } + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function bellyImplantStuff(slave) { + if (slave.bellyImplant >= 5000) { + if (slave.fuckdoll === 0) { + if (slave.fetish !== "mindbroken") { + if ((slave.fetish === "none" || slave.fetishStrength <= 10) && slave.devotion > 20 && random(1, 100) > 85) { + r.push(`Having an implant simulating pregnancy drives ${him} to <span class="fetish gain">begin fantasizing about being actually pregnant.</span>`); + slave.fetish = "pregnancy"; + slave.fetishStrength = 10; + slave.fetishKnown = 1; + } + } + } + } else if (slave.bellyImplant >= 1500) { + if (setup.fakeBellies.includes(slave.bellyAccessory)) { + r.push(`${His} implant rounded belly renders ${his} fake one moot.`); + slave.bellyAccessory = "none"; + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function mindbreak(slave) { + if (slave.trust < -95) { + if (slave.devotion < -50) { + if (V.week - slave.weekAcquired > 9) { + if (slave.fuckdoll > 50) { + r.push(`Denied all stimulation other than sexual use for longer than a human mind can bear, <span class="mindbreak">${he} has been irretrievably broken.</span>`); + slave.fetish = "mindbroken"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + } else { + if (random(1, 5) === 1) { + r.push(`${He} has been used as a sexual slave for so long, and is so hopeless that ${his} future as a slave will be anything but torment, that ${his} mind finally slips. <span class="mindbreak">${He} has been irretrievably broken.</span>`); + slave.fetish = "mindbroken"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + } else { + r.push(`${He}'s so unhappy and terrified that the effects of the extreme stress on ${his} mind and body are unpredictable. This week,`); + switch (random(1, 4)) { + case 1: + r.push(`<span class="devotion dec">${his} hatred of sexual slavery was self-reinforcing.</span>`); + slave.devotion -= 5; + break; + case 2: + r.push(`<span class="health dec">${his} mental state was bad for ${his} health.</span>`); + healthDamage(slave, 5); + break; + case 3: + r.push(`<span class="change negative">${his} face grew a little more haggard.</span>`); + slave.face -= 2; + break; + default: + r.push(`${he} managed to bear it without lasting harm.`); + } + } + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function mentalTension(slave) { + const attention = Array.isArray(V.personalAttention) && V.personalAttention.find((s) => s.ID === slave.ID); + if (slave.behavioralFlaw === "none") { + if (slave.trust < -20 && slave.devotion <= 50) { + if (random(1, 100) > 100 + slave.trust) { + effect = random(1, 4); + r.push(`Being so afraid so constantly drives ${him} to find solace in`); + if (attention && ["build her devotion", "look after her", "soften her behavioral flaw", "soften her sexual flaw", "teach her"].includes(attention.trainingRegimen)) { + r.push(`your attention. Relying on you for <span class="devotion inc">emotional support</span> strengthens ${his} <span class="trust inc">bond</span> with ${getWrittenTitle(slave)}.`); + slave.devotion++; + slave.trust++; + } else if (effect === 1) { + r.push(`self-denial. <span class="flaw gain">${He} has developed anorexia.</span>`); + slave.behavioralFlaw = "anorexic"; + } else if (effect === 2) { + r.push(`stress eating. <span class="flaw gain">${He}'s now a nervous glutton.</span>`); + slave.behavioralFlaw = "gluttonous"; + } else if (effect === 3) { + r.push(`the scraps of prayer and superstition ${he} can remember from ${his} life before ${he} was a slave. <span class="flaw gain">${He}'s now religious.</span>`); + slave.behavioralFlaw = "devout"; + } else { + r.push(`the remnants of modern philosophy and education ${he} can remember from ${his} life before ${he} was a slave. <span class="flaw gain">${He} feels mentally liberated.</span>`); + slave.behavioralFlaw = "liberated"; + } + } + } + } + if (slave.sexualFlaw === "none") { + if (slave.devotion < -20) { + if (random(1, 500) > 500 + slave.devotion) { + effect = random(1, 6); + r.push(`Being so angry at ${his} life as a sex slave has`); + if (attention && ["build her devotion", "look after her", "soften her behavioral flaw", "soften her sexual flaw", "teach her"].includes(attention.trainingRegimen)) { + r.push(`forced ${him} to face ${his} problems with you. Lending ${him} support makes it <span class="devotion inc">a little more tolerable.</span>`); + slave.devotion++; + } else if (effect === 1) { + r.push(`driven ${him} into <span class="flaw gain">sexual apathy.</span>`); + slave.sexualFlaw = "apathetic"; + } else if (effect === 2) { + r.push(`convinced ${him} that the conservative parts of ${his} upbringing were right: sex is evil. <span class="flaw gain">${He}'s now repressed.</span>`); + slave.sexualFlaw = "repressed"; + } else if (effect === 3) { + r.push(`given ${him} a dread of being nude. <span class="flaw gain">${He}'s now shamefast.</span>`); + slave.sexualFlaw = "shamefast"; + } else if (effect === 4) { + r.push(`deprived ${him} of any motivation to keep sex appealing or even clean. <span class="flaw gain">${He}'s now crude.</span>`); + slave.sexualFlaw = "crude"; + } else if (effect === 5) { + r.push(`driven ${him} to find refuge in high standards. <span class="flaw gain">${He}'s now judgemental.</span>`); + slave.sexualFlaw = "judgemental"; + } else { + r.push(`convinced ${him} that sex is only this way here. Convinced that sexual slavery is wrong, <span class="flaw gain">${He}'s become sexually idealistic.</span>`); + slave.sexualFlaw = "idealistic"; + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function noTalkingFixesFlaws(slave) { + if (slave.behavioralFlaw === "bitchy") { + r.push(`If ${he} has anything bitchy to say, <span class="green">no one can tell,</span> since ${he} can't talk.`); + } + if (slave.behavioralQuirk === "cutting") { + r.push(`If ${he} has anything witty to say, <span class="red">no one can tell,</span> since ${he} can't talk.`); + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function breedingMark(slave) { + if (slave.devotion < -20) { + r.push(`${He} views the mark of the Societal Elite <span class="devotion dec">with disgust</span> as it brands ${him} as nothing more than your breeding bitch.`); + slave.devotion -= 10; + } else if (slave.devotion <= 50) { + r.push(`${He} bears the mark of the Societal Elite as a sign of ${his} superiority. As such, ${he} <span class="devotion dec">behaves like a spoiled child</span> and tries to have everything ${his} way.`); + slave.devotion -= 5; + if (slave.behavioralFlaw === "none" && slave.behavioralQuirk !== "confident") { + r.push(`${He} has become <span class="flaw gain">quite arrogant.</span>`); + slave.behavioralFlaw = "arrogant"; + } + } else { + r.push(`${He} bears the mark of the Societal Elite <span class="devotion inc">with pride.</span> It signals that ${he} is yours, and yours alone, drawing ${him} ever closer to ${his} beloved ${getWrittenTitle(slave)}.`); + slave.devotion += 10; + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function solidSlaveFoodEffects(slave) { + if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { + if (V.arcologies[0].FSDegradationist === "unset") { + if (slave.onDiet !== 1) { + if (!canTaste(slave)) { + r.push(`${His} lack of a sense of taste makes ${him} essentially immune to the addictive slave treats, as ${he} can't be enticed by their delicious taste.`); + } else if (slave.behavioralQuirk === "insecure") { + r.push(`${He} can't stop ${himself} from eating the <span class="devotion inc">addictive, delicious</span> slave treats available throughout the arcology. ${He} knows they are fattening and <span class="trust dec">starts obsessing</span> even more about ${his} weight, appearance and how others view ${him}.`); + slave.trust -= 3; + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + slave.weight++; + } + slave.devotion++; + } else if (slave.behavioralQuirk === "fitness") { + r.push(`${He} hates the availability of the tasty slave treats and how they tempt ${him} away from a fit lifestyle, but often <span class="devotion inc">finds ${himself} absentmindedly snacking on them.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`The more ${his} <span class="change positive">waistline grows,</span> the <span class="trust dec">less ${he} finds ${himself} trusting you.</span>`); + slave.trust--; + slave.devotion++; + slave.weight++; + } else { + r.push(`${He} finds that no matter how many ${he} eats, ${he} never gains weight, a detail ${he} is <span class="trust inc">thankful</span> for.`); + slave.trust++; + slave.devotion++; + } + } else if (slave.behavioralFlaw === "gluttonous") { + r.push(`${He} <span class="devotion inc">loves</span> the availability of the tasty slave treats and how ${he} can keep ${his} mouth filled at <span class="devotion inc">nearly all times.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`Since ${his} belly is always full thanks to your food supplies, ${he} <span class="trust inc">trusts you to keep ${him} sated,</span> though ${his} constant gorging has a <span class="change positive">huge impact on ${his} waistline.</span>`); + slave.trust++; + slave.devotion += 3; + slave.weight += 3; + } else { + r.push(`Since ${his} belly is always full thanks to your food supplies, ${he} <span class="trust inc">trusts you to keep ${him} sated.</span> Since the food is fat free, ${his} waistline is spared ${his} bad habits.`); + slave.trust++; + slave.devotion += 3; + } + } else if (slave.behavioralFlaw === "anorexic") { + r.push(`${He} hates the availability of the tasty slave treats and how ${he} <span class="devotion inc">can't stop eating them.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`The <span class="change positive">more ${his} waistline grows,</span> the <span class="trust dec">more horrifying ${his} body becomes to ${him}.</span>`); + slave.trust -= 5; + slave.devotion++; + slave.weight++; + } else { + r.push(`${He} finds that no matter how many ${he} eats, ${he} never gains weight, a detail ${he} is <span class="trust inc">thankful</span> for, even if ${he} is disgusted by ${his} actions.`); + slave.trust++; + slave.devotion++; + } + } else { + r.push(`${He} <span class="devotion inc">loves</span> the availability of the tasty slave treats and <span class="trust inc">trusts you more</span> for having them so accessible.`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`${He} is so distracted by the luxury that ${he} doesn't notice the <span class="change positive">weight ${he} is gaining.</span>`); + slave.weight++; + } + slave.trust++; + slave.devotion++; + } + } else { + // no treats for you + if (!canTaste(slave)) { + r.push(`${He} lacks permission to eat the slave treats, which ${he} has no real opinion over, as ${he} lacks the sense to taste them anyway.`); + } else if (slave.behavioralQuirk === "insecure") { + r.push(`${He} is <span class="trust inc">relieved</span> ${he} doesn't have to fret over eating the treats and gaining weight as ${his} ${getWrittenTitle(slave)} is carefully directing ${him}.`); + slave.trust++; + } else if (slave.behavioralQuirk === "fitness") { + r.push(`${He} is <span class="trust inc">thankful</span> that ${he} isn't permitted to eat the treats. ${He}'s seen others try one, only to start shoveling them down.`); + slave.trust++; + } else if (slave.behavioralFlaw === "gluttonous") { + r.push(`${He} <span class="devotion dec">resents</span> not being allowed to stuff ${his} face with the tempting treats like the other slaves ${he} sees.`); + slave.devotion -= 2; + } else if (slave.behavioralFlaw === "anorexic") { + r.push(`${He} <span class="devotion inc">is relieved</span> that ${he} doesn't have to eat the treats and is <span class="trust inc">thankful</span> for your apparent consideration.`); + slave.trust++; + slave.devotion += 2; + } else { + r.push(`${He}`); + if (canSee(slave)) { + r.push(`sees`); + } else { + r.push(`knows`); + } + r.push(`how much the other slaves enjoy the delicious treats and <span class="devotion dec">resents</span> not being allowed to enjoy them, feeling you are doing this to <span class="trust dec">spite ${him}.</span>`); + slave.devotion--; + slave.trust--; + } + } + } else { + if (slave.onDiet !== 1) { + r.push(`The treats are designed to cause stomach cramps alongside being extremely addictive. ${He} cannot stop ${himself} from eating them, but ${he} can <span class="trust dec">fear</span> your cruelty as ${his} <span class="devotion inc">will steadily erodes</span> from the concentrated aphrodisiacs in ${his} food.`); + slave.devotion += 2; + slave.trust -= 3; + } else { + r.push(`The treats are designed to cause stomach cramps alongside being extremely addictive. Since ${he} is not permitted to eat them, <span class="trust inc">${he} breathes a sigh of relief,</span> though ${he} is fully aware of what happens to those not as fortunate as ${him}. ${He} <span class="devotion inc">tries ${his} best to be obedient</span> hoping to not undergo the agony, but ${his} efforts pale in comparison to the effects of the food-based aphrodisiacs.`); + slave.devotion++; + slave.trust++; + } + } + } else { + if (slave.behavioralQuirk === "insecure") { + r.push(`Watching citizens sculpt their slaves to their ideals fills ${him} with <span class="trust inc">relief</span> that someone will find ${him} attractive; that or make ${him} so.`); + slave.trust++; + } else if (slave.behavioralQuirk === "fitness") { + r.push(`Watching both citizens and other slaves lie around and shirk exercise disappoints ${him}. ${He} <span class="trust dec">fears</span> that ${he}'ll be prevented from exercising and grow soft too.`); + slave.trust -= 2; + } else if (slave.behavioralFlaw === "gluttonous") { + r.push(`Being part of a society that welcomes gluttony makes ${him} <span class="trust inc">feel right at home.</span>`); + slave.trust += 2; + } else if (slave.behavioralFlaw === "anorexic") { + r.push(`${He} feels fat just watching your society gorge itself. ${He} <span class="trust dec">fears</span> that ${he}'ll be a bloated hog soon too.`); + slave.trust -= 5; + } + } + } else if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { + if (V.arcologies[0].FSDegradationist === "unset") { + if (slave.onDiet !== 1) { + if (!canTaste(slave)) { + r.push(`${His} lack of a sense of taste makes ${him} essentially immune to the addictive slave treats, as ${he} can't be enticed by their delicious taste.`); + } else if (slave.behavioralQuirk === "insecure") { + r.push(`${He} can't stop ${himself} from eating the <span class="devotion inc">addictive, delicious</span> slave treats available throughout the arcology. ${He}`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`knows`); + } else { + r.push(`believes`); + } + r.push(`they are fattening and <span class="trust dec">starts obsessing</span> even more about ${his} weight, appearance and how others view ${him}.`); + slave.trust -= 3; + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + slave.weight++; + } + slave.devotion++; + } else if (slave.behavioralQuirk === "fitness") { + r.push(`${He} hates the availability of the tasty slave treats and how they tempt ${him} away from a fit lifestyle, but often <span class="devotion inc">finds ${himself} absentmindedly snacking on them.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`The more ${his} <span class="change positive">waistline grows,</span> the <span class="trust dec">less ${he} finds ${himself} trusting you.</span>`); + slave.trust--; + slave.devotion++; + slave.weight++; + } else { + r.push(`${He} finds that no matter how many ${he} eats, ${he} never gains weight, a detail ${he} is <span class="trust inc">thankful</span> for.`); + slave.trust++; + slave.devotion++; + } + } else if (slave.behavioralFlaw === "gluttonous") { + r.push(`${He} <span class="devotion inc">loves</span> the availability of the tasty slave treats and how ${he} can keep ${his} mouth filled at <span class="devotion inc">nearly all times.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`Since ${his} belly is always full thanks to your food supplies, ${he} <span class="trust inc">trusts you to keep ${him} sated,</span> though ${his} constant gorging has a <span class="change positive">huge impact on ${his} waistline.</span>`); + slave.trust++; + slave.devotion += 3; + slave.weight += 3; + } else { + r.push(`Since ${his} belly is always full thanks to your food supplies, ${he} <span class="trust inc">trusts you to keep ${him} sated.</span> Since the food is fat free, ${his} waistline is spared ${his} bad habits.`); + slave.trust++; + slave.devotion += 3; + } + } else if (slave.behavioralFlaw === "anorexic") { + r.push(`${He} hates the availability of the tasty slave treats and how ${he} <span class="devotion inc">can't stop eating them.</span>`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`The <span class="change positive">more ${his} waistline grows,</span> the <span class="trust dec">more horrifying ${his} body becomes to ${him}.</span>`); + slave.trust -= 5; + slave.devotion++; + slave.weight++; + } else { + r.push(`${He} finds that no matter how many ${he} eats, ${he} never gains weight, a detail ${he} is <span class="trust inc">thankful</span> for, even if ${he} is disgusted by ${his} actions.`); + slave.trust++; + slave.devotion++; + } + } else { + r.push(`${He} <span class="devotion inc">loves</span> the availability of the tasty slave treats and <span class="trust inc">trusts you more</span> for having them so accessible.`); + if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { + r.push(`${He} is so distracted by the luxury that ${he} doesn't notice the <span class="change positive">weight ${he} is gaining.</span>`); + slave.weight++; + } + slave.trust++; + slave.devotion++; + } + } else { + // no treats for you + if (!canTaste(slave)) { + r.push(`${He} lacks permission to eat the slave treats, which ${he} has no real opinion over, as ${he} lacks the sense to taste them anyway.`); + } else if (slave.behavioralQuirk === "insecure") { + r.push(`${He} is <span class="trust inc">relieved</span> ${he} doesn't have to fret over eating the treats and gaining weight as ${his} ${getWrittenTitle(slave)} is carefully directing ${him}.`); + slave.trust++; + } else if (slave.behavioralQuirk === "fitness") { + r.push(`${He} is <span class="trust inc">thankful</span> that ${he} isn't permitted to eat the treats. ${He}'s seen others try one, only to start shoveling them down.`); + slave.trust++; + } else if (slave.behavioralFlaw === "gluttonous") { + r.push(`${He} <span class="devotion dec">resents</span> not being allowed to stuff ${his} face with the tempting treats like the other`); + if (canSee(slave)) { + r.push(`slaves ${he} sees.`); + } else { + r.push(`slaves.`); + } + slave.devotion -= 2; + } else if (slave.behavioralFlaw === "anorexic") { + r.push(`${He} <span class="devotion inc">is relieved</span> that ${he} doesn't have to eat the treat and is <span class="trust inc">thankful</span> for your apparent consideration.`); + slave.trust++; + slave.devotion += 2; + } else { + r.push(`${He}`); + if (canSee(slave)) { + r.push(`sees`); + } else { + r.push(`knows`); + } + r.push(`how much the other slaves enjoy the delicious treats and <span class="devotion dec">resents</span> not being allowed to enjoy them, feeling you are doing this to <span class="trust dec">spite ${him}.</span>`); + slave.devotion--; + slave.trust--; + } + } + } else { + if (slave.onDiet !== 1) { + r.push(`The treats are designed to cause stomach cramps alongside being extremely addictive. ${He} cannot stop ${himself} from eating them, but ${he} can <span class="trust dec">fear</span> your cruelty as ${his} <span class="devotion inc">will steadily erodes</span> from the concentrated aphrodisiacs in ${his} food.`); + slave.devotion += 2; + slave.trust -= 3; + } else { + r.push(`The treats are designed to cause stomach cramps alongside being extremely addictive. Since ${he} is not permitted to eat them, <span class="trust inc">${he} breathes a sigh of relief,</span> though ${he} is fully aware of what happens to those not as fortunate as ${him}. ${He} <span class="devotion inc">tries ${his} best to be obedient</span> hoping to not undergo the agony, but ${his} efforts pale in comparison to the effects of the food based aphrodisiacs.`); + slave.devotion++; + slave.trust++; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function brandEffects(slave) { + if (!jQuery.isEmptyObject(slave.brand)) { + if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`Since ${he} is in public, your brand against the ${slave.skin} skin of ${his} ${Object.keys(slave.brand)[0]} <span class="reputation inc">slightly increases your reputation</span> as a slaveowner.`); + repX(5, "futureSocieties", slave); + switch (slave.assignment) { + case "work in the brothel": + getSlaveStatisticData(slave, V.facility.brothel).rep += 5; + break; + } + } + if (V.rep > 10000) { + r.push(`${His} brand is considered a minor enhancement to ${his} beauty since you are very well liked.`); + } else if (V.rep < 5000) { + r.push(`${His} brand is considered a minor blemish on ${his} beauty since you are not well liked.`); + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function disabilityEffects(slave) { + let visionFlag = 0; + if (getBestVision(slave) === 0) { + if (slave.hears <= -2) { + if (slave.devotion > 50) { + r.push(`Even though ${he} is blind and deaf, ${he} is devoted enough to you to allow ${himself} to lower ${his} guard. ${He} becomes <span class="trust inc">trusting</span> of your ability to keep ${him} safe.`); + slave.trust += 5; + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s blind, deaf and on the cusp of devotion, ${he} becomes <span class="devotion inc">more reliant</span> on you, but also begins to be <span class="trust inc">less fearful</span> of the world around ${him}.`); + slave.devotion += 5; + slave.trust += 3; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`${He} may be blind and deaf, but ${he} knows nobody would dare harm ${him} under your watch, <span class="trust inc">building ${his} trust</span> in you.`); + slave.trust += 2; + } else if (slave.devotion >= -20) { + r.push(`${His} blindness and deafness forces ${him} to <span class="devotion inc">entirely rely</span> on your mercy. However, it only <span class="trust inc">amplifies ${his} fear</span> as ${he} has only`); + if (canSmell(slave)) { + r.push(`the smell of arousal`); + } else { + r.push(`a stumbling sense of touch`); + } + r.push(`to warn of an impending threat.`); + slave.devotion += 10; + slave.trust -= 30; + } else { + r.push(`Being blind and deaf forces ${him} to <span class="devotion inc">completely rely</span> on your mercy. It does nothing to stem <span class="trust dec">the horror</span> ${he} faces being unable to sense the world around ${him}.`); + slave.devotion += 20; + slave.trust -= 50; + } + } else if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs")) { + if (slave.devotion > 50) { + r.push(`Even though ${he} is blind and unable to properly hear, ${he} is devoted enough to you to allow ${himself} to lower ${his} guard. ${He} becomes <span class="trust inc">trusting</span> of your ability to keep ${him} safe.`); + slave.trust += 4; + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s blind, hard of hearing and on the cusp of devotion, ${he} becomes <span class="devotion inc">more reliant</span> on you, but also begins to be <span class="trust inc">less fearful</span> of the world around ${him}.`); + slave.devotion += 4; + slave.trust += 2; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`${He} may be blind and hard of hearing, but ${he} knows nobody would dare harm ${him} under your watch, <span class="trust inc">building ${his} trust</span> in you.`); + slave.trust += 2; + } else if (slave.devotion >= -20) { + r.push(`${His} blindness and trouble hearing forces ${him} to <span class="devotion inc">rely</span> on your mercy. However, it only <span class="trust dec">amplifies ${his} fear</span> as ${he} strains to hear anything potential threats to ${him}.`); + slave.devotion += 7; + slave.trust -= 20; + } else { + r.push(`Being blind and hard of hearing forces ${him} to <span class="devotion inc">rely</span> on your mercy. It does nothing to stem <span class="trust dec">the terrible sounds</span> ${he} struggles to hear.`); + slave.devotion += 10; + slave.trust -= 25; + } + } else { + if (slave.devotion > 50) { + r.push(`Even though ${he} is blind, ${he} is devoted enough to you to allow ${himself} to lower ${his} guard. ${He} becomes <span class="trust inc">trusting</span> of your ability to keep ${him} safe.`); + slave.trust += 3; + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s blind and on the cusp of devotion, ${he} becomes slightly <span class="devotion inc">more reliant,</span> but also begins to be <span class="trust inc">less fearful</span> of what ${he} can't see.`); + slave.devotion += 3; + slave.trust += 1; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`${He} may be blind, but ${he} knows nobody would dare harm ${him} under your watch, <span class="trust inc">building ${his} trust</span> in you.`); + slave.trust += 2; + } else if (slave.devotion >= -20) { + r.push(`${His} blindness forces ${him} to <span class="devotion inc">rely</span> on your mercy. However, it only <span class="trust dec">amplifies ${his} fear</span> as ${he} has severely limited capabilities to defend ${himself}.`); + slave.devotion += 5; + slave.trust -= 10; + } else { + r.push(`Being blind forces ${him} to <span class="devotion inc">completely rely</span> on your mercy. It does nothing to stem <span class="trust dec">the terror</span> ${he} faces constantly being unable to tell what will happen to ${him}.`); + slave.devotion += 10; + slave.trust -= 25; + } + } + visionFlag = -2; + } else if (getBestVision(slave) === 1) { + if (!canSeePerfectly(slave)) { + if (slave.devotion > 50) { + r.push(`${His} vision may be clouded but it doesn't get in the way of ${his} devotion to you.`); + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s on the cusp of devotion, ${his} blurred vision makes ${him} <span class="devotion inc">slightly more submissive,</span> since ${he} can't always see what's happening to ${him}.`); + slave.devotion += 1; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`${His} blurred vision <span class="devotion inc">reduces ${his} distaste for ${his} life slightly,</span> since ${his} fuzzy vision allows ${him} to ignore the details of everyone ${he}'s expected to fuck.`); + slave.devotion += 1; + } else { + r.push(`${His} blurred vision tends to make ${him} <span class="trust dec">a little more fearful,</span> since ${he} can never tell what's about to happen to ${him}.`); + slave.trust -= 1; + } + visionFlag = -1; + } + } else if (getBestVision(slave) === 2) { + if (!canSeePerfectly(slave)) { + if (slave.devotion > 50) { + r.push(`${He} tolerates the annoyance of blurred vision induced by ${his} eyewear.`); + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s on the cusp of devotion, the blurred vision induced by ${his} eyewear actually makes ${him} <span class="devotion inc">slightly more submissive.</span>`); + slave.devotion += 1; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`The blurred vision induced by ${his} eyewear actually <span class="devotion inc">reduces ${his} distaste for ${his} life slightly,</span> since ${his} fuzzy vision allows ${him} to ignore the details of everyone ${he}'s expected to fuck.`); + slave.devotion += 1; + } else { + r.push(`The blurred vision induced by ${his} eyewear actually <span class="devotion dec">infuriates ${him}.</span>`); + slave.devotion -= 1; + } + visionFlag = -1; + } + } + if (visionFlag === -1) { + if (slave.hears === -2) { + if (slave.devotion > 50) { + r.push(`Since ${he} is also deaf, ${he} begins to <span class="trust inc">rely</span> on you to give ${him} the feedback ${his} body does cannot.`); + slave.trust += 3; + } else if (slave.devotion > 20) { + r.push(`Since ${he} is also deaf, ${he} becomes <span class="devotion inc">very reliant</span> on you, but also begins to <span class="trust inc">trust</span> you to convey what ${his} body does not.`); + slave.devotion += 3; + slave.trust += 3; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`Since ${he} is also deaf, ${he} views you as ${his} <span class="trust inc">blurry guardian.</span>`); + slave.trust += 5; + } else if (slave.devotion >= -20) { + r.push(`Since ${he} is also deaf, ${he} <span class="trust dec">descends into paranoia</span> as every blurry shape could be out to get ${him}.`); + slave.trust -= 20; + } else { + r.push(`Since ${he} is also deaf, ${he} <span class="trust dec">delves into the depths of paranoia</span> as every blurry shape could be out to get ${him}. ${He} becomes increasingly <span class="devotion dec">hateful</span> to those around ${him} in an effort to ward off threats.`); + slave.trust -= 30; + slave.devotion -= 10; + } + } else if (slave.hears === -1) { + if (slave.earwear !== "hearing aids") { + if (slave.devotion > 50) { + r.push(`${His} hearing may be muddled too, but ${he} doesn't let it bother ${him}.`); + } else if (slave.devotion > 20) { + r.push(`Since ${he} is also hard of hearing, ${he} is forced into <span class="devotion inc">very submissive state,</span> though <span class="trust dec">worrying thoughts</span> begin to plague ${his} mind.`); + slave.devotion += 3; + slave.trust -= 3; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`Since ${he} is also hard of hearing, ${he} has a hard time understanding what partners want from ${him}, often causing them to <span class="trust dec">get forceful</span> with ${him}.`); + slave.trust -= 5; + } else { + r.push(`Since ${he} is also hard of hearing, <span class="trust dec">${he} becomes increasingly paranoid</span> since ${he} can barely discern other's intent any more.`); + slave.trust -= 5; + } + } + } else if (slave.hears === 0) { + if (slave.earwear === "muffling ear plugs") { + if (slave.devotion > 50) { + r.push(`${He} tolerates the annoyance of muffled hearing induced by ${his} ear plugs.`); + } else if (slave.devotion > 20) { + r.push(`Since ${his} hearing is also muffled, ${he} is forced into <span class="devotion inc">very submissive state,</span> though <span class="trust dec">worrying thoughts</span> begin to plague ${his} mind.`); + slave.devotion += 3; + slave.trust -= 3; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`Since ${his} hearing is also muffled, ${he} has a hard time understanding what partners want from ${him}, often causing them to <span class="trust dec">get forceful</span> with ${him}.`); + slave.trust -= 5; + } else { + r.push(`The muffled hearing induced by ${his} ear plugs <span class="devotion dec">infuriates ${him}</span> with ${his} vision problems.`); + slave.devotion -= 5; + } + } + } + } else if (visionFlag !== -2) { + if (slave.hears === -2) { + if (slave.devotion > 50) { + r.push(`Even though ${he} is deaf, ${he} is devoted enough to you to allow ${himself} to lower ${his} guard. ${He} becomes <span class="trust inc">trusting</span> of your ability to watch ${his} back.`); + slave.trust += 1; + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s deaf and on the cusp of devotion, ${he} becomes slightly <span class="devotion inc">more reliant,</span> but also begins to be <span class="trust inc">less fearful</span> of what is lurking out of sight.`); + slave.devotion += 1; + slave.trust += 1; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`${He} may be deaf, but no one can sneak up on ${him} while ${he} is with you, <span class="trust inc">developing the trust</span> that you have ${his} back.`); + slave.trust += 2; + } else if (slave.devotion >= -20) { + r.push(`${His} deafness forces ${him} to <span class="trust dec">distrust everyone</span> as everything out of sight is a potential threat to ${him}.`); + slave.trust -= 10; + } else { + r.push(`Being deaf forces ${him} to <span class="trust dec">fear</span> everything ${he} can't see. At any moment, something could jump on ${his} back and force ${him} into position.`); + slave.trust -= 25; + } + } else if (slave.hears === -1) { + if (slave.earwear !== "hearing aids") { + if (slave.devotion > 50) { + r.push(`${His} hearing may be muddled but it doesn't get in the way of ${his} devotion to you.`); + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s on the cusp of devotion, ${his} muffled hearing makes ${him} <span class="devotion inc">slightly more submissive,</span> since ${he} can't always hear what's going on around ${him}.`); + slave.devotion += 1; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`${His} muffled hearing <span class="devotion dec">reduces ${his} distaste for ${his} life slightly,</span> since ${his} impaired hearing allows ${him} to ignore the disgusting comments from everyone around ${him}.`); + slave.devotion += 1; + } else { + r.push(`${His} muffled hearing tends to make ${him} <span class="devotion dec">a little more fearful,</span> since ${he} can never tell what people are saying about ${him}.`); + slave.trust -= 1; + } + } + } else if (slave.hears === 0) { + if (slave.earwear === "muffling ear plugs") { + if (slave.devotion > 50) { + r.push(`${He} tolerates the annoyance of muffled hearing induced by ${his} ear plugs.`); + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s on the cusp of devotion, the muffled hearing induced by ${his} ear plugs actually makes ${him} <span class="devotion inc">slightly more submissive.</span>`); + slave.devotion += 1; + } else if ([Job.PUBLIC, Job.WHORE, Job.BROTHEL, Job.CLUB].includes(slave.assignment)) { + r.push(`The muffled hearing induced by ${his} ear plugs actually <span class="devotion inc">reduces ${his} distaste for ${his} life slightly,</span> since ${his} impaired hearing allows ${him} to ignore the disgusting comments from everyone around ${him}.`); + slave.devotion += 1; + } else { + r.push(`The muffled hearing induced by ${his} ear plugs <span class="devotion dec">irritates ${him}.</span>`); + slave.devotion -= 1; + } + } + } + } + if (slave.muscles < -95) { + if (slave.devotion > 50) { + r.push(`${He} knows ${he} is near helpless but is devoted enough to you to allow ${himself} to lower ${his} guard. ${He} becomes <span class="trust inc">trusting</span> of your ability to keep ${him} safe.`); + slave.trust += 3; + } else if (slave.devotion > 20) { + r.push(`Since ${he}'s near helpless and on the cusp of devotion, ${he} becomes slightly <span class="devotion inc">more reliant,</span> but also begins to be <span class="trust inc">less fearful</span> of what could happen to ${him}.`); + slave.devotion += 3; + slave.trust += 1; + } else if (["be your Concubine", "please you", "serve in the master suite"].includes(slave.assignment)) { + r.push(`${He} may be physically frail and vulnerable, but ${he} knows nobody would dare harm ${him} under your watch, <span class="trust inc">building ${his} trust</span> in you.`); + slave.trust += 2; + } else if (slave.devotion >= -20) { + r.push(`${His} frailty forces ${him} to <span class="devotion inc">rely</span> on your mercy. However, it only <span class="trust dec">amplifies ${his} fear</span> as ${he} has no chance of defending ${himself}.`); + slave.devotion += 5; + slave.trust -= 10; + } else { + r.push(`Being frail and near helpless forces ${him} to <span class="devotion inc">heavily rely</span> on your mercy. It does nothing to stem <span class="trust dec">the terror</span> ${he} faces constantly knowing that whatever anyone wants to do to ${him}, there is nothing ${he} can do to stop it.`); + slave.devotion += 10; + slave.trust -= 25; + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function languageLearning(slave) { + let minWeeks; + if (slave.rules.speech === "restrictive") { + minWeeks = 30; + } else if (slave.rules.speech === "accent elimination") { + minWeeks = 15; + } else if (slave.rules.speech === "language lessons") { + minWeeks = 10; + } else { + minWeeks = 20; + } + minWeeks -= Math.trunc((slave.intelligence + slave.intelligenceImplant) / 10); + if (slave.voice === 0 || slave.lips > 95) { + // can't speak, but slowly picks up language + minWeeks += 30; + } else if (SlaveStatsChecker.checkForLisp(slave)) { + // moderate speech impediment + minWeeks += 15; + } + if (slave.accent === 4) { + minWeeks += 40; + } + if (slave.accent >= 4) { + if (V.week - slave.weekAcquired > minWeeks - 5) { + slave.accent -= 1; + if (slave.rules.speech === "language lessons") { + slave.rules.speech = "accent elimination"; + } + if (slave.voice === 0 || slave.lips > 95) { + r.push(`${He} has managed to pick up enough ${V.language} that <span class="improvement">${he} could now barely get ${his} point across.</span> If ${he} were able to talk, that is.`); + } else { + r.push(`${He} has managed to pick up enough ${V.language} that <span class="improvement">${he} can now barely get ${his} point across.</span> ${His} accent is horrible, but it's a start.`); + } + } + } else if (slave.accent >= 3) { + if (V.week - slave.weekAcquired > minWeeks) { + slave.accent -= 1; + if (slave.voice === 0 || slave.lips > 95) { + r.push(`${He} has managed to pick up enough ${V.language} that <span class="improvement">${he}'s now able to understand most of what ${he} hears.</span>`); + } else { + r.push(`${He} has managed to pick up enough ${V.language} that <span class="improvement">${he}'s now reasonably fluent in the language.</span> ${His} accent is quite heavy, but ${he} can make ${himself} understood.`); + } + } + } else if (canTalk(slave)) { + if (slave.accent === 2) { + if (V.week - slave.weekAcquired > 5 + minWeeks) { + slave.accent -= 1; + r.push(`${He} has heard and spoken a great deal of ${V.language} as your slave. <span class="improvement">${His} accent has diminished to a pleasant exoticism.</span>`); + } + } else if (slave.accent === 1 && slave.rules.speech === "accent elimination") { + if (V.week - slave.weekAcquired > 10 + minWeeks) { + slave.accent -= 1; + r.push(`${He} does ${his} best to speak proper, unaccented ${V.language}, as encouraged by the rules. <span class="improvement">${His} accent has diminished to imperceptibility.</span>`); + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function prestige(slave) { + r.push(`Merely owning such a prestigious slave <span class="reputation inc">helps your reputation.</span>`); + repX((250 * slave.prestige), "prestigiousSlave", slave); + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function pornEffects(slave) { + if (slave.porn.prestige === 3) { + r.push(`${He} is the whore people envision when they think of ${slave.porn.fameType} porn. ${His} omnipresence on the internet <span class="reputation inc">boosts ${his} owner's reputation.</span>`); + repX((750 * slave.porn.prestige), "porn", slave); + const donations = Math.floor(slave.porn.viewerCount / (random(13, 20))) + (random(-5000, 5000)); + if (donations > 0) { + r.push(`A number of gifts and donations totaling <span class="cash inc">${cashFormat(donations)}</span> were also sent to ${him}, among other things.`); + cashX(donations, "porn", slave); + } + } else if (slave.porn.feed > 0) { + r.push(App.SlaveAssignment.porn(slave)); + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function ageAndExpiration(slave) { + if (V.seeAge !== 0) { + if (slave.birthWeek >= 51) { + r.push(`${His} birthday was this`); + if (V.seeAge === 1) { + r.push(`week; ${he} turned ${slave.physicalAge + 1}.`); + } else { + r.push(`week.`); + } + if (slave.fuckdoll > 0 || slave.fetish === "mindbroken") { + r.push(`${He} did not know.`); + } else if (slave.devotion > 50) { + r.push(`${He} did not notice.`); + } else if (V.week - slave.weekAcquired > 10) { + r.push(`${He} remembered it only dimly.`); + } else { + r.push(`${He} remembered it, but no one cared.`); + } + } + if (retirementReady(slave) && V.retiree === 0) { + V.retiree = slave.ID; + } + } + if (slave.indenture === 0 && V.expiree === 0) { + V.expiree = slave.ID; + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function pregnancyCheck(slave) { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1) { + if (slave.preg > slave.pregData.normalBirth / 13.33 || slave.pregKnown === 1) { + if (slave.pregSource !== -1 && slave.pregSource !== -6) { + r.push(`${slave.slaveName}'s weekly health checkup revealed ${he} is pregnant with an unacceptable child. <span class="elites loss">Its life has been terminated, you have been fined ${cashFormat(100000)}, and your rep among the Elite has been severely damaged.</span>`); + TerminatePregnancy(slave); + slave.counter.abortions++; + V.abortionsTotal++; + cashX(-100000, "fines", slave); + V.failedElite += 150; + if (slave.abortionTat > -1) { + r.push(`But hey, ${he} gets a tattoo signifying ${his} abortion. Was it worth it?`); + slave.abortionTat++; + cashX(forceNeg(V.modCost), "slaveMod", slave); + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function mainLaborTiggers(slave) { + if (slave.pregControl !== "labor suppressors" && slave.assignment !== "labor in the production line") { + if (slave.broodmother < 1) { + if (WombBirthReady(slave, slave.pregData.normalBirth * 1.075) > 0) { + // check for really ready fetuses - 43 weeks - max, overdue + startLabor(slave); + } else if (WombBirthReady(slave, slave.pregData.normalBirth) > 0 && (random(1, 100) > 50)) { + // check for really ready fetuses - 40 weeks - normal + startLabor(slave); + } else if (WombBirthReady(slave, slave.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90)) { + // check for really ready fetuses - 36 weeks minimum + startLabor(slave); + } + } else { + if (WombBirthReady(slave, 37)) { + // broodmothers are always ready at 37 weeks + startLabor(slave); + } + } + } + if (V.dangerousPregnancy === 1 && !isInLabor(slave)) { + let miscarriage = 0; + if ((slave.assignment !== "work in the dairy" || V.dairyRestraintsSetting < 2) && slave.pregAdaptation < 500 && slave.broodmother < 1) { + let miscarriageChance = -10; + miscarriageChance += ((slave.bellyPreg / 1000) - slave.pregAdaptation); + // this could use to not be linear + if (slave.inflation > 0) { + miscarriageChance += 10; + } + miscarriageChance -= (slave.curatives === 1 ? 100 : 0); + if (slave.health.health < -20) { + miscarriageChance -= (slave.health.health); + if (slave.trust < -20) { + miscarriageChance -= (slave.trust / 2); + } + } else if (slave.health.health > 80) { + miscarriageChance -= (slave.health.health / 10); + } + if (slave.weight < -50) { + miscarriageChance -= slave.weight; + } + if (V.masterSuitePregnancySlaveLuxuries === 1 && (slave.assignment === "serve in the master suite" || slave.assignment === "be your Concubine")) { + miscarriageChance -= 300; + } else if (slave.assignment === "rest") { + miscarriageChance -= 100; + } else if (slave.assignment === "rest in the spa") { + miscarriageChance -= 50; + } else if (slave.assignment === "get treatment in the clinic") { + if (S.Nurse) { + miscarriageChance -= 200; + } else { + miscarriageChance -= 150; + } + } + if (slave.bellyAccessory === "a support band") { + miscarriageChance -= 30; + } + if (slave.pregControl === "slow gestation") { + miscarriageChance -= 100; + } else if (slave.pregControl === "labor suppressors") { + miscarriageChance -= 10000; + } else if (slave.pregControl === "speed up") { + if (miscarriageChance > 0) { + miscarriageChance *= 2; + } + } + miscarriageChance = Math.round(miscarriageChance); + if (miscarriageChance > random(0, 100)) { + const chance = random(1, 100); + if (slave.preg >= slave.pregData.normalBirth / 1.33) { + startLabor(slave); + miscarriage = 1; + } else if (slave.preg > slave.pregData.normalBirth / 1.48) { + slave.prematureBirth = 1; + startLabor(slave); + miscarriage = 1; + } else if (slave.preg > slave.pregData.normalBirth / 1.6 && chance > 10) { + slave.prematureBirth = 1; + startLabor(slave); + miscarriage = 1; + } else if (slave.preg > slave.pregData.normalBirth / 1.73 && chance > 40) { + slave.prematureBirth = 1; + startLabor(slave); + miscarriage = 1; + } else if (slave.preg > slave.pregData.normalBirth / 1.81 && chance > 75) { + slave.prematureBirth = 1; + startLabor(slave); + miscarriage = 1; + } else { + r.push(`${His} overwhelmed body has <span class="miscarriage">forced ${him} to miscarry,</span> possibly saving ${his} life.`); + slave.preg = (lastPregRule(slave, V.defaultRules)) ? -1 : 0; + if (slave.fuckdoll === 0 && slave.fetish !== "mindbroken") { + if (slave.sexualFlaw === "breeder") { + r.push(`${He} is <span class="devotion dec">filled with violent, all-consuming hatred</span> at ${himself} for failing to carry to term and you for allowing this to happen.`); + if (slave.pregType > 4) { + r.push(`The loss of so many children at once <span class="mindbreak">shatters the distraught breeder's mind.</span>`); + slave.fetish = "mindbroken"; + slave.behavioralQuirk = "none"; + slave.behavioralFlaw = "none"; + slave.sexualQuirk = "none"; + slave.sexualFlaw = "none"; + slave.devotion = 0; + slave.trust = 0; + } else { + r.push(`${He} cares little for what punishment awaits ${his} actions.`); + slave.devotion -= 25 * slave.pregType; + } + } else if (slave.devotion < -50) { + r.push(`${He} is <span class="devotion dec">filled with violent, consuming hatred</span> and <span class="trust dec">fear.</span> Even though ${he} knew ${his}`); + if (slave.pregType > 1) { + r.push(`babies were`); + } else { + r.push(`baby was`); + } + r.push(`likely destined for a slave orphanage, it seems ${he} cared for`); + if (slave.pregType > 1) { + r.push(`them`); + } else { + r.push(`it`); + } + r.push(`and blames you for the loss.`); + slave.devotion -= 25; + slave.trust -= 25; + } else if (slave.devotion < -20) { + r.push(`${He} is <span class="devotion dec">afflicted by desperate, inconsolable grief</span> and <span class="trust dec">horror.</span> Even though ${he} knew ${his}`); + if (slave.pregType > 1) { + r.push(`babies were`); + } else { + r.push(`baby was`); + } + r.push(`likely destined for a slave orphanage, it seems ${he} cared for`); + if (slave.pregType > 1) { + r.push(`them.`); + } else { + r.push(`it.`); + } + slave.devotion -= 10; + slave.trust -= 20; + } else if (slave.fetish === "pregnancy") { + r.push(`${He} is <span class="devotion dec">filled with deep regret</span> and <span class="trust dec">fear.</span>`); + if (slave.fetishKnown === 1) { + r.push(`To a pregnancy fetishist, ending it like this hurts far worse than birth ever would.`); + } else { + r.push(`It appears ${he} was more attached to ${his} baby bump than ${he} let on and is hurting even more for it.`); + } + const fetishModifier = slave.fetishStrength / 2; + slave.devotion -= 1 * fetishModifier; + slave.trust -= 1 * fetishModifier; + } else if (slave.devotion <= 20) { + r.push(`${He} is <span class="devotion dec">consumed by enduring sorrow</span> and <span class="trust dec">horror.</span> Even though ${he} knew ${his}`); + if (slave.pregType > 1) { + r.push(`babies were`); + } else { + r.push(`baby was`); + } + r.push(`likely destined for a slave orphanage, it seems ${he} cared for`); + if (slave.pregType > 1) { + r.push(`them.`); + } else { + r.push(`it.`); + } + slave.devotion -= 5; + slave.trust -= 5; + } else if (slave.devotion <= 50) { + r.push(`${He} is dully obedient. ${He} has been broken to slave life so thoroughly that even this is neither surprising nor affecting.`); + } else { + r.push(`${He} is <span class="devotion dec">disappointed by this development</span> and <span class="trust dec">afraid</span> of your reaction. By failing to carry to term, ${he} has failed your will.`); + slave.devotion -= 10; + slave.trust -= 10; + } + } + TerminatePregnancy(slave); + slave.counter.abortions++; + V.abortionsTotal++; + if (slave.abortionTat > -1) { + slave.abortionTat++; + r.push(`The temporary tattoo of a child has been replaced with ${his} ${ordinalSuffix(slave.abortionTat)} crossed out infant.`); + cashX(forceNeg(V.modCost), "slaveMod", slave); + } + miscarriage = 1; + } + } + } + if (V.seeExtreme === 1) { + if (miscarriage !== 1 && slave.bellyPreg >= 100000 && slave.geneMods.rapidCellGrowth !== 1) { + // If she can't relieve the pressure that way, will she hold? + if (slave.bellyPreg >= 500000 || slave.wombImplant !== "restraint") { + if ((slave.belly > (slave.pregAdaptation * 3200)) || slave.bellyPreg >= 500000) { + let burstChance = -80; + burstChance += ((slave.belly / 1000) - slave.pregAdaptation); + // this could use to not be linear + if (slave.health.health < -20) { + burstChance -= (slave.health.health); + } else if (slave.health.health > 80) { + burstChance -= (slave.health.health / 10); + } + if (slave.weight < 0) { + burstChance -= slave.weight; + } + burstChance -= slave.bellySag; + burstChance -= slave.muscles; + if (slave.bellyAccessory === "a support band") { + burstChance -= 10; + } + if (slave.pregControl === "slow down") { + burstChance -= 20; + } + if (slave.assignment === "get treatment in the clinic") { + if (S.Nurse) { + burstChance -= 100; + } else { + burstChance -= 30; + } + } else if (slave.assignment === "work in the dairy" && V.dairyPregSetting === 3) { + burstChance -= 250; + } + if (slave.pregControl === "speed up") { + if (burstChance > 0) { + burstChance *= 4; + } + } + burstChance = Math.round(burstChance); + if (burstChance > random(0, 100)) { + burst(slave); + } else { + r.push(`Constant <span class="health dec">`); + if (slave.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`painful orgasms`); + } else { + r.push(`sharp pains`); + } + r.push(`</span> from ${his} womb strongly suggest <span class="health dec">${his} body is beginning to break.</span>`); + } + } + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function slaveDeath(slave) { + let deathSeed; + if (burstCheck(slave)) { + V.burstee = 1; + } else { + if (slave.health.health <= -90 && slave.assignment !== "get treatment in the clinic") { + deathSeed = (slave.health.health - slave.physicalAge - (slave.chem * 2) - (slave.addict * 2)); + if (slave.weight < -50 || slave.weight > 95) { + deathSeed -= 100; + } + if (slave.weight > 190) { + deathSeed -= 100; + } + if (slave.aphrodisiacs > 0) { + deathSeed -= (75 * slave.aphrodisiacs); + } + if (slave.inflationType === "aphrodisiac") { + deathSeed -= (100 * slave.inflation); + } + if (slave.curatives === 1) { + deathSeed += 200; + } + if (random(1, 1000) > (400 + deathSeed)) { + planDeath(slave, "health"); + } + if ((slave.aphrodisiacs > 0 || slave.inflationType === "aphrodisiac") && random(1, 1000) > (200 + deathSeed)) { + planDeath(slave, "OD"); + } + } + if (V.seeAge === 1) { + deathSeed = ((slave.health.health * 2) - (slave.physicalAge * 2) - (slave.chem * 4) - (slave.addict * 3)); + if (slave.physicalAge >= Math.max((70 + (slave.health.health / 5) - (slave.addict) - (slave.chem / 20)), 50) && random(1, 1000) > 800 + deathSeed) { + planDeath(slave, "old"); + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * + */ + function hairGrowth(slave) { + if (slave.hLength < 150) { + slave.hLength += 1; + } + } + + /** + * @param {App.Entity.SlaveState} slave + * @param {number} oldEnergy + */ + function anaphrodisiacEffects(slave, oldEnergy) { + const maxEnergyGain = Math.round((75 - oldEnergy) / 9.3); + if (slave.aphrodisiacs === -1 && slave.energy - oldEnergy > maxEnergyGain) { + r.push(`Anaphrodisiacs <span class="stat drop">limit ${his} sex drive.</span>`); + slave.energy = oldEnergy + maxEnergyGain; + } + } +})(); diff --git a/src/endWeek/standardSlaveReport.js b/src/endWeek/standardSlaveReport.js index c0f20ebfc4280f8bda6f61a917df87aa9a70919b..c8aafd7521ee5ced8743d2d9610105781ae9cd43 100644 --- a/src/endWeek/standardSlaveReport.js +++ b/src/endWeek/standardSlaveReport.js @@ -13,7 +13,7 @@ App.SlaveAssignment.standardSlaveReport = function(slave, silent=false) { const rules = App.UI.DOM.renderPassage("SA rules"), diet = App.SlaveAssignment.diet(slave), - ltEffects = App.UI.DOM.renderPassage("SA long term effects"), + ltEffects = App.SlaveAssignment.longTermEffects(slave), drugs = App.SlaveAssignment.drugs(slave), relationships = App.SlaveAssignment.relationships(slave), rivalries = App.SlaveAssignment.rivalries(slave), diff --git a/src/gui/Encyclopedia/encyclopedia.tw b/src/gui/Encyclopedia/encyclopedia.tw index f225e971671d70ce6891e0de3a1daa83d62b88c9..8f8f74f2341f4a534c9a7c6468cc564ec8edc473 100644 --- a/src/gui/Encyclopedia/encyclopedia.tw +++ b/src/gui/Encyclopedia/encyclopedia.tw @@ -2271,11 +2271,11 @@ LORE: FREE CITIES CULTURE TOMORROW //By the Powers invested in me by the Board of Directors and the Rightful Executive Lord of Arcology F-8, His Majesty King William the First, I proclaim you a Knight, and grant you the right to two slaves, a monthly stipend of six hundred credits and one unit of stock in the Arcology, and the authority to bear a noble Coat of Arms... <br> — Count Felix II von Feight, Knighthood Ceremony recorded in 2032 - <br><br>Once thought to have been a relic of an ancient, less enlightened time, the simultaneously decentralized and individual-focused corporate power structures of the Free Cities has led to the return of feudal power structures. For many arcologies, this has simply occured without attention or fanfare, as increasingly serf-like underclasses accept the domination of ever-more-powerful executives and elites; some arcologies, such as F-8, have manifested entire, complex new social systems involving 'Kings' and 'Emperors' from which all corporate authority flows. + <br><br>Once thought to have been a relic of an ancient, less enlightened time, the simultaneously decentralized and individual-focused corporate power structures of the Free Cities has led to the return of feudal power structures. For many arcologies, this has simply occurred without attention or fanfare, as increasingly serf-like underclasses accept the domination of ever-more-powerful executives and elites; some arcologies, such as F-8, have manifested entire, complex new social systems involving 'Kings' and 'Emperors' from which all corporate authority flows. <br><br>Originally the idea of an individual crowning himself absolute 'Emperor' of a free city seemed absurd, or even totalitarian, and the first Free City petty kings were met with mockery. This mocking tone appears to have quickly faded from popular Free Cities culture, however, likely due to the realization that new 'Imperial' power structures came with a host of benefits to the wealthy and elite of the arcology that adopts them. - <br><br>More than simply being rich, the elites of Neo-Feudal, or Neo-Imperial arcologies dub themselves 'Barons' and 'Counts', putting themselves not only monetarily but also socially above the common masses and giving those who hold seats on boards of directors or invest stock in the arcology a physical advantage over their benighted underlings. To the common citizen, the result is ultimately the same, as a factory worker remains a peasant whether he's known as a serf or a citizen. But to the wealthy and distinct within the arcology, the new Feudalism creates a long list of titles and acomplishments to jockey for, manifesting a strange new culture in which junior executives compete with one another for the attention of outright 'Kings' in the hope of one day acquiring the limitless prestige felt by the select caste of neo-Imperial nobility. + <br><br>More than simply being rich, the elites of Neo-Feudal, or Neo-Imperial arcologies dub themselves 'Barons' and 'Counts', putting themselves not only monetarily but also socially above the common masses and giving those who hold seats on boards of directors or invest stock in the arcology a physical advantage over their benighted underlings. To the common citizen, the result is ultimately the same, as a factory worker remains a peasant whether he's known as a serf or a citizen. But to the wealthy and distinct within the arcology, the new Feudalism creates a long list of titles and accomplishments to jockey for, manifesting a strange new culture in which junior executives compete with one another for the attention of outright 'Kings' in the hope of one day acquiring the limitless prestige felt by the select caste of neo-Imperial nobility. <br><br> — Lawrence, J. K., and Bolingbroke, D. S., __Trends in Free Cities Culture, 2031__ //Journal of Modern Social Sciences, International Edition, February 2032//// @@ -2734,7 +2734,7 @@ LORE: INTERVIEWS <br>(Gestures to a guard.) <br>(From Guard) You are speaking with His Highness King William, First of His name, Savior of the Arcology, Executive Lord and Master of the Board of Directors, Majority Shareholder and Anarcho-Monarch of the most noble Arcology of Feight. - <br><br>//Yes, yes, right, quite a magnificient title. Might I ask how it came to be that a Monarch took control of a Free City? Isn't strong authority antithetical to the free cities ideal?// + <br><br>//Yes, yes, right, quite a magnificent title. Might I ask how it came to be that a Monarch took control of a Free City? Isn't strong authority antithetical to the free cities ideal?// <br>[laughs] Not a monarch, an anarcho-monarch. I did not earn my titles through bullying or force, and certainly not through inheriting it from some decrepit geriatric moron like in the old world. I am the legitimate majority stakeholder of the arcology and the rightful head of its board of directors. My rule is strong because I am strong. Were I to become weak, my position would be ousted and the people would take my place directly. <br><br>//Is that what the 'anarcho' means?// diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css index 883e74c299e04efbd94324f03675aa3786ba28d3..ef081dc3f8d3afa249f9f4b931ca3df74a8597e3 100644 --- a/src/gui/css/mainStyleSheet.css +++ b/src/gui/css/mainStyleSheet.css @@ -153,7 +153,7 @@ img.paperdoll { .gold, .gold a, .trust.dec, .trust.dec a, .trust.frightened, .trust.frightened a { color: gold } .goldenrod, .goldenrod a, .trust.terrified, .trust.terrified a { color: goldenrod } .gray, .gray a { color: gray } -.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a, .positive, .positive a, .health.inc, .health.inc a { color: green } +.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a, .fuckdoll, .fuckdoll a, .positive, .positive a, .health.inc, .health.inc a { color: green } .hotpink, .hotpink a, .devotion.inc, .devotion.inc a, .devotion.accept, .devotion.accept a { color: hotpink } .lawngreen, .lawngreen a { color: lawngreen } .lightblue, .lightblue a { color: lightblue } @@ -161,13 +161,13 @@ img.paperdoll { .lightgreen, .lightgreen a, .relationship, .relationship a, .rivalry.dec, .rivalry.dec a { color: lightgreen } .lightpink, .lightpink a { color: lightpink } .lightsalmon, .lightsalmon a, .fetish.inc, .fetish.inc a, .rivalry.inc, .rivalry.inc a, .relationship.dec, .relationship.dec a { color: lightsalmon } -.lime, .lime a, .change.positive, .change.positive a, .virginity.loss, .virginity.loss a, .pregnant, .pregnant a { color: lime } /* tight orifices, breast changes, take virginity, not sure on good aliases */ +.lime, .lime a, .change.positive, .change.positive a, .virginity.loss, .virginity.loss a, .puberty, .puberty a, .pregnant, .pregnant a { color: lime } /* tight orifices, breast changes, take virginity, not sure on good aliases */ .limegreen, .limegreen a { color: limegreen } /* multiple questionable uses */ .magenta, .magenta a, .devotion.worship, .devotion.worship a { color: magenta } .mediumaquamarine, .mediumaquamarine a, .trust.inc, .trust.inc a, .trust.careful, .trust.careful a { color: mediumaquamarine } .mediumorchid, .mediumorchid a, .devotion.dec, .devotion.dec a, .devotion.resistant, .devotion.resistant a { color: mediumorchid } .mediumseagreen, .mediumseagreen a, .trust.trusting, .trust.trusting a { color: mediumseagreen } -.orange, .orange a, .stupid, .stupid a, .change.negative, .change.negative a, .defiant.careful, .defiant.careful a, .ncs, .ncs a, .intro.question { color: orange } /* generally between red and green, and a lot of other places */ +.orange, .orange a, .stupid, .stupid a, .change.negative, .change.negative a, .defiant.careful, .defiant.careful a, .ncs, .ncs a, .miscarriage, .miscarriage a, .intro.question { color: orange } /* generally between red and green, and a lot of other places */ .orangered, .orangered a, .defiant.inc, .defiant.inc a, .defiant.bold, .defiant.bold, .education.neg a { color: orangered } .orchid, .orchid a { color: orchid } /* used once (wrong? */ .pink, .pink a, .slave.name.simple { color: pink } /* also fetish start ??? , and a lot of other stuff */ diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 8ee9357e592b123db32a38d0b2f1187a8ff65387..e2759cdca59933ff8ad150de085f90cb9f9512de 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -104,11 +104,11 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @returns {Map} + * @returns {{ruleIds: string[], rule: FC.RA.RuleSetters}}} */ function ProcessSlaveRules(slave) { // merge all rules applying on a slave into one big rule - /** @type {App.RA.Rule[]} */ + /** @type {FC.RA.Rule[]} */ const rules = V.defaultRules.filter((x) => ruleAppliesP(x.condition, slave)); const ruleIds = [], assignments = []; for (const rule of rules) { @@ -120,8 +120,8 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule - * @returns {App.RA.RuleSetters} + * @param {FC.RA.RuleSetters} rule + * @returns {FC.RA.RuleSetters} */ function ProcessAssignments(slave, rule) { // Before merging rules, we process assignments for each rule separately so we can remove slaves from facilities when they no longer qualify, even if the final "winning" rule assigns them elsewhere @@ -164,7 +164,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function AssignJobToSlave(slave, rule) { // place slave on assignment defined by the rule @@ -178,7 +178,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessClothing(slave, rule) { // apply clothes to slave @@ -199,7 +199,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessCollar(slave, rule) { // apply collar to slave @@ -227,7 +227,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessMask(slave, rule) { // apply faceAccessory to slave @@ -246,7 +246,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessGag(slave, rule) { // apply mouthAccessory to slave @@ -270,7 +270,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessEyewear(slave, rule) { // apply glasses, contacts to slave @@ -364,7 +364,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessEarwear(slave, rule) { // apply earplugs to slave @@ -427,7 +427,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessDildos(slave, rule) { // apply vaginal dildos to slave @@ -443,7 +443,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessVVirginDildos(slave, rule) { // apply vaginal dildos to vaginal virgins @@ -504,7 +504,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAVirginDildos(slave, rule) { // apply vaginal dildos to anal virgins @@ -565,7 +565,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessNonVirginDildos(slave, rule) { // apply vaginal dildos to non-virgins @@ -625,7 +625,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessVaginalAttachments(slave, rule) { // apply vaginal accessories to slaves @@ -665,7 +665,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessDickAccessories(slave, rule) { // apply dick accessories to slave @@ -698,7 +698,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessChastity(slave, rule) { // apply chastity to slave @@ -740,7 +740,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessShoes(slave, rule) { // apply shoes to slave @@ -756,7 +756,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessBellyAccessories(slave, rule) { // apply belly accessories to slave @@ -779,7 +779,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessArmAccessory(slave, rule) { if (rule.armAccessory !== undefined && rule.armAccessory !== null && hasAnyArms(slave) && slave.armAccessory !== rule.armAccessory) { @@ -790,7 +790,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessLegAccessory(slave, rule) { if (rule.legAccessory !== undefined && rule.legAccessory !== null && hasAnyLegs(slave) && slave.legAccessory !== rule.legAccessory) { @@ -801,7 +801,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAnalAccessories(slave, rule) { // apply buttplugs and buttplug accessories to slave @@ -817,7 +817,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAnalVirginButtplugs(slave, rule) { // apply buttplugs to virgins @@ -878,7 +878,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessNonVirginButtplugs(slave, rule) { // apply buttplugs to non-virgins @@ -939,7 +939,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessButtplugAttachments(slave, rule) { // apply buttplug accessories to slaves @@ -965,7 +965,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessBellyImplant(slave, rule) { // Here is belly implant size control, it's used in Surgery Degradation passage to setup devotion and trust changes. @@ -1047,7 +1047,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessContraceptives(slave, rule) { if ((rule.preg !== undefined) && (rule.preg !== null)) { @@ -1063,7 +1063,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAbortions(slave, rule) { function conditionalTermination(slave, predicate) { @@ -1163,7 +1163,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAssetGrowthDrugs(slave, rule) { if ((slave.drugs === "super fertility drugs" || slave.drugs === "fertility drugs") && isFertile(slave)) { @@ -1253,7 +1253,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave * @param {string} asset - * @param {App.RA.NumericTarget} target + * @param {FC.RA.NumericTarget} target * @param {Array} priorities * @param {number} step */ @@ -1314,7 +1314,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessOtherDrugs(slave, rule) { // Other Drugs @@ -1500,7 +1500,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessEnema(slave, rule) { if ((rule.inflationType !== undefined) && (rule.inflationType !== null)) { @@ -1536,7 +1536,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPit(slave, rule) { @@ -1560,7 +1560,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessDiet(slave, rule) { // Diet Setting @@ -1700,7 +1700,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessCuratives(slave, rule) { if ((rule.curatives !== undefined) && (rule.curatives !== null)) { @@ -1725,7 +1725,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessAphrodisiacs(slave, rule) { if ((rule.aphrodisiacs !== undefined) && (rule.aphrodisiacs !== null)) { @@ -1738,7 +1738,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPenisHormones(slave, rule) { if (slave.dick > 0) { @@ -1780,7 +1780,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessFemaleHormones(slave, rule) { if ((slave.vagina > -1) && (slave.dick === 0) && (rule.XX !== undefined) && (rule.XX !== null)) { @@ -1799,7 +1799,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPregnancyDrugs(slave, rule) { if (slave.pregKnown === 1 && rule.pregSpeed !== null && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset") && slave.indentureRestrictions < 1 && slave.broodmother === 0) { @@ -1832,7 +1832,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessLivingStandard(slave, rule) { if ((rule.livingRules !== undefined) && (rule.livingRules !== null)) { @@ -1865,7 +1865,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessRest(slave, rule) { if ((rule.restRules !== undefined) && (rule.restRules !== null)) { @@ -1878,7 +1878,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessSpeech(slave, rule) { if ((rule.speechRules !== undefined) && (rule.speechRules !== null) && (slave.rules.speech !== rule.speechRules)) { @@ -1912,7 +1912,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessRelationship(slave, rule) { if ((slave.fetish !== "mindbroken")) { @@ -1927,7 +1927,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessRelease(slave, rule) { if ((rule.releaseRules !== undefined) && (rule.releaseRules !== null)) { @@ -1954,7 +1954,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessLactation(slave, rule) { if ((rule.lactationRules !== undefined) && (rule.lactationRules !== null)) { @@ -1969,7 +1969,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessMobility(slave, rule) { if ((rule.mobilityRules !== undefined) && (rule.mobilityRules !== null)) { @@ -1982,7 +1982,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPunishment(slave, rule) { if ((rule.standardPunishment !== undefined) && (rule.standardPunishment !== null)) { @@ -1995,7 +1995,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessReward(slave, rule) { if ((rule.standardReward !== undefined) && (rule.standardReward !== null)) { @@ -2008,7 +2008,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessToyHole(slave, rule) { if ((rule.toyHole !== undefined) && (rule.toyHole !== null)) { @@ -2045,7 +2045,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessDietCum(slave, rule) { if ((rule.dietCum !== undefined) && (rule.dietCum !== null)) { @@ -2065,7 +2065,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessDietMilk(slave, rule) { if ((rule.dietMilk !== undefined) && (rule.dietMilk !== null)) { @@ -2085,7 +2085,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessSolidFood(slave, rule) { if ((rule.onDiet !== undefined) && (rule.onDiet !== null)) { @@ -2102,7 +2102,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessTeeth(slave, rule) { if ((rule.teeth !== undefined) && (rule.teeth !== null)) { @@ -2147,7 +2147,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessStyle(slave, rule) { if ( @@ -2412,7 +2412,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPiercings(slave, rule) { if (rule.nipplesPiercing !== undefined && (rule.nipplesPiercing !== null)) { @@ -2606,7 +2606,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessSmartPiercings(slave, rule) { if (slave.clitPiercing === 3) { @@ -2676,7 +2676,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessTattoos(slave, rule) { if (rule.boobsTat !== undefined && (rule.boobsTat !== null)) { @@ -2956,7 +2956,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessPornFeedEnabled(slave, rule) { if (rule.pornFeed === undefined || rule.pornFeed == null) { @@ -2987,7 +2987,7 @@ globalThis.DefaultRules = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters} rule + * @param {FC.RA.RuleSetters} rule */ function ProcessLabel(slave, rule) { // mass removal of old tags, variant from '*' mask. diff --git a/src/js/pronouns.js b/src/js/pronouns.js index 9b111984f2bddf31db77d8a5b57079699391397a..b90c0540243c28783cafda92140ad249d07b95ab 100644 --- a/src/js/pronouns.js +++ b/src/js/pronouns.js @@ -3,7 +3,7 @@ App.Utils.Pronouns = class { * @param {{pronoun: number}} obj */ constructor(obj) { - /** @type {App.Data.Pronouns.Definition} */ + /** @type {FC.Data.Pronouns.Definition} */ this._pronouns = obj.pronoun < App.Data.Pronouns.Kind.custom ? App.Data.Pronouns.Std[obj.pronoun] : V.customPronouns[obj.pronoun]; diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js index 04ffbf3cd6bd089b2d8d35f75cf218219a708a59..ac88e556abc75bad494e0b43472b54ab9d12cac1 100644 --- a/src/js/rulesAssistant.js +++ b/src/js/rulesAssistant.js @@ -30,7 +30,7 @@ globalThis.hasHColorRule = function(slave, rules) { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.Rule[]} rules + * @param {FC.RA.Rule[]} rules * @returns {boolean} * */ globalThis.hasHStyleRule = function(slave, rules) { @@ -39,7 +39,7 @@ globalThis.hasHStyleRule = function(slave, rules) { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.Rule[]} rules + * @param {FC.RA.Rule[]} rules * @returns {boolean} * */ globalThis.hasEyeColorRule = function(slave, rules) { @@ -49,7 +49,7 @@ globalThis.hasEyeColorRule = function(slave, rules) { /** * return if a rule is applied on a slave * @param {App.Entity.SlaveState} slave - * @param {App.RA.Rule[]} rules + * @param {FC.RA.Rule[]} rules * @returns {boolean} */ globalThis.lastPregRule = function(slave, rules) { @@ -58,8 +58,8 @@ globalThis.lastPregRule = function(slave, rules) { }; /** - * @param {App.RA.RuleSetters[]} rules - * @returns {App.RA.RuleSetters} + * @param {FC.RA.RuleSetters[]} rules + * @returns {FC.RA.RuleSetters} */ globalThis.mergeRules = function(rules) { if (rules.length === 0) { @@ -77,7 +77,7 @@ globalThis.mergeRules = function(rules) { /** * return if a rule is applied on a slave * @param {App.Entity.SlaveState} slave - * @param {App.RA.Rule} rule + * @param {FC.RA.Rule} rule * @returns {boolean} */ globalThis.ruleApplied = function(slave, rule) { @@ -102,7 +102,7 @@ globalThis.RAFacilityRemove = function(slave, rule) { /** * return whether the rule applies to the slave - * @param {App.RA.RuleConditions} cond + * @param {FC.RA.RuleConditions} cond * @param {App.Entity.SlaveState} slave * @returns {boolean} flag */ globalThis.ruleAppliesP = function(cond, slave) { @@ -158,7 +158,7 @@ App.RA.newRule = function() { surgery: emptySurgery }; - /** @returns {App.RA.Rule} */ + /** @returns {FC.RA.Rule} */ function emptyRule() { const id = generateNewID(); return { @@ -170,7 +170,7 @@ App.RA.newRule = function() { }; } - /** @returns {App.RA.RuleConditions} */ + /** @returns {FC.RA.RuleConditions} */ function emptyConditions() { return { function: false, @@ -180,7 +180,7 @@ App.RA.newRule = function() { excludedSlaves: [], }; } - /** @returns {App.RA.RuleSetters} */ + /** @returns {FC.RA.RuleSetters} */ function emptySetters() { return { releaseRules: emptyRelease(), @@ -307,7 +307,7 @@ App.RA.newRule = function() { }; } - /** @returns {App.RA.RuleReleaseSetters} */ + /** @returns {FC.RA.RuleReleaseSetters} */ function emptyRelease() { return { masturbation: null, @@ -318,7 +318,7 @@ App.RA.newRule = function() { }; } - /** @returns {App.RA.RuleGrowthSetters} */ + /** @returns {FC.RA.RuleGrowthSetters} */ function emptyGrowth() { return { boobs: null, @@ -330,7 +330,7 @@ App.RA.newRule = function() { }; } - /** @returns {App.RA.RuleSurgerySettings} */ + /** @returns {FC.RA.RuleSurgerySettings} */ function emptySurgery() { return { eyes: null, @@ -362,7 +362,7 @@ App.RA.newRule = function() { }(); /** - * @returns {App.RA.Rule} + * @returns {FC.RA.Rule} */ globalThis.emptyDefaultRule = App.RA.newRule.rule; @@ -451,7 +451,7 @@ globalThis.RASummaryCell = function() { } table.push(r); } - /** @type {App.RA.Rule[]} */ + /** @type {FC.RA.Rule[]} */ const rules = V.defaultRules; let r = ""; @@ -487,7 +487,7 @@ globalThis.RASummaryCell = function() { * Creates RA target object used in rules for body properties * @param {string} condition comparison condition. One of '==', '>=', '<=', '>', '<' * @param {number} val target value - * @returns {App.RA.NumericTarget} + * @returns {FC.RA.NumericTarget} */ App.RA.makeTarget = function(condition, val) { return { @@ -500,7 +500,7 @@ App.RA.makeTarget = function(condition, val) { * Creates RA range object used in rules * @param {number} minValue * @param {number} maxValue - * @returns {App.RA.NumericRange} + * @returns {FC.RA.NumericRange} */ App.RA.makeRange = function(minValue, maxValue) { return { @@ -511,7 +511,7 @@ App.RA.makeRange = function(minValue, maxValue) { /** * Shall the current value be increased according to the target and condition * @param {number} current - * @param {App.RA.NumericTarget} target + * @param {FC.RA.NumericTarget} target * @param {number} [step=1] change step * @returns {boolean} */ @@ -524,7 +524,7 @@ App.RA.shallGrow = function(current, target, step = 1) { /** * Shall the current value be decreased according to the target and condition * @param {number} current - * @param {App.RA.NumericTarget} target + * @param {FC.RA.NumericTarget} target * @param {number} [step=1] * @returns {boolean} */ diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 11e444efbbbe66a7ec614bd9fa37a4e6704157a4..0791f92114b7d5694049c0aa6c0117fa67ac2375 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -9,7 +9,7 @@ globalThis.rulesAssistantOptions = (function() { "use strict"; const noDefaultSetting = {value: "!NDS!", text: "no default setting"}; - /** @type {App.RA.Rule} */ + /** @type {FC.RA.Rule} */ let current_rule, root; function rulesAssistantOptions(element) { @@ -1437,7 +1437,7 @@ globalThis.rulesAssistantOptions = (function() { class AssignmentInclusionBase extends ButtonList { /** * @param {string} label - * @param {App.Data.JobDesc[]} [jobs] + * @param {FC.Data.JobDesc[]} [jobs] * @param {App.Entity.Facilities.SingleJobFacility[]} [facilities] */ constructor(label, jobs, facilities) { @@ -3900,7 +3900,7 @@ globalThis.rulesAssistantOptions = (function() { const items = []; const penthouseDesc = App.Data.Facilities.penthouse; for (const jn in penthouseDesc.jobs) { - /** @type {App.Data.JobDesc} */ + /** @type {FC.Data.JobDesc} */ const jd = penthouseDesc.jobs[jn]; items.push([jd.position, jd.assignment]); } diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js index 8c6f7aed7cc0b8b09cc1f924d1b47756ff66005d..e0fec261a34273bd7e4a73f111ed5e704560eef6 100644 --- a/src/js/rulesAutosurgery.js +++ b/src/js/rulesAutosurgery.js @@ -24,8 +24,8 @@ globalThis.rulesAutosurgery = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSetters[]} ruleset - * @returns {App.RA.RuleSurgerySettings} + * @param {FC.RA.RuleSetters[]} ruleset + * @returns {FC.RA.RuleSurgerySettings} */ function autoSurgerySelector(slave, ruleset) { const surgery = App.RA.newRule.surgery(); @@ -41,7 +41,7 @@ globalThis.rulesAutosurgery = (function() { /** * @param {App.Entity.SlaveState} slave - * @returns {App.RA.RuleSurgerySettings} + * @returns {FC.RA.RuleSurgerySettings} */ function ProcessHGTastes(slave) { let thisSurgery = App.RA.newRule.surgery(); @@ -136,7 +136,7 @@ globalThis.rulesAutosurgery = (function() { /** * @param {App.Entity.SlaveState} slave - * @param {App.RA.RuleSurgerySettings} thisSurgery + * @param {FC.RA.RuleSurgerySettings} thisSurgery * @param {string[]} surgeries */ function CommitSurgery(slave, thisSurgery, surgeries) { diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js index 8d744cf14d28a6e835499ea109d640d9c64f5214..5f1786187abec513f89be88e8f77dab382db702f 100644 --- a/src/js/slaveSummaryHelpers.js +++ b/src/js/slaveSummaryHelpers.js @@ -196,7 +196,7 @@ App.UI.SlaveSummaryImpl = function() { function syncFSData(arcology) { arcology = arcology || V.arcologies[0]; for (const fsp of App.Data.misc.FutureSocieties) { - /** @type {FC.FSPolicy} */ + /** @type {FC.FSPolicyValue} */ const policy = arcology[fsp]; const p = fsp.slice(2); FSData.policy[p] = { @@ -288,7 +288,7 @@ App.UI.SlaveSummaryImpl = function() { /** * @param {App.Entity.SlaveState} slave - * @param {FC.SlaveSummary.SmartPiercing} spData + * @param {FC.Data.SlaveSummary.SmartPiercing} spData * @returns {string} */ function smartFetishStr(slave, spData) { @@ -318,7 +318,7 @@ App.UI.SlaveSummaryImpl = function() { /** * @param {App.Entity.SlaveState} slave - * @param {FC.SlaveSummary.SmartPiercing} spData + * @param {FC.Data.SlaveSummary.SmartPiercing} spData * @returns {string} */ function smartAttractionStr(slave, spData) { diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js index 76b9f1099bf1dc481720bba87a6b305dcc23e512..43f0377a278ae7f84f27211b5bbfb4466d30cd12 100644 --- a/src/js/utilsDOM.js +++ b/src/js/utilsDOM.js @@ -121,12 +121,12 @@ App.UI.DOM.disabledLink = function(link, reasons) { /** - * @param {string} tag - valid HTML tag + * @template {keyof HTMLElementTagNameMap} K + * @param {K} tag - valid HTML tag * @param {string|Node} [content] * @param {string|Array<string>} [classNames] - * @returns {HTMLElement} + * @returns {HTMLElementTagNameMap[K]} */ -// @ts-ignore App.UI.DOM.makeElement = function(tag, content, classNames) { const element = document.createElement(tag); if (classNames !== undefined) { @@ -143,15 +143,14 @@ App.UI.DOM.makeElement = function(tag, content, classNames) { }; /** - * @param {string} tag - valid HTML tag + * @template {keyof HTMLElementTagNameMap} K + * @param {K} tag - valid HTML tag * @param {ParentNode} parent * @param {string|Node} [content] * @param {string|Array<string>} [classNames] - * @returns {HTMLElement} + * @returns {HTMLElementTagNameMap[K]} */ -// @ts-ignore App.UI.DOM.appendNewElement = function(tag, parent, content, classNames) { - // @ts-ignore const element = App.UI.DOM.makeElement(tag, content, classNames); parent.append(element); return element; diff --git a/src/uncategorized/arcadeReport.tw b/src/uncategorized/arcadeReport.tw index 1e749e8c1620b109e9bf0364e8e5ecf07a906183..9115f68a97467d252b5d82dcdfec9032f34cabe4 100644 --- a/src/uncategorized/arcadeReport.tw +++ b/src/uncategorized/arcadeReport.tw @@ -140,7 +140,7 @@ <br> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -149,7 +149,7 @@ <<silently>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>> diff --git a/src/uncategorized/brothelReport.tw b/src/uncategorized/brothelReport.tw index 73f506b673afc52aa7b00d0b085b8810afcb92e4..f38bcd56b4a58460e368b028a74658ae8137ee2d 100644 --- a/src/uncategorized/brothelReport.tw +++ b/src/uncategorized/brothelReport.tw @@ -198,7 +198,7 @@ <<run tired(_S.Madam)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_S.Madam)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_S.Madam)>> <<= App.SlaveAssignment.drugs(_S.Madam)>> <<= App.SlaveAssignment.relationships(_S.Madam)>> <<= App.SlaveAssignment.rivalries(_S.Madam)>> @@ -208,8 +208,8 @@ <<run App.SlaveAssignment.choosesOwnClothes(_S.Madam)>> <<run tired(_S.Madam)>> <<include "SA rules">> - <<= App.SlaveAssignment.diet(_S.Madam)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.diet(_S.Madam)>> + <<run App.SlaveAssignment.longTermEffects(_S.Madam)>> <<run App.SlaveAssignment.drugs(_S.Madam)>> <<run App.SlaveAssignment.relationships(_S.Madam)>> <<run App.SlaveAssignment.rivalries(_S.Madam)>> @@ -289,7 +289,7 @@ <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -301,7 +301,7 @@ <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>> diff --git a/src/uncategorized/cellblockReport.tw b/src/uncategorized/cellblockReport.tw index 6427ebeaad42c463055ea3cf041b65157f601488..fb2f6af05f8fb3ba3dbe26dead54308c65f28840 100644 --- a/src/uncategorized/cellblockReport.tw +++ b/src/uncategorized/cellblockReport.tw @@ -142,7 +142,7 @@ <<run tired($slaves[$i])>> <<include "SA rules">> <<= App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> <<= App.SlaveAssignment.drugs($slaves[$i])>> <<= App.SlaveAssignment.relationships($slaves[$i])>> <<= App.SlaveAssignment.rivalries($slaves[$i])>> @@ -153,7 +153,7 @@ <<run tired($slaves[$i])>> <<include "SA rules">> <<run App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> <<run App.SlaveAssignment.drugs($slaves[$i])>> <<run App.SlaveAssignment.relationships($slaves[$i])>> <<run App.SlaveAssignment.rivalries($slaves[$i])>> @@ -264,7 +264,7 @@ <br> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -275,7 +275,7 @@ <<run App.SlaveAssignment.stayConfined(_slave)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>> diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw index be8d7bf0b2b600483c04cd6ce05d29daf61cce05..e9d427d33e362bedd62d1b7507d34f0b02320a58 100644 --- a/src/uncategorized/clubReport.tw +++ b/src/uncategorized/clubReport.tw @@ -122,7 +122,7 @@ <<run tired(_S.DJ)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_S.DJ)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_S.DJ)>> <<= App.SlaveAssignment.drugs(_S.DJ)>> <<= App.SlaveAssignment.relationships(_S.DJ)>> <<= App.SlaveAssignment.rivalries(_S.DJ)>> @@ -133,7 +133,7 @@ <<run tired(_S.DJ)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_S.DJ)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_S.DJ)>> <<run App.SlaveAssignment.drugs(_S.DJ)>> <<run App.SlaveAssignment.relationships(_S.DJ)>> <<run App.SlaveAssignment.rivalries(_S.DJ)>> @@ -199,7 +199,7 @@ <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -211,7 +211,7 @@ <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>> diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw index df83f2d93c4a31fbebbc2f42da5ed66e497a53a6..429b93a5c22b31e46ec0e9a43924ddcb14a2a68e 100644 --- a/src/uncategorized/dairyReport.tw +++ b/src/uncategorized/dairyReport.tw @@ -312,7 +312,7 @@ <<run tired(_S.Milkmaid)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_S.Milkmaid)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_S.Milkmaid)>> <<= App.SlaveAssignment.drugs(_S.Milkmaid)>> <<= App.SlaveAssignment.relationships(_S.Milkmaid)>> <<= App.SlaveAssignment.rivalries(_S.Milkmaid)>> @@ -323,7 +323,7 @@ <<run tired(_S.Milkmaid)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_S.Milkmaid)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_S.Milkmaid)>> <<run App.SlaveAssignment.drugs(_S.Milkmaid)>> <<run App.SlaveAssignment.relationships(_S.Milkmaid)>> <<run App.SlaveAssignment.rivalries(_S.Milkmaid)>> @@ -420,7 +420,7 @@ <br> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -431,7 +431,7 @@ <<set _milkResults = App.SlaveAssignment.getMilked(_slave)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>> diff --git a/src/uncategorized/fullReport.tw b/src/uncategorized/fullReport.tw index a3112a04485bf99639235fa2d1c82043c63d982c..b840e0372b1b9ce87864ac6ce1dbe038807d60fb 100644 --- a/src/uncategorized/fullReport.tw +++ b/src/uncategorized/fullReport.tw @@ -65,7 +65,7 @@ <<include "SA rules">> <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> <<run App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> <<run App.SlaveAssignment.drugs($slaves[$i])>> <<run App.SlaveAssignment.relationships($slaves[$i])>> <<run App.SlaveAssignment.rivalries($slaves[$i])>> @@ -74,7 +74,7 @@ <<include "SA rules">> <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> <<= App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> <<= App.SlaveAssignment.drugs($slaves[$i])>> <<= App.SlaveAssignment.relationships($slaves[$i])>> <<= App.SlaveAssignment.rivalries($slaves[$i])>> diff --git a/src/uncategorized/saLiveWithHG.tw b/src/uncategorized/saLiveWithHG.tw index 2fea1c094f16a74e1ba92983df15e94e1cc30ed6..04a2edfdd14f9a43dfd3870613a884b179839726 100644 --- a/src/uncategorized/saLiveWithHG.tw +++ b/src/uncategorized/saLiveWithHG.tw @@ -1036,7 +1036,7 @@ /*<<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>>*/ <<include "SA rules">> <<run App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> <<run App.SlaveAssignment.drugs($slaves[$i])>> <<run App.SlaveAssignment.relationships($slaves[$i])>> <<run App.SlaveAssignment.rivalries($slaves[$i])>> @@ -1046,7 +1046,7 @@ /*<<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>>*/ <<include "SA rules">> <<= App.SlaveAssignment.diet($slaves[$i])>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> <<= App.SlaveAssignment.drugs($slaves[$i])>> <<= App.SlaveAssignment.relationships($slaves[$i])>> <<= App.SlaveAssignment.rivalries($slaves[$i])>> diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw deleted file mode 100644 index f0c4a9e3aeceb3bb4e606377227c6752f86f53e0..0000000000000000000000000000000000000000 --- a/src/uncategorized/saLongTermEffects.tw +++ /dev/null @@ -1,2139 +0,0 @@ -:: SA long term effects [nobr] - -<<set _actualBreastSize = $slaves[$i].boobs-$slaves[$i].boobsImplant-$slaves[$i].boobsMilk>> -<<set _fetishChangeChance = fetishChangeChance($slaves[$i])>> -<<set _bellyAccessory = $slaves[$i].bellyAccessory>> -<<if _bellyAccessory == "a support band">> - <<set _bellyBand = 2>> -<<else>> - <<set _bellyBand = 1>> -<</if>> -<<if $slaves[$i].aphrodisiacs === -1>><<set _oldEnergy = $slaves[$i].energy, _maxEnergyGain = Math.round((75 - _oldEnergy)/9.3)>><</if>> -<<set _rearQuirk = $slaves[$i].geneticQuirks.rearLipedema == 2 ? 2 : 0>> -<<set _gigantomastiaMod = $slaves[$i].geneticQuirks.gigantomastia == 2 ? ($slaves[$i].geneticQuirks.macromastia == 2 ? 3 : 2) : 1>> -<<set _uterineHypersensitivityMod = $slaves[$i].geneticQuirks.uterineHypersensitivity == 2 ? 2 : 1>> -<<set _Stud = slaveStateById($StudID)>> /% may be null %/ - -<<if $slaves[$i].fuckdoll > 0>> - <<if $slaves[$i].fuckdoll >= 100>> - $He is perfectly adapted to life in a Fuckdoll suit. - <<else>> - <<if $slaves[$i].fuckdoll <= 5>> - This is $his first week as a living sex toy. $He is @@.mediumorchid;utterly terrified@@ by the prospect of spending the rest of $his life like this. $He is @@.green;forced to adapt@@ to life as a Fuckdoll. $He must remain still, and do $his best to cooperate with anyone who guides $him by touch. When $he obeys commands relayed by $his suit, $he is rewarded with orgasms; when $he does not, $he is punished with pain. - <<set $slaves[$i].trust -= 10>> - <<if $slaves[$i].skill.entertainment > 50>> - $He @@.red;begins to forget $his entertainment skills@@ under the terrible stress of total confinement. - <<set $slaves[$i].skill.entertainment = 50>> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 15>> - This is $his second week as a living sex toy. $His suit continues $his training as a living sex toy, @@.green;forcing $him to accept any treatment@@ $he is subjected to. Though the suit is capable of resisting unacceptable movement to a degree, and it includes integral shackles to secure the toy in any position desired, the Fuckdoll is now severely punished if $he attempts any resistance at all. - <<if $slaves[$i].skill.whoring > 50>> - $He @@.red;loses $his refined courtesanship,@@ since all $he has to remember now is how to be used. - <<set $slaves[$i].skill.whoring = 50>> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 25>> - This week $he @@.green;learns the most basic commands@@ $his suit can pass, those for simple postures. <<if isAmputee($slaves[$i])>>These are very simple, since $he lacks limbs.<<else>>One command directs $him to remain standing, but cock $his hips to offer $his rear hole. Another requires $him to get instantly down <<if hasAllLimbs($slaves[$i])>>on all fours<<else>>to the floor<</if>> and arch $his back, offering both $his face hole and <<if $slaves[$i].vagina > -1>>lower holes<<else>>rear hole<</if>>.<</if>> - <<if $slaves[$i].behavioralQuirk != "none">> - With no stimulation other than use, $he @@.red;quickly forgets what used to make $his behavior special.@@ - <<set $slaves[$i].behavioralQuirk = "none">> - <</if>> - <<if $slaves[$i].career != "a Fuckdoll">> - $His procedural memory has largely been overwritten by tonal commands; @@.yellow;$his only meaningful career experience is now the profession of a living sex toy.@@ - <<set $slaves[$i].career = "a Fuckdoll">> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 35>> - This week $he @@.green;learns more advanced posture commands.@@ <<if !hasAnyLegs($slaves[$i])>>These remain quite simple, since $he lacks <<if isAmputee($slaves[$i])>>limbs<<else>>legs<</if>>.<<else>>$He practices balance in the heels integral to the suit, and learns to stand and bend at the waist, all the way down, while keeping $his legs straight, putting $his face hole and $his <<if $slaves[$i].vagina > -1>>lower holes<<else>>rear hole<</if>> at convenient waist height.<</if>> - <<if $slaves[$i].sexualQuirk != "none">> - $His sex life now consists of things that enter $his holes. $He learns to desire any use at all, since nothing else interrupts the infinite boredom. $He @@.red;quickly forgets what used to make $his sexual tendencies distinctive.@@ - <<set $slaves[$i].sexualQuirk = "none">> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 45>> - This week $he @@.green;learns basic sexual commands@@ from $his suit. Usually, if something is inserted into $his <<if $slaves[$i].vagina > -1>>holes<<else>>lower hole<</if>>, $he is to relax. If a specific command is given, $he is taught to rhythmically tighten <<if $slaves[$i].vagina > -1>>$his holes<<else>>the hole<</if>>, massaging whatever's inside. - <<if $slaves[$i].skill.vaginal > 25>> - Being trained in this uncomplicated act @@.red;quickly teaches $him to ignore $his vaginal talents.@@ - <<set $slaves[$i].skill.vaginal = 25>> - <</if>> - <<if $slaves[$i].skill.anal > 25>> - $He's forced to use $his sphincter as hard as $he can, and $he @@.red;quickly forgets all anal refinement.@@ - <<set $slaves[$i].skill.anal = 25>> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 55>> - This week $he @@.green;learns more basic sexual commands@@ from $his suit. Usually, if something is inserted into $his throat, $he is to relax and accept a facefucking. If a specific command is given, $he is taught to suck as powerfully as $he can, on pain of punishment. - <<if $slaves[$i].skill.oral > 25>> - Being trained to suck so hard @@.red;quickly erases $his finer oral habits.@@ - <<set $slaves[$i].skill.oral = 25>> - <</if>> - <<if $slaves[$i].behavioralFlaw != "none">> - $He has now been obeying $his suit out of a desire to avoid punishment for so long that @@.green;$he loses any propensity to misbehave in distinctive ways.@@ - <<set $slaves[$i].behavioralFlaw = "none">> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 65>> - This week $he @@.green;receives training for finer arousal control@@ from $his suit. $He can now be warmed up before use, to make $him as desperate as possible; or $he can be warmed up and left to suffer. - <<if $slaves[$i].fetishStrength > 50>> - $He's now so desperate for any stimulation that $he @@.coral;begins to forget what once aroused $him.@@ $He now wants whatever $he can get. - <<set $slaves[$i].fetishStrength = 50>> - <</if>> - <<if $slaves[$i].sexualFlaw != "none">> - $He's trained to perform thorough mechanical obedience, @@.green;utterly destroying $his sexual deficiencies.@@ - <<set $slaves[$i].sexualFlaw = "none">> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 75>> - This week $he @@.green;begins to learn more advanced commands@@ from $his suit. $He is taught a command that instructs $him to take a more active role in penetrative sex. When that command is given, $he must fuck $himself against any <<if $PC.dick != 0>>cocks<<else>>phalli<</if>> that are currently inside $him, as hard as $he possibly can. - <<if $slaves[$i].fetish != "none" && $slaves[$i].fetish != "mindbroken">> - $He @@.coral;no longer retains any sexual preferences@@ at all. $He just wants to be penetrated. - <<set $slaves[$i].fetish = "none", $slaves[$i].fetishStrength = 0>> - <</if>> - <<if $slaves[$i].intelligence+$slaves[$i].intelligenceImplant > 50>> - $He was once highly intelligent, but total concentration of all $his mental abilities on simple tonal commands @@.red;dulls $his intelligence.@@ - <<set $slaves[$i].intelligence -= 30>> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 85>> - This week $he @@.green;learns some more advanced commands@@ from $his suit. <<if isAmputee($slaves[$i])>>If $his limbless torso is placed atop a dick and a command is given, $he is to do $his best to bounce on it.<<else>>$He learns a special command, on which $he is to slowly squat down, impaling $himself on any phallus beneath $him. Once $his hole is filled, $he is to bounce up and down, using $his hole to milk the phallus.<</if>> - <<if $slaves[$i].skill.entertainment > 15>> - There is @@.red;no entertainment and no elegance@@ for $him anymore. $He cannot even hear the lewd noises $his holes make. - <<set $slaves[$i].skill.entertainment = 15>> - <</if>> - <<if $slaves[$i].skill.whoring > 15>> - $He @@.red;cannot remember prostitution@@ at all. $He can barely remember anything but being fucked. - <<set $slaves[$i].skill.whoring = 15>> - <</if>> - <<if $slaves[$i].intelligence+$slaves[$i].intelligenceImplant > 15>> - $His @@.red;mind steadily degrades@@ under the stress of this treatment. - <<set $slaves[$i].intelligence -= 40>> - <</if>> - <<if $slaves[$i].intelligenceImplant != 0>> - An education holds no bearing for $his new skillset, so it @@.red;wastes away.@@ - <<set $slaves[$i].intelligenceImplant = 0>> - <</if>> - <<elseif $slaves[$i].fuckdoll <= 95>> - This week $he @@.green;begins $his final adaptation@@ into a perfect living sex toy. $His suit starts to actively punish any detectable mental activity when $him is not obeying commands or being used. - <<if $slaves[$i].intelligence > -50>> - $He was once reasonably intelligent, but the incredible stress of this treatment @@.red;suppresses $his ability to think coherently.@@ - <<set $slaves[$i].intelligence = -50>> - <</if>> - <</if>> - <<set $slaves[$i].fuckdoll = Math.clamp($slaves[$i].fuckdoll+10,0,100)>> - <</if>> -<</if>> - -<<if assignmentVisible($slaves[$i]) && ($slaves[$i].assignment !== "live with your Head Girl" || $HGSuiteSurgery === 0)>> /* OPENS AUTOSURGERY, CLOTHES, AND ACCESSORIES */ - <<if hasSurgeryRule($slaves[$i], $defaultRules) && $slaves[$i].useRulesAssistant == 1 && $slaves[$i].indentureRestrictions < 2 && $cash > 0>> - <<= rulesAutosurgery($slaves[$i])>> - <</if>> -<</if>> - -/* CLOTHES AND ACCESSORIES */ -<<= App.SlaveAssignment.clothes($slaves[$i])>> - -/* MENTAL EFFECTS */ -<<= App.SlaveAssignment.longTermMentalEffects($slaves[$i])>> - -/* PIERCING EFFECTS */ - -<<if ($slaves[$i].vaginaPiercing > 1)>> - <<if ($slaves[$i].vagina > -1) && ($slaves[$i].labia < 2) && (random(1,100) > 90)>> - The weight of $his labial piercings @@.lime;stretches out $his pussylips a bit.@@ - <<set $slaves[$i].labia += 1>> - <</if>> -<</if>> -<<if ($slaves[$i].nipplesPiercing == 1)>> - <<if ($slaves[$i].nipples == "tiny")>> - <<if (random(1,100) > 95)>> - $His piercings keep $his nipples half-hard all the time, and @@.lime;$his nipples have stretched out a bit.@@ - <<set $slaves[$i].nipples = "cute">> - <</if>> - <<elseif ($slaves[$i].nipples == "partially inverted")>> - <<if (random(1,100) > 70)>> - $His piercings keep $his nipples half-hard all the time, which @@.lime;permanently protrudes them.@@ - <<if (random(1,2) == 1)>> - It turns out they're pretty cute. - <<set $slaves[$i].nipples = "cute">> - <<else>> - It turns out they're nice and puffy. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - This is @@.hotpink;a long and uncomfortable experience, which $he gets off on.@@ - <<set $slaves[$i].devotion += 1>> - <<else>> - This is @@.mediumorchid;a long and uncomfortable experience.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <<else>> - Having $his nipples held protruded by $his piercings is uncomfortable, which $he - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - @@.hotpink;gets off on.@@ - <<set $slaves[$i].devotion += 1>> - <<else>> - @@.mediumorchid;hates.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <</if>> - <<elseif ($slaves[$i].nipples == "inverted")>> - <<if (random(1,100) > 90)>> - $His piercings keep $his nipples half-hard all the time, which eventually @@.lime;permanently protrudes them.@@ - <<if (random(1,2) == 1)>> - It turns out they're absolutely massive. - <<set $slaves[$i].nipples = "huge">> - <<else>> - It turns out they're nice and puffy. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - This is @@.hotpink;a long and very uncomfortable experience, which $he gets off on.@@ - <<set $slaves[$i].devotion += 3>> - <<else>> - This is @@.mediumorchid;a long and very uncomfortable experience.@@ - <<set $slaves[$i].devotion -= 3>> - <</if>> - <<else>> - Having $his nipples held protruded by $his piercings is very uncomfortable, which $he - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - @@.hotpink;gets off on.@@ - <<set $slaves[$i].devotion += 1>> - <<else>> - @@.mediumorchid;hates.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <</if>> - <</if>> -<<elseif ($slaves[$i].nipplesPiercing == 2)>> - <<if ($slaves[$i].nipples == "tiny")>> - <<if (random(1,100) > 80)>> - $He's got so much metal in $his nipples that the weight @@.lime;stretches and lengthens them.@@ - <<set $slaves[$i].nipples = "cute">> - <</if>> - <<elseif ($slaves[$i].nipples == "partially inverted")>> - <<if (random(1,100) > 50)>> - $He's got so much metal in $his nipples that the weight @@.lime;permanently protrudes them.@@ - <<if (random(1,2) == 1)>> - It turns out they're pretty cute. - <<set $slaves[$i].nipples = "cute">> - <<else>> - It turns out they're nice and puffy. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - This is @@.hotpink;a long and uncomfortable experience, which $he gets off on.@@ - <<set $slaves[$i].devotion += 2>> - <<else>> - This is @@.mediumorchid;a long and uncomfortable experience.@@ - <<set $slaves[$i].devotion -= 2>> - <</if>> - <<else>> - Having $his nipples held protruded by $his piercings is uncomfortable, which $his - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - @@.hotpink;gets off on.@@ - <<set $slaves[$i].devotion += 1>> - <<else>> - @@.mediumorchid;hates.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <</if>> - <<elseif ($slaves[$i].nipples == "inverted")>> - <<if (random(1,100) > 70)>> - $He's got so much metal in $his nipples that the weight @@.lime;permanently protrudes them.@@ - <<if (random(1,2) == 1)>> - It turns out they're absolutely massive. - <<set $slaves[$i].nipples = "huge">> - <<else>> - It turns out they're nice and puffy. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - This is @@.hotpink;a long and extremely uncomfortable experience, which $he gets off on.@@ - <<set $slaves[$i].devotion += 4>> - <<else>> - This is @@.mediumorchid;a long and extremely uncomfortable experience.@@ - <<set $slaves[$i].devotion -= 4>> - <</if>> - <<else>> - Having $his nipples held protruded by $his piercings is extremely uncomfortable, which $he - <<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>> - @@.hotpink;gets off on.@@ - <<set $slaves[$i].devotion += 2>> - <<else>> - @@.mediumorchid;hates.@@ - <<set $slaves[$i].devotion -= 2>> - <</if>> - <</if>> - <</if>> -<</if>> - -/* HEAVY LACTATION EFFECTS */ - -<<if ($slaves[$i].nipples != "huge") && ($slaves[$i].nipples != "fuckable")>> - <<if ($slaves[$i].lactation >= 2)>> - <<if ($slaves[$i].nipples == "tiny")>> - <<if (random(1,100) > 70)>> - Having $his heavy milk production forced through $his tiny nipples @@.lime;stretches and engorges them.@@ - <<set $slaves[$i].nipples = "cute">> - <</if>> - <<elseif ($slaves[$i].nipples == "cute") || ($slaves[$i].nipples == "inverted")>> - <<if (random(1,100) > 80)>> - $He's lactating so heavily that $his permanently swollen nipples gradually become accustomed to the constant flow of milk. They @@.lime;become puffy@@ and engorged. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<elseif ($slaves[$i].nipples == "partially inverted") || ($slaves[$i].nipples == "inverted")>> - <<if (random(1,100) > 80)>> - $He's lactating so heavily that $his swollen nipples almost never retreat into their inverted state. Lactation has @@.lime;permanently protruded them,@@ leaving them engorged and puffy. - <<set $slaves[$i].nipples = "puffy">> - <</if>> - <<else>> - <<if (random(1,100) > 90)>> - Lactation has @@.lime;swollen $his nipples@@ to an absurd size, making $his status as a cow obvious even when $his chest faucets aren't gushing cream. - <<set $slaves[$i].nipples = "huge">> - <</if>> - <</if>> - <</if>> -<</if>> - -/* IMPLANT EFFECTS ON UNDERLYING FLESH */ - -<<if ($slaves[$i].boobsImplantType == "string")>> - $His string implants absorb fluid @@.lime;slowly swelling $his breasts.@@ - <<set $slaves[$i].boobsImplant += 50, $slaves[$i].boobs += 50>> - <<set _effect = random(1,10)>> - <<if ($slaves[$i].boobs > 50000)>> - Since they are as large as $his body can handle, some serum is drained from them. - <<set $slaves[$i].boobs -= 100, $slaves[$i].boobsImplant -= 100>> - <<elseif ($slaves[$i].boobsImplant > 25000) && (_effect >= 2)>> - As they grow they @@.red;greatly irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 20)>> - <<elseif ($slaves[$i].boobsImplant > 15000) && (_effect >= 3)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].boobsImplant > 10000) && (_effect >= 4)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].boobsImplant > 8000) && (_effect >= 5)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].boobsImplant > 6000) && (_effect >= 6)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].boobsImplant > 4500) && (_effect >= 7)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].boobsImplant > 3000) && (_effect >= 8)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 7)>> - <<elseif ($slaves[$i].boobsImplant > 2000) && (_effect >= 9)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 5)>> - <<elseif ($slaves[$i].boobsImplant > 1000) && (_effect > 9)>> - As they grow they @@.red;irritate@@ the tissue of $his breasts. - <<run healthDamage($slaves[$i], 3)>> - <</if>> -<</if>> - -<<if ($slaves[$i].boobsImplant >= $slaves[$i].boobs+$slaves[$i].boobsMilk) && ($slaves[$i].boobsImplant > 0)>> - /* catch in case breast implants get larger than boobs */ - $His breast tissue has naturally @@.lime;stretched and grown@@ to accommodate $his implants better. - <<set $slaves[$i].boobs = $slaves[$i].boobsImplant+$slaves[$i].boobsMilk+10>> -<<elseif ($slaves[$i].boobsImplant > 1000)>> - <<if ($slaves[$i].boobs-$slaves[$i].boobsImplant < 1000)>> - <<if (random(1,100) > 60)>> - $His breast tissue has naturally @@.lime;stretched and grown@@ to accommodate $his massive implants a bit better. - <<set $slaves[$i].boobs += 50>> - <</if>> - <</if>> -<<elseif ($slaves[$i].boobsImplant > 600)>> - <<if ($slaves[$i].boobs-$slaves[$i].boobsImplant < 500)>> - <<if (random(1,100) > 60)>> - $His breast tissue has naturally @@.lime;stretched and grown@@ to accommodate $his large implants a bit better. - <<set $slaves[$i].boobs += 50>> - <</if>> - <</if>> -<<elseif ($slaves[$i].boobsImplant > 0)>> - <<if ($slaves[$i].boobs-$slaves[$i].boobsImplant < 300)>> - <<if (random(1,100) > 60)>> - $His breast tissue has naturally @@.lime;stretched and grown@@ to accommodate $his implants a bit better. - <<set $slaves[$i].boobs += 50>> - <</if>> - <</if>> -<</if>> - -<<if ($slaves[$i].buttImplantType == "string")>> - $His string implants absorb fluid @@.lime;slowly swelling $his ass.@@ - <<set $slaves[$i].buttImplant += .25, $slaves[$i].butt += .25>> - <<if ($slaves[$i].butt+$slaves[$i].buttImplant > 10 && $slaves[$i].buttImplant > 1)>> - Since it as large as $his body can handle, some serum is drained from them. - <<set $slaves[$i].butt -= 1, $slaves[$i].buttImplant -= 1>> - <</if>> - <<set _effect = random(1,8)>> - <<if ($slaves[$i].buttImplant > 7) && (_effect >= 2)>> - As they grow they @@.red;greatly irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 20)>> - <<elseif ($slaves[$i].buttImplant > 6) && (_effect >= 2)>> - As they grow they @@.red;greatly irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 20)>> - <<elseif ($slaves[$i].buttImplant > 5) && (_effect >= 3)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].buttImplant > 4) && (_effect >= 4)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].buttImplant > 3) && (_effect >= 5)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].buttImplant > 2) && (_effect >= 6)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].buttImplant > 1) && (_effect >= 7)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <<elseif ($slaves[$i].buttImplant > 0) && (_effect > 7)>> - As they grow they @@.red;irritate@@ the tissue of $his cheeks. - <<run healthDamage($slaves[$i], 10)>> - <</if>> -<</if>> - -<<if $slaves[$i].diet == "muscle building">> - <<if ($slaves[$i].muscles > 30)>> - <<if ($slaves[$i].face-$slaves[$i].faceImplant > 10) && (random(1,100) > 90) && $slaves[$i].drugs == "steroids">> - All the hormones in $his system from $his heavy, steroid enhanced workouts @@.orange;harden $his face a little.@@ - <<set $slaves[$i].face -= 5>> - <</if>> - <<if (($slaves[$i].boobs - $slaves[$i].boobsImplant) > 250)>> - <<if (random(1,100) > 95)>> - All the hormones in $his system from $his heavy workouts @@.orange;shrink $his breasts slightly.@@ - <<set $slaves[$i].boobs -= 50>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $slaves[$i].aphrodisiacs > random(0,2)>> - <<set _Effects = []>> - <<if $aphrodisiacUpgradeRefine != 1>> - <<if ($slaves[$i].dick > 1)>> - <<set _Effects.push("DickShrink")>> - <</if>> - <<if ($slaves[$i].balls > 1)>> - <<set _Effects.push("BallsShrink")>> - <</if>> - <<if ($slaves[$i].clit > 0)>> - <<set _Effects.push("ClitSmaller")>> - <</if>> - <<if ($slaves[$i].voice < 3) && ($slaves[$i].voice > 0)>> - <<set _Effects.push("VoiceHigher")>> - <</if>> - <<if ($slaves[$i].vagina > -1) && ($slaves[$i].ovaries != 0) && ($slaves[$i].vaginaLube < 2)>> - <<set _Effects.push("VaginaWetter")>> - <</if>> - <<set _rearQuirkDivider = _rearQuirk == 0 ? 1 : _rearQuirk>> - <<if (($slaves[$i].butt-$slaves[$i].buttImplant) < 2+_rearQuirk) && (($slaves[$i].geneMods.NCS == 0) || (random(1,100) > 75/_rearQuirkDivider))>> - <<set _Effects.push("ButtBigger")>> - <</if>> - <<if (($slaves[$i].boobs-$slaves[$i].boobsImplant) < 500*_gigantomastiaMod) && (($slaves[$i].geneMods.NCS == 0) || (random(1,100) > 75/_gigantomastiaMod))>> - <<set _Effects.push("BoobsBigger")>> - <</if>> - <<if $slaves[$i].face-$slaves[$i].faceImplant <= 10>> - <<set _Effects.push("FaceSofter")>> - <</if>> - <<if ($slaves[$i].faceShape == "masculine")>> - <<set _Effects.push("FaceSofterAndrogynous")>> - <<elseif ($slaves[$i].faceShape == "androgynous" && $slaves[$i].geneticQuirks.androgyny != 2)>> - <<set _Effects.push("FaceNormal")>> - <</if>> - <</if>> - <<if ($slaves[$i].devotion <= 20)>> - <<set _Effects.push("Devoted")>> - <</if>> - <<if ($slaves[$i].trust <= 20)>> - <<set _Effects.push("Trusting")>> - <</if>> - <<if ($slaves[$i].attrXY < 95)>> - <<set _Effects.push("MaleAttracted")>> - <</if>> - <<if ($slaves[$i].attrXY < 95)>> - <<set _Effects.push("FemaleAttracted")>> - <</if>> - <<if (_Effects.length > 0)>> - <<set _Effects = _Effects.random()>> - <<switch _Effects>> - <<case "DickShrink">> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].dick > 2) && (random(1,100) > 25))>> - Dependence on the hormone-based aphrodisiacs combined with $his @@.orange;NCS@@ makes @@.orange;$his dick shrink down to be more childlike.@@ - <<set $slaves[$i].dick -= 1>> - <<else>> - Dependence on the hormone-based aphrodisiacs makes @@.orange;$his dick atrophy.@@ - <</if>> - <<set $slaves[$i].dick -= 1>> - <<case "BallsShrink">> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].balls > 2) && (random(1,100) > 25))>> - Dependence on the hormone-based aphrodisiacs combined with $his @@.orange;NCS@@ makes @@.orange;$his balls shrink down to be more childlike.@@ - <<set $slaves[$i].balls -= 1>> - <<else>> - Dependence on the hormone-based aphrodisiacs makes @@.orange;$his testicles atrophy.@@ - <</if>> - <<set $slaves[$i].balls -= 1>> - <<case "VoiceHigher">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;$his voice higher and more feminine.@@ - <<set $slaves[$i].voice += 1>> - <<case "VaginaWetter">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;$his vagina produce more copious natural lubricant.@@ - <<set $slaves[$i].vaginaLube += 1>> - <<case "ButtBigger">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;the natural size of $his butt increase.@@ - <<set $slaves[$i].butt += 1>> - <<case "BoobsBigger">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;the natural size of $his tits increase.@@ - <<set $slaves[$i].boobs += 100>> - <<case "FaceSofter">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;$his facial structure soften and become sexier.@@ - <<= faceIncrease($slaves[$i], 10)>> - <<case "FaceSofterAndrogynous">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;$his face soften into androgyny.@@ - <<set $slaves[$i].faceShape = "androgynous">> - <<case "FaceNormal">> - Dependence on the hormone-based aphrodisiacs makes @@.lime;$his face soften into femininity.@@ - <<set $slaves[$i].faceShape = "normal">> - <<case "ClitSmaller">> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].clit > 1) && (random(1,100) > 50))>> - Dependence on the hormone-based aphrodisiacs combined with $his @@.orange;NCS@@ makes @@.orange;$his clit shrink down to be more childlike.@@ - <<set $slaves[$i].clit -= 1>> - <<else>> - Dependence on the hormone-based aphrodisiacs makes @@.orange;$his clit shrink significantly.@@ - <</if>> - <<set $slaves[$i].clit -= 1>> - <<case "Devoted">> - Hormonal effects make $him a bit more @@.hotpink;docile.@@ - <<set $slaves[$i].devotion += 1>> - <<case "Trusting">> - Hormonal effects make $him a bit more @@.mediumaquamarine;trusting.@@ - <<set $slaves[$i].trust += 1>> - <<case "MaleAttracted">> - Dependence on the hormone-based aphrodisiacs makes $him become @@.green;more attracted to men.@@ - <<set $slaves[$i].attrXY += 3>> - <<case "FemaleAttracted">> - Dependence on the hormone-based aphrodisiacs makes $him become @@.green;more attracted to women.@@ - <<set $slaves[$i].attrXX += 3>> - <<default>> - ERROR: bad aphro addict effect: _Effects - <</switch>> - <</if>> -<</if>> - -/* HORMONE EFFECTS + PUBERTY EFFECTS + GROWTH */ - -<<if $slaves[$i].diet == "XX">> - <<set $slaves[$i].hormoneBalance += 4>> -<<elseif $slaves[$i].diet == "XXY">> - <<if $slaves[$i].hormoneBalance > 0>> - <<set $slaves[$i].hormoneBalance -= 8>> - <<elseif $slaves[$i].hormoneBalance < 0>> - <<set $slaves[$i].hormoneBalance += 8>> - <</if>> -<<elseif $slaves[$i].diet == "XY">> - <<set $slaves[$i].hormoneBalance -= 4>> -<</if>> -<<if ($slaves[$i].drugs == "fertility drugs")>> - <<set $slaves[$i].hormoneBalance += 4>> -<<elseif ($slaves[$i].drugs == "female hormone injections")>> - <<set $slaves[$i].hormoneBalance += 20>> -<<elseif ($slaves[$i].drugs == "male hormone injections")>> - <<set $slaves[$i].hormoneBalance -= 20>> -<<elseif ($slaves[$i].drugs == "testicle enhancement")>> - <<set $slaves[$i].hormoneBalance -= 4>> -<<elseif ($slaves[$i].drugs == "steroids")>> - <<set $slaves[$i].hormoneBalance -= 4>> -<<elseif ($slaves[$i].drugs == "super fertility drugs")>> - <<set $slaves[$i].hormoneBalance += 8>> -<<elseif ($slaves[$i].drugs == "hyper testicle enhancement")>> - <<set $slaves[$i].hormoneBalance -= 12>> -<</if>> -<<if ($slaves[$i].hormones == 1)>> - <<set $slaves[$i].hormoneBalance += 4>> -<<elseif ($slaves[$i].hormones == 2)>> - <<set $slaves[$i].hormoneBalance += 12>> -<<elseif ($slaves[$i].hormones == -1)>> - <<set $slaves[$i].hormoneBalance -= 4>> -<<elseif ($slaves[$i].hormones == -2)>> - <<set $slaves[$i].hormoneBalance -= 12>> -<</if>> -<<if $hormoneUpgradePower == 1>> - <<if ($slaves[$i].hormones == 1)>> - <<set $slaves[$i].hormoneBalance += 2>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set $slaves[$i].hormoneBalance += 6>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set $slaves[$i].hormoneBalance -= 2>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set $slaves[$i].hormoneBalance -= 6>> - <</if>> -<</if>> -<<if $slaves[$i].drugs == "hormone enhancers">> - <<if ($slaves[$i].hormones == 1)>> - <<set $slaves[$i].hormoneBalance += 4>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set $slaves[$i].hormoneBalance += 12>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set $slaves[$i].hormoneBalance -= 4>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set $slaves[$i].hormoneBalance -= 12>> - <</if>> - <<if $hormoneUpgradePower == 1>> - <<if ($slaves[$i].hormones == 1)>> - <<set $slaves[$i].hormoneBalance += 1>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set $slaves[$i].hormoneBalance += 3>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set $slaves[$i].hormoneBalance -= 1>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set $slaves[$i].hormoneBalance -= 3>> - <</if>> - <</if>> -<</if>> -/* NCS helps primary sexual maturity */ -<<if $slaves[$i].geneMods.NCS == 0>> - <<set $slaves[$i].hormoneBalance = Math.clamp($slaves[$i].hormoneBalance, -400, 400)>> -<<else>> - <<set $slaves[$i].hormoneBalance = Math.clamp($slaves[$i].hormoneBalance * 1.5, -400, 400)>> -<</if>> -/* androgyny really wants to sit around 0 and will fight changes to do so */ -<<if $slaves[$i].geneticQuirks.androgyny == 2>> - <<if $slaves[$i].hormoneBalance > 6>> - <<set $slaves[$i].hormoneBalance -= 10>> - <<elseif $slaves[$i].hormoneBalance < -6>> - <<set $slaves[$i].hormoneBalance += 10>> - <</if>> -<</if>> -<<if $slaves[$i].drugs != "hormone blockers">> - <<= App.SlaveAssignment.hormonesEffects($slaves[$i])>> -<<elseif $slaves[$i].drugs == "hormone blockers">> - The hormone blockers $he is on suppress $his hormones, natural or not. - <<if $slaves[$i].energy > 20>> - $His libido is similarly - <<set _supp = 1, $slaves[$i].energy-->> - <</if>> - <<if _supp == 1>> - <<if ($slaves[$i].attrXX != 50 || $slaves[$i].attrXY != 50) && $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken">> - @@.red;suppressed,@@ alongside what $he @@.red;finds sexually attractive.@@ Though that may not be a bad thing, should $he find a sex repulsive. - <<else>> - @@.red;suppressed.@@ - <</if>> - <<elseif ($slaves[$i].attrXX != 50 || $slaves[$i].attrXY != 50) && $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken">> - $His @@.red;sexual tastes are also suppressed by the drugs,@@ though that may not be a bad thing should $he find a sex repulsive. - <</if>> - <<if $slaves[$i].attrXX > 50>> - <<set $slaves[$i].attrXX-->> - <<elseif $slaves[$i].attrXX < 50>> - <<set $slaves[$i].attrXX++>> - <</if>> - <<if $slaves[$i].attrXY > 50>> - <<set $slaves[$i].attrXY-->> - <<elseif $slaves[$i].attrXY < 50>> - <<set $slaves[$i].attrXY++>> - <</if>> - <<if $slaves[$i].hormoneBalance > 0>> - <<set $slaves[$i].hormoneBalance -= 5>> - <<elseif $slaves[$i].hormoneBalance < 0>> - <<set $slaves[$i].hormoneBalance += 5>> - <</if>> -<</if>> - -<<if $slaves[$i].genes == "XX">> - <<if ($slaves[$i].ovaries == 1 || $slaves[$i].mpreg == 1) && $slaves[$i].pubertyXX > 0>> - <<if ($slaves[$i].balls > 0 && $slaves[$i].ballType != "sterile") && $slaves[$i].pubertyXY > 0>> - <<if $slaves[$i].hormoneBalance > 20>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 20)/25)>> - <<elseif $slaves[$i].hormoneBalance < 20>> - <<set $slaves[$i].hormoneBalance += Math.ceil((20 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <<else>> - <<if $slaves[$i].hormoneBalance > 60>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 60)/25)>> - <<elseif $slaves[$i].hormoneBalance < 60>> - <<set $slaves[$i].hormoneBalance += Math.ceil((60 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <</if>> - <<else>> - <<if ($slaves[$i].balls > 0 && $slaves[$i].ballType != "sterile") && $slaves[$i].pubertyXY > 0>> - <<if $slaves[$i].hormoneBalance > -20>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance + 20)/25)>> - <<elseif $slaves[$i].hormoneBalance < -20>> - <<set $slaves[$i].hormoneBalance += Math.ceil((-20 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <<else>> - <<if $slaves[$i].hormoneBalance > 20>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 20)/25)>> - <<elseif $slaves[$i].hormoneBalance < 20>> - <<set $slaves[$i].hormoneBalance += Math.ceil((20 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <</if>> - <</if>> -<<elseif $slaves[$i].genes == "XY">> - <<if ($slaves[$i].ovaries == 1 || $slaves[$i].mpreg == 1) && $slaves[$i].pubertyXX > 0>> - <<if ($slaves[$i].balls > 0 && $slaves[$i].ballType != "sterile") && $slaves[$i].pubertyXY > 0>> - <<if $slaves[$i].hormoneBalance > 20>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 20)/25)>> - <<elseif $slaves[$i].hormoneBalance < 20>> - <<set $slaves[$i].hormoneBalance += Math.ceil((20 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <<else>> - <<if $slaves[$i].hormoneBalance > 40>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 40)/25)>> - <<elseif $slaves[$i].hormoneBalance < 40>> - <<set $slaves[$i].hormoneBalance += Math.ceil((40 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <</if>> - <<else>> - <<if ($slaves[$i].balls > 0 && $slaves[$i].ballType != "sterile") && $slaves[$i].pubertyXY > 0>> - <<if $slaves[$i].hormoneBalance > -40>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance + 40)/25)>> - <<elseif $slaves[$i].hormoneBalance < -40>> - <<set $slaves[$i].hormoneBalance += Math.ceil((-40 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <<else>> - <<if $slaves[$i].hormoneBalance > 20>> - <<set $slaves[$i].hormoneBalance -= Math.ceil(($slaves[$i].hormoneBalance - 20)/25)>> - <<elseif $slaves[$i].hormoneBalance < 20>> - <<set $slaves[$i].hormoneBalance += Math.ceil((20 - $slaves[$i].hormoneBalance)/25)>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $precociousPuberty == 1>> - - <<set _earlyPubertyFlag = 0>> - <<if ($slaves[$i].physicalAge < $slaves[$i].pubertyAgeXX) && ($slaves[$i].ovaries == 1 || $slaves[$i].mpreg == 1) && $slaves[$i].pubertyXX == 0>> /* Female type */ - - <<set _precocious = 0>> - /* Just having NCS speeds precocious Puberty, but also hormonal puberty affects are - * increased while secondary growth is suppressed - */ - <<if ($slaves[$i].geneMods.NCS == 1)>> - <<set _precocious -= 0.8>> - <</if>> - - <<if ($slaves[$i].diet == "XX" || $slaves[$i].diet == "XXY")>> - <<set _precocious -= 0.1>> - <<elseif $slaves[$i].diet == "fertility">> - <<set _precocious -= 0.1>> - <</if>> - <<if ($slaves[$i].drugs == "fertility drugs")>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].drugs == "female hormone injections")>> - <<set _precocious -= 1>> - <<elseif ($slaves[$i].drugs == "male hormone injections")>> - <<set _precocious += 1>> - <<elseif ($slaves[$i].drugs == "testicle enhancement")>> - <<set _precocious += 0.1>> - <<elseif ($slaves[$i].drugs == "steroids")>> - <<set _precocious += 0.2>> - <<if ($slaves[$i].boobs > 100) && (random(1,100) < 30/_gigantomastiaMod) && _gigantomastiaMod != 3>> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].boobs > 300) && (random(1,100) > 25*_gigantomastiaMod))>> - Hormonal effects work with $his @@.orange;NCS@@ and cause @@.orange;$his tits to shrink down.@@ - <<set $slaves[$i].boobs -= 50/_gigantomastiaMod>> - <<set $slaves[$i].energy += 1>> - <<else>> - $He feels an @@.orange;unusual calmness@@ in $his belly and breasts. - <</if>> - <<set $slaves[$i].boobs -= 50/_gigantomastiaMod>> - <</if>> - <<if ($slaves[$i].geneMods.NCS == 0)>> - <<if ($slaves[$i].clit < 2) && (random(1,100) < 10)>> - $He feels @@.lime;unusual warmness@@ in $his clitoris. - <<set $slaves[$i].clit += 1>> - <</if>> - <</if>> - <<elseif ($slaves[$i].drugs == "super fertility drugs")>> - <<set _precocious -= 0.5>> - <<if ($slaves[$i].geneMods.NCS == 0)>> - $He feels an @@.lime;unusual warm feeling@@ in $his belly and breasts. - <<if ($slaves[$i].boobs < 400*_gigantomastiaMod) && (random(1,100) < 30)>> - $His breasts feel @@.lime;heavy, hot and sensitive.@@ - <<set $slaves[$i].boobs += 50>> - <<if random(1,100) < 10 && ($slaves[$i].breastMesh != 1)>> - <<set $slaves[$i].boobShape = "perky">> - <</if>> - <</if>> - <<if ($slaves[$i].hips < 2) && (random(1,100) < 10 * _uterineHypersensitivityMod)>> - $He feels @@.lime;strange minor pains@@ in $his pelvis. - <<set $slaves[$i].hips += 1>> - <</if>> - <<if ($slaves[$i].butt < 4) && (random(1,100) < 10+(5*_rearQuirk))>> - $He feels a @@.lime;strange weight@@ on $his rear. - <<set $slaves[$i].butt += 1>> - <</if>> - <<if ($slaves[$i].labia < 2) && (random(1,100) < 10)>> - $He feels an @@.lime;unusual tenderness@@ in $his labia. - <<set $slaves[$i].labia += 1>> - <</if>> - <</if>> - <<elseif ($slaves[$i].drugs == "hyper testicle enhancement")>> - <<set _precocious += .5>> - <</if>> - <<if ($slaves[$i].hormones == 1)>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set _precocious -= 0.2>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set _precocious += 0.2>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set _precocious += 0.4>> - <</if>> - <<if $slaves[$i].drugs == "hormone enhancers">> - <<if ($slaves[$i].hormones == 1)>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set _precocious -= 0.2>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set _precocious += 0.1>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set _precocious += 0.2>> - <</if>> - <<elseif $slaves[$i].drugs == "hormone blockers">> - <<set _precocious += 1>> - <</if>> - <<if ($slaves[$i].geneMods.NCS == 1)>> - <<set _precocious *= 2>> - <</if>> - <<set $slaves[$i].pubertyAgeXX += _precocious>> - - <<if ($slaves[$i].physicalAge < $slaves[$i].pubertyAgeXX) && ($slaves[$i].physicalAge > $slaves[$i].pubertyAgeXX-3) && ($slaves[$i].pubertyAgeXX < $fertilityAge)>> - <<if $slaves[$i].geneMods.NCS == 0>> - $His body is showing signs of @@.lime;early puberty.@@ - <<else>> - A routine scan confirms that $his body is advancing towards @@.lime;early puberty,@@ despite not really showing signs of secondary sexual characteristics. - <</if>> - <<set _earlyPubertyFlag = 1>> - <</if>> - - <</if>> /* closes female type */ - - <<if ($slaves[$i].physicalAge < $slaves[$i].pubertyAgeXY) && $slaves[$i].balls >= 1 && $slaves[$i].pubertyXY == 0>> /* Male type */ - <<set _precocious = 0>> - /* Just having NCS speeds precocious Puberty, but also hormonal puberty affects are increased while secondary growth is suppressed */ - <<if ($slaves[$i].geneMods.NCS == 1)>> - <<set _precocious -= 0.8>> - <</if>> - - <<if ($slaves[$i].diet == "XY" || $slaves[$i].diet == "XXY")>> - <<set _precocious -= 0.1>> - <</if>> - <<if ($slaves[$i].drugs == "fertility drugs")>> - <<set _precocious += 0.2>> - <<elseif ($slaves[$i].drugs == "female hormone injections")>> - <<set _precocious += 1>> - <<elseif ($slaves[$i].drugs == "male hormone injections")>> - <<set _precocious -= 1>> - <<elseif ($slaves[$i].drugs == "testicle enhancement")>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].drugs == "steroids")>> - <<set _precocious -= 0.2>> - <<elseif ($slaves[$i].drugs == "hyper testicle enhancement")>> - <<set _precocious -= 0.5>> - <<if ($slaves[$i].geneMods.NCS == 0)>> - $He feels an @@.lime;unusual warm feeling@@ in $his groin. - <<if ($slaves[$i].dick < 4) && (random(1,100) < 30)>> - $His penis feels @@.lime;heavy, hot and oversensitive.@@ - <<set $slaves[$i].dick += 1>> - <</if>> - <<if ($slaves[$i].balls < 4) && (random(1,100) < 30)>> - $His balls feel @@.lime;heavy, full and oversensitive.@@ - <<set $slaves[$i].balls += 1>> - <</if>> - <</if>> - <<elseif ($slaves[$i].drugs == "super fertility drugs")>> - <<set _precocious -= 1>> - <<if ($slaves[$i].geneMods.NCS == 0)>> - $He feels @@.lime;unusual warm feeling@@ in $his breasts. - <<if ($slaves[$i].boobs < 400*_gigantomastiaMod) && (random(1,100) < 30) && _gigantomastiaMod != 3>> - $His chest feels @@.lime;hot and sensitive.@@ - <<set $slaves[$i].boobs += 50>> - <<if random(1,100) < 10 && ($slaves[$i].breastMesh != 1)>> - <<set $slaves[$i].boobShape = "perky">> - <</if>> - <</if>> - <<if ($slaves[$i].hips < 2) && (random(1,100) < 10) * _uterineHypersensitivityMod>> - $He feels @@.lime;strange minor pains@@ in $his pelvis. - <<set $slaves[$i].hips += 1>> - <</if>> - <<if ($slaves[$i].butt < 4) && (random(1,100) < 10+(5*_rearQuirk))>> - $He feels a @@.lime;strange weight@@ to $his rear. - <<set $slaves[$i].butt += 1>> - <</if>> - <</if>> - <<if ($slaves[$i].dick > 1) && (random(1,100) < 30)>> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].dick > 2) && (random(1,100) > 25))>> - Hormonal effects work with $his @@.orange;NCS@@ and cause @@.orange;$his dick to shrink.@@ - <<set $slaves[$i].dick -= 1>> - <<else>> - $He feels an @@.orange;unusual lightness@@ in $his penis. - <</if>> - <<set $slaves[$i].dick -= 1>> - <</if>> - <<if ($slaves[$i].balls > 1) && (random(1,100) < 30)>> - <<if (($slaves[$i].geneMods.NCS == 1) && ($slaves[$i].balls > 2) && (random(1,100) > 25))>> - Hormonal effects work with $his @@.orange;NCS@@ and cause @@.orange;$his balls to shrink.@@ - <<set $slaves[$i].balls -= 1>> - <<else>> - $He feels an @@.orange;unusual emptiness@@ to $his scrotum. - <</if>> - <<set $slaves[$i].balls -= 1>> - <</if>> - <</if>> - <<if ($slaves[$i].hormones == 1)>> - <<set _precocious += 0.2>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set _precocious += 0.4>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set _precocious -= 0.2>> - <</if>> - <<if $slaves[$i].drugs == "hormone enhancers">> - <<if ($slaves[$i].hormones == 1)>> - <<set _precocious += 0.1>> - <<elseif ($slaves[$i].hormones == 2)>> - <<set _precocious += 0.2>> - <<elseif ($slaves[$i].hormones == -1)>> - <<set _precocious -= 0.1>> - <<elseif ($slaves[$i].hormones == -2)>> - <<set _precocious -= 0.2>> - <</if>> - <<elseif $slaves[$i].drugs == "hormone blockers">> - <<set _precocious += 1>> - <</if>> - <<if ($slaves[$i].geneMods.NCS == 1)>> - <<set _precocious *= 2>> - <</if>> - <<set $slaves[$i].pubertyAgeXY += _precocious>> - - <<if ($slaves[$i].physicalAge < $slaves[$i].pubertyAgeXY) && ($slaves[$i].physicalAge > $slaves[$i].pubertyAgeXY-3) && ($slaves[$i].pubertyAgeXY < $potencyAge) && _earlyPubertyFlag != 1>> - <<if $slaves[$i].geneMods.NCS == 0>> - $His body is showing signs of @@.lime;early puberty.@@ - <<else>> - A routine scan confirms that $his body is advancing towards @@.lime;early puberty,@@ despite not really showing signs of secondary sexual characteristics. - <</if>> - <</if>> - - <</if>> /* closes male type */ - -<</if>> /*closes PPmod */ - -/* puberty - not announced for allowing surprise pregnancy */ -<<if $slaves[$i].ovaries == 1 || $slaves[$i].mpreg == 1>> - <<if $slaves[$i].pubertyXX == 0>> - <<if $slaves[$i].physicalAge >= $slaves[$i].pubertyAgeXX>> - <<set $slaves[$i].pubertyXX = 1>> - <<if $slaves[$i].geneticQuirks.gigantomastia == 3 && random(1,100) < $slaves[$i].hormoneBalance>> - <<set $slaves[$i].geneticQuirks.gigantomastia = 2>> - <</if>> - <<if $slaves[$i].geneticQuirks.macromastia == 3 && random(1,100) < $slaves[$i].hormoneBalance>> - <<set $slaves[$i].geneticQuirks.macromastia = 2>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $slaves[$i].balls > 0 && $slaves[$i].ballType != "sterile">> - <<if $slaves[$i].pubertyXY == 0>> - <<if $slaves[$i].physicalAge >= $slaves[$i].pubertyAgeXY>> - <<set $slaves[$i].pubertyXY = 1>> - <</if>> - <</if>> -<</if>> - -/* PREGNANCY AND FERTILITY */ -<<= App.SlaveAssignment.pregnancy($slaves[$i])>> - -<<if $slaves[$i].bellyFluid >= 1500>> /* PREGMOD: NOT PREGNANT, YES INFLATION */ - - <<= App.SlaveAssignment.inflation($slaves[$i])>> - - <<if setup.fakeBellies.includes(_bellyAccessory)>> - $He has trouble keeping $himself full of - <<switch $slaves[$i].inflationType>> - <<case "cum" "food" "milk" "urine" "water">> - $slaves[$i].inflationType - <<default>> - <<print $slaves[$i].inflationType>>s - <</switch>> - with the weight of the fake belly resting on $his swollen stomach, forcing it to be removed. - <<set $slaves[$i].bellyAccessory = "none">> - <</if>> - - <<if $slaves[$i].fetish != "mindbroken" && $slaves[$i].fuckdoll == 0>> - <<if $slaves[$i].bellyFluid >= 10000>> - <<if $slaves[$i].fetish != "masochist" && $slaves[$i].sexualFlaw != "hates self">> - Being so distended with fluids is @@.mediumorchid;very uncomfortable@@ to $him. - <<set $slaves[$i].devotion -= 3>> - <</if>> - <<if ($slaves[$i].fetish == "none") && (_fetishChangeChance > random(0,100))>> - Having such a round, heavy belly leads $him to @@.lightcoral;begin fantasizing about being pregnant.@@ - <<set $slaves[$i].fetish = "pregnancy", $slaves[$i].fetishStrength = 10, $slaves[$i].fetishKnown = 1>> - <</if>> - <<elseif $slaves[$i].bellyFluid >= 1500>> - <<if $slaves[$i].fetish == "humiliation">> - Having to walk around with a belly full of - <<switch $slaves[$i].inflationType>> - <<case "cum" "food" "milk" "urine" "water">> - $slaves[$i].inflationType - <<default>> - <<print $slaves[$i].inflationType>>s - <</switch>> - is completely humiliating, and - <<if $slaves[$i].fetishKnown == 0>> - $he revels in the attention. @@.lightcoral;$He's a humiliation fetishist!@@ - <<set $slaves[$i].fetishKnown = 1>> - <<else>> - $he @@.hotpink;loves it.@@ - <<set $slaves[$i].devotion += 2>> - <<if $slaves[$i].fetishStrength < 100>> - Every eye on $his swollen stomach @@.lightcoral;strengthens $his fetish@@ further. - <<set $slaves[$i].fetishStrength++>> - <</if>> - <</if>> - <<else>> - Having to walk around with a belly full of - <<switch $slaves[$i].inflationType>> - <<case "cum" "food" "milk" "urine" "water">> - $slaves[$i].inflationType - <<default>> - <<print $slaves[$i].inflationType>>s - <</switch>> - is @@.mediumorchid;completely humiliating.@@ - <<set $slaves[$i].devotion -= 2>> - <<if (($slaves[$i].fetish == "none") || ($slaves[$i].fetishStrength <= 10)) && (_fetishChangeChance > random(0,100))>> - However, all the eyes on $him and $his jiggling middle @@.lightcoral;makes $him begin to crave humiliation.@@ - <<set $slaves[$i].fetish = "humiliation", $slaves[$i].fetishStrength = 10, $slaves[$i].fetishKnown = 1>> - <</if>> - <</if>> - <</if>> - <<switch $slaves[$i].inflationType>> - <<case "cum" "milk">> - <<if $slaves[$i].behavioralFlaw == "none" && $slaves[$i].behavioralQuirk == "none" && random(1,100) > 70>> - Filling $his guts with <<print $slaves[$i].inflationType>> all week @@.red;drives $him to gluttony.@@ - <<set $slaves[$i].behavioralFlaw = "gluttonous">> - <<elseif $slaves[$i].behavioralFlaw == "none" && $slaves[$i].behavioralQuirk == "none" && random(1,100) > 70>> - <<if $slaves[$i].inflationType == "cum" && $slaves[$i].fetish == "cumslut">> - <<else>> - Filling $his guts with <<print $slaves[$i].inflationType>> all week @@.red;drives $him to hate eating and food.@@ - <<set $slaves[$i].behavioralFlaw = "anorexic">> - <</if>> - <</if>> - <<case "food">> - <<if $slaves[$i].behavioralFlaw == "none" && $slaves[$i].behavioralQuirk != "fitness" && random(1,100) > 70>> - Stuffing $his face with food all week @@.red;drives $him to gluttony.@@ - <<set $slaves[$i].behavioralFlaw = "gluttonous">> - <<elseif $slaves[$i].behavioralFlaw == "none" && $slaves[$i].behavioralQuirk != "fitness" && random(1,100) > 70>> - Stuffing $his face with food all week @@.red;drives $him to hate eating.@@ - <<set $slaves[$i].behavioralFlaw = "anorexic">> - <</if>> - <</switch>> - <</if>> - - <<if $slaves[$i].bellyFluid >= 10000 && $seeExtreme == 1 && $slaves[$i].health.health <= -100 && $slaves[$i].geneMods.rapidCellGrowth != 1>> - $He feels an @@.red;unusual intense pain@@ in $his bloated belly. - <<run burst($slaves[$i])>> - <</if>> - -<</if>> /* PREGMOD: CLOSES INFLATION OVERRIDE */ - -/* belly sag calcs */ -<<if $slaves[$i].belly >= 1000000>> - <<if $slaves[$i].bellySag < 50>> - <<set $slaves[$i].bellySag += 1>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 1>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 50>> - <<set $slaves[$i].bellySagPreg += 1>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 5, $slaves[$i].bellySagPreg += 5>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 3>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 3>> - <</if>> - <</if>> -<<elseif $slaves[$i].belly >= 750000>> - <<if $slaves[$i].bellySag < 30>> - <<set $slaves[$i].bellySag += 0.7>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.7>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 30>> - <<set $slaves[$i].bellySagPreg += 0.7>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 2, $slaves[$i].bellySagPreg += 2>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 1>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 1>> - <</if>> - <</if>> -<<elseif $slaves[$i].belly >= 600000>> - <<if $slaves[$i].bellySag < 20>> - <<set $slaves[$i].bellySag += 0.5>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.5>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 20>> - <<set $slaves[$i].bellySagPreg += 0.5>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 1, $slaves[$i].bellySagPreg += 1>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 1>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 1>> - <</if>> - <</if>> -<<elseif $slaves[$i].belly >= 450000>> - <<if $slaves[$i].bellySag < 15>> - <<set $slaves[$i].bellySag += 0.4>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.4>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 15>> - <<set $slaves[$i].bellySagPreg += 0.4>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 0.6, $slaves[$i].bellySagPreg += 0.6>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 0.5>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.5>> - <</if>> - <</if>> -<<elseif $slaves[$i].belly >= 300000>> - <<if $slaves[$i].bellySag < 10>> - <<set $slaves[$i].bellySag += 0.3>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.3>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 10>> - <<set $slaves[$i].bellySagPreg += 0.3>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 0.5, $slaves[$i].bellySagPreg += 0.5>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 0.5>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.5>> - <</if>> - <</if>> -<<elseif $slaves[$i].belly >= 100000>> - <<if $slaves[$i].bellySag < 10>> - <<set $slaves[$i].bellySag += 0.2>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.2>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 10>> - <<set $slaves[$i].bellySagPreg += 0.2>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 0.3, $slaves[$i].bellySagPreg += 0.3>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 0.3>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.3>> - <</if>> - <</if>> -<<elseif ($slaves[$i].bellyPreg >= 10000) || ($slaves[$i].bellyImplant >= 10000)>> - <<if $slaves[$i].bellySag < 5>> - <<set $slaves[$i].bellySag += 0.1>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.1>> - <</if>> - <<elseif $slaves[$i].preg > 0 && $slaves[$i].bellySagPreg < 5>> - <<set $slaves[$i].bellySagPreg += 0.1>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<set $slaves[$i].bellySag += 0.2, $slaves[$i].bellySagPreg += 0.2>> - <</if>> - <<if $slaves[$i].geneMods.rapidCellGrowth == 1>> - <<set $slaves[$i].bellySag += 0.2>> - <<if $slaves[$i].preg > 0>> - <<set $slaves[$i].bellySagPreg += 0.2>> - <</if>> - <</if>> -<</if>> -<<if $slaves[$i].bellySagPreg > $slaves[$i].bellySag>> - <<set $slaves[$i].bellySagPreg = $slaves[$i].bellySag>> -<</if>> - -<<if $slaves[$i].bellySag > 0 && $slaves[$i].belly < 1500 && $slaves[$i].geneMods.rapidCellGrowth != 1>> - <<if $slaves[$i].muscles > 95>> - <<if (random(1,100) > 1)>> - $His stretched, extreme muscles @@.lime;firm up readily@@ after - <<if $slaves[$i].bellySagPreg > 0>> - $his pregnancy. - <<set $slaves[$i].bellySag -= 0.5, $slaves[$i].bellySagPreg -= 0.5>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0, $slaves[$i].bellySagPreg = 0>> - <</if>> - <<else>> - being heavily distended for so long. - <<set $slaves[$i].bellySag -= 0.5>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0>> - <</if>> - <</if>> - <</if>> - <<elseif $slaves[$i].muscles >= 30>> - <<if (random(1,100) > 20)>> - $His stretched, muscular belly @@.lime;firms up@@ after - <<if $slaves[$i].bellySagPreg > 0>> - $his pregnancy. - <<set $slaves[$i].bellySag -= 0.4, $slaves[$i].bellySagPreg -= 0.4>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0, $slaves[$i].bellySagPreg = 0>> - <</if>> - <<else>> - being heavily distended for so long. - <<set $slaves[$i].bellySag -= 0.4>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0>> - <</if>> - <</if>> - <</if>> - <<elseif $slaves[$i].muscles >= 5>> - <<if (random(1,100) > 40)>> - $His stretched, toned belly @@.lime;firms up@@ after - <<if $slaves[$i].bellySagPreg > 0>> - $his pregnancy. - <<set $slaves[$i].bellySag -= 0.3, $slaves[$i].bellySagPreg -= 0.3>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0, $slaves[$i].bellySagPreg = 0>> - <</if>> - <<else>> - being heavily distended for so long. - <<set $slaves[$i].bellySag -= 0.3>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0>> - <</if>> - <</if>> - <</if>> - <<else>> - <<if (random(1,100) > 60)>> - $His belly @@.lime;regains some firmness@@ after - <<if $slaves[$i].bellySagPreg > 0>> - $his pregnancy. - <<set $slaves[$i].bellySag -= 0.2, $slaves[$i].bellySagPreg -= 0.2>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0, $slaves[$i].bellySagPreg = 0>> - <</if>> - <<else>> - being heavily distended for so long. - <<set $slaves[$i].bellySag -= 0.2>> - <<if $slaves[$i].bellySag < 0>> - <<set $slaves[$i].bellySag = 0>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $slaves[$i].bellyImplant >= 5000>> - <<if $slaves[$i].fuckdoll == 0>> - <<if $slaves[$i].fetish != "mindbroken">> - <<if ($slaves[$i].fetish == "none" || $slaves[$i].fetishStrength <= 10) && $slaves[$i].devotion > 20 && random(1,100) > 85>> - Having an implant simulating pregnancy drives $him to @@.lightcoral;begin fantasizing about being actually pregnant.@@ - <<set $slaves[$i].fetish = "pregnancy", $slaves[$i].fetishStrength = 10, $slaves[$i].fetishKnown = 1>> - <</if>> - <</if>> - <</if>> -<<elseif $slaves[$i].bellyImplant >= 1500>> - <<if setup.fakeBellies.includes(_bellyAccessory)>> - $His implant rounded belly renders $his fake one moot. - <<set $slaves[$i].bellyAccessory = "none">> - <</if>> -<</if>> - -/* MINDBREAK */ - -<<if ($slaves[$i].fetish != "mindbroken")>> - <<if $slaves[$i].trust < -95>> - <<if $slaves[$i].devotion < -50>> - <<if $week-$slaves[$i].weekAcquired > 9>> - <<if $slaves[$i].fuckdoll > 50>> - Denied all stimulation other than sexual use for longer than a human mind can bear, @@.red;$he has been irretrievably broken.@@ - <<set $slaves[$i].fetish = "mindbroken", $slaves[$i].sexualFlaw = "none", $slaves[$i].behavioralFlaw = "none">> - <<else>> - <<if random(1,5) == 1>> - $He has been used as a sexual slave for so long, and is so hopeless that $his future as a slave will be anything but torment, that $his mind finally slips. @@.red;$He has been irretrievably broken.@@ - <<set $slaves[$i].fetish = "mindbroken", $slaves[$i].sexualFlaw = "none", $slaves[$i].behavioralFlaw = "none">> - <<else>> - $He's so unhappy and terrified that the effects of the extreme stress on $his mind and body are unpredictable. This week, - <<set _stressEffect = random(1,4)>> - <<switch _stressEffect>> - <<case 1>> - @@.mediumorchid;$his hatred of sexual slavery was self-reinforcing.@@ - <<set $slaves[$i].devotion -= 5>> - <<case 2>> - @@.mediumorchid;$his mental state was bad for $his health.@@ - <<run healthDamage($slaves[$i], 5)>> - <<case 3>> - @@.orange;$his face grew a little more haggard.@@ - <<set $slaves[$i].face -= 2>> - <<default>> - $he managed to bear it without lasting harm. - <</switch>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <<if $slaves[$i].fuckdoll == 0>> - <<if ($slaves[$i].behavioralFlaw == "none")>> - <<if ($slaves[$i].trust < -20) && ($slaves[$i].devotion <= 50)>> - <<if (random(1,100) > 100+$slaves[$i].trust)>> - <<set _effect = random(1,4)>> - Being so afraid so constantly drives $him to find solace in - <<if Array.isArray($personalAttention)>> - <<set _givingAttention = $personalAttention.findIndex(function(s) { return s.ID == $slaves[$i].ID; })>> - <<else>> - <<set _givingAttention = -1>> - <</if>> - <<if _givingAttention != -1 && ["build her devotion", "look after her", "soften her behavioral flaw", "soften her sexual flaw", "teach her"].includes($personalAttention[_givingAttention].trainingRegimen)>> - your attention. Relying on you for @@.hotpink;emotional support@@ strengthens $his @@.mediumaquamarine;bond@@ with <<= getWrittenTitle($slaves[$i])>>. - <<set $slaves[$i].devotion++, $slaves[$i].trust++>> - <<elseif _effect == 1>> - self-denial. @@.red;$He has developed anorexia.@@ - <<set $slaves[$i].behavioralFlaw = "anorexic">> - <<elseif _effect == 2>> - stress eating. @@.red;$He's now a nervous glutton.@@ - <<set $slaves[$i].behavioralFlaw = "gluttonous">> - <<elseif _effect == 3>> - the scraps of prayer and superstition $he can remember from $his life before $he was a slave. @@.red;$He's now religious.@@ - <<set $slaves[$i].behavioralFlaw = "devout">> - <<else>> - the remnants of modern philosophy and education $he can remember from $his life before $he was a slave. @@.red;$He feels mentally liberated.@@ - <<set $slaves[$i].behavioralFlaw = "liberated">> - <</if>> - <</if>> - <</if>> - <</if>> - <<if ($slaves[$i].sexualFlaw == "none")>> - <<if ($slaves[$i].devotion < -20)>> - <<if (random(1,500) > 500+$slaves[$i].devotion)>> - <<set _effect = random(1,6)>> - Being so angry at $his life as a sex slave has - <<if Array.isArray($personalAttention)>> - <<set _givingAttention = $personalAttention.findIndex(function(s) { return s.ID == $slaves[$i].ID; })>> - <<else>> - <<set _givingAttention = -1>> - <</if>> - <<if _givingAttention != -1 && ["build her devotion", "look after her", "soften her behavioral flaw", "soften her sexual flaw", "teach her"].includes($personalAttention[_givingAttention].trainingRegimen)>> - forced $him to face $his problems with you. Lending $him support makes it @@.hotpink;a little more tolerable.@@ - <<elseif _effect == 1>> - driven $him into @@.red;sexual apathy.@@ - <<set $slaves[$i].sexualFlaw = "apathetic">> - <<elseif _effect == 2>> - convinced $him that the conservative parts of $his upbringing were right: sex is evil. @@.red;$He's now repressed.@@ - <<set $slaves[$i].sexualFlaw = "repressed">> - <<elseif _effect == 3>> - given $him a dread of being nude. @@.red;$He's now shamefast.@@ - <<set $slaves[$i].sexualFlaw = "shamefast">> - <<elseif _effect == 4>> - deprived $him of any motivation to keep sex appealing or even clean. @@.red;$He's now crude.@@ - <<set $slaves[$i].sexualFlaw = "crude">> - <<elseif _effect == 5>> - driven $him to find refuge in high standards. @@.red;$He's now judgemental.@@ - <<set $slaves[$i].sexualFlaw = "judgemental">> - <<else>> - convinced $him that sex is only this way here. Convinced that sexual slavery is wrong, @@.red;$He's become sexually idealistic.@@ - <<set $slaves[$i].sexualFlaw = "idealistic">> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if !canTalk($slaves[$i])>> - <<if ($slaves[$i].behavioralFlaw == "bitchy")>> - If $he has anything bitchy to say, @@.green;no one can tell,@@ since $he can't talk. - <</if>> - <<if ($slaves[$i].behavioralQuirk == "cutting")>> - If $he has anything witty to say, @@.red;no one can tell,@@ since $he can't talk. - <</if>> -<</if>> - -<<if ($slaves[$i].breedingMark == 1 && $propOutcome == 1) && ($slaves[$i].fuckdoll == 0) && ($slaves[$i].fetish != "mindbroken")>> - <<if ($slaves[$i].devotion < -20)>> - $He views the mark of the Societal Elite @@.mediumorchid;with disgust@@ as it brands $him as nothing more than your breeding bitch. - <<set $slaves[$i].devotion -= 10>> - <<elseif ($slaves[$i].devotion <= 50)>> - $He bears the mark of the Societal Elite as a sign of $his superiority. As such, $he @@.mediumorchid;behaves like a spoiled child@@ and tries to have everything $his way. - <<set $slaves[$i].devotion -= 5>> - <<if ($slaves[$i].behavioralFlaw == "none") && ($slaves[$i].behavioralQuirk != "confident")>> - $He has become @@.red;quite arrogant.@@ - <<set $slaves[$i].behavioralFlaw = "arrogant">> - <</if>> - <<else>> - $He bears the mark of the Societal Elite @@.hotpink;with pride.@@ It signals that $he is yours, and yours alone, drawing $him ever closer to $his beloved <<= getWrittenTitle($slaves[$i])>>. - <<set $slaves[$i].devotion += 10>> - <</if>> -<</if>> - -<<if $slaves[$i].fetish != "mindbroken" && $slaves[$i].fuckdoll == 0>> - <<if $arcologies[0].FSHedonisticDecadence != "unset">> - <<if $arcologies[0].FSHedonisticDecadenceResearch == 1>> - <<if $arcologies[0].FSDegradationist == "unset">> - <<if $slaves[$i].onDiet != 1>> - <<if !canTaste($slaves[$i])>> - $His lack of a sense of taste makes $him essentially immune to the addictive slave treats, as $he can't be enticed by their delicious taste. - <<elseif $slaves[$i].behavioralQuirk == "insecure">> - $He can't stop $himself from eating the @@.hotpink;addictive, delicious@@ slave treats available throughout the arcology. $He knows they are fattening and @@.gold;starts obsessing@@ even more about $his weight, appearance and how others view $him. - <<set $slaves[$i].trust -= 3>> - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - <<set $slaves[$i].weight++>> - <</if>> - <<set $slaves[$i].devotion++>> - <<elseif $slaves[$i].behavioralQuirk == "fitness">> - $He hates the availability of the tasty slave treats and how they tempt $him away from a fit lifestyle, but often @@.hotpink;finds $himself absentmindedly snacking on them.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - The more $his @@.lime;waistline grows,@@ the @@.gold;less $he finds $himself trusting you.@@ - <<set $slaves[$i].trust--, $slaves[$i].devotion++>> - <<set $slaves[$i].weight++>> - <<else>> - $He finds that no matter how many $he eats, $he never gains weight, a detail $he is @@.mediumaquamarine;thankful@@ for. - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<elseif $slaves[$i].behavioralFlaw == "gluttonous">> - $He @@.hotpink;loves@@ the availability of the tasty slave treats and how $he can keep $his mouth filled at @@.hotpink;nearly all times.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - Since $his belly is always full thanks to your food supplies, $he @@.mediumaquamarine;trusts you to keep $him sated,@@ though $his constant gorging has a @@.lime;huge impact on $his waistline.@@ - <<set $slaves[$i].trust++, $slaves[$i].devotion += 3>> - <<set $slaves[$i].weight += 3>> - <<else>> - Since $his belly is always full thanks to your food supplies, $he @@.mediumaquamarine;trusts you to keep $him sated.@@ Since the food is fat free, $his waistline is spared $his bad habits. - <<set $slaves[$i].trust++, $slaves[$i].devotion += 3>> - <</if>> - <<elseif $slaves[$i].behavioralFlaw == "anorexic">> - $He hates the availability of the tasty slave treats and how $he @@.hotpink;can't stop eating them.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - The @@.lime;more $his waistline grows,@@ the @@.gold;more horrifying $his body becomes to $him.@@ - <<set $slaves[$i].trust -= 5, $slaves[$i].devotion++>> - <<set $slaves[$i].weight++>> - <<else>> - $He finds that no matter how many $he eats, $he never gains weight, a detail $he is @@.mediumaquamarine;thankful@@ for, even if $he is disgusted by $his actions. - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<else>> - $He @@.hotpink;loves@@ the availability of the tasty slave treats and @@.mediumaquamarine;trusts you more@@ for having them so accessible. - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - $He is so distracted by the luxury that $he doesn't notice the @@.lime;weight $he is gaining.@@ - <<set $slaves[$i].weight++>> - <</if>> - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<else>> /* no treats for you */ - <<if !canTaste($slaves[$i])>> - $He lacks permission to eat the slave treats, which $he has no real opinion over, as $he lacks the sense to taste them anyway. - <<elseif $slaves[$i].behavioralQuirk == "insecure">> - $He is @@.mediumaquamarine;relieved@@ $he doesn't have to fret over eating the treats and gaining weight as $his <<= getWrittenTitle($slaves[$i])>> is carefully directing $him. - <<set $slaves[$i].trust++>> - <<elseif $slaves[$i].behavioralQuirk == "fitness">> - $He is @@.mediumaquamarine;thankful@@ that $he isn't permitted to eat the treats. $He's seen others try one, only to start shoveling them down. - <<set $slaves[$i].trust++>> - <<elseif $slaves[$i].behavioralFlaw == "gluttonous">> - $He @@.mediumorchid;resents@@ not being allowed to stuff $his face with the tempting treats like the other slaves $he sees. - <<set $slaves[$i].devotion -= 2>> - <<elseif $slaves[$i].behavioralFlaw == "anorexic">> - $He @@.hotpink;is relieved@@ that $he doesn't have to eat the treats and is @@.mediumaquamarine;thankful@@ for your apparent consideration. - <<set $slaves[$i].trust++, $slaves[$i].devotion += 2>> - <<else>> - $He <<if canSee($slaves[$i])>>sees<<else>>knows<</if>> how much the other slaves enjoy the delicious treats and @@.mediumorchid;resents@@ not being allowed to enjoy them, feeling you are doing this to @@.gold;spite $him.@@ - <<set $slaves[$i].devotion--, $slaves[$i].trust-->> - <</if>> - <</if>> - <<else>> - <<if $slaves[$i].onDiet != 1>> - The treats are designed to cause stomach cramps alongside being extremely addictive. $He cannot stop $himself from eating them, but $he can @@.gold;fear@@ your cruelty as $his @@.hotpink;will steadily erodes@@ from the concentrated aphrodisiacs in $his food. - <<set $slaves[$i].devotion += 2, $slaves[$i].trust -= 3>> - <<else>> - The treats are designed to cause stomach cramps alongside being extremely addictive. Since $he is not permitted to eat them, @@.mediumaquamarine;$he breathes a sigh of relief,@@ though $he is fully aware of what happens to those not as fortunate as $him. $He @@.hotpink;tries $his best to be obedient@@ hoping to not undergo the agony, but $his efforts pale in comparison to the effects of the food-based aphrodisiacs. - <<set $slaves[$i].devotion++, $slaves[$i].trust++>> - <</if>> - <</if>> - <<else>> - <<if $slaves[$i].behavioralQuirk == "insecure">> - Watching citizens sculpt their slaves to their ideals fills $him with @@.mediumaquamarine;relief@@ that someone will find $him attractive; that or make $him so. - <<set $slaves[$i].trust++>> - <<elseif $slaves[$i].behavioralQuirk == "fitness">> - Watching both citizens and other slaves lie around and shirk exercise disappoints $him. $He @@.gold;fears@@ that $he'll be prevented from exercising and grow soft too. - <<set $slaves[$i].trust -= 2>> - <<elseif $slaves[$i].behavioralFlaw == "gluttonous">> - Being part of a society that welcomes gluttony makes $him @@.mediumaquamarine;feel right at home.@@ - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].behavioralFlaw == "anorexic">> - $He feels fat just watching your society gorge itself. $He @@.gold;fears@@ that $he'll be a bloated hog soon too. - <<set $slaves[$i].trust -= 5>> - <</if>> - <</if>> - <<elseif $arcologies[0].FSHedonisticDecadenceResearch == 1>> - <<if $arcologies[0].FSDegradationist == "unset">> - <<if $slaves[$i].onDiet != 1>> - <<if !canTaste($slaves[$i])>> - $His lack of a sense of taste makes $him essentially immune to the addictive slave treats, as $he can't be enticed by their delicious taste. - <<elseif $slaves[$i].behavioralQuirk == "insecure">> - $He can't stop $himself from eating the @@.hotpink;addictive, delicious@@ slave treats available throughout the arcology. $He <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>>knows<<else>>believes<</if>> they are fattening and @@.gold;starts obsessing@@ even more about $his weight, appearance and how others view $him. - <<set $slaves[$i].trust -= 3>> - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - <<set $slaves[$i].weight++>> - <</if>> - <<set $slaves[$i].devotion++>> - <<elseif $slaves[$i].behavioralQuirk == "fitness">> - $He hates the availability of the tasty slave treats and how they tempt $him away from a fit lifestyle, but often @@.hotpink;finds $himself absentmindedly snacking on them.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - The more $his @@.lime;waistline grows,@@ the @@.gold;less $he finds $himself trusting you.@@ - <<set $slaves[$i].trust--, $slaves[$i].devotion++>> - <<set $slaves[$i].weight++>> - <<else>> - $He finds that no matter how many $he eats, $he never gains weight, a detail $he is @@.mediumaquamarine;thankful@@ for. - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<elseif $slaves[$i].behavioralFlaw == "gluttonous">> - $He @@.hotpink;loves@@ the availability of the tasty slave treats and how $he can keep $his mouth filled at @@.hotpink;nearly all times.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - Since $his belly is always full thanks to your food supplies, $he @@.mediumaquamarine;trusts you to keep $him sated,@@ though $his constant gorging has a @@.lime;huge impact on $his waistline.@@ - <<set $slaves[$i].trust++, $slaves[$i].devotion += 3>> - <<set $slaves[$i].weight += 3>> - <<else>> - Since $his belly is always full thanks to your food supplies, $he @@.mediumaquamarine;trusts you to keep $him sated.@@ Since the food is fat free, $his waistline is spared $his bad habits. - <<set $slaves[$i].trust++, $slaves[$i].devotion += 3>> - <</if>> - <<elseif $slaves[$i].behavioralFlaw == "anorexic">> - $He hates the availability of the tasty slave treats and how $he @@.hotpink;can't stop eating them.@@ - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - The @@.lime;more $his waistline grows,@@ the @@.gold;more horrifying $his body becomes to $him.@@ - <<set $slaves[$i].trust -= 5, $slaves[$i].devotion++>> - <<set $slaves[$i].weight++>> - <<else>> - $He finds that no matter how many $he eats, $he never gains weight, a detail $he is @@.mediumaquamarine;thankful@@ for, even if $he is disgusted by $his actions. - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<else>> - $He @@.hotpink;loves@@ the availability of the tasty slave treats and @@.mediumaquamarine;trusts you more@@ for having them so accessible. - <<if $arcologies[0].FSHedonisticDecadenceDietResearch == 0>> - $He is so distracted by the luxury that $he doesn't notice the @@.lime;weight $he is gaining.@@ - <<set $slaves[$i].weight++>> - <</if>> - <<set $slaves[$i].trust++, $slaves[$i].devotion++>> - <</if>> - <<else>> /* no treats for you */ - <<if !canTaste($slaves[$i])>> - $He lacks permission to eat the slave treats, which $he has no real opinion over, as $he lacks the sense to taste them anyway. - <<elseif $slaves[$i].behavioralQuirk == "insecure">> - $He is @@.mediumaquamarine;relieved@@ $he doesn't have to fret over eating the treats and gaining weight as $his <<= getWrittenTitle($slaves[$i])>> is carefully directing $him. - <<set $slaves[$i].trust++>> - <<elseif $slaves[$i].behavioralQuirk == "fitness">> - $He is @@.mediumaquamarine;thankful@@ that $he isn't permitted to eat the treats. $He's seen others try one, only to start shoveling them down. - <<set $slaves[$i].trust++>> - <<elseif $slaves[$i].behavioralFlaw == "gluttonous">> - $He @@.mediumorchid;resents@@ not being allowed to stuff $his face with the tempting treats like the other slaves<<if canSee($slaves[$i])>> $he sees<</if>>. - <<set $slaves[$i].devotion -= 2>> - <<elseif $slaves[$i].behavioralFlaw == "anorexic">> - $He @@.hotpink;is relieved@@ that $he doesn't have to eat the treat and is @@.mediumaquamarine;thankful@@ for your apparent consideration. - <<set $slaves[$i].trust++, $slaves[$i].devotion += 2>> - <<else>> - $He <<if canSee($slaves[$i])>>sees<<else>>knows<</if>> how much the other slaves enjoy the delicious treats and @@.mediumorchid;resents@@ not being allowed to enjoy them, feeling you are doing this to @@.gold;spite $him.@@ - <<set $slaves[$i].devotion--, $slaves[$i].trust-->> - <</if>> - <</if>> - <<else>> - <<if $slaves[$i].onDiet != 1>> - The treats are designed to cause stomach cramps alongside being extremely addictive. $He cannot stop $himself from eating them, but $he can @@.gold;fear@@ your cruelty as $his @@.hotpink;will steadily erodes@@ from the concentrated aphrodisiacs in $his food. - <<set $slaves[$i].devotion += 2, $slaves[$i].trust -= 3>> - <<else>> - The treats are designed to cause stomach cramps alongside being extremely addictive. Since $he is not permitted to eat them, @@.mediumaquamarine;$he breathes a sigh of relief,@@ though $he is fully aware of what happens to those not as fortunate as $him. $He @@.hotpink;tries $his best to be obedient@@ hoping to not undergo the agony, but $his efforts pale in comparison to the effects of the food based aphrodisiacs. - <<set $slaves[$i].devotion++, $slaves[$i].trust++>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<includeDOM App.SlaveAssignment.saSocialEffects($slaves[$i])>> - -<<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")>> - Since $he is in public, your brand against the $slaves[$i].skin skin of $his <<set _brandedSlave = $slaves[$i]>><<print Object.keys(State.temporary.brandedSlave.brand)[0]>> @@.green;slightly increases your reputation@@ as a slaveowner. - <<run repX(5, "futureSocieties", $slaves[$i])>> - <<switch $slaves[$i].assignment>> - <<case "work in the brothel">><<run getSlaveStatisticData($slaves[$i], $facility.brothel).rep += 5>> - <</switch>> - <</if>> - <<if $rep > 10000>> - $His brand is considered a minor enhancement to $his beauty since you are very well liked. - <<elseif $rep < 5000>> - $His brand is considered a minor blemish on $his beauty since you are not well liked. - <</if>> - <</if>> -<</if>> - -/* Disability mental effects */ -<<if $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken">> - <<set _visionFlag = 0>> - <<if getBestVision($slaves[$i]) === 0>> - <<if $slaves[$i].hears <= -2>> - <<if $slaves[$i].devotion > 50>> - Even though $he is blind and deaf, $he is devoted enough to you to allow $himself to lower $his guard. $He becomes @@.mediumaquamarine;trusting@@ of your ability to keep $him safe. - <<set $slaves[$i].trust += 5>> - <<elseif $slaves[$i].devotion > 20>> - Since $he's blind, deaf and on the cusp of devotion, $he becomes @@.hotpink;more reliant@@ on you, but also begins to be @@.mediumaquamarine;less fearful@@ of the world around $him. - <<set $slaves[$i].devotion += 5, $slaves[$i].trust += 3>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - $He may be blind and deaf, but $he knows nobody would dare harm $him under your watch, @@.mediumaquamarine;building $his trust@@ in you. - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].devotion >= -20>> - $His blindness and deafness forces $him to @@.hotpink;entirely rely@@ on your mercy. However, it only @@.gold;amplifies $his fear@@ as $he has only <<if canSmell($slaves[$i])>>the smell of arousal<<else>>a stumbling sense of touch<</if>> to warn of an impending threat. - <<set $slaves[$i].devotion += 10, $slaves[$i].trust -= 30>> - <<else>> - Being blind and deaf forces $him to @@.hotpink;completely rely@@ on your mercy. It does nothing to stem @@.gold;the horror@@ $he faces being unable to sense the world around $him. - <<set $slaves[$i].devotion += 20, $slaves[$i].trust -= 50>> - <</if>> - <<elseif ($slaves[$i].hears == -1 && $slaves[$i].earwear != "hearing aids") || ($slaves[$i].hears == 0 && $slaves[$i].earwear == "muffling ear plugs")>> - <<if $slaves[$i].devotion > 50>> - Even though $he is blind and unable to properly hear, $he is devoted enough to you to allow $himself to lower $his guard. $He becomes @@.mediumaquamarine;trusting@@ of your ability to keep $him safe. - <<set $slaves[$i].trust += 4>> - <<elseif $slaves[$i].devotion > 20>> - Since $he's blind, hard of hearing and on the cusp of devotion, $he becomes @@.hotpink;more reliant@@ on you, but also begins to be @@.mediumaquamarine;less fearful@@ of the world around $him. - <<set $slaves[$i].devotion += 4, $slaves[$i].trust += 2>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - $He may be blind and hard of hearing, but $he knows nobody would dare harm $him under your watch, @@.mediumaquamarine;building $his trust@@ in you. - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].devotion >= -20>> - $His blindness and trouble hearing forces $him to @@.hotpink;rely@@ on your mercy. However, it only @@.gold;amplifies $his fear@@ as $he strains to hear anything potential threats to $him. - <<set $slaves[$i].devotion += 7, $slaves[$i].trust -= 20>> - <<else>> - Being blind and hard of hearing forces $him to @@.hotpink;rely@@ on your mercy. It does nothing to stem @@.gold;the terrible sounds@@ $he struggles to hear. - <<set $slaves[$i].devotion += 10, $slaves[$i].trust -= 25>> - <</if>> - <<else>> - <<if $slaves[$i].devotion > 50>> - Even though $he is blind, $he is devoted enough to you to allow $himself to lower $his guard. $He becomes @@.mediumaquamarine;trusting@@ of your ability to keep $him safe. - <<set $slaves[$i].trust += 3>> - <<elseif $slaves[$i].devotion > 20>> - Since $he's blind and on the cusp of devotion, $he becomes slightly @@.hotpink;more reliant,@@ but also begins to be @@.mediumaquamarine;less fearful@@ of what $he can't see. - <<set $slaves[$i].devotion += 3, $slaves[$i].trust += 1>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - $He may be blind, but $he knows nobody would dare harm $him under your watch, @@.mediumaquamarine;building $his trust@@ in you. - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].devotion >= -20>> - $His blindness forces $him to @@.hotpink;rely@@ on your mercy. However, it only @@.gold;amplifies $his fear@@ as $he has severely limited capabilities to defend $himself. - <<set $slaves[$i].devotion += 5, $slaves[$i].trust -= 10>> - <<else>> - Being blind forces $him to @@.hotpink;completely rely@@ on your mercy. It does nothing to stem @@.gold;the terror@@ $he faces constantly being unable to tell what will happen to $him. - <<set $slaves[$i].devotion += 10, $slaves[$i].trust -= 25>> - <</if>> - <</if>> - <<set _visionFlag = -2>> - <<elseif getBestVision($slaves[$i]) === 1>> - <<if !canSeePerfectly($slaves[$i])>> - <<if $slaves[$i].devotion > 50>> - $His vision may be clouded but it doesn't get in the way of $his devotion to you. - <<elseif $slaves[$i].devotion > 20>> - Since $he's on the cusp of devotion, $his blurred vision makes $him @@.hotpink;slightly more submissive,@@ since $he can't always see what's happening to $him. - <<set $slaves[$i].devotion += 1>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - $His blurred vision @@.hotpink;reduces $his distaste for $his life slightly,@@ since $his fuzzy vision allows $him to ignore the details of everyone $he's expected to fuck. - <<set $slaves[$i].devotion += 1>> - <<else>> - $His blurred vision tends to make $him @@.gold;a little more fearful,@@ since $he can never tell what's about to happen to $him. - <<set $slaves[$i].trust -= 1>> - <</if>> - <<set _visionFlag = -1>> - <</if>> - <<elseif getBestVision($slaves[$i]) === 2>> - <<if !canSeePerfectly($slaves[$i])>> - <<if $slaves[$i].devotion > 50>> - $He tolerates the annoyance of blurred vision induced by $his eyewear. - <<elseif $slaves[$i].devotion > 20>> - Since $he's on the cusp of devotion, the blurred vision induced by $his eyewear actually makes $him @@.hotpink;slightly more submissive.@@ - <<set $slaves[$i].devotion += 1>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - The blurred vision induced by $his eyewear actually @@.hotpink;reduces $his distaste for $his life slightly,@@ since $his fuzzy vision allows $him to ignore the details of everyone $he's expected to fuck. - <<set $slaves[$i].devotion += 1>> - <<else>> - The blurred vision induced by $his eyewear actually @@.mediumorchid;infuriates $him.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <<set _visionFlag = -1>> - <</if>> - <</if>> - <<if _visionFlag == -1>> - <<if $slaves[$i].hears == -2>> - <<if $slaves[$i].devotion > 50>> - Since $he is also deaf, $he begins to @@.mediumaquamarine;rely@@ on you to give $him the feedback $his body does cannot. - <<set $slaves[$i].trust += 3>> - <<elseif $slaves[$i].devotion > 20>> - Since $he is also deaf, $he becomes @@.hotpink;very reliant@@ on you, but also begins to @@.mediumaquamarine;trust@@ you to convey what $his body does not. - <<set $slaves[$i].devotion += 3, $slaves[$i].trust += 3>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - Since $he is also deaf, $he views you as $his @@.mediumaquamarine;blurry guardian.@@ - <<set $slaves[$i].trust += 5>> - <<elseif $slaves[$i].devotion >= -20>> - Since $he is also deaf, $he @@.gold;descends into paranoia@@ as every blurry shape could be out to get $him. - <<set $slaves[$i].trust -= 20>> - <<else>> - Since $he is also deaf, $he @@.gold;delves into the depths of paranoia@@ as every blurry shape could be out to get $him. $He becomes increasingly @@.mediumorchid;hateful@@ to those around $him in an effort to ward off threats. - <<set $slaves[$i].trust -= 30, $slaves[$i].devotion -= 10>> - <</if>> - <<elseif $slaves[$i].hears == -1>> - <<if ($slaves[$i].earwear != "hearing aids")>> - <<if $slaves[$i].devotion > 50>> - $His hearing may be muddled too, but $he doesn't let it bother $him. - <<elseif $slaves[$i].devotion > 20>> - Since $he is also hard of hearing, $he is forced into @@.hotpink;very submissive state,@@ though @@.gold;worrying thoughts@@ begin to plague $his mind. - <<set $slaves[$i].devotion += 3, $slaves[$i].trust -= 3>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - Since $he is also hard of hearing, $he has a hard time understanding what partners want from $him, often causing them to @@.gold;get forceful@@ with $him. - <<set $slaves[$i].trust -= 5>> - <<else>> - Since $he is also hard of hearing, @@.gold;$he becomes increasingly paranoid@@ since $he can barely discern other's intent any more. - <<set $slaves[$i].trust -= 5>> - <</if>> - <</if>> - <<elseif $slaves[$i].hears == 0>> - <<if ($slaves[$i].earwear == "muffling ear plugs")>> - <<if $slaves[$i].devotion > 50>> - $He tolerates the annoyance of muffled hearing induced by $his ear plugs. - <<elseif $slaves[$i].devotion > 20>> - Since $his hearing is also muffled, $he is forced into @@.hotpink;very submissive state,@@ though @@.gold;worrying thoughts@@ begin to plague $his mind. - <<set $slaves[$i].devotion += 3, $slaves[$i].trust -= 3>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - Since $his hearing is also muffled, $he has a hard time understanding what partners want from $him, often causing them to @@.gold;get forceful@@ with $him. - <<set $slaves[$i].trust -= 5>> - <<else>> - The muffled hearing induced by $his ear plugs @@.mediumorchid;infuriates $him@@ with $his vision problems. - <<set $slaves[$i].devotion -= 5>> - <</if>> - <</if>> - <</if>> - <<elseif _visionFlag != -2>> - <<if $slaves[$i].hears == -2>> - <<if $slaves[$i].devotion > 50>> - Even though $he is deaf, $he is devoted enough to you to allow $himself to lower $his guard. $He becomes @@.mediumaquamarine;trusting@@ of your ability to watch $his back. - <<set $slaves[$i].trust += 1>> - <<elseif $slaves[$i].devotion > 20>> - Since $he's deaf and on the cusp of devotion, $he becomes slightly @@.hotpink;more reliant,@@ but also begins to be @@.mediumaquamarine;less fearful@@ of what is lurking out of sight. - <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - $He may be deaf, but no one can sneak up on $him while $he is with you, @@.mediumaquamarine;developing the trust@@ that you have $his back. - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].devotion >= -20>> - $His deafness forces $him to @@.gold;distrust everyone@@ as everything out of sight is a potential threat to $him. - <<set $slaves[$i].trust -= 10>> - <<else>> - Being deaf forces $him to @@.gold;fear@@ everything $he can't see. At any moment, something could jump on $his back and force $him into position. - <<set $slaves[$i].trust -= 25>> - <</if>> - <<elseif $slaves[$i].hears == -1>> - <<if ($slaves[$i].earwear != "hearing aids")>> - <<if $slaves[$i].devotion > 50>> - $His hearing may be muddled but it doesn't get in the way of $his devotion to you. - <<elseif $slaves[$i].devotion > 20>> - Since $he's on the cusp of devotion, $his muffled hearing makes $him @@.hotpink;slightly more submissive,@@ since $he can't always hear what's going on around $him. - <<set $slaves[$i].devotion += 1>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - $His muffled hearing @@.mediumorchid;reduces $his distaste for $his life slightly,@@ since $his impaired hearing allows $him to ignore the disgusting comments from everyone around $him. - <<set $slaves[$i].devotion += 1>> - <<else>> - $His muffled hearing tends to make $him @@.mediumorchid;a little more fearful,@@ since $he can never tell what people are saying about $him. - <<set $slaves[$i].trust -= 1>> - <</if>> - <</if>> - <<elseif $slaves[$i].hears == 0>> - <<if ($slaves[$i].earwear == "muffling ear plugs")>> - <<if $slaves[$i].devotion > 50>> - $He tolerates the annoyance of muffled hearing induced by $his ear plugs. - <<elseif $slaves[$i].devotion > 20>> - Since $he's on the cusp of devotion, the muffled hearing induced by $his ear plugs actually makes $him @@.hotpink;slightly more submissive.@@ - <<set $slaves[$i].devotion += 1>> - <<elseif ($slaves[$i].assignment == "serve the public") || ($slaves[$i].assignment == "serve in the club") || ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> - The muffled hearing induced by $his ear plugs actually @@.hotpink;reduces $his distaste for $his life slightly,@@ since $his impaired hearing allows $him to ignore the disgusting comments from everyone around $him. - <<set $slaves[$i].devotion += 1>> - <<else>> - The muffled hearing induced by $his ear plugs @@.mediumorchid;irritates $him.@@ - <<set $slaves[$i].devotion -= 1>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<if $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken" && $slaves[$i].muscles < -95>> - <<if $slaves[$i].devotion > 50>> - $He knows $he is near helpless but is devoted enough to you to allow $himself to lower $his guard. $He becomes @@.mediumaquamarine;trusting@@ of your ability to keep $him safe. - <<set $slaves[$i].trust += 3>> - <<elseif $slaves[$i].devotion > 20>> - Since $he's near helpless and on the cusp of devotion, $he becomes slightly @@.hotpink;more reliant,@@ but also begins to be @@.mediumaquamarine;less fearful@@ of what could happen to $him. - <<set $slaves[$i].devotion += 3, $slaves[$i].trust += 1>> - <<elseif ["be your Concubine", "please you", "serve in the master suite"].includes($slaves[$i].assignment)>> - $He may be physically frail and vulnerable, but $he knows nobody would dare harm $him under your watch, @@.mediumaquamarine;building $his trust@@ in you. - <<set $slaves[$i].trust += 2>> - <<elseif $slaves[$i].devotion >= -20>> - $His frailty forces $him to @@.hotpink;rely@@ on your mercy. However, it only @@.gold;amplifies $his fear@@ as $he has no chance of defending $himself. - <<set $slaves[$i].devotion += 5, $slaves[$i].trust -= 10>> - <<else>> - Being frail and near helpless forces $him to @@.hotpink;heavily rely@@ on your mercy. It does nothing to stem @@.gold;the terror@@ $he faces constantly knowing that whatever anyone wants to do to $him, there is nothing $he can do to stop it. - <<set $slaves[$i].devotion += 10, $slaves[$i].trust -= 25>> - <</if>> -<</if>> - -/* LONG TERM PHYSICAL EFFECTS */ -<<= App.SlaveAssignment.longTermPhysicalEffects($slaves[$i])>> - -/* LANGUAGE */ - -<<if ($slaves[$i].accent > 0) && ($slaves[$i].fetish != "mindbroken")>> - <<if $slaves[$i].rules.speech == "restrictive">> - <<set _minweeks = 30 - Math.trunc(($slaves[$i].intelligence+$slaves[$i].intelligenceImplant)/10)>> - <<elseif $slaves[$i].rules.speech == "accent elimination">> - <<set _minweeks = 15 - Math.trunc(($slaves[$i].intelligence+$slaves[$i].intelligenceImplant)/10)>> - <<elseif $slaves[$i].rules.speech == "language lessons">> - <<set _minweeks = 10 - Math.trunc(($slaves[$i].intelligence+$slaves[$i].intelligenceImplant)/10)>> - <<else>> - <<set _minweeks = 20 - Math.trunc(($slaves[$i].intelligence+$slaves[$i].intelligenceImplant)/10)>> - <</if>> - <<if $slaves[$i].voice == 0 || $slaves[$i].lips > 95>> /* can't speak, but slowly picks up language */ - <<set _minweeks += 30>> - <<elseif SlaveStatsChecker.checkForLisp($slaves[$i])>> /* moderate speech impediment */ - <<set _minweeks += 15>> - <</if>> - <<if $slaves[$i].accent == 4>> - <<set _minweeks += 40>> - <</if>> - <<if ($slaves[$i].accent >= 4)>> - <<if ($week - $slaves[$i].weekAcquired) > _minweeks - 5>> - <<set $slaves[$i].accent -= 1>> - <<if $slaves[$i].rules.speech == "language lessons">> - <<set $slaves[$i].rules.speech = "accent elimination">> - <</if>> - <<if $slaves[$i].voice == 0 || $slaves[$i].lips > 95>> - $He has managed to pick up enough $language that @@.green;$he could now barely get $his point across.@@ If $he were able to talk, that is. - <<else>> - $He has managed to pick up enough $language that @@.green;$he can now barely get $his point across.@@ $His accent is horrible, but it's a start. - <</if>> - <</if>> - <<elseif ($slaves[$i].accent >= 3)>> - <<if ($week - $slaves[$i].weekAcquired) > _minweeks>> - <<set $slaves[$i].accent -= 1>> - <<if $slaves[$i].voice == 0 || $slaves[$i].lips > 95>> - $He has managed to pick up enough $language that @@.green;$he's now able to understand most of what $he hears.@@ - <<else>> - $He has managed to pick up enough $language that @@.green;$he's now reasonably fluent in the language.@@ $His accent is quite heavy, but $he can make $himself understood. - <</if>> - <</if>> - <<elseif canTalk($slaves[$i])>> - <<if ($slaves[$i].accent == 2)>> - <<if ($week - $slaves[$i].weekAcquired) > (5 + _minweeks)>> - <<set $slaves[$i].accent -= 1>> - $He has heard and spoken a great deal of $language as your slave. @@.green;$His accent has diminished to a pleasant exoticism.@@ - <</if>> - <<elseif ($slaves[$i].accent == 1) && ($slaves[$i].rules.speech == "accent elimination")>> - <<if ($week - $slaves[$i].weekAcquired) > (10 + _minweeks)>> - <<set $slaves[$i].accent -= 1>> - $He does $his best to speak proper, unaccented $language, as encouraged by the rules. @@.green;$His accent has diminished to imperceptibility.@@ - <</if>> - <</if>> - <</if>> -<</if>> - -/* PRESTIGE */ - -<<if ($slaves[$i].prestige > 0)>> - Merely owning such a prestigious slave @@.green;helps your reputation.@@ - <<run repX((250*$slaves[$i].prestige), "prestigiousSlave", $slaves[$i])>> -<</if>> - -/* App.SlaveAssignment.porn */ -<<if $slaves[$i].porn.prestige == 3>> - $He is the whore people envision when they think of $slaves[$i].porn.fameType porn. $His omnipresence on the internet @@.green;boosts $his owner's reputation.@@ - <<run repX((750*$slaves[$i].porn.prestige), "porn", $slaves[$i])>> - <<set _donations = Math.floor($slaves[$i].porn.viewerCount/(random(13,20)))+(random(-5000,5000))>> - <<if _donations > 0>> - A number of gifts and donations totaling @@.yellowgreen;<<print cashFormat(_donations)>>@@ were also sent to $him, among other things. - <<run cashX(_donations, "porn", $slaves[$i])>> - <</if>> -<<elseif $slaves[$i].porn.feed > 0>> - <<= App.SlaveAssignment.porn($slaves[$i])>> -<</if>> - -<<if $seeAge != 0>> - <<if $slaves[$i].birthWeek >= 51>> - $His birthday was this week<<if $seeAge == 1>>; $he turned <<print $slaves[$i].physicalAge+1>><</if>>. - <<if ($slaves[$i].fuckdoll > 0) || ($slaves[$i].fetish == "mindbroken")>> - $He did not know. - <<elseif $slaves[$i].devotion > 50>> - $He did not notice. - <<elseif $week-$slaves[$i].weekAcquired > 10>> - $He remembered it only dimly. - <<else>> - $He remembered it, but no one cared. - <</if>> - <</if>> - <<if retirementReady($slaves[$i]) && $retiree == 0>> - <<set $retiree = $slaves[$i].ID>> - <</if>> -<</if>> - -<<if $slaves[$i].indenture == 0 && $expiree == 0>> - <<set $expiree = $slaves[$i].ID>> -<</if>> - -<<if $arcologies[0].FSRestart != "unset">> - <<if $slaves[$i].breedingMark == 1 && $propOutcome == 1 && $eugenicsFullControl != 1>> - <<if $slaves[$i].preg > $slaves[$i].pregData.normalBirth/13.33 || $slaves[$i].pregKnown == 1>> - <<if $slaves[$i].pregSource != -1 && $slaves[$i].pregSource != -6>> - $slaves[$i].slaveName's weekly health checkup revealed $he is pregnant with an unacceptable child. @@.red;Its life has been terminated, you have been fined <<print cashFormat(100000)>>, and your rep among the Elite has been severely damaged.@@ - <<run TerminatePregnancy($slaves[$i])>> - <<set $slaves[$i].counter.abortions++>> - <<set $abortionsTotal++>> - <<run cashX(-100000, "fines", $slaves[$i])>> - <<set $failedElite += 150>> - <<if $slaves[$i].abortionTat > -1>> - But hey, $he gets a tattoo signifying $his abortion. Was it worth it? - <<set $slaves[$i].abortionTat++>> - <<run cashX(forceNeg($modCost), "slaveMod", $slaves[$i])>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> - -/*--------------- main labor triggers: -------- */ -<<if $slaves[$i].preg > $slaves[$i].pregData.normalBirth/8>> - <<if $slaves[$i].pregControl != "labor suppressors" && $slaves[$i].assignment != "labor in the production line">> - <<if $slaves[$i].broodmother < 1>> - <<if WombBirthReady($slaves[$i], $slaves[$i].pregData.normalBirth*1.075) > 0>> /*check for really ready fetuses - 43 weeks - max, overdue*/ - <<run startLabor($slaves[$i])>> - <<elseif WombBirthReady($slaves[$i], $slaves[$i].pregData.normalBirth) > 0 && (random(1,100) > 50)>> /*check for really ready fetuses - 40 weeks - normal*/ - <<run startLabor($slaves[$i])>> - <<elseif WombBirthReady($slaves[$i], $slaves[$i].pregData.normalBirth/1.1111) > 0 && (random(1,100) > 90)>> /*check for really ready fetuses - 36 weeks minimum */ - <<run startLabor($slaves[$i])>> - <</if>> - <<else>> - <<if WombBirthReady($slaves[$i], 37)>> /* broodmothers ready at 37 week always */ - <<run startLabor($slaves[$i])>> - <</if>> - <</if>> - <</if>> - - <<if $dangerousPregnancy == 1 && !isInLabor($slaves[$i])>> - <<if ($slaves[$i].assignment != "work in the dairy" || $dairyRestraintsSetting < 2) && $slaves[$i].pregAdaptation < 500 && $slaves[$i].broodmother < 1>> - <<set _miscarriageChance = -10>> - <<set _miscarriageChance += (($slaves[$i].bellyPreg/1000)-$slaves[$i].pregAdaptation)>> /* this could use to not be linear */ - <<if $slaves[$i].inflation > 0>> - <<set _miscarriageChance += 10>> - <</if>> - <<set _miscarriageChance -= ($slaves[$i].curatives == 1 ? 100 : 0)>> - <<if $slaves[$i].health.health < -20>> - <<set _miscarriageChance -= ($slaves[$i].health.health)>> - <<if $slaves[$i].trust < -20>> - <<set _miscarriageChance -= ($slaves[$i].trust/2)>> - <</if>> - <<elseif $slaves[$i].health.health > 80>> - <<set _miscarriageChance -= ($slaves[$i].health.health/10)>> - <</if>> - <<if $slaves[$i].weight < -50>> - <<set _miscarriageChance -= ($slaves[$i].weight)>> - <</if>> - <<if $masterSuitePregnancySlaveLuxuries == 1 && ($slaves[$i].assignment == "serve in the master suite" || $slaves[$i].assignment == "be your Concubine")>> - <<set _miscarriageChance -= 300>> - <<elseif $slaves[$i].assignment == "rest">> - <<set _miscarriageChance -= 100>> - <<elseif $slaves[$i].assignment == "rest in the spa">> - <<set _miscarriageChance -= 50>> - <<elseif $slaves[$i].assignment == "get treatment in the clinic">> - <<if _S.Nurse>> - <<set _miscarriageChance -= 200>> - <<else>> - <<set _miscarriageChance -= 150>> - <</if>> - <</if>> - <<if $slaves[$i].bellyAccessory == "a support band">> - <<set _miscarriageChance -= 30>> - <</if>> - <<if $slaves[$i].pregControl == "slow gestation">> - <<set _miscarriageChance -= 100>> - <<elseif $slaves[$i].pregControl == "labor suppressors">> - <<set _miscarriageChance -= 10000>> - <<elseif $slaves[$i].pregControl == "speed up">> - <<if _miscarriageChance > 0>> - <<set _miscarriageChance *= 2>> - <</if>> - <</if>> - <<set _miscarriageChance = Math.round(_miscarriageChance)>> - <<if _miscarriageChance > random(0,100)>> - <<set _chance = random(1,100)>> - <<if $slaves[$i].preg >= $slaves[$i].pregData.normalBirth/1.33>> - <<run startLabor($slaves[$i])>> - <<set _miscarriage = 1>> - <<elseif $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.48>> - <<set $slaves[$i].prematureBirth = 1>> - <<run startLabor($slaves[$i])>> - <<set _miscarriage = 1>> - <<elseif $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.6 && _chance > 10>> - <<set $slaves[$i].prematureBirth = 1>> - <<run startLabor($slaves[$i])>> - <<set _miscarriage = 1>> - <<elseif $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.73 && _chance > 40>> - <<set $slaves[$i].prematureBirth = 1>> - <<run startLabor($slaves[$i])>> - <<set _miscarriage = 1>> - <<elseif $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.81 && _chance > 75>> - <<set $slaves[$i].prematureBirth = 1>> - <<run startLabor($slaves[$i])>> - <<set _miscarriage = 1>> - <<else>> - $His overwhelmed body has @@.orange;forced $him to miscarry,@@ possibly saving $his life. - <<if lastPregRule($slaves[$i],$defaultRules)>><<set $slaves[$i].preg = -1>><<else>><<set $slaves[$i].preg = 0>><</if>> - <<if $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken">> - <<if $slaves[$i].sexualFlaw == "breeder">> - $He is @@.mediumorchid;filled with violent, all-consuming hatred@@ at $himself for failing to carry to term and you for allowing this to happen. - <<if $slaves[$i].pregType > 4>> - The loss of so many children at once @@.red;shatters the distraught breeder's mind.@@ - <<set $slaves[$i].fetish = "mindbroken", $slaves[$i].behavioralQuirk = "none", $slaves[$i].behavioralFlaw = "none", $slaves[$i].sexualQuirk = "none", $slaves[$i].sexualFlaw = "none", $slaves[$i].devotion = 0, $slaves[$i].trust = 0>> - <<else>> - $He cares little for what punishment awaits $his actions. - <<set $slaves[$i].devotion -= 25*$slaves[$i].pregType>> - <</if>> - <<elseif $slaves[$i].devotion < -50>> - $He is @@.mediumorchid;filled with violent, consuming hatred@@ and @@.gold;fear.@@ Even though $he knew $his bab<<if $slaves[$i].pregType > 1>>ies were<<else>>y was<</if>> likely destined for a slave orphanage, it seems $he cared for <<if $slaves[$i].pregType > 1>>them<<else>>it<</if>> and blames you for the loss. - <<set $slaves[$i].devotion -= 25, $slaves[$i].trust -= 25>> - <<elseif $slaves[$i].devotion < -20>> - $He is @@.mediumorchid;afflicted by desperate, inconsolable grief@@ and @@.gold;horror.@@ Even though $he knew $his bab<<if $slaves[$i].pregType > 1>>ies were<<else>>y was<</if>> likely destined for a slave orphanage, it seems $he cared for <<if $slaves[$i].pregType > 1>>them<<else>>it<</if>>. - <<set $slaves[$i].devotion -= 10, $slaves[$i].trust -= 20>> - <<elseif $slaves[$i].fetish == "pregnancy">> - $He is @@.mediumorchid;filled with deep regret@@ and @@.gold;fear.@@ - <<if $slaves[$i].fetishKnown == 1>> - To a pregnancy fetishist, ending it like this hurts far worse than birth ever would. - <<else>> - It appears $he was more attached to $his baby bump than $he let on and is hurting even more for it. - <</if>> - <<set _fetishModifier = $slaves[$i].fetishStrength/2>> - <<set $slaves[$i].devotion -= 1*_fetishModifier, $slaves[$i].trust -= 1*_fetishModifier>> - <<elseif $slaves[$i].devotion <= 20>> - $He is @@.mediumorchid;consumed by enduring sorrow@@ and @@.gold;horror.@@ Even though $he knew $his bab<<if $slaves[$i].pregType > 1>>ies were<<else>>y was<</if>> likely destined for a slave orphanage, it seems $he cared for <<if $slaves[$i].pregType > 1>>them<<else>>it<</if>>. - <<set $slaves[$i].devotion -= 5, $slaves[$i].trust -= 5>> - <<elseif $slaves[$i].devotion <= 50>> - $He is dully obedient. $He has been broken to slave life so thoroughly that even this is neither surprising nor affecting. - <<else>> - $He is @@.mediumorchid;disappointed by this development@@ and @@.gold;afraid@@ of your reaction. By failing to carry to term, $he has failed your will. - <<set $slaves[$i].devotion -= 10, $slaves[$i].trust -= 10>> - <</if>> - <</if>> - <<set TerminatePregnancy($slaves[$i])>> - <<set $slaves[$i].counter.abortions++>> - <<set $abortionsTotal++>> - <<if $slaves[$i].abortionTat > -1>> - <<set $slaves[$i].abortionTat++>> - The temporary tattoo of a child has been replaced with $his <<= ordinalSuffix($slaves[$i].abortionTat)>> crossed out infant. - <<run cashX(forceNeg($modCost), "slaveMod", $slaves[$i])>> - <</if>> - <<set _miscarriage = 1>> - <</if>> - <</if>> - <</if>> - <<if $seeExtreme == 1>> - <<if _miscarriage != 1 && $slaves[$i].bellyPreg >= 100000 && $slaves[$i].geneMods.rapidCellGrowth != 1>> /* If $he can't relieve the pressure that way, will $he hold? */ - <<if $slaves[$i].bellyPreg >= 500000 || $slaves[$i].wombImplant != "restraint">> - <<if (($slaves[$i].belly > ($slaves[$i].pregAdaptation*3200)) || $slaves[$i].bellyPreg >= 500000)>> - <<set _burstChance = -80>> - <<set _burstChance += (($slaves[$i].belly/1000)-$slaves[$i].pregAdaptation)>> /* this could use to not be linear */ - <<if $slaves[$i].health.health < -20>> - <<set _burstChance -= ($slaves[$i].health.health)>> - <<elseif $slaves[$i].health.health > 80>> - <<set _burstChance -= ($slaves[$i].health.health/10)>> - <</if>> - <<if $slaves[$i].weight < 0>> - <<set _burstChance -= $slaves[$i].weight>> - <</if>> - <<set _burstChance -= $slaves[$i].bellySag>> - <<set _burstChance -= $slaves[$i].muscles>> - <<if $slaves[$i].bellyAccessory == "a support band">> - <<set _burstChance -= 10>> - <</if>> - <<if $slaves[$i].pregControl == "slow down">> - <<set _burstChance -= 20>> - <</if>> - <<if $slaves[$i].assignment == "get treatment in the clinic">> - <<if _S.Nurse>> - <<set _burstChance -= 100>> - <<else>> - <<set _burstChance -= 30>> - <</if>> - <<elseif $slaves[$i].assignment == "work in the dairy" && $dairyPregSetting == 3>> - <<set _burstChance -= 250>> - <</if>> - <<if $slaves[$i].pregControl == "speed up">> - <<if _burstChance > 0>> - <<set _burstChance *= 4>> - <</if>> - <</if>> - <<set _burstChance = Math.round(_burstChance)>> - <<if _burstChance > random(0,100)>> - <<run burst($slaves[$i])>> - <<else>> - Constant @@.red;<<if $slaves[$i].geneticQuirks.uterineHypersensitivity == 2>>painful orgasms<<else>>sharp pains<</if>>@@ from $his womb strongly suggest @@.red;$his body is beginning to break.@@ - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> - -<<run endWeekHealthDamage($slaves[$i])>> - -<<if burstCheck($slaves[$i])>> - <<set $burstee = 1>> -<<else>> - <<if $slaves[$i].health.health <= -90 && $slaves[$i].assignment != "get treatment in the clinic">> - <<set _deathSeed = ($slaves[$i].health.health-$slaves[$i].physicalAge-($slaves[$i].chem*2)-($slaves[$i].addict*2))>> - <<if $slaves[$i].weight < -50 || $slaves[$i].weight > 95>> - <<set _deathSeed -= 100>> - <</if>> - <<if $slaves[$i].weight > 190>> - <<set _deathSeed -= 100>> - <</if>> - <<if $slaves[$i].aphrodisiacs > 0>> - <<set _deathSeed -= (75*$slaves[$i].aphrodisiacs)>> - <</if>> - <<if $slaves[$i].inflationType == "aphrodisiac">> - <<set _deathSeed -= (100*$slaves[$i].inflation)>> - <</if>> - <<if $slaves[$i].curatives == 1>> - <<set _deathSeed += 200>> - <</if>> - <<if random(1,1000) > (400+_deathSeed)>> - <<run planDeath($slaves[$i], "health")>> - <</if>> - <<if ($slaves[$i].aphrodisiacs > 0 || $slaves[$i].inflationType == "aphrodisiac") && random(1,1000) > (200+_deathSeed)>> - <<run planDeath($slaves[$i], "OD")>> - <</if>> - <</if>> - <<if $seeAge == 1>> - <<set _deathSeed = (($slaves[$i].health.health*2)-($slaves[$i].physicalAge*2)-($slaves[$i].chem*4)-($slaves[$i].addict*3))>> - <<if $slaves[$i].physicalAge >= Math.max((70+($slaves[$i].health.health/5)-($slaves[$i].addict)-($slaves[$i].chem/20)),50) && random(1,1000) > 800+_deathSeed>> - <<run planDeath($slaves[$i], "old")>> - <</if>> - <</if>> -<</if>> - -<<if (($slaves[$i].hStyle != "shaved" || $slaves[$i].hStyle != "buzzcut" || $slaves[$i].hStyle != "trimmed") && $slaves[$i].bald != 1 && $slaves[$i].haircuts == 0)>> - <<if ($slaves[$i].hLength < 150)>> - <<set $slaves[$i].hLength += 1>> - <</if>> -<</if>> - -<<if $slaves[$i].aphrodisiacs === -1 && $slaves[$i].energy - _oldEnergy > _maxEnergyGain>>Anaphrodisiacs @@.red;limit $his sex drive.@@<<set $slaves[$i].energy = _oldEnergy + _maxEnergyGain>><</if>> diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw index d9e4bdad4ad2cc7a3d5b777d9476210d2012ab16..0344e2cfc87586c7dc9dde1f28e33a4d586f971c 100644 --- a/src/uncategorized/spaReport.tw +++ b/src/uncategorized/spaReport.tw @@ -234,7 +234,7 @@ <<run tired(_S.Attendant)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_S.Attendant)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_S.Attendant)>> <<= App.SlaveAssignment.drugs(_S.Attendant)>> <<= App.SlaveAssignment.relationships(_S.Attendant)>> <<= App.SlaveAssignment.rivalries(_S.Attendant)>> @@ -244,8 +244,8 @@ <<run App.SlaveAssignment.choosesOwnClothes(_S.Attendant)>> <<run tired(_S.Attendant)>> <<include "SA rules">> - <<= App.SlaveAssignment.diet(_S.Attendant)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.diet(_S.Attendant)>> + <<run App.SlaveAssignment.longTermEffects(_S.Attendant)>> <<run App.SlaveAssignment.drugs(_S.Attendant)>> <<run App.SlaveAssignment.relationships(_S.Attendant)>> <<run App.SlaveAssignment.rivalries(_S.Attendant)>> @@ -343,7 +343,7 @@ <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> <<include "SA rules">> <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> <<= App.SlaveAssignment.drugs(_slave)>> <<= App.SlaveAssignment.relationships(_slave)>> <<= App.SlaveAssignment.rivalries(_slave)>> @@ -355,7 +355,7 @@ <<run App.SlaveAssignment.rest(_slave)>> <<include "SA rules">> <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> + <<run App.SlaveAssignment.longTermEffects(_slave)>> <<run App.SlaveAssignment.drugs(_slave)>> <<run App.SlaveAssignment.relationships(_slave)>> <<run App.SlaveAssignment.rivalries(_slave)>>