New sf -1 and changes to gang to rely more on territory

This commit is contained in:
Olivier Gagnon 2021-10-26 23:02:46 -04:00
parent c1448cfe65
commit 738152d614
11 changed files with 46 additions and 32 deletions

@ -32,7 +32,7 @@ export function SourceFileMinus1(): React.ReactElement {
<Typography style={{ whiteSpace: "pre-wrap" }}> <Typography style={{ whiteSpace: "pre-wrap" }}>
Source-File -1: Exploits in the BitNodes Source-File -1: Exploits in the BitNodes
<br /> <br />
Level {exploits.length} / ? Level {exploits.length} / {Object.keys(Exploit).length}
</Typography> </Typography>
} }
/> />

@ -566,7 +566,6 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.InfiltrationMoney = 3; BitNodeMultipliers.InfiltrationMoney = 3;
BitNodeMultipliers.FactionWorkRepGain = 0.5; BitNodeMultipliers.FactionWorkRepGain = 0.5;
BitNodeMultipliers.FactionPassiveRepGain = 0; BitNodeMultipliers.FactionPassiveRepGain = 0;
BitNodeMultipliers.GangKarmaRequirement = 0;
BitNodeMultipliers.PurchasedServerSoftcap = 1.3; BitNodeMultipliers.PurchasedServerSoftcap = 1.3;
break; break;
case 3: // Corporatocracy case 3: // Corporatocracy
@ -583,8 +582,8 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.HacknetNodeMoney = 0.25; BitNodeMultipliers.HacknetNodeMoney = 0.25;
BitNodeMultipliers.HomeComputerRamCost = 1.5; BitNodeMultipliers.HomeComputerRamCost = 1.5;
BitNodeMultipliers.PurchasedServerCost = 2; BitNodeMultipliers.PurchasedServerCost = 2;
BitNodeMultipliers.GangKarmaRequirement = 3;
BitNodeMultipliers.PurchasedServerSoftcap = 1.3; BitNodeMultipliers.PurchasedServerSoftcap = 1.3;
BitNodeMultipliers.GangSoftcap = 0.9;
break; break;
case 4: // The Singularity case 4: // The Singularity
BitNodeMultipliers.ServerMaxMoney = 0.15; BitNodeMultipliers.ServerMaxMoney = 0.15;
@ -629,8 +628,8 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.FactionPassiveRepGain = 0; BitNodeMultipliers.FactionPassiveRepGain = 0;
BitNodeMultipliers.HackExpGain = 0.25; BitNodeMultipliers.HackExpGain = 0.25;
BitNodeMultipliers.DaedalusAugsRequirement = 1.166; // Results in 35 Augs needed BitNodeMultipliers.DaedalusAugsRequirement = 1.166; // Results in 35 Augs needed
BitNodeMultipliers.GangKarmaRequirement = 5;
BitNodeMultipliers.PurchasedServerSoftcap = 2; BitNodeMultipliers.PurchasedServerSoftcap = 2;
BitNodeMultipliers.GangSoftcap = 0.7;
break; break;
case 7: // Bladeburner 2079 case 7: // Bladeburner 2079
BitNodeMultipliers.BladeburnerRank = 0.6; BitNodeMultipliers.BladeburnerRank = 0.6;
@ -651,8 +650,8 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.FourSigmaMarketDataCost = 2; BitNodeMultipliers.FourSigmaMarketDataCost = 2;
BitNodeMultipliers.FourSigmaMarketDataApiCost = 2; BitNodeMultipliers.FourSigmaMarketDataApiCost = 2;
BitNodeMultipliers.DaedalusAugsRequirement = 1.166; // Results in 35 Augs needed BitNodeMultipliers.DaedalusAugsRequirement = 1.166; // Results in 35 Augs needed
BitNodeMultipliers.GangKarmaRequirement = 5;
BitNodeMultipliers.PurchasedServerSoftcap = 2; BitNodeMultipliers.PurchasedServerSoftcap = 2;
BitNodeMultipliers.GangSoftcap = 0.7;
break; break;
case 8: // Ghost of Wall Street case 8: // Ghost of Wall Street
BitNodeMultipliers.ScriptHackMoney = 0.3; BitNodeMultipliers.ScriptHackMoney = 0.3;
@ -665,8 +664,8 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.RepToDonateToFaction = 0; BitNodeMultipliers.RepToDonateToFaction = 0;
BitNodeMultipliers.CorporationValuation = 0; BitNodeMultipliers.CorporationValuation = 0;
BitNodeMultipliers.CodingContractMoney = 0; BitNodeMultipliers.CodingContractMoney = 0;
BitNodeMultipliers.GangKarmaRequirement = 10;
BitNodeMultipliers.PurchasedServerSoftcap = 4; BitNodeMultipliers.PurchasedServerSoftcap = 4;
BitNodeMultipliers.GangSoftcap = 0;
break; break;
case 9: // Hacktocracy case 9: // Hacktocracy
BitNodeMultipliers.HackingLevelMultiplier = 0.4; BitNodeMultipliers.HackingLevelMultiplier = 0.4;
@ -688,7 +687,7 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.FourSigmaMarketDataApiCost = 4; BitNodeMultipliers.FourSigmaMarketDataApiCost = 4;
BitNodeMultipliers.BladeburnerRank = 0.9; BitNodeMultipliers.BladeburnerRank = 0.9;
BitNodeMultipliers.BladeburnerSkillCost = 1.2; BitNodeMultipliers.BladeburnerSkillCost = 1.2;
BitNodeMultipliers.GangKarmaRequirement = 3; BitNodeMultipliers.GangSoftcap = 0.8;
break; break;
case 10: // Digital Carbon case 10: // Digital Carbon
BitNodeMultipliers.HackingLevelMultiplier = 0.2; BitNodeMultipliers.HackingLevelMultiplier = 0.2;
@ -712,8 +711,8 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.PurchasedServerLimit = 0.6; BitNodeMultipliers.PurchasedServerLimit = 0.6;
BitNodeMultipliers.PurchasedServerMaxRam = 0.5; BitNodeMultipliers.PurchasedServerMaxRam = 0.5;
BitNodeMultipliers.BladeburnerRank = 0.8; BitNodeMultipliers.BladeburnerRank = 0.8;
BitNodeMultipliers.GangKarmaRequirement = 3;
BitNodeMultipliers.PurchasedServerSoftcap = 1.1; BitNodeMultipliers.PurchasedServerSoftcap = 1.1;
BitNodeMultipliers.GangSoftcap = 0.9;
break; break;
case 11: //The Big Crash case 11: //The Big Crash
BitNodeMultipliers.HackingLevelMultiplier = 0.5; BitNodeMultipliers.HackingLevelMultiplier = 0.5;
@ -801,6 +800,7 @@ export function initBitNodeMultipliers(p: IPlayer): void {
BitNodeMultipliers.BladeburnerRank = dec; BitNodeMultipliers.BladeburnerRank = dec;
BitNodeMultipliers.BladeburnerSkillCost = inc; BitNodeMultipliers.BladeburnerSkillCost = inc;
BitNodeMultipliers.GangSoftcap = dec;
break; break;
} }
default: default:

@ -110,9 +110,9 @@ interface IBitNodeMultipliers {
FourSigmaMarketDataCost: number; FourSigmaMarketDataCost: number;
/** /**
* Influences how much negative karma is required to create a gang in this bitnode. * Reduces gangs earning.
*/ */
GangKarmaRequirement: number; GangSoftcap: number;
/** /**
* Influences the experienced gained when hacking a server. * Influences the experienced gained when hacking a server.
@ -278,6 +278,7 @@ export const BitNodeMultipliers: IBitNodeMultipliers = {
BladeburnerRank: 1, BladeburnerRank: 1,
BladeburnerSkillCost: 1, BladeburnerSkillCost: 1,
GangSoftcap: 1,
DaedalusAugsRequirement: 1, DaedalusAugsRequirement: 1,
GangKarmaRequirement: 1,
}; };

@ -16,6 +16,7 @@ export enum Exploit {
Unclickable = "Unclickable", Unclickable = "Unclickable",
UndocumentedFunctionCall = "UndocumentedFunctionCall", UndocumentedFunctionCall = "UndocumentedFunctionCall",
TimeCompression = "TimeCompression", TimeCompression = "TimeCompression",
RealityAlteration = "RealityAlteration",
// To the players reading this. Yes you're supposed to add EditSaveFile by // To the players reading this. Yes you're supposed to add EditSaveFile by
// editing your save file, yes you could add them all, no we don't care // editing your save file, yes you could add them all, no we don't care
// that's not the point. // that's not the point.
@ -31,6 +32,7 @@ const names: {
TimeCompression: "by compressing time", TimeCompression: "by compressing time",
Unclickable: "by clicking the unclickable.", Unclickable: "by clicking the unclickable.",
UndocumentedFunctionCall: "by looking beyond the documentation.", UndocumentedFunctionCall: "by looking beyond the documentation.",
RealityAlteration: "by altering reality to suit your whims.",
}; };
export function ExploitName(exploit: string): string { export function ExploitName(exploit: string): string {

@ -42,6 +42,7 @@ export function AugmentationsPage(props: IProps): React.ReactElement {
const augs: string[] = []; const augs: string[] = [];
for (const augName in Augmentations) { for (const augName in Augmentations) {
if (augName === AugmentationNames.NeuroFluxGovernor) continue; if (augName === AugmentationNames.NeuroFluxGovernor) continue;
if (augName === AugmentationNames.TheRedPill && player.bitNodeN !== 2) continue;
const aug = Augmentations[augName]; const aug = Augmentations[augName];
if (!aug.isSpecial) { if (!aug.isSpecial) {
augs.push(augName); augs.push(augName);

@ -24,6 +24,7 @@ import { GangMember } from "./GangMember";
import { WorkerScript } from "../Netscript/WorkerScript"; import { WorkerScript } from "../Netscript/WorkerScript";
import { IPlayer } from "../PersonObjects/IPlayer"; import { IPlayer } from "../PersonObjects/IPlayer";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
export class Gang { export class Gang {
facName: string; facName: string;
@ -115,9 +116,10 @@ export class Gang {
wantedLevelGains += wantedLevelGain; wantedLevelGains += wantedLevelGain;
if (this.members[i].getTask().baseWanted < 0) justice++; // this member is lowering wanted. if (this.members[i].getTask().baseWanted < 0) justice++; // this member is lowering wanted.
} }
this.respectGainRate = respectGains; const territoryPenalty = (0.2 * this.getTerritory() + 0.8) * BitNodeMultipliers.GangSoftcap;
this.wantedGainRate = wantedLevelGains; this.respectGainRate = Math.pow(respectGains, territoryPenalty);
this.moneyGainRate = moneyGains; this.wantedGainRate = Math.pow(wantedLevelGains, territoryPenalty);
this.moneyGainRate = Math.pow(moneyGains, territoryPenalty);
const gain = respectGains * numCycles; const gain = respectGains * numCycles;
this.respect += gain; this.respect += gain;
// Faction reputation gains is respect gain divided by some constant // Faction reputation gains is respect gain divided by some constant

@ -63,7 +63,7 @@ export class GangMember {
} }
calculateAscensionMult(points: number): number { calculateAscensionMult(points: number): number {
return Math.max(Math.pow(points / 4000, 0.7), 1); return Math.max(Math.pow(points / 2000, 0.7), 1);
} }
updateSkillLevels(): void { updateSkillLevels(): void {

@ -6,7 +6,7 @@ export const GangConstants: {
Names: string[]; Names: string[];
} = { } = {
// Respect is divided by this to get rep gain // Respect is divided by this to get rep gain
GangRespectToReputationRatio: 25, GangRespectToReputationRatio: 75,
MaximumGangMembers: 12, MaximumGangMembers: 12,
CyclesPerTerritoryAndPowerUpdate: 100, CyclesPerTerritoryAndPowerUpdate: 100,
// Portion of upgrade multiplier that is kept after ascending // Portion of upgrade multiplier that is kept after ascending

@ -53,7 +53,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00005, baseRespect: 0.00005,
baseWanted: 0.0001, baseWanted: 0.0001,
baseMoney: 1, baseMoney: 3,
hackWeight: 100, hackWeight: 100,
difficulty: 1, difficulty: 1,
}, },
@ -66,7 +66,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00008, baseRespect: 0.00008,
baseWanted: 0.003, baseWanted: 0.003,
baseMoney: 2.5, baseMoney: 7.5,
hackWeight: 85, hackWeight: 85,
chaWeight: 15, chaWeight: 15,
difficulty: 3.5, difficulty: 3.5,
@ -80,7 +80,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.0001, baseRespect: 0.0001,
baseWanted: 0.075, baseWanted: 0.075,
baseMoney: 6, baseMoney: 18,
hackWeight: 80, hackWeight: 80,
chaWeight: 20, chaWeight: 20,
difficulty: 5, difficulty: 5,
@ -118,7 +118,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.0004, baseRespect: 0.0004,
baseWanted: 0.3, baseWanted: 0.3,
baseMoney: 15, baseMoney: 45,
hackWeight: 80, hackWeight: 80,
chaWeight: 20, chaWeight: 20,
difficulty: 20, difficulty: 20,
@ -132,7 +132,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.001, baseRespect: 0.001,
baseWanted: 1.25, baseWanted: 1.25,
baseMoney: 120, baseMoney: 360,
hackWeight: 75, hackWeight: 75,
chaWeight: 25, chaWeight: 25,
difficulty: 25, difficulty: 25,
@ -158,7 +158,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
name: "Ethical Hacking", name: "Ethical Hacking",
params: { params: {
baseWanted: -0.001, baseWanted: -0.001,
baseMoney: 1, baseMoney: 3,
hackWeight: 90, hackWeight: 90,
chaWeight: 10, chaWeight: 10,
difficulty: 1, difficulty: 1,
@ -172,7 +172,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00005, baseRespect: 0.00005,
baseWanted: 0.00005, baseWanted: 0.00005,
baseMoney: 1.2, baseMoney: 3.6,
strWeight: 25, strWeight: 25,
defWeight: 25, defWeight: 25,
dexWeight: 25, dexWeight: 25,
@ -189,7 +189,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00006, baseRespect: 0.00006,
baseWanted: 0.002, baseWanted: 0.002,
baseMoney: 5, baseMoney: 15,
agiWeight: 20, agiWeight: 20,
dexWeight: 20, dexWeight: 20,
chaWeight: 60, chaWeight: 60,
@ -209,7 +209,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00004, baseRespect: 0.00004,
baseWanted: 0.02, baseWanted: 0.02,
baseMoney: 2.5, baseMoney: 7.5,
hackWeight: 10, hackWeight: 10,
strWeight: 25, strWeight: 25,
defWeight: 25, defWeight: 25,
@ -232,7 +232,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00012, baseRespect: 0.00012,
baseWanted: 0.05, baseWanted: 0.05,
baseMoney: 15, baseMoney: 45,
strWeight: 5, strWeight: 5,
defWeight: 5, defWeight: 5,
agiWeight: 25, agiWeight: 25,
@ -249,7 +249,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.00014, baseRespect: 0.00014,
baseWanted: 0.1, baseWanted: 0.1,
baseMoney: 38, baseMoney: 114,
hackWeight: 20, hackWeight: 20,
strWeight: 15, strWeight: 15,
defWeight: 15, defWeight: 15,
@ -267,7 +267,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.0002, baseRespect: 0.0002,
baseWanted: 0.24, baseWanted: 0.24,
baseMoney: 58, baseMoney: 174,
hackWeight: 15, hackWeight: 15,
strWeight: 20, strWeight: 20,
defWeight: 20, defWeight: 20,
@ -289,7 +289,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.0002, baseRespect: 0.0002,
baseWanted: 0.125, baseWanted: 0.125,
baseMoney: 24, baseMoney: 72,
hackWeight: 25, hackWeight: 25,
strWeight: 25, strWeight: 25,
dexWeight: 25, dexWeight: 25,
@ -305,7 +305,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
params: { params: {
baseRespect: 0.004, baseRespect: 0.004,
baseWanted: 1.25, baseWanted: 1.25,
baseMoney: 120, baseMoney: 360,
hackWeight: 30, hackWeight: 30,
strWeight: 5, strWeight: 5,
defWeight: 5, defWeight: 5,

@ -8,6 +8,7 @@ export interface INetscriptExtra {
}; };
exploit(): void; exploit(): void;
bypass(doc: Document): void; bypass(doc: Document): void;
alterReality(): void;
} }
export function NetscriptExtra(player: IPlayer, workerScript: WorkerScript): INetscriptExtra { export function NetscriptExtra(player: IPlayer, workerScript: WorkerScript): INetscriptExtra {
@ -34,5 +35,13 @@ export function NetscriptExtra(player: IPlayer, workerScript: WorkerScript): INe
doc.completely_unused_field = undefined; doc.completely_unused_field = undefined;
real_document.completely_unused_field = undefined; real_document.completely_unused_field = undefined;
}, },
alterReality: function (): void {
const x = false;
console.warn("I am sure that this variable is false");
if (x !== false) {
console.warn("Reality has been altered!");
player.giveExploit(Exploit.RealityAlteration);
}
},
}; };
} }

@ -2,7 +2,6 @@ import { Factions } from "../../Faction/Factions";
import { Faction } from "../../Faction/Faction"; import { Faction } from "../../Faction/Faction";
import { Gang } from "../../Gang/Gang"; import { Gang } from "../../Gang/Gang";
import { SourceFileFlags } from "../../SourceFile/SourceFileFlags"; import { SourceFileFlags } from "../../SourceFile/SourceFileFlags";
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
import { IPlayer } from "../IPlayer"; import { IPlayer } from "../IPlayer";
// Amount of negative karma needed to manage a gang in BitNodes other than 2 // Amount of negative karma needed to manage a gang in BitNodes other than 2
@ -16,7 +15,7 @@ export function canAccessGang(this: IPlayer): boolean {
return false; return false;
} }
return this.karma <= BitNodeMultipliers.GangKarmaRequirement * GangKarmaRequirement; return this.karma <= GangKarmaRequirement;
} }
export function getGangFaction(this: IPlayer): Faction { export function getGangFaction(this: IPlayer): Faction {