diff --git a/js/003-data/futureSocietyData.js b/js/003-data/futureSocietyData.js new file mode 100644 index 0000000000000000000000000000000000000000..c0983c1961684f68d8061c75650a1d3190d694c2 --- /dev/null +++ b/js/003-data/futureSocietyData.js @@ -0,0 +1,73 @@ +App.Data.FutureSociety = { + /** Each future society contains a record here, along with a noun and adjective form for use in printed text, and the decoration string (normally also an adjective form). + * Most of the automatic mechanics for FS adoption, influence, facility decoration, etc, are handled directly from this data; flavor text is not. + * @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj, deco: FC.FutureSocietyDeco, NPCOnly?: boolean}>} */ + records: ({ + FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist", deco: "Supremacist"}, + FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist", deco: "Subjugationist"}, + FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist", deco: "Gender Radicalist"}, + FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist", deco: "Gender Fundamentalist"}, + FSDegradationist: {noun: "Degradationism", adj: "Degradationist", deco: "Degradationist"}, + FSPaternalist: {noun: "Paternalism", adj: "Paternalist", deco: "Paternalist"}, + FSBodyPurist: {noun: "Body Purism", adj: "Body Purist", deco: "Body Purist"}, + FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist", deco: "Transformation Fetishist"}, + FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist", deco: "Youth Preferentialist"}, + FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist", deco: "Maturity Preferentialist"}, + FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast", deco: "Slimness Enthusiast"}, + FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist", deco: "Asset Expansionist"}, + FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist", deco: "Pastoralist"}, + FSCummunism: {noun: "Cummunism", adj: "Cummunist", deco: "", NPCOnly: true}, + FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist", deco: "Physical Idealist"}, + FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist", deco: "Hedonistic"}, + FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist", deco: "Chattel Religionist"}, + FSNull: {noun: "Multiculturalism", adj: "Multiculturalist", deco: ""}, + FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist", deco: "", NPCOnly: true}, + FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist", deco: "Roman Revivalist"}, + FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist", deco: "Neo-Imperialist"}, + FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist", deco: "Egyptian Revivalist"}, + FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist", deco: "Edo Revivalist"}, + FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist", deco: "Arabian Revivalist"}, + FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist", deco: "Chinese Revivalist"}, + FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist", deco: "Aztec Revivalist"}, + FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist", deco: "Repopulationist"}, + FSRestart: {noun: "Eugenics", adj: "Eugenics", deco: "Eugenics"}, + FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency", deco: "Intellectual Dependency"}, + FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional", deco: "Slave Professionalism"}, + FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration", deco: "Petite Admiration"}, + FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification", deco: "Statuesque Glorification"} + }), + + /** Each subarray in this array contains a set of Future Societies which are to be considered mutually exclusive. + * They cannot be adopted at the same time by the same arcology, and if adopted by different arcologies, + * will automatically conflict and reduce diplomatic relations. */ + mutexGroups: ( /** @returns {FC.FutureSociety[][]} */ function() { + /* this tiny-but-hideous IIFE is the only way I can get typechecking to work properly here, without a JSDoc equivalent to TS "as const" to prevent literal type widening */ + return [ + [ "FSSupremacist" ], + [ "FSSubjugationist" ], + [ "FSGenderRadicalist", "FSGenderFundamentalist" ], + [ "FSDegradationist", "FSPaternalist" ], + [ "FSBodyPurist", "FSTransformationFetishist" ], + [ "FSYouthPreferentialist", "FSMaturityPreferentialist" ], + [ "FSSlimnessEnthusiast", "FSAssetExpansionist" ], + [ "FSPastoralist", "FSCummunism" ], + [ "FSPhysicalIdealist", "FSHedonisticDecadence" ], + [ "FSChattelReligionist", "FSNull" ], + [ "FSIncestFetishist" ], + [ "FSRomanRevivalist", "FSNeoImperialist", "FSEgyptianRevivalist", "FSEdoRevivalist", "FSArabianRevivalist", "FSChineseRevivalist", "FSAztecRevivalist" ], + [ "FSRepopulationFocus", "FSRestart" ], + [ "FSIntellectualDependency", "FSSlaveProfessionalism" ], + [ "FSPetiteAdmiration", "FSStatuesqueGlorification"] + ]; + })(), + + /** @type {FC.FutureSociety[]} */ + fsNames: [], + + /** @type {FC.FutureSociety[]} */ + playerFSNames: [] +}; + +/* -- auto-populate derived lists from records -- */ +App.Data.FutureSociety.fsNames = /** @type {FC.FutureSociety[]} */ (Object.keys(App.Data.FutureSociety.records)); +App.Data.FutureSociety.playerFSNames = App.Data.FutureSociety.fsNames.filter(fs => !App.Data.FutureSociety.records[fs].NPCOnly); diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js index 0c8a7ae7e12f768ba2ad37b6683e286ded90c31d..a0a906213fdd4bb2278d7f912445f137d778ccbd 100644 --- a/js/003-data/miscData.js +++ b/js/003-data/miscData.js @@ -1830,8 +1830,6 @@ App.Data.misc = { "Vatican": 1 }, - FutureSocieties: ["FSArabianRevivalist", "FSAssetExpansionist", "FSAztecRevivalist", "FSBodyPurist", "FSChattelReligionist", "FSChineseRevivalist", "FSDegradationist", "FSEdoRevivalist", "FSEgyptianRevivalist", "FSGenderFundamentalist", "FSGenderRadicalist", "FSHedonisticDecadence", "FSIntellectualDependency", "FSMaturityPreferentialist", "FSNeoImperialist", "FSNull", "FSPastoralist", "FSPaternalist", "FSPetiteAdmiration", "FSPhysicalIdealist", "FSRepopulationFocus", "FSRestart", "FSRomanRevivalist", "FSSlaveProfessionalism", "FSSlimnessEnthusiast", "FSStatuesqueGlorification", "FSSubjugationist", "FSSupremacist", "FSTransformationFetishist", "FSYouthPreferentialist"], - badWords: ["anus", "ass", "bitch", "boob", "butt", "cock", "crap", "cum", "cunny", "cunt", "dick", "fuck", "jizz", "junk", "piss", "prick", "pussy", "shit", "slave", "slut", "tit", "trash", "whore"], badNames: ["Ass Kisser", "Ass Licker", "Ass", "Assfucker", "Asshole", "Ballsack", "Bastard", "Beta", "Bitch", "Cock", "Cocksucker", "Coward", "Creep", "Cum Rag", "Cunt", "Degenerate", "Despoiler", "Dick", "Dickhead", "Dicksucker", "Dickweed", "Dipshit", "Douchebag", "Dumbass", "DumbFuck", "Dunderfuck", "Dyke", "Faggot", "Fucker", "Fuckface", "Fuckhead", "Fucko", "Fucktard", "Fuckwit", "Idiot", "Inbred", "Jackass", "Jerk", "Jizz Stain", "Loser", "Moron", "Motherfucker", "Nutsack", "Pissbaby", "Prick", "Pussy", "Rapist", "Ratfuck", "Retard", "Ruiner", "Schmuck", "Scumbag", "Shitbird", "Shithead", "Slave", "Slaver", "Sleazeball", "Slut", "Sodomite", "Thundercunt", "Traitor", "Trash", "Whore", "Wimp"], diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index 89659896077c38ff0ae7ff92c64300cd63c95a55..44eee5b6c0da95feeab4e1aa6e9b540743159441 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1323,7 +1323,8 @@ globalThis.PCDatatypeCleanup = function() { PC.buttImplantType = "none"; } if (V.PC.customTitle === "") { - V.PC.customTitle = undefined, V.PC.customTitleLisp = undefined; + V.PC.customTitle = undefined; + V.PC.customTitleLisp = undefined; } if (typeof V.PC.counter.oral === "undefined") { V.PC.counter.oral = 0; @@ -2322,161 +2323,57 @@ App.Update.FScheatDatatypeCleanup = function() { V.arcologies[0].FSChineseRevivalistDecoration = Number(V.arcologies[0].FSChineseRevivalistDecoration) || 0; V.arcologies[0].FSChineseRevivalistLaw = Number(V.arcologies[0].FSChineseRevivalistLaw) || 0; } - for (let _fscdc = 0; _fscdc < setup.FutureSocieties.length; _fscdc++) { - if (!(V.arcologies[0][setup.FutureSocieties[_fscdc]] > 0)) { - FutureSocieties.remove(setup.FutureSocieties[_fscdc]); + for (const society of App.Data.FutureSociety.playerFSNames) { + if (!(V.arcologies[0][society] > 0)) { + FutureSocieties.remove(society); } } }; App.Update.neighborArcologyCheatDatatypeCleanup = function() { - let _l = V.arcologies.length; - for (let _i = 1; _i < _l; _i++) { - if (typeof V.arcologies[_i].government !== 'string') { - V.arcologies[_i].government = "an individual"; - } - V.arcologies[_i].honeymoon = Number(V.arcologies[_i].honeymoon) || 0; - V.arcologies[_i].prosperity = Number(V.arcologies[_i].prosperity) || 0; - V.arcologies[_i].ownership = Number(V.arcologies[_i].ownership) || 0; - V.arcologies[_i].minority = Number(V.arcologies[_i].minority) || 0; - V.arcologies[_i].PCminority = Number(V.arcologies[_i].PCminority) || 0; - V.arcologies[_i].demandFactor = Number(V.arcologies[_i].demandFactor) || 0; - if (V.arcologies[_i].FSSupremacist !== "unset") { - V.arcologies[_i].FSSupremacist = Number(V.arcologies[_i].FSSupremacist) || "unset"; - } - if (V.arcologies[_i].FSSupremacist !== "unset" && !setup.filterRacesLowercase.includes(V.arcologies[_i].FSSupremacistRace)) { - V.arcologies[_i].FSSupremacistRace = setup.filterRacesLowercase.random(); - } - if (V.arcologies[_i].FSSubjugationist !== "unset") { - V.arcologies[_i].FSSubjugationist = Number(V.arcologies[_i].FSSubjugationist) || "unset"; - } - if (V.arcologies[_i].FSSubjugationist !== "unset" && !setup.filterRacesLowercase.includes(V.arcologies[_i].FSSubjugationistRace)) { - V.arcologies[_i].FSSubjugationistRace = setup.filterRacesLowercase.random(); - } - if (V.arcologies[_i].FSGenderRadicalist !== "unset") { - V.arcologies[_i].FSGenderRadicalist = Number(V.arcologies[_i].FSGenderRadicalist) || "unset"; - V.arcologies[_i].FSGenderFundamentalist = "unset"; - } - if (V.arcologies[_i].FSGenderFundamentalist !== "unset") { - V.arcologies[_i].FSGenderFundamentalist = Number(V.arcologies[_i].FSGenderFundamentalist) || "unset"; - V.arcologies[_i].FSGenderRadicalist = "unset"; - } - if (V.arcologies[_i].FSPaternalist !== "unset") { - V.arcologies[_i].FSPaternalist = Number(V.arcologies[_i].FSPaternalist) || "unset"; - V.arcologies[_i].FSDegradationist = "unset"; - } - if (V.arcologies[_i].FSDegradationist !== "unset") { - V.arcologies[_i].FSDegradationist = Number(V.arcologies[_i].FSDegradationist) || "unset"; - V.arcologies[_i].FSPaternalist = "unset"; - } - if (V.arcologies[_i].FSBodyPurist !== "unset") { - V.arcologies[_i].FSBodyPurist = Number(V.arcologies[_i].FSBodyPurist) || "unset"; - V.arcologies[_i].FSTransformationFetishist = "unset"; - } - if (V.arcologies[_i].FSTransformationFetishist !== "unset") { - V.arcologies[_i].FSTransformationFetishist = Number(V.arcologies[_i].FSTransformationFetishist) || "unset"; - V.arcologies[_i].FSBodyPurist = "unset"; - } - if (V.arcologies[_i].FSYouthPreferentialist !== "unset") { - V.arcologies[_i].FSYouthPreferentialist = Number(V.arcologies[_i].FSYouthPreferentialist) || "unset"; - V.arcologies[_i].FSMaturityPreferentialist = "unset"; - } - if (V.arcologies[_i].FSMaturityPreferentialist !== "unset") { - V.arcologies[_i].FSMaturityPreferentialist = Number(V.arcologies[_i].FSMaturityPreferentialist) || "unset"; - V.arcologies[_i].FSYouthPreferentialist = "unset"; - } - if (V.arcologies[_i].FSSlimnessEnthusiast !== "unset") { - V.arcologies[_i].FSSlimnessEnthusiast = Number(V.arcologies[_i].FSSlimnessEnthusiast) || "unset"; - V.arcologies[_i].FSAssetExpansionist = "unset"; - } - if (V.arcologies[_i].FSAssetExpansionist !== "unset") { - V.arcologies[_i].FSAssetExpansionist = Number(V.arcologies[_i].FSAssetExpansionist) || "unset"; - V.arcologies[_i].FSSlimnessEnthusiast = "unset"; - } - if (V.arcologies[_i].FSPastoralist !== "unset") { - V.arcologies[_i].FSPastoralist = Number(V.arcologies[_i].FSPastoralist) || "unset"; - } - if (V.arcologies[_i].FSPhysicalIdealist !== "unset") { - V.arcologies[_i].FSPhysicalIdealist = Number(V.arcologies[_i].FSPhysicalIdealist) || "unset"; - V.arcologies[_i].FSHedonisticDecadence = "unset"; - } - if (V.arcologies[_i].FSHedonisticDecadence !== "unset") { - V.arcologies[_i].FSHedonisticDecadence = Number(V.arcologies[_i].FSHedonisticDecadence) || "unset"; - V.arcologies[_i].FSPhysicalIdealist = "unset"; - } - if (V.arcologies[_i].FSChattelReligionist !== "unset") { - V.arcologies[_i].FSChattelReligionist = Number(V.arcologies[_i].FSChattelReligionist) || "unset"; - } - if (V.arcologies[_i].FSRomanRevivalist !== "unset") { - V.arcologies[_i].FSRomanRevivalist = Number(V.arcologies[_i].FSRomanRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSEgyptianRevivalist = "unset"; - } - if (V.arcologies[_i].FSNeoImperialist !== "unset") { - V.arcologies[_i].FSNeoImperialist = Number(V.arcologies[_i].FSNeoImperialist) || "unset"; - V.arcologies[_i].FSRomanRevivalist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSEgyptianRevivalist = "unset"; - } - if (V.arcologies[_i].FSAztecRevivalist !== "unset") { - V.arcologies[_i].FSAztecRevivalist = Number(V.arcologies[_i].FSAztecRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSEgyptianRevivalist = V.arcologies[_i].FSRomanRevivalist = "unset"; - } - if (V.arcologies[_i].FSEgyptianRevivalist !== "unset") { - V.arcologies[_i].FSEgyptianRevivalist = Number(V.arcologies[_i].FSEgyptianRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSRomanRevivalist = "unset"; - } - if (V.arcologies[_i].FSEdoRevivalist !== "unset") { - V.arcologies[_i].FSEdoRevivalist = Number(V.arcologies[_i].FSEdoRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEgyptianRevivalist = V.arcologies[_i].FSRomanRevivalist = "unset"; - } - if (V.arcologies[_i].FSArabianRevivalist !== "unset") { - V.arcologies[_i].FSArabianRevivalist = Number(V.arcologies[_i].FSArabianRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSChineseRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSEgyptianRevivalist = V.arcologies[_i].FSRomanRevivalist = "unset"; - } - if (V.arcologies[_i].FSChineseRevivalist !== "unset") { - V.arcologies[_i].FSChineseRevivalist = Number(V.arcologies[_i].FSChineseRevivalist) || "unset"; - V.arcologies[_i].FSNeoImperialist = V.arcologies[_i].FSArabianRevivalist = V.arcologies[_i].FSAztecRevivalist = V.arcologies[_i].FSEdoRevivalist = V.arcologies[_i].FSEgyptianRevivalist = V.arcologies[_i].FSRomanRevivalist = "unset"; - } - if (V.arcologies[_i].FSNull !== "unset") { - V.arcologies[_i].FSNull = Number(V.arcologies[_i].FSNull) || "unset"; - } - if (V.arcologies[_i].FSRepopulationFocus !== "unset") { - V.arcologies[_i].FSRepopulationFocus = Number(V.arcologies[_i].FSRepopulationFocus) || "unset"; - V.arcologies[_i].FSRestart = "unset"; - } - if (V.arcologies[_i].FSRestart !== "unset") { - V.arcologies[_i].FSRestart = Number(V.arcologies[_i].FSRestart) || "unset"; - V.arcologies[_i].FSRepopulationFocus = "unset"; - } - if (V.arcologies[_i].FSIntellectualDependency !== "unset") { - V.arcologies[_i].FSIntellectualDependency = Number(V.arcologies[_i].FSIntellectualDependency) || "unset"; - V.arcologies[_i].FSSlaveProfessionalism = "unset"; + for (const arc of V.arcologies) { + if (typeof arc.government !== 'string') { + arc.government = "an individual"; + } + arc.honeymoon = Number(arc.honeymoon) || 0; + arc.prosperity = Number(arc.prosperity) || 0; + arc.ownership = Number(arc.ownership) || 0; + arc.minority = Number(arc.minority) || 0; + arc.PCminority = Number(arc.PCminority) || 0; + arc.demandFactor = Number(arc.demandFactor) || 0; + + // enforce future society mutual exclusion rules + for (const group of App.Data.FutureSociety.mutexGroups) { + for (const fs1 of group) { + if (arc[fs1] !== "unset") { + arc[fs1] = Number(arc[fs1]) || "unset"; + } + if (arc[fs1] !== "unset" /* check again, may have just changed */) { + for (const fs2 of group) { + if (fs1 !== fs2) { + arc[fs2] = "unset"; + } + } + } + } } - if (V.arcologies[_i].FSSlaveProfessionalism !== "unset") { - V.arcologies[_i].FSSlaveProfessionalism = Number(V.arcologies[_i].FSSlaveProfessionalism) || "unset"; - V.arcologies[_i].FSIntellectualDependency = "unset"; - } - if (V.arcologies[_i].FSPetiteAdmiration !== "unset") { - V.arcologies[_i].FSPetiteAdmiration = Number(V.arcologies[_i].FSPetiteAdmiration) || "unset"; - V.arcologies[_i].FSStatuesqueGlorification = "unset"; - } - if (V.arcologies[_i].FSStatuesqueGlorification !== "unset") { - V.arcologies[_i].FSStatuesqueGlorification = Number(V.arcologies[_i].FSStatuesqueGlorification) || "unset"; - V.arcologies[_i].FSPetiteAdmiration = "unset"; - } - if (V.arcologies[_i].FSCummunism !== "unset") { - V.arcologies[_i].FSCummunism = Number(V.arcologies[_i].FSCummunism) || "unset"; + + if (arc.FSSupremacist !== "unset" && !setup.filterRacesLowercase.includes(arc.FSSupremacistRace)) { + arc.FSSupremacistRace = setup.filterRacesLowercase.random(); } - if (V.arcologies[_i].FSIncestFetishist !== "unset") { - V.arcologies[_i].FSIncestFetishist = Number(V.arcologies[_i].FSIncestFetishist) || "unset"; + if (arc.FSSubjugationist !== "unset" && !setup.filterRacesLowercase.includes(arc.FSSubjugationistRace)) { + arc.FSSubjugationistRace = setup.filterRacesLowercase.random(); } - V.arcologies[_i].embargo = Number(V.arcologies[_i].embargo) || 0; - V.arcologies[_i].embargoTarget = Number(V.arcologies[_i].embargoTarget) || 0; - V.arcologies[_i].CyberEconomic = Number(V.arcologies[_i].CyberEconomic) || 0; - V.arcologies[_i].CyberEconomicTarget = Number(V.arcologies[_i].CyberEconomicTarget) || 0; - V.arcologies[_i].CyberReputation = Number(V.arcologies[_i].CyberReputation) || 0; - V.arcologies[_i].CyberReputationTarget = Number(V.arcologies[_i].CyberReputationTarget) || 0; - V.arcologies[_i].influenceTarget = Number(V.arcologies[_i].influenceTarget) || 0; - V.arcologies[_i].influenceBonus = Number(V.arcologies[_i].influenceBonus) || 0; - V.arcologies[_i].rival = Number(V.arcologies[_i].rival) || 0; + + arc.embargo = Number(arc.embargo) || 0; + arc.embargoTarget = Number(arc.embargoTarget) || 0; + arc.CyberEconomic = Number(arc.CyberEconomic) || 0; + arc.CyberEconomicTarget = Number(arc.CyberEconomicTarget) || 0; + arc.CyberReputation = Number(arc.CyberReputation) || 0; + arc.CyberReputationTarget = Number(arc.CyberReputationTarget) || 0; + arc.influenceTarget = Number(arc.influenceTarget) || 0; + arc.influenceBonus = Number(arc.influenceBonus) || 0; + arc.rival = Number(arc.rival) || 0; } }; diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js index b34c0024e207edb7cdaf7128ea3c3da83630eedb..a2d4c2a33eed6dca691f3eef23790c39d4a7b659 100644 --- a/src/endWeek/economics/neighborsDevelopment.js +++ b/src/endWeek/economics/neighborsDevelopment.js @@ -1630,316 +1630,149 @@ App.EndWeek.neighborsDevelopment = function() { return el; function fsAdoption() { - /* PRIME RIVALRY FS ADOPTION - IGNORES VALIDITY */ + /** Adopt an FS without checking validity, forcibly abandoning any opposing FSes + * For use only on the first rival FS; subsequent FSes should check validity normally + * @param {FC.FutureSociety} adoptFS */ + function adoptRivalFS(adoptFS) { + // clear any opposing FSes + const group = App.Data.FutureSociety.mutexGroups.find(g => g.includes(adoptFS)); + if (group && group.length > 1) { + for (const opposing of group) { + arc[opposing] = "unset"; + } + } + // and initialize the target FS at 5 + arc[adoptFS] = 5; + } if (arc.rival === 1) { if (arc.government === "an individual") { if (V.rivalryFSAdopted === 0) { V.rivalryFSAdopted = 1; - let desc = "Its owner is"; + const desc = "Its owner is"; switch (V.rivalryFS) { case "Racial Subjugationism": - if (arc.FSSubjugationist !== "unset") { - arc.FSSubjugationist = "unset"; - } r.push(`${desc} preoccupied by belief in the superiority of the ${V.arcologies[0].FSSubjugationistRace} race, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSubjugationistRace} Supremacy.</span>`); - arc.FSSupremacist = 5; + adoptRivalFS("FSSupremacist"); arc.FSSupremacistRace = V.arcologies[0].FSSubjugationistRace; return; case "Racial Supremacism": - if (arc.FSSupremacist !== "unset") { - arc.FSSupremacist = "unset"; - } r.push(`${desc} preoccupied by a racial animus towards ${V.arcologies[0].FSSupremacistRace} people, leaving the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSupremacistRace} Subjugation.</span>`); - arc.FSSubjugationist = 5; + adoptRivalFS("FSSubjugationist"); arc.FSSubjugationistRace = V.arcologies[0].FSSupremacistRace; return; case "Repopulation Focus": - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus = "unset"; - } r.push(`${desc} obsessed with building a new society based on its Societal Elite, leading the arcology to <span class="yellow">adopt Eugenics.</span>`); - arc.FSRestart = 5; + adoptRivalFS("FSRestart"); return; case "Eugenics": - if (arc.FSRestart !== "unset") { - arc.FSRestart = "unset"; - } r.push(`${desc} obsessed with breeding a new society, leading the arcology to <span class="yellow">adopt Repopulationism.</span>`); - arc.FSRepopulationFocus = 5; + adoptRivalFS("FSRepopulationFocus"); return; case "Gender Radicalism": - if (arc.FSGenderRadicalist !== "unset") { - arc.FSGenderRadicalist = "unset"; - } r.push(`${desc} enthusiastic about knocking slaves up, leading the arcology to <span class="yellow">adopt Gender Fundamentalism.</span>`); - arc.FSGenderFundamentalist = 5; + adoptRivalFS("FSGenderFundamentalist"); return; case "Gender Fundamentalism": - if (arc.FSGenderFundamentalist !== "unset") { - arc.FSGenderFundamentalist = "unset"; - } r.push(`${desc} enthusiastic about fucking slaves in the butt, leading the arcology to <span class="yellow">adopt Gender Radicalism.</span>`); - arc.FSGenderRadicalist = 5; + adoptRivalFS("FSGenderRadicalist"); return; case "Paternalism": - if (arc.FSPaternalist !== "unset") { - arc.FSPaternalist = "unset"; - } r.push(`${desc} partial to screaming and struggling, leading the arcology to <span class="yellow">adopt Degradationism.</span>`); - arc.FSDegradationist = 5; + adoptRivalFS("FSDegradationist"); return; case "Degradationism": - if (arc.FSDegradationist !== "unset") { - arc.FSDegradationist = "unset"; - } r.push(`${desc} devoted to their slaves' advancement, leading the arcology to <span class="yellow">adopt Paternalism.</span>`); - arc.FSPaternalist = 5; + adoptRivalFS("FSPaternalist"); return; case "Intellectual Dependency": - if (arc.FSIntellectualDependency !== "unset") { - arc.FSIntellectualDependency = "unset"; - } r.push(`${desc} obsessed with crafting the perfect slave, leading the arcology to <span class="yellow">adopt Slave Professionalism.</span>`); - arc.FSSlaveProfessionalism = 5; + adoptRivalFS("FSSlaveProfessionalism"); return; case "Slave Professionalism": - if (arc.FSSlaveProfessionalism !== "unset") { - arc.FSSlaveProfessionalism = "unset"; - } r.push(`${desc} worried that they may one day be outsmarted by their chattel, leading the arcology to <span class="yellow">adopt Intellectual Dependency.</span>`); - arc.FSIntellectualDependency = 5; + adoptRivalFS("FSIntellectualDependency"); return; case "Body Purism": - if (arc.FSBodyPurist !== "unset") { - arc.FSBodyPurist = "unset"; - } r.push(`${desc} fascinated with extreme surgery, leading the arcology to <span class="yellow">adopt Transformation Fetishism.</span>`); - arc.FSTransformationFetishist = 5; + adoptRivalFS("FSTransformationFetishist"); return; case "Transformation Fetishism": - if (arc.FSTransformationFetishist !== "unset") { - arc.FSTransformationFetishist = "unset"; - } r.push(`${desc} concerned by trends in their slaves' health, leading the arcology to <span class="yellow">adopt Body Purism.</span>`); - arc.FSBodyPurist = 5; + adoptRivalFS("FSBodyPurist"); return; case "Youth Preferentialism": - if (arc.FSYouthPreferentialist !== "unset") { - arc.FSYouthPreferentialist = "unset"; - } r.push(`${desc} devoted to time in bed with their MILF slaves, leading the arcology to <span class="yellow">adopt Maturity Preferentialism.</span>`); - arc.FSMaturityPreferentialist = 5; + adoptRivalFS("FSMaturityPreferentialist"); return; case "Maturity Preferentialism": - if (arc.FSMaturityPreferentialist !== "unset") { - arc.FSMaturityPreferentialist = "unset"; - } r.push(`${desc} devoted to fucking nubile young slaves, leading the arcology to <span class="yellow">adopt Youth Preferentialism.</span>`); - arc.FSYouthPreferentialist = 5; + adoptRivalFS("FSYouthPreferentialist"); return; case "Petite Admiration": - if (arc.FSPetiteAdmiration !== "unset") { - arc.FSPetiteAdmiration = "unset"; - } r.push(`${desc} convinced that tall equals beauty, leading the arcology to <span class="yellow">adopt Statuesque Glorification.</span>`); - arc.FSSlaveProfessionalism = 5; + adoptRivalFS("FSSlaveProfessionalism"); return; case "Statuesque Glorification": - if (arc.FSStatuesqueGlorification !== "unset") { - arc.FSStatuesqueGlorification = "unset"; - } r.push(`${desc} enamored by those shorter than them, leading the arcology to <span class="yellow">adopt Petite Admiration.</span>`); - arc.FSPetiteAdmiration = 5; + adoptRivalFS("FSPetiteAdmiration"); return; case "Slimness Enthusiasm": - if (arc.FSSlimnessEnthusiast !== "unset") { - arc.FSSlimnessEnthusiast = "unset"; - } r.push(`${desc} loves boobs, the bigger, the better, leading the arcology to <span class="yellow">adopt Asset Expansionism.</span>`); - arc.FSAssetExpansionist = 5; + adoptRivalFS("FSAssetExpansionist"); return; case "Asset Expansionism": - if (arc.FSAssetExpansionist !== "unset") { - arc.FSAssetExpansionist = "unset"; - } r.push(`${desc} loves a slim slave with tight holes, leading the arcology to <span class="yellow">adopt Slimness Enthusiasm.</span>`); - arc.FSSlimnessEnthusiast = 5; + adoptRivalFS("FSSlimnessEnthusiast"); return; case "Pastoralism": - if (arc.FSPastoralist !== "unset") { - arc.FSPastoralist = "unset"; - } r.push(`${desc} loves cum, leading the arcology to <span class="yellow">adopt Cummunism.</span>`); - arc.FSCummunism = 5; + adoptRivalFS("FSCummunism"); return; case "Cummunism": - if (arc.FSCummunism !== "unset") { - arc.FSCummunism = "unset"; - } r.push(`${desc} addicted to breast milk straight from the nipple, leading the arcology to <span class="yellow">adopt Pastoralism.</span>`); - arc.FSPastoralist = 5; + adoptRivalFS("FSPastoralist"); return; case "Hedonistic Decadence": - if (arc.FSHedonisticDecadence !== "unset") { - arc.FSHedonisticDecadence = "unset"; - } r.push(`${desc} devoted to spending time in the gym, leading the arcology to <span class="yellow">adopt Physical Idealism.</span>`); - arc.FSPhysicalIdealist = 5; + adoptRivalFS("FSPhysicalIdealist"); return; case "Physical Idealism": - if (arc.FSPhysicalIdealist !== "unset") { - arc.FSPhysicalIdealist = "unset"; - } r.push(`${desc} addicted to pleasure, leading the arcology to <span class="yellow">adopt Decadent Hedonism.</span>`); - arc.FSHedonisticDecadence = 5; + adoptRivalFS("FSHedonisticDecadence"); return; case "Chattel Religionism": - if (arc.FSChattelReligionist !== "unset") { - arc.FSChattelReligionist = "unset"; - } r.push(`${desc} open minded, leading the arcology to <span class="yellow">permit cultural freedom.</span>`); - arc.FSNull = 5; + adoptRivalFS("FSNull"); return; case "Multiculturalism": - if (arc.FSNull !== "unset") { - arc.FSNull = "unset"; - } r.push(`${desc} devoutly religious, and interested in a reformation, leading the arcology to <span class="yellow">adopt Chattel Religionism.</span>`); - arc.FSChattelReligionist = 5; + adoptRivalFS("FSChattelReligionist"); return; case "Roman Revivalism": - if (arc.FSRomanRevivalist !== "unset") { - arc.FSRomanRevivalist = "unset"; - } - if (arc.FSEgyptianRevivalist !== "unset") { - arc.FSEgyptianRevivalist = "unset"; - } - if (arc.FSEdoRevivalist !== "unset") { - arc.FSEdoRevivalist = "unset"; - } - if (arc.FSArabianRevivalist !== "unset") { - arc.FSArabianRevivalist = "unset"; - } - if (arc.FSChineseRevivalist !== "unset") { - arc.FSChineseRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by ancient Aztec history, leading the arcology to <span class="yellow">adopt Aztec Revivalism.</span>`); - arc.FSAztecRevivalist = 5; + adoptRivalFS("FSAztecRevivalist"); return; case "Neo-Imperialism": case "Egyptian Revivalism": - if (arc.FSEgyptianRevivalist !== "unset") { - arc.FSEgyptianRevivalist = "unset"; - } - if (arc.FSRomanRevivalist !== "unset") { - arc.FSRomanRevivalist = "unset"; - } - if (arc.FSEdoRevivalist !== "unset") { - arc.FSEdoRevivalist = "unset"; - } - if (arc.FSChineseRevivalist !== "unset") { - arc.FSChineseRevivalist = "unset"; - } - if (arc.FSAztecRevivalist !== "unset") { - arc.FSAztecRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by Arabian romanticism, leading the arcology to <span class="yellow">adopt Arabian Revivalism.</span>`); - arc.FSArabianRevivalist = 5; + adoptRivalFS("FSArabianRevivalist"); return; case "Edo Revivalism": - if (arc.FSEdoRevivalist !== "unset") { - arc.FSEdoRevivalist = "unset"; - } - if (arc.FSRomanRevivalist !== "unset") { - arc.FSRomanRevivalist = "unset"; - } - if (arc.FSEgyptianRevivalist !== "unset") { - arc.FSEgyptianRevivalist = "unset"; - } - if (arc.FSArabianRevivalist !== "unset") { - arc.FSArabianRevivalist = "unset"; - } - if (arc.FSAztecRevivalist !== "unset") { - arc.FSAztecRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by the long tale of Chinese history, leading the arcology to <span class="yellow">adopt Chinese Revivalism.</span>`); - arc.FSChineseRevivalist = 5; + adoptRivalFS("FSChineseRevivalist"); return; case "Arabian Revivalism": - if (arc.FSArabianRevivalist !== "unset") { - arc.FSArabianRevivalist = "unset"; - } - if (arc.FSRomanRevivalist !== "unset") { - arc.FSRomanRevivalist = "unset"; - } - if (arc.FSEdoRevivalist !== "unset") { - arc.FSEdoRevivalist = "unset"; - } - if (arc.FSChineseRevivalist !== "unset") { - arc.FSChineseRevivalist = "unset"; - } - if (arc.FSAztecRevivalist !== "unset") { - arc.FSAztecRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by ancient Egyptian history, leading the arcology to <span class="yellow">adopt Egyptian Revivalism.</span>`); - arc.FSEgyptianRevivalist = 5; + adoptRivalFS("FSEgyptianRevivalist"); return; case "Chinese Revivalism": - if (arc.FSChineseRevivalist !== "unset") { - arc.FSChineseRevivalist = "unset"; - } - if (arc.FSRomanRevivalist !== "unset") { - arc.FSRomanRevivalist = "unset"; - } - if (arc.FSEgyptianRevivalist !== "unset") { - arc.FSEgyptianRevivalist = "unset"; - } - if (arc.FSArabianRevivalist !== "unset") { - arc.FSArabianRevivalist = "unset"; - } - if (arc.FSAztecRevivalist !== "unset") { - arc.FSAztecRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by Japanese history, leading the arcology to <span class="yellow">adopt Edo Revivalism.</span>`); - arc.FSEdoRevivalist = 5; + adoptRivalFS("FSEdoRevivalist"); return; case "Aztec Revivalism": - if (arc.FSAztecRevivalist !== "unset") { - arc.FSAztecRevivalist = "unset"; - } - if (arc.FSEgyptianRevivalist !== "unset") { - arc.FSEgyptianRevivalist = "unset"; - } - if (arc.FSEdoRevivalist !== "unset") { - arc.FSEdoRevivalist = "unset"; - } - if (arc.FSArabianRevivalist !== "unset") { - arc.FSArabianRevivalist = "unset"; - } - if (arc.FSChineseRevivalist !== "unset") { - arc.FSChineseRevivalist = "unset"; - } - if (arc.FSNeoImperialist !== "unset") { - arc.FSNeoImperialist = "unset"; - } r.push(`${desc} fascinated by classical Roman history, leading the arcology to <span class="yellow">adopt Roman Revivalism.</span>`); - arc.FSRomanRevivalist = 5; + adoptRivalFS("FSRomanRevivalist"); return; default: V.rivalryFSAdopted = 0; diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js index 619ed9494a760e87ff15afbf38612e067d3821f0..fdb9f576260b361ab2945cb495b7930882ee8338 100644 --- a/src/js/futureSocietyJS.js +++ b/src/js/futureSocietyJS.js @@ -1,65 +1,7 @@ globalThis.FutureSocieties = (function() { - /** @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj, deco: FC.FutureSocietyDeco, NPCOnly?: boolean}>} */ - const FSRecords = { - FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist", deco: "Supremacist"}, - FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist", deco: "Subjugationist"}, - FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist", deco: "Gender Radicalist"}, - FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist", deco: "Gender Fundamentalist"}, - FSDegradationist: {noun: "Degradationism", adj: "Degradationist", deco: "Degradationist"}, - FSPaternalist: {noun: "Paternalism", adj: "Paternalist", deco: "Paternalist"}, - FSBodyPurist: {noun: "Body Purism", adj: "Body Purist", deco: "Body Purist"}, - FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist", deco: "Transformation Fetishist"}, - FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist", deco: "Youth Preferentialist"}, - FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist", deco: "Maturity Preferentialist"}, - FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast", deco: "Slimness Enthusiast"}, - FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist", deco: "Asset Expansionist"}, - FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist", deco: "Pastoralist"}, - FSCummunism: {noun: "Cummunism", adj: "Cummunist", deco: "", NPCOnly: true}, - FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist", deco: "Physical Idealist"}, - FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist", deco: "Hedonistic"}, - FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist", deco: "Chattel Religionist"}, - FSNull: {noun: "Multiculturalism", adj: "Multiculturalist", deco: ""}, - FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist", deco: "", NPCOnly: true}, - FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist", deco: "Roman Revivalist"}, - FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist", deco: "Neo-Imperialist"}, - FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist", deco: "Egyptian Revivalist"}, - FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist", deco: "Edo Revivalist"}, - FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist", deco: "Arabian Revivalist"}, - FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist", deco: "Chinese Revivalist"}, - FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist", deco: "Aztec Revivalist"}, - FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist", deco: "Repopulationist"}, - FSRestart: {noun: "Eugenics", adj: "Eugenics", deco: "Eugenics"}, - FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency", deco: "Intellectual Dependency"}, - FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional", deco: "Slave Professionalism"}, - FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration", deco: "Petite Admiration"}, - FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification", deco: "Statuesque Glorification"} - }; - - /** @type {FC.FutureSociety[][]} */ - const FSMutexGroups = [ - [ "FSSupremacist" ], - [ "FSSubjugationist" ], - [ "FSGenderRadicalist", "FSGenderFundamentalist" ], - [ "FSDegradationist", "FSPaternalist" ], - [ "FSBodyPurist", "FSTransformationFetishist" ], - [ "FSYouthPreferentialist", "FSMaturityPreferentialist" ], - [ "FSSlimnessEnthusiast", "FSAssetExpansionist" ], - [ "FSPastoralist", "FSCummunism" ], - [ "FSPhysicalIdealist", "FSHedonisticDecadence" ], - [ "FSChattelReligionist", "FSNull" ], - [ "FSIncestFetishist" ], - [ "FSRomanRevivalist", "FSNeoImperialist", "FSEgyptianRevivalist", "FSEdoRevivalist", "FSArabianRevivalist", "FSChineseRevivalist", "FSAztecRevivalist" ], - [ "FSRepopulationFocus", "FSRestart" ], - [ "FSIntellectualDependency", "FSSlaveProfessionalism" ], - [ "FSPetiteAdmiration", "FSStatuesqueGlorification"] - ]; - - /** @type {FC.FutureSociety[]} */ - const SocietyList = (/** @type {FC.FutureSociety[]} */ Object.keys(FSRecords)); - /** @type {Map<FC.FutureSocietyDeco, FC.FutureSociety>} */ const DecoToFSMap = new Map(); - for (const [fsName, details] of Object.entries(FSRecords)) { + for (const [fsName, details] of Object.entries(App.Data.FutureSociety.records)) { if (details.deco) { // @ts-ignore - Object.entries loses type information, apparently intentionally DecoToFSMap.set(details.deco, fsName); @@ -92,7 +34,7 @@ globalThis.FutureSocieties = (function() { * @returns {FC.FutureSociety[]} */ function activeFSes(arcology) { - return SocietyList.filter((fs) => Number.isFinite(arcology[fs])); + return App.Data.FutureSociety.fsNames.filter((fs) => Number.isFinite(arcology[fs])); } /** call as FutureSocieties.activeCount(arcology) @@ -156,7 +98,7 @@ globalThis.FutureSocieties = (function() { */ function conflictingFSes(left, right) { if (left !== right) { // identical FSes are not opposed - for (const group of FSMutexGroups) { + for (const group of App.Data.FutureSociety.mutexGroups) { if (group.includesAll(left, right)) { return true; // but any other FS in the mutex group is } @@ -171,7 +113,7 @@ globalThis.FutureSocieties = (function() { */ function validAdoptions(arcID) { const arcology = V.arcologies[arcID]; - const societies = Array.from(arcID !== 0 ? SocietyList : SocietyList.filter(fs => !FSRecords[fs].NPCOnly)); + const societies = Array.from(arcID !== 0 ? App.Data.FutureSociety.fsNames : App.Data.FutureSociety.playerFSNames); const arcFSes = activeFSes(arcology); // apply game rules @@ -254,7 +196,7 @@ globalThis.FutureSocieties = (function() { * @returns {FC.FutureSocietyNoun} */ function displayName(FSProp) { - return FSRecords[FSProp].noun; + return App.Data.FutureSociety.records[FSProp].noun; } /** returns the future society adjective (typically an "ist") for the given property @@ -262,7 +204,7 @@ globalThis.FutureSocieties = (function() { * @returns {FC.FutureSocietyAdj} */ function displayAdj(FSProp) { - return FSRecords[FSProp].adj; + return App.Data.FutureSociety.records[FSProp].adj; } /** returns the future society decoration name (for use in decoration properties) for the given FS property @@ -270,7 +212,7 @@ globalThis.FutureSocieties = (function() { * @returns {FC.FutureSocietyDeco} */ function decorationName(FSProp) { - return FSRecords[FSProp].deco; + return App.Data.FutureSociety.records[FSProp].deco; } /** decays all the FSes adopted by a particular arcology (for example, because of government instability) @@ -531,12 +473,12 @@ globalThis.FutureSocieties = (function() { */ function FSHighestDecoration() { const arcology = V.arcologies[0]; - const decorationList = SocietyList.map(FS => `${FS}Decoration`); + const decorationList = App.Data.FutureSociety.playerFSNames.map(FS => `${FS}Decoration`); let level = 20; // All decorations start at 20 - for (let i = 0; i < decorationList.length; i++) { - if (arcology[decorationList[i]] > level) { - level = arcology[decorationList[i]]; + for (const deco of decorationList) { + if (arcology[deco] > level) { + level = arcology[deco]; } } return level; diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js index b7d98a200227c0e26652256ed5e39401e27e3775..44131d171cb93dec59debd81655c041710f26bd6 100644 --- a/src/js/slaveSummaryHelpers.js +++ b/src/js/slaveSummaryHelpers.js @@ -195,12 +195,12 @@ App.UI.SlaveSummaryImpl = function() { */ function syncFSData(arcology) { arcology = arcology || V.arcologies[0]; - for (const fsp of App.Data.misc.FutureSocieties) { + for (const fsp of App.Data.FutureSociety.fsNames) { /** @type {FC.FSPolicyValue} */ const policy = arcology[fsp]; const p = fsp.slice(2); FSData.policy[p] = { - active: policy === "unset" ? 0 : 1, + active: (policy === "unset" || _.isNil(policy)) ? 0 : 1, strength: Math.trunc(policy === "unset" ? 0: policy / 10) }; } diff --git a/src/uncategorized/futureSociety.tw b/src/uncategorized/futureSociety.tw index 9ad7466dbc3285474fa50a2b0211d596727408bc..7c322f4bf9f556f9b138d3a664a25555d52bc9f6 100644 --- a/src/uncategorized/futureSociety.tw +++ b/src/uncategorized/futureSociety.tw @@ -807,7 +807,7 @@ You are spending <<print cashFormat($FSSpending)>> each week to support your soc <</if>> <</link>> </span> - <<set = ["boughtItem.clothing.courtesan"]>> + <<set _items = ["boughtItem.clothing.courtesan"]>> <<includeDOM App.UI.FSChangeDecoration("FSSlaveProfessionalism", _items)>> <<if $policies.publicPA == 1>> <<if ["angel", "businesswoman", "incubus", "goddess", "schoolgirl", "succubus"].includes($assistant.appearance)>>