diff --git a/index.html b/index.html
index 3478e2e04..0b0a33296 100644
--- a/index.html
+++ b/index.html
@@ -48,6 +48,7 @@
+
@@ -136,6 +137,11 @@
+
+
+
+
+
diff --git a/src/HacknetNode.js b/src/HacknetNode.js
new file mode 100644
index 000000000..ddb332d26
--- /dev/null
+++ b/src/HacknetNode.js
@@ -0,0 +1,44 @@
+/* HacknetNode.js */
+function HacknetNode(name) {
+ this.level = 1;
+ this.ram = 0; //GB
+ this.numCores = 1;
+
+ this.name = name;
+
+ this.totalMoneyGenerated = 0;
+ this.onlineTimeSeconds = 0;
+
+ this.moneyGainRatePerSecond = 0;
+}
+
+HacknetNode.prototype.updateMoneyGainRate = function() {
+ //How much extra $/s is gained per level
+ var gainPerLevel = 0.25;
+
+ //Each CPU core doubles the speed. Every 1GB of ram adds 10% increase
+ this.moneyGainRatePerSecond = (this.level * gainPerLevel) * Math.pow(1.1, ram) * this.numCores;
+}
+
+HacknetNode.prototype.calculateLevelUpgradeCost = function() {
+ //Upgrade cost = Base cost * multiplier ^ level
+ var baseCost = 10000;
+ var mult = 1.08;
+ return baseCost * Math.pow(mult, this.level);
+}
+
+/* Saving and loading HackNets */
+HacknetNode.prototype.toJSON = function() {
+ return Generic_toJSON("HacknetNode", this);
+}
+
+HacknetNode.fromJSON = function(value) {
+ return Generic_fromJSON(HacknetNode, value.data);
+}
+
+Reviver.constructors.HacknetNode = HacknetNode;
+
+
+purchaseHacknet = function() {
+
+}
\ No newline at end of file
diff --git a/src/Server.js b/src/Server.js
index 22533721d..62def2c6b 100644
--- a/src/Server.js
+++ b/src/Server.js
@@ -22,6 +22,7 @@ function Server() {
this.scripts = [];
this.runningScripts = []; //Names (and only names) of scripts being run
this.programs = [];
+ this.hacknetNodes = [];
/* Hacking information (only valid for "foreign" aka non-purchased servers) */