v0.38.0 - Minor re-balancing and bug fixes in Bladeburner

This commit is contained in:
danielyxie 2018-06-12 23:16:23 -05:00
parent 71cf3cac35
commit 575b67440c
7 changed files with 6196 additions and 6062 deletions

6087
dist/engine.bundle.js vendored

File diff suppressed because it is too large Load Diff

@ -184,6 +184,7 @@ let AugmentationNames = {
BladeArmorUnibeam: "BLADE-51b Tesla Armor: Unibeam Upgrade", BladeArmorUnibeam: "BLADE-51b Tesla Armor: Unibeam Upgrade",
BladeArmorOmnibeam: "BLADE-51b Tesla Armor: Omnibeam Upgrade", BladeArmorOmnibeam: "BLADE-51b Tesla Armor: Omnibeam Upgrade",
BladeArmorIPU: "BLADE-51b Tesla Armor: IPU Upgrade", BladeArmorIPU: "BLADE-51b Tesla Armor: IPU Upgrade",
BladesSimulacrum: "The Blade's Simulacrum",
//Wasteland Augs //Wasteland Augs
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System //PepBoy: "P.E.P-Boy", Plasma Energy Projection System
@ -1766,6 +1767,19 @@ function initAugmentations() {
}); });
BladeArmorIPU.addToFactions([BladeburnersFactionName]); BladeArmorIPU.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladeArmorIPU); resetAugmentation(BladeArmorIPU);
var BladesSimulacrum = new Augmentation({
name:AugmentationNames.BladesSimulacrum, repCost:6e3, moneyCost:75e9,
info:"A highly-advanced matter phase-shifter module that is embedded " +
"in the brainstem and cerebellum. This augmentation allows " +
"the user to project and control a holographic simulacrum within an " +
"extremely large radius. These specially-modified holograms were specially " +
"weaponized by Bladeburner units to be used against Synthoids.<br><br>" +
"This augmentation allows you to perform Bladeburner actions and other " +
"actions (such as working, commiting crimes, etc.) at the same time."
});
BladesSimulacrum.addToFactions([BladeburnersFactionName]);
resetAugmentation(BladesSimulacrum);
} }
//Update costs based on how many have been purchased //Update costs based on how many have been purchased
@ -1777,8 +1791,6 @@ function initAugmentations() {
} }
Player.reapplyAllAugmentations(); Player.reapplyAllAugmentations();
} }
//Resets an Augmentation during (re-initizliation) //Resets an Augmentation during (re-initizliation)
@ -2350,6 +2362,8 @@ function applyAugmentation(aug, reapply=false) {
Player.bladeburner_analysis_mult *= 1.15; Player.bladeburner_analysis_mult *= 1.15;
Player.bladeburner_success_chance_mult *= 1.02; Player.bladeburner_success_chance_mult *= 1.02;
break; break;
case AugmentationNames.BladesSimulacrum: //No multiplier effect
break;
default: default:
throw new Error("ERROR: No such augmentation!"); throw new Error("ERROR: No such augmentation!");
return; return;

@ -1,10 +1,11 @@
import {Augmentations, AugmentationNames} from "./Augmentations.js";
import {CONSTANTS} from "./Constants.js"; import {CONSTANTS} from "./Constants.js";
import {Engine} from "./engine.js"; import {Engine} from "./engine.js";
import {Faction, Factions, factionExists, import {Faction, Factions, factionExists,
joinFaction, displayFactionContent} from "./Faction.js"; joinFaction, displayFactionContent} from "./Faction.js";
import {Locations} from "./Location.js"; import {Locations} from "./Location.js";
import {Player} from "./Player.js"; import {Player} from "./Player.js";
import {hackWorldDaemon} from "./RedPill.js"; import {hackWorldDaemon, redPillFlag} from "./RedPill.js";
import {KEY} from "./Terminal.js"; import {KEY} from "./Terminal.js";
import {dialogBoxCreate} from "../utils/DialogBox.js"; import {dialogBoxCreate} from "../utils/DialogBox.js";
@ -29,10 +30,16 @@ var MaxStaminaToGainFactor = 70000; //Max Stamina is divided by this to get
var DifficultyToTimeFactor = 10; //Action Difficulty divided by this to get base action time var DifficultyToTimeFactor = 10; //Action Difficulty divided by this to get base action time
//The difficulty multiplier affects stamina loss and hp loss of an action. Its formula is: //The difficulty multiplier affects stamina loss and hp loss of an action. Also affects
//experience gain. Its formula is:
//difficulty ^ exponentialFactor + difficulty / linearFactor //difficulty ^ exponentialFactor + difficulty / linearFactor
var DiffMultExponentialFactor = 0.28; var DiffMultExponentialFactor = 0.28;
var DiffMultLinearFactor = 670; var DiffMultLinearFactor = 650;
var EffAgiLinearFactor = 90e3;
var EffDexLinearFactor = 90e3;
var EffAgiExponentialFactor = 0.031;
var EffDexExponentialFactor = 0.03;
var BaseRecruitmentTimeNeeded = 300; //Base time needed (s) to complete a Recruitment action var BaseRecruitmentTimeNeeded = 300; //Base time needed (s) to complete a Recruitment action
@ -519,7 +526,10 @@ Action.prototype.getActionTime = function(inst) {
var effAgility = Player.agility * inst.skillMultipliers.effAgi; var effAgility = Player.agility * inst.skillMultipliers.effAgi;
var effDexterity = Player.dexterity * inst.skillMultipliers.effDex; var effDexterity = Player.dexterity * inst.skillMultipliers.effDex;
var statFac = 0.5 * (Math.pow(effAgility, 0.03) + Math.pow(effDexterity, 0.03)); //Always > 1 var statFac = 0.5 * (Math.pow(effAgility, EffAgiExponentialFactor) +
Math.pow(effDexterity, EffDexExponentialFactor) +
(effAgility / EffAgiLinearFactor) +
(effDexterity / EffDexLinearFactor)); //Always > 1
baseTime = Math.max(1, baseTime * skillFac / statFac); baseTime = Math.max(1, baseTime * skillFac / statFac);
@ -695,6 +705,14 @@ function Bladeburner(params={}) {
if (params.new) {this.create();} if (params.new) {this.create();}
} }
Bladeburner.prototype.prestige = function() {
this.resetAction();
var bladeburnerFac = Factions["Bladeburners"];
if (this.rank >= RankNeededForFaction) {
joinFaction(bladeburnerFac);
}
}
Bladeburner.prototype.create = function() { Bladeburner.prototype.create = function() {
this.contracts["Tracking"] = new Contract({ this.contracts["Tracking"] = new Contract({
name:"Tracking", name:"Tracking",
@ -815,8 +833,13 @@ Bladeburner.prototype.storeCycles = function(numCycles=1) {
} }
Bladeburner.prototype.process = function() { Bladeburner.prototype.process = function() {
//Extreme condition...if Operation Daedalus is complete trigger the BitNode
if (redPillFlag === false && this.blackops.hasOwnProperty("Operation Daedalus")) {
return hackWorldDaemon(Player.bitNodeN);
}
//If the Player starts doing some other actions, set action to idle and alert //If the Player starts doing some other actions, set action to idle and alert
if (Player.isWorking) { if (Augmentations[AugmentationNames.BladesSimulacrum].owned === false && Player.isWorking) {
if (this.action.type !== ActionTypes["Idle"]) { if (this.action.type !== ActionTypes["Idle"]) {
dialogBoxCreate("Your Bladeburner action was cancelled because you started " + dialogBoxCreate("Your Bladeburner action was cancelled because you started " +
"doing something else"); "doing something else");
@ -920,7 +943,8 @@ Bladeburner.prototype.changeRank = function(change) {
throw new Error("Could not properly get Bladeburner Faction object in Bladeburner UI Overview Faction button"); throw new Error("Could not properly get Bladeburner Faction object in Bladeburner UI Overview Faction button");
} }
if (bladeburnerFac.isMember) { if (bladeburnerFac.isMember) {
bladeburnerFac.playerReputation += (RankToFactionRepFactor * change * Player.faction_rep_mult); var favorBonus = 1 + (bladeburnerFac.favor / 100);
bladeburnerFac.playerReputation += (RankToFactionRepFactor * change * Player.faction_rep_mult * favorBonus);
} }
} }
@ -1464,7 +1488,7 @@ Bladeburner.prototype.gainActionStats = function(action, success) {
//Gain multiplier based on difficulty. If this changes then the //Gain multiplier based on difficulty. If this changes then the
//same variable calculated in completeAction() needs to change too //same variable calculated in completeAction() needs to change too
var difficultyMult = Math.pow(difficulty, 0.21); var difficultyMult = Math.pow(difficulty, DiffMultExponentialFactor) + difficulty / DiffMultLinearFactor;
var time = this.actionTimeToComplete; var time = this.actionTimeToComplete;
var successMult = success ? 1 : 0.5; var successMult = success ? 1 : 0.5;
@ -1640,6 +1664,7 @@ Bladeburner.prototype.initializeDomElementRefs = function() {
operations: {}, operations: {},
blackops: {}, blackops: {},
skills: {}, skills: {},
skillPointsDisplay: null,
}; };
} }
@ -1856,7 +1881,7 @@ Bladeburner.prototype.createOverviewContent = function() {
})); }));
//Faction button //Faction button
var bladeburnersFactionName = "Bladeburners"; const bladeburnersFactionName = "Bladeburners";
if (factionExists(bladeburnersFactionName)) { if (factionExists(bladeburnersFactionName)) {
var bladeburnerFac = Factions[bladeburnersFactionName]; var bladeburnerFac = Factions[bladeburnersFactionName];
if (!(bladeburnerFac instanceof Faction)) { if (!(bladeburnerFac instanceof Faction)) {
@ -2132,9 +2157,10 @@ Bladeburner.prototype.createSkillsContent = function() {
} }
//Skill Points //Skill Points
DomElems.actionAndSkillsDiv.appendChild(createElement("p", { DomElems.skillPointsDisplay = createElement("p", {
innerHTML:"<br><strong>Skill Points: " + formatNumber(this.skillPoints, 0) + "</strong>" innerHTML:"<br><strong>Skill Points: " + formatNumber(this.skillPoints, 0) + "</strong>"
})); });
DomElems.actionAndSkillsDiv.appendChild(DomElems.skillPointsDisplay);
//UI Element for each skill //UI Element for each skill
for (var skillName in Skills) { for (var skillName in Skills) {
@ -2246,6 +2272,8 @@ Bladeburner.prototype.updateActionAndSkillsContent = function() {
} }
break; break;
case "skills": case "skills":
DomElems.skillPointsDisplay.innerHTML = "<br><strong>Skill Points: " + formatNumber(this.skillPoints, 0) + "</strong>";
var skillElems = Object.keys(DomElems.skills); var skillElems = Object.keys(DomElems.skills);
for (var i = 0; i < skillElems.length; ++i) { for (var i = 0; i < skillElems.length; ++i) {
var skillElem = DomElems.skills[skillElems[i]]; var skillElem = DomElems.skills[skillElems[i]];
@ -3537,7 +3565,7 @@ Bladeburner.prototype.switchCityNetscriptFn = function(cityName, workerScript) {
} }
Bladeburner.prototype.joinBladeburnerFactionNetscriptFn = function(workerScript) { Bladeburner.prototype.joinBladeburnerFactionNetscriptFn = function(workerScript) {
var bladeburnerFac = Factions[bladeburnersFactionName]; var bladeburnerFac = Factions["Bladeburners"];
if (bladeburnerFac.isMember) { if (bladeburnerFac.isMember) {
return true; return true;
} else if (this.rank >= RankNeededForFaction) { } else if (this.rank >= RankNeededForFaction) {

@ -1,5 +1,5 @@
let CONSTANTS = { let CONSTANTS = {
Version: "0.37.2", Version: "0.38.0",
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience //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 //and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
@ -488,16 +488,18 @@ let CONSTANTS = {
"World Stock Exchange account and TIX API Access<br>", "World Stock Exchange account and TIX API Access<br>",
LatestUpdate: LatestUpdate:
"v0.37.3<br>" + "v0.38.0<br>" +
"* New BitNode: BN-7 Bladeburner 2079<br>" + "* New BitNode: BN-12 The Recursion - Implemented by Github user hydroflame<br>" +
"* New BitNode: BN-12 The Recursion<br>" +
"* Bladeburner Changes:<br>" + "* Bladeburner Changes:<br>" +
"*** Bladeburner progress is no longer reset when installing Augmentations<br>" + "*** Bladeburner progress is no longer reset when installing Augmentations<br>" +
"*** The number of successess needed to increase a Contract/Operation's max level now scales with the current max level (gradually gets harder)<br>" + "*** The number of successess needed to increase a Contract/Operation's max level now scales with the current max level (gradually gets harder)<br>" +
"*** All Bladeburner Augmentations are now slightly more expensive and require more reputation<br>" + "*** All Bladeburner Augmentations are now slightly more expensive and require more reputation<br>" +
"*** Black Operations now give higher rank rewards<br>" + "*** Black Operations now give higher rank rewards<br>" +
"*** Doubled the base amount of money gained from Contracts<br>" + "*** Doubled the base amount of money gained from Contracts<br>" +
"* Hacking is not slightly less profitable in BitNode-3<br>" + "*** Increased the amount of experience gained from Contracts/Actions<br>" +
"*** Added a new Augmentation: The Blade's Simulacrum<br>" +
"*** Bladeburner faction reputation gain is now properly affected by favor<br>" +
"* Hacking is now slightly less profitable in BitNode-3<br>" +
"* Updated Hacknet Nodes UI - Implemented by Github user kopelli<br>" + "* Updated Hacknet Nodes UI - Implemented by Github user kopelli<br>" +
"* Bug Fix: Fixed an exploit that allowed calling any Netscript function without incurring any RAM Cost in NetscriptJS<br>" "* Bug Fix: Fixed an exploit that allowed calling any Netscript function without incurring any RAM Cost in NetscriptJS<br>"
} }

@ -128,7 +128,7 @@ function prestigeAugmentation() {
//Cancel Bladeburner action //Cancel Bladeburner action
if (Player.bladeburner instanceof Bladeburner) { if (Player.bladeburner instanceof Bladeburner) {
Player.bladeburner.resetAction(); Player.bladeburner.prestige();
} }
//BitNode 8: Ghost of Wall Street //BitNode 8: Ghost of Wall Street

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long