Fixed typos and improved text in Tutorial and Interactive Tutorial

This commit is contained in:
Daniel Xie 2017-05-17 00:31:42 -05:00
parent 2823a1ffa1
commit 9e1c7191f5
4 changed files with 56 additions and 28 deletions

@ -35,10 +35,7 @@ Tasks TODO:
Private beta feedback Private beta feedback
I'd suggest putting a "Back" button in the tutorial I'd suggest putting a "Back" button in the tutorial
window, window,
Also not really a big deal, but I'm at 110% zoom on chrome and the tutorial window
covers some of the text
Now, only other suggestion before sleep would be to be able to buy multiple Hacknet upgrades in one click
6) - Maybe show total $ somewhere onscreen at all (or most) times. $/sec would also be good to know, depending on if you want the player to know that. Bottom of the menu on the left is an empty enough place to keep these. 6) - Maybe show total $ somewhere onscreen at all (or most) times. $/sec would also be good to know, depending on if you want the player to know that. Bottom of the menu on the left is an empty enough place to keep these.
CreateProgram affected by hacking skill

@ -14,6 +14,10 @@
color: white; color: white;
} }
#interactive-tutorial-container > strong {
background-color: #444;
}
#interactive-tutorial-text { #interactive-tutorial-text {
padding: 4px; padding: 4px;
margin: 4px; margin: 4px;

@ -155,9 +155,9 @@ CONSTANTS = {
"and you can purchase additional servers as you progress through the game. Connecting to other servers " + "and you can purchase additional servers as you progress through the game. Connecting to other servers " +
"and hacking them can be a major source of income and experience. Servers can also be used to run " + "and hacking them can be a major source of income and experience. Servers can also be used to run " +
"scripts which can automatically hack servers for you. <br><br>" + "scripts which can automatically hack servers for you. <br><br>" +
"In order to navigate between machines, use the 'scan' or 'netstat' commands to see all servers " + "In order to navigate between machines, use the 'scan' command to see all servers " +
"that are reachable from your current server. Then, you can use the 'connect [hostname/ip]' or " + "that are reachable from your current server. Then, you can use the 'connect [hostname/ip]' " +
"'telnet [hostname/ip]' commands to connect to one of the available machines. <br><br>" + "command to connect to one of the available machines. <br><br>" +
"The 'hostname' and 'ifconfig' commands can be used to display the hostname/IP of the " + "The 'hostname' and 'ifconfig' commands can be used to display the hostname/IP of the " +
"server you are currently connected to.", "server you are currently connected to.",
@ -168,7 +168,7 @@ CONSTANTS = {
"The key to hacking a server is to gain root access to that server. This can be done using " + "The key to hacking a server is to gain root access to that server. This can be done using " +
"the NUKE virus (NUKE.exe). You start the game with a copy of the NUKE virus on your home " + "the NUKE virus (NUKE.exe). You start the game with a copy of the NUKE virus on your home " +
"computer. The NUKE virus attacks the target server's open ports using buffer overflow " + "computer. The NUKE virus attacks the target server's open ports using buffer overflow " +
"exploits. When successful, you are granted root administrative access to the machine. <br>" + "exploits. When successful, you are granted root administrative access to the machine. <br><br>" +
"Typically, in order for the NUKE virus to succeed, the target server needs to have at least " + "Typically, in order for the NUKE virus to succeed, the target server needs to have at least " +
"one of its ports opened. Some servers have no security and will not need any ports opened. Some " + "one of its ports opened. Some servers have no security and will not need any ports opened. Some " +
"will have very high security and will need many ports opened. In order to open ports on another " + "will have very high security and will need many ports opened. In order to open ports on another " +
@ -212,12 +212,12 @@ CONSTANTS = {
"whenever you reload or re-open the game all of the scripts that you are running will " + "whenever you reload or re-open the game all of the scripts that you are running will " +
"start running from the BEGINNING of the code. The game does not keep track of where exactly " + "start running from the BEGINNING of the code. The game does not keep track of where exactly " +
"the execution of a script is when it saves/loads. </strong><br><br>", "the execution of a script is when it saves/loads. </strong><br><br>",
TutorialNetscriptText: "Netscript is a very simple programming language implemented for this game. The language has " + TutorialNetscriptText: "Netscript is a programming language implemented for this game. The language has " +
"your basic programming constructs and several built-in commands that are used to hack. <br><br>" + "your basic programming constructs and several built-in commands that are used to hack. <br><br>" +
"<u><h1> Variables and data types </h1></u><br>" + "<u><h1> Variables and data types </h1></u><br>" +
"The following data types are supported by Netscript: <br>" + "The following data types are supported by Netscript: <br>" +
"numeric - Integers and floats (6, 10.4999)<br>" + "numeric - Integers and floats (eg. 6, 10.4999)<br>" +
"string - Encapsulated by single or double quotes ('this is a string')<br>" + "string - Encapsulated by single or double quotes (eg. 'this is a string')<br>" +
"boolean - true or false<br><br>" + "boolean - true or false<br><br>" +
"To create a variable, use the assign (=) operator. The language is not strongly typed. Examples: <br>" + "To create a variable, use the assign (=) operator. The language is not strongly typed. Examples: <br>" +
"i = 5;<br>" + "i = 5;<br>" +
@ -244,12 +244,14 @@ CONSTANTS = {
"You can NOT define you own functions in Netscript (yet), but there are several built in functions that " + "You can NOT define you own functions in Netscript (yet), but there are several built in functions that " +
"you may use: <br><br> " + "you may use: <br><br> " +
"<i>hack(hostname/ip)</i><br>Core function that is used to try and hack servers to steal money and gain hacking experience. The argument passed in must be a string with " + "<i>hack(hostname/ip)</i><br>Core function that is used to try and hack servers to steal money and gain hacking experience. The argument passed in must be a string with " +
"either the IP or hostname of the server you want to hack. Attempting to hack a server takes time. This time is dependent on your hacking skill and the server's " + "either the IP or hostname of the server you want to hack. A script can hack a server from anywhere. It does not need to be running on the same server to hack that server. " +
"security level. <br>Examples: hack('foodnstuff'); or hack('148.192.0.12');<br><br>" + "For example, you can create a script that hacks the 'foodnstuff' server and run it on your home computer. <br>" +
"Examples: hack('foodnstuff'); or hack('148.192.0.12');<br><br>" +
"<i>sleep(n)</i><br>Suspends the script for n milliseconds. <br>Example: sleep(5000);<br><br>" + "<i>sleep(n)</i><br>Suspends the script for n milliseconds. <br>Example: sleep(5000);<br><br>" +
"<i>grow(hostname/ip)</i><br>Use your hacking skills to increase the amount of money available on a server. The argument passed in " + "<i>grow(hostname/ip)</i><br>Use your hacking skills to increase the amount of money available on a server. The argument passed in " +
"must be a string with either the IP or hostname of the target server. The grow() command takes a flat 2 minutes to execute " + "must be a string with either the IP or hostname of the target server. The grow() command requires root access to the target server, but " +
"and grants 1 hacking exp when complete. <br> Example: grow('foodnstuff');<br><br>" + "there is no required hacking level to run the command. The grow() command takes a flat 2 minutes to execute " +
"and grants 1 hacking exp when it completes. <br> Example: grow('foodnstuff');<br><br>" +
"<i>print(x)</i> <br> Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command )<br><br>" + "<i>print(x)</i> <br> Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command )<br><br>" +
"<i>nuke(hostname/ip)</i><br>Run NUKE.exe on the target server. NUKE.exe must exist on your home computer. <br> Example: nuke('foodnstuff'); <br><br>" + "<i>nuke(hostname/ip)</i><br>Run NUKE.exe on the target server. NUKE.exe must exist on your home computer. <br> Example: nuke('foodnstuff'); <br><br>" +
"<i>brutessh(hostname/ip)</i><br>Run BruteSSH.exe on the target server. BruteSSH.exe must exist on your home computer <br> Example: brutessh('foodnstuff');<br><br>" + "<i>brutessh(hostname/ip)</i><br>Run BruteSSH.exe on the target server. BruteSSH.exe must exist on your home computer <br> Example: brutessh('foodnstuff');<br><br>" +
@ -312,7 +314,7 @@ CONSTANTS = {
"different companies which you can work for. By working for a company you can earn money, " + "different companies which you can work for. By working for a company you can earn money, " +
"train your various labor skills, and unlock powerful passive perks. <br><br> " + "train your various labor skills, and unlock powerful passive perks. <br><br> " +
"To apply for a job, visit the company you want to work for through the 'World' menu. The company " + "To apply for a job, visit the company you want to work for through the 'World' menu. The company " +
"page will have options that let you apply to positions in the company. There might be several different" + "page will have options that let you apply to positions in the company. There might be several different " +
"positions you can apply for, ranging from software engineer to business analyst to security officer. <br><br> " + "positions you can apply for, ranging from software engineer to business analyst to security officer. <br><br> " +
"When you apply for a job, you will get the offer if your stats are high enough. Your first position at " + "When you apply for a job, you will get the offer if your stats are high enough. Your first position at " +
"a company will be an entry-level position such as 'intern'. Once you get the job, an button will appear on " + "a company will be an entry-level position such as 'intern'. Once you get the job, an button will appear on " +
@ -340,7 +342,7 @@ CONSTANTS = {
"information about the Faction and also lets you perform work for the faction. " + "information about the Faction and also lets you perform work for the faction. " +
"Working for a Faction is similar to working for a company except that you don't get paid a salary. " + "Working for a Faction is similar to working for a company except that you don't get paid a salary. " +
"You will only earn reputation in your Faction and train your stats. Also, cancelling work early " + "You will only earn reputation in your Faction and train your stats. Also, cancelling work early " +
"when working for a Faction does NOT result in reduced experience/reputation earnings. <br>" + "when working for a Faction does NOT result in reduced experience/reputation earnings. <br><br>" +
"Earning reputation for a Faction unlocks powerful Augmentations. Purchasing and installing these Augmentations will " + "Earning reputation for a Faction unlocks powerful Augmentations. Purchasing and installing these Augmentations will " +
"upgrade your abilities. The Augmentations that are available to unlock vary from faction to faction.", "upgrade your abilities. The Augmentations that are available to unlock vary from faction to faction.",
TutorialAugmentationsText: "Advances in science and medicine have lead to powerful new technologies that allow people to augment themselves " + TutorialAugmentationsText: "Advances in science and medicine have lead to powerful new technologies that allow people to augment themselves " +

@ -12,6 +12,7 @@ iTutorialSteps = {
TerminalAnalyze: "Use the analyze command to display details about this server", TerminalAnalyze: "Use the analyze command to display details about this server",
TerminalNuke: "Use the NUKE Program to gain root access to a server", TerminalNuke: "Use the NUKE Program to gain root access to a server",
TerminalManualHack: "Use the hack command to manually hack a server", TerminalManualHack: "Use the hack command to manually hack a server",
TerminalHackingMechanics: "Briefly explain hacking mechanics",
TerminalCreateScript: "Create a script using nano", TerminalCreateScript: "Create a script using nano",
TerminalTypeScript: "This occurs in the Script Editor page...type the script then save and close", TerminalTypeScript: "This occurs in the Script Editor page...type the script then save and close",
TerminalFree: "Use the free command to check RAM", TerminalFree: "Use the free command to check RAM",
@ -155,7 +156,7 @@ function iTutorialEvaluateStep() {
//next step triggered by terminal command //next step triggered by terminal command
break; break;
case iTutorialSteps.TerminalConnect: case iTutorialSteps.TerminalConnect:
iTutorialSetText("The 'scan/netstat' command shows all available network connections. In other words, " + iTutorialSetText("The 'scan' command shows all available network connections. In other words, " +
"it displays a list of all servers that can be connected to from your " + "it displays a list of all servers that can be connected to from your " +
"current machine. A server is identified by either its IP or its hostname. <br><br> " + "current machine. A server is identified by either its IP or its hostname. <br><br> " +
"To connect to a machine, use the 'connect [ip/hostname]' command. You can type in " + "To connect to a machine, use the 'connect [ip/hostname]' command. You can type in " +
@ -187,24 +188,40 @@ function iTutorialEvaluateStep() {
"Try doing that now. "); "Try doing that now. ");
//next step triggered by terminal command //next step triggered by terminal command
break; break;
case iTutorialSteps.TerminalCreateScript: case iTutorialSteps.TerminalHackingMechanics:
iTutorialSetText("You are now attempting to hack the server. Note that performing a hack takes time and " + iTutorialSetText("You are now attempting to hack the server. Note that performing a hack takes time and " +
"only has a certain percentage chance " + "only has a certain percentage chance " +
"of success. This time and percentage is determined by a variety of factors, including " + "of success. This time and success chance is determined by a variety of factors, including " +
"your hacking skill and the server's security level. <br><br>" + "your hacking skill and the server's security level. <br><br>" +
"Hacking is the core mechanic of the game and is necessary for progressing. However, " + "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. <br><br> 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.<br>");
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "inline-block";
next.addEventListener("click", function() {
iTutorialNextStep();
return false;
});
break;
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 " + "you don't want to be hacking manually the entire time. You can automate your hacking " +
"by writing scripts! <br><br>To create a new script or edit an existing one, you can use the 'nano' " + "by writing scripts! <br><br>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 " + "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" + "entering 'nano foodnstuff.script' after the hack command finishes running (Sidenote: Pressing ctrl + c" +
" will end a command like hack early)"); " will end a command like hack early)");
var next = clearEventListeners("interactive-tutorial-next");
next.style.display = "none";
//next step triggered by terminal command //next step triggered by terminal command
break; break;
case iTutorialSteps.TerminalTypeScript: case iTutorialSteps.TerminalTypeScript:
iTutorialSetText("This is the script editor. You can use it to program your scripts. Scripts are " + iTutorialSetText("This is the script editor. You can use it to program your scripts. Scripts are " +
"written in the Netscript language, a very simple programming language created for " + "written in the Netscript language, a programming language created for " +
"this game. There are details about the Netscript language in the documentation, which " + "this game. <strong style='background-color:#444;'>There are details about the Netscript language in the documentation, which " +
"can be accessed in the 'Tutorial' tab on the main navigation menu. For now, just copy " + "can be accessed in the 'Tutorial' tab on the main navigation menu. I highly suggest you check " +
"it out after this tutorial. </strong> For now, just copy " +
"and paste the following code into the script editor: <br><br>" + "and paste the following code into the script editor: <br><br>" +
"while(true) { <br>" + "while(true) { <br>" +
"hack('foodnstuff'); <br>" + "hack('foodnstuff'); <br>" +
@ -230,7 +247,7 @@ function iTutorialEvaluateStep() {
iTutorialSetText("Your script is now running! The script might take a few seconds to 'fully start up'. " + iTutorialSetText("Your script is now running! The script might take a few seconds to 'fully start up'. " +
"Your scripts will continuously run in the background and will automatically stop if " + "Your scripts will continuously run in the background and will automatically stop if " +
"the code ever completes (the 'foodnstuff.script' will never complete because it " + "the code ever completes (the 'foodnstuff.script' will never complete because it " +
"runs an infinite loop). <br><br>These scripts will passively earn you income and hacking experience. " + "runs an infinite loop). <br><br>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 " + "Your scripts will also earn money and experience while you are offline, although at a " +
"much slower rate. <br><br> " + "much slower rate. <br><br> " +
"Let's check out some statistics of our active, running scripts by clicking the " + "Let's check out some statistics of our active, running scripts by clicking the " +
@ -300,7 +317,7 @@ function iTutorialEvaluateStep() {
//Next step triggered by purchaseHacknet() (HacknetNode.js) //Next step triggered by purchaseHacknet() (HacknetNode.js)
break; break;
case iTutorialSteps.HacknetNodesGoToWorldPage: case iTutorialSteps.HacknetNodesGoToWorldPage:
iTutorialSetText("You just purchase a Hacknet Node! This Hacknet Node will passively " + 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 " + "earn you money over time, both online and offline. When you get enough " +
" money, you can upgrade " + " money, you can upgrade " +
"your newly-purchased Hacknet Node below. <br><br>" + "your newly-purchased Hacknet Node below. <br><br>" +
@ -405,6 +422,10 @@ function iTutorialNextStep() {
iTutorialEvaluateStep(); iTutorialEvaluateStep();
break; break;
case iTutorialSteps.TerminalManualHack: case iTutorialSteps.TerminalManualHack:
currITutorialStep = iTutorialSteps.TerminalHackingMechanics;
iTutorialEvaluateStep();
break;
case iTutorialSteps.TerminalHackingMechanics:
currITutorialStep = iTutorialSteps.TerminalCreateScript; currITutorialStep = iTutorialSteps.TerminalCreateScript;
iTutorialEvaluateStep(); iTutorialEvaluateStep();
break; break;
@ -523,6 +544,10 @@ function iTutorialPrevStep() {
currITutorialStep = iTutorialSteps.TerminalNuke; currITutorialStep = iTutorialSteps.TerminalNuke;
iTutorialEvaluateStep(); iTutorialEvaluateStep();
break; break;
case iTutorialSteps.TerminalHackingMechanics:
currITutorialStep = iTutorialSteps.TerminalManualHack;
iTutorialEvaluateStep();
break;
case iTutorialSteps.TerminalCreateScript: case iTutorialSteps.TerminalCreateScript:
currITutorialStep = iTutorialSteps.TerminalManualHack; currITutorialStep = iTutorialSteps.TerminalManualHack;
iTutorialEvaluateStep(); iTutorialEvaluateStep();