Merge pull request #3412 from danielyxie/stanek-improvements

few stanek improvements.
This commit is contained in:
hydroflame 2022-04-12 17:19:43 -04:00 committed by GitHub
commit 95cbd79fa9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 251 additions and 370 deletions

@ -81,7 +81,6 @@ export function hasAugmentationPrereqs(aug: Augmentation): boolean {
} }
export function purchaseAugmentation(aug: Augmentation, fac: Faction, sing = false): string { export function purchaseAugmentation(aug: Augmentation, fac: Faction, sing = false): string {
const factionInfo = fac.getInfo();
const hasPrereqs = hasAugmentationPrereqs(aug); const hasPrereqs = hasAugmentationPrereqs(aug);
if (!hasPrereqs) { if (!hasPrereqs) {
const txt = `You must first purchase or install ${aug.prereqs.join(",")} before you can purchase this one.`; const txt = `You must first purchase or install ${aug.prereqs.join(",")} before you can purchase this one.`;
@ -90,7 +89,7 @@ export function purchaseAugmentation(aug: Augmentation, fac: Faction, sing = fal
} else { } else {
dialogBoxCreate(txt); dialogBoxCreate(txt);
} }
} else if (aug.baseCost !== 0 && Player.money < aug.baseCost * factionInfo.augmentationPriceMult) { } else if (aug.baseCost !== 0 && Player.money < aug.baseCost) {
const txt = "You don't have enough money to purchase " + aug.name; const txt = "You don't have enough money to purchase " + aug.name;
if (sing) { if (sing) {
return txt; return txt;
@ -102,14 +101,14 @@ export function purchaseAugmentation(aug: Augmentation, fac: Faction, sing = fal
return txt; return txt;
} }
dialogBoxCreate(txt); dialogBoxCreate(txt);
} else if (aug.baseCost === 0 || Player.money >= aug.baseCost * factionInfo.augmentationPriceMult) { } else if (aug.baseCost === 0 || Player.money >= aug.baseCost) {
const queuedAugmentation = new PlayerOwnedAugmentation(aug.name); const queuedAugmentation = new PlayerOwnedAugmentation(aug.name);
if (aug.name == AugmentationNames.NeuroFluxGovernor) { if (aug.name == AugmentationNames.NeuroFluxGovernor) {
queuedAugmentation.level = getNextNeurofluxLevel(); queuedAugmentation.level = getNextNeurofluxLevel();
} }
Player.queuedAugmentations.push(queuedAugmentation); Player.queuedAugmentations.push(queuedAugmentation);
Player.loseMoney(aug.baseCost * factionInfo.augmentationPriceMult, "augmentations"); Player.loseMoney(aug.baseCost, "augmentations");
// If you just purchased Neuroflux Governor, recalculate the cost // If you just purchased Neuroflux Governor, recalculate the cost
if (aug.name == AugmentationNames.NeuroFluxGovernor) { if (aug.name == AugmentationNames.NeuroFluxGovernor) {

@ -2,20 +2,20 @@ import React from "react";
import { IMap } from "../types"; import { IMap } from "../types";
import { FactionNames } from "./data/FactionNames"; import { FactionNames } from "./data/FactionNames";
interface FactionInfoParams {
infoText?: JSX.Element;
enemies?: string[];
offerHackingWork?: boolean;
offerFieldWork?: boolean;
offerSecurityWork?: boolean;
special?: boolean;
keepOnInstall?: boolean;
}
/** /**
* Contains the "information" property for all the Factions, which is just a description of each faction * Contains the "information" property for all the Factions, which is just a description of each faction
*/ */
export class FactionInfo { export class FactionInfo {
/**
* The multiplier to apply to augmentation base purchase price.
*/
augmentationPriceMult: number;
/**
* The multiplier to apply to augmentation reputation base requirement.
*/
augmentationRepRequirementMult: number;
/** /**
* The names of all other factions considered to be enemies to this faction. * The names of all other factions considered to be enemies to this faction.
*/ */
@ -31,11 +31,6 @@ export class FactionInfo {
*/ */
offerFieldWork: boolean; offerFieldWork: boolean;
/**
* A flag indicating if the faction supports hacking missions to earn reputation.
*/
offerHackingMission: boolean;
/** /**
* A flag indicating if the faction supports hacking work to earn reputation. * A flag indicating if the faction supports hacking work to earn reputation.
*/ */
@ -56,32 +51,19 @@ export class FactionInfo {
*/ */
special: boolean; special: boolean;
constructor( constructor(params: FactionInfoParams) {
infoText: JSX.Element, this.infoText = params.infoText ?? <></>;
enemies: string[], this.enemies = params.enemies ?? [];
offerHackingMission: boolean, this.offerHackingWork = params.offerHackingWork ?? false;
offerHackingWork: boolean, this.offerFieldWork = params.offerFieldWork ?? false;
offerFieldWork: boolean, this.offerSecurityWork = params.offerSecurityWork ?? false;
offerSecurityWork: boolean,
special: boolean,
keep: boolean,
) {
this.infoText = infoText;
this.enemies = enemies;
this.offerHackingMission = offerHackingMission;
this.offerHackingWork = offerHackingWork;
this.offerFieldWork = offerFieldWork;
this.offerSecurityWork = offerSecurityWork;
// These are always all 1 for now. this.keep = params.keepOnInstall ?? false;
this.augmentationPriceMult = 1; this.special = params.special ?? false;
this.augmentationRepRequirementMult = 1;
this.keep = keep;
this.special = special;
} }
offersWork(): boolean { offersWork(): boolean {
return this.offerFieldWork || this.offerHackingMission || this.offerHackingWork || this.offerSecurityWork; return this.offerFieldWork || this.offerHackingWork || this.offerSecurityWork;
} }
} }
@ -91,35 +73,25 @@ export class FactionInfo {
// tslint:disable-next-line:variable-name // tslint:disable-next-line:variable-name
export const FactionInfos: IMap<FactionInfo> = { export const FactionInfos: IMap<FactionInfo> = {
// Endgame // Endgame
[FactionNames.Illuminati]: new FactionInfo( [FactionNames.Illuminati]: new FactionInfo({
( infoText: (
<> <>
Humanity never changes. No matter how civilized society becomes, it will eventually fall back into chaos. And Humanity never changes. No matter how civilized society becomes, it will eventually fall back into chaos. And
from this chaos, we are the invisible hand that guides them to order.{" "} from this chaos, we are the invisible hand that guides them to order.{" "}
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
[FactionNames.Daedalus]: new FactionInfo( [FactionNames.Daedalus]: new FactionInfo({
<>Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.</>, infoText: <>Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
[FactionNames.TheCovenant]: new FactionInfo( [FactionNames.TheCovenant]: new FactionInfo({
( infoText: (
<> <>
Surrender yourself. Give up your empty individuality to become part of something great, something eternal. Surrender yourself. Give up your empty individuality to become part of something great, something eternal.
Become a slave. Submit your mind, body, and soul. Only then can you set yourself free. Become a slave. Submit your mind, body, and soul. Only then can you set yourself free.
@ -128,35 +100,27 @@ export const FactionInfos: IMap<FactionInfo> = {
Only then can you discover immortality. Only then can you discover immortality.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
// Megacorporations, each forms its own faction // Megacorporations, each forms its own faction
[FactionNames.ECorp]: new FactionInfo( [FactionNames.ECorp]: new FactionInfo({
( infoText: (
<> <>
{FactionNames.ECorp}'s mission is simple: to connect the world of today with the technology of tomorrow. With {FactionNames.ECorp}'s mission is simple: to connect the world of today with the technology of tomorrow. With
our wide range of Internet-related software and commercial hardware, {FactionNames.ECorp} makes the world's our wide range of Internet-related software and commercial hardware, {FactionNames.ECorp} makes the world's
information universally accessible. information universally accessible.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.MegaCorp]: new FactionInfo( [FactionNames.MegaCorp]: new FactionInfo({
( infoText: (
<> <>
{FactionNames.MegaCorp} does what no other dares to do. We imagine. We create. We invent. We create what others {FactionNames.MegaCorp} does what no other dares to do. We imagine. We create. We invent. We create what others
have never even dreamed of. Our work fills the world's needs for food, water, power, and transportation on an have never even dreamed of. Our work fills the world's needs for food, water, power, and transportation on an
@ -167,17 +131,14 @@ export const FactionInfos: IMap<FactionInfo> = {
the world. the world.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.BachmanAssociates]: new FactionInfo( [FactionNames.BachmanAssociates]: new FactionInfo({
( infoText: (
<> <>
Where Law and Business meet - thats where we are. Where Law and Business meet - thats where we are.
<br /> <br />
@ -185,112 +146,87 @@ export const FactionInfos: IMap<FactionInfo> = {
Legal Insight - Business Instinct - Innovative Experience. Legal Insight - Business Instinct - Innovative Experience.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.BladeIndustries]: new FactionInfo( [FactionNames.BladeIndustries]: new FactionInfo({
<>Augmentation is Salvation.</>, infoText: <>Augmentation is Salvation.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.NWO]: new FactionInfo( [FactionNames.NWO]: new FactionInfo({
( infoText: (
<> <>
Humans don't truly desire freedom. They want to be observed, understood, and judged. They want to be given Humans don't truly desire freedom. They want to be observed, understood, and judged. They want to be given
purpose and direction in life. That is why they created God. And that is why they created civilization - not purpose and direction in life. That is why they created God. And that is why they created civilization - not
because of willingness, but because of a need to be incorporated into higher orders of structure and meaning. because of willingness, but because of a need to be incorporated into higher orders of structure and meaning.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.ClarkeIncorporated]: new FactionInfo( [FactionNames.ClarkeIncorporated]: new FactionInfo({
<>The Power of the Genome - Unlocked.</>, infoText: <>The Power of the Genome - Unlocked.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.OmniTekIncorporated]: new FactionInfo( [FactionNames.OmniTekIncorporated]: new FactionInfo({
<>Simply put, our mission is to design and build robots that make a difference.</>, infoText: <>Simply put, our mission is to design and build robots that make a difference.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.FourSigma]: new FactionInfo( [FactionNames.FourSigma]: new FactionInfo({
( infoText: (
<> <>
The scientific method is the best way to approach investing. Big strategies backed up with big data. Driven by The scientific method is the best way to approach investing. Big strategies backed up with big data. Driven by
deep learning and innovative ideas. And improved by iteration. That's {FactionNames.FourSigma}. deep learning and innovative ideas. And improved by iteration. That's {FactionNames.FourSigma}.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
[FactionNames.KuaiGongInternational]: new FactionInfo( [FactionNames.KuaiGongInternational]: new FactionInfo({
<>Dream big. Work hard. Make history.</>, infoText: <>Dream big. Work hard. Make history.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
true, }),
false,
true,
),
// Other Corporations // Other Corporations
[FactionNames.FulcrumSecretTechnologies]: new FactionInfo( [FactionNames.FulcrumSecretTechnologies]: new FactionInfo({
( infoText: (
<> <>
The human organism has an innate desire to worship. That is why they created gods. If there were no gods, it The human organism has an innate desire to worship. That is why they created gods. If there were no gods, it
would be necessary to create them. And now we can. would be necessary to create them. And now we can.
</> </>
), ),
[], offerHackingWork: true,
true, offerSecurityWork: true,
true, keepOnInstall: true,
false, }),
true,
false,
true,
),
// Hacker groups // Hacker groups
[FactionNames.BitRunners]: new FactionInfo( [FactionNames.BitRunners]: new FactionInfo({
( infoText: (
<> <>
Our entire lives are controlled by bits. All of our actions, our thoughts, our personal information. It's all Our entire lives are controlled by bits. All of our actions, our thoughts, our personal information. It's all
transformed into bits, stored in bits, communicated through bits. Its impossible for any person to move, to transformed into bits, stored in bits, communicated through bits. Its impossible for any person to move, to
@ -302,17 +238,11 @@ export const FactionInfos: IMap<FactionInfo> = {
Those who run the bits, run the world. Those who run the bits, run the world.
</> </>
), ),
[], offerHackingWork: true,
true, }),
true,
false,
false,
false,
false,
),
[FactionNames.TheBlackHand]: new FactionInfo( [FactionNames.TheBlackHand]: new FactionInfo({
( infoText: (
<> <>
The world, so afraid of strong government, now has no government. Only power - Digital power. Financial power. The world, so afraid of strong government, now has no government. Only power - Digital power. Financial power.
Technological power. And those at the top rule with an invisible hand. They built a society where the rich get Technological power. And those at the top rule with an invisible hand. They built a society where the rich get
@ -322,17 +252,13 @@ export const FactionInfos: IMap<FactionInfo> = {
So much pain. So many lives. Their darkness must end. So much pain. So many lives. Their darkness must end.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
// prettier-ignore // prettier-ignore
[FactionNames.NiteSec]: new FactionInfo(<> [FactionNames.NiteSec]: new FactionInfo({
infoText:(<>
{" __..__ "}<br /> {" __..__ "}<br />
{" _.nITESECNIt. "}<br /> {" _.nITESECNIt. "}<br />
{" .-'NITESECNITESEc. "}<br /> {" .-'NITESECNITESEc. "}<br />
@ -367,105 +293,87 @@ export const FactionInfos: IMap<FactionInfo> = {
{" / .d/$/$; , ; "}<br /> {" / .d/$/$; , ; "}<br />
{" d .dNITESEC $ | "}<br /> {" d .dNITESEC $ | "}<br />
{" :bp.__.gNITESEC/$ :$ ; "}<br /> {" :bp.__.gNITESEC/$ :$ ; "}<br />
{" NITESECNITESECNIT /$b : "}<br /></>, {" NITESECNITESECNIT /$b : "}<br /></>),
[], offerHackingWork: true,
true, offerFieldWork: false,
true, offerSecurityWork: false,
false, special: false,
false, keepOnInstall: false,
false, }),
false,
),
// City factions, essentially governments // City factions, essentially governments
[FactionNames.Aevum]: new FactionInfo( [FactionNames.Aevum]: new FactionInfo({
<>The Silicon City.</>, infoText: <>The Silicon City.</>,
[FactionNames.Chongqing, FactionNames.NewTokyo, FactionNames.Ishima, FactionNames.Volhaven], enemies: [FactionNames.Chongqing, FactionNames.NewTokyo, FactionNames.Ishima, FactionNames.Volhaven],
true, offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, }),
false, [FactionNames.Chongqing]: new FactionInfo({
false, infoText: <>Serve the People.</>,
), enemies: [FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven],
[FactionNames.Chongqing]: new FactionInfo( offerHackingWork: true,
<>Serve the People.</>, offerFieldWork: true,
[FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven], offerSecurityWork: true,
true, }),
true, [FactionNames.Ishima]: new FactionInfo({
true, infoText: <>The East Asian Order of the Future.</>,
true, enemies: [FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven],
false, offerHackingWork: true,
false, offerFieldWork: true,
), offerSecurityWork: true,
[FactionNames.Ishima]: new FactionInfo( }),
<>The East Asian Order of the Future.</>, [FactionNames.NewTokyo]: new FactionInfo({
[FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven], infoText: <>Asia's World City.</>,
true, enemies: [FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven],
true, offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
false, }),
false, [FactionNames.Sector12]: new FactionInfo({
), infoText: <>The City of the Future.</>,
[FactionNames.NewTokyo]: new FactionInfo( enemies: [FactionNames.Chongqing, FactionNames.NewTokyo, FactionNames.Ishima, FactionNames.Volhaven],
<>Asia's World City.</>, offerHackingWork: true,
[FactionNames.Sector12, FactionNames.Aevum, FactionNames.Volhaven], offerFieldWork: true,
true, offerSecurityWork: true,
true, }),
true, [FactionNames.Volhaven]: new FactionInfo({
true, infoText: <>Benefit, Honor, and Glory.</>,
false, enemies: [
false, FactionNames.Chongqing,
), FactionNames.Sector12,
[FactionNames.Sector12]: new FactionInfo( FactionNames.NewTokyo,
<>The City of the Future.</>, FactionNames.Aevum,
[FactionNames.Chongqing, FactionNames.NewTokyo, FactionNames.Ishima, FactionNames.Volhaven], FactionNames.Ishima,
true, ],
true, offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
false, }),
false,
),
[FactionNames.Volhaven]: new FactionInfo(
<>Benefit, Honor, and Glory.</>,
[FactionNames.Chongqing, FactionNames.Sector12, FactionNames.NewTokyo, FactionNames.Aevum, FactionNames.Ishima],
true,
true,
true,
true,
false,
false,
),
// Criminal Organizations/Gangs // Criminal Organizations/Gangs
[FactionNames.SpeakersForTheDead]: new FactionInfo( [FactionNames.SpeakersForTheDead]: new FactionInfo({
<>It is better to reign in Hell than to serve in Heaven.</>, infoText: <>It is better to reign in Hell than to serve in Heaven.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, offerSecurityWork: true,
true, }),
true,
false,
false,
),
[FactionNames.TheDarkArmy]: new FactionInfo( [FactionNames.TheDarkArmy]: new FactionInfo({
<>The World doesn't care about right or wrong. It only cares about power.</>, infoText: <>The World doesn't care about right or wrong. It only cares about power.</>,
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
[FactionNames.TheSyndicate]: new FactionInfo(<>Honor holds you back.</>, [], true, true, true, true, false, false), [FactionNames.TheSyndicate]: new FactionInfo({
infoText: <>Honor holds you back.</>,
offerHackingWork: true,
offerFieldWork: true,
offerSecurityWork: true,
}),
[FactionNames.Silhouette]: new FactionInfo( [FactionNames.Silhouette]: new FactionInfo({
( infoText: (
<> <>
Corporations have filled the void of power left behind by the collapse of Western government. The issue is Corporations have filled the void of power left behind by the collapse of Western government. The issue is
they've become so big that you don't know who they're working for. And if you're employed at one of these they've become so big that you don't know who they're working for. And if you're employed at one of these
@ -475,80 +383,51 @@ export const FactionInfos: IMap<FactionInfo> = {
That's terror. Terror, fear, and corruption. All born into the system, all propagated by the system. That's terror. Terror, fear, and corruption. All born into the system, all propagated by the system.
</> </>
), ),
[], offerHackingWork: true,
true, offerFieldWork: true,
true, }),
true,
false,
false,
false,
),
[FactionNames.Tetrads]: new FactionInfo( [FactionNames.Tetrads]: new FactionInfo({
<>Following the mandate of Heaven and carrying out the way.</>, infoText: <>Following the mandate of Heaven and carrying out the way.</>,
[],
false,
false,
true,
true,
false,
false,
),
[FactionNames.SlumSnakes]: new FactionInfo( offerFieldWork: true,
<>{FactionNames.SlumSnakes} rule!</>, offerSecurityWork: true,
[], }),
false,
false, [FactionNames.SlumSnakes]: new FactionInfo({
true, infoText: <>{FactionNames.SlumSnakes} rule!</>,
true,
false, offerFieldWork: true,
false, offerSecurityWork: true,
), }),
// Earlygame factions - factions the player will prestige with early on that don't belong in other categories. // Earlygame factions - factions the player will prestige with early on that don't belong in other categories.
[FactionNames.Netburners]: new FactionInfo( [FactionNames.Netburners]: new FactionInfo({
<>{"~~//*>H4CK||3T 8URN3R5**>?>\\~~"}</>, infoText: <>{"~~//*>H4CK||3T 8URN3R5**>?>\\~~"}</>,
[], offerHackingWork: true,
true, }),
true,
false,
false,
false,
false,
),
[FactionNames.TianDiHui]: new FactionInfo( [FactionNames.TianDiHui]: new FactionInfo({
<>Obey Heaven and work righteously.</>, infoText: <>Obey Heaven and work righteously.</>,
[], offerHackingWork: true,
true,
true,
false,
true,
false,
false,
),
[FactionNames.CyberSec]: new FactionInfo( offerSecurityWork: true,
( }),
[FactionNames.CyberSec]: new FactionInfo({
infoText: (
<> <>
The Internet is the first thing that was built that we don't fully understand, the largest experiment in anarchy The Internet is the first thing that was built that we don't fully understand, the largest experiment in anarchy
that we have ever had. And as the world becomes increasingly dominated by it, society approaches the brink of that we have ever had. And as the world becomes increasingly dominated by it, society approaches the brink of
total chaos. We serve only to protect society, to protect humanity, to protect the world from imminent collapse. total chaos. We serve only to protect society, to protect humanity, to protect the world from imminent collapse.
</> </>
), ),
[], offerHackingWork: true,
true, }),
true,
false,
false,
false,
false,
),
// Special Factions // Special Factions
[FactionNames.Bladeburners]: new FactionInfo( [FactionNames.Bladeburners]: new FactionInfo({
( infoText: (
<> <>
It's too bad they won't live. But then again, who does? It's too bad they won't live. But then again, who does?
<br /> <br />
@ -557,17 +436,13 @@ export const FactionInfos: IMap<FactionInfo> = {
Completing {FactionNames.Bladeburners} contracts/operations will increase your reputation. Completing {FactionNames.Bladeburners} contracts/operations will increase your reputation.
</> </>
), ),
[],
false, special: true,
false, }),
false,
false,
true,
false,
),
// prettier-ignore // prettier-ignore
[FactionNames.ChurchOfTheMachineGod]: new FactionInfo(<> [FactionNames.ChurchOfTheMachineGod]: new FactionInfo({
infoText:(<>
{" `` "}<br /> {" `` "}<br />
{" -odmmNmds: "}<br /> {" -odmmNmds: "}<br />
{" `hNmo:..-omNh. "}<br /> {" `hNmo:..-omNh. "}<br />
@ -599,13 +474,11 @@ export const FactionInfos: IMap<FactionInfo> = {
Many cultures predict an end to humanity in the near future, a final Many cultures predict an end to humanity in the near future, a final
Armageddon that will end the world; but we disagree. Armageddon that will end the world; but we disagree.
<br /><br />Note that for this faction, reputation can <br /><br />Note that for this faction, reputation can
only be gained by charging Stanek's gift.</>, only be gained by charging Stanek's gift.</>),
[], offerHackingWork: false,
false, offerFieldWork: false,
false, offerSecurityWork: false,
false, special: true,
false, keepOnInstall: true,
true, }),
true,
),
}; };

@ -78,10 +78,10 @@ export function AugmentationsPage(props: IProps): React.ReactElement {
const augs = getAugs(); const augs = getAugs();
function canBuy(augName: string): boolean { function canBuy(augName: string): boolean {
const aug = Augmentations[augName]; const aug = Augmentations[augName];
const repCost = aug.baseRepRequirement * props.faction.getInfo().augmentationRepRequirementMult; const repCost = aug.baseRepRequirement;
const hasReq = props.faction.playerReputation >= repCost; const hasReq = props.faction.playerReputation >= repCost;
const hasRep = hasAugmentationPrereqs(aug); const hasRep = hasAugmentationPrereqs(aug);
const hasCost = aug.baseCost !== 0 && player.money > aug.baseCost * props.faction.getInfo().augmentationPriceMult; const hasCost = aug.baseCost !== 0 && player.money > aug.baseCost;
return hasCost && hasReq && hasRep; return hasCost && hasReq && hasRep;
} }
const buy = augs.filter(canBuy).sort((augName1, augName2) => { const buy = augs.filter(canBuy).sort((augName1, augName2) => {

@ -20,7 +20,6 @@ interface IProps {
export function PurchaseAugmentationModal(props: IProps): React.ReactElement { export function PurchaseAugmentationModal(props: IProps): React.ReactElement {
const player = use.Player(); const player = use.Player();
const factionInfo = props.faction.getInfo();
function buy(): void { function buy(): void {
if (!isRepeatableAug(props.aug) && player.hasAugmentation(props.aug)) { if (!isRepeatableAug(props.aug) && player.hasAugmentation(props.aug)) {
@ -43,7 +42,7 @@ export function PurchaseAugmentationModal(props: IProps): React.ReactElement {
<br /> <br />
<br /> <br />
Would you like to purchase the {props.aug.name} Augmentation for&nbsp; Would you like to purchase the {props.aug.name} Augmentation for&nbsp;
<Money money={props.aug.baseCost * factionInfo.augmentationPriceMult} />? <Money money={props.aug.baseCost} />?
<br /> <br />
<br /> <br />
</Typography> </Typography>

@ -84,11 +84,11 @@ export function PurchaseableAugmentation(props: IProps): React.ReactElement {
return <></>; return <></>;
} }
const moneyCost = aug.baseCost * props.faction.getInfo().augmentationPriceMult; const moneyCost = aug.baseCost;
const repCost = aug.baseRepRequirement * props.faction.getInfo().augmentationRepRequirementMult; const repCost = aug.baseRepRequirement;
const hasReq = hasAugmentationPrereqs(aug); const hasReq = hasAugmentationPrereqs(aug);
const hasRep = props.faction.playerReputation >= repCost; const hasRep = props.faction.playerReputation >= repCost;
const hasCost = aug.baseCost === 0 || props.p.money > aug.baseCost * props.faction.getInfo().augmentationPriceMult; const hasCost = aug.baseCost === 0 || props.p.money > aug.baseCost;
// Determine UI properties // Determine UI properties
const color: "error" | "primary" = !hasReq || !hasRep || !hasCost ? "error" : "primary"; const color: "error" | "primary" = !hasReq || !hasRep || !hasCost ? "error" : "primary";

@ -174,10 +174,11 @@ export function SpecialLocation(props: IProps): React.ReactElement {
applyAugmentation({ name: AugmentationNames.StaneksGift1, level: 1 }); applyAugmentation({ name: AugmentationNames.StaneksGift1, level: 1 });
} }
router.toFaction(faction); router.toStaneksGift();
} }
function renderCotMG(): React.ReactElement { function renderCotMG(): React.ReactElement {
const toStanek = <Button onClick={() => router.toStaneksGift()}>Open Stanek's Gift</Button>;
// prettier-ignore // prettier-ignore
const symbol = <Typography sx={{ lineHeight: '1em', whiteSpace: 'pre' }}> const symbol = <Typography sx={{ lineHeight: '1em', whiteSpace: 'pre' }}>
{" `` "}<br /> {" `` "}<br />
@ -218,6 +219,9 @@ export function SpecialLocation(props: IProps): React.ReactElement {
seems. Curious, Just how much of a machine's soul do you house in that body? seems. Curious, Just how much of a machine's soul do you house in that body?
</i> </i>
</Typography> </Typography>
<br />
{toStanek}
<br />
{symbol} {symbol}
</> </>
); );
@ -232,6 +236,9 @@ export function SpecialLocation(props: IProps): React.ReactElement {
mastery of the gift clearly demonstrates that. My hopes are climbing by the day for you. mastery of the gift clearly demonstrates that. My hopes are climbing by the day for you.
</i> </i>
</Typography> </Typography>
<br />
{toStanek}
<br />
{symbol} {symbol}
</> </>
); );
@ -242,6 +249,9 @@ export function SpecialLocation(props: IProps): React.ReactElement {
<Typography> <Typography>
<i>Allison "Mother" Stanek: Welcome back my child!</i> <i>Allison "Mother" Stanek: Welcome back my child!</i>
</Typography> </Typography>
<br />
{toStanek}
<br />
{symbol} {symbol}
</> </>
); );