Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Suggestion]: Update to how the Bag of Souls calculation works #78

Open
fzzyhmstrs opened this issue May 24, 2023 · 3 comments
Open

[Suggestion]: Update to how the Bag of Souls calculation works #78

fzzyhmstrs opened this issue May 24, 2023 · 3 comments
Assignees
Labels
enhancement New feature or request

Comments

@fzzyhmstrs
Copy link

fzzyhmstrs commented May 24, 2023

Is your feature request related to a problem? Please describe.

Inspired by the message in the MCDX General channel of the discord, and my own lurking frustration with how powerful Bag of Souls is (especially combined with an enchantment like Insight that adds additional XP orbs which are then multiplied).

  • I believe the current math system is a tad un-intuitive in-game with what combination and total level of BoS is best
  • I believe the maximum multipliers are too high. High level BoS combined with other XP enchants trivializes the XP costs associated with AI, for example. That is my personal opinion, so I believe a config option would be a good solution.

The current formula for Bag of Souls, per the 1.19 branch of the source, is:

amount = (amount * (1 + (bagOfSoulsLevel / 12)) + Math.round(((bagOfSoulsLevel % 12) / 12.0f) * amount)) * bagOfSoulsCount;

My excel rebuild of this formula. where A1 is the cell with the BoS level and C1 is the cell with the BoS count, and amount assumed to be 1:
=((1*(1+A1/12)+ROUND((MOD(A1,12)/12),0)*1)*C1)

Describe the solution you'd like

My proposal is:

amount = amount * (Math.pow(bagOfSoulsLevel, 0.62) + 0.0833333 * bagOfSoulsCount * bagOfSoulsCount)

My excel of that, where L1 is the BoS level, $K$1 is the exponent (0.62 for example), and N1 is the BoS count.
=1*(L1^$K$1 + 0.0833333*N1*N1)

Things I've noticed with the current Bag of Souls formula that I believe are noteworthy for a rework:

  • The maximum multiplier, per my excel rebuild, is about 12x (with XP orb amount of 1)
  • This multiplier is not at Bag of Souls 12; unless I have a mistake in my math, it's at BoS 11.
  • Current formula heavily incentivizes splitting BoS onto every armor piece, and therefor punishes stacking high level BoS onto one piece. In fact, properly optimizing your BoS on 4 pieces will give you a higher multiplier than BoS 12 with only BoS 6
  • because of the Math.round, low value XP orbs are truncated weirdly with BoS less than 6

Explanation of my Proposal

Formula is based on an exponential of the BoS level + a multiplier based on the square of BoS count. This provides

  • A smooth transition of multiplier from level to level
  • Slightly diminishing returns on level. More bang for the buck at lower levels
  • Still incentivizes spreading out BoS, but to a less extreme degree
  • Caps the maximum multiplier to 6
  • Allows for better modded support of BoS levels (higher max level). Current impl wraps a higher max level back around with modulus.

Describe alternatives you've considered

My proposal targets 6x maximum multiplier with an exponent of 0.62. If that's not a desirable multiplier target, here are some exponent values:

  • 4x: 0.395
  • 6x: 0.62
  • 8x: 0.763

This exponent could make a good Config Option, allowing the user to set a value between 0 and 0.999999...

Additional context

Graph of Current Impl

All data graphed with an XP orb value of 1 (so showing off the "multiplier"). Note the spike in multiplier at ~BoS 6, and note the dip at BoS 12 caused by 12 % 12 equaling 0. "1 piece sequential" is considering a player that stacks BoS 3 onto one piece at time. "Optimal route" considers a player optimally spreading BoS out on their armor.
image

Graph of Fzzy Proposal

All data graphed with an XP orb value of 1 (so showing off the "multiplier"). Spreading out BoS is still incentivized, but not to a massive degree, and total cap is 6X at BoS 12. "1 piece sequential" is considering a player that stacks BoS 3 onto one piece at time. "Optimal route" considers a player optimally spreading BoS out on their armor.
image

@fzzyhmstrs fzzyhmstrs added the enhancement New feature or request label May 24, 2023
@fzzyhmstrs
Copy link
Author

fzzyhmstrs commented May 24, 2023

The above not even taking into account XP Orbs that have "clumped". According to my Excel, An orb with a starting value of 20 XP, will yield almost 1600 XP at BoS 11 (not 12). That's an 80x Multiplier. That is more than the total amount of XP to get from level 0 to level 30 in one shot.

As far as I know, the Ender Dragon can drop orbs with stored XP of 307, 617, or 1237. The 1237 orb yields over 5.6 million XP in one shot in my Excel. (XP level 0 -> level 1133)

Now that I'm noticing this, I think this is how Gamer was seeing players hit tens of thousands of XP levels (absorbing orbs that have clumped to very high amounts combined with Soul Devourer etc. adding to the frenzy).

@chronosacaria
Copy link
Owner

Along with this same proposal:
An idea suggested by Zerix#7704: Maybe if you have Bag of Souls, since you get the extra XP with it, maybe there is the possibility of loosing XP when you're hit, akin to Sonic the Hedgehog loosing rings when hit

@fzzyhmstrs
Copy link
Author

fzzyhmstrs commented May 24, 2023

My additional idea to that addition, that I just came up with: Actually have the experience lost yeet out of the player.

Maybe a custom XP orb entity so when picked up there is no re-multiplication applied. Provides a fun little mini-game in PVP, and a way for the player to recoup if they put the effort in.

Maybe have the amount yote be only a fraction of what is lost (like when the player dies) so they can't fully recoup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants