[Suggestion]: Update to how the Bag of Souls calculation works
fzzyhmstrs opened this issue ยท 3 comments
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.
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.
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).
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
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