diff --git a/dist/bundle.js b/dist/bundle.js
index c38c6d15a..85e1f27bc 100644
--- a/dist/bundle.js
+++ b/dist/bundle.js
@@ -2454,7 +2454,7 @@ function dialogBoxCreate(txt) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CONSTANTS; });
let CONSTANTS = {
- Version: "0.28.1",
+ Version: "0.28.2",
//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
@@ -2851,7 +2851,7 @@ let CONSTANTS = {
"there is no required hacking level to run the command. Returns " +
"0.1. Works offline at a slower rate
Example: weaken('foodnstuff');
" +
"print(x)
Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command ).
" +
- "tprint(x)
Prints a value or a variable to the Terminal
" +
+ "tprint(x)
Prints a value or a variable to the Terminal
" +
"clearLog()
Clears the script's logs.
" +
"scan(hostname/ip)
Returns an array containing the hostnames of all servers that are one node away from the specified server. " +
"The argument must be a string containing the IP or hostname of the target server. The hostnames in the returned array are strings.
" +
@@ -3314,6 +3314,12 @@ let CONSTANTS = {
"World Stock Exchange account and TIX API Access
",
LatestUpdate:
+ "v0.28.2
" +
+ "-Added a few script editor configuration options. Includes key bindings, themes, etc.
" +
+ "-Certain menu options will now be hidden until their relevant gameplay is unlocked. This " +
+ "really only affects new players
" +
+ "-Most unrecognized or un-implemented syntax errors in a script will now include line number in error message
" +
+ "-Various bug fixes
" +
"v0.28.1
" +
"-The script editor now uses the open-source Ace editor, which provides a much better experience when coding!
" +
"-Added tprint() Netscript function
" +
@@ -25745,7 +25751,7 @@ function iTutorialEvaluateStep() {
iTutorialSetText("Welcome to Bitburner, a cyberpunk-themed incremental RPG! " +
"The game takes place in a dark, dystopian future...The year is 2077...
" +
- "This tutorial will show you the basics of the game to help you get started. " +
+ "This tutorial will show you the basics of the game. " +
"You may skip the tutorial at any time.");
var next = Object(__WEBPACK_IMPORTED_MODULE_2__utils_HelperFunctions_js__["b" /* clearEventListeners */])("interactive-tutorial-next");
next.style.display = "inline-block";
@@ -25786,7 +25792,7 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.CharacterGoToTerminalPage:
iTutorialSetText("Let's head to your computer's terminal by clicking the 'Terminal' tab on the " +
- "main navigation menu");
+ "main navigation menu.");
//No next button
var next = Object(__WEBPACK_IMPORTED_MODULE_2__utils_HelperFunctions_js__["b" /* clearEventListeners */])("interactive-tutorial-next");
next.style.display = "none";
@@ -25804,8 +25810,7 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.TerminalIntro:
iTutorialSetText("The Terminal is used to interface with your home computer as well as " +
- "all of the other machines around the world. A lot of content in the game is " +
- "accessible only through the Terminal, and is necessary for progressing. ");
+ "all of the other machines around the world.");
var next = Object(__WEBPACK_IMPORTED_MODULE_2__utils_HelperFunctions_js__["b" /* clearEventListeners */])("interactive-tutorial-next");
next.style.display = "inline-block";
next.addEventListener("click", function() {
@@ -25821,14 +25826,14 @@ function iTutorialEvaluateStep() {
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalLs:
- iTutorialSetText("The 'help' command displays a list of all available commands, how to use them, " +
+ iTutorialSetText("The 'help' command displays a list of all available Terminal commands, how to use them, " +
"and a description of what they do.
Let's try another command. Enter the 'ls' command");
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalScan:
iTutorialSetText("'ls' is a basic command that shows all of the contents (programs/scripts) " +
"on the computer. Right now, it shows that you have a program called 'NUKE.exe' on your computer. " +
- "We'll get to what this does later.
Through your home computer's terminal, you can connect " +
+ "We'll get to what this does later.
Using your home computer's terminal, you can connect " +
"to other machines throughout the world. Let's do that now by first entering " +
"the 'scan' command. ");
//next step triggered by terminal command
@@ -25869,7 +25874,7 @@ function iTutorialEvaluateStep() {
case iTutorialSteps.TerminalNuke:
iTutorialSetText("When the 'analyze' command finishes running it will show useful information " +
"about hacking the server.
For this server, the required hacking skill is only 1, " +
- "which means you are able to hack it right now. However, in order to hack a server " +
+ "which means you can hack it right now. However, in order to hack a server " +
"you must first gain root access. The 'NUKE.exe' program that we saw earlier on your " +
"home computer is a virus that will grant you root access to a machine if there are enough " +
"open ports.
The 'analyze' results shows that there do not need to be any open ports " +
@@ -25879,19 +25884,19 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.TerminalManualHack:
iTutorialSetText("You now have root access! You can hack the server using the 'hack' command. " +
- "Try doing that now. ");
+ "Try doing that now.");
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalHackingMechanics:
iTutorialSetText("You are now attempting to hack the server. Note that performing a hack takes time and " +
"only has a certain percentage chance " +
"of success. This time and success chance is determined by a variety of factors, including " +
- "your hacking skill and the server's security level.
" +
+ "your hacking skill and the server's security level.
" +
"If your attempt to hack the server is successful, you will steal a certain percentage " +
"of the server's total money. This percentage is affected by your hacking skill and " +
- "the server's security level.
The amount of money on a server is not limitless. So, if " +
+ "the server's security level.
The amount of money on a server is not limitless. So, if " +
"you constantly hack a server and deplete its money, then you will encounter " +
- "diminishing returns in your hacking.
");
+ "diminishing returns in your hacking.");
var next = Object(__WEBPACK_IMPORTED_MODULE_2__utils_HelperFunctions_js__["b" /* clearEventListeners */])("interactive-tutorial-next");
next.style.display = "inline-block";
next.addEventListener("click", function() {
@@ -25902,7 +25907,7 @@ function iTutorialEvaluateStep() {
case iTutorialSteps.TerminalCreateScript:
iTutorialSetText("Hacking is the core mechanic of the game and is necessary for progressing. However, " +
"you don't want to be hacking manually the entire time. You can automate your hacking " +
- "by writing scripts!
To create a new script or edit an existing one, you can use the 'nano' " +
+ "by writing scripts!
To create a new script or edit an existing one, you can use the 'nano' " +
"command. Scripts must end with the '.script' extension. Let's make a script now by " +
"entering 'nano foodnstuff.script' after the hack command finishes running (Sidenote: Pressing ctrl + c" +
" will end a command like hack early)");
@@ -25921,14 +25926,14 @@ function iTutorialEvaluateStep() {
" hack('foodnstuff');
" +
"}
" +
"For anyone with basic programming experience, this code should be straightforward. " +
- "This script will continuously hack the 'foodnstuff' server.
" +
+ "This script will continuously hack the 'foodnstuff' server.
" +
"To save and close the script editor, press the button in the bottom left, or press ctrl + b.");
//next step triggered in saveAndCloseScriptEditor() (Script.js)
break;
case iTutorialSteps.TerminalFree:
iTutorialSetText("Now we'll run the script. Scripts require a certain amount of RAM to run, and can be " +
"run on any machine which you have root access to. Different servers have different " +
- "amounts of RAM. You can also purchase more RAM for your home server.
To check how much " +
+ "amounts of RAM. You can also purchase more RAM for your home server.
To check how much " +
"RAM is available on this machine, enter the 'free' command.");
//next step triggered by terminal commmand
break;
@@ -25944,8 +25949,8 @@ function iTutorialEvaluateStep() {
"runs an infinite loop).
These scripts can passively earn you income and hacking experience. " +
"Your scripts will also earn money and experience while you are offline, although at a " +
"much slower rate.
" +
- "Let's check out some statistics of our active, running scripts by clicking the " +
- "'Active Scripts' link in the main navigation menu. ");
+ "Let's check out some statistics for our running scripts by clicking the " +
+ "'Active Scripts' link in the main navigation menu.");
document.getElementById("active-scripts-menu-link").setAttribute("class", "flashing-button");
var activeScriptsMainMenuButton = document.getElementById("active-scripts-menu-link");
activeScriptsMainMenuButton.addEventListener("click", function() {
@@ -26014,7 +26019,7 @@ function iTutorialEvaluateStep() {
iTutorialSetText("You just purchased a Hacknet Node! This Hacknet Node will passively " +
"earn you money over time, both online and offline. When you get enough " +
" money, you can upgrade " +
- "your newly-purchased Hacknet Node below.
" +
+ "your newly-purchased Hacknet Node below.
" +
"Let's go to the 'City' page through the main navigation menu.");
document.getElementById("city-menu-link").setAttribute("class", "flashing-button");
var worldButton = Object(__WEBPACK_IMPORTED_MODULE_2__utils_HelperFunctions_js__["b" /* clearEventListeners */])("city-menu-link");
diff --git a/src/Constants.js b/src/Constants.js
index d78348273..a07ede7e9 100644
--- a/src/Constants.js
+++ b/src/Constants.js
@@ -1,5 +1,5 @@
let CONSTANTS = {
- Version: "0.28.1",
+ Version: "0.28.2",
//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
@@ -396,7 +396,7 @@ let CONSTANTS = {
"there is no required hacking level to run the command. Returns " +
"0.1. Works offline at a slower rate
Example: weaken('foodnstuff');
" +
"print(x)
Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command ).
" +
- "tprint(x)
Prints a value or a variable to the Terminal
" +
+ "tprint(x)
Prints a value or a variable to the Terminal
" +
"clearLog()
Clears the script's logs.
" +
"scan(hostname/ip)
Returns an array containing the hostnames of all servers that are one node away from the specified server. " +
"The argument must be a string containing the IP or hostname of the target server. The hostnames in the returned array are strings.
" +
@@ -859,6 +859,12 @@ let CONSTANTS = {
"World Stock Exchange account and TIX API Access
",
LatestUpdate:
+ "v0.28.2
" +
+ "-Added a few script editor configuration options. Includes key bindings, themes, etc.
" +
+ "-Certain menu options will now be hidden until their relevant gameplay is unlocked. This " +
+ "really only affects new players
" +
+ "-Most unrecognized or un-implemented syntax errors in a script will now include line number in error message
" +
+ "-Various bug fixes
" +
"v0.28.1
" +
"-The script editor now uses the open-source Ace editor, which provides a much better experience when coding!
" +
"-Added tprint() Netscript function
" +
diff --git a/src/InteractiveTutorial.js b/src/InteractiveTutorial.js
index 665f560d6..3bbd431ad 100644
--- a/src/InteractiveTutorial.js
+++ b/src/InteractiveTutorial.js
@@ -73,7 +73,7 @@ function iTutorialEvaluateStep() {
iTutorialSetText("Welcome to Bitburner, a cyberpunk-themed incremental RPG! " +
"The game takes place in a dark, dystopian future...The year is 2077...
" +
- "This tutorial will show you the basics of the game to help you get started. " +
+ "This tutorial will show you the basics of the game. " +
"You may skip the tutorial at any time.");
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "inline-block";
@@ -114,7 +114,7 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.CharacterGoToTerminalPage:
iTutorialSetText("Let's head to your computer's terminal by clicking the 'Terminal' tab on the " +
- "main navigation menu");
+ "main navigation menu.");
//No next button
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "none";
@@ -132,8 +132,7 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.TerminalIntro:
iTutorialSetText("The Terminal is used to interface with your home computer as well as " +
- "all of the other machines around the world. A lot of content in the game is " +
- "accessible only through the Terminal, and is necessary for progressing. ");
+ "all of the other machines around the world.");
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "inline-block";
next.addEventListener("click", function() {
@@ -149,14 +148,14 @@ function iTutorialEvaluateStep() {
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalLs:
- iTutorialSetText("The 'help' command displays a list of all available commands, how to use them, " +
+ iTutorialSetText("The 'help' command displays a list of all available Terminal commands, how to use them, " +
"and a description of what they do.
Let's try another command. Enter the 'ls' command");
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalScan:
iTutorialSetText("'ls' is a basic command that shows all of the contents (programs/scripts) " +
"on the computer. Right now, it shows that you have a program called 'NUKE.exe' on your computer. " +
- "We'll get to what this does later.
Through your home computer's terminal, you can connect " +
+ "We'll get to what this does later.
Using your home computer's terminal, you can connect " +
"to other machines throughout the world. Let's do that now by first entering " +
"the 'scan' command. ");
//next step triggered by terminal command
@@ -197,7 +196,7 @@ function iTutorialEvaluateStep() {
case iTutorialSteps.TerminalNuke:
iTutorialSetText("When the 'analyze' command finishes running it will show useful information " +
"about hacking the server.
For this server, the required hacking skill is only 1, " +
- "which means you are able to hack it right now. However, in order to hack a server " +
+ "which means you can hack it right now. However, in order to hack a server " +
"you must first gain root access. The 'NUKE.exe' program that we saw earlier on your " +
"home computer is a virus that will grant you root access to a machine if there are enough " +
"open ports.
The 'analyze' results shows that there do not need to be any open ports " +
@@ -207,19 +206,19 @@ function iTutorialEvaluateStep() {
break;
case iTutorialSteps.TerminalManualHack:
iTutorialSetText("You now have root access! You can hack the server using the 'hack' command. " +
- "Try doing that now. ");
+ "Try doing that now.");
//next step triggered by terminal command
break;
case iTutorialSteps.TerminalHackingMechanics:
iTutorialSetText("You are now attempting to hack the server. Note that performing a hack takes time and " +
"only has a certain percentage chance " +
"of success. This time and success chance is determined by a variety of factors, including " +
- "your hacking skill and the server's security level.
" +
+ "your hacking skill and the server's security level.
" +
"If your attempt to hack the server is successful, you will steal a certain percentage " +
"of the server's total money. This percentage is affected by your hacking skill and " +
- "the server's security level.
The amount of money on a server is not limitless. So, if " +
+ "the server's security level.
The amount of money on a server is not limitless. So, if " +
"you constantly hack a server and deplete its money, then you will encounter " +
- "diminishing returns in your hacking.
");
+ "diminishing returns in your hacking.");
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "inline-block";
next.addEventListener("click", function() {
@@ -230,7 +229,7 @@ function iTutorialEvaluateStep() {
case iTutorialSteps.TerminalCreateScript:
iTutorialSetText("Hacking is the core mechanic of the game and is necessary for progressing. However, " +
"you don't want to be hacking manually the entire time. You can automate your hacking " +
- "by writing scripts!
To create a new script or edit an existing one, you can use the 'nano' " +
+ "by writing scripts!
To create a new script or edit an existing one, you can use the 'nano' " +
"command. Scripts must end with the '.script' extension. Let's make a script now by " +
"entering 'nano foodnstuff.script' after the hack command finishes running (Sidenote: Pressing ctrl + c" +
" will end a command like hack early)");
@@ -249,14 +248,14 @@ function iTutorialEvaluateStep() {
" hack('foodnstuff');
" +
"}
" +
"For anyone with basic programming experience, this code should be straightforward. " +
- "This script will continuously hack the 'foodnstuff' server.
" +
+ "This script will continuously hack the 'foodnstuff' server.
" +
"To save and close the script editor, press the button in the bottom left, or press ctrl + b.");
//next step triggered in saveAndCloseScriptEditor() (Script.js)
break;
case iTutorialSteps.TerminalFree:
iTutorialSetText("Now we'll run the script. Scripts require a certain amount of RAM to run, and can be " +
"run on any machine which you have root access to. Different servers have different " +
- "amounts of RAM. You can also purchase more RAM for your home server.
To check how much " +
+ "amounts of RAM. You can also purchase more RAM for your home server.
To check how much " +
"RAM is available on this machine, enter the 'free' command.");
//next step triggered by terminal commmand
break;
@@ -272,8 +271,8 @@ function iTutorialEvaluateStep() {
"runs an infinite loop).
These scripts can passively earn you income and hacking experience. " +
"Your scripts will also earn money and experience while you are offline, although at a " +
"much slower rate.
" +
- "Let's check out some statistics of our active, running scripts by clicking the " +
- "'Active Scripts' link in the main navigation menu. ");
+ "Let's check out some statistics for our running scripts by clicking the " +
+ "'Active Scripts' link in the main navigation menu.");
document.getElementById("active-scripts-menu-link").setAttribute("class", "flashing-button");
var activeScriptsMainMenuButton = document.getElementById("active-scripts-menu-link");
activeScriptsMainMenuButton.addEventListener("click", function() {
@@ -342,7 +341,7 @@ function iTutorialEvaluateStep() {
iTutorialSetText("You just purchased a Hacknet Node! This Hacknet Node will passively " +
"earn you money over time, both online and offline. When you get enough " +
" money, you can upgrade " +
- "your newly-purchased Hacknet Node below.
" +
+ "your newly-purchased Hacknet Node below.
" +
"Let's go to the 'City' page through the main navigation menu.");
document.getElementById("city-menu-link").setAttribute("class", "flashing-button");
var worldButton = clearEventListeners("city-menu-link");