bitburner-official / bitburner-src

Bitburner source code.
Other
738 stars 249 forks source link

CORPORATION: Dividend earnings are too low without explanation why #1395

Open GDennis opened 2 months ago

GDennis commented 2 months ago

I found the issue that the dividend earnings are very much too low, not like expected. The game describes how these are calculated, but misses out the effect of the tax. I asked myself why is the dividend so small? That should not be. I hadn't tax in mind, but looking at CorporationInfo gives a dividendTax of 20%. But still, the dividendEarnings are still way too low and there's just no explanation why. I had to dig into the source to find out why. And then ask again: Why? I can't find why the formula was written like that. Dividends are actually useless until the corporation makes insanely much money because of this line: https://github.com/bitburner-official/bitburner-src/blame/39b18e7659e3cacde3627b15b9dcc106b24db271/src/Corporation/Corporation.ts#L198

So all the calculations are done like expected, except that linked line: Math.pow(dividends, 1 - this.dividendTax) Everyone would expect dividends * (1 - dividendTax) And this is how it should be. It really should. Set the tax to 99% to compensate the balancing issues, but it should be simply multiplied. So the game did a good job describing in the popups how the obvious is calculated. All calculations that makes sense are explained but this one crucial line that makes no sense is hidden. No description anywhere. I've seen that it works as expected in Issue #1160 and disagree. However if this formula should be kept like this to make corporations useless until they make insanely much money, then everyone playing Corporations will think it's bugged at this point. It's not transparent how we go from 1b profit down to only 15m. Just say it's 99% tax and it's ok, but please don't hide it and let players like me dig into the source to find out how it's calculated with no clue why it's chosen to be calculated like that. If the calculation is not fixed, then the description in the dividend popup should reflect the effect of the tax. At least the "how" is clear to the player then without investigating the bitburner source.

Currently the tax is almost 100% for large profits, Actually the result of 1-(dividendEarnings/revenue) === 1 for any large revenue. In my example: revenue is 1.353e111, 100% dividendRate, dividendEarnings is only 5.072e88. 1-5.072e88/1.353e111===1 is actually true. The tax is so much, that the double precision is not enough to describe it. dividendTax is 20% on SF12 after unlocking everything. It's ok, because a tiny fraction of 1e111 is still enough to pay for everything, but in the first days after a corporation is created you wonder why the dividend of your small corporation gives so small money and it's nowhere described.

So I propose to either fix the calculation to yield the expected dividendEarnings and maybe increase the tax drastically to compensate for balancing or add a description explaining how the tax is calculated. But I would really prefer to do one of these because it confuses players. If approved, then I can also create a PR to fix the formula or a PR to add an explanation how tax is calculated in the dividend popup.

d0sboots commented 2 months ago

I do agree with you that this is a constant point of confusion, one of many in corp but this one is particularly egregious. It does not act anything like a "tax", aside from the fact that it takes money away. Unfortunately all the "simple" solutions aren't so simple; just implementing it as a multiplicative tax would have some significant gameplay implications (for instance).

catloversg commented 2 months ago

This problem has been raised many times here and on Discord, so I'll write about what I think about it.

At first, we need to see why the tax system exists in Corporation. Corporation is overpowered, so we need something to keep it in check. Currently, we have 2 ways to nerf it:

These are some things that we can do:

Corporation has tons of things that do not make sense in the real world, but most of them are rarely brought up in the discusion, for example, "You need to buy millions of Real Estates(?) and put them into a warehouse(?) to improve the production rate of Water(?). By the way, don't bother with Robots if your warehouse is too small. They are too big, just buy Real Estates because they are tiny(?).". I don't see anybody complaining about that weird example of "advice", but the tax system is brought up every now and then. This is the psychology problem.

All adults need to deal with tax in the real world, and tax is a sensitive topic. When people see the word "Tax" in the game, they inevitably think of the real tax system. All complaints look like this: "That's not how tax works!", "It does not make sense!", "Why is the tax in this game so harsh?", "99.99% tax?", "The number is wrong!", etc. All of them are valid complaints, but they miss the main point. "Tax" is just a convenient word that we use to describe a penalty modifier for the profit. Can we generate 1e100 USD per second in the real world? No, we cannot. In the real world, is there any tax system that deals with the ridiculous "1e100 USD per second" income? No, there is not.

Let's check these 2 formulas:

People complain that the first one is "wrong" and "ridiculous", but nobody complains about the second one. As I said before, this is the psychology problem. The first one is "linked" with a sentive topic about which everybody cares in the real world, but the second one is just a formula that nobody cares about.

I understand why people feel frustrated when their (virtual) income is reduced too much by tax. That's why the suspension of disbelief is mandatory in some cases. However, it seems that the topic of tax is too sensitive, and many people cannot separate the in-game tax system from the real tax system. That's why I suggest changing the word "Tax". I'm not sure what the better word is or if this change makes sense, so it will not be implemented soon. The best thing that we can do right now is update the UI to make people aware of where to find information about how our tax system works.

@Snarling @d0sboots What do you think about this idea? If it does not make sense, just shoot it down.

d0sboots commented 2 months ago

I agree that using a different word than "tax" is probably needed, I'm not sure if it's that it's a sensitive topic or just that everyone has a solid idea of what "tax" means and this is definitely not it. Unfortunately, if I had a better candidate word I would have changed it already. XD

In conjunction with that, showing the actual formula in a hover tooltip would go a long way.

cactusdualcore commented 1 month ago

If Corps are so overpowered they need to be nerfed like this, maybe they need to be reworked in the first place?

catloversg commented 1 month ago

There are tons of people who wanted and tried to do that, but, until this day, there has not been much success. There is/are plan(s) to overhaul it, but it'll take time.

MaWo2 commented 1 month ago

Just an idea for a different name: "Tribute" (I was under the impression, that the in-game world was oppressed by some aliens. However, I cannot find that part of the story any longer.)

d0sboots commented 1 month ago

Ooh, that is is a good word. Another one that could be good and fit with the corp theme is "dues" (with the entity that collects the dues being vague.) Either of them would work well as non-percentage values.

I feel like a tooltip over the value that says something like "Dues you owe to the shadowy cabal that runs the world," followed by the actual formula, would eliminate a lot of the issue here.

catloversg commented 1 month ago

That's a good idea. I'll wait for 1-2 weeks to see if there are any more suggestions. After that, I'll add the tooltip.

cmfrydos commented 1 week ago

I'd propose showing the current dividend tax rate (99.x%) somewhere even before you go public, so you won't be disappointed by the outcome.

Additionally, one way to circumvent insanely high tax rates from the beginning (e.g., $1 million to $10 billion in corporation profit) could be to reduce the number of owned shares by a factor of 10 to 100. Alternatively, you could reduce all prices related to corporations by a factor of 1000 (e.g., starting with 150 million in funds, division expansion costs in the millions instead of billions, etc.), since this wouldn't affect the internal corporate balance. The only thing to keep in mind would be to maintain the Town Hall Corporation Funding costs at 150 billion, which could be justified by high fees.

Additionally, I'd cap corporate profit (product profit) at something like $1e20 using logistical growth instead of exponential. However, this idea may not be quite relevant here, as corporate taxes are something beginners struggle with or dislike at the start of the bitnode.

catloversg commented 1 week ago

I'd propose showing the current dividend tax rate (99.x%) somewhere even before you go public, so you won't be disappointed by the outcome.

It does not make sense to do this in the Corporation UI. Dividend, tax rate, etc. are only relevant after going public.

Additionally, one way to circumvent insanely high tax rates from the beginning (e.g., $1 million to $10 billion in corporation profit) could be to reduce the number of owned shares by a factor of 10 to 100. Alternatively, you could reduce all prices related to corporations by a factor of 1000 (e.g., starting with 150 million in funds, division expansion costs in the millions instead of billions, etc.), since this wouldn't affect the internal corporate balance. The only thing to keep in mind would be to maintain the Town Hall Corporation Funding costs at 150 billion, which could be justified by high fees.

Additionally, I'd cap corporate profit (product profit) at something like $1e20 using logistical growth instead of exponential. However, this idea may not be quite relevant here, as corporate taxes are something beginners struggle with or dislike at the start of the bitnode.

All these suggested changes are massive changes, and they require extensive analysis and testing. Even when they are implemented properly, they still do not solve the root cause of confusion: the discrepancy between real-life tax and in-game "tax".

Generally, the best way to deal with this problem is:

cmfrydos commented 1 week ago

All these suggested changes are massive changes, and they require extensive analysis and testing. Even when they are implemented properly, they still do not solve the root cause of confusion: the discrepancy between real-life tax and in-game "tax".

They do. When there is less money in the corporation, especially when they do not grow exponentially indefinitely, there is no need for the current tax shenanigans:

So all the calculations are done like expected, except that linked line: Math.pow(dividends, 1 - this.dividendTax) Everyone would expect dividends * (1 - dividendTax) And this is how it should be. It really should.

Also, I disagree with them being huge changes. For me, those would be the least disruptive ones to perform. But I'm not a dev here, and I haven't seen the codebase, so it's easy to talk. ;)

catloversg commented 1 week ago

When there is less money in the corporation, especially when they do not grow exponentially indefinitely, there is no need for the current tax shenanigans:

This won't happen (the "less money in the corporation" part). Corporation is OP. It was, is, and will always be. That's the entire point of using Corporation. It's one of 3 most important aspects of Corporation: exceptionally fast, unimaginable profit, and extremely complicated. The last one is the "price" that players need to pay to enjoy the other two. We are still trying to balance them, but in the end, Corporation will always be the best "money printer".

Also, I disagree with them being huge changes. For me, those would be the least disruptive ones to perform. But I'm not a dev here, and I haven't seen the codebase, so it's easy to talk. ;)

They are massive. I guarantee. Implementing them is the easy part. The problem is how to do them properly without screwing up other things. Corporation is a huge castle built on sand. Making change is easy programmatically. Making change for it properly with careful balancing is extremely hard. If you are interested in it, you can join the Discord server. We have tons of discussions there.

GDennis commented 1 week ago

I agree with some messages here and I'm glad to see that a change is going to happen. So what triggers me and maybe others is, that there is this formula dividends ** (1 - dividendTax) which should be dividends * (1 - dividendTax) to be correct. Watching that I really want to fix it naturally. It is like someone just added another star to nerf the dividends lazily or someone made a typo and then someone else refactored it using Math.pow calling it intended instead of a bug. If we read tax, we think about something that is subtracted. But the current formula does not subtract anything. So all words that describe what is subtracted are misleading. Instead the focus needs to be on the value that is earned. It would be great fo find a wording that focus on what is left instead of what is lost. However, the word dividend already has a real world meaning which includes a percentage. While that percentage is calculated correctly, the "tax" is not. No matter if it is called "tax", "fee" or "dues". It is always expected to be a subtracted percentage, not an exponent because the outcome is called "dividends" and tax or fees are always subtracted. Maybe the outcome should be called modified dividends, diminished dividends, payed dividends or some other creative words. To show the formula would be great, because that also shows clearly what to expect and how powerful the upgrades which decreases the "tax" will be. Maybe "tax" should be called "payout modifier" or "payout exponent" or something like that, which describes the opposite of tax. The formula would not calculate 1-tax for the exponent but use that renamed variable directly. And the upgrades would increase that modifier instead of decreasing tax. That would avoid much confusion because we are not talking about something that is subtracted anymore. Instead we talk about a payout modifier. I like the idea from d0sboots to add some mysterious text that kind of explains why only a tiny bit of the dividends are actually given. But I would avoid words that describe something that is subtracted. If the concept of subtraction stays, then I think it is important to clarify that it is really intended to use that formula. That should also be visible in the source code for anyone looking it up. A comment in the code directly above that formula would do it.

So I agree with catloversg about the best way to deal with this problem. Additionally I would add a comment in the source code for those who look up the reason for the formula, stating that the formula is intended to nerf the overpowered corporation dividends. If no good replacement for the word "tax" is found then it is still better to add a tooltip with formula and a comment in code than doing nothing.

bupjae commented 5 days ago

It seems that we want to say "The ingame 'tax' is not the same concept to the real life tax the government issues"

However, the ingame description implies "the government taxes by certain percent rate"

https://github.com/bitburner-official/bitburner-src/blob/23f98c1ff6cbff0953dd6ce348433a3d5aa2d851/src/Corporation/data/CorporationUnlocks.ts#L58-L72

I believe that when people see "%" ingame, they think about x * (1 - p), not x ** (1 - p).

If we want to update the document to handle this issue, the first step should replace "rate by %" text ingame.