diff --git a/src/Augmentations.js b/src/Augmentations.js index fbed4a95a..1ef6c9774 100644 --- a/src/Augmentations.js +++ b/src/Augmentations.js @@ -8,6 +8,10 @@ function Augmentation(name) { //Price and reputation base requirements (can change based on faction multipliers) this.baseRepRequirement = 0; this.baseCost = 0; + + //Level - Only applicable for some augmentations + // NeuroFlux Governor + this.level = 0; } Augmentation.prototype.setInfo = function(inf) { @@ -31,6 +35,19 @@ Augmentation.prototype.addToFactions = function(factionList) { } } +Augmentation.prototype.addToAllFactions = function() { + for (var fac in Factions) { + if (Factions.hasOwnProperty(fac)) { + var facObj = Factions[fac]; + if (facObj == null) { + console.log("ERROR: Invalid faction object"); + continue; + } + facObj.augmentations.push(this.name); + } + } +} + Augmentation.prototype.toJSON = function() { return Generic_toJSON("Augmentation", this); } @@ -94,6 +111,7 @@ AugmentationNames = { HacknetNodeNICUpload: "HacknetNode NIC Architecture Neural-Upload", HacknetNodeKernelDNI: "Hacknet Node Kernel Direct-Neural Interface", HacknetNodeCoreDNI: "Hacknet Node Core Direct-Neural Interface", + NeuroFluxGovernor: "NeuroFlux Governor", Neurotrainer1: "Neurotrainer I", Neurotrainer2: "Neurotrainer II", Neurotrainer3: "Neurotrainer III", @@ -320,7 +338,7 @@ initAugmentations = function() { "and inflection, to pick up on subtle cues and aid in social interaction.

" + "This augmentation increases the player's charisma by 20%."); SpeechProcessor.addToFactions(["Tian Di Hui", "Chongqing", "Sector-12", "New Tokyo", "Aevum", - "Ishima", "Volhaven"]); + "Ishima", "Volhaven", "Silhouette"]); if (augmentationExists(AugmentationNames.SpeechProcessor)) { SpeechProcessor.owned = Augmentations[AugmentationNames.SpeechProcessor].owned; delete Augmentations[AugmentationNames.SpeechProcessor]; @@ -390,7 +408,7 @@ initAugmentations = function() { ArtificialSynapticPotentiation.setRequirements(5000, 25000000); ArtificialSynapticPotentiation.setInfo("The body is injected with a chemical that artificially induces synaptic potentiation, " + "otherwise known as the strengthening of synapses. This results in a enhanced cognitive abilities.

" + - "This augmentation increases the player's hacking speed and hacking chance by 1%."); + "This augmentation increases the player's hacking speed and hacking chance by 2%."); ArtificialSynapticPotentiation.addToFactions(["The Black Hand", "NiteSec"]); if (augmentationExists(AugmentationNames.ArtificialSynapticPotentiation)) { ArtificialSynapticPotentiation.owned = Augmentations[AugmentationNames.ArtificialSynapticPotentiation].owned; @@ -399,7 +417,7 @@ initAugmentations = function() { AddToAugmentations(ArtificialSynapticPotentiation); var EnhancedMyelinSheathing = new Augmentation(AugmentationNames.EnhancedMyelinSheathing); - EnhancedMyelinSheathing.setRequirements(300000, 850000000); + EnhancedMyelinSheathing.setRequirements(250000, 850000000); EnhancedMyelinSheathing.setInfo("Electrical signals are used to induce a new, artificial form of myelinogensis in the human body. " + "This process results in the proliferation of new, synthetic myelin sheaths in the nervous " + "system. These myelin sheaths can propogate neuro-signals much faster than their organic " + @@ -416,7 +434,7 @@ initAugmentations = function() { AddToAugmentations(EnhancedMyelinSheathing); var SynapticEnhancement = new Augmentation(AugmentationNames.SynapticEnhancement); - SynapticEnhancement.setRequirements(1500, 1500000); + SynapticEnhancement.setRequirements(1500, 1200000); SynapticEnhancement.setInfo("A small cranial implant that continuously uses weak electric signals to stimulate the brain and " + "induce stronger synaptic activity. This improves the the user's cognitive abilities.

" + "This augmentation increases the player's hacking speed by 1%."); @@ -428,7 +446,7 @@ initAugmentations = function() { AddToAugmentations(SynapticEnhancement); var NeuralRetentionEnhancement = new Augmentation(AugmentationNames.NeuralRetentionEnhancement); - NeuralRetentionEnhancement.setRequirements(60000, 100000000); + NeuralRetentionEnhancement.setRequirements(20000, 100000000); NeuralRetentionEnhancement.setInfo("Chemical injections are used to permanently alter and strengthen the brain's neuronal " + "circuits, strengthening its ability to retain information.

" + "This augmentation increases the player's hacking experience gain rate by 40%."); @@ -555,7 +573,7 @@ initAugmentations = function() { AddToAugmentations(ENMDMA); var Neuralstimulator = new Augmentation(AugmentationNames.Neuralstimulator); - Neuralstimulator.setRequirements(120000, 600000000); + Neuralstimulator.setRequirements(60000, 500000000); Neuralstimulator.setInfo("A cranial implant that intelligently stimulates certain areas of the brain " + "in order to improve cognitive functions

" + "This augmentation:
" + @@ -573,7 +591,7 @@ initAugmentations = function() { //Work Augmentations var NuoptimalInjectorImplant = new Augmentation(AugmentationNames.NuoptimalInjectorImplant); - NuoptimalInjectorImplant.setRequirements(6000, 15000000); + NuoptimalInjectorImplant.setRequirements(5000, 12000000); NuoptimalInjectorImplant.setInfo("This torso implant automatically injects nootropic supplements into " + "the bloodstream to improve memory, increase focus, and provide other " + "cognitive enhancements.

" + @@ -588,7 +606,7 @@ initAugmentations = function() { AddToAugmentations(NuoptimalInjectorImplant); var SpeechEnhancement = new Augmentation(AugmentationNames.SpeechEnhancement); - SpeechEnhancement.setRequirements(3000, 4000000); + SpeechEnhancement.setRequirements(2000, 3000000); SpeechEnhancement.setInfo("An advanced neural implant that improves your speaking abilities, making " + "you more convincing and likable in conversations and overall improving your " + "social interactions.

" + @@ -753,6 +771,24 @@ initAugmentations = function() { AddToAugmentations(HacknetNodeCoreDNI); //Misc augmentations + var NeuroFluxGovernor = new Augmentation(AugmentationNames.NeuroFluxGovernor); + if (augmentationExists(AugmentationNames.NeuroFluxGovernor)) { + var oldAug = Augmentations[AugmentationNames.NeuroFluxGovernor]; + NeuroFluxGovernor.owned = oldAug.owned; + NeuroFluxGovernor.level = oldAug.level; + var mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, NeuroFluxGovernor.level-1); + NeuroFluxGovernor.setRequirements(1500 * mult, 1500000 * mult); + delete Augmentations[AugmentationNames.NeuroFluxGovernor]; + } + NeuroFluxGovernor.setInfo("A device that is embedded in the back of the neck. The NeuroFlux Governor " + + "monitors and regulates nervous impulses coming to and from the spinal column, " + + "essentially 'governing' the body. By doing so, it improves the functionality of the " + + "body's nervous system.

" + + "This is a special augmentation because it can be leveled up. Each level of this augmentation " + + "increases all of the player's stats by 0.5%.") + NeuroFluxGovernor.addToAllFactions(); + AddToAugmentations(NeuroFluxGovernor); + var Neurotrainer1 = new Augmentation(AugmentationNames.Neurotrainer1); Neurotrainer1.setRequirements(1000, 1000000); Neurotrainer1.setInfo("A decentralized cranial implant that improves the brain's ability to learn. It is " + @@ -768,7 +804,7 @@ initAugmentations = function() { AddToAugmentations(Neurotrainer1); var Neurotrainer2 = new Augmentation(AugmentationNames.Neurotrainer2); - Neurotrainer2.setRequirements(6000, 10000000); + Neurotrainer2.setRequirements(5000, 10000000); Neurotrainer2.setInfo("A decentralized cranial implant that improves the brain's ability to learn. This " + "is a more powerful version of the Neurotrainer I augmentation, but it does not " + "require Neurotrainer I to be installed as a prerequisite.

" + @@ -811,7 +847,7 @@ initAugmentations = function() { } applyAugmentation = function(aug, faction) { - if (aug.owned) { + if (aug.name != AugmentationNames.NeuroFluxGovernor && aug.owned) { throw new Error("This Augmentation is already owned/applied...somethings wrong"); return; } @@ -904,8 +940,8 @@ applyAugmentation = function(aug, faction) { Player.hacking_mult *= 1.1; break; case AugmentationNames.ArtificialSynapticPotentiation: //Med level - Player.hacking_speed_mult *= .99; - Player.hacking_chance_mult *= 1.01; + Player.hacking_speed_mult *= .98; + Player.hacking_chance_mult *= 1.02; break; case AugmentationNames.EnhancedMyelinSheathing: //Med level Player.hacking_speed_mult *= .99; @@ -1018,6 +1054,15 @@ applyAugmentation = function(aug, faction) { break; //Misc augmentations + case AugmentationNames.NeuroFluxGovernor: + Player.hacking_mult *= 1.005; + Player.strength_mult *= 1.005; + Player.defense_mult *= 1.005; + Player.dexterity_mult *= 1.005; + Player.agility_mult *= 1.005; + Player.charisma_mult *= 1.005; + ++aug.level; + break; case AugmentationNames.Neurotrainer1: //Low Level Player.hacking_exp_mult *= 1.05; Player.strength_exp_mult *= 1.05; diff --git a/src/Constants.js b/src/Constants.js index 48584f39f..5e9b56218 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -1,8 +1,9 @@ CONSTANTS = { Version: "0.1", - //Max level for any skill. Determined by max numerical value in javascript and the skill level - //formula in Player.js + //Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience + //and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then + //the player will have this level assuming no multipliers. Multipliers can cause skills to go above this. MaxSkillLevel: 975, //How much reputation is needed to join a megacorporation's faction @@ -20,6 +21,10 @@ CONSTANTS = { HacknetNodeUpgradeLevelMult: 1.07, //Multiplier for cost when upgrading level HacknetNodeUpgradeRamMult: 1.2, //Multiplier for cost when upgrading RAM HacknetNodeUpgradeCoreMult: 1.5, //Multiplier for cost when buying another core + + /* Augmentation */ + //NeuroFlux Governor cost multiplier as you level up + NeuroFluxGovernorLevelMult: 1.1, /* Script related things */ //Time (ms) it takes to run one operation in Netscript. diff --git a/src/Faction.js b/src/Faction.js index c62a1d668..7e06a74a5 100644 --- a/src/Faction.js +++ b/src/Faction.js @@ -316,7 +316,7 @@ PlayerObject.prototype.checkForFactionInvitations = function() { //Sector-12 var sector12Fac = Factions["Sector-12"]; if (sector12Fac.isBanned == false && sector12Fac.isMember == false && - this.money >= 40000000 && this.location == Locations.Sector12) { + this.money >= 15000000 && this.location == Locations.Sector12) { invitedFactions.push(sector12Fac); } @@ -736,7 +736,6 @@ displayFactionAugmentations = function(factionName) { } for (var i = 0; i < faction.augmentations.length; ++i) { - console.log("here"); (function () { var aug = Augmentations[faction.augmentations[i]]; var item = document.createElement("li"); @@ -745,7 +744,7 @@ displayFactionAugmentations = function(factionName) { var pElem = document.createElement("p"); aElem.setAttribute("href", "#"); var req = aug.baseRepRequirement * faction.augmentationRepRequirementMult; - if (aug.owned) { + if (aug.name != AugmentationNames.NeuroFluxGovernor && aug.owned) { aElem.setAttribute("class", "a-link-button-inactive"); pElem.innerHTML = "ALREADY OWNED"; } else if (faction.playerReputation >= req) { @@ -759,9 +758,11 @@ displayFactionAugmentations = function(factionName) { aElem.style.display = "inline-block"; pElem.style.display = "inline-block"; aElem.innerHTML = aug.name; + if (aug.name == AugmentationNames.NeuroFluxGovernor) { + aElem.innerHTML += " - Level " + (aug.level + 1); + } aElem.addEventListener("click", function() { - console.log("here"); purchaseAugmentationBoxCreate(aug, faction); }); diff --git a/src/engine.js b/src/engine.js index c092c877d..218651934 100644 --- a/src/engine.js +++ b/src/engine.js @@ -457,6 +457,9 @@ var Engine = { item.setAttribute("class", "installed-augmentation"); hElem.innerHTML = augName; + if (augName == AugmentationNames.NeuroFluxGovernor) { + hElem += " - Level " + (aug.level); + } pElem.innerHTML = aug.info; item.appendChild(hElem); @@ -713,9 +716,9 @@ var Engine = { } else { //No save found, start new game console.log("Initializing new game"); + SpecialServerIps = new SpecialServerIpsMap(); Engine.setDisplayElements(); //Sets variables for important DOM elements Engine.start(); //Run main game loop and Scripts loop - SpecialServerIps = new SpecialServerIpsMap(); Player.init(); initForeignServers(); initCompanies();