mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 06:18:42 +02:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcb198220d | ||
|
|
bf1af6a68c | ||
|
|
3dd2975c61 | ||
|
|
33f1e0cb3c | ||
|
|
7514f63dcd | ||
|
|
b6ff73391d | ||
|
|
369ea8d381 | ||
|
|
a7296c512c | ||
|
|
8f70817c10 | ||
|
|
d044739f1c | ||
|
|
3d1684f825 | ||
|
|
f6af9e94ab | ||
|
|
215cf59e0b | ||
|
|
0d14cd6e7e |
@@ -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
|
||||
|
||||
2
dist/engine.bundle.js
vendored
2
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
10
dist/vendor.bundle.js
vendored
10
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
@@ -40,7 +40,7 @@ solutions. Some may be numbers, others may be strings or arrays.
|
||||
If a contract asks for a specific solution format, then
|
||||
use that. Otherwise, follow these rules when submitting solutions:
|
||||
|
||||
* String-type solutions should not have quotation marks surrounding
|
||||
* String-type solutions should **not** have quotation marks surrounding
|
||||
the string (unless specifically asked for). Only quotation
|
||||
marks that are part of the actual string solution should be included.
|
||||
* Array-type solutions should be submitted with each element
|
||||
|
||||
@@ -6,10 +6,11 @@ Changelog
|
||||
v0.46.2 - 4/14/2019
|
||||
-------------------
|
||||
* Source-File 2 now allows you to form gangs in other BitNodes when your karma reaches a very large negative value
|
||||
** (Karma is a hidden stat and is lowered by committing crimes)
|
||||
* (Karma is a hidden stat and is lowered by committing crimes)
|
||||
|
||||
* Gang changes:
|
||||
** Bug Fix: Gangs can no longer clash with themselve
|
||||
** Bug Fix: Winning against another gang should properly reduce their power
|
||||
* Bug Fix: Gangs can no longer clash with themselve
|
||||
* Bug Fix: Winning against another gang should properly reduce their power
|
||||
|
||||
* Bug Fix: Terminal 'wget' command now works properly
|
||||
* Bug Fix: Hacknet Server Hash upgrades now properly reset upon installing Augs/switching BitNodes
|
||||
|
||||
@@ -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>
|
||||
|
||||
490
doc/source/guidesandtips/recommendedbitnodeorder.rst
Normal file
490
doc/source/guidesandtips/recommendedbitnodeorder.rst
Normal 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.
|
||||
@@ -5,8 +5,9 @@
|
||||
|
||||
Welcome to Bitburner's documentation!
|
||||
=====================================
|
||||
Bitburner is a cyberpunk-themed `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_ that is currently in the
|
||||
early beta stage of development. The game `can be played here <https://danielyxie.github.io/bitburner/>`_.
|
||||
Bitburner is a programming-based `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_
|
||||
that revolves around hacking and cyberpunk themes. The game is currently in the
|
||||
early beta stage of development. It `can be played here <https://danielyxie.github.io/bitburner/>`_.
|
||||
|
||||
What is Bitburner?
|
||||
------------------
|
||||
|
||||
@@ -46,7 +46,7 @@ function initAugmentations() {
|
||||
clearObject(Augmentations);
|
||||
|
||||
//Combat stat augmentations
|
||||
var HemoRecirculator = new Augmentation({
|
||||
const HemoRecirculator = new Augmentation({
|
||||
name:AugmentationNames.HemoRecirculator, moneyCost: 9e6, repCost:4e3,
|
||||
info:"A heart implant that greatly increases the body's ability to effectively use and pump " +
|
||||
"blood.<br><br>" +
|
||||
@@ -62,7 +62,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(HemoRecirculator);
|
||||
|
||||
var Targeting1 = new Augmentation({
|
||||
const Targeting1 = new Augmentation({
|
||||
name:AugmentationNames.Targeting1, moneyCost:3e6, repCost:2e3,
|
||||
info:"This cranial implant is embedded within the player's inner ear structure and optic nerves. It regulates and enhances the user's " +
|
||||
"balance and hand-eye coordination. It is also capable of augmenting reality by projecting digital information " +
|
||||
@@ -77,7 +77,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(Targeting1);
|
||||
|
||||
var Targeting2 = new Augmentation({
|
||||
const Targeting2 = new Augmentation({
|
||||
name:AugmentationNames.Targeting2, moneyCost:8.5e6, repCost:3.5e3,
|
||||
info:"This is an upgrade of the Augmented Targeting I cranial implant, which is capable of augmenting reality " +
|
||||
"and enhances the user's balance and hand-eye coordination.<br><br>" +
|
||||
@@ -92,7 +92,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(Targeting2);
|
||||
|
||||
var Targeting3 = new Augmentation({
|
||||
const Targeting3 = new Augmentation({
|
||||
name:AugmentationNames.Targeting3, moneyCost:23e6, repCost:11e3,
|
||||
info:"This is an upgrade of the Augmented Targeting II cranial implant, which is capable of augmenting reality " +
|
||||
"and enhances the user's balance and hand-eye coordination.<br><br>" +
|
||||
@@ -107,7 +107,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(Targeting3);
|
||||
|
||||
var SyntheticHeart = new Augmentation({
|
||||
const SyntheticHeart = new Augmentation({
|
||||
name:AugmentationNames.SyntheticHeart, moneyCost:575e6, repCost:300e3,
|
||||
info:"This advanced artificial heart, created from plasteel and graphene, is capable of pumping more blood " +
|
||||
"at much higher efficiencies than a normal human heart.<br><br>" +
|
||||
@@ -122,7 +122,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(SyntheticHeart);
|
||||
|
||||
var SynfibrilMuscle = new Augmentation({
|
||||
const SynfibrilMuscle = new Augmentation({
|
||||
name:AugmentationNames.SynfibrilMuscle, repCost:175e3, moneyCost:225e6,
|
||||
info:"The myofibrils in human muscles are injected with special chemicals that react with the proteins inside " +
|
||||
"the myofibrils, altering their underlying structure. The end result is muscles that are stronger and more elastic. " +
|
||||
@@ -138,7 +138,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(SynfibrilMuscle)
|
||||
|
||||
var CombatRib1 = new Augmentation({
|
||||
const CombatRib1 = new Augmentation({
|
||||
name:AugmentationNames.CombatRib1, repCost:3e3, moneyCost:4750000,
|
||||
info:"The human body's ribs are replaced with artificial ribs that automatically and continuously release cognitive " +
|
||||
"and performance-enhancing drugs into the bloodstream, improving the user's abilities in combat.<br><br>" +
|
||||
@@ -153,7 +153,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(CombatRib1);
|
||||
|
||||
var CombatRib2 = new Augmentation({
|
||||
const CombatRib2 = new Augmentation({
|
||||
name:AugmentationNames.CombatRib2, repCost:7.5e3, moneyCost:13e6,
|
||||
info:"This is an upgrade to the Combat Rib I augmentation, and is capable of releasing even more potent combat-enhancing " +
|
||||
"drugs into the bloodstream.<br><br>" +
|
||||
@@ -169,7 +169,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(CombatRib2);
|
||||
|
||||
var CombatRib3 = new Augmentation({
|
||||
const CombatRib3 = new Augmentation({
|
||||
name:AugmentationNames.CombatRib3, repCost:14e3, moneyCost:24e6,
|
||||
info:"This is an upgrade to the Combat Rib II augmentation, and is capable of releasing even more potent combat-enhancing " +
|
||||
"drugs into the bloodstream<br><br>." +
|
||||
@@ -185,7 +185,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(CombatRib3);
|
||||
|
||||
var NanofiberWeave = new Augmentation({
|
||||
const NanofiberWeave = new Augmentation({
|
||||
name:AugmentationNames.NanofiberWeave, repCost:15e3, moneyCost:25e6,
|
||||
info:"Synthetic nanofibers are woven into the skin's extracellular matrix using electrospinning. " +
|
||||
"This improves the skin's ability to regenerate itself and protect the body from external stresses and forces.<br><br>" +
|
||||
@@ -200,7 +200,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(NanofiberWeave);
|
||||
|
||||
var SubdermalArmor = new Augmentation({
|
||||
const SubdermalArmor = new Augmentation({
|
||||
name:AugmentationNames.SubdermalArmor, repCost:350e3, moneyCost:650e6,
|
||||
info:"The NEMEAN Subdermal Weave is a thin, light-weight, graphene plating that houses a dilatant fluid. " +
|
||||
"The material is implanted underneath the skin, and is the most advanced form of defensive enhancement " +
|
||||
@@ -217,7 +217,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(SubdermalArmor);
|
||||
|
||||
var WiredReflexes = new Augmentation({
|
||||
const WiredReflexes = new Augmentation({
|
||||
name:AugmentationNames.WiredReflexes, repCost:500, moneyCost:500e3,
|
||||
info:"Synthetic nerve-enhancements are injected into all major parts of the somatic nervous system, " +
|
||||
"supercharging the body's ability to send signals through neurons. This results in increased reflex speed.<br><br>" +
|
||||
@@ -232,7 +232,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(WiredReflexes);
|
||||
|
||||
var GrapheneBoneLacings = new Augmentation({
|
||||
const GrapheneBoneLacings = new Augmentation({
|
||||
name:AugmentationNames.GrapheneBoneLacings, repCost:450e3, moneyCost:850e6,
|
||||
info:"A graphene-based material is grafted and fused into the user's bones, significantly increasing " +
|
||||
"their density and tensile strength.<br><br>" +
|
||||
@@ -246,7 +246,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(GrapheneBoneLacings);
|
||||
|
||||
var BionicSpine = new Augmentation({
|
||||
const BionicSpine = new Augmentation({
|
||||
name:AugmentationNames.BionicSpine, repCost:18e3, moneyCost:25e6,
|
||||
info:"An artificial spine created from plasteel and carbon fibers that completely replaces the organic spine. " +
|
||||
"Not only is the Bionic Spine physically stronger than a human spine, but it is also capable of digitally " +
|
||||
@@ -265,7 +265,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(BionicSpine);
|
||||
|
||||
var GrapheneBionicSpine = new Augmentation({
|
||||
const GrapheneBionicSpine = new Augmentation({
|
||||
name:AugmentationNames.GrapheneBionicSpine, repCost:650e3, moneyCost:1200e6,
|
||||
info:"An upgrade to the Bionic Spine augmentation. It fuses the implant with an advanced graphene " +
|
||||
"material to make it much stronger and lighter.<br><br>" +
|
||||
@@ -282,7 +282,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(GrapheneBionicSpine);
|
||||
|
||||
var BionicLegs = new Augmentation({
|
||||
const BionicLegs = new Augmentation({
|
||||
name:AugmentationNames.BionicLegs, repCost:60e3, moneyCost:75e6,
|
||||
info:"Cybernetic legs created from plasteel and carbon fibers that completely replace the user's organic legs.<br><br>" +
|
||||
"This augmentation increases the player's agility by 60%.",
|
||||
@@ -295,7 +295,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(BionicLegs);
|
||||
|
||||
var GrapheneBionicLegs = new Augmentation({
|
||||
const GrapheneBionicLegs = new Augmentation({
|
||||
name:AugmentationNames.GrapheneBionicLegs, repCost:300e3, moneyCost:900e6,
|
||||
info:"An upgrade to the Bionic Legs augmentation. It fuses the implant with an advanced graphene " +
|
||||
"material to make it much stronger and lighter.<br><br>" +
|
||||
@@ -309,8 +309,8 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(GrapheneBionicLegs);
|
||||
|
||||
//Labor stat augmentations
|
||||
var SpeechProcessor = new Augmentation({
|
||||
// Work stat augmentations
|
||||
const SpeechProcessor = new Augmentation({
|
||||
name:AugmentationNames.SpeechProcessor, repCost:3e3, moneyCost:10e6,
|
||||
info:"A cochlear implant with an embedded computer that analyzes incoming speech. " +
|
||||
"The embedded computer processes characteristics of incoming speech, such as tone " +
|
||||
@@ -325,7 +325,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(SpeechProcessor);
|
||||
|
||||
let TITN41Injection = new Augmentation({
|
||||
const TITN41Injection = new Augmentation({
|
||||
name:AugmentationNames.TITN41Injection, repCost:10e3, moneyCost:38e6,
|
||||
info:"TITN is a series of viruses that targets and alters the sequences of human DNA in genes that " +
|
||||
"control personality. The TITN-41 strain alters these genes so that the subject becomes more " +
|
||||
@@ -340,7 +340,7 @@ function initAugmentations() {
|
||||
}
|
||||
AddToAugmentations(TITN41Injection);
|
||||
|
||||
var EnhancedSocialInteractionImplant = new Augmentation({
|
||||
const EnhancedSocialInteractionImplant = new Augmentation({
|
||||
name:AugmentationNames.EnhancedSocialInteractionImplant, repCost:150e3, moneyCost:275e6,
|
||||
info:"A cranial implant that greatly assists in the user's ability to analyze social situations " +
|
||||
"and interactions. The system uses a wide variety of factors such as facial expression, body " +
|
||||
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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>" +
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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`,
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -317,6 +317,7 @@ export function purchaseHashUpgrade(upgName, upgTarget) {
|
||||
switch (upgName) {
|
||||
case "Sell for Money": {
|
||||
Player.gainMoney(upg.value);
|
||||
Player.recordMoneySource(upg.value, "hacknetnode");
|
||||
break;
|
||||
}
|
||||
case "Sell for Corporation Funds": {
|
||||
|
||||
@@ -15,7 +15,7 @@ export class GeneralInfo extends React.Component {
|
||||
`you hashes. Hashes can be spent on a variety of different upgrades.`;
|
||||
} else {
|
||||
return `Here, you can purchase a Hacknet Node, a specialized machine that can connect ` +
|
||||
`and contribute its resources to the Hacknet networ. This allows you to take ` +
|
||||
`and contribute its resources to the Hacknet network. This allows you to take ` +
|
||||
`a small percentage of profits from hacks performed on the network. Essentially, ` +
|
||||
`you are renting out your Node's computing power.`;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -69,10 +69,10 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
|
||||
const cost = this.getPurchaseCost();
|
||||
const purchaseBtnDisabled = !this.props.p.canAfford(cost);
|
||||
let purchaseBtnText;
|
||||
if (this.state.amt > maxMemory) {
|
||||
purchaseBtnText = `Memory cannot exceed 100`;
|
||||
} else if (isNaN(this.state.amt)) {
|
||||
if (isNaN(this.state.amt)) {
|
||||
purchaseBtnText = "Invalid value";
|
||||
} else if (this.state.amt > maxMemory) {
|
||||
purchaseBtnText = `Memory cannot exceed 100`;
|
||||
} else {
|
||||
purchaseBtnText = `Purchase ${this.state.amt} memory - ${numeralWrapper.formatMoney(cost)}`;
|
||||
}
|
||||
@@ -88,7 +88,7 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
|
||||
<label htmlFor={inputId}>
|
||||
Amount of memory to purchase (must be an integer):
|
||||
</label>
|
||||
<input id={inputId} onChange={this.changePurchaseAmount} type={"number"} value={this.state.amt} />
|
||||
<input id={inputId} onChange={this.changePurchaseAmount} type={"number"} value={isNaN(this.state.amt) ? this.state.amt.toString() : this.state.amt} />
|
||||
<br />
|
||||
<StdButton disabled={purchaseBtnDisabled} onClick={this.purchaseMemory} text={purchaseBtnText} />
|
||||
</div>
|
||||
|
||||
@@ -204,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) {
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
* Helper functions that implement "directory" functionality in the Terminal.
|
||||
* These aren't real directories, they're more of a pseudo-directory implementation
|
||||
*/
|
||||
import { HacknetServer } from "../Hacknet/HacknetServer";
|
||||
import { Server } from "../Server/Server";
|
||||
|
||||
/**
|
||||
* Removes leading forward slash ("/") from a string.
|
||||
@@ -115,7 +117,7 @@ export function isValidFilePath(path: string): boolean {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a formatter string for the first parent directory in a filepath. For example:
|
||||
* Returns a formatted string for the first parent directory in a filepath. For example:
|
||||
* /home/var/test/ -> home/
|
||||
* If there is no first parent directory, then it returns "/" for root
|
||||
*/
|
||||
@@ -124,12 +126,67 @@ export function getFirstParentDirectory(path: string): string {
|
||||
t_path = removeLeadingSlash(t_path);
|
||||
t_path = removeTrailingSlash(t_path);
|
||||
|
||||
if (t_path.lastIndexOf("/") === -1) { return "/"; }
|
||||
|
||||
let dirs = t_path.split("/");
|
||||
if (dirs.length === 0) { return "/"; }
|
||||
|
||||
return dirs[0] + "/";
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a filepath, returns a formatted string for all of the parent directories
|
||||
* in that filepath. For example:
|
||||
* /home/var/tes -> home/var/
|
||||
* /home/var/test/ -> home/var/test/
|
||||
* If there are no parent directories, it returns the empty string
|
||||
*/
|
||||
export function getAllParentDirectories(path: string): string {
|
||||
let t_path = path;
|
||||
const lastSlash = t_path.lastIndexOf("/");
|
||||
if (lastSlash === -1) { return ""; }
|
||||
|
||||
return t_path.slice(0, lastSlash + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a directory (by the full directory path) and a server, returns all
|
||||
* subdirectories of that directory. This is only for FIRST-LEVEl/immediate subdirectories
|
||||
*/
|
||||
export function getSubdirectories(serv: Server | HacknetServer, dir: string): string[] {
|
||||
const res: string[] = [];
|
||||
|
||||
if (!isValidDirectoryPath(dir)) { return res; }
|
||||
|
||||
let t_dir = dir;
|
||||
if (!t_dir.endsWith("/")) { t_dir += "/"; }
|
||||
|
||||
function processFile(fn: string) {
|
||||
if (t_dir === "/" && isInRootDirectory(fn)) {
|
||||
const subdir = getFirstParentDirectory(fn);
|
||||
if (subdir !== "/" && !res.includes(subdir)) {
|
||||
res.push(subdir);
|
||||
}
|
||||
} else if (fn.startsWith(t_dir)) {
|
||||
const remaining = fn.slice(t_dir.length);
|
||||
const subdir = getFirstParentDirectory(remaining);
|
||||
if (subdir !== "/" && !res.includes(subdir)) {
|
||||
res.push(subdir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const script of serv.scripts) {
|
||||
processFile(script.filename);
|
||||
}
|
||||
|
||||
for (const txt of serv.textFiles) {
|
||||
processFile(txt.fn);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a file path refers to a file in the root directory.
|
||||
*/
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
import {
|
||||
evaluateDirectoryPath,
|
||||
getAllParentDirectories,
|
||||
getSubdirectories,
|
||||
} from "./DirectoryHelpers";
|
||||
|
||||
import {
|
||||
Aliases,
|
||||
GlobalAliases
|
||||
@@ -44,12 +50,14 @@ const commands = [
|
||||
"top"
|
||||
];
|
||||
|
||||
export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: string, index: number=0): string[] {
|
||||
export function determineAllPossibilitiesForTabCompletion(p: IPlayer, input: string, index: number, currPath: string=""): string[] {
|
||||
let allPos: string[] = [];
|
||||
allPos = allPos.concat(Object.keys(GlobalAliases));
|
||||
const currServ = p.getCurrentServer();
|
||||
const homeComputer = p.getHomeComputer();
|
||||
input = input.toLowerCase();
|
||||
|
||||
let parentDirPath: string = "";
|
||||
let evaledParentDirPath: string | null = null;
|
||||
|
||||
// Helper functions
|
||||
function addAllCodingContracts() {
|
||||
@@ -82,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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user