diff --git a/index.html b/index.html
index bb0c59e07..6b5708cec 100644
--- a/index.html
+++ b/index.html
@@ -468,9 +468,11 @@
Study Computer Science (free)
- Take Data Structures Class
- Take Networks Class
- Take Algorithms Class
+ Take Data Structures course
+ Take Networks course
+ Take Algorithms course
+ Take Management course
+ Take Leadership course
Purchase 1GB Server - $50,000
diff --git a/src/Constants.js b/src/Constants.js
index 231b4adb6..4758512fb 100644
--- a/src/Constants.js
+++ b/src/Constants.js
@@ -52,6 +52,8 @@ CONSTANTS = {
ClassDataStructures: "taking a Data Structures course",
ClassNetworks: "taking a Networks course",
ClassAlgorithms: "taking an Algorithms course",
+ ClassManagement: "taking a Management course",
+ ClassLeadership: "taking a Leadership course",
//Text that is displayed when the 'help' command is ran in Terminal
HelpText: "analyze Get statistics and information about current machine
" +
diff --git a/src/Location.js b/src/Location.js
index 95b001ea0..45a6d0ff5 100644
--- a/src/Location.js
+++ b/src/Location.js
@@ -111,6 +111,8 @@ displayLocationContent = function() {
var classDataStructures = document.getElementById("location-data-structures-class");
var classNetworks = document.getElementById("location-networks-class");
var classAlgorithms = document.getElementById("location-algorithms-class");
+ var classManagement = document.getElementById("location-management-class");
+ var classLeadership = document.getElementById("location-leadership-class");
var purchase1gb = document.getElementById("location-purchase-1gb");
var purchase2gb = document.getElementById("location-purchase-2gb");
@@ -175,6 +177,8 @@ displayLocationContent = function() {
classDataStructures.style.display = "none";
classNetworks.style.display = "none";
classAlgorithms.style.display = "none";
+ classManagement.style.display = "none";
+ classLeadership.style.display = "none";
purchase1gb.style.display = "none";
purchase2gb.style.display = "none";
@@ -250,35 +254,7 @@ displayLocationContent = function() {
var costMult = 3;
var expMult = 2;
displayUniversityLocationContent(costMult);
-
- var newStudyCS = studyComputerScience.cloneNode(true);
- studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience)
- newStudyCS.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience);
- return false;
- });
-
- var newClassDataStructures = classDataStructures.cloneNode(true);
- classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures);
- newClassDataStructures.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures);
- return false;
- });
-
- var newClassNetworks = classNetworks.cloneNode(true);
- classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks);
- newClassNetworks.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks);
- return false;
- });
-
- var newClassAlgorithms = classAlgorithms.cloneNode(true);
- classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms);
- newClassAlgorithms.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms);
- return false;
- });
-
+ setUniversityLocationButtons(costMult, expMult);
break;
case Locations.AevumECorp:
@@ -455,35 +431,8 @@ displayLocationContent = function() {
case Locations.Sector12RothmanUniversity:
var costMult = 2;
var expMult = 1;
- displayUniversityLocationContent(costMult);
-
- var newStudyCS = studyComputerScience.cloneNode(true);
- studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience)
- newStudyCS.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience);
- return false;
- });
-
- var newClassDataStructures = classDataStructures.cloneNode(true);
- classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures);
- newClassDataStructures.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures);
- return false;
- });
-
- var newClassNetworks = classNetworks.cloneNode(true);
- classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks);
- newClassNetworks.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks);
- return false;
- });
-
- var newClassAlgorithms = classAlgorithms.cloneNode(true);
- classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms);
- newClassAlgorithms.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms);
- return false;
- });
+ displayUniversityLocationContent(costMult);
+ setUniversityLocationButtons(costMult, expMult);
break;
case Locations.Sector12MegaCorp:
@@ -731,35 +680,8 @@ displayLocationContent = function() {
case Locations.VolhavenZBInstituteOfTechnology:
var costMult = 4;
var expMult = 3;
- displayUniversityLocationContent(costMult);
-
- var newStudyCS = studyComputerScience.cloneNode(true);
- studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience)
- newStudyCS.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience);
- return false;
- });
-
- var newClassDataStructures = classDataStructures.cloneNode(true);
- classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures);
- newClassDataStructures.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures);
- return false;
- });
-
- var newClassNetworks = classNetworks.cloneNode(true);
- classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks);
- newClassNetworks.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks);
- return false;
- });
-
- var newClassAlgorithms = classAlgorithms.cloneNode(true);
- classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms);
- newClassAlgorithms.addEventListener("click", function() {
- Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms);
- return false;
- });
+ displayUniversityLocationContent(costMult);
+ setUniversityLocationButtons(costMult, expMult);
break;
case Locations.VolhavenOmniTekIncorporated:
@@ -1446,24 +1368,84 @@ displayUniversityLocationContent = function(costMult) {
var classDataStructuresButton = document.getElementById("location-data-structures-class");
var classNetworksButton = document.getElementById("location-networks-class");
var classAlgorithmsButton = document.getElementById("location-algorithms-class");
+ var classManagementButton = document.getElementById("location-management-class");
+ var classLeadershipButton = document.getElementById("location-leadership-class");
studyComputerScienceButton.style.display = "block";
classDataStructuresButton.style.display = "block";
classNetworksButton.style.display = "block";
classAlgorithmsButton.style.display = "block";
-
- var gameCPS = 1 / Engine._idleSpeed;
+ classManagementButton.style.display = "block";
+ classLeadershipButton.style.display = "block";
//Costs (per second)
- var baseDataStructuresCost = 1;
- var baseNetworksCost = 5;
- var baseAlgorithmsCost = 20;
+ var baseDataStructuresCost = 1;
+ var baseNetworksCost = 5;
+ var baseAlgorithmsCost = 20;
+ var baseManagementCost = 10;
+ var baseLeadershipCost = 20;
- var dataStructuresCost = baseDataStructuresCost * costMult;
- var networksCost = baseNetworksCost * costMult;
- var algorithmsCost = baseAlgorithmsCost * costMult;
+ var dataStructuresCost = baseDataStructuresCost * costMult;
+ var networksCost = baseNetworksCost * costMult;
+ var algorithmsCost = baseAlgorithmsCost * costMult;
+ var managementCost = baseManagementCost * costMult;
+ var leadershipCost = baseLeadershipCost * costMult;
//Update button text to show cost
- classDataStructuresButton.innerHTML = "Take Data Structures Class ($" + dataStructuresCost + " / sec)";
- classNetworksButton.innerHTML = "Take Networks Class ($" + networksCost + " / second)";
- classAlgorithmsButton.innerHTML = "Take Algorithms Class ($" + algorithmsCost + " / second)";
-}
\ No newline at end of file
+ classDataStructuresButton.innerHTML = "Take Data Structures course ($" + dataStructuresCost + " / sec)";
+ classNetworksButton.innerHTML = "Take Networks course ($" + networksCost + " / second)";
+ classAlgorithmsButton.innerHTML = "Take Algorithms course ($" + algorithmsCost + " / second)";
+ classManagementButton.innerHTML = "Take Management course ($" + managementCost + " / second)";
+ classLeadershipButton.innerHTML = "Take Leadership course ($" + leadershipCost + " / second)";
+}
+
+setUniversityLocationButtons = function(costMult, expMult) {
+ var studyComputerScience= document.getElementById("location-study-computer-science");
+ var classDataStructures = document.getElementById("location-data-structures-class");
+ var classNetworks = document.getElementById("location-networks-class");
+ var classAlgorithms = document.getElementById("location-algorithms-class");
+ var classManagement = document.getElementById("location-management-class");
+ var classLeadership = document.getElementById("location-leadership-class");
+
+ var newStudyCS = studyComputerScience.cloneNode(true);
+ studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience)
+ newStudyCS.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience);
+ return false;
+ });
+
+ var newClassDataStructures = classDataStructures.cloneNode(true);
+ classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures);
+ newClassDataStructures.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures);
+ return false;
+ });
+
+ var newClassNetworks = classNetworks.cloneNode(true);
+ classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks);
+ newClassNetworks.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks);
+ return false;
+ });
+
+ var newClassAlgorithms = classAlgorithms.cloneNode(true);
+ classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms);
+ newClassAlgorithms.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms);
+ return false;
+ });
+
+ var newClassManagement = classManagement.cloneNode(true);
+ classManagement.parentNode.replaceChild(newClassManagement, classManagement);
+ newClassManagement.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassManagement);
+ return false;
+ });
+
+ var newClassLeadership = classLeadership.cloneNode(true);
+ classLeadership.parentNode.replaceChild(newClassLeadership, classLeadership);
+ newClassLeadership.addEventListener("click", function() {
+ Player.startClass(costMult, expMult, CONSTANTS.ClassLeadership);
+ return false;
+ });
+}
+
diff --git a/src/Player.js b/src/Player.js
index 2fe80aceb..879347e0f 100644
--- a/src/Player.js
+++ b/src/Player.js
@@ -769,7 +769,6 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
this.workDefExpGainRate = 0;
this.workDexExpGainRate = 0;
this.workAgiExpGainRate = 0;
- this.workChaExpGainRate = 0;
this.workRepGainRate = 0;
this.workMoneyGainRate = 0;
@@ -787,15 +786,20 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
var baseDataStructuresCost = 1;
var baseNetworksCost = 5;
var baseAlgorithmsCost = 20;
+ var baseManagementCost = 10;
+ var baseLeadershipCost = 20;
var baseStudyComputerScienceExp = 0.02;
var baseDataStructuresExp = 0.1;
- var baseNetworksExp = 0.5;
- var baseAlgorithmsExp = 2.0;
+ var baseNetworksExp = 0.4;
+ var baseAlgorithmsExp = 1.5;
+ var baseManagementExp = 0.8;
+ var baseLeadershipExp = 1.5;
//Find cost and exp gain per game cycle
var cost = 0;
var hackExp = 0;
+ var chaExp = 0;
switch (className) {
case CONSTANTS.ClassStudyComputerScience:
hackExp = baseStudyComputerScienceExp * expMult / gameCPS;
@@ -812,13 +816,22 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
cost = baseAlgorithmsCost * costMult / gameCPS;
hackExp = baseAlgorithmsExp * expMult / gameCPS;
break;
+ case CONSTANTS.ClassManagement:
+ cost = baseManagementCost * costMult / gameCPS;
+ chaExp = baseManagementExp * expMult / gameCPS;
+ break;
+ case CONSTANTS.ClassLeadership:
+ cost = baseLeadershipCost * costMult / gameCPS;
+ chaExp = baseLeadershipExp * expMult / gameCPS;
+ break;
default:
throw new Error("ERR: Invalid/unregocnized class name");
return;
}
- this.workMoneyLossRate = cost;
- this.workHackExpGainRate = hackExp;
+ this.workMoneyLossRate = cost;
+ this.workHackExpGainRate = hackExp;
+ this.workChaExpGainRate = chaExp;
var cancelButton = document.getElementById("work-in-progress-cancel-button");
@@ -883,7 +896,7 @@ PlayerObject.prototype.finishClass = function() {
this.updateSkillLevels();
var txt = "After " + this.className + " for " + convertTimeMsToTimeElapsedString(this.timeWorked) + ",
" +
- "you spent a total of " + this.workMoneyGained * -1 + ".
" +
+ "you spent a total of $" + this.workMoneyGained * -1 + ".
" +
"You earned a total of:
" +
(this.workHackExpGained).toFixed(3) + " hacking exp
" +
(this.workStrExpGained).toFixed(3) + " strength exp
" +