From 9fdfb77dd4dc16838df336992fb3bcade7d91c67 Mon Sep 17 00:00:00 2001 From: Olivier Gagnon Date: Fri, 22 Apr 2022 15:30:49 -0400 Subject: [PATCH] Update infiltrators --- src/Augmentation/Augmentation.tsx | 6 +- src/Augmentation/AugmentationHelpers.tsx | 24 +-- src/Augmentation/data/AugmentationCreator.tsx | 159 ++++++------------ src/Augmentation/data/AugmentationNames.ts | 35 ++-- src/Augmentation/ui/PlayerMultipliers.tsx | 35 ---- src/Constants.ts | 6 + src/Faction/FactionInfo.tsx | 61 ++----- src/Faction/data/FactionNames.ts | 2 +- src/Faction/ui/AugmentationsPage.tsx | 2 +- src/Infiltration/formulas/victory.ts | 12 +- src/Infiltration/ui/BackwardGame.tsx | 2 +- src/Infiltration/ui/BracketGame.tsx | 2 +- src/Infiltration/ui/BribeGame.tsx | 2 +- src/Infiltration/ui/CheatCodeGame.tsx | 2 +- src/Infiltration/ui/Cyberpunk2077Game.tsx | 2 +- src/Infiltration/ui/Game.tsx | 14 +- src/Infiltration/ui/GameTimer.tsx | 3 +- src/Infiltration/ui/MinesweeperGame.tsx | 2 +- src/Infiltration/ui/SlashGame.tsx | 2 +- src/Infiltration/ui/Victory.tsx | 13 +- src/Infiltration/ui/WireCuttingGame.tsx | 16 +- src/NetscriptFunctions.ts | 6 - src/NetscriptFunctions/Infiltration.ts | 4 +- src/PersonObjects/IPlayer.ts | 7 - src/PersonObjects/Player/PlayerObject.ts | 15 -- .../Player/PlayerObjectAugmentationMethods.ts | 4 +- .../Player/PlayerObjectGeneralMethods.tsx | 14 -- src/PersonObjects/Sleeve/ui/TaskSelector.tsx | 2 +- src/SaveObject.tsx | 5 + src/ui/CharacterStats.tsx | 12 -- 30 files changed, 163 insertions(+), 308 deletions(-) diff --git a/src/Augmentation/Augmentation.tsx b/src/Augmentation/Augmentation.tsx index eead67a98..a7174c8ca 100644 --- a/src/Augmentation/Augmentation.tsx +++ b/src/Augmentation/Augmentation.tsx @@ -348,15 +348,15 @@ function generateStatsDescription(mults: IMap, programs?: string[], star desc = ( <> {desc} -
+{f(mults.infiltration_base_rep_increase - 1)} Infiltration {FactionNames.Infiltrators} Reputation base - reward +
+{f(mults.infiltration_base_rep_increase - 1)} Infiltration {FactionNames.ShadowsOfAnarchy} Reputation + base reward ); if (mults.infiltration_rep_mult) desc = ( <> {desc} -
+{f(mults.infiltration_rep_mult - 1)} Infiltration {FactionNames.Infiltrators} Reputation reward +
+{f(mults.infiltration_rep_mult - 1)} Infiltration {FactionNames.ShadowsOfAnarchy} Reputation reward ); if (mults.infiltration_trade_mult) diff --git a/src/Augmentation/AugmentationHelpers.tsx b/src/Augmentation/AugmentationHelpers.tsx index 18fda54f9..9bd25a6e0 100644 --- a/src/Augmentation/AugmentationHelpers.tsx +++ b/src/Augmentation/AugmentationHelpers.tsx @@ -16,7 +16,7 @@ import { initBladeburnerAugmentations, initChurchOfTheMachineGodAugmentations, initGeneralAugmentations, - initInfiltratorsAugmentations, + initSoAAugmentations, initNeuroFluxGovernor, initUnstableCircadianModulator, } from "./data/AugmentationCreator"; @@ -51,7 +51,7 @@ function createAugmentations(): void { initNeuroFluxGovernor(), initUnstableCircadianModulator(), ...initGeneralAugmentations(), - ...initInfiltratorsAugmentations(), + ...initSoAAugmentations(), ...(factionExists(FactionNames.Bladeburners) ? initBladeburnerAugmentations() : []), ...(factionExists(FactionNames.ChurchOfTheMachineGod) ? initChurchOfTheMachineGodAugmentations() : []), ].map(resetAugmentation); @@ -94,13 +94,15 @@ function updateNeuroFluxGovernorCosts(neuroFluxGovernorAugmentation: Augmentatio } } -function updateInfiltratorCosts(infiltratorAugmentation: Augmentation): void { - const infiltratorAugmentationNames = initInfiltratorsAugmentations().map((augmentation) => augmentation.name); - const infiltratorMultiplier = - infiltratorAugmentationNames.filter((augmentationName) => Player.hasAugmentation(augmentationName)).length + 1; - infiltratorAugmentation.baseCost = Math.pow(infiltratorAugmentation.startingCost * 1000, infiltratorMultiplier); - if (infiltratorAugmentationNames.find((augmentationName) => augmentationName === infiltratorAugmentation.name)) { - infiltratorAugmentation.baseRepRequirement = infiltratorAugmentation.startingRepRequirement * infiltratorMultiplier; +function updateSoACosts(soaAugmentation: Augmentation): void { + const soaAugmentationNames = initSoAAugmentations().map((augmentation) => augmentation.name); + const soaAugCount = soaAugmentationNames.filter((augmentationName) => + Player.hasAugmentation(augmentationName), + ).length; + soaAugmentation.baseCost = soaAugmentation.startingCost * Math.pow(CONSTANTS.SoACostMult, soaAugCount); + if (soaAugmentationNames.find((augmentationName) => augmentationName === soaAugmentation.name)) { + soaAugmentation.baseRepRequirement = + soaAugmentation.startingRepRequirement * Math.pow(CONSTANTS.SoARepMult, soaAugCount); } } @@ -110,8 +112,8 @@ export function updateAugmentationCosts(): void { const augmentationToUpdate = Augmentations[name]; if (augmentationToUpdate.name === AugmentationNames.NeuroFluxGovernor) { updateNeuroFluxGovernorCosts(augmentationToUpdate); - } else if (augmentationToUpdate.factions.includes(FactionNames.Infiltrators)) { - updateInfiltratorCosts(augmentationToUpdate); + } else if (augmentationToUpdate.factions.includes(FactionNames.ShadowsOfAnarchy)) { + updateSoACosts(augmentationToUpdate); } else { augmentationToUpdate.baseCost = augmentationToUpdate.startingCost * diff --git a/src/Augmentation/data/AugmentationCreator.tsx b/src/Augmentation/data/AugmentationCreator.tsx index 677dcb576..6337d015d 100644 --- a/src/Augmentation/data/AugmentationCreator.tsx +++ b/src/Augmentation/data/AugmentationCreator.tsx @@ -96,159 +96,96 @@ function getRandomBonus(): any { return bonuses[Math.floor(bonuses.length * randomNumber.random())]; } -export const initInfiltratorsAugmentations = (): Augmentation[] => [ +export const initSoAAugmentations = (): Augmentation[] => [ new Augmentation({ - name: AugmentationNames.BionicFingers, - repCost: 15e1, + name: AugmentationNames.WKSharmonizer, + repCost: 1e4, moneyCost: 1e6, - infiltration_base_rep_increase: 5, info: - "This state of the art augmentation removes the need for bones and tendons in your fingers, " + - "with this you will have the dexterity equal to the best rubik's cube player in the world. ", - factions: [FactionNames.Infiltrators], + `A copy of the WKS harmonizer from the MIA leader of the ${FactionNames.ShadowsOfAnarchy} ` + + "injects *Γ-based cells that provides general enhancement to the body.", + stats: ( + <> + This augmentation makes many aspect of infiltration easier and more productive. Such as increased timer, + rewards, reduced damage taken, etc. + + ), + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.CorporationManagementImplant, - repCost: 25e1, - moneyCost: 1e6, - infiltration_rep_mult: 2.5, - info: - "As time went on corporations realized that managers were redundant if they could be replaced by AI chips " + - "implanted directly in the brain, and so this implant was developed which could analyse the users brain " + - "to find the perfect tone and sounding voice to increase productivity of the user to maximum profits.", - factions: [FactionNames.Infiltrators], - }), - new Augmentation({ - name: AugmentationNames.TranslationCircuit, - repCost: 5e2, - moneyCost: 1e6, - infiltration_trade_mult: 1.5, - info: - "A state of the art circuit module that manipulates the users voice to suit the needs of the situation, " + - "allowing the people listening to feel more persuaded by whats said due to the voice being auto translated " + - "to the listeners accent and language.", - factions: [FactionNames.Infiltrators], - }), - new Augmentation({ - name: AugmentationNames.GoldenSuiteCase, - repCost: 5e2, - moneyCost: 1e6, - infiltration_sell_mult: 1.5, - info: - "Some say too much money is a curse, those people clearly have never owned a golden suitcase. it might be " + - "a bit heavier but it sure does make anything inside it look a lot more valuable.", - factions: [FactionNames.Infiltrators], - }), - new Augmentation({ - name: AugmentationNames.TimeDilationInjection, - repCost: 5e2, - moneyCost: 1e6, - infiltration_timer_mult: 1.3, - info: - "Injected directly into the user eyes, as the serum seeps into the brain via the optic nerves perception " + - "of time begins to slow down allowing you to take more time to do things than the average person", - factions: [FactionNames.Infiltrators], - }), - new Augmentation({ - name: AugmentationNames.BitaniumArmorAlloy, - repCost: 5e2, - moneyCost: 1e6, - infiltration_damage_reduction_mult: 0.7, - info: - `Deep in the mines of ${CityName.Ishima} miners found a strange new material, now known as bitanium. After ` + - "many iterations of experimenting it was found to be exceptional at increasing ones armor at absorbing " + - "blunt damage when used as an alloy with almost any other metal you can think of.", - factions: [FactionNames.Infiltrators], - }), - new Augmentation({ - name: AugmentationNames.PythiasBrainStem, - repCost: 1e2, + name: AugmentationNames.MightOfAres, + repCost: 1e4, moneyCost: 1e6, info: - "You found an old jar apparently containing the brain stem of one of the most famous " + - "fortune tellers in the world, installing this augmentation will apparently connect the synapses reactivating " + - "the magic this man once shared with the world ", + "Extra-occular neurons taken from old martial art master. Injecting the user the ability to " + + "predict enemy attack before they even know it themself.", stats: ( <>This augmentation makes the Slash minigame easier by showing you via an indictor when the slash in coming. ), - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.IntellisenseModule, - repCost: 1e2, + name: AugmentationNames.WisdomOfAthena, + repCost: 1e4, moneyCost: 1e6, - info: - "A brain implant with AI power that focuses in auto linting and intellisense, which " + - "provides the ability to perform code completion better than any existing " + - "IDE environment on the market to date.", + info: "A connective brain implant to SASHA that focuses in pattern recognition and predictive templating.", stats: <>This augmentation makes the Bracket minigame easier by removing all '[' ']'., - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.RearViewMirrorShoulderAttachment, - repCost: 1e2, + name: AugmentationNames.ChaosOfDionysus, + repCost: 1e4, moneyCost: 1e6, - info: "Never again will you need to turn your head to see whats behind you.", - stats: <>This augmentation makes the Backwards minigame easier by making the words no longer backwards., - factions: [FactionNames.Infiltrators], + info: "Opto-occipito implant to process visual signal before brain interpretation.", + stats: <>This augmentation makes the Backwards minigame easier by flipping the words., + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.KyberCrystalInjection, - repCost: 1e2, + name: AugmentationNames.BeautyOfAphrodite, + repCost: 1e4, moneyCost: 1e6, info: - "A weird looking shiny crystal which is crushed down and turned into a thick syrup, " + - "most people think its all homeopathic but there are a few that believe when injected people will " + - "believe what you say with one wave of the hand ", + "Pheromone extruder injected in the thoracodorsal nerve. Emits pleasing scent guaranteed to " + + "make conversational partners more agreeable.", stats: <>This augmentation makes the Bribe minigame easier by indicating the incorrect paths., - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.DyslexiaModule, - repCost: 1e2, + name: AugmentationNames.TrickeryOfHermes, + repCost: 1e4, moneyCost: 1e6, - info: - "A module initially developed to reverse the affliction of dyslexia, But during human trials it was found " + - "to actually cause dyslexia, despite the fact scientists decided to sell it anyway. Who would want " + - "to install something like that... i guess it has the added benefit of qualifying for a disability card", + info: "Penta-dynamo-neurovascular-valve inserted in the carpal ligament, enhances dexterity.", stats: <>This augmentation makes the Cheat Code minigame easier by allowing the opposite character., - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.CyberDecoder, - repCost: 1e2, + name: AugmentationNames.FloodOfPoseidon, + repCost: 1e4, moneyCost: 1e6, - info: - "A cool looking do hickey that oddly resembles Keanu Reeves face, " + - "it has a usb cable that looks like it plugs into something.", + info: "Transtinatium VVD reticulator used in optico-sterbing recognition.", stats: <>This augmentation makes the Symbol matching minigame easier by indicating the correct choice., - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.MineDetectionArmAttachment, - repCost: 1e2, + name: AugmentationNames.HuntOfArtemis, + repCost: 1e4, moneyCost: 1e6, - info: - "You stumble across an old mine detection arm attachment at an army surplus store, " + - "on the side is inscribed 'X(' i wonder what happened to the original owner, " + - "its a bit beaten up but looks like it should still do the job.", + info: "magneto-turboencabulator based on technology by Micha Eike Siemon, increases the users electro-magnetic sensitivity.", stats: ( <> This augmentation makes the Minesweeper minigame easier by showing the location of all mines and keeping their position. ), - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), new Augmentation({ - name: AugmentationNames.SecurityWireContacts, - repCost: 1e2, + name: AugmentationNames.KnowledgeOfApollo, + repCost: 1e4, moneyCost: 1e6, - info: - "This augment is a set of contacts for your eyes when installed allows for the user to see which" + - "wires are conducting security related information", + info: "Neodynic retention fjengeln spoofer using -φ karmions, net positive effect on implantees delta wave.", stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires., - factions: [FactionNames.Infiltrators], + factions: [FactionNames.ShadowsOfAnarchy], }), ]; @@ -2095,7 +2032,7 @@ export function initNeuroFluxGovernor(): Augmentation { work_money_mult: 1.01 + donationBonus, factions: Object.values(FactionNames).filter( (factionName) => - ![FactionNames.Infiltrators, FactionNames.Bladeburners, FactionNames.ChurchOfTheMachineGod].includes( + ![FactionNames.ShadowsOfAnarchy, FactionNames.Bladeburners, FactionNames.ChurchOfTheMachineGod].includes( factionName, ), ), diff --git a/src/Augmentation/data/AugmentationNames.ts b/src/Augmentation/data/AugmentationNames.ts index ea62eccfc..574f232f4 100644 --- a/src/Augmentation/data/AugmentationNames.ts +++ b/src/Augmentation/data/AugmentationNames.ts @@ -114,22 +114,27 @@ export enum AugmentationNames { StaneksGift2 = "Stanek's Gift - Awakening", StaneksGift3 = "Stanek's Gift - Serenity", + /* + MightOfAres = "Might of Ares", // slash + WisdomOfAthena = "Wisdom of Athena", // bracket + TrickeryOfHermes = "Trickery of Hermes", // cheatcode + BeautyOfAphrodite = "Beauty of Aphrodite", // bribe + ChaosOfDionysus = "Chaos of Dionysus", // reverse + FloodOfPoseidon = "Flood of Poseidon", // hex + HuntOfArtemis = "Hunt of Artemis", // mine + KnowledgeOfApollo = "Knowledge of Apollo", // wire + */ + // Infiltrators MiniGames - PythiasBrainStem = "Pythia's Brain Stem", - IntellisenseModule = "Intellisense Module", - DyslexiaModule = "Dyslexia Module", - KyberCrystalInjection = "Kyber Crystal Injection", - RearViewMirrorShoulderAttachment = "Rear View Mirror Shoulder Attachment", - CyberDecoder = "Cyber Decoder", - MineDetectionArmAttachment = "Mine Detection Arm Attachment", - SecurityWireContacts = "Security Wire Contacts", - // Infiltrators general - BionicFingers = "Bionic Fingers", - CorporationManagementImplant = "Corporation Management Implant", - TranslationCircuit = "Translation Circuit", - GoldenSuiteCase = "Golden Suite Case", - TimeDilationInjection = "Time Dilation Injection", - BitaniumArmorAlloy = "Bitanium Armor Alloy", + MightOfAres = "SoA - Might of Ares", // slash + WisdomOfAthena = "SoA - Wisdom of Athena", // bracket + TrickeryOfHermes = "SoA - Trickery of Hermes", // cheatcode + BeautyOfAphrodite = "SoA - Beauty of Aphrodite", // bribe + ChaosOfDionysus = "SoA - Chaos of Dionysus", // reverse + FloodOfPoseidon = "SoA - Flood of Poseidon", // hex + HuntOfArtemis = "SoA - Hunt of Artemis", // mine + KnowledgeOfApollo = "SoA - Knowledge of Apollo", // wire + WKSharmonizer = "SoA - phyzical WKS harmonizer", //Wasteland Augs //PepBoy: "P.E.P-Boy", Plasma Energy Projection System diff --git a/src/Augmentation/ui/PlayerMultipliers.tsx b/src/Augmentation/ui/PlayerMultipliers.tsx index 5b69c8a36..c8cadc341 100644 --- a/src/Augmentation/ui/PlayerMultipliers.tsx +++ b/src/Augmentation/ui/PlayerMultipliers.tsx @@ -254,41 +254,6 @@ export function PlayerMultipliers(): React.ReactElement { ); } - rightColData.push( - ...[ - [ - "Infiltrator Rep reward", - Player.infiltration_rep_mult, - Player.infiltration_rep_mult * mults.infiltration_rep_mult, - 1, - ], - [ - "Infiltration sell", - Player.infiltration_sell_mult, - Player.infiltration_sell_mult * mults.infiltration_sell_mult, - 1, - ], - [ - "Infiltration trade", - Player.infiltration_trade_mult, - Player.infiltration_trade_mult * mults.infiltration_trade_mult, - 1, - ], - [ - "Infiltration minigame timer", - Player.infiltration_timer_mult, - Player.infiltration_timer_mult * mults.infiltration_timer_mult, - 1, - ], - [ - "Infiltration minigame damage reduction", - Player.infiltration_damage_reduction_mult, - -1 * (1 - Player.infiltration_damage_reduction_mult * mults.infiltration_damage_reduction_mult), - 1, - ], - ].map((data): MultiplierListItemData => (data as any).concat([Settings.theme.primary])), - ); - const hasLeftImprovements = +!!(leftColData.filter((item) => item[2] !== 0).length > 0), hasRightImprovements = +!!(rightColData.filter((item) => item[2] !== 0).length > 0); diff --git a/src/Constants.ts b/src/Constants.ts index 74668dd4c..6ea3af2d5 100644 --- a/src/Constants.ts +++ b/src/Constants.ts @@ -112,6 +112,8 @@ export const CONSTANTS: { CodingContractBaseMoneyGain: number; AugmentationGraftingCostMult: number; AugmentationGraftingTimeBase: number; + SoACostMult: number; + SoARepMult: number; EntropyEffect: number; TotalNumBitNodes: number; Donations: number; // number of blood/plasma/palette donation the dev have verified., boosts NFG @@ -281,6 +283,10 @@ export const CONSTANTS: { AugmentationGraftingCostMult: 3, AugmentationGraftingTimeBase: 3600000, + // SoA mults + SoACostMult: 7, + SoARepMult: 1.3, + // Value raised to the number of entropy stacks, then multiplied to player multipliers EntropyEffect: 0.98, diff --git a/src/Faction/FactionInfo.tsx b/src/Faction/FactionInfo.tsx index 11acf874b..48441a93f 100644 --- a/src/Faction/FactionInfo.tsx +++ b/src/Faction/FactionInfo.tsx @@ -3,6 +3,7 @@ import { IMap } from "../types"; import { FactionNames } from "./data/FactionNames"; import { use } from "../ui/Context"; import { Option } from "./ui/Option"; +import { Typography } from "@mui/material"; interface FactionInfoParams { infoText?: JSX.Element; @@ -511,51 +512,17 @@ export const FactionInfos: IMap = { ); }, }), - // prettier-ignore - [FactionNames.Infiltrators]: new FactionInfo({ - infoText:(<> - {".,=,.==.²=.'=,.=░.==.:=,,▄▓▓▓▓▓▓▓▓▓╬░.==.²!.,=,.=⌐.==.!=,.=,.==.²=.,=,.==.²=.!=,"}
- {"'¡»⌐^»∩^:»^:=^`=∩':+]▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▒^»∩^»=^:»^²»⌐^»∩^:=^`»^`»∩^:»^¡»^`»⌐'»÷'\»'"}
- {"░░_|░_'░⌐_░∩`|▒▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░`,░``░∩`»░_|░¬`░⌐_░░`'PHYZ|C@L`»░_!░⌐`░░_|"}
- {".,=,.»\.²=,,[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▒╦╔░¡_²².,=,,=:.==_!²,,=,_==,W@Z,=,,=\.!=./²,"}
- {"'`»^^»∩':»')▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████▒▐▒Ü▒^»=^¡»^^»⌐'»∩':»^`»^'=^:=^H3R3^»∩^:»':=^"}
- {"░∩`:░_'░⌐`░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█████ÑÜP╩Ü╙░`_░∩`|░`:░_`░∩`|∩`:░_`░⌐_░░`|░`,░⌐`░∩`»"}
- {".,=,,==_²=,▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▌Ñ▓██ÑÜÜ▒Ü▒░_»=,,=,.==_»=,!=,,=,_==,»░,,=,,==_»=,!=,"}
- {"'`=^^=∩^:»^:»└'µ╫█████████╬▓▓▓██Ññ▒NÜÜ▒╠^»=':=^^=∩^»=^:=^`=⌐^»»':»`¡»^`=∩^:=^\»'"}
- {"░░`:░_,░⌐`=∩`|░_¡█╬▀███▓╬╬▀▓▓▀Ñ▒ÄÜ╟ñÜÜ╠D░¬_░░_|=_!░_`░⌐`=∩_:░_'░⌐_░░`!=`┌░__░∩_»"}
- {".,=,.==.!=,,=,.=░╠████Ñ▒▒ÄÜñÜÜÖ╠╩Ü║Üû╠╙».»░.:=,.=⌐.==.!=,,=,.==.!=.,=,_==.»=.!=,"}
- {"^`»^`»∩`:»'\»^^»⌐^╚╬▒Ü▒▒▒ÜÜ▒╚╩▒▒RÖÜ╠╠▒∩∩';╓';»^'»⌐`»»^:»^^»⌐^»∩':»^¡»''»∩`:»^\»^"}
- {"░░ :░ '░⌐_░░_|░`!░`╙▒▒╠╠ÜÉ▒╚Ö╠╠╠╠╟╬╠╠╠╬╬▓▓█▓▓▓▓▓▌▄▒,,░⌐_|░_:░`,░⌐`░░ |░ '░_`░∩_|"}
- {".,=,.=».!=,,=,.=░.==.└╙╙╜╚╩╩╙╙Ü7┘,░╚╬╠╬▓████▓▓▓▓▓█▓▓▓▓▓▓▓▓▓▓▒==,²».,»,,=░.!=.!=,"}
- {"'^»⌐^»∩^:÷^\»^^»⌐'»»^:»^^»⌐^»∩^:»'`║██████████████▓████████▓▓m»'»»^¡»^^»∩^»»^\»^"}
- {"░∩`!░_'░⌐`░░`|░,;░__░⌐`░░`|░-'░⌐`░µ▓█████████████▓▓▓▓▀▀╫▓███▓▌`░⌐_░░`|░`!░⌐`░∩`|"}
- {"_,=,_²».:=:▒▒╠▒▒╠╠▒▒,:=,,=⌐_»░_:=,▓██████████████▓▓▓▓▒!=,███▓▓░_»=_,=,_=░_!░.'=,"}
- {"▒╙R▓▓▄▄╣▓▓▓▓▓▓▓▓▓╬╬╠▒╠▄▄▄µ∩'»=]▄▄▓████Ñ»╙▀███████▓▓▓▓Ñ:»^╫█▓▓▓H`:='`=^`=∩`»=`\=^"}
- {"Ü⌐»╙▓▓▓▓▓▓╬▌╠╬▒╬╬╬╠╠Ö╣▓▓▓▓▓▓▓▓██▓███▀U``░``╫███████▓▓Ñ⌐_=╫█▓▓▓Ñ░_`░░_|░_┌░``░░_»"}
- {"|░::╟▓▓▀╚╙░/=,,╙░░╙░,⌡╩▀▓█████████▓╙,,==_²²╫███████▓▓░!=,╙╬╩▒▒▒╦╦░,,=,_=\.²=.!=,"}
- {"^'ܵÅÑ»`:='\=^^»⌐^»=':÷^^=^┴╚╢▀▀▀╙`»^'=∩`:»║██████▓▓▌^:»'╔╠▒▒▒▒▒▒▒╠M≡╦`»⌐'»=^╒»`"}
- {"░░_|░_'░⌐`░░_»░`!░¬`░▄▄▄▌▄▄▄▄▄▄╥,░░_:░`,░,╫███████▓▓Ü░⌐`=╠▒▒▒▒▒▒╠╠╩░`»╝╦:░_`░∩`»"}
- {"_,»,_!\_!=,,=,_»░_²1████████████████▓▄▓▓▄▓█████▓▓▓▓Ñ»_!=,7╝╬╚╝╩╩░ù,,»,,╫▒,²»_!=,"}
- {"'¡»^^»∩^:÷^\»^^»⌐^»=████████████████████████████▓▓Ñ»∩':»^^»╬^÷∩^:»^¡÷^║╣ÜR≈»^\÷^"}
- {"░░`|░¬'░⌐`░░`|░`:░``╫███████▀▀██████████████████▓▀░¬`░⌐`|░`╠╣╣░▒░_▒╥║╬╣▒╙Ü^=░░`|"}
- {"_,=,_»░_²=,,=,_=░_==|██████░==_╙╩▀██████████████Ñ⌐_!=_:=,_░╟%╩╬╟╣╣╣╬Ñ╣Φ╬»_²=┐╟╣╓"}
- {"`¡»^^»∩^»»^\»^^»⌐^»»[█████▓^»∩'»:^)▓██████████▀┴=⌐`»='»»^`»╠^»╠╬╠n╬╬▒^[╠∩^»»^:=^"}
- {"░∩`:░_'░⌐`░∩_»░_:░¬_▐██████▒``░⌐`▄█████████▓Ñ`»░`!░_`░⌐_|∩|╬░``╠⌐_░╠_»░╚Ü░_`░⌐`|"}
- {",,=,,==_²=.,=,,=░,==╫██████▒==,²▓███████▓╨░,,=,_=⌐,=»,!=,,=╠░»=╬==.╠Ü,_=╢,!=,!=,"}
- {"^¡÷^^»∩^:='\»^^»⌐^»»███████^»»^╫██████▄┐':»':=^^»⌐`»»^\=^░╬Ü'»┐╬░»''╢^^»∩Φ░»^\»^"}
- {"░=`!░`¡░⌐`░░`|░`:░,███████▓░_`▓███████▌'░¬`░░`|░ ¡░``░⌐`|╝╨|░``╬H_░û╬▒░`:╟╬^░∩_»"}
- {",_=,,»»_!»,,░╓▄▄▓▓█████████,=»,╙▀███████▌▄».,=,_=⌐_»»_²=,,=,,²=╚ÑÜ,,╚Ñ_=»_!=.!»_"}
- {"^^»^^»∩^:Φ███████████████▌╜^»»':»^¡╬▓██████▄░»^^»⌐'»»':»^^»''»»^»»^¡»^^»⌐':»'\»^"}
- {"░∩`:░`'░⌐╨████████████████:░``░⌐`░░`|░▀██████▓▄░`:░_`░░`»░`:░``░⌐`░░`|░`,░⌐`░░`|"}
- {"_,=,,==_!=,,=,_»=_==_²ù││ù,_==_!=,,=,,=░████████▄░_»»_!=,_=░_==_»»_,=,,=░_»=,'»,"}
- {"^¡»^^»∩^:=^\=^^»⌐^»»^:»^^=^^»∩^:=^`='^;▄▓████████▌^»»^:=^`»⌐^»»^»»^¡»^^»∩^:=^\»^"}
- {"░∩`!=_'░⌐`░∩`|░`!░``░⌐`|░`|░`'░⌐`░µ▄▓███████████▄¡░_`░⌐`|░`!░_`░⌐`░∩`|░_¡░⌐`░░`|"}
- {"################################################################################"}

- Experts in getting in and out in plain sight

- Some some speculate that the oceans movies are documentaries based on this group

- Some members are even rumored to be able to pick locks like the fonz, one hit and it will swing open ayeeeee

- Note that for this faction, reputation can only be gained by performing infiltration tasks), - special: true, - keepOnInstall: true, - }), + [FactionNames.ShadowsOfAnarchy]: new FactionInfo({ + infoText: ( + <> + The government is ruled by the corporations that we have allowed to consume it. To release the world from its + shackles, the gods grant us their strength. + + ), + special: true, + keepOnInstall: true, + assignment: (): React.ReactElement => { + return {FactionNames.ShadowsOfAnarchy} can only gain reputation by infiltrating.; + }, + }), }; diff --git a/src/Faction/data/FactionNames.ts b/src/Faction/data/FactionNames.ts index 6ebd4de63..ebee021a6 100644 --- a/src/Faction/data/FactionNames.ts +++ b/src/Faction/data/FactionNames.ts @@ -32,5 +32,5 @@ export enum FactionNames { CyberSec = "CyberSec", Bladeburners = "Bladeburners", ChurchOfTheMachineGod = "Church of the Machine God", - Infiltrators = "The Infiltrators", + ShadowsOfAnarchy = "Shadows of Anarchy", } diff --git a/src/Faction/ui/AugmentationsPage.tsx b/src/Faction/ui/AugmentationsPage.tsx index 6e220240e..f9f3664b2 100644 --- a/src/Faction/ui/AugmentationsPage.tsx +++ b/src/Faction/ui/AugmentationsPage.tsx @@ -166,7 +166,7 @@ export function AugmentationsPage(props: IProps): React.ReactElement { ); } const multiplierComponent = - props.faction.name !== FactionNames.Infiltrators ? ( + props.faction.name !== FactionNames.ShadowsOfAnarchy ? ( Price multiplier: x {numeralWrapper.formatMultiplier(getGenericAugmentationPriceMultiplier())} diff --git a/src/Infiltration/formulas/victory.ts b/src/Infiltration/formulas/victory.ts index 21d646cfa..2fca9e3a4 100644 --- a/src/Infiltration/formulas/victory.ts +++ b/src/Infiltration/formulas/victory.ts @@ -1,6 +1,8 @@ import { IPlayer } from "../../PersonObjects/IPlayer"; import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers"; import { LocationsMetadata } from "../../Locations/data/LocationsMetadata"; +import { AugmentationNames } from "../../Augmentation/data/AugmentationNames"; +import { Faction } from "../../Faction/Faction"; export function calculateSellInformationCashReward( player: IPlayer, @@ -15,7 +17,7 @@ export function calculateSellInformationCashReward( Math.pow(difficulty, 3) * 3e3 * levelBonus * - player.infiltration_sell_mult * + (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.5 : 1) * BitNodeMultipliers.InfiltrationMoney ); } @@ -33,17 +35,17 @@ export function calculateTradeInformationRepReward( Math.pow(difficulty, 3) * 3e3 * levelBonus * - player.infiltration_sell_mult * + (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.5 : 1) * BitNodeMultipliers.InfiltrationMoney ); } -export function calculateInfiltratorsRepReward(player: IPlayer, difficulty: number): number { +export function calculateInfiltratorsRepReward(player: IPlayer, faction: Faction, difficulty: number): number { const maxStartingSecurityLevel = LocationsMetadata.reduce((acc, data): number => { const startingSecurityLevel = data.infiltrationData?.startingSecurityLevel || 0; return acc > startingSecurityLevel ? acc : startingSecurityLevel; }, 0); - const baseRepGain = (difficulty / maxStartingSecurityLevel) * 10; + const baseRepGain = (difficulty / maxStartingSecurityLevel) * 5000; - return (baseRepGain + player.infiltration_base_rep_increase) * player.infiltration_rep_mult; + return baseRepGain * (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 2 : 1) * (1 + faction.favor / 100); } diff --git a/src/Infiltration/ui/BackwardGame.tsx b/src/Infiltration/ui/BackwardGame.tsx index c50a07a99..1c5ef1e6c 100644 --- a/src/Infiltration/ui/BackwardGame.tsx +++ b/src/Infiltration/ui/BackwardGame.tsx @@ -36,7 +36,7 @@ export function BackwardGame(props: IMinigameProps): React.ReactElement { const timer = difficulty.timer; const [answer] = useState(makeAnswer(difficulty)); const [guess, setGuess] = useState(""); - const hasAugment = Player.hasAugmentation(AugmentationNames.RearViewMirrorShoulderAttachment, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.ChaosOfDionysus, true); function press(this: Document, event: KeyboardEvent): void { event.preventDefault(); diff --git a/src/Infiltration/ui/BracketGame.tsx b/src/Infiltration/ui/BracketGame.tsx index 0eec21a9f..41015e8e6 100644 --- a/src/Infiltration/ui/BracketGame.tsx +++ b/src/Infiltration/ui/BracketGame.tsx @@ -33,7 +33,7 @@ const difficulties: { function generateLeftSide(difficulty: Difficulty): string { let str = ""; const options = [KEY.OPEN_BRACKET, KEY.LESS_THAN, KEY.OPEN_PARENTHESIS, KEY.OPEN_BRACE]; - if (Player.hasAugmentation(AugmentationNames.IntellisenseModule, true)) { + if (Player.hasAugmentation(AugmentationNames.WisdomOfAthena, true)) { options.splice(0, 1); } const length = random(difficulty.min, difficulty.max); diff --git a/src/Infiltration/ui/BribeGame.tsx b/src/Infiltration/ui/BribeGame.tsx index 781695325..6f6811e14 100644 --- a/src/Infiltration/ui/BribeGame.tsx +++ b/src/Infiltration/ui/BribeGame.tsx @@ -47,7 +47,7 @@ export function BribeGame(props: IMinigameProps): React.ReactElement { let upColor = defaultColor; let downColor = defaultColor; let choiceColor = defaultColor; - const hasAugment = Player.hasAugmentation(AugmentationNames.KyberCrystalInjection, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.BeautyOfAphrodite, true); if (hasAugment) { const upIndex = index + 1 >= choices.length ? 0 : index + 1; diff --git a/src/Infiltration/ui/CheatCodeGame.tsx b/src/Infiltration/ui/CheatCodeGame.tsx index 85c801d5e..f0974a3bc 100644 --- a/src/Infiltration/ui/CheatCodeGame.tsx +++ b/src/Infiltration/ui/CheatCodeGame.tsx @@ -42,7 +42,7 @@ export function CheatCodeGame(props: IMinigameProps): React.ReactElement { const timer = difficulty.timer; const [code] = useState(generateCode(difficulty)); const [index, setIndex] = useState(0); - const hasAugment = Player.hasAugmentation(AugmentationNames.DyslexiaModule, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.TrickeryOfHermes, true); function press(this: Document, event: KeyboardEvent): void { event.preventDefault(); diff --git a/src/Infiltration/ui/Cyberpunk2077Game.tsx b/src/Infiltration/ui/Cyberpunk2077Game.tsx index 054c4a705..6c61f6494 100644 --- a/src/Infiltration/ui/Cyberpunk2077Game.tsx +++ b/src/Infiltration/ui/Cyberpunk2077Game.tsx @@ -40,7 +40,7 @@ export function Cyberpunk2077Game(props: IMinigameProps): React.ReactElement { const [currentAnswerIndex, setCurrentAnswerIndex] = useState(0); const [pos, setPos] = useState([0, 0]); - const hasAugment = Player.hasAugmentation(AugmentationNames.CyberDecoder, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.FloodOfPoseidon, true); function press(this: Document, event: KeyboardEvent): void { event.preventDefault(); const move = [0, 0]; diff --git a/src/Infiltration/ui/Game.tsx b/src/Infiltration/ui/Game.tsx index 5188079f9..34732a8d6 100644 --- a/src/Infiltration/ui/Game.tsx +++ b/src/Infiltration/ui/Game.tsx @@ -13,6 +13,7 @@ import { MinesweeperGame } from "./MinesweeperGame"; import { WireCuttingGame } from "./WireCuttingGame"; import { Victory } from "./Victory"; import Typography from "@mui/material/Typography"; +import { AugmentationNames } from "../../Augmentation/data/AugmentationNames"; interface IProps { StartingDifficulty: number; @@ -93,7 +94,7 @@ export function Game(props: IProps): React.ReactElement { // it's clear they're not meant to const damage = options?.automated ? player.hp - : props.StartingDifficulty * 3 * player.infiltration_damage_reduction_mult; + : props.StartingDifficulty * 3 * (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 0.5 : 1); if (player.takeDamage(damage)) { router.toCity(); return; @@ -112,7 +113,16 @@ export function Game(props: IProps): React.ReactElement { stageComponent = setStage(Stage.Minigame)} />; break; case Stage.Minigame: { - const MiniGame = minigames[gameIds.id]; + /** + * + BackwardGame, + BribeGame, + CheatCodeGame, + Cyberpunk2077Game, + MinesweeperGame, + WireCuttingGame, + */ + const MiniGame = WireCuttingGame; // minigames[gameIds.id]; stageComponent = ; break; } diff --git a/src/Infiltration/ui/GameTimer.tsx b/src/Infiltration/ui/GameTimer.tsx index 9755685e8..a55ab0587 100644 --- a/src/Infiltration/ui/GameTimer.tsx +++ b/src/Infiltration/ui/GameTimer.tsx @@ -4,6 +4,7 @@ import withStyles from "@mui/styles/withStyles"; import { Theme } from "@mui/material/styles"; import Grid from "@mui/material/Grid"; import { use } from "../../ui/Context"; +import { AugmentationNames } from "../../Augmentation/data/AugmentationNames"; const TimerProgress = withStyles((theme: Theme) => ({ root: { @@ -23,7 +24,7 @@ interface IProps { export function GameTimer(props: IProps): React.ReactElement { const player = use.Player(); const [v, setV] = useState(100); - const totalMillis = player.infiltration_timer_mult * props.millis; + const totalMillis = (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.3 : 1) * props.millis; const tick = 200; useEffect(() => { diff --git a/src/Infiltration/ui/MinesweeperGame.tsx b/src/Infiltration/ui/MinesweeperGame.tsx index 1328aa11c..723b31f57 100644 --- a/src/Infiltration/ui/MinesweeperGame.tsx +++ b/src/Infiltration/ui/MinesweeperGame.tsx @@ -38,7 +38,7 @@ export function MinesweeperGame(props: IMinigameProps): React.ReactElement { const [answer, setAnswer] = useState(generateEmptyField(difficulty)); const [pos, setPos] = useState([0, 0]); const [memoryPhase, setMemoryPhase] = useState(true); - const hasAugment = Player.hasAugmentation(AugmentationNames.MineDetectionArmAttachment, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.HuntOfArtemis, true); function press(this: Document, event: KeyboardEvent): void { event.preventDefault(); if (memoryPhase) return; diff --git a/src/Infiltration/ui/SlashGame.tsx b/src/Infiltration/ui/SlashGame.tsx index 6b6e18051..b9eb523a9 100644 --- a/src/Infiltration/ui/SlashGame.tsx +++ b/src/Infiltration/ui/SlashGame.tsx @@ -40,7 +40,7 @@ export function SlashGame(props: IMinigameProps): React.ReactElement { props.onSuccess(); } } - const hasAugment = Player.hasAugmentation(AugmentationNames.PythiasBrainStem, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.MightOfAres, true); const phaseZeroTime = Math.random() * 3250 + 1500 - (250 + difficulty.window); const phaseOneTime = 250; const timeUntilAttacking = phaseZeroTime + phaseOneTime; diff --git a/src/Infiltration/ui/Victory.tsx b/src/Infiltration/ui/Victory.tsx index a3622d367..2a90351a0 100644 --- a/src/Infiltration/ui/Victory.tsx +++ b/src/Infiltration/ui/Victory.tsx @@ -15,6 +15,7 @@ import { calculateSellInformationCashReward, calculateTradeInformationRepReward, } from "../formulas/victory"; +import { inviteToFaction } from "../../Faction/FactionHelpers"; interface IProps { StartingDifficulty: number; @@ -33,12 +34,12 @@ export function Victory(props: IProps): React.ReactElement { router.toCity(); } + const soa = Factions[FactionNames.ShadowsOfAnarchy]; const repGain = calculateTradeInformationRepReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty); const moneyGain = calculateSellInformationCashReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty); - const infiltrationRepGain = calculateInfiltratorsRepReward(player, props.StartingDifficulty); + const infiltrationRepGain = calculateInfiltratorsRepReward(player, soa, props.StartingDifficulty); - const infiltratorFaction = Factions[FactionNames.Infiltrators]; - const isMemberOfInfiltrators = infiltratorFaction && infiltratorFaction.isMember; + const isMemberOfInfiltrators = player.factions.includes(FactionNames.ShadowsOfAnarchy); function sell(): void { handleInfiltrators(); @@ -58,9 +59,9 @@ export function Victory(props: IProps): React.ReactElement { } function handleInfiltrators(): void { - player.hasCompletedAnInfiltration = true; + inviteToFaction(Factions[FactionNames.ShadowsOfAnarchy]); if (isMemberOfInfiltrators) { - infiltratorFaction.playerReputation += infiltrationRepGain; + soa.playerReputation += infiltrationRepGain; } } @@ -75,7 +76,7 @@ export function Victory(props: IProps): React.ReactElement { You{" "} {isMemberOfInfiltrators ? ( <> - have gained {formatNumber(infiltrationRepGain, 2)} rep for {FactionNames.Infiltrators} and{" "} + have gained {formatNumber(infiltrationRepGain, 2)} rep for {FactionNames.ShadowsOfAnarchy} and{" "} ) : ( <> diff --git a/src/Infiltration/ui/WireCuttingGame.tsx b/src/Infiltration/ui/WireCuttingGame.tsx index 417e9524f..7ca0aedbc 100644 --- a/src/Infiltration/ui/WireCuttingGame.tsx +++ b/src/Infiltration/ui/WireCuttingGame.tsx @@ -64,10 +64,10 @@ export function WireCuttingGame(props: IMinigameProps): React.ReactElement { const [wires] = useState(generateWires(difficulty)); const [cutWires, setCutWires] = useState(new Array(wires.length).fill(false)); const [questions] = useState(generateQuestion(wires, difficulty)); - const hasAugment = Player.hasAugmentation(AugmentationNames.SecurityWireContacts, true); + const hasAugment = Player.hasAugmentation(AugmentationNames.KnowledgeOfApollo, true); function checkWire(wireNum: number): boolean { - return !questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1)); + return questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1)); } useEffect(() => { @@ -110,9 +110,15 @@ export function WireCuttingGame(props: IMinigameProps): React.ReactElement { {question.toString()} ))} - {new Array(wires.length).fill(0).map((_, i) => ( -  {i + 1}     - ))} + {new Array(wires.length).fill(0).map((_, i) => { + const isCorrectWire = checkWire(i + 1); + const color = hasAugment && !isCorrectWire ? Settings.theme.disabled : Settings.theme.primary; + return ( + +  {i + 1}     + + ); + })} {new Array(8).fill(0).map((_, i) => (
diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index b53fa2662..9485a7cc4 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -2492,12 +2492,6 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { bladeburner_stamina_gain_mult: Player.bladeburner_stamina_gain_mult, bladeburner_analysis_mult: Player.bladeburner_analysis_mult, bladeburner_success_chance_mult: Player.bladeburner_success_chance_mult, - infiltration_base_rep_increase: Player.infiltration_base_rep_increase, - infiltration_rep_mult: Player.infiltration_rep_mult, - infiltration_trade_mult: Player.infiltration_trade_mult, - infiltration_sell_mult: Player.infiltration_sell_mult, - infiltration_timer_mult: Player.infiltration_timer_mult, - infiltration_damage_reduction_mult: Player.infiltration_damage_reduction_mult, bitNodeN: Player.bitNodeN, totalPlaytime: Player.totalPlaytime, playtimeSinceLastAug: Player.playtimeSinceLastAug, diff --git a/src/NetscriptFunctions/Infiltration.ts b/src/NetscriptFunctions/Infiltration.ts index 7b2950f42..25a85271f 100644 --- a/src/NetscriptFunctions/Infiltration.ts +++ b/src/NetscriptFunctions/Infiltration.ts @@ -16,6 +16,8 @@ import { calculateSellInformationCashReward, calculateTradeInformationRepReward, } from "../Infiltration/formulas/victory"; +import { FactionNames } from "../Faction/data/FactionNames"; +import { Factions } from "../Faction/Factions"; export function NetscriptInfiltration( player: IPlayer, @@ -47,7 +49,7 @@ export function NetscriptInfiltration( reward: { tradeRep: calculateTradeInformationRepReward(player, reward, maxLevel, difficulty), sellCash: calculateSellInformationCashReward(player, reward, maxLevel, difficulty), - infiltratorRep: calculateInfiltratorsRepReward(player, difficulty), + infiltratorRep: calculateInfiltratorsRepReward(player, Factions[FactionNames.ShadowsOfAnarchy], difficulty), }, difficulty: difficulty, }; diff --git a/src/PersonObjects/IPlayer.ts b/src/PersonObjects/IPlayer.ts index c0d32f3c3..ca1f2940a 100644 --- a/src/PersonObjects/IPlayer.ts +++ b/src/PersonObjects/IPlayer.ts @@ -73,7 +73,6 @@ export interface IPlayer { terminalCommandHistory: string[]; lastUpdate: number; totalPlaytime: number; - hasCompletedAnInfiltration: boolean; // Stats hacking: number; @@ -124,12 +123,6 @@ export interface IPlayer { bladeburner_stamina_gain_mult: number; bladeburner_analysis_mult: number; bladeburner_success_chance_mult: number; - infiltration_base_rep_increase: number; - infiltration_rep_mult: number; - infiltration_trade_mult: number; - infiltration_sell_mult: number; - infiltration_timer_mult: number; - infiltration_damage_reduction_mult: number; createProgramReqLvl: number; factionWorkType: string; diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts index eebf6c2ee..72d15e3c1 100644 --- a/src/PersonObjects/Player/PlayerObject.ts +++ b/src/PersonObjects/Player/PlayerObject.ts @@ -83,7 +83,6 @@ export class PlayerObject implements IPlayer { lastUpdate: number; lastSave: number; totalPlaytime: number; - hasCompletedAnInfiltration: boolean; // Stats hacking: number; @@ -134,12 +133,6 @@ export class PlayerObject implements IPlayer { bladeburner_stamina_gain_mult: number; bladeburner_analysis_mult: number; bladeburner_success_chance_mult: number; - infiltration_base_rep_increase: number; - infiltration_rep_mult: number; - infiltration_trade_mult: number; - infiltration_sell_mult: number; - infiltration_timer_mult: number; - infiltration_damage_reduction_mult: number; createProgramReqLvl: number; factionWorkType: string; @@ -472,13 +465,6 @@ export class PlayerObject implements IPlayer { this.bladeburner_analysis_mult = 1; //Field Analysis Onl; this.bladeburner_success_chance_mult = 1; - this.infiltration_base_rep_increase = 0; - this.infiltration_rep_mult = 1; - this.infiltration_trade_mult = 1; - this.infiltration_sell_mult = 1; - this.infiltration_timer_mult = 1; - this.infiltration_damage_reduction_mult = 1; - // Sleeves & Re-sleeving this.sleeves = []; this.sleevesFromCovenant = 0; // # of Duplicate sleeves purchased from the covenan; @@ -491,7 +477,6 @@ export class PlayerObject implements IPlayer { this.lastUpdate = 0; this.lastSave = 0; this.totalPlaytime = 0; - this.hasCompletedAnInfiltration = false; this.playtimeSinceLastAug = 0; this.playtimeSinceLastBitnode = 0; diff --git a/src/PersonObjects/Player/PlayerObjectAugmentationMethods.ts b/src/PersonObjects/Player/PlayerObjectAugmentationMethods.ts index 4dcc9e61d..e2d5aa2ad 100644 --- a/src/PersonObjects/Player/PlayerObjectAugmentationMethods.ts +++ b/src/PersonObjects/Player/PlayerObjectAugmentationMethods.ts @@ -7,7 +7,7 @@ import { Augmentation } from "../../Augmentation/Augmentation"; import { calculateEntropy } from "../Grafting/EntropyAccumulation"; -export function hasAugmentation(this: IPlayer, aug: string | Augmentation, includeQueued = false): boolean { +export function hasAugmentation(this: IPlayer, aug: string | Augmentation, ignoreQueued = false): boolean { const augName: string = aug instanceof Augmentation ? aug.name : aug; for (const owned of this.augmentations) { @@ -16,7 +16,7 @@ export function hasAugmentation(this: IPlayer, aug: string | Augmentation, inclu } } - if (!includeQueued) { + if (!ignoreQueued) { for (const owned of this.queuedAugmentations) { if (owned.name === augName) { return true; diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx index 8ce7dfabe..47fb777c0 100644 --- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx +++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx @@ -160,7 +160,6 @@ export function prestigeAugmentation(this: PlayerObject): void { this.workChaExpGained = 0; this.workRepGained = 0; this.workMoneyGained = 0; - this.hasCompletedAnInfiltration = false; this.timeWorked = 0; @@ -313,13 +312,6 @@ export function resetMultipliers(this: IPlayer): void { this.bladeburner_stamina_gain_mult = 1; this.bladeburner_analysis_mult = 1; this.bladeburner_success_chance_mult = 1; - - this.infiltration_base_rep_increase = 0; - this.infiltration_rep_mult = 1; - this.infiltration_trade_mult = 1; - this.infiltration_sell_mult = 1; - this.infiltration_timer_mult = 1; - this.infiltration_damage_reduction_mult = 1; } export function hasProgram(this: IPlayer, programName: string): boolean { @@ -2151,12 +2143,6 @@ export function checkForFactionInvitations(this: IPlayer): Faction[] { return allCompanies.includes(companyName) && getCompanyRep(companyName) > repNeeded; } - //Infiltrators - const InfiltratorsFac = Factions[FactionNames.Infiltrators]; - if (this.hasCompletedAnInfiltration && !InfiltratorsFac.isMember && !InfiltratorsFac.alreadyInvited) { - invitedFactions.push(InfiltratorsFac); - } - //Illuminati const illuminatiFac = Factions[FactionNames.Illuminati]; if ( diff --git a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx index bb54ffefc..8d3295076 100644 --- a/src/PersonObjects/Sleeve/ui/TaskSelector.tsx +++ b/src/PersonObjects/Sleeve/ui/TaskSelector.tsx @@ -56,7 +56,7 @@ function possibleJobs(player: IPlayer, sleeve: Sleeve): string[] { function possibleFactions(player: IPlayer, sleeve: Sleeve): string[] { // Array of all factions that other sleeves are working for - const forbiddenFactions = [FactionNames.Bladeburners as string, FactionNames.Infiltrators as string]; + const forbiddenFactions = [FactionNames.Bladeburners as string, FactionNames.ShadowsOfAnarchy as string]; if (player.gang) { forbiddenFactions.push(player.gang.facName); } diff --git a/src/SaveObject.tsx b/src/SaveObject.tsx index 20f8bb8ec..dafaca6aa 100755 --- a/src/SaveObject.tsx +++ b/src/SaveObject.tsx @@ -24,6 +24,8 @@ import { SxProps } from "@mui/system"; import { PlayerObject } from "./PersonObjects/Player/PlayerObject"; import { pushGameSaved } from "./Electron"; import { defaultMonacoTheme } from "./ScriptEditor/ui/themes"; +import { FactionNames } from "./Faction/data/FactionNames"; +import { Faction } from "./Faction/Faction"; /* SaveObject.js * Defines the object used to save/load games @@ -398,6 +400,9 @@ function evaluateVersionCompatibility(ver: string | number): void { if (ver < 15) { (Settings as any).EditorTheme = { ...defaultMonacoTheme }; } + if (ver < 16) { + Factions[FactionNames.ShadowsOfAnarchy] = new Faction(FactionNames.ShadowsOfAnarchy); + } } } diff --git a/src/ui/CharacterStats.tsx b/src/ui/CharacterStats.tsx index c34298ca4..e8fc0d02a 100644 --- a/src/ui/CharacterStats.tsx +++ b/src/ui/CharacterStats.tsx @@ -495,18 +495,6 @@ export function CharacterStats(): React.ReactElement { noMargin /> )} - {player.factions.includes(FactionNames.Infiltrators) && ( - - )}