Compare commits

...

14 Commits

Author SHA1 Message Date
danielyxie
bcb198220d v0.46.3 2019-04-19 22:27:33 -07:00
danielyxie
bf1af6a68c Merge branch 'master' of https://github.com/danielyxie/bitburner into dev 2019-04-16 01:22:22 -07:00
danielyxie
3dd2975c61 Fixed issue with faction reputation donation bug calculating invalid rep gain 2019-04-16 01:20:52 -07:00
danielyxie
33f1e0cb3c Fixed several typos. TechVendor location UI will now properly update when you purchase TOR router. 'Manage Gang' faction option should show up properly 2019-04-16 01:20:52 -07:00
danielyxie
7514f63dcd Fixed issue with faction reputation donation bug calculating invalid rep gain 2019-04-16 01:19:29 -07:00
danielyxie
b6ff73391d Fixed several typos. TechVendor location UI will now properly update when you purchase TOR router. 'Manage Gang' faction option should show up properly 2019-04-15 02:49:49 -07:00
danielyxie
369ea8d381 Merge pull request #597 from danielyxie/dev
Dev
2019-04-14 02:26:37 -07:00
danielyxie
a7296c512c Fix merge conflicts 2019-04-14 02:26:47 -07:00
danielyxie
8f70817c10 Adding tooltips to new purchase augmentation ui 2019-04-14 02:21:43 -07:00
danielyxie
d044739f1c v0.46.2 2019-04-14 02:07:29 -07:00
danielyxie
3d1684f825 Fix Terminal wget bug. Issue #593 2019-04-14 02:07:29 -07:00
danielyxie
f6af9e94ab Gang bug fixes. Issues #574 and #575 2019-04-14 02:07:29 -07:00
danielyxie
215cf59e0b Fixed comment styling for all top-level src files 2019-04-14 02:07:29 -07:00
danielyxie
0d14cd6e7e Improved module import styling for all top-level src files 2019-04-14 02:07:29 -07:00
30 changed files with 907 additions and 200 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -2,10 +2,11 @@ Guides & Tips
=============
Getting Started Guide for Intermediate Programmers
What BitNode should I do?
Beginners FAQ
.. toctree::
:maxdepth: 3
Getting Started Guide for Beginner Programmers <guidesandtips/gettingstartedguideforbeginnerprogrammers>
What BitNode should I do?<guidesandtips/recommendedbitnodeorder>

View File

@@ -0,0 +1,490 @@
What BitNode should I do?
=========================
.. warning:: This page contains spoilers regarding the game's story/plot-line.
After destroying their first :ref:`BitNode <gameplay_bitnodes>`, many players
wonder which BitNode they should tackle next. This guide hopefully helps answer
that question.
Overview of each BitNode
------------------------
BitNode-1: Source Genesis
^^^^^^^^^^^^^^^^^^^^^^^^^
Description
The first BitNode created by the Enders to imprison the minds of humans. It became
the prototype and testing-grounds for all of the BitNodes that followed.
This is the first BitNode that you play through. It has no special
modifications or mechanics.
Source-File
:Max Level: 3
This Source-File lets the player start with 32GB of RAM on his/her home computer when
entering a new BitNode, and also increases all of the player's multipliers by:
* Level 1: 16%
* Level 2: 24%
* Level 3: 28%
Difficulty
The easiest BitNode
BitNode-2: Rise of the Underworld
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
Organized crime groups quickly filled the void of power left behind from the collapse of
Western government in the 2050s. As society and civlization broke down, people quickly
succumbed to the innate human impulse of evil and savagery. The organized crime
factions quickly rose to the top of the modern world.
In this BitNode:
* Your hacking level is reduced by 20%
* The growth rate and maximum amount of money available on servers are significantly decreased
* The amount of money gained from crimes and Infiltration is tripled
* Certain Factions (Slum Snakes, Tetrads, The Syndicate, The Dark Army, Speakers for the Dead,
NiteSec, The Black Hand) give the player the ability to form and manage their own gangs. These gangs
will earn the player money and reputation with the corresponding Faction
* Every Augmentation in the game will be available through the Factions listed above
* For every Faction NOT listed above, reputation gains are halved
* You will no longer gain passive reputation with Factions
Source-File
:Max Level: 3
This Source-File allows you to form gangs in other BitNodes once your karma decreases to a certain value.
It also increases the player's crime success rate, crime money, and charisma multipliers by:
* Level 1: 24%
* Level 2: 36%
* Level 3: 42%
Difficulty
Fairly easy, as hacking is still very profitable and the costs of various purchases/upgrades
is not increased. The gang mechanic may seem strange as its very different from anything
else, but it can be very powerful once you get the hang of it.
BitNode-3: Corporatocracy
^^^^^^^^^^^^^^^^^^^^^^^^^
Description
Our greatest illusion is that a healthy society can revolve around a
single-minded pursuit of wealth.
Sometime in the early 21st century economic and political globalization turned
the world into a corporatocracy, and it never looked back. Now, the privileged
elite will happily bankrupt their own countrymen, decimate their own community,
and evict their neighbors from houses in their desperate bid to increase their wealth.
In this BitNode you can create and manage your own corporation. Running a successful corporation
has the potential of generating massive profits. All other forms of income are reduced by 75%. Furthermore:
* The price and reputation cost of all Augmentations is tripled
* The starting and maximum amount of money on servers is reduced by 75%
* Server growth rate is reduced by 80%
* You now only need 75 favour with a faction in order to donate to it, rather than 150
Source-File
:Max Level: 3
This Source-File lets you create corporations on other BitNodes (although
some BitNodes will disable this mechanic). This Source-File also increases your
charisma and company salary multipliers by:
* Level 1: 8%
* Level 2: 12%
* Level 3: 14%
Difficulty
Somewhat-steep learning curve as you learn how to use and manage Corporations. Afterwards,
however, the BitNode is easy as Corporations can be very profitable.
BitNode-4: The Singularity
^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
The Singularity has arrived. The human race is gone, replaced by artificially superintelligent
beings that are more machine than man.
In this BitNode, progressing is significantly harder:
* Experience gain rates for all stats are reduced.
* Most methods of earning money will now give significantly less.
In this BitNode you will gain access to a new set of Netscript Functions known as Singularity Functions.
These functions allow you to control most aspects of the game through scripts, including
working for factions/companies, purchasing/installing Augmentations, and creating programs.
Source-File
:Max Level: 3
This Source-File lets you access and use the Singularity Functions in other BitNodes.
Each level of this Source-File will open up more Singularity Functions that you can use.
Difficulty:
Depending on what Source-Files you have unlocked before attempting this BitNode,
it can range from easy to moderate.
BitNode-5: Artificial Intelligence
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
They said it couldn't be done. They said the human brain,
along with its consciousness and intelligence, couldn't be replicated. They said the complexity
of the brain results from unpredictable, nonlinear interactions that couldn't be modeled
by 1's and 0's. They were wrong.
In this BitNode:
* The base security level of servers is doubled
* The starting money on servers is halved, but the maximum money remains the same
* Most methods of earning money now give significantly less
* Infiltration gives 50% more reputation and money
* Corporations have 50% lower valuations and are therefore less profitable
* Augmentations are more expensive
* Hacking experience gain rates are reduced
Source-File
:Max Level: 3
This Source-File grants you a special new stat called Intelligence.
Intelligence is unique because it is permanent and persistent (it never gets reset back to 1). However
gaining Intelligence experience is much slower than other stats, and it is also hidden (you won't know
when you gain experience and how much). Higher Intelligence levels will boost your production for many actions
in the game.
In addition, this Source-File will unlock the :js:func:`getBitNodeMultipliers()` Netscript function,
and will also raise all of your hacking-related multipliers by:
* Level 1: 8%
* Level 2: 12%
* Level 3: 14%
Difficulty
Depending on what Source-Files you have unlocked before attempting this BitNode, it
can range from easy to moderate.
BitNode-6: Bladeburners
^^^^^^^^^^^^^^^^^^^^^^^
Description
In the middle of the 21st century, OmniTek Incorporated began designing and manufacturing advanced synthetic
androids, or Synthoids for short. They achieved a major technological breakthrough in the sixth generation
of their Synthoid design, called MK-VI, by developing a hyperintelligent AI. Many argue that this was
the first sentient AI ever created. This resulted in Synthoid models that were stronger, faster, and more intelligent
than the humans that had created them.
In this BitNode you will be able to access the Bladeburner Division at the NSA, which provides
a new mechanic for progression. Furthermore:
* Hacking and Hacknet Nodes will be less profitable
* Your hacking level is reduced by 65%
* Hacking experience gain from scripts is reduced by 75%
* Corporations have 80% lower valuations and are therefore less profitable
* Working for companies is 50% less profitable
* Crimes and Infiltration are 25% less profitable
Source-File
:Max Level: 3
This Source-File allows you to access the NSA's Bladeburner Division in other
BitNodes. In addition, this Source-File will raise both the level and experience
gain rate of all your combat stats by:
* Level 1: 8%
* Level 2: 12%
* Level 3: 14%
Difficulty
Initially difficult due to the fact that hacking is no longer profitable and you have
to learn a new mechanic. After you get the hang of the Bladeburner mechanic, however,
it becomes moderately easy.
BitNode-7: Bladeburners 2079
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
In the middle of the 21st century, you were doing cutting-edge work at OmniTek Incorporated
as part of the AI design team for advanced synthetic androids, or Synthoids for short. You helped
achieve a major technological breakthrough in the sixth generation of the company's Synthoid
design, called MK-VI, by developing a hyperintelligent AI. Many argue that this was the first
sentient AI ever created. This resulted in Synthoid models that were stronger, faster,
and more intelligent than the humans that had created them.
In this BitNode you will be able to access the Bladeburner API, which allows you to access
Bladeburner functionality through Netscript. Furthermore:
* The rank you gain from Bladeburner contracts/operations is reduced by 40%
* Bladeburner skills cost twice as many skill points
* Augmentations are 3x more expensive
* Hacking and Hacknet Nodes will be significantly less profitable
* Your hacking level is reduced by 65%
* Hacking experience gain from scripts is reduced by 75%
* Corporations have 80% lower valuations and are therefore less profitable
* Working for companies is 50% less profitable
* Crimes and Infiltration are 25% less profitable
Source-File
:Max Level: 3
This Source-File allows you to access the Bladeburner Netscript API in other
BitNodes. In addition, this Source-File will increase all of your Bladeburner multipliers by:
* Level 1: 8%
* Level 2: 12%
* Level 3: 14%
Difficulty
Slightly more difficult than BitNode-6. However, you will be able to automate more
aspects of the Bladeburner feature, which means it will be more passive.
BitNode-8: Ghost of Wall Street
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
You are trying to make a name for yourself as an up-and-coming hedge fund manager on Wall Street.
In this BitNode:
* You start with $250 million
* The only way to earn money is by trading on the stock market
* You start with a WSE membership and access to the TIX API
* You are able to short stocks and place different types of orders (limit/stop)
* You can immediately donate to factions to gain reputation
Source-File
:Max Level: 3
This Source-File grants the following benefits:
* Level 1: Permanent access to WSE and TIX API
* Level 2: Ability to short stocks in other BitNodes
* Level 3: Ability to use limit/stop orders in other BitNodes
This Source-File also increases your hacking growth multipliers by:
* Level 1: 12%
* Level 2: 18%
* Level 3: 21%
Difficulty
Very difficult until you unlock the Four Sigma (4S) Market Data API. After you
unlock the API however, it becomes moderately easy.
BitNode-9: Hacktocracy
^^^^^^^^^^^^^^^^^^^^^^
Description
When Fulcrum Technologies released their open-source Linux distro Chapeau, it quickly
became the OS of choice for the underground hacking community. Chapeau became especially
notorious for powering the Hacknet, a global, decentralized network used for nefarious
purposes. Fulcrum quickly abandoned the project and dissociated themselves from it.
This BitNode unlocks the Hacknet Server, an upgraded version of the Hacknet Node. Hacknet Servers generate
hashes, which can be spent on a variety of different upgrades.
In this BitNode:
* Your stats are significantly decreased
* You cannnot purchase additional servers
* Hacking is significantly less profitable
Source-File
:Max Level: 3
This Source-File grants the following benefits:
* Level 1: Permanently unlocks the Hacknet Server in other BitNodes
* Level 2: You start with 128GB of RAM on your home computer when entering a new BitNode
* Level 3: Grants a highly-upgraded Hacknet Server when entering a new BitNode
(Note that the Level 3 effect of this Source-File only applies when entering a new BitNode, NOT
when installing Augmentation
Difficulty
Hard
BitNode-10: Digital Carbon
^^^^^^^^^^^^^^^^^^^^^^^^^^
Description
In 2084, VitaLife unveiled to the world the Persona Core, a technology that allowed people
to digitize their consciousness. Their consciousness could then be transferred into Synthoids
or other bodies by trasmitting the digitized data. Human bodies became nothing more than 'sleeves'
for the human consciousness. Mankind had finally achieved immortality - at least for those
that could afford it.
This BitNode unlocks Sleeve technology. Sleeve technology allows you to:
1. Re-sleeve: Purchase and transfer your consciousness into a new body
2. Duplicate Sleeves: Duplicate your consciousness into Synthoids, allowing you to perform different tasks synchronously
In this BitNode:
* Your stats are significantly decreased
* All methods of gaining money are half as profitable (except Stock Market)
* Purchased servers are more expensive, have less max RAM, and a lower maximum limit
* Augmentations are 5x as expensive and require twice as much reputation
Source-File
:Max Level: 3
This Source-File unlocks Sleeve technology in other BitNodes.
Each level of this Source-File also grants you a Duplicate Sleeve
Difficulty
Hard
BitNode-11: The Big Crash
^^^^^^^^^^^^^^^^^^^^^^^^^
Description
The 2050s was defined by the massive amounts of violent civil unrest and anarchic rebellion that rose all around the world. It was this period
of disorder that eventually lead to the governmental reformation of many global superpowers, most notably
the USA and China. But just as the world was slowly beginning to recover from these dark times, financial catastrophe hit.
In many countries, the high cost of trying to deal with the civil disorder bankrupted the governments. In all of this chaos and confusion, hackers
were able to steal billions of dollars from the world's largest electronic banks, prompting an international banking crisis as
governments were unable to bail out insolvent banks. Now, the world is slowly crumbling in the middle of the biggest economic crisis of all time.
In this BitNode:
* Your hacking stat and experience gain are halved
* The starting and maximum amount of money available on servers is significantly decreased
* The growth rate of servers is significantly reduced
* Weakening a server is twice as effective
* Company wages are decreased by 50%
* Corporation valuations are 99% lower and are therefore significantly less profitable
* Hacknet Node production is significantly decreased
* Crime and Infiltration are more lucrative
* Augmentations are twice as expensive
Source-File
:Max Level: 3
Destroying this BitNode will give you Source-File 11, or if you already have this Source-File it will
upgrade its level up to a maximum of 3. This Source-File makes it so that company favor increases BOTH
the player's salary and reputation gain rate at that company by 1% per favor (rather than just the reputation gain).
This Source-File also increases the player's company salary and reputation gain multipliers by:
* Level 1: 32%
* Level 2: 48%
* Level 3: 56%
Difficulty
Hard
BitNode-12: The Recursion
^^^^^^^^^^^^^^^^^^^^^^^^^
Description
Every time this BitNode is destroyed, it becomes slightly harder.
Source-File
:Max Level: Infinity
Each level of Source-File 12 will increase all of your multipliers by 1%. This effect
is multiplicative with itself. In other words, level N of this Source-File will result
in a multiplier of 1.01^N (or 0.99^N for multipliers that decrease)
Difficulty
Initially very easy, but then it (obviously) becomes harder as you continue to do it.
Recommended BitNodes
--------------------
As a player, you are not forced to tackle the BitNodes in any particular order. You are
free to choose whichever ones you want. The "best" order can vary between players,
depending on what you like to do any what kind of player you are. In general, here
are the recommended BitNodes for different things:
For fast progression
^^^^^^^^^^^^^^^^^^^^
.. note:: This does not recommend the absolute fastest path, as I don't know what
exactly the fastest path is. But it does recommend the BitNodes that are
commonly considered to be optimal by players.
1. Repeat **BitNode-1: Source Genesis** until you max out its Source-File. Its Source-File
is extremely powerful, as it raises all multipliers by a significant amount.
2. Repeat **BitNode-12: The Recursion** several times. This BitNode will be extremely easy the
first few times you tackle it, and its Source-File raises all multipliers. Furthermore,
its effect stacks multiplicatively with itself and other Source-Files/Augmentations,
which gets better as time goes on
3. Do **BitNode-5: Artificial Intelligence** once or twice. The intelligence stat it unlocks
will gradually build up as you continue to play the game, and will be helpful
in the future. The Source-File also provides hacking multipliers, which are
strong because hacking is typically one of the best ways of earning money.
4. (Optional) Consider doing **BitNode-4: The Singularity**. Its Source-File does not directly make you
more powerful in any way, but it does unlock :ref:`netscript_singularityfunctions` which
let you automate significantly more aspects of the game.
5. Do **BitNode-3: Corporatocracy** once to unlock the Corporation mechanic. This mechanic
has high profit potential.
6. Do **BitNode-6: Bladeburners** once to unlock the Bladeburners mechanic. The Bladeburner
mechanic is useful for some of the future BitNodes (such as 9 and 10).
7. Do **BitNode-9: Hacktocracy** to unlock the Hacknet Server mechanic. You can
consider repeating it as well, as its Level 2 and 3 effects are pretty helpful as well.
.. todo:: To be continued as more BitNodes get added
For the strongest Source-Files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note that the strongest Source-Files are typically rewarded by the hardest BitNodes.
The strongest Source-File is that from **BitNode-1: Source Genesis**, as it raises
all multipliers by a significant amount.
Similarly, the Source-File from **BitNode-12: The Recursion** is also very strong
because it raises all multipliers. Each level of Source-File 12 is fairly weak,
but its effectiveness gets better over time since the effects of Source-Files and
Augmentations are multiplicative with each other.
The Source-File from **BitNode-9: Hacktocracy** is good because it unlocks the Hacknet
Server mechanic. The Hacknet Server mechanic causes Hacknet Nodes to produce a new
currency called *hashes*, rather than money. *Hashes* can be spent on powerful upgrades
that benefit your hacking, Corporation, Bladeburner, etc.
The Duplicate Sleeves granted by the Source-File from **BitNode-10: Digital Carbon**
are strong, but only after you have several of them and have spent some time/money upgrading
them.
For more scripting/hacking
^^^^^^^^^^^^^^^^^^^^^^^^^^
**BitNode-4: The Singularity** unlocks the :ref:`netscript_singularityfunctions`, which
can be used to automate many different aspects of the game, including working for factions/companies,
purchasing & installing Augmentations, and creating programs
**BitNode-6** and **BitNode-7** unlock Bladeburner and its corresponding
:ref:`Netscript API <netscript_bladeburnerapi>`. This allows you to automate an entire
new mechanic.
**BitNode-2: Rise of the Underworld** also unlocks a new mechanic and Netscript API for automating
it (the Gang mechanic). However, it is not as interesting as Bladeburner (in my opinion)
**BitNode-9: Hacktocracy** unlocks the Hacknet Server mechanic and several new
functions in the :ref:`Hacknet Node API <netscript_hacknetnodeapi>` for using it.
For new mechanics
^^^^^^^^^^^^^^^^^
**BitNode-2: Rise of the Underworld** unlocks a new mechanic in which you can
manage a gang. Gangs earn you money and can be very profitable once they get large
and powerful. The biggest benefit of gangs, however, is that they make all
Augmentations available to you through their corresponding faction.
**BitNode-3: Corporatocracy** unlocks a new mechanic in which you can manage a
corporation. You can earn money through Corporations by selling your stocks, or by
configuring your corporation to pay dividends to shareholders. If your Corporation
gets big enough, it can also bribe factions in exchange for faction reputation.
**BitNode-6: Bladeburners** unlocks a new mechanic that centers around combat rather
than hacking. The main benefit of the Bladeburner mechanic is that it offers a new
method of destroying a BitNode.
**BitNode-9: Hacktocracy** unlocks the Hacknet Server, which is an upgraded version of a
Hacknet Node. The Hacknet Server generates a computational unit called a *hash*. *Hashes*
can be spent on a variety of different upgrades that can benefit your hacking,
Corporation, Bladeburner progress, and more. It transforms the Hacknet Node from a
simple money-generator to a more interesting mechanic.
**BitNode-10: Digital Carbon** unlocks two new mechanics: Re-Sleeving and
Duplicate Sleeves.
For a Challenge
^^^^^^^^^^^^^^^
In general, the higher BitNodes are more difficult than the lower ones.
**BitNode-12: The Recursion** is an obvious exception as it gets progressively harder.
**BitNode-8: Ghost of Wall Street** provides a unique challenge as the only method
of earning money in that BitNode is through trading at the stock market.

View File

@@ -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?
------------------

View File

@@ -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 " +
@@ -358,8 +358,8 @@ function initAugmentations() {
}
AddToAugmentations(EnhancedSocialInteractionImplant);
//Hacking augmentations
var BitWire = new Augmentation({
// Hacking augmentations
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 " +
@@ -756,8 +756,8 @@ function initAugmentations() {
}
AddToAugmentations(NeuronalDensification);
//Work Augmentations
var NuoptimalInjectorImplant = new Augmentation({
// Work Augmentations
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);
//HacknetNode Augmentations
var HacknetNodeCPUUpload = new Augmentation({
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
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) " +
@@ -1206,13 +1224,13 @@ function initAugmentations() {
}
AddToAugmentations(PowerRecirculator);
//Unique AUGS (Each Faction gets one unique augmentation)
//Factions that already have unique augs up to this point:
// Slum Snakes, CyberSec, Netburners, Fulcrum Secret Technologies,
// Silhouette
// Unique AUGS (Each Faction gets one unique augmentation)
// Factions that already have unique augs up to this point:
// Slum Snakes, CyberSec, Netburners, Fulcrum Secret Technologies,
// Silhouette
//Illuminati
var QLink = new Augmentation({
// Illuminati
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 " +
@@ -1233,8 +1251,8 @@ function initAugmentations() {
}
AddToAugmentations(QLink);
//Daedalus
var RedPill = new Augmentation({
// Daedalus
const RedPill = new Augmentation({
name:AugmentationNames.TheRedPill, repCost:1e6, moneyCost:0,
info:"It's time to leave the cave."
});
@@ -1244,8 +1262,8 @@ function initAugmentations() {
}
AddToAugmentations(RedPill);
//Covenant
var SPTN97 = new Augmentation({
// Covenant
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 " +
@@ -1266,8 +1284,8 @@ function initAugmentations() {
}
AddToAugmentations(SPTN97);
//ECorp
var HiveMind = new Augmentation({
// ECorp
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 " +
@@ -1280,8 +1298,8 @@ function initAugmentations() {
}
AddToAugmentations(HiveMind);
//MegaCorp
var CordiARCReactor = new Augmentation({
// MegaCorp
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 " +
@@ -1305,8 +1323,8 @@ function initAugmentations() {
}
AddToAugmentations(CordiARCReactor);
//BachmanAndAssociates
var SmartJaw = new Augmentation({
// BachmanAndAssociates
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 " +
@@ -1327,8 +1345,8 @@ function initAugmentations() {
}
AddToAugmentations(SmartJaw);
//BladeIndustries
var Neotra = new Augmentation({
// BladeIndustries
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 " +
@@ -1344,8 +1362,8 @@ function initAugmentations() {
}
AddToAugmentations(Neotra);
//NWO
var Xanipher = new Augmentation({
// NWO
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 " +
@@ -1372,8 +1390,8 @@ function initAugmentations() {
}
AddToAugmentations(Xanipher);
//ClarkeIncorporated
var nextSENS = new Augmentation({
// ClarkeIncorporated
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 " +
@@ -1392,8 +1410,8 @@ function initAugmentations() {
}
AddToAugmentations(nextSENS);
//OmniTekIncorporated
var OmniTekInfoLoad = new Augmentation({
// OmniTekIncorporated
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 " +
@@ -1410,11 +1428,11 @@ function initAugmentations() {
}
AddToAugmentations(OmniTekInfoLoad);
//FourSigma
//TODO Later when Intelligence is added in . Some aug that greatly increases int
// FourSigma
// TODO Later when Intelligence is added in . Some aug that greatly increases int
//KuaiGongInternational
var PhotosyntheticCells = new Augmentation({
// KuaiGongInternational
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 " +
@@ -1431,8 +1449,8 @@ function initAugmentations() {
}
AddToAugmentations(PhotosyntheticCells);
//BitRunners
var Neurolink = new Augmentation({
// BitRunners
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 " +
@@ -1454,8 +1472,8 @@ function initAugmentations() {
}
AddToAugmentations(Neurolink);
//BlackHand
var TheBlackHand = new Augmentation({
// BlackHand
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 " +
@@ -1478,8 +1496,8 @@ function initAugmentations() {
}
AddToAugmentations(TheBlackHand);
//NiteSec
var CRTX42AA = new Augmentation({
// NiteSec
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 " +
@@ -1496,8 +1514,8 @@ function initAugmentations() {
}
AddToAugmentations(CRTX42AA);
//Chongqing
var Neuregen = new Augmentation({
// Chongqing
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 " +
@@ -1511,8 +1529,8 @@ function initAugmentations() {
}
AddToAugmentations(Neuregen);
//Sector12
var CashRoot = new Augmentation({
// Sector12
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 " +
@@ -1527,8 +1545,8 @@ function initAugmentations() {
}
AddToAugmentations(CashRoot);
//NewTokyo
var NutriGen = new Augmentation({
// NewTokyo
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 " +
@@ -1547,12 +1565,12 @@ function initAugmentations() {
}
AddToAugmentations(NutriGen);
//Aevum
//TODO Later Something that lets you learn advanced math...this increases int
//and profits as a trader/from trading
// Aevum
// TODO Later Something that lets you learn advanced math...this increases int
// and profits as a trader/from trading
//Ishima
var INFRARet = new Augmentation({
// Ishima
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>" +
@@ -1570,8 +1588,8 @@ function initAugmentations() {
}
AddToAugmentations(INFRARet);
//Volhaven
var DermaForce = new Augmentation({
// Volhaven
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, " +
@@ -1585,8 +1603,8 @@ function initAugmentations() {
}
AddToAugmentations(DermaForce);
//SpeakersForTheDead
var GrapheneBrachiBlades = new Augmentation({
// SpeakersForTheDead
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 " +
@@ -1607,8 +1625,8 @@ function initAugmentations() {
}
AddToAugmentations(GrapheneBrachiBlades);
//DarkArmy
var GrapheneBionicArms = new Augmentation({
// DarkArmy
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 " +
@@ -1624,8 +1642,8 @@ function initAugmentations() {
}
AddToAugmentations(GrapheneBionicArms);
//TheSyndicate
var BrachiBlades = new Augmentation({
// TheSyndicate
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>" +
@@ -1643,8 +1661,8 @@ function initAugmentations() {
}
AddToAugmentations(BrachiBlades);
//Tetrads
var BionicArms = new Augmentation({
// Tetrads
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>" +
@@ -1658,8 +1676,8 @@ function initAugmentations() {
}
AddToAugmentations(BionicArms);
//TianDiHui
var SNA = new Augmentation({
// TianDiHui
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>" +
@@ -1677,10 +1695,10 @@ function initAugmentations() {
}
AddToAugmentations(SNA);
//Special Bladeburner Augmentations
var BladeburnersFactionName = "Bladeburners";
// Special Bladeburner Augmentations
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 " +
@@ -1973,8 +1991,8 @@ function initAugmentations() {
resetAugmentation(BladesSimulacrum);
}
//Update costs based on how many have been purchased
var mult = Math.pow(CONSTANTS.MultipleAugMultiplier, Player.queuedAugmentations.length);
// Update costs based on how many have been purchased
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) {

View File

@@ -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",

View File

@@ -58,7 +58,7 @@ export function initBitNodes() {
"You will no longer gain passive reputation with Factions<br><br>" +
"Destroying this BitNode will give you Source-File 2, or if you already have this Source-File it will " +
"upgrade its level up to a maximum of 3. This Source-File allows you to form gangs in other BitNodes " +
"once your karma decreases to a certain value. " +
"once your karma decreases to a certain value. " +
"It also increases the player's crime success rate, crime money, and charisma multipliers by:<br><br>" +
"Level 1: 24%<br>" +
"Level 2: 36%<br>" +
@@ -82,7 +82,8 @@ export function initBitNodes() {
"Level 1: 8%<br>" +
"Level 2: 12%<br>" +
"Level 3: 14%");
BitNodes["BitNode4"] = new BitNode(4, "The Singularity", "The Man and the Machine", "The Singularity has arrived. The human race is gone, replaced " +
BitNodes["BitNode4"] = new BitNode(4, "The Singularity", "The Man and the Machine",
"The Singularity has arrived. The human race is gone, replaced " +
"by artificially superintelligent beings that are more machine than man. <br><br>" +
"In this BitNode, progressing is significantly harder. Experience gain rates " +
"for all stats are reduced. Most methods of earning money will now give significantly less.<br><br>" +
@@ -93,7 +94,8 @@ export function initBitNodes() {
"upgrade its level up to a maximum of 3. This Source-File lets you access and use the Singularity " +
"Functions in other BitNodes. Each level of this Source-File will open up more Singularity Functions " +
"that you can use.");
BitNodes["BitNode5"] = new BitNode(5, "Artificial Intelligence", "Posthuman", "They said it couldn't be done. They said the human brain, " +
BitNodes["BitNode5"] = new BitNode(5, "Artificial Intelligence", "Posthuman",
"They said it couldn't be done. They said the human brain, " +
"along with its consciousness and intelligence, couldn't be replicated. They said the complexity " +
"of the brain results from unpredictable, nonlinear interactions that couldn't be modeled " +
"by 1's and 0's. They were wrong.<br><br>" +

View File

@@ -811,7 +811,7 @@ Bladeburner.prototype.create = function() {
this.contracts["Retirement"] = new Contract({
name:"Retirement",
desc:"Hunt down and retire (kill) rogue Synthoids.<br><br>" +
"Successfully copmleting a Retirement contract will lower the population in your current " +
"Successfully completing a Retirement contract will lower the population in your current " +
"city, and will also increase its chaos level.",
baseDifficulty:200, difficultyFac:1.03, rewardFac:1.065,
rankGain:0.6, hpLoss:1,

View File

@@ -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)

View File

@@ -45,9 +45,9 @@ export class DonateOption extends React.Component<IProps, IState> {
this.handleChange = this.handleChange.bind(this);
}
// Returns rep gain for the current donation amount
calculateRepGain(): number {
return this.state.donateAmt / CONSTANTS.DonateMoneyToRepDivisor * this.props.p.faction_rep_mult;
// Returns rep gain for a given donation amount
calculateRepGain(amt: number): number {
return amt / CONSTANTS.DonateMoneyToRepDivisor * this.props.p.faction_rep_mult;
}
donate(): void {
@@ -59,7 +59,7 @@ export class DonateOption extends React.Component<IProps, IState> {
dialogBoxCreate(`You cannot afford to donate this much money!`);
} else {
this.props.p.loseMoney(amt);
const repGain = this.calculateRepGain();
const repGain = this.calculateRepGain(amt);
this.props.faction.playerReputation += repGain;
dialogBoxCreate(`You just donated ${numeralWrapper.formatMoney(amt)} to ${fac.name} to gain ` +
`${numeralWrapper.format(repGain, "0,0.000")} reputation`);
@@ -76,11 +76,11 @@ export class DonateOption extends React.Component<IProps, IState> {
statusTxt: "Invalid donate amount entered!",
});
} else {
const repGain = this.calculateRepGain();
const repGain = this.calculateRepGain(amt);
this.setState({
donateAmt: amt,
statusTxt: `This donation will result in ${numeralWrapper.format(repGain, "0,0.000")} reputation gain`,
})
});
}
}

View File

@@ -45,7 +45,9 @@ export class Info extends React.Component<IProps, any> {
return (
<div>
<i className={"text"} style={infoStyleMarkup} dangerouslySetInnerHTML={infoText}></i>
<pre>
<i className={"text"} dangerouslySetInnerHTML={infoText}></i>
</pre>
<p style={blockStyleMarkup}>-------------------------</p>
<AutoupdatingParagraph
intervalTime={5e3}

View File

@@ -142,6 +142,7 @@ export class PurchaseableAugmentation extends React.Component<IProps, any> {
onClick={this.handleClick}
style={inlineStyleMarkup}
text={btnTxt}
tooltip={this.aug.info}
/>
<p style={txtStyle}>{statusTxt}</p>
</span>

View File

@@ -208,8 +208,12 @@ export class FactionRoot extends React.Component<IProps, IState> {
const canPurchaseSleeves = (faction.name === "The Covenant" && p.bitNodeN >= 10 && SourceFileFlags[10]);
let canAccessGang = (p.canAccessGang() && GangNames.includes(faction.name));
if (p.inGang() && (p.getGangName() !== faction.name)) {
canAccessGang = false;
if (p.inGang()) {
if (p.getGangName() !== faction.name) {
canAccessGang = false;
} else if (p.getGangName() === faction.name) {
canAccessGang = true;
}
}
return (

View File

@@ -1359,6 +1359,7 @@ Gang.prototype.displayGangContent = function(player) {
innerText: "Cancel",
});
createPopup(popupId, [txt, br, nameInput, yesBtn, noBtn]);
nameInput.focus();
}
});
UIElems.gangManagementSubpage.appendChild(UIElems.gangRecruitMemberButton);

View File

@@ -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": {

View File

@@ -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.`;
}

View File

@@ -261,6 +261,10 @@ export function createUpgradeHomeRamPopup(p: IPlayer) {
* @param p - Player object
*/
export function purchaseTorRouter(p: IPlayer) {
if (p.hasTorRouter()) {
dialogBoxCreate(`You already have a TOR Router`);
return;
}
if (!p.canAfford(CONSTANTS.TorRouterCost)) {
dialogBoxCreate("You cannot afford to purchase the Tor router");
return;

View File

@@ -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>

View File

@@ -54,6 +54,9 @@ export class TechVendorLocation extends React.Component<IProps, any> {
purchaseTorRouter() {
purchaseTorRouter(this.props.p);
this.setState({
torPurchased: this.props.p.hasTorRouter(),
});
}
render() {

View File

@@ -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");
@@ -5161,7 +5168,7 @@ function NetscriptFunctions(workerScript) {
// Easter egg function
break : function() {
if (workerScript.checkingRam) { return 0; }
return Player.karma;
}
}

View File

@@ -894,6 +894,7 @@ export function findSleevePurchasableAugs(sleeve: Sleeve, p: IPlayer): Augmentat
for (const facName of p.factions) {
if (facName === "Bladeburners") { continue; }
if (facName === "Netburners") { continue; }
const fac: Faction | null = Factions[facName];
if (fac == null) { continue; }

View File

@@ -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>

View File

@@ -204,8 +204,8 @@ $(document).keydown(function(event) {
// Autocomplete
if (terminalInput == null) {return;}
var input = terminalInput.value;
if (input == "") {return;}
let input = terminalInput.value;
if (input == "") { return; }
const semiColonIndex = input.lastIndexOf(";");
if(semiColonIndex !== -1) {
@@ -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;
if (index < -1) {index = 0;}
var allPos = determineAllPossibilitiesForTabCompletion(Player, input, index);
const commandArray = input.split(" ");
let index = commandArray.length - 2;
if (index < -1) { index = 0; }
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) {

View File

@@ -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.
*/

View File

@@ -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,16 +90,72 @@ 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;
if (!t_cmd.endsWith(" ")) {
@@ -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;
}

View File

@@ -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,