bitburner-src/src/SourceFile/applySourceFile.ts

178 lines
5.4 KiB
TypeScript
Raw Normal View History

import { PlayerOwnedSourceFile } from "./PlayerOwnedSourceFile";
import { SourceFiles } from "./SourceFiles";
import { Player } from "@player";
2021-05-01 09:17:31 +02:00
export function applySourceFile(srcFile: PlayerOwnedSourceFile): void {
2021-09-05 01:09:30 +02:00
const srcFileKey = "SourceFile" + srcFile.n;
const sourceFileObject = SourceFiles[srcFileKey];
if (sourceFileObject == null) {
console.error(`Invalid source file number: ${srcFile.n}`);
return;
}
2021-09-05 01:09:30 +02:00
switch (srcFile.n) {
case 1: {
// The Source Genesis
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 16 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
const decMult = 1 - mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.hacking_chance *= incMult;
Player.mults.hacking_speed *= incMult;
Player.mults.hacking_money *= incMult;
Player.mults.hacking_grow *= incMult;
Player.mults.hacking *= incMult;
Player.mults.strength *= incMult;
Player.mults.defense *= incMult;
Player.mults.dexterity *= incMult;
Player.mults.agility *= incMult;
Player.mults.charisma *= incMult;
Player.mults.hacking_exp *= incMult;
Player.mults.strength_exp *= incMult;
Player.mults.defense_exp *= incMult;
Player.mults.dexterity_exp *= incMult;
Player.mults.agility_exp *= incMult;
Player.mults.charisma_exp *= incMult;
Player.mults.company_rep *= incMult;
Player.mults.faction_rep *= incMult;
Player.mults.crime_money *= incMult;
Player.mults.crime_success *= incMult;
Player.mults.hacknet_node_money *= incMult;
Player.mults.hacknet_node_purchase_cost *= decMult;
Player.mults.hacknet_node_ram_cost *= decMult;
Player.mults.hacknet_node_core_cost *= decMult;
Player.mults.hacknet_node_level_cost *= decMult;
Player.mults.work_money *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 2: {
// Rise of the Underworld
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 24 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.crime_money *= incMult;
Player.mults.crime_success *= incMult;
Player.mults.charisma *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 3: {
// Corporatocracy
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 8 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.charisma *= incMult;
Player.mults.work_money *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 4: {
// The Singularity
// No effects, just gives access to Singularity functions
break;
}
case 5: {
// Artificial Intelligence
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 8 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.hacking_chance *= incMult;
Player.mults.hacking_speed *= incMult;
Player.mults.hacking_money *= incMult;
Player.mults.hacking_grow *= incMult;
Player.mults.hacking *= incMult;
Player.mults.hacking_exp *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 6: {
// Bladeburner
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 8 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.strength_exp *= incMult;
Player.mults.defense_exp *= incMult;
Player.mults.dexterity_exp *= incMult;
Player.mults.agility_exp *= incMult;
Player.mults.strength *= incMult;
Player.mults.defense *= incMult;
Player.mults.dexterity *= incMult;
Player.mults.agility *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 7: {
// Bladeburner 2079
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 8 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.bladeburner_max_stamina *= incMult;
Player.mults.bladeburner_stamina_gain *= incMult;
Player.mults.bladeburner_analysis *= incMult;
Player.mults.bladeburner_success_chance *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 8: {
// Ghost of Wall Street
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 12 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.hacking_grow *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
case 9: {
// Hacktocracy
2021-10-02 05:20:44 +02:00
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 8 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
const decMult = 1 - mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.hacknet_node_core_cost *= decMult;
Player.mults.hacknet_node_level_cost *= decMult;
Player.mults.hacknet_node_money *= incMult;
Player.mults.hacknet_node_purchase_cost *= decMult;
Player.mults.hacknet_node_ram_cost *= decMult;
2021-09-05 01:09:30 +02:00
break;
}
case 10: {
// Digital Carbon
// No effects, just grants sleeves
break;
}
case 11: {
// The Big Crash
let mult = 0;
for (let i = 0; i < srcFile.lvl; ++i) {
mult += 32 / Math.pow(2, i);
}
const incMult = 1 + mult / 100;
2022-07-15 00:43:33 +02:00
Player.mults.work_money *= incMult;
Player.mults.company_rep *= incMult;
2021-09-05 01:09:30 +02:00
break;
}
2021-09-05 01:09:30 +02:00
case 12: // The Recursion
2021-10-08 09:16:51 +02:00
// Grants neuroflux.
break;
case 13: // They're Lunatics
// Grants more space on Stanek's Gift.
2021-09-05 01:09:30 +02:00
break;
default:
console.error(`Invalid source file number: ${srcFile.n}`);
break;
}
2021-09-05 01:09:30 +02:00
sourceFileObject.owned = true;
}