mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-18 12:15:44 +01:00
v0.38.0 - Minor re-balancing and bug fixes in Bladeburner
This commit is contained in:
parent
71cf3cac35
commit
575b67440c
6087
dist/engine.bundle.js
vendored
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
Loading…
Reference in New Issue
Block a user