diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index b7c8bba5af347186763c1e01580cbb1251250b37..8a570c30a6217226617d1415c0615415f8522b1b 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -345,11 +345,192 @@ declare namespace FC { // black magic to make TypeScript understand that App.Entity.SlaveState is a type type SlaveState = InstanceType<typeof App.Entity.SlaveState>; - enum NoSlave { - value = 0 + type FSPolicy = number | "unset"; + + interface ArcologyState { + name: string; + direction: number; + government: string; + leaderID: number; + honeymoon: number; + prosperity: number; + ownership: number; + minority: number; + PCminority: number; + demandFactor: number; + FSSupremacist: FSPolicy; + FSSupremacistRace: FSPolicy; + FSSubjugationist: FSPolicy; + FSSubjugationistRace: FSPolicy; + 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; + 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; + 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; + 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; + FSRestartResearchPassed: 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; } - type SlaveStateOrZero = SlaveState | NoSlave; + type SlaveStateOrZero = SlaveState | 0; type DefaultGameStateVariables = typeof App.Data.defaultGameStateVariables; type ResetOnNGPVariables = typeof App.Data.resetOnNGPlus; diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index ab9f61c9c0ceabad1afcf5c84b22df9fad874178..f8a874ca32a346d390341dc6c2119047d06965b0 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -574,17 +574,20 @@ App.Data.resetOnNGPlus = { rulesCost: 0, modCost: 0, surgeryCost: 0, + /** @type {FC.ArcologyState[]} */ arcologies: [], HackingSkillMultiplier: 0, upgradeMultiplierArcology: 0, upgradeMultiplierMedicine: 0, upgradeMultiplierTrade: 0, nationalities: {}, + /** @type {Object.<string, number[]>} */ JobIDArray: {}, averageTrust: 0, averageDevotion: 0, enduringTrust: 0, enduringDevotion: 0, + /** @type {App.RA.Rule[]} */ defaultRules: [], REFeminizationCheckinIDs: [], @@ -1012,7 +1015,7 @@ App.Data.resetOnNGPlus = { weddingPlanned: 0, personalAttention: "sex", - /** @type {FC.SlaveStateOrZero} */ + /** @type {FC.SlaveStateOrZero} */ HeadGirl: 0, HGTimeInGrade: 0, HGEnergy: 0, diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 7d14770af206a9f0a9c9e452f7d6c198a9d9451e..7952797bbcd4cf793cf957f87ac255ac0f22a2f7 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -239,7 +239,7 @@ globalThis.newSlave = function(slave) { /* special case for dulling intelligence via drugs in slave acquisition */ if (slave.dullIntelligence) { slave.intelligence = -100; - slave.dullIntelligence = null; + delete slave.dullIntelligence; } if (slave.assignment) { diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js index 3f763f9f18a1beb3884f3ecb643bfab68675d7bf..8d8c6e232db9e6930e95caababa6ba48dddefa3a 100644 --- a/src/js/slaveSummaryHelpers.js +++ b/src/js/slaveSummaryHelpers.js @@ -191,9 +191,13 @@ App.UI.SlaveSummaryImpl = function() { return s.charAt(0).toUpperCase() + s.charAt(1) + s.charAt(2); } + /** + * @param {FC.ArcologyState} arcology + */ function syncFSData(arcology) { arcology = arcology || V.arcologies[0]; for (const fsp of App.Data.misc.FutureSocieties) { + /** @type {FC.FSPolicy} */ const policy = arcology[fsp]; const p = fsp.slice(2); FSData.policy[p] = { diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js index 9ad2c095648f8c4bcae5fc6cd06ac1b37f18401f..a4e164f4b5b78184c147bd750533030f89995935 100644 --- a/src/js/statsChecker/statsChecker.js +++ b/src/js/statsChecker/statsChecker.js @@ -38,7 +38,7 @@ globalThis.SlaveStatsChecker = (function() { /* call as SlaveStatsChecker.checkForLisp() */ function hasLisp(slave) { - if (State.variables.disableLisping === 1 || !canTalk(slave)) { + if (V.disableLisping === 1 || !canTalk(slave)) { return false; } return (slave.lips > 70 || (slave.lipsPiercing + slave.tonguePiercing > 2) || slave.teeth === "gapped"); @@ -245,7 +245,7 @@ globalThis.SlaveStatsChecker = (function() { */ globalThis.isSlim = function(slave) { let slim = false; - const ArcologyZero = State.variables.arcologies[0]; + const ArcologyZero = V.arcologies[0]; if (ArcologyZero.FSSlimnessEnthusiastLaw === 1) { return (slimLawPass(slave) === 1); diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js index f4de4b5aab932f2d16c346a8e5e2d3c7cce5dca1..f9755534ef33b849004afefcc3cfa70dea41fa7a 100644 --- a/src/js/utilsFC.js +++ b/src/js/utilsFC.js @@ -647,9 +647,9 @@ globalThis.Height = (function() { /** * @param {string|{nationality: string, race: string, genes: string, physicalAge: number, birthWeek: number}} nationality - * @param {string} race - * @param {string} genes - * @param {number} age + * @param {string} [race] + * @param {string} [genes] + * @param {number} [age] * @returns {number} */ const _meanHeight = function(nationality, race, genes, age) {