2016-10-27 20:26:00 +02:00
|
|
|
//Replaces the character at an index with a new character
|
|
|
|
String.prototype.replaceAt=function(index, character) {
|
|
|
|
return this.substr(0, index) + character + this.substr(index+character.length);
|
|
|
|
}
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
var Engine = {
|
|
|
|
|
|
|
|
//Clickable objects
|
|
|
|
Clickables: {
|
|
|
|
hackButton: null,
|
|
|
|
|
|
|
|
//Main menu buttons
|
2016-12-19 19:20:19 +01:00
|
|
|
terminalMainMenuButton: null,
|
|
|
|
characterMainMenuButton: null,
|
|
|
|
scriptEditorMainMenuButton: null,
|
|
|
|
activeScriptsMainMenuButton: null,
|
|
|
|
saveMainMenuButton: null,
|
|
|
|
deleteMainMenuButton: null,
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
//Display objects
|
|
|
|
Display: {
|
|
|
|
//Progress bar
|
2016-11-24 23:30:33 +01:00
|
|
|
progress: null,
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Display for status text (such as "Saved" or "Loaded")
|
2016-11-24 23:30:33 +01:00
|
|
|
statusText: null,
|
2016-10-17 10:24:39 +02:00
|
|
|
|
2016-11-24 23:30:33 +01:00
|
|
|
hacking_skill: null,
|
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
//Main menu content
|
2016-11-24 23:30:33 +01:00
|
|
|
terminalContent: null,
|
|
|
|
characterContent: null,
|
|
|
|
scriptEditorContent: null,
|
2016-12-19 19:20:19 +01:00
|
|
|
activeScriptsContent: null,
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Character info
|
2016-11-24 23:30:33 +01:00
|
|
|
characterInfo: null,
|
|
|
|
|
|
|
|
//Script editor text
|
|
|
|
scriptEditorText: null,
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
2016-11-24 23:30:33 +01:00
|
|
|
//Current page status
|
|
|
|
Page: {
|
|
|
|
Terminal: "Terminal",
|
|
|
|
CharacterInfo: "CharacterInfo",
|
|
|
|
ScriptEditor: "ScriptEditor",
|
2016-12-19 19:20:19 +01:00
|
|
|
ActiveScripts: "ActiveScripts",
|
2016-11-24 23:30:33 +01:00
|
|
|
},
|
|
|
|
currentPage: null,
|
|
|
|
|
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
//Time variables (milliseconds unix epoch time)
|
2016-11-21 07:11:14 +01:00
|
|
|
_lastUpdate: new Date().getTime(),
|
2016-10-17 10:24:39 +02:00
|
|
|
_idleSpeed: 200, //Speed (in ms) at which the main loop is updated
|
|
|
|
|
|
|
|
//Save function
|
2016-11-24 23:30:33 +01:00
|
|
|
saveGame: function() {
|
|
|
|
var PlayerSave = JSON.stringify(Player);
|
2016-12-01 23:18:18 +01:00
|
|
|
var AllServersSave = JSON.stringify(AllServers);
|
2016-12-19 19:20:19 +01:00
|
|
|
var CompaniesSave = JSON.stringify(Companies);
|
2016-11-24 23:30:33 +01:00
|
|
|
//TODO Add factions + companies here when they're done
|
2016-10-17 10:24:39 +02:00
|
|
|
|
2016-11-24 23:30:33 +01:00
|
|
|
window.localStorage.setItem("netburnerPlayerSave", PlayerSave);
|
2016-12-01 23:18:18 +01:00
|
|
|
window.localStorage.setItem("netburnerAllServersSave", AllServersSave);
|
2016-12-19 19:20:19 +01:00
|
|
|
window.localStorage.setItem("netburnerCompaniesSave", CompaniesSave);
|
2016-11-24 23:44:48 +01:00
|
|
|
console.log("Game saved to local storage");
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
//Load saved game function
|
|
|
|
loadSave: function() {
|
|
|
|
//Check to see if file exists
|
2016-11-24 23:30:33 +01:00
|
|
|
if (!window.localStorage.getItem("netburnerPlayerSave")) {
|
2016-11-24 23:44:48 +01:00
|
|
|
console.log("No Player save to load");
|
|
|
|
return false;
|
2016-12-01 23:18:18 +01:00
|
|
|
} else if (!window.localStorage.getItem("netburnerAllServersSave")) {
|
|
|
|
console.log("No AllServers save to load");
|
|
|
|
return false;
|
2016-12-19 19:20:19 +01:00
|
|
|
} else if (!window.localStorage.getItem("netburnerCompaniesSave")) {
|
|
|
|
console.log("No Companies save to load");
|
|
|
|
return false;
|
2016-11-24 23:30:33 +01:00
|
|
|
} else {
|
|
|
|
var PlayerSave = window.localStorage.getItem("netburnerPlayerSave");
|
2016-12-01 23:18:18 +01:00
|
|
|
var AllServersSave = window.localStorage.getItem("netburnerAllServersSave");
|
2016-12-19 19:20:19 +01:00
|
|
|
var CompaniesSave = window.localStorage.getItem("netburnerCompaniesSave");
|
2016-12-01 23:18:18 +01:00
|
|
|
Player = JSON.parse(PlayerSave, Reviver);
|
|
|
|
AllServers = JSON.parse(AllServersSave, Reviver);
|
2016-12-19 19:20:19 +01:00
|
|
|
Companies = JSON.parse(CompaniesSave, Reviver);
|
2016-11-24 23:44:48 +01:00
|
|
|
return true;
|
2016-10-17 10:24:39 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
//Delete saved game function
|
|
|
|
deleteSave: function() {
|
2016-11-24 23:44:48 +01:00
|
|
|
if (!window.localStorage.getItem("netburnerPlayerSave")) {
|
|
|
|
console.log("No Player Save to delete");
|
|
|
|
return false;
|
2016-12-01 23:18:18 +01:00
|
|
|
} else if (!window.localStorage.getItem("netburnerAllServersSave")) {
|
|
|
|
console.log("No AllServers Save to delete");
|
2016-12-19 19:20:19 +01:00
|
|
|
return false;
|
|
|
|
} else if (!window.localStorage.getItem("netburnerCompaniesSave")) {
|
|
|
|
console.log("No Companies Save to delete");
|
|
|
|
return false;
|
2016-10-17 10:24:39 +02:00
|
|
|
} else {
|
2016-11-24 23:44:48 +01:00
|
|
|
window.localStorage.removeItem("netburnerPlayerSave");
|
2016-12-01 23:18:18 +01:00
|
|
|
window.localStorage.removeItem("netburnerAllServersSave");
|
2016-12-19 19:20:19 +01:00
|
|
|
window.localStorage.removeItem("netburnerCompaniesSave");
|
2016-11-24 23:44:48 +01:00
|
|
|
console.log("Deleted saves")
|
|
|
|
return true;
|
2016-10-17 10:24:39 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
/* Load content when a main menu button is clicked */
|
|
|
|
loadTerminalContent: function() {
|
|
|
|
Engine.hideAllContent();
|
|
|
|
Engine.Display.terminalContent.style.visibility = "visible";
|
2016-11-24 23:30:33 +01:00
|
|
|
Engine.currentPage = Engine.Page.Terminal;
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
loadCharacterContent: function() {
|
|
|
|
Engine.hideAllContent();
|
|
|
|
Engine.Display.characterContent.style.visibility = "visible";
|
|
|
|
Engine.displayCharacterInfo();
|
2016-11-24 23:30:33 +01:00
|
|
|
Engine.currentPage = Engine.Page.CharacterInfo;
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
2016-11-24 23:30:33 +01:00
|
|
|
|
|
|
|
loadScriptEditorContent: function(filename = "", code = "") {
|
|
|
|
Engine.hideAllContent();
|
|
|
|
Engine.Display.scriptEditorContent.style.visibility = "visible";
|
|
|
|
if (filename == "") {
|
|
|
|
document.getElementById("script-editor-filename").value = "untitled";
|
|
|
|
} else {
|
|
|
|
document.getElementById("script-editor-filename").value = filename;
|
|
|
|
}
|
|
|
|
document.getElementById("script-editor-text").value = code;
|
|
|
|
Engine.currentPage = Engine.Page.ScriptEditor;
|
|
|
|
},
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
loadActiveScriptsContent: function() {
|
|
|
|
Engine.hideAllContent();
|
|
|
|
Engine.Display.activeScriptsContent.style.visibility = "visible";
|
|
|
|
|
|
|
|
Engine.currentPage = Engine.Page.ActiveScripts;
|
|
|
|
},
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Helper function that hides all content
|
|
|
|
hideAllContent: function() {
|
|
|
|
Engine.Display.terminalContent.style.visibility = "hidden";
|
|
|
|
Engine.Display.characterContent.style.visibility = "hidden";
|
2016-11-24 23:30:33 +01:00
|
|
|
Engine.Display.scriptEditorContent.style.visibility = "hidden";
|
2016-12-19 19:20:19 +01:00
|
|
|
Engine.Display.activeScriptsContent.style.visibility = "hidden";
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
/* Display character info */
|
|
|
|
displayCharacterInfo: function() {
|
2016-12-19 21:59:13 +01:00
|
|
|
Engine.Display.characterInfo.innerHTML = 'Money: $' + Player.money.toFixed(2) + '<br><br>' +
|
2016-10-17 10:24:39 +02:00
|
|
|
'Hacking Level: ' + Player.hacking_skill + '<br><br>' +
|
|
|
|
'Strength: ' + Player.strength + '<br><br>' +
|
|
|
|
'Defense: ' + Player.defense + '<br><br>' +
|
|
|
|
'Dexterity: ' + Player.dexterity + '<br><br>' +
|
2016-10-17 23:23:23 +02:00
|
|
|
'Agility: ' + Player.agility + '<br><br>' +
|
2016-11-02 22:45:10 +01:00
|
|
|
'Charisma: ' + Player.charisma + '<br><br>' +
|
2016-11-01 06:30:59 +01:00
|
|
|
'Servers owned: ' + Player.purchasedServers.length + '<br><br>' +
|
2016-12-19 21:59:13 +01:00
|
|
|
'Hacking Experience: ' + Player.hacking_exp.toFixed(4) + '<br><br>';
|
2016-10-17 10:24:39 +02:00
|
|
|
},
|
|
|
|
|
2016-12-19 19:20:19 +01:00
|
|
|
/* Functions used to update information on the Active Scripts page */
|
|
|
|
ActiveScriptsList: null,
|
|
|
|
|
|
|
|
//Creates and adds the <li> object for a given workerScript
|
|
|
|
addActiveScriptsItem: function(workerscript) {
|
|
|
|
var item = document.createElement("li");
|
|
|
|
|
|
|
|
Engine.createActiveScriptsText(workerscript, item);
|
|
|
|
|
|
|
|
//Add the li element onto the list
|
|
|
|
if (Engine.ActiveScriptsList == null) {
|
|
|
|
Engine.ActiveScriptsList = document.getElementById("active-scripts-list");
|
|
|
|
}
|
|
|
|
Engine.ActiveScriptsList.appendChild(item);
|
|
|
|
},
|
|
|
|
|
2016-12-20 21:18:34 +01:00
|
|
|
deleteActiveScriptsItem: function(i) {
|
|
|
|
var list = Engine.ActiveScriptsList.querySelectorAll('#active-scripts-list li');
|
|
|
|
if (i >= list.length) {
|
|
|
|
throw new Error("Trying to delete an out-of-range Active Scripts item");
|
|
|
|
}
|
|
|
|
|
|
|
|
var li = list[i];
|
|
|
|
li.parentNode.removeChild(li);
|
|
|
|
},
|
|
|
|
|
2016-12-19 19:20:19 +01:00
|
|
|
//Update the ActiveScriptsItems array
|
|
|
|
updateActiveScriptsItems: function() {
|
|
|
|
for (var i = 0; i < workerScripts.length; ++i) {
|
|
|
|
Engine.updateActiveScriptsItemContent(i, workerScripts[i]);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
//Updates the content of the given item in the Active Scripts list
|
|
|
|
updateActiveScriptsItemContent: function(i, workerscript) {
|
|
|
|
var list = Engine.ActiveScriptsList.getElementsByTagName("li");
|
|
|
|
if (i >= list.length) {
|
|
|
|
throw new Error("Trying to update an out-of-range Active Scripts Item");
|
|
|
|
}
|
|
|
|
|
|
|
|
var item = list[i];
|
|
|
|
|
|
|
|
//Clear the item
|
|
|
|
while (item.firstChild) {
|
|
|
|
item.removeChild(item.firstChild);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Add the updated text back
|
|
|
|
Engine.createActiveScriptsText(workerscript, item);
|
|
|
|
},
|
|
|
|
|
|
|
|
createActiveScriptsText(workerscript, item) {
|
|
|
|
//Script name
|
|
|
|
var scriptName = document.createElement("h2");
|
|
|
|
scriptName.appendChild(document.createTextNode(workerscript.name));
|
|
|
|
item.appendChild(scriptName);
|
|
|
|
|
|
|
|
var itemText = document.createElement("p");
|
|
|
|
|
|
|
|
//Server ip/hostname
|
|
|
|
var hostname = workerscript.getServer().hostname;
|
2016-12-20 21:18:34 +01:00
|
|
|
var serverIpHostname = "Server: " + hostname + "(" + workerscript.serverIp + ")";
|
2016-12-19 19:20:19 +01:00
|
|
|
|
2016-12-19 21:59:13 +01:00
|
|
|
//Online
|
2016-12-19 19:20:19 +01:00
|
|
|
var onlineMps = workerscript.scriptRef.onlineMoneyMade / workerscript.scriptRef.onlineRunningTime;
|
|
|
|
var onlineMpsText = "Online production: $" + onlineMps.toFixed(2) + "/second";
|
2016-12-19 21:59:13 +01:00
|
|
|
var onlineEps = workerscript.scriptRef.onlineExpGained / workerscript.scriptRef.onlineRunningTime;
|
|
|
|
var onlineEpsText = (Array(20).join(" ") + onlineEps.toFixed(4) + " exp/second").replace( / /g, " ");
|
2016-12-19 19:20:19 +01:00
|
|
|
|
2016-12-19 21:59:13 +01:00
|
|
|
//Offline
|
2016-12-19 19:20:19 +01:00
|
|
|
var offlineMps = workerscript.scriptRef.offlineMoneyMade / workerscript.scriptRef.offlineRunningTime;
|
|
|
|
var offlineMpsText = "Offline production: $" + offlineMps.toFixed(2) + "/second";
|
2016-12-19 21:59:13 +01:00
|
|
|
var offlineEps = workerscript.scriptRef.offlineExpGained / workerscript.scriptRef.offlineRunningTime;
|
|
|
|
var offlineEpsText = (Array(21).join(" ") + offlineEps.toFixed(4) + " exp/second").replace( / /g, " ");
|
2016-12-19 19:20:19 +01:00
|
|
|
|
2016-12-19 21:59:13 +01:00
|
|
|
itemText.innerHTML = serverIpHostname + "<br>" + onlineMpsText + "<br>" + onlineEpsText + "<br>" +
|
|
|
|
offlineMpsText + "<br>" + offlineEpsText + "<br>";
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
item.appendChild(itemText);
|
|
|
|
},
|
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
/* Main Event Loop */
|
|
|
|
idleTimer: function() {
|
|
|
|
//Get time difference
|
2016-11-21 07:11:14 +01:00
|
|
|
var _thisUpdate = new Date().getTime();
|
|
|
|
var diff = _thisUpdate - Engine._lastUpdate;
|
2016-12-02 22:57:20 +01:00
|
|
|
var offset = diff % Engine._idleSpeed;
|
2016-11-28 23:02:06 +01:00
|
|
|
|
2016-11-21 07:11:14 +01:00
|
|
|
//Divide this by cycle time to determine how many cycles have elapsed since last update
|
2016-12-01 23:39:13 +01:00
|
|
|
diff = Math.floor(diff / Engine._idleSpeed);
|
2016-11-29 23:56:05 +01:00
|
|
|
|
2016-11-21 07:11:14 +01:00
|
|
|
if (diff > 0) {
|
|
|
|
//Update the game engine by the calculated number of cycles
|
|
|
|
Engine.updateGame(diff);
|
2016-12-02 22:57:20 +01:00
|
|
|
Engine._lastUpdate = _thisUpdate - offset;
|
2016-12-19 21:59:13 +01:00
|
|
|
Player.lastUpdate = _thisUpdate - offset;
|
2016-11-21 07:11:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
window.requestAnimationFrame(Engine.idleTimer);
|
|
|
|
},
|
|
|
|
|
2016-12-15 23:22:42 +01:00
|
|
|
updateGame: function(numCycles = 1) {
|
|
|
|
//Manual hack
|
|
|
|
if (Player.startAction == true) {
|
|
|
|
Engine._totalActionTime = Player.actionTime;
|
|
|
|
Engine._actionTimeLeft = Player.actionTime;
|
|
|
|
Engine._actionInProgress = true;
|
|
|
|
Engine._actionProgressBarCount = 1;
|
|
|
|
Engine._actionProgressStr = "[ ]";
|
|
|
|
Engine._actionTimeStr = "Time left: ";
|
|
|
|
Player.startAction = false;
|
|
|
|
}
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
//Counters
|
2016-12-15 23:22:42 +01:00
|
|
|
Engine.decrementAllCounters(numCycles);
|
|
|
|
Engine.checkCounters();
|
|
|
|
|
2016-12-19 19:20:19 +01:00
|
|
|
//Manual hacks
|
2016-12-15 23:22:42 +01:00
|
|
|
Engine.updateHackProgress(numCycles);
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
//Update the running time of all active scripts
|
|
|
|
updateOnlineScriptTimes(numCycles);
|
2016-12-15 23:22:42 +01:00
|
|
|
},
|
|
|
|
|
2016-12-02 22:57:20 +01:00
|
|
|
//Counters for the main event loop. Represent the number of game cycles are required
|
|
|
|
//for something to happen.
|
|
|
|
Counters: {
|
2016-12-15 23:22:42 +01:00
|
|
|
autoSaveCounter: 300, //Autosave every minute
|
|
|
|
updateSkillLevelsCounter: 10, //Only update skill levels every 2 seconds. Might improve performance
|
2016-12-19 19:20:19 +01:00
|
|
|
updateDisplays: 10, //Update displays such as Active Scripts display and character display
|
2016-12-20 21:18:34 +01:00
|
|
|
serverGrowth: 450, //Process server growth every minute and a half
|
2016-12-02 22:57:20 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
decrementAllCounters: function(numCycles = 1) {
|
|
|
|
for (var counter in Engine.Counters) {
|
|
|
|
if (Engine.Counters.hasOwnProperty(counter)) {
|
|
|
|
Engine.Counters[counter] = Engine.Counters[counter] - numCycles;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
//Checks if any counters are 0 and if they are, executes whatever
|
|
|
|
//is necessary and then resets the counter
|
|
|
|
checkCounters: function() {
|
|
|
|
if (Engine.Counters.autoSaveCounter <= 0) {
|
|
|
|
Engine.saveGame();
|
|
|
|
Engine.Counters.autoSaveCounter = 300;
|
|
|
|
}
|
2016-12-15 23:22:42 +01:00
|
|
|
|
|
|
|
if (Engine.Counters.updateSkillLevelsCounter <= 0) {
|
|
|
|
Player.updateSkillLevels();
|
|
|
|
Engine.Counters.updateSkillLevelsCounter = 10;
|
2016-10-24 23:16:51 +02:00
|
|
|
}
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
if (Engine.Counters.updateDisplays <= 0) {
|
|
|
|
if (Engine.currentPage == Engine.Page.ActiveScripts) {
|
|
|
|
Engine.updateActiveScriptsItems();
|
|
|
|
} else if (Engine.currentPage == Engine.Page.CharacterInfo) {
|
|
|
|
Engine.displayCharacterInfo();
|
|
|
|
}
|
|
|
|
|
|
|
|
Engine.Counters.updateDisplays = 10;
|
|
|
|
}
|
2016-12-20 21:18:34 +01:00
|
|
|
|
|
|
|
if (Engine.Counters.serverGrowth <= 0) {
|
|
|
|
var numCycles = Math.floor((450 - Engine.Counters.serverGrowth));
|
|
|
|
processServerGrowth(numCycles);
|
|
|
|
Engine.Counters.serverGrowth = 450;
|
|
|
|
}
|
2016-11-21 07:11:14 +01:00
|
|
|
},
|
2016-12-15 23:22:42 +01:00
|
|
|
|
2016-10-24 23:16:51 +02:00
|
|
|
/* Calculates the hack progress for a manual (non-scripted) hack and updates the progress bar/time accordingly */
|
2016-11-01 06:30:59 +01:00
|
|
|
_totalActionTime: 0,
|
|
|
|
_actionTimeLeft: 0,
|
|
|
|
_actionTimeStr: "Time left: ",
|
|
|
|
_actionProgressStr: "[ ]",
|
|
|
|
_actionProgressBarCount: 1,
|
|
|
|
_actionInProgress: false,
|
2016-12-02 22:57:20 +01:00
|
|
|
updateHackProgress: function(numCycles = 1) {
|
2016-11-01 06:30:59 +01:00
|
|
|
if (Engine._actionInProgress == true) {
|
2016-11-24 23:44:48 +01:00
|
|
|
//TODO Do this calculation based on numCycles rather than idle speed
|
2016-12-02 22:57:20 +01:00
|
|
|
var timeElapsedMilli = numCycles * Engine._idleSpeed;
|
|
|
|
Engine._actionTimeLeft -= (timeElapsedMilli/ 1000); //Substract idle speed (ms)
|
2016-10-24 23:16:51 +02:00
|
|
|
|
|
|
|
//Calculate percent filled
|
2016-11-01 06:30:59 +01:00
|
|
|
var percent = Math.round((1 - Engine._actionTimeLeft / Engine._totalActionTime) * 100);
|
2016-10-24 23:16:51 +02:00
|
|
|
|
|
|
|
//Update progress bar
|
2016-11-01 06:30:59 +01:00
|
|
|
while (Engine._actionProgressBarCount * 2 <= percent) {
|
|
|
|
Engine._actionProgressStr = Engine._actionProgressStr.replaceAt(Engine._actionProgressBarCount, "|");
|
|
|
|
Engine._actionProgressBarCount += 1;
|
2016-10-24 23:16:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//Update hack time remaining
|
2016-11-01 06:30:59 +01:00
|
|
|
Engine._actionTimeStr = "Time left: " + Math.max(0, Math.round(Engine._actionTimeLeft)).toString() + "s";
|
|
|
|
document.getElementById("hack-progress").innerHTML = Engine._actionTimeStr;
|
2016-10-27 20:26:00 +02:00
|
|
|
|
|
|
|
//Dynamically update progress bar
|
2016-11-01 06:30:59 +01:00
|
|
|
document.getElementById("hack-progress-bar").innerHTML = Engine._actionProgressStr.replace( / /g, " " );
|
2016-10-24 23:16:51 +02:00
|
|
|
|
|
|
|
//Once percent is 100, the hack is completed
|
2016-10-27 05:34:18 +02:00
|
|
|
if (percent >= 100) {
|
2016-11-01 06:30:59 +01:00
|
|
|
Engine._actionInProgress = false;
|
|
|
|
Terminal.finishAction();
|
2016-10-24 23:16:51 +02:00
|
|
|
}
|
2016-10-27 20:26:00 +02:00
|
|
|
|
2016-10-24 23:16:51 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
/* Initialization */
|
|
|
|
init: function() {
|
2016-11-03 21:43:46 +01:00
|
|
|
//Initialization functions
|
2016-11-24 23:44:48 +01:00
|
|
|
if (Engine.loadSave()) {
|
|
|
|
console.log("Loaded game from save");
|
|
|
|
CompanyPositions.init();
|
2016-12-20 21:18:34 +01:00
|
|
|
|
|
|
|
//Calculate the number of cycles have elapsed while offline
|
|
|
|
var thisUpdate = new Date().getTime();
|
|
|
|
var lastUpdate = Player.lastUpdate;
|
|
|
|
var numCyclesOffline = Math.floor((thisUpdate - lastUpdate) / Engine._idleSpeed);
|
|
|
|
|
|
|
|
processServerGrowth(numCyclesOffline); //Should be done before offline production for scripts
|
|
|
|
loadAllRunningScripts(); //This also takes care of offline production for those scripts
|
2016-11-24 23:44:48 +01:00
|
|
|
} else {
|
|
|
|
//No save found, start new game
|
|
|
|
console.log("Initializing new game");
|
|
|
|
Player.init();
|
2016-12-01 23:18:18 +01:00
|
|
|
initForeignServers();
|
2016-11-24 23:44:48 +01:00
|
|
|
CompanyPositions.init();
|
2016-12-19 19:20:19 +01:00
|
|
|
initCompanies();
|
2016-11-24 23:44:48 +01:00
|
|
|
}
|
2016-12-14 00:52:32 +01:00
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
//Main menu buttons and content
|
|
|
|
Engine.Clickables.terminalMainMenuButton = document.getElementById("terminal-menu-link");
|
|
|
|
Engine.Clickables.terminalMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.loadTerminalContent();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
Engine.Clickables.characterMainMenuButton = document.getElementById("character-menu-link");
|
|
|
|
Engine.Clickables.characterMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.loadCharacterContent();
|
|
|
|
return false;
|
|
|
|
});
|
2016-11-24 23:30:33 +01:00
|
|
|
|
|
|
|
Engine.Clickables.scriptEditorMainMenuButton = document.getElementById("create-script-menu-link");
|
|
|
|
Engine.Clickables.scriptEditorMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.loadScriptEditorContent();
|
|
|
|
return false;
|
|
|
|
});
|
2016-12-19 19:20:19 +01:00
|
|
|
|
|
|
|
Engine.Clickables.activeScriptsMainMenuButton = document.getElementById("active-scripts-menu-link");
|
|
|
|
Engine.Clickables.activeScriptsMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.loadActiveScriptsContent();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
//Active scripts list
|
|
|
|
Engine.ActiveScriptsList = document.getElementById("active-scripts-list");
|
|
|
|
|
2016-12-01 23:18:18 +01:00
|
|
|
Engine.Clickables.saveMainMenuButton = document.getElementById("save-game-link");
|
|
|
|
Engine.Clickables.saveMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.saveGame();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
Engine.Clickables.deleteMainMenuButton = document.getElementById("delete-game-link");
|
|
|
|
Engine.Clickables.deleteMainMenuButton.addEventListener("click", function() {
|
|
|
|
Engine.deleteSave();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
2016-10-17 10:24:39 +02:00
|
|
|
Engine.Display.terminalContent = document.getElementById("terminal-container");
|
2016-11-24 23:30:33 +01:00
|
|
|
Engine.currentPage = Engine.Page.Terminal;
|
2016-10-17 10:24:39 +02:00
|
|
|
Engine.Display.characterContent = document.getElementById("character-container");
|
2016-11-24 23:30:33 +01:00
|
|
|
Engine.Display.characterContent.style.visibility = "hidden";
|
|
|
|
Engine.Display.scriptEditorContent = document.getElementById("script-editor-container");
|
|
|
|
Engine.Display.scriptEditorContent.style.visibility = "hidden";
|
2016-12-19 19:20:19 +01:00
|
|
|
Engine.Display.activeScriptsContent = document.getElementById("active-scripts-container");
|
|
|
|
Engine.Display.activeScriptsContent.style.visibility = "hidden";
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Character info
|
|
|
|
Engine.Display.characterInfo = document.getElementById("character-info");
|
2016-11-24 23:30:33 +01:00
|
|
|
|
|
|
|
//Script editor
|
|
|
|
Engine.Display.scriptEditorText = document.getElementById("script-editor-text");
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Message at the top of terminal
|
2016-10-20 23:11:01 +02:00
|
|
|
postNetburnerText();
|
2016-10-17 10:24:39 +02:00
|
|
|
|
|
|
|
//Run main loop
|
|
|
|
Engine.idleTimer();
|
2016-11-28 23:13:13 +01:00
|
|
|
|
|
|
|
runScriptsLoop();
|
2016-10-17 10:24:39 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
window.onload = function() {
|
|
|
|
Engine.init();
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|