From f182030385cc4e55b3b8c46701c536f216698d8e Mon Sep 17 00:00:00 2001 From: catloversg <152669316+catloversg@users.noreply.github.com> Date: Sat, 12 Jul 2025 02:55:46 +0700 Subject: [PATCH] CORPORATION: Use different term for dividend modifier instead of tax (#2237) --- .../bitburner.corporationinfo.dividendtax.md | 13 ------ markdown/bitburner.corporationinfo.md | 2 +- ...tburner.corporationinfo.tributemodifier.md | 13 ++++++ src/Achievements/AchievementData.json | 2 +- src/Corporation/Corporation.ts | 14 ++++-- src/Corporation/data/CorporationUnlocks.ts | 6 +-- src/Corporation/ui/Overview.tsx | 44 ++++++++++++++++++- .../ui/modals/IssueDividendsModal.tsx | 2 +- .../doc/advanced/corporation/faq.md | 2 +- .../corporation/financial-statement.md | 12 ++--- src/Documentation/pages.ts | 4 +- src/NetscriptFunctions/Corporation.ts | 2 +- src/ScriptEditor/NetscriptDefinitions.d.ts | 4 +- src/utils/APIBreaks/3.0.0.ts | 7 +++ test/jest/__snapshots__/FullSave.test.ts.snap | 2 +- 15 files changed, 92 insertions(+), 37 deletions(-) delete mode 100644 markdown/bitburner.corporationinfo.dividendtax.md create mode 100644 markdown/bitburner.corporationinfo.tributemodifier.md diff --git a/markdown/bitburner.corporationinfo.dividendtax.md b/markdown/bitburner.corporationinfo.dividendtax.md deleted file mode 100644 index f6f0d9b21..000000000 --- a/markdown/bitburner.corporationinfo.dividendtax.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bitburner](./bitburner.md) > [CorporationInfo](./bitburner.corporationinfo.md) > [dividendTax](./bitburner.corporationinfo.dividendtax.md) - -## CorporationInfo.dividendTax property - -Tax applied on your earnings as a shareholder - -**Signature:** - -```typescript -dividendTax: number; -``` diff --git a/markdown/bitburner.corporationinfo.md b/markdown/bitburner.corporationinfo.md index ce4948c59..d3a33c7e5 100644 --- a/markdown/bitburner.corporationinfo.md +++ b/markdown/bitburner.corporationinfo.md @@ -18,7 +18,6 @@ interface CorporationInfo | --- | --- | --- | --- | | [dividendEarnings](./bitburner.corporationinfo.dividendearnings.md) | | number | Your earnings as a shareholder per second this cycle | | [dividendRate](./bitburner.corporationinfo.dividendrate.md) | | number | Fraction of profits issued as dividends | -| [dividendTax](./bitburner.corporationinfo.dividendtax.md) | | number | Tax applied on your earnings as a shareholder | | [divisions](./bitburner.corporationinfo.divisions.md) | | string\[\] | Array of all division names | | [expenses](./bitburner.corporationinfo.expenses.md) | | number | Expenses per second this cycle | | [funds](./bitburner.corporationinfo.funds.md) | | number | Funds available | @@ -34,5 +33,6 @@ interface CorporationInfo | [sharePrice](./bitburner.corporationinfo.shareprice.md) | | number | Price of the shares | | [shareSaleCooldown](./bitburner.corporationinfo.sharesalecooldown.md) | | number | Cooldown until shares can be sold again | | [totalShares](./bitburner.corporationinfo.totalshares.md) | | number | Total number of shares issued by this corporation. | +| [tributeModifier](./bitburner.corporationinfo.tributemodifier.md) | | number | Your income from dividend is negatively affected by this penalty modifier | | [valuation](./bitburner.corporationinfo.valuation.md) | | number | Corporation valuation | diff --git a/markdown/bitburner.corporationinfo.tributemodifier.md b/markdown/bitburner.corporationinfo.tributemodifier.md new file mode 100644 index 000000000..f2edabde4 --- /dev/null +++ b/markdown/bitburner.corporationinfo.tributemodifier.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [bitburner](./bitburner.md) > [CorporationInfo](./bitburner.corporationinfo.md) > [tributeModifier](./bitburner.corporationinfo.tributemodifier.md) + +## CorporationInfo.tributeModifier property + +Your income from dividend is negatively affected by this penalty modifier + +**Signature:** + +```typescript +tributeModifier: number; +``` diff --git a/src/Achievements/AchievementData.json b/src/Achievements/AchievementData.json index a30a3e7ad..5e57360e1 100644 --- a/src/Achievements/AchievementData.json +++ b/src/Achievements/AchievementData.json @@ -309,7 +309,7 @@ "CORPORATION_BRIBE": { "ID": "CORPORATION_BRIBE", "Name": "Lobbying is great!", - "Description": "Lower your taxes through lobbying." + "Description": "Lower your tribute through lobbying." }, "CORPORATION_PROD_1000": { "ID": "CORPORATION_PROD_1000", diff --git a/src/Corporation/Corporation.ts b/src/Corporation/Corporation.ts index 416182acc..32c17f086 100644 --- a/src/Corporation/Corporation.ts +++ b/src/Corporation/Corporation.ts @@ -20,6 +20,7 @@ import { formatMoney } from "../ui/formatNumber"; import { isPositiveInteger, type Result } from "../types"; import { createEnumKeyedRecord, getRecordValues } from "../Types/Record"; import { getKeyList } from "../utils/helpers/getKeyList"; +import { assertObject } from "../utils/TypeAssertion"; export const CorporationPromise: PromisePair = { promise: null, resolve: null }; @@ -50,7 +51,7 @@ export class Corporation { shareSaleCooldown = 0; // Game cycles until player can sell shares again issueNewSharesCooldown = 0; // Game cycles until player can issue shares again dividendRate = 0; - dividendTax = 1 - currentNodeMults.CorporationSoftcap + 0.15; + tributeModifier = 1 - currentNodeMults.CorporationSoftcap + 0.15; investorShares = 0; issuedShares = 0; sharePrice = 0; @@ -191,7 +192,7 @@ export class Corporation { const totalDividends = this.dividendRate * cycleProfit; const dividendsPerShare = totalDividends / this.totalShares; const dividends = this.numShares * dividendsPerShare; - return Math.pow(dividends, 1 - this.dividendTax); + return Math.pow(dividends, 1 - this.tributeModifier); } determineCycleValuation(): number { @@ -390,10 +391,10 @@ export class Corporation { // Apply effects for one-time unlocks if (unlockName === CorpUnlockName.ShadyAccounting) { - this.dividendTax -= 0.05; + this.tributeModifier -= 0.05; } if (unlockName === CorpUnlockName.GovernmentPartnership) { - this.dividendTax -= 0.1; + this.tributeModifier -= 0.1; } return { success: true, @@ -504,6 +505,11 @@ export class Corporation { corporation.numberOfOfficesAndWarehouses += getRecordValues(division.offices).length; corporation.numberOfOfficesAndWarehouses += getRecordValues(division.warehouses).length; } + // tributeModifier is divisionTax in pre-v3.0.0. + assertObject(value.data); + if (typeof value.data.dividendTax === "number") { + corporation.tributeModifier = value.data.dividendTax; + } return corporation; } } diff --git a/src/Corporation/data/CorporationUnlocks.ts b/src/Corporation/data/CorporationUnlocks.ts index 43537f9be..da1a017f0 100644 --- a/src/Corporation/data/CorporationUnlocks.ts +++ b/src/Corporation/data/CorporationUnlocks.ts @@ -60,15 +60,15 @@ export const CorpUnlocks: Record = { price: 500e12, desc: "Utilize unscrupulous accounting practices and pay off government officials to save money " + - "on taxes. This reduces the dividend tax rate by 5%.", + "on tribute. This reduces the tribute modifier by 0.05.", }, [CorpUnlockName.GovernmentPartnership]: { name: CorpUnlockName.GovernmentPartnership, price: 2e15, desc: - "Help national governments further their agendas in exchange for lowered taxes. " + - "This reduces the dividend tax rate by 10%", + "Help national governments further their agendas in exchange for lowered tribute. " + + "This reduces the tribute modifier by 0.1", }, [CorpUnlockName.WarehouseAPI]: { diff --git a/src/Corporation/ui/Overview.tsx b/src/Corporation/ui/Overview.tsx index 64c96a2f0..84882aa96 100644 --- a/src/Corporation/ui/Overview.tsx +++ b/src/Corporation/ui/Overview.tsx @@ -1,5 +1,6 @@ // React Component for displaying Corporation Overview info import React, { useState } from "react"; +import { MathJax } from "better-react-mathjax"; import { LevelableUpgrade } from "./LevelableUpgrade"; import { Unlock } from "./Unlock"; import { BribeFactionModal } from "./modals/BribeFactionModal"; @@ -33,6 +34,8 @@ import { getRecordKeys } from "../../Types/Record"; import { PositiveInteger } from "../../types"; import { ButtonWithTooltip } from "../../ui/Components/ButtonWithTooltip"; import { CreateCorporationModal } from "./modals/CreateCorporationModal"; +import InfoIcon from "@mui/icons-material/Info"; +import { CorruptibleText } from "../../ui/React/CorruptibleText"; interface IProps { rerender: () => void; @@ -362,7 +365,46 @@ function DividendsStats({ profit }: IDividendsStatsProps): React.ReactElement { ["Retained Profits (after dividends):", ], ["Dividend Percentage:", formatPercent(corp.dividendRate, 0)], ["Dividends per share:", ], - ["Your earnings as a shareholder:", ], + [ + <> + + Everything comes with a price. +
+
+ Although your corporation grants you unlimited wealth, nobody dares try to sabotage your corporation + and take that wealth away from you. Why? All (alive) CEOs know this unspoken rule: If you pay a + "small" tribute to "them", "they" will protect you. Just a small free, and you are safe. Guaranteed. +
+
+ Who are "they"? Nobody knows for certain. There is a rumour that they are{" "} + . +
+
+ Due to this tribute, your dividend is negatively affected by a penalty modifier called + "TributeModifier". Formulas: +
+
+ {`\\(TotalDividends = DividendRate\\ast(Revenue - Expenses)\\ast 10\\)`} +
+ {`\\(Dividend = \\left(OwnedShares\\ast\\frac{TotalDividends}{TotalShares}\\right)^{1 - TributeModifier}\\)`} + + } + > +
+ Your earnings as a shareholder: + +
+
+ , + , + ], ]} /> ); diff --git a/src/Corporation/ui/modals/IssueDividendsModal.tsx b/src/Corporation/ui/modals/IssueDividendsModal.tsx index ba20efd48..6ea2617d2 100644 --- a/src/Corporation/ui/modals/IssueDividendsModal.tsx +++ b/src/Corporation/ui/modals/IssueDividendsModal.tsx @@ -65,7 +65,7 @@ export function IssueDividendsModal(props: IProps): React.ReactElement { Example: Assume your corporation makes in profit and you allocate 40% of that towards dividends. That means your corporation will gain in funds and the remaining{" "} will be paid as dividends. Since your corporation starts with 1 billion shares, every - shareholder will be paid per share per second before taxes. + shareholder will be paid per share per second before tribute.
{ issueNewSharesCooldown: corporation.issueNewSharesCooldown, sharePrice: corporation.sharePrice, dividendRate: corporation.dividendRate, - dividendTax: corporation.dividendTax, + tributeModifier: corporation.tributeModifier, dividendEarnings: corporation.getCycleDividends() / corpConstants.secondsPerMarketCycle, nextState: corporation.state.nextName, prevState: corporation.state.prevName, diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6245e1b13..bcc206522 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -9728,8 +9728,8 @@ interface CorporationInfo { sharePrice: number; /** Fraction of profits issued as dividends */ dividendRate: number; - /** Tax applied on your earnings as a shareholder */ - dividendTax: number; + /** Your income from dividend is negatively affected by this penalty modifier */ + tributeModifier: number; /** Your earnings as a shareholder per second this cycle */ dividendEarnings: number; /** The next state to be processed. diff --git a/src/utils/APIBreaks/3.0.0.ts b/src/utils/APIBreaks/3.0.0.ts index 6db7d1baa..689c43020 100644 --- a/src/utils/APIBreaks/3.0.0.ts +++ b/src/utils/APIBreaks/3.0.0.ts @@ -215,5 +215,12 @@ export const breakingChanges300: VersionBreakingChange = { info: 'The "DreamSense" upgrade was removed. The cost of that upgrade was refunded.', showPopUp: false, }, + { + brokenAPIs: [{ name: "dividendTax", migration: { searchValue: "dividendTax", replaceValue: "tributeModifier" } }], + info: + "ns.corporation.getCorporation().dividendTax was removed.\n" + + 'It has been automatically replaced with "ns.corporation.getCorporation().tributeModifier".', + showPopUp: false, + }, ], }; diff --git a/test/jest/__snapshots__/FullSave.test.ts.snap b/test/jest/__snapshots__/FullSave.test.ts.snap index cfaa0da58..6c49c62c3 100644 --- a/test/jest/__snapshots__/FullSave.test.ts.snap +++ b/test/jest/__snapshots__/FullSave.test.ts.snap @@ -291,7 +291,6 @@ exports[`Check Save File Continuity PlayerSave continuity 1`] = ` "data": { "cycleValuation": 0, "dividendRate": 0, - "dividendTax": 0.15, "divisions": { "ctor": "JSONMap", "data": [], @@ -321,6 +320,7 @@ exports[`Check Save File Continuity PlayerSave continuity 1`] = ` "storedCycles": 0, "totalAssets": 150000000000, "totalShares": 1000000000, + "tributeModifier": 0.15, "unlocks": { "ctor": "JSONSet", "data": [],