This commit is contained in:
danielyxie 2019-04-19 22:27:33 -07:00 committed by danielyxie
parent 3dd2975c61
commit 7a3a3de7d1
18 changed files with 384 additions and 186 deletions

@ -1,6 +1,7 @@
# Bitburner
Bitburner is a cyberpunk hacking-themed incremental game. The game can be
played at https://danielyxie.github.io/bitburner.
Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wiki/Incremental_game)
that revolves around hacking and cyberpunk themes.
The game can be played at https://danielyxie.github.io/bitburner.
# Documentation
The game's official documentation can be found on [Read The

File diff suppressed because one or more lines are too long

10
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

@ -40,7 +40,7 @@ solutions. Some may be numbers, others may be strings or arrays.
If a contract asks for a specific solution format, then
use that. Otherwise, follow these rules when submitting solutions:
* String-type solutions should not have quotation marks surrounding
* String-type solutions should **not** have quotation marks surrounding
the string (unless specifically asked for). Only quotation
marks that are part of the actual string solution should be included.
* Array-type solutions should be submitted with each element

@ -6,10 +6,11 @@ Changelog
v0.46.2 - 4/14/2019
-------------------
* Source-File 2 now allows you to form gangs in other BitNodes when your karma reaches a very large negative value
** (Karma is a hidden stat and is lowered by committing crimes)
* (Karma is a hidden stat and is lowered by committing crimes)
* Gang changes:
** Bug Fix: Gangs can no longer clash with themselve
** Bug Fix: Winning against another gang should properly reduce their power
* Bug Fix: Gangs can no longer clash with themselve
* Bug Fix: Winning against another gang should properly reduce their power
* Bug Fix: Terminal 'wget' command now works properly
* Bug Fix: Hacknet Server Hash upgrades now properly reset upon installing Augs/switching BitNodes

@ -5,8 +5,9 @@
Welcome to Bitburner's documentation!
=====================================
Bitburner is a cyberpunk-themed `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_ that is currently in the
early beta stage of development. The game `can be played here <https://danielyxie.github.io/bitburner/>`_.
Bitburner is a programming-based `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_
that revolves around hacking and cyberpunk themes. The game is currently in the
early beta stage of development. It `can be played here <https://danielyxie.github.io/bitburner/>`_.
What is Bitburner?
------------------

@ -46,7 +46,7 @@ function initAugmentations() {
clearObject(Augmentations);
//Combat stat augmentations
var HemoRecirculator = new Augmentation({
const HemoRecirculator = new Augmentation({
name:AugmentationNames.HemoRecirculator, moneyCost: 9e6, repCost:4e3,
info:"A heart implant that greatly increases the body's ability to effectively use and pump " +
"blood.<br><br>" +
@ -62,7 +62,7 @@ function initAugmentations() {
}
AddToAugmentations(HemoRecirculator);
var Targeting1 = new Augmentation({
const Targeting1 = new Augmentation({
name:AugmentationNames.Targeting1, moneyCost:3e6, repCost:2e3,
info:"This cranial implant is embedded within the player's inner ear structure and optic nerves. It regulates and enhances the user's " +
"balance and hand-eye coordination. It is also capable of augmenting reality by projecting digital information " +
@ -77,7 +77,7 @@ function initAugmentations() {
}
AddToAugmentations(Targeting1);
var Targeting2 = new Augmentation({
const Targeting2 = new Augmentation({
name:AugmentationNames.Targeting2, moneyCost:8.5e6, repCost:3.5e3,
info:"This is an upgrade of the Augmented Targeting I cranial implant, which is capable of augmenting reality " +
"and enhances the user's balance and hand-eye coordination.<br><br>" +
@ -92,7 +92,7 @@ function initAugmentations() {
}
AddToAugmentations(Targeting2);
var Targeting3 = new Augmentation({
const Targeting3 = new Augmentation({
name:AugmentationNames.Targeting3, moneyCost:23e6, repCost:11e3,
info:"This is an upgrade of the Augmented Targeting II cranial implant, which is capable of augmenting reality " +
"and enhances the user's balance and hand-eye coordination.<br><br>" +
@ -107,7 +107,7 @@ function initAugmentations() {
}
AddToAugmentations(Targeting3);
var SyntheticHeart = new Augmentation({
const SyntheticHeart = new Augmentation({
name:AugmentationNames.SyntheticHeart, moneyCost:575e6, repCost:300e3,
info:"This advanced artificial heart, created from plasteel and graphene, is capable of pumping more blood " +
"at much higher efficiencies than a normal human heart.<br><br>" +
@ -122,7 +122,7 @@ function initAugmentations() {
}
AddToAugmentations(SyntheticHeart);
var SynfibrilMuscle = new Augmentation({
const SynfibrilMuscle = new Augmentation({
name:AugmentationNames.SynfibrilMuscle, repCost:175e3, moneyCost:225e6,
info:"The myofibrils in human muscles are injected with special chemicals that react with the proteins inside " +
"the myofibrils, altering their underlying structure. The end result is muscles that are stronger and more elastic. " +
@ -138,7 +138,7 @@ function initAugmentations() {
}
AddToAugmentations(SynfibrilMuscle)
var CombatRib1 = new Augmentation({
const CombatRib1 = new Augmentation({
name:AugmentationNames.CombatRib1, repCost:3e3, moneyCost:4750000,
info:"The human body's ribs are replaced with artificial ribs that automatically and continuously release cognitive " +
"and performance-enhancing drugs into the bloodstream, improving the user's abilities in combat.<br><br>" +
@ -153,7 +153,7 @@ function initAugmentations() {
}
AddToAugmentations(CombatRib1);
var CombatRib2 = new Augmentation({
const CombatRib2 = new Augmentation({
name:AugmentationNames.CombatRib2, repCost:7.5e3, moneyCost:13e6,
info:"This is an upgrade to the Combat Rib I augmentation, and is capable of releasing even more potent combat-enhancing " +
"drugs into the bloodstream.<br><br>" +
@ -169,7 +169,7 @@ function initAugmentations() {
}
AddToAugmentations(CombatRib2);
var CombatRib3 = new Augmentation({
const CombatRib3 = new Augmentation({
name:AugmentationNames.CombatRib3, repCost:14e3, moneyCost:24e6,
info:"This is an upgrade to the Combat Rib II augmentation, and is capable of releasing even more potent combat-enhancing " +
"drugs into the bloodstream<br><br>." +
@ -185,7 +185,7 @@ function initAugmentations() {
}
AddToAugmentations(CombatRib3);
var NanofiberWeave = new Augmentation({
const NanofiberWeave = new Augmentation({
name:AugmentationNames.NanofiberWeave, repCost:15e3, moneyCost:25e6,
info:"Synthetic nanofibers are woven into the skin's extracellular matrix using electrospinning. " +
"This improves the skin's ability to regenerate itself and protect the body from external stresses and forces.<br><br>" +
@ -200,7 +200,7 @@ function initAugmentations() {
}
AddToAugmentations(NanofiberWeave);
var SubdermalArmor = new Augmentation({
const SubdermalArmor = new Augmentation({
name:AugmentationNames.SubdermalArmor, repCost:350e3, moneyCost:650e6,
info:"The NEMEAN Subdermal Weave is a thin, light-weight, graphene plating that houses a dilatant fluid. " +
"The material is implanted underneath the skin, and is the most advanced form of defensive enhancement " +
@ -217,7 +217,7 @@ function initAugmentations() {
}
AddToAugmentations(SubdermalArmor);
var WiredReflexes = new Augmentation({
const WiredReflexes = new Augmentation({
name:AugmentationNames.WiredReflexes, repCost:500, moneyCost:500e3,
info:"Synthetic nerve-enhancements are injected into all major parts of the somatic nervous system, " +
"supercharging the body's ability to send signals through neurons. This results in increased reflex speed.<br><br>" +
@ -232,7 +232,7 @@ function initAugmentations() {
}
AddToAugmentations(WiredReflexes);
var GrapheneBoneLacings = new Augmentation({
const GrapheneBoneLacings = new Augmentation({
name:AugmentationNames.GrapheneBoneLacings, repCost:450e3, moneyCost:850e6,
info:"A graphene-based material is grafted and fused into the user's bones, significantly increasing " +
"their density and tensile strength.<br><br>" +
@ -246,7 +246,7 @@ function initAugmentations() {
}
AddToAugmentations(GrapheneBoneLacings);
var BionicSpine = new Augmentation({
const BionicSpine = new Augmentation({
name:AugmentationNames.BionicSpine, repCost:18e3, moneyCost:25e6,
info:"An artificial spine created from plasteel and carbon fibers that completely replaces the organic spine. " +
"Not only is the Bionic Spine physically stronger than a human spine, but it is also capable of digitally " +
@ -265,7 +265,7 @@ function initAugmentations() {
}
AddToAugmentations(BionicSpine);
var GrapheneBionicSpine = new Augmentation({
const GrapheneBionicSpine = new Augmentation({
name:AugmentationNames.GrapheneBionicSpine, repCost:650e3, moneyCost:1200e6,
info:"An upgrade to the Bionic Spine augmentation. It fuses the implant with an advanced graphene " +
"material to make it much stronger and lighter.<br><br>" +
@ -282,7 +282,7 @@ function initAugmentations() {
}
AddToAugmentations(GrapheneBionicSpine);
var BionicLegs = new Augmentation({
const BionicLegs = new Augmentation({
name:AugmentationNames.BionicLegs, repCost:60e3, moneyCost:75e6,
info:"Cybernetic legs created from plasteel and carbon fibers that completely replace the user's organic legs.<br><br>" +
"This augmentation increases the player's agility by 60%.",
@ -295,7 +295,7 @@ function initAugmentations() {
}
AddToAugmentations(BionicLegs);
var GrapheneBionicLegs = new Augmentation({
const GrapheneBionicLegs = new Augmentation({
name:AugmentationNames.GrapheneBionicLegs, repCost:300e3, moneyCost:900e6,
info:"An upgrade to the Bionic Legs augmentation. It fuses the implant with an advanced graphene " +
"material to make it much stronger and lighter.<br><br>" +
@ -309,8 +309,8 @@ function initAugmentations() {
}
AddToAugmentations(GrapheneBionicLegs);
//Labor stat augmentations
var SpeechProcessor = new Augmentation({
// Work stat augmentations
const SpeechProcessor = new Augmentation({
name:AugmentationNames.SpeechProcessor, repCost:3e3, moneyCost:10e6,
info:"A cochlear implant with an embedded computer that analyzes incoming speech. " +
"The embedded computer processes characteristics of incoming speech, such as tone " +
@ -325,7 +325,7 @@ function initAugmentations() {
}
AddToAugmentations(SpeechProcessor);
let TITN41Injection = new Augmentation({
const TITN41Injection = new Augmentation({
name:AugmentationNames.TITN41Injection, repCost:10e3, moneyCost:38e6,
info:"TITN is a series of viruses that targets and alters the sequences of human DNA in genes that " +
"control personality. The TITN-41 strain alters these genes so that the subject becomes more " +
@ -340,7 +340,7 @@ function initAugmentations() {
}
AddToAugmentations(TITN41Injection);
var EnhancedSocialInteractionImplant = new Augmentation({
const EnhancedSocialInteractionImplant = new Augmentation({
name:AugmentationNames.EnhancedSocialInteractionImplant, repCost:150e3, moneyCost:275e6,
info:"A cranial implant that greatly assists in the user's ability to analyze social situations " +
"and interactions. The system uses a wide variety of factors such as facial expression, body " +
@ -359,7 +359,7 @@ function initAugmentations() {
AddToAugmentations(EnhancedSocialInteractionImplant);
// Hacking augmentations
var BitWire = new Augmentation({
const BitWire = new Augmentation({
name:AugmentationNames.BitWire, repCost:1500, moneyCost:2e6,
info: "A small brain implant embedded in the cerebrum. This regulates and improves the brain's computing " +
"capabilities.<br><br>" +
@ -372,7 +372,7 @@ function initAugmentations() {
}
AddToAugmentations(BitWire);
var ArtificialBioNeuralNetwork = new Augmentation({
const ArtificialBioNeuralNetwork = new Augmentation({
name:AugmentationNames.ArtificialBioNeuralNetwork, repCost:110e3, moneyCost:600e6,
info:"A network consisting of millions of nanoprocessors is embedded into the brain. " +
"The network is meant to mimick the way a biological brain solves a problem, which each " +
@ -393,7 +393,7 @@ function initAugmentations() {
}
AddToAugmentations(ArtificialBioNeuralNetwork);
var ArtificialSynapticPotentiation = new Augmentation({
const ArtificialSynapticPotentiation = new Augmentation({
name:AugmentationNames.ArtificialSynapticPotentiation, repCost:2500, moneyCost:16e6,
info:"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.<br><br>" +
@ -411,7 +411,7 @@ function initAugmentations() {
}
AddToAugmentations(ArtificialSynapticPotentiation);
var EnhancedMyelinSheathing = new Augmentation({
const EnhancedMyelinSheathing = new Augmentation({
name:AugmentationNames.EnhancedMyelinSheathing, repCost:40e3, moneyCost:275e6,
info:"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 " +
@ -431,7 +431,7 @@ function initAugmentations() {
}
AddToAugmentations(EnhancedMyelinSheathing);
var SynapticEnhancement = new Augmentation({
const SynapticEnhancement = new Augmentation({
name:AugmentationNames.SynapticEnhancement, repCost:800, moneyCost:1.5e6,
info:"A small cranial implant that continuously uses weak electric signals to stimulate the brain and " +
"induce stronger synaptic activity. This improves the user's cognitive abilities.<br><br>" +
@ -444,7 +444,7 @@ function initAugmentations() {
}
AddToAugmentations(SynapticEnhancement);
var NeuralRetentionEnhancement = new Augmentation({
const NeuralRetentionEnhancement = new Augmentation({
name:AugmentationNames.NeuralRetentionEnhancement, repCost:8e3, moneyCost:50e6,
info:"Chemical injections are used to permanently alter and strengthen the brain's neuronal " +
"circuits, strengthening its ability to retain information.<br><br>" +
@ -457,7 +457,7 @@ function initAugmentations() {
}
AddToAugmentations(NeuralRetentionEnhancement);
var DataJack = new Augmentation({
const DataJack = new Augmentation({
name:AugmentationNames.DataJack, repCost:45e3, moneyCost:90e6,
info:"A brain implant that provides an interface for direct, wireless communication between a computer's main " +
"memory and the mind. This implant allows the user to not only access a computer's memory, but also alter " +
@ -471,7 +471,7 @@ function initAugmentations() {
}
AddToAugmentations(DataJack);
var ENM = new Augmentation({
const ENM = new Augmentation({
name:AugmentationNames.ENM, repCost:6e3, moneyCost:50e6,
info:"A thin device embedded inside the arm containing a wireless module capable of connecting " +
"to nearby networks. Once connected, the Netburner Module is capable of capturing and " +
@ -488,7 +488,7 @@ function initAugmentations() {
}
AddToAugmentations(ENM);
var ENMCore = new Augmentation({
const ENMCore = new Augmentation({
name:AugmentationNames.ENMCore, repCost:100e3, moneyCost:500e6,
info:"The Core library is an implant that upgrades the firmware of the Embedded Netburner Module. " +
"This upgrade allows the Embedded Netburner Module to generate its own data on a network.<br><br>" +
@ -512,7 +512,7 @@ function initAugmentations() {
}
AddToAugmentations(ENMCore);
var ENMCoreV2 = new Augmentation({
const ENMCoreV2 = new Augmentation({
name:AugmentationNames.ENMCoreV2, repCost:400e3, moneyCost:900e6,
info:"The Core V2 library is an implant that upgrades the firmware of the Embedded Netburner Module. " +
"This upgraded firmware allows the Embedded Netburner Module to control the information on " +
@ -538,7 +538,7 @@ function initAugmentations() {
}
AddToAugmentations(ENMCoreV2);
var ENMCoreV3 = new Augmentation({
const ENMCoreV3 = new Augmentation({
name:AugmentationNames.ENMCoreV3, repCost:700e3, moneyCost:1500e6,
info:"The Core V3 library is an implant that upgrades the firmware of the Embedded Netburner Module. " +
"This upgraded firmware allows the Embedded Netburner Module to seamlessly inject code into " +
@ -563,7 +563,7 @@ function initAugmentations() {
}
AddToAugmentations(ENMCoreV3);
var ENMAnalyzeEngine = new Augmentation({
const ENMAnalyzeEngine = new Augmentation({
name:AugmentationNames.ENMAnalyzeEngine, repCost:250e3, moneyCost:1200e6,
info:"Installs the Analyze Engine for the Embedded Netburner Module, which is a CPU cluster " +
"that vastly outperforms the Netburner Module's native single-core processor.<br><br>" +
@ -578,7 +578,7 @@ function initAugmentations() {
}
AddToAugmentations(ENMAnalyzeEngine);
var ENMDMA = new Augmentation({
const ENMDMA = new Augmentation({
name:AugmentationNames.ENMDMA, repCost:400e3, moneyCost:1400e6,
info:"This implant installs a Direct Memory Access (DMA) controller into the " +
"Embedded Netburner Module. This allows the Module to send and receive data " +
@ -597,7 +597,7 @@ function initAugmentations() {
}
AddToAugmentations(ENMDMA);
var Neuralstimulator = new Augmentation({
const Neuralstimulator = new Augmentation({
name:AugmentationNames.Neuralstimulator, repCost:20e3, moneyCost:600e6,
info:"A cranial implant that intelligently stimulates certain areas of the brain " +
"in order to improve cognitive functions.<br><br>" +
@ -617,7 +617,7 @@ function initAugmentations() {
}
AddToAugmentations(Neuralstimulator);
var NeuralAccelerator = new Augmentation({
const NeuralAccelerator = new Augmentation({
name:AugmentationNames.NeuralAccelerator, repCost:80e3, moneyCost:350e6,
info:"A microprocessor that accelerates the processing " +
"speed of biological neural networks. This is a cranial implant that is embedded inside the brain.<br><br>" +
@ -635,7 +635,7 @@ function initAugmentations() {
}
AddToAugmentations(NeuralAccelerator);
var CranialSignalProcessorsG1 = new Augmentation({
const CranialSignalProcessorsG1 = new Augmentation({
name:AugmentationNames.CranialSignalProcessorsG1, repCost:4e3, moneyCost:14e6,
info:"The first generation of Cranial Signal Processors. Cranial Signal Processors " +
"are a set of specialized microprocessors that are attached to " +
@ -653,7 +653,7 @@ function initAugmentations() {
}
AddToAugmentations(CranialSignalProcessorsG1);
var CranialSignalProcessorsG2 = new Augmentation({
const CranialSignalProcessorsG2 = new Augmentation({
name:AugmentationNames.CranialSignalProcessorsG2, repCost:7500, moneyCost:25e6,
info:"The second generation of Cranial Signal Processors. Cranial Signal Processors " +
"are a set of specialized microprocessors that are attached to " +
@ -674,7 +674,7 @@ function initAugmentations() {
}
AddToAugmentations(CranialSignalProcessorsG2);
var CranialSignalProcessorsG3 = new Augmentation({
const CranialSignalProcessorsG3 = new Augmentation({
name:AugmentationNames.CranialSignalProcessorsG3, repCost:20e3, moneyCost:110e6,
info:"The third generation of Cranial Signal Processors. Cranial Signal Processors " +
"are a set of specialized microprocessors that are attached to " +
@ -695,7 +695,7 @@ function initAugmentations() {
}
AddToAugmentations(CranialSignalProcessorsG3);
var CranialSignalProcessorsG4 = new Augmentation({
const CranialSignalProcessorsG4 = new Augmentation({
name:AugmentationNames.CranialSignalProcessorsG4, repCost:50e3, moneyCost:220e6,
info:"The fourth generation of Cranial Signal Processors. Cranial Signal Processors " +
"are a set of specialized microprocessors that are attached to " +
@ -716,7 +716,7 @@ function initAugmentations() {
}
AddToAugmentations(CranialSignalProcessorsG4);
var CranialSignalProcessorsG5 = new Augmentation({
const CranialSignalProcessorsG5 = new Augmentation({
name:AugmentationNames.CranialSignalProcessorsG5, repCost:100e3, moneyCost:450e6,
info:"The fifth generation of Cranial Signal Processors. Cranial Signal Processors " +
"are a set of specialized microprocessors that are attached to " +
@ -737,7 +737,7 @@ function initAugmentations() {
}
AddToAugmentations(CranialSignalProcessorsG5);
var NeuronalDensification = new Augmentation({
const NeuronalDensification = new Augmentation({
name:AugmentationNames.NeuronalDensification, repCost:75e3, moneyCost:275e6,
info:"The brain is surgically re-engineered to have increased neuronal density " +
"by decreasing the neuron gap junction. Then, the body is genetically modified " +
@ -757,7 +757,7 @@ function initAugmentations() {
AddToAugmentations(NeuronalDensification);
// Work Augmentations
var NuoptimalInjectorImplant = new Augmentation({
const NuoptimalInjectorImplant = new Augmentation({
name:AugmentationNames.NuoptimalInjectorImplant, repCost:2e3, moneyCost:4e6,
info:"This torso implant automatically injects nootropic supplements into " +
"the bloodstream to improve memory, increase focus, and provide other " +
@ -773,7 +773,7 @@ function initAugmentations() {
}
AddToAugmentations(NuoptimalInjectorImplant);
var SpeechEnhancement = new Augmentation({
const SpeechEnhancement = new Augmentation({
name:AugmentationNames.SpeechEnhancement, repCost:1e3, moneyCost:2.5e6,
info:"An advanced neural implant that improves your speaking abilities, making " +
"you more convincing and likable in conversations and overall improving your " +
@ -791,7 +791,7 @@ function initAugmentations() {
}
AddToAugmentations(SpeechEnhancement);
var FocusWire = new Augmentation({
const FocusWire = new Augmentation({
name:AugmentationNames.FocusWire, repCost:30e3, moneyCost:180e6,
info:"A cranial implant that stops procrastination by blocking specific neural pathways " +
"in the brain.<br><br>" +
@ -814,7 +814,7 @@ function initAugmentations() {
}
AddToAugmentations(FocusWire)
var PCDNI = new Augmentation({
const PCDNI = new Augmentation({
name:AugmentationNames.PCDNI, repCost:150e3, moneyCost:750e6,
info:"Installs a Direct-Neural Interface jack into your arm that is compatible with most " +
"computers. Connecting to a computer through this jack allows you to interface with " +
@ -831,7 +831,7 @@ function initAugmentations() {
}
AddToAugmentations(PCDNI);
var PCDNIOptimizer = new Augmentation({
const PCDNIOptimizer = new Augmentation({
name:AugmentationNames.PCDNIOptimizer, repCost:200e3, moneyCost:900e6,
info:"This is a submodule upgrade to the PC Direct-Neural Interface augmentation. It " +
"improves the performance of the interface and gives the user more control options " +
@ -849,7 +849,7 @@ function initAugmentations() {
}
AddToAugmentations(PCDNIOptimizer);
var PCDNINeuralNetwork = new Augmentation({
const PCDNINeuralNetwork = new Augmentation({
name:AugmentationNames.PCDNINeuralNetwork, repCost:600e3, moneyCost:1500e6,
info:"This is an additional installation that upgrades the functionality of the " +
"PC Direct-Neural Interface augmentation. When connected to a computer, " +
@ -870,7 +870,7 @@ function initAugmentations() {
}
AddToAugmentations(PCDNINeuralNetwork);
var ADRPheromone1 = new Augmentation({
const ADRPheromone1 = new Augmentation({
name:AugmentationNames.ADRPheromone1, repCost:1500, moneyCost:3.5e6,
info:"The body is genetically re-engineered so that it produces the ADR-V1 pheromone, " +
"an artificial pheromone discovered by scientists. The ADR-V1 pheromone, when excreted, " +
@ -887,7 +887,7 @@ function initAugmentations() {
}
AddToAugmentations(ADRPheromone1);
var ADRPheromone2 = new Augmentation({
const ADRPheromone2 = new Augmentation({
name:AugmentationNames.ADRPheromone2, repCost:25e3, moneyCost:110e6,
info:"The body is genetically re-engineered so that it produces the ADR-V2 pheromone, " +
"which is similar to but more potent than ADR-V1. This pheromone, when excreted, " +
@ -903,8 +903,26 @@ function initAugmentations() {
}
AddToAugmentations(ADRPheromone2);
const ShadowsSimulacrum = new Augmentation({
name: AugmentationNames.ShadowsSimulacrum, repCost: 15e3, moneyCost: 80e6,
info: "A crude but functional matter phase-shifter module that is embedded " +
"in the brainstem and cerebellum. This augmentation was developed by " +
"criminal organizations and allows the user to project and control holographic " +
"simulacrums within a large radius. These simulacrums are commonly used for " +
"espionage and surveillance work.<br><br>" +
"This augmentation:<br>" +
"Increases the amount of reputation the player gains when working for a faction or company by 15%.",
company_rep_mult: 1.15,
faction_rep_mult: 1.15,
});
ShadowsSimulacrum.addToFactions(["The Syndicate", "The Dark Army", "Speakers for the Dead"]);
if (augmentationExists(AugmentationNames.ShadowsSimulacrum)) {
delete Augmentations[AugmentationNames.ShadowsSimulacrum];
}
AddToAugmentations(ShadowsSimulacrum);
// HacknetNode Augmentations
var HacknetNodeCPUUpload = new Augmentation({
const HacknetNodeCPUUpload = new Augmentation({
name:AugmentationNames.HacknetNodeCPUUpload, repCost:1500, moneyCost:2.2e6,
info:"Uploads the architecture and design details of a Hacknet Node's CPU into " +
"the brain. This allows the user to engineer custom hardware and software " +
@ -921,7 +939,7 @@ function initAugmentations() {
}
AddToAugmentations(HacknetNodeCPUUpload);
var HacknetNodeCacheUpload = new Augmentation({
const HacknetNodeCacheUpload = new Augmentation({
name:AugmentationNames.HacknetNodeCacheUpload, repCost:1e3, moneyCost:1.1e6,
info:"Uploads the architecture and design details of a Hacknet Node's main-memory cache " +
"into the brain. This allows the user to engineer custom cache hardware for the " +
@ -938,7 +956,7 @@ function initAugmentations() {
}
AddToAugmentations(HacknetNodeCacheUpload);
var HacknetNodeNICUpload = new Augmentation({
const HacknetNodeNICUpload = new Augmentation({
name:AugmentationNames.HacknetNodeNICUpload, repCost:750, moneyCost:900e3,
info:"Uploads the architecture and design details of a Hacknet Node's Network Interface Card (NIC) " +
"into the brain. This allows the user to engineer a custom NIC for the Hacknet Node that " +
@ -955,7 +973,7 @@ function initAugmentations() {
}
AddToAugmentations(HacknetNodeNICUpload);
var HacknetNodeKernelDNI = new Augmentation({
const HacknetNodeKernelDNI = new Augmentation({
name:AugmentationNames.HacknetNodeKernelDNI, repCost:3e3, moneyCost:8e6,
info:"Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a " +
"Hacknet Node. This lets the user access and manipulate the Node's kernel using the mind's " +
@ -969,7 +987,7 @@ function initAugmentations() {
}
AddToAugmentations(HacknetNodeKernelDNI);
var HacknetNodeCoreDNI = new Augmentation({
const HacknetNodeCoreDNI = new Augmentation({
name:AugmentationNames.HacknetNodeCoreDNI, repCost:5e3, moneyCost:12e6,
info:"Installs a Direct-Neural Interface jack into the arm that is capable of connecting " +
"to a Hacknet Node. This lets the user access and manipulate the Node's processing logic using " +
@ -984,7 +1002,7 @@ function initAugmentations() {
AddToAugmentations(HacknetNodeCoreDNI);
//Misc/Hybrid augmentations
var NeuroFluxGovernor = new Augmentation({
const NeuroFluxGovernor = new Augmentation({
name:AugmentationNames.NeuroFluxGovernor, repCost:500, moneyCost: 750e3,
info:"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, " +
@ -1037,7 +1055,7 @@ function initAugmentations() {
++nextLevel;
}
}
mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, nextLevel);
let mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, nextLevel);
NeuroFluxGovernor.baseRepRequirement = 500 * mult * CONSTANTS.AugmentationRepMultiplier * BitNodeMultipliers.AugmentationRepCost;
NeuroFluxGovernor.baseCost = 750e3 * mult * CONSTANTS.AugmentationCostMultiplier * BitNodeMultipliers.AugmentationMoneyCost;
if (augmentationExists(AugmentationNames.NeuroFluxGovernor)) {
@ -1046,7 +1064,7 @@ function initAugmentations() {
NeuroFluxGovernor.addToAllFactions();
AddToAugmentations(NeuroFluxGovernor);
var Neurotrainer1 = new Augmentation({
const Neurotrainer1 = new Augmentation({
name:AugmentationNames.Neurotrainer1, repCost:400, moneyCost:800e3,
info:"A decentralized cranial implant that improves the brain's ability to learn. It is " +
"installed by releasing millions of nanobots into the human brain, each of which " +
@ -1066,7 +1084,7 @@ function initAugmentations() {
}
AddToAugmentations(Neurotrainer1);
var Neurotrainer2 = new Augmentation({
const Neurotrainer2 = new Augmentation({
name:AugmentationNames.Neurotrainer2, repCost:4e3, moneyCost:9e6,
info:"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 " +
@ -1085,7 +1103,7 @@ function initAugmentations() {
}
AddToAugmentations(Neurotrainer2);
var Neurotrainer3 = new Augmentation({
const Neurotrainer3 = new Augmentation({
name:AugmentationNames.Neurotrainer3, repCost:10e3, moneyCost:26e6,
info:"A decentralized cranial implant that improves the brain's ability to learn. This " +
"is a more powerful version of the Neurotrainer I and Neurotrainer II augmentation, " +
@ -1104,7 +1122,7 @@ function initAugmentations() {
}
AddToAugmentations(Neurotrainer3);
var Hypersight = new Augmentation({
const Hypersight = new Augmentation({
name:AugmentationNames.Hypersight, repCost:60e3, moneyCost:550e6,
info:"A bionic eye implant that grants sight capabilities far beyond those of a natural human. " +
"Embedded circuitry within the implant provides the ability to detect heat and movement " +
@ -1123,7 +1141,7 @@ function initAugmentations() {
}
AddToAugmentations(Hypersight);
var LuminCloaking1 = new Augmentation({
const LuminCloaking1 = new Augmentation({
name:AugmentationNames.LuminCloaking1, repCost:600, moneyCost:1e6,
info:"A skin implant that reinforces the skin with highly-advanced synthetic cells. These " +
"cells, when powered, have a negative refractive index. As a result, they bend light " +
@ -1140,7 +1158,7 @@ function initAugmentations() {
}
AddToAugmentations(LuminCloaking1);
var LuminCloaking2 = new Augmentation({
const LuminCloaking2 = new Augmentation({
name:AugmentationNames.LuminCloaking2, repCost:2e3, moneyCost:6e6,
info:"This is a more advanced version of the LuminCloaking-V2 augmentation. This skin implant " +
"reinforces the skin with highly-advanced synthetic cells. These " +
@ -1161,7 +1179,7 @@ function initAugmentations() {
}
AddToAugmentations(LuminCloaking2);
var SmartSonar = new Augmentation({
const SmartSonar = new Augmentation({
name:AugmentationNames.SmartSonar, repCost:9e3, moneyCost:15e6,
info:"A cochlear implant that helps the player detect and locate enemies " +
"using sound propagation.<br><br>" +
@ -1179,7 +1197,7 @@ function initAugmentations() {
}
AddToAugmentations(SmartSonar);
var PowerRecirculator = new Augmentation({
const PowerRecirculator = new Augmentation({
name:AugmentationNames.PowerRecirculator, repCost:10e3, moneyCost:36e6,
info:"The body's nerves are attached with polypyrrole nanocircuits that " +
"are capable of capturing wasted energy (in the form of heat) " +
@ -1212,7 +1230,7 @@ function initAugmentations() {
// Silhouette
// Illuminati
var QLink = new Augmentation({
const QLink = new Augmentation({
name:AugmentationNames.QLink, repCost:750e3, moneyCost:5e12,
info:"A brain implant that wirelessly connects you to the Illuminati's " +
"quantum supercomputer, allowing you to access and use its incredible " +
@ -1234,7 +1252,7 @@ function initAugmentations() {
AddToAugmentations(QLink);
// Daedalus
var RedPill = new Augmentation({
const RedPill = new Augmentation({
name:AugmentationNames.TheRedPill, repCost:1e6, moneyCost:0,
info:"It's time to leave the cave."
});
@ -1245,7 +1263,7 @@ function initAugmentations() {
AddToAugmentations(RedPill);
// Covenant
var SPTN97 = new Augmentation({
const SPTN97 = new Augmentation({
name:AugmentationNames.SPTN97, repCost:500e3, moneyCost:975e6,
info:"The SPTN-97 gene is injected into the genome. The SPTN-97 gene is an " +
"artificially-synthesized gene that was developed by DARPA to create " +
@ -1267,7 +1285,7 @@ function initAugmentations() {
AddToAugmentations(SPTN97);
// ECorp
var HiveMind = new Augmentation({
const HiveMind = new Augmentation({
name:AugmentationNames.HiveMind, repCost:600e3, moneyCost:1100e6,
info:"A brain implant developed by ECorp. They do not reveal what " +
"exactly the implant does, but they promise that it will greatly " +
@ -1281,7 +1299,7 @@ function initAugmentations() {
AddToAugmentations(HiveMind);
// MegaCorp
var CordiARCReactor = new Augmentation({
const CordiARCReactor = new Augmentation({
name:AugmentationNames.CordiARCReactor, repCost:450e3, moneyCost:1000e6,
info:"The thoracic cavity is equipped with a small chamber designed " +
"to hold and sustain hydrogen plasma. The plasma is used to generate " +
@ -1306,7 +1324,7 @@ function initAugmentations() {
AddToAugmentations(CordiARCReactor);
// BachmanAndAssociates
var SmartJaw = new Augmentation({
const SmartJaw = new Augmentation({
name:AugmentationNames.SmartJaw, repCost:150e3, moneyCost:550e6,
info:"A bionic jaw that contains advanced hardware and software " +
"capable of psychoanalyzing and profiling the personality of " +
@ -1328,7 +1346,7 @@ function initAugmentations() {
AddToAugmentations(SmartJaw);
// BladeIndustries
var Neotra = new Augmentation({
const Neotra = new Augmentation({
name:AugmentationNames.Neotra, repCost:225e3, moneyCost:575e6,
info:"A highly-advanced techno-organic drug that is injected into the skeletal " +
"and integumentary system. The drug permanently modifies the DNA of the " +
@ -1345,7 +1363,7 @@ function initAugmentations() {
AddToAugmentations(Neotra);
// NWO
var Xanipher = new Augmentation({
const Xanipher = new Augmentation({
name:AugmentationNames.Xanipher, repCost:350e3, moneyCost:850e6,
info:"A concoction of advanced nanobots that is orally ingested into the " +
"body. These nanobots induce physiological change and significantly " +
@ -1373,7 +1391,7 @@ function initAugmentations() {
AddToAugmentations(Xanipher);
// ClarkeIncorporated
var nextSENS = new Augmentation({
const nextSENS = new Augmentation({
name:AugmentationNames.nextSENS, repCost:175e3, moneyCost:385e6,
info:"The body is genetically re-engineered to maintain a state " +
"of negligible senescence, preventing the body from " +
@ -1393,7 +1411,7 @@ function initAugmentations() {
AddToAugmentations(nextSENS);
// OmniTekIncorporated
var OmniTekInfoLoad = new Augmentation({
const OmniTekInfoLoad = new Augmentation({
name:AugmentationNames.OmniTekInfoLoad, repCost:250e3, moneyCost:575e6,
info:"OmniTek's data and information repository is uploaded " +
"into your brain, enhancing your programming and " +
@ -1414,7 +1432,7 @@ function initAugmentations() {
// TODO Later when Intelligence is added in . Some aug that greatly increases int
// KuaiGongInternational
var PhotosyntheticCells = new Augmentation({
const PhotosyntheticCells = new Augmentation({
name:AugmentationNames.PhotosyntheticCells, repCost:225e3, moneyCost:550e6,
info:"Chloroplasts are added to epidermal stem cells and are applied " +
"to the body using a skin graft. The result is photosynthetic " +
@ -1432,7 +1450,7 @@ function initAugmentations() {
AddToAugmentations(PhotosyntheticCells);
// BitRunners
var Neurolink = new Augmentation({
const Neurolink = new Augmentation({
name:AugmentationNames.Neurolink, repCost:350e3, moneyCost:875e6,
info:"A brain implant that provides a high-bandwidth, direct neural link between your " +
"mind and BitRunners' data servers, which reportedly contain " +
@ -1455,7 +1473,7 @@ function initAugmentations() {
AddToAugmentations(Neurolink);
// BlackHand
var TheBlackHand = new Augmentation({
const TheBlackHand = new Augmentation({
name:AugmentationNames.TheBlackHand, repCost:40e3, moneyCost:110e6,
info:"A highly advanced bionic hand. This prosthetic not only " +
"enhances strength and dexterity but it is also embedded " +
@ -1479,7 +1497,7 @@ function initAugmentations() {
AddToAugmentations(TheBlackHand);
// NiteSec
var CRTX42AA = new Augmentation({
const CRTX42AA = new Augmentation({
name:AugmentationNames.CRTX42AA, repCost:18e3, moneyCost:45e6,
info:"The CRTX42-AA gene is injected into the genome. " +
"The CRTX42-AA is an artificially-synthesized gene that targets the visual and prefrontal " +
@ -1497,7 +1515,7 @@ function initAugmentations() {
AddToAugmentations(CRTX42AA);
// Chongqing
var Neuregen = new Augmentation({
const Neuregen = new Augmentation({
name:AugmentationNames.Neuregen, repCost:15e3, moneyCost:75e6,
info:"A drug that genetically modifies the neurons in the brain. " +
"The result is that these neurons never die and continuously " +
@ -1512,7 +1530,7 @@ function initAugmentations() {
AddToAugmentations(Neuregen);
// Sector12
var CashRoot = new Augmentation({
const CashRoot = new Augmentation({
name:AugmentationNames.CashRoot, repCost:5e3, moneyCost:25e6,
info:"A collection of digital assets saved on a small chip. The chip is implanted " +
"into your wrist. A small jack in the chip allows you to connect it to a computer " +
@ -1528,7 +1546,7 @@ function initAugmentations() {
AddToAugmentations(CashRoot);
// NewTokyo
var NutriGen = new Augmentation({
const NutriGen = new Augmentation({
name:AugmentationNames.NutriGen, repCost:2500, moneyCost:500e3,
info:"A thermo-powered artificial nutrition generator. Endogenously " +
"synthesizes glucose, amino acids, and vitamins and redistributes them " +
@ -1552,7 +1570,7 @@ function initAugmentations() {
// and profits as a trader/from trading
// Ishima
var INFRARet = new Augmentation({
const INFRARet = new Augmentation({
name:AugmentationNames.INFRARet, repCost:3e3, moneyCost:6e6,
info:"A retina implant consisting of a tiny chip that sits behind the " +
"retina. This implant lets people visually detect infrared radiation.<br><br>" +
@ -1571,7 +1589,7 @@ function initAugmentations() {
AddToAugmentations(INFRARet);
// Volhaven
var DermaForce = new Augmentation({
const DermaForce = new Augmentation({
name:AugmentationNames.DermaForce, repCost:6e3, moneyCost:10e6,
info:"A synthetic skin is grafted onto the body. The skin consists of " +
"millions of nanobots capable of projecting high-density muon beams, " +
@ -1586,7 +1604,7 @@ function initAugmentations() {
AddToAugmentations(DermaForce);
// SpeakersForTheDead
var GrapheneBrachiBlades = new Augmentation({
const GrapheneBrachiBlades = new Augmentation({
name:AugmentationNames.GrapheneBrachiBlades, repCost:90e3, moneyCost:500e6,
info:"An upgrade to the BrachiBlades augmentation. It infuses " +
"the retractable blades with an advanced graphene material " +
@ -1608,7 +1626,7 @@ function initAugmentations() {
AddToAugmentations(GrapheneBrachiBlades);
// DarkArmy
var GrapheneBionicArms = new Augmentation({
const GrapheneBionicArms = new Augmentation({
name:AugmentationNames.GrapheneBionicArms, repCost:200e3, moneyCost:750e6,
info:"An upgrade to the Bionic Arms augmentation. It infuses the " +
"prosthetic arms with an advanced graphene material " +
@ -1625,7 +1643,7 @@ function initAugmentations() {
AddToAugmentations(GrapheneBionicArms);
// TheSyndicate
var BrachiBlades = new Augmentation({
const BrachiBlades = new Augmentation({
name:AugmentationNames.BrachiBlades, repCost:5e3, moneyCost:18e6,
info:"A set of retractable plasteel blades are implanted in the arm, underneath the skin.<br><br>" +
"This augmentation:<br>" +
@ -1644,7 +1662,7 @@ function initAugmentations() {
AddToAugmentations(BrachiBlades);
// Tetrads
var BionicArms = new Augmentation({
const BionicArms = new Augmentation({
name:AugmentationNames.BionicArms, repCost:25e3, moneyCost:55e6,
info:"Cybernetic arms created from plasteel and carbon fibers that completely replace " +
"the user's organic arms.<br><br>" +
@ -1659,7 +1677,7 @@ function initAugmentations() {
AddToAugmentations(BionicArms);
// TianDiHui
var SNA = new Augmentation({
const SNA = new Augmentation({
name:AugmentationNames.SNA, repCost:2500, moneyCost:6e6,
info:"A cranial implant that affects the user's personality, making them better " +
"at negotiation in social situations.<br><br>" +
@ -1678,9 +1696,9 @@ function initAugmentations() {
AddToAugmentations(SNA);
// Special Bladeburner Augmentations
var BladeburnersFactionName = "Bladeburners";
const BladeburnersFactionName = "Bladeburners";
if (factionExists(BladeburnersFactionName)) {
var EsperEyewear = new Augmentation({
const EsperEyewear = new Augmentation({
name:AugmentationNames.EsperEyewear, repCost:500, moneyCost:33e6,
info:"Ballistic-grade protective and retractable eyewear that was designed specially " +
"for Bladeburner units. This " +
@ -1700,7 +1718,7 @@ function initAugmentations() {
EsperEyewear.addToFactions([BladeburnersFactionName]);
resetAugmentation(EsperEyewear);
var EMS4Recombination = new Augmentation({
const EMS4Recombination = new Augmentation({
name:AugmentationNames.EMS4Recombination, repCost: 1e3, moneyCost:55e6,
info:"A DNA recombination of the EMS-4 Gene. This genetic engineering " +
"technique was originally used on Bladeburners during the Synthoid uprising " +
@ -1718,7 +1736,7 @@ function initAugmentations() {
EMS4Recombination.addToFactions([BladeburnersFactionName]);
resetAugmentation(EMS4Recombination);
var OrionShoulder = new Augmentation({
const OrionShoulder = new Augmentation({
name:AugmentationNames.OrionShoulder, repCost:2.5e3, moneyCost:110e6,
info:"A bionic shoulder augmentation for the right shoulder. Using cybernetics, " +
"the ORION-MKIV shoulder enhances the strength and dexterity " +
@ -1737,7 +1755,7 @@ function initAugmentations() {
OrionShoulder.addToFactions([BladeburnersFactionName]);
resetAugmentation(OrionShoulder);
var HyperionV1 = new Augmentation({
const HyperionV1 = new Augmentation({
name:AugmentationNames.HyperionV1, repCost: 5e3, moneyCost:550e6,
info:"A pair of mini plasma cannons embedded into the hands. The Hyperion is capable " +
"of rapidly firing bolts of high-density plasma. The weapon is meant to " +
@ -1753,7 +1771,7 @@ function initAugmentations() {
HyperionV1.addToFactions([BladeburnersFactionName]);
resetAugmentation(HyperionV1);
var HyperionV2 = new Augmentation({
const HyperionV2 = new Augmentation({
name:AugmentationNames.HyperionV2, repCost:10e3, moneyCost:1.1e9,
info:"A pair of mini plasma cannons embedded into the hands. This augmentation " +
"is more advanced and powerful than the original V1 model. This V2 model is " +
@ -1768,7 +1786,7 @@ function initAugmentations() {
HyperionV2.addToFactions([BladeburnersFactionName]);
resetAugmentation(HyperionV2);
var GolemSerum = new Augmentation({
const GolemSerum = new Augmentation({
name:AugmentationNames.GolemSerum, repCost:12.5e3, moneyCost:2.2e9,
info:"A serum that permanently enhances many aspects of a human's capabilities, " +
"including strength, speed, immune system performance, and mitochondrial efficiency. The " +
@ -1787,7 +1805,7 @@ function initAugmentations() {
GolemSerum.addToFactions([BladeburnersFactionName]);
resetAugmentation(GolemSerum);
var VangelisVirus = new Augmentation({
const VangelisVirus = new Augmentation({
name:AugmentationNames.VangelisVirus, repCost:7.5e3, moneyCost:550e6,
info:"A synthetic symbiotic virus that is injected into the human brain tissue. The Vangelis virus " +
"heightens the senses and focus of its host, and also enhances its intuition.<br><br>" +
@ -1803,7 +1821,7 @@ function initAugmentations() {
VangelisVirus.addToFactions([BladeburnersFactionName]);
resetAugmentation(VangelisVirus);
var VangelisVirus3 = new Augmentation({
const VangelisVirus3 = new Augmentation({
name:AugmentationNames.VangelisVirus3, repCost:15e3, moneyCost:2.2e9,
info:"An improved version of Vangelis, a synthetic symbiotic virus that is " +
"injected into the human brain tissue. On top of the benefits of the original " +
@ -1823,7 +1841,7 @@ function initAugmentations() {
VangelisVirus3.addToFactions([BladeburnersFactionName]);
resetAugmentation(VangelisVirus3);
var INTERLINKED = new Augmentation({
const INTERLINKED = new Augmentation({
name:AugmentationNames.INTERLINKED, repCost:10e3, moneyCost:1.1e9,
info:"The DNA is genetically modified to enhance the human's body " +
"extracellular matrix (ECM). This improves the ECM's ability to " +
@ -1842,7 +1860,7 @@ function initAugmentations() {
INTERLINKED.addToFactions([BladeburnersFactionName]);
resetAugmentation(INTERLINKED);
var BladeRunner = new Augmentation({
const BladeRunner = new Augmentation({
name:AugmentationNames.BladeRunner, repCost:8e3, moneyCost:1.65e9,
info:"A cybernetic foot augmentation that was specially created for Bladeburners " +
"during the Synthoid Uprising. The organic musculature of the human foot " +
@ -1860,7 +1878,7 @@ function initAugmentations() {
BladeRunner.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeRunner);
var BladeArmor = new Augmentation({
const BladeArmor = new Augmentation({
name:AugmentationNames.BladeArmor, repCost:5e3, moneyCost:275e6,
info:"A powered exoskeleton suit (exosuit) designed as armor for Bladeburner units. This " +
"exoskeleton is incredibly adaptable and can protect the wearer from blunt, piercing, " +
@ -1881,7 +1899,7 @@ function initAugmentations() {
BladeArmor.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmor);
var BladeArmorPowerCells = new Augmentation({
const BladeArmorPowerCells = new Augmentation({
name:AugmentationNames.BladeArmorPowerCells, repCost:7.5e3, moneyCost:550e6,
info:"Upgrades the BLADE-51b Tesla Armor with Ion Power Cells, which are capable of " +
"more efficiently storing and using power.<br><br>" +
@ -1898,7 +1916,7 @@ function initAugmentations() {
BladeArmorPowerCells.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorPowerCells);
var BladeArmorEnergyShielding = new Augmentation({
const BladeArmorEnergyShielding = new Augmentation({
name:AugmentationNames.BladeArmorEnergyShielding, repCost:8.5e3, moneyCost:1.1e9,
info:"Upgrades the BLADE-51b Tesla Armor with a plasma energy propulsion system " +
"that is capable of projecting an energy shielding force field.<br><br>" +
@ -1913,7 +1931,7 @@ function initAugmentations() {
BladeArmorEnergyShielding.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorEnergyShielding);
var BladeArmorUnibeam = new Augmentation({
const BladeArmorUnibeam = new Augmentation({
name:AugmentationNames.BladeArmorUnibeam, repCost:12.5e3, moneyCost:3.3e9,
info:"Upgrades the BLADE-51b Tesla Armor with a concentrated deuterium-fluoride laser " +
"weapon. It's precision an accuracy makes it useful for quickly neutralizing " +
@ -1927,7 +1945,7 @@ function initAugmentations() {
BladeArmorUnibeam.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorUnibeam);
var BladeArmorOmnibeam = new Augmentation({
const BladeArmorOmnibeam = new Augmentation({
name:AugmentationNames.BladeArmorOmnibeam, repCost:25e3, moneyCost:5.5e9,
info:"Upgrades the BLADE-51b Tesla Armor Unibeam augmentation to use " +
"multiple-fiber system. The upgraded weapon uses multiple fiber laser " +
@ -1942,7 +1960,7 @@ function initAugmentations() {
BladeArmorOmnibeam.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorOmnibeam);
var BladeArmorIPU = new Augmentation({
const BladeArmorIPU = new Augmentation({
name:AugmentationNames.BladeArmorIPU, repCost: 6e3, moneyCost:220e6,
info:"Upgrades the BLADE-51b Tesla Armor with an AI Information Processing " +
"Unit that was specially designed to analyze Synthoid related data and " +
@ -1958,7 +1976,7 @@ function initAugmentations() {
BladeArmorIPU.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorIPU);
var BladesSimulacrum = new Augmentation({
const BladesSimulacrum = new Augmentation({
name:AugmentationNames.BladesSimulacrum, repCost: 500, moneyCost: 30e9,
info:"A highly-advanced matter phase-shifter module that is embedded " +
"in the brainstem and cerebellum. This augmentation allows " +
@ -1974,7 +1992,7 @@ function initAugmentations() {
}
// Update costs based on how many have been purchased
var mult = Math.pow(CONSTANTS.MultipleAugMultiplier, Player.queuedAugmentations.length);
mult = Math.pow(CONSTANTS.MultipleAugMultiplier, Player.queuedAugmentations.length);
for (var name in Augmentations) {
if (Augmentations.hasOwnProperty(name)) {
Augmentations[name].baseCost *= mult;
@ -2014,15 +2032,17 @@ function applyAugmentation(aug, reapply=false) {
if (aug.name === AugmentationNames.NeuroFluxGovernor) {
if (!reapply) {
Augmentations[aug.name].level = aug.level;
for (var i = 0; i < Player.augmentations.length; ++i) {
for (let i = 0; i < Player.augmentations.length; ++i) {
if (Player.augmentations[i].name == AugmentationNames.NeuroFluxGovernor) {
Player.augmentations[i].level = aug.level;
break;
return;
// break;
}
}
}
}
/*
if (aug.name === AugmentationNames.NeuroFluxGovernor) {
for (var i = 0; i < Player.augmentations.length; ++i) {
if (Player.augmentations[i].name == AugmentationNames.NeuroFluxGovernor) {
@ -2031,6 +2051,7 @@ function applyAugmentation(aug, reapply=false) {
}
}
}
*/
// Push onto Player's Augmentation list
if (!reapply) {

@ -49,6 +49,7 @@ export let AugmentationNames: IMap<string> = {
PCDNINeuralNetwork: "PC Direct-Neural Interface NeuroNet Injector",
ADRPheromone1: "ADR-V1 Pheromone Gene",
ADRPheromone2: "ADR-V2 Pheromone Gene",
ShadowsSimulacrum: "The Shadow's Simulacrum",
HacknetNodeCPUUpload: "Hacknet Node CPU Architecture Neural-Upload",
HacknetNodeCacheUpload: "Hacknet Node Cache Architecture Neural-Upload",
HacknetNodeNICUpload: "Hacknet Node NIC Architecture Neural-Upload",

@ -6,7 +6,7 @@
import { IMap } from "./types";
export let CONSTANTS: IMap<any> = {
Version: "0.46.2",
Version: "0.46.3",
/** 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
@ -275,6 +275,15 @@ export let CONSTANTS: IMap<any> = {
LatestUpdate:
`
v0.46.3
* Added a new Augmentation: The Shadow's Simulacrum
* Improved tab autocompletion feature in Terminal so that it works better with directories
* Bug Fix: Tech vendor location UI now properly refreshed when purchasing a TOR router
* Bug Fix: Fixed UI issue with faction donations
* Bug Fix: The money statistics & breakdown should now properly track money earned from Hacknet Server (hashes -> money)
* Bug Fix: Fixed issue with changing input in 'Minimum Path Sum in a Triangle' coding contract problem
* Fixed several typos in various places
v0.46.2
* Source-File 2 now allows you to form gangs in other BitNodes when your karma reaches a very large negative value
** (Karma is a hidden stat and is lowered by committing crimes)

@ -317,6 +317,7 @@ export function purchaseHashUpgrade(upgName, upgTarget) {
switch (upgName) {
case "Sell for Money": {
Player.gainMoney(upg.value);
Player.recordMoneySource(upg.value, "hacknetnode");
break;
}
case "Sell for Corporation Funds": {

@ -15,7 +15,7 @@ export class GeneralInfo extends React.Component {
`you hashes. Hashes can be spent on a variety of different upgrades.`;
} else {
return `Here, you can purchase a Hacknet Node, a specialized machine that can connect ` +
`and contribute its resources to the Hacknet networ. This allows you to take ` +
`and contribute its resources to the Hacknet network. This allows you to take ` +
`a small percentage of profits from hacks performed on the network. Essentially, ` +
`you are renting out your Node's computing power.`;
}

@ -362,7 +362,7 @@ export class CompanyLocation extends React.Component<IProps, IState> {
<StdButton
onClick={this.startInfiltration}
style={this.btnStyle}
text={"Infiltration Company"}
text={"Infiltrate Company"}
/>
}
</div>

@ -4693,12 +4693,19 @@ function NetscriptFunctions(workerScript) {
}
updateDynamicRam("joinBladeburnerDivision", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
if ((Player.bitNodeN === 7 || hasBladeburner2079SF)) {
if (Player.bitNodeN === 8) { return false; }
if (Player.bladeburner instanceof Bladeburner) {
return true; // Already member
} else if (Player.strength >= 100 && Player.defense >= 100 &&
Player.dexterity >= 100 && Player.agility >= 100) {
Player.bladeburner = new Bladeburner({new:true});
workerScript.log("You have been accepted into the Bladeburner division");
const worldHeader = document.getElementById("world-menu-header");
if (worldHeader instanceof HTMLElement) {
worldHeader.click(); worldHeader.click();
}
return true;
} else {
workerScript.log("You do not meet the requirements for joining the Bladeburner division");

@ -69,10 +69,10 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
const cost = this.getPurchaseCost();
const purchaseBtnDisabled = !this.props.p.canAfford(cost);
let purchaseBtnText;
if (this.state.amt > maxMemory) {
purchaseBtnText = `Memory cannot exceed 100`;
} else if (isNaN(this.state.amt)) {
if (isNaN(this.state.amt)) {
purchaseBtnText = "Invalid value";
} else if (this.state.amt > maxMemory) {
purchaseBtnText = `Memory cannot exceed 100`;
} else {
purchaseBtnText = `Purchase ${this.state.amt} memory - ${numeralWrapper.formatMoney(cost)}`;
}
@ -88,7 +88,7 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
<label htmlFor={inputId}>
Amount of memory to purchase (must be an integer):
</label>
<input id={inputId} onChange={this.changePurchaseAmount} type={"number"} value={this.state.amt} />
<input id={inputId} onChange={this.changePurchaseAmount} type={"number"} value={isNaN(this.state.amt) ? this.state.amt.toString() : this.state.amt} />
<br />
<StdButton disabled={purchaseBtnDisabled} onClick={this.purchaseMemory} text={purchaseBtnText} />
</div>

@ -204,7 +204,7 @@ $(document).keydown(function(event) {
// Autocomplete
if (terminalInput == null) {return;}
var input = terminalInput.value;
let input = terminalInput.value;
if (input == "") { return; }
const semiColonIndex = input.lastIndexOf(";");
@ -215,14 +215,14 @@ $(document).keydown(function(event) {
input = input.trim();
input = input.replace(/\s\s+/g, ' ');
var commandArray = input.split(" ");
var index = commandArray.length - 2;
const commandArray = input.split(" ");
let index = commandArray.length - 2;
if (index < -1) { index = 0; }
var allPos = determineAllPossibilitiesForTabCompletion(Player, input, index);
const allPos = determineAllPossibilitiesForTabCompletion(Player, input, index, Terminal.currDir);
if (allPos.length == 0) {return;}
var arg = "";
var command = "";
let arg = "";
let command = "";
if (commandArray.length == 0) {return;}
if (commandArray.length == 1) {command = commandArray[0];}
else if (commandArray.length == 2) {

@ -2,6 +2,8 @@
* Helper functions that implement "directory" functionality in the Terminal.
* These aren't real directories, they're more of a pseudo-directory implementation
*/
import { HacknetServer } from "../Hacknet/HacknetServer";
import { Server } from "../Server/Server";
/**
* Removes leading forward slash ("/") from a string.
@ -115,7 +117,7 @@ export function isValidFilePath(path: string): boolean {
}
/**
* Returns a formatter string for the first parent directory in a filepath. For example:
* Returns a formatted string for the first parent directory in a filepath. For example:
* /home/var/test/ -> home/
* If there is no first parent directory, then it returns "/" for root
*/
@ -124,12 +126,67 @@ export function getFirstParentDirectory(path: string): string {
t_path = removeLeadingSlash(t_path);
t_path = removeTrailingSlash(t_path);
if (t_path.lastIndexOf("/") === -1) { return "/"; }
let dirs = t_path.split("/");
if (dirs.length === 0) { return "/"; }
return dirs[0] + "/";
}
/**
* Given a filepath, returns a formatted string for all of the parent directories
* in that filepath. For example:
* /home/var/tes -> home/var/
* /home/var/test/ -> home/var/test/
* If there are no parent directories, it returns the empty string
*/
export function getAllParentDirectories(path: string): string {
let t_path = path;
const lastSlash = t_path.lastIndexOf("/");
if (lastSlash === -1) { return ""; }
return t_path.slice(0, lastSlash + 1);
}
/**
* Given a directory (by the full directory path) and a server, returns all
* subdirectories of that directory. This is only for FIRST-LEVEl/immediate subdirectories
*/
export function getSubdirectories(serv: Server | HacknetServer, dir: string): string[] {
const res: string[] = [];
if (!isValidDirectoryPath(dir)) { return res; }
let t_dir = dir;
if (!t_dir.endsWith("/")) { t_dir += "/"; }
function processFile(fn: string) {
if (t_dir === "/" && isInRootDirectory(fn)) {
const subdir = getFirstParentDirectory(fn);
if (subdir !== "/" && !res.includes(subdir)) {
res.push(subdir);
}
} else if (fn.startsWith(t_dir)) {
const remaining = fn.slice(t_dir.length);
const subdir = getFirstParentDirectory(remaining);
if (subdir !== "/" && !res.includes(subdir)) {
res.push(subdir);
}
}
}
for (const script of serv.scripts) {
processFile(script.filename);
}
for (const txt of serv.textFiles) {
processFile(txt.fn);
}
return res;
}
/**
* Checks if a file path refers to a file in the root directory.
*/

@ -1,3 +1,9 @@
import {
evaluateDirectoryPath,
getAllParentDirectories,
getSubdirectories,
} from "./DirectoryHelpers";
import {
Aliases,
GlobalAliases
@ -44,12 +50,14 @@ const commands = [
"top"
];
export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: string, index: number=0): string[] {
export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: string, index: number, currPath: string=""): string[] {
let allPos: string[] = [];
allPos = allPos.concat(Object.keys(GlobalAliases));
const currServ = p.getCurrentServer();
const homeComputer = p.getHomeComputer();
input = input.toLowerCase();
let parentDirPath: string = "";
let evaledParentDirPath: string | null = null;
// Helper functions
function addAllCodingContracts() {
@ -82,15 +90,71 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
function addAllScripts() {
for (const script of currServ.scripts) {
allPos.push(script.filename);
const res = processFilepath(script.filename);
if (res) {
allPos.push(res);
}
}
}
function addAllTextFiles() {
for (const txt of currServ.textFiles) {
allPos.push(txt.fn);
const res = processFilepath(txt.fn);
if (res) {
allPos.push(res);
}
}
}
function addAllDirectories() {
// Directories are based on the currently evaluated path
const subdirs = getSubdirectories(currServ, evaledParentDirPath == null ? "/" : evaledParentDirPath);
for (let i = 0; i < subdirs.length; ++i) {
const assembledDirPath = (evaledParentDirPath == null ? subdirs[i] : evaledParentDirPath + subdirs[i]);
const res = processFilepath(assembledDirPath);
if (res != null) {
subdirs[i] = res;
}
}
allPos = allPos.concat(subdirs);
}
// Convert from the real absolute path back to the original path used in the input
function convertParentPath(filepath: string): string {
if (parentDirPath == null || evaledParentDirPath == null) {
console.warn(`convertParentPath() called when paths are null`);
return filepath;
}
if (!filepath.startsWith(evaledParentDirPath)) {
console.warn(`convertParentPath() called for invalid path. (filepath=${filepath}) (evaledParentDirPath=${evaledParentDirPath})`);
return filepath;
}
return parentDirPath + filepath.slice(evaledParentDirPath.length);
}
// Given an a full, absolute filepath, converts it to the proper value
// for autocompletion purposes
function processFilepath(filepath: string): string | null {
if (evaledParentDirPath) {
if (filepath.startsWith(evaledParentDirPath)) {
return convertParentPath(filepath);
}
} else if (parentDirPath !== "") {
// If the parent directory is the root directory, but we're not searching
// it from the root directory, we have to add the original path
let t_parentDirPath = parentDirPath;
if (!t_parentDirPath.endsWith("/")) { t_parentDirPath += "/"; }
return parentDirPath + filepath;
} else {
return filepath;
}
return null;
}
function isCommand(cmd: string) {
let t_cmd = cmd;
@ -120,10 +184,28 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
}
// Autocomplete the command
if (index == -1) {
if (index === -1) {
return commands.concat(Object.keys(Aliases)).concat(Object.keys(GlobalAliases));
}
// Since we're autocompleting an argument and not a command, the argument might
// be a file/directory path. We have to account for that when autocompleting
const commandArray = input.split(" ");
if (commandArray.length === 0) {
console.warn(`Tab autocompletion logic reached invalid branch`);
return allPos;
}
const arg = commandArray[commandArray.length - 1];
parentDirPath = getAllParentDirectories(arg);
evaledParentDirPath = evaluateDirectoryPath(parentDirPath, currPath);
if (evaledParentDirPath === "/") {
evaledParentDirPath = null;
} else if (evaledParentDirPath == null) {
return allPos; // Invalid path
} else {
evaledParentDirPath += "/";
}
if (isCommand("buy")) {
let options = [];
for (const i in DarkWebItems) {
@ -147,6 +229,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
addAllScripts();
addAllLitFiles();
addAllTextFiles();
addAllDirectories();
return allPos;
}
@ -165,6 +248,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
if (isCommand("kill") || isCommand("tail") || isCommand("mem") || isCommand("check")) {
addAllScripts();
addAllDirectories();
return allPos;
}
@ -173,6 +257,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
addAllScripts();
addAllTextFiles();
allPos.push(".fconf");
addAllDirectories();
return allPos;
}
@ -183,6 +268,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
addAllLitFiles();
addAllTextFiles();
addAllCodingContracts();
addAllDirectories();
return allPos;
}
@ -191,6 +277,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
addAllScripts();
addAllPrograms();
addAllCodingContracts();
addAllDirectories();
return allPos;
}
@ -199,6 +286,7 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
addAllMessages();
addAllLitFiles();
addAllTextFiles();
addAllDirectories();
return allPos;
}
@ -206,9 +294,20 @@ export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: str
if (isCommand("download") || isCommand("mv")) {
addAllScripts();
addAllTextFiles();
addAllDirectories();
return allPos;
}
if (isCommand("cd")) {
addAllDirectories();
return allPos;
}
if (isCommand("ls") && index === 0) {
addAllDirectories();
}
return allPos;
}

@ -621,7 +621,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [
numTries: 10,
solver: (data: number[][], ans: string) => {
let n: number = data.length;
let dp: number[] = data[n-1];
let dp: number[] = data[n-1].slice();
for (let i = n-2; i > -1; --i) {
for (let j = 0; j < data[i].length; ++j) {
dp[j] = Math.min(dp[j], dp[j + 1]) + data[i][j];
@ -642,7 +642,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [
"move down or right on each step. Determine how many",
"unique paths there are from start to finish.\n\n",
"NOTE: The data returned for this contract is an array",
"with the number or rows and columns:\n\n",
"with the number of rows and columns:\n\n",
`[${numRows}, ${numColumns}]`].join(" ");
},
difficulty: 3,