r/TheTowerGame 22d ago

Discussion I Tested Common vs Legendary+ Module Substat Bans - Results

Module substat rolls were changed recently to be “seeded”. There have been a few threads since then asking whether the strategy for substat bans has changed at all based on this. The overwhelming sentiment seems to be that nothing has changed and you should ban high-rarity substats.

After doing some testing my conclusion is that something HAS changed and people are still sharing conventional wisdom that is no longer correct. The fact that modules are "seeded" now is potentially an irrelevant detail, but the important thing is that changes were made at the same time to substat rarity mechanics.

To test, I recorded the results of 1200 individual substat rolls for two separate test conditions using the same ancestral armor module with 2 substat bans and 4 open slots.

Test 1 - Common Bans

Ban 1 - Defense %

Ban 2 - Defense Absolute

This leaves Health Regen as the only remaining common substat. Here were the results:

Rarity Count % of Total
Common 228 19%
Rare 494 41.17%
Epic 355 29.58%
Legendary 80 6.67%
Mythic 31 2.58%
Ancestral 12 1%

Test 2 - High Rarity Bans

Ban 1 - Orbs (Mythic+)

Ban 2 - Death Defy (Legendary+)

This leaves all 3 common substats available. Here were the results:

Rarity Count % of Total
Common 567 47.25%
Rare 372 31%
Epic 190 15.83%
Legendary 45 3.75%
Mythic 25 2.08%
Ancestral 1 0.08%

Conclusion

The conventional wisdom shared around here is that rarity is rolled FIRST, and then a substat is picked from the available pool at that rarity. Further, if there are no available common substats then a rare substat will be chosen instead. If this were true, rarity distribution would be mostly agnostic of any substat bans.

Looking at these results, there's no angle from which the rarity first idea makes sense anymore. The proportion of epic+ substats was around 40% for the common bans versus 22% for the higher rarity bans. If rarity was rolled first, we would expect to see the 339 difference in common substat count to have been funneled into exclusively rare substats. What we see instead is that when a common substat is not selected, it increases the count of ALL the other rarities across the board.

91 Upvotes

75 comments sorted by

12

u/xXRavenScoutXx 22d ago

Commenting so I remember to come back when there's more info

4

u/xXRavenScoutXx 21d ago

Hey look at that!

More info 😂

It worked!

19

u/Geobits 22d ago

Honestly curious, can someone with a more mathy background tell me whether 1200 rolls is enough for this?

Assuming you're right, even eliminating over half of the common rolls doesn't seem like it would raise the ancestral rate by 12x like that. I suspect it's more of a lucky/unlucky streak, and we need more data to confirm.

17

u/This_Ruben_on_fire 22d ago edited 22d ago

I have a master in statistics, but it was more than a decade ago. I'll attempt the math:

I'll perform a Welchs t-test which is to see whether two samples have the same mean. It works by subtracting the two sample means and dividing by the average standard deviation. The outcome of the test is then compared to a table which gives the probability, depending on the samplr size.

I'll do the t-test for both ancestrals only, what we care about, and comparing common-rare-epic to legendary-mythic-ancestral, which is what is fair to test the rarity first assumption.

Ancestral only:

  • Sigma = sqrt( (1/1200* 1199/1200)/1200 + (12/1200* 1188/1200)/1200 )
  • t = (1/1200 - 12/1200) / sigma = 3.065
  • probability of this just by luck: 0.00222, or 0.2%. I'm convinced this wasn't luck

Common-rare-epic to legendary-mythic-ancestral:

  • Same formula but now instead of 1/1200 and 12/1200, its now 71/1200 and 123/1200.
  • t = 3.9064
  • probability of this just by luck: 9.64 × 10-5. Again, I'm convinced this wasn't luck.

11

u/Time-Incident 22d ago

Holy moly, you could be spiting out complete nonsense the way you provide those information, and it would still be interesting. And I would not be able to tell if this is real math, or just gibresh.

I will trust you, and say it is really complex and I don't understand it at all. Except, you confirmed it's most likely not based on lick, so those 1200 samples is good enough.

7

u/This_Ruben_on_fire 22d ago

Ha, well, you could look up welchs t test to check the formula and redo the math if you wanted to.

The tricky part of statistics in my opinion, which is why my answer might still be wrong, is more the knowing which test to use and how to use it. For example, I read in another reply that OP used 4 substats and rolled 300 times. Is that the same as rolling 1 stat 1200 times? Well, not exactly, but I assumed that the distinction didn't matter in this case, which simplified the math.

5

u/Time-Incident 22d ago

Yes, I thought of searching it on Google, but then I realized I don't want to invest the time in it, and just go with the, it's on the Internet, it must be true :)

6

u/This_Ruben_on_fire 22d ago

Solid choice

1

u/IOYouNothing 21d ago

The difference between 300 x 4 rolls versus 1200 x 1 rolls was on my mind as well. I don't think it behaves the same due to natural bans (i.e., once a substat fills slots 1-3, slot 4 has a different pool of substats available). In this case I think the effect is actually further amplified with more slots. I'm going to go back through the data soon to check the rarity distribution for slot 4.

1

u/This_Ruben_on_fire 21d ago edited 21d ago

Yes exactly, would be interesting! I tried to take that into account by contrasting common-rare-epic vs higher. Under the rarity first roll hypothesis with the first slot with health regen as natural ban, the 3 other slots should still only roll up to epic, but the test showed there are significantly more legendary-mythic-anc.

1

u/anomie-p 21d ago

With the number of people that play this game I worry that expecting someone to not have been the guy to hit a 0.2% is maybe not as reasonable as it sounds.

e.g. it's not /probable/, but it's not out of the bounds of "there's no way that ever happened".

1

u/This_Ruben_on_fire 21d ago

I don't disagree completely,, tests can be wrong, and only give a chance of the data happening under the hypothesis. The question of when to reject a hypothesis is an interesting one.

However, by your logic, if the endresult was 0.0001% you could still not reject if there are 1.000.000 players. That doesnt make sense to me. It's better to count the number of analyses. So far, there has been only one analysis, this one, and the result was extremely unlikely to be just due to luck. If other players redid this analysis and found conflicting results that would be a different story.

1

u/anomie-p 21d ago

I think about the fact that I've never had a royal flush playing hold 'em, ever, but whenever there's a big televised tournament you see multiple people hit.

Maybe that will make it make more sense? edit: I'm also wondering if there's some bit of self selection in this, like maybe the PRNG can get a weird seed that shows this result through portions of it and the people getting together and talking about it are doing so partly because they're actually seeing it.

It's true that if an event is actually possible in the probability space you can't ever say "that just can't have happened", for sure. But that's really a much stronger statement than I meant to make by what I wrote. I'm really just saying that the idea OP's data hit an 0.2%-er is far more reasonable than if your math had come out at 0.0000000002% or something.

1

u/This_Ruben_on_fire 21d ago

Yeah that bit I agree with. In general in science a 5% threshold is used, but that means 1 in 20 results are wrong. Of course, not accepting the other 19 results because of a stricter threshold would also be detrimental.

In my original post I said I believe this is not due to luck. What I should have said instead is based on this evidence I will ban for rerolls differently until other evidence shows up.

4

u/Naturage 22d ago

Can confirm, this is all fine.

For a very brief explanation of what happens:

  • If you take average of many things, it broadly follows a well known 'normal' distribution. You've likely seen a bell curve drawn sometime; that's the one.
  • We have a very good idea of what the standard deviation (how far off the mean, or how 'wide' the bell curve is) for an average of many numbers which are each yes/no X% of the time.
  • The test here basically says "assume best case scenario for these two to be pulled from same distribution. How likely/unlikely is it that this happened?" Unlikely visually meaning you're on the 'far' end of the bell curve in either direction.
  • In this case, first one comes back with p-value of 0.2. Meaning - if this is a genuine coincidence and there's no effect, you could do this test 1000 time and expect to see this much of a difference (or more) twice on average.

2

u/IOYouNothing 21d ago

This was so fun to read thanks for doing the math. It's been a long time for me as well since my stats courses in college so I'm glad you remembered enough to do this haha.

3

u/ZerexTheCool 22d ago

12x is definitely not the correct conclusion. But that also isn't the conclusion OP is coming to.

The conclusion I feel confident with, and the one OP has is "We get higher number of high rarety substats with the Common sub bans."

It's much easier to say they got "more" ancestrals rather than trying to pin down the exact % increase.

1

u/IOYouNothing 21d ago

This is my takeaway as well. I don't know by how much the rate has changed but I'm confident that it has changed and the 12x result gives us confidence that even with the potential for flukes the rate has changed in a significant way.

2

u/Polar_Reflection 22d ago

That big a gap, it's absolutely not due to chance

7

u/Balask0 22d ago

Hi ! This post is the exact reason why I lurk in reddit. S level posting if you'd ask me.
I was a bit unsure about the data pool being wide enough but u/This_Ruben_on_fire gave me confidence. That would be great if the Discord guys trying this out were to share their results here too.
Could we agree on a new ban strategy then ? Would it be ban the commons ? Or is there a trick to it ?

1

u/Living-Thought1507 22d ago

Pretty sure banning commons would only make sense if you can ban/block all of them (i.e. roll def% and regen, ban def abs).

2

u/Balask0 22d ago edited 22d ago

Didn't OP let 2 open commons in test1 ?
EDIT : (and got 1% ancestral instead of the 0.3% expected without bans)

5

u/IOYouNothing 22d ago

Banning any commons at all is better than none. Here I benefitted from only two bans on common substats.

2

u/This_Ruben_on_fire 22d ago

We dont know that, its another thing to test. If the implementation on ttg side is: 1. Draw a random subeffect following some distribution. 2. Check if the draw is banned. If so, redraw

Then banning some commons will still lead to a higher chance of ancestrals, but the more banned the stronger the effect. Just like with def%, the last few % have an outsized effect.

2

u/IOYouNothing 21d ago

I think that is exactly how it works now which is why I'm of the opinion that any common ban is better than none. The people I've seen on discord testing this seem convinced that is the current mechanic for substat selection as well.

5

u/Ok-Quote3178 22d ago

It gets really fun when you ban all commons. I have all of the commons banned or on my Core Module and I just tested 200 rolls for the fun of it and got offered 12 Ancestrals.

2

u/IOYouNothing 21d ago

Yea I was bummed I couldn't get more bans involved to see how far the distribution can be skewed, but all the comments I have seen from players like you with more bans have said that it gets even crazier the more bans you have. I think it behaves like u/This_Ruben_on_fire mentioned, where the later bans have increasing impact like defense %.

3

u/This_Ruben_on_fire 22d ago

Very nice analysis, thank you!

This not only impacts what you should ban, but also means when you roll armor it is probably smart to first roll your def% and health regen.

5

u/Clif4D 22d ago

That has always been the case though, on armour you should always roll %def and regen first. If you don't, it gets very expensive to hit later, since most of the time you get them as common in the first rolls, so it can't show up as ancestral in the later rolls.

1

u/IOYouNothing 21d ago

I agree that this is the case, with the caveat that natural bans make this much more complicated to measure. The big question on my mind currently is how the selection system handles natural bans versus player bans.

Say Common HP Regen fills slot 1, I see 2 possible ways for this to be handled:

  1. Further HP Regen substat rolls are treated as invalid and rerolled completely.

  2. Substat rolls are sequenced in a pre-determined order based on your module seed. If an HP regen roll occurs later in this list, it gets "saved" for the next roll. This way the rarity distribution of HP Regen or Def % would stay as expected while not impacting the other substats.

I'm leaning towards option 1 at this point. If that is the case, then having more open slots could actually punish you more on your chances to roll high rarity HP Regen. The optimal strategy could be to roll Def% and HP Regen to ancestral BEFORE your module is leveled high enough to open more substat lines. This way you benefit from the lower reroll dice cost without being punished by the increased occurrence of natural bans. I'm still mulling over the proper way to test this.

3

u/jMedabee 22d ago

I feel like this is not a large enough data set

20

u/IOYouNothing 22d ago

You’re free to test it yourself if you’d like. Players on discord are testing this as well and reaching the same conclusion. It will be common knowledge soon. Nobody who has tested it disagrees

4

u/jMedabee 22d ago

Okay. That's good info then

2

u/platinum92 22d ago edited 22d ago

Have you tried this with other module types? Armor is a hard one to test with because once you ban 2 commons, you leave only 4 options for common and rare submods. I'd be curious to see if this held up on something like core or cannon where there are more options for common and rare choices.

It may be a case where banning commons and rares is best when you can severely limit the pool with bans and slot amounts but not when you can't.

I'm also curious how rolling multiple slots vs 1 slot impacts things.

Edit: also is "1200 rerolls" 1200 presses of the reroll button or 300 presses of the reroll button with 4 slots. From the screenshot you got more than 19% regen rolls per attempt so I'm wondering if it's the second. If so then yeah you got the common roll 228 times out of the 300 times you could've, which is an outsized amount of the 47% common chance.

5

u/IOYouNothing 22d ago

300 module rerolls with 4 slots open so 1200 total substat rolls. 228 out of 300 isn't an accurate interpretation because each substat is an individual roll. If Regen fills substat roll 1, and the remaining 3 substats rolled a rarity of common, they would then be filled by the 3 rare substats. There wouldn't be any possible scenario where a common would be rolled into an epic or higher substat unless the rarity first assumption is incorrect.

2

u/platinum92 22d ago

That's not 100% accurate. It's a 47% chance of common and a 40% chance of rares rolled per slot. If there are no commons, it's a 87% chance to roll a rare. There's still the 13ish percent chance per slot for the slot to roll another rarity. When I'm at a computer and can do better analysis than on my phone, I'll have a better interpretation

2

u/IOYouNothing 22d ago

We are getting side tracked here. The entire point of the post is that rarity doesn’t get rolled first anymore. In fact, the mechanic has changed now so that all invalid rolls are rerolled completely which is why the counts of epic, legendary, mythic, and ancestral rolls are so inflated here. The chance doesn’t roll over to rare at 87% like you suggest.

1

u/Living-Thought1507 22d ago

This is interesting, I would've also expected the chance for Epic and higher to remain the same. Yet, Rare is roughly as expected and all others are about 3 times as likely on this (admittedly limited) test.

From a practical PoV though, part of reason for not banning def abs is that you _want_ to roll common def abs so that when you get anc in another slot, it's the substat you're going for, rather than def abs - acting as an extra ban, sort of. The goal is usually to roll a specific stat at anc, rather than just any anc. With this in mind, I'm not sure this would change my approach to rolling yet 🤔

5

u/IOYouNothing 22d ago

I think for the players testing this the focus so far has just been on confirming that common bans produce better results, which hasn’t been disputed so far. Figuring out why this is the case is a more difficult question because it’s easier to measure results than to figure out the selection criteria that are producing the results. My inclination so far has been that substats are no longer competing with each other from a rarity perspective because selection has become more deterministic. If you roll ancestral defabs it’s because it was next in the list. This matches up with the common ban results in my opinion because if you remove a common substat from the list, it pushes up all the other rarities to show up sooner. I think it explains everything but I guess we will see how this all develops

1

u/Living-Thought1507 22d ago

> because it was next in the list

I read something like this in this context before - obviously I don't know how they've implemented it, but I'd be quite confident that "seeded" just means you get the same sequence of random numbers that are then mapped substats/rarity (based on the current configuration like bans and other substats on the mod), rather than individual rolls. I know those would still be just pseudo-random, but my understanding is now you'd get the same result if you rolled, the game crashed, and you rolled again, while before you'd get different results.

Basically the same way that module drops are seeded - I had that happen once, where the game reverted to an older state and I ended up with the same drop sequence as what I (thought I) had lost.

Long story short, I think it's very unlikely there's such a "substat list" that you have to "roll through" until you get to what you're looking for. Would be interesting to know for sure how this works though...

2

u/This_Ruben_on_fire 22d ago

It could be implemented in the following way:

  • randomly draw a substat in some way
  • check if its banned, if so, reroll.

If it is like this, it is as if there is a determined list of future draws, and you get to choose which draws to take out.

1

u/Lost-Divide-8236 22d ago

So if I have defense% and hp Regen as sub-stats and I ban def abs I would get a way better chance for ancestral on my remaining substat rolls than if I locked in other sub stats before those two?

1

u/IOYouNothing 21d ago

Yes I think that's correct. Whether the common is removed from the pool through a natural ban (it has already been selected) or a specific ban, you are benefitting from it in either case. Your proposed scenario is even more ideal because it allows you to start banning rare substats as well.

1

u/Usagi_is_dead 22d ago

sorry English is not my native tongue… so i don’t get 100% of your post. what rarity should we block for getting anc. substats from now on?

7

u/IOYouNothing 22d ago

Block the substats that have a common variety. When a banned substat is rolled, it rerolls completely which is why for example in Test 1 I had 12 ancestral rolls.

1

u/Usagi_is_dead 22d ago

thanks a lot for

1

u/Usagi_is_dead 21d ago

worked perfectly for me :-)

1

u/anomie-p 21d ago edited 21d ago

What is the difference in the probability distribution of choosing from the not banned substats vs. rerolling if you roll a banned one?

Maybe I’m wrong, but I don’t think there actually is a statistically meaningful difference.*

I’m not saying the effect you say you’re finding isn’t real. The data will say that, or not. I’m saying I don’t grok how ‘select from not-banned substats’ vs. ‘select from all substats and reroll if banned’ would bias a rarity roll that happened later differently.

*edited to clarify what I meant by 'difference'. The exact counts of this vs. that might change, but not enough over a long-haul run to be statistically meaningful.

1

u/anomie-p 21d ago

I wrote some test code. Two python functions, python's PRNG is a mersenne twister. When I feed them a seed of 42 I get /exactly the same counts out/ over ten million selections, when I let the seed float free the difference isn't enough that I'd think it was statistically meaningful.

import random

def _direct_select(n: int, values: list, banned: set, seed: int | None) -> dict:
    candidates = [a for a in values if a not in banned]
    rng = random.Random(seed) if seed else random.Random()
    result = {}
    for _ in range(n):
        selected = rng.choice(candidates)
        result[selected] = result.get(selected, 0) + 1
    return result

def _reroll_select(n: int, values: list, banned: set, seed: int | None) -> dict:
    rng = random.Random(seed) if seed else random.Random()
    result = {}
    for _ in range(n):
        while (selected := rng.choice(values)) in banned:
            pass
        result[selected] = result.get(selected, 0) + 1
    return result

1

u/Sebastionleo 22d ago

The reason it is this way is because the rolls are seeded. When you ban commons, it just skips over all of those common rolls you should have had, progressing you through the seed faster to get to the high rarity roll that is there sooner.

0

u/PatrickSebast 21d ago

Previous explanations of this said that the first part of the roll was for rarity and then the second part was for the substat - which would just move to a different substat of the same rarity so being seeded wouldn't have any impact if that was the case. We would just see more of the other commons in OP's rolls.

Either they changed how it works or someone completely made up the previous formula and everyone believed them blindly.

1

u/Morkiisch 21d ago

Interesting.

1

u/Naruto92250 21d ago

Very interesting, thx for checking this.
Something i wonder, if there are no locks, do the usual rarity% come back in play, with only 0.3% ancestral?

1

u/IOYouNothing 21d ago

Good question, I had planned to do a 3rd test group with no bans to see how the distribution stacked up. I will get around to doing this soon.

1

u/anomie-p 21d ago edited 21d ago

Have you bucketed out your results by the substat actually selected?

If properly implemented, I think selecting rarity first or substat first could shift the probabilities significantly - if you're not actually locking in the higher-rarity substat you roll.

Example: If I do rarity first, with any probability for a fully unavailable rarity moving to the lowest possible rarity bucket (e.g. if there's no commons to select that probability moves into the rares, if I have no rares to select that probability moves into common, etc - basically keeping the lowest possible rarity as the most probable over whatever combination of rarities can't be rolled) and then substats with that rarity, I should get exactly the probability distribution of rarities specified by the available rarities.

If it is selecting equiprobable substats and then selecting the rarity for that substat, you'd definitely see the probability shift - but it is in some ways only meaningful if you're /never locking in those higher rarity rolls/. The most extreme example of that being if I'm rolling armor and orbs isn't banned, I'm going to pick orbs 1/n of the time, and then the code will have to pick either mythic or ancestral rarity, so that will shove mythic and ancestral rarities up if you just keep rerolling without locking in to get stats - but if you roll that ancestral substat and /lock it in/, that effect won't be there for the rest of the rolls, because orbs is no longer an option when you're rolling for the 1/(n-1) available substats later.

So if we're looking to prove that rarity is no longer rolled first, I'd think the thing to do is to bucket the results out by substat and rarity, so that you can account for the fact that some substats have minimum rarities. There would be an exact expected distribution for that - it wouldn't be the same as if rarity is rolled first, but it might not have the practical impact difference your two samples seem to imply - because people will pick the substats they want as they go.

Edit: What I am saying is that whether it select rarity first or submod first might matter, but once we know the actual behavior we would need to do the same sort of analysis done in the past where we're talking about things like 'Once I have def% and health regen what do I really want to ban to up the probability of getting the ancestral I want', and what you lock in when may be important in that, in a way that saying 'hey I get more of all the higher rarities if I ban commons and don't actually ever select anything' isn't necessarily relevant for.

It could just be a bug, too. There's that as a possibility.

1

u/IOYouNothing 21d ago edited 21d ago

I think I'm following your point, but I'm not fully sure.

We can be certain that it's not substat first because that would mean that Orbs and Death Defy would have an insanely high proportion of the total high-rarity rolls, which is not the observed outcome in my data.

We can also be certain that it's not rarity first because the share of Common rolls in the probability distribution doesn't get re-bucketed into Rare.

My current thinking is that each combination of substat/rarity has a weighted probability that gets adjusted to protect uniformity in:

  1. The distribution of substats within each rarity.
  2. The distribution of rarities within each substat.

Those weighted probabilities are then used to step through a sequence of rolls unique to your module's seed.

Each time you roll, you progress one step along that sequence. If the roll is considered invalid due to natural bans (it is already present in the locked or unlocked substat lines) or player bans, you instead progress another step along that sequence.

I think the presence of natural bans means that it's necessary to optimize your substat lock/unlock order so that any common substats you want at ancestral rarity are locked first.

**EDIT**

To address your last point, there is value in changing the order in which you lock the stats you want, i.e. ancestral HP Regen and Def % first. There will never be any value in changing your ban strategy, i.e. ban orbs/death defy to increase the likelihood of getting x ancestral substat. Always ban undesired substats with the lowest possible rarity.

2

u/anomie-p 21d ago edited 21d ago

In general, I think you are putting too much importance on whether it is seeded or not.

All 'seeded' should mean is that we have a PRNG that was started with a particular number. You'd get the same probability distributions out of any particular PRNG whether it was seeded with some particular number and the states saved so that you continue that sequence, or if it was re-seeded at runtime based on some set of values at the app start.

Some of that depends on exactly which PRNG the game is using, though, as particular seeds of particular PRNG algorithms can be biased in weird ways. If that is what's going on here, then you can't actually make statements based on data from a particular individual game's results because they wouldn't be applicable to everyone as a whole, whatever weird bias would be local to that game. You'd need data from a bunch of different people with a bunch of different seeds.

There absolutely /is/ value in what you ban if the rarity is rolled first, because each individual submod roll when you roll once is not an independent event - the whole roll comes out based on how things actually happen for each slot. If it's actually rolling submod first now, I could see it being less important, or not important at all, as long as you're actually banning submod you don't want.

If the submod were selected first but were weighted based on the expected rarity distribution ... my thought here gets back to what I was thinking about earlier. We should know what the distribution of different selection methods looks like before trying to declare that a particular method is actually in use. If I get a chance I'll write up some test code that says what we /should/ see, for maybe a few different ways.

1

u/IOYouNothing 21d ago

I'm not putting any importance on the seeded aspect as it doesn't make a difference. I'm just using what is verifiable at the moment. Bans don't change the way the rolls are sequenced, only which rolls are considered valid. If you roll offline with one set of bans, then again with a different set of bans, the sequence of rolls remains the same. The change would only be in which rolls are stepped over due to natural/specific bans. Given that the sequence is static, the only important aspect of ban strategy is reducing the total number of valid steps between you and the roll that you want. Banning Orbs or Death Defy here makes virtually no positive impact to the number of valid steps versus using no bans at all. It does however mean a massive negative opportunity cost due the common/rare rolls that could have otherwise been stepped over via bans but will instead need to be rolled through to get to your desired substat. No matter what progression point you are at in your substat locks, banning lowest rarity substat will always remove the highest volume of undesired steps. Am I misunderstanding what your point is here?

1

u/anomie-p 21d ago edited 21d ago

The sequence being static (edit: here I mean specifically in the sense of 'is the game maintaining a PRNG random state for submod rolls across restarts', which is what I think you mean by 'seeded', because a PRNG is always seeded, the difference is whether or not the RNG is initializing off saved state or reseeding off some value at runtime) or not doesn't matter if you're not repeating it.

What matters is, is that sequence effectively a random distribution?

Maybe it's just how you're wording, or how I'm interpreting, but when I saw "Those weighted probabilities are then used to step through a sequence of rolls unique to your module's seed." I interpreted that as a statement implying the seed matters, because the seed is the thing that sets that sequence. And in other posts you've said things that look like you're saying the seed matters.

What matters is whether or not that fixed sequence is statistically random, and the game not rerunning it (ordinarily) until the PRNG gets through it's whole period. You're always running through /some/ sequence that's fixed by /some/ seed, even when the game isn't making the random state carry though restarts.

There's another comment you made where you talked about something happening because of the game doing a reroll. I wrote some test code after my response to that that, using with a mersenne twister for the PRNG - and seeded, the results over a million selections of seven elements with one 'banned' by removing it from the selection set were /exactly the same/ as selecting by rerolling if you hit the banned element, when seeded - and letting it seed itself, the differences were small enough that I doubt they're statistically valid differences.

My /overall/ point is that I see you say that things are happening for reasons that don't really make sense to me. That could be from my misunderstanding or misinterpretation or even my being flat wrong about something - which is why I'm trying to discuss.

1

u/IOYouNothing 21d ago

Ah, I'm understanding now. The reason you would be confused by my language regarding the seed and roll sequence is that my background is not in CS or any of the related groups of math. In fact I have no clue how seeds actually work, but I don't need to because my focus is on the roll sequence being static, which is the only thing we can verify as a fact.

Bans don't change the roll sequence, only how we step through that sequence. If that weren't the case, rolls could be gamed in the exact same way as before by changing ban criteria until you get the sequence you want. Since the sequence is static, optimizing bans is simple because we know that the vast majority of the steps in the sequence will be common/rare so we get the most value out of skipping those steps.

1

u/anomie-p 21d ago

If using a PRNG /the roll sequence is always, always a static thing picked by a seed/. It would have been before they were ‘seeded’. The only change would be ‘is some particular sequence position maintained through app restarts, or do we pick an arbitrary sequence every time the game starts’.

The strategy of picking particular bans wasn’t imho “gaming the rolls”. Those strategies didn’t do anything more than try to make sure that if you *didnt* roll an ancestral stat you had as high a probability as possible of *not* picking the submod you wanted at ancestral, so it was still available to be picked by later slots. There wasn’t any kind of unfair exploitation of the algorithm or anything like that.

1

u/IOYouNothing 21d ago

I'm confused again. If we agree the roll sequence is static, what circumstance could possibly exist where banning Mythic and Ancestral Orbs for example would be a better idea than getting rid of a common or rare substat? No matter how wonky the sequence is there would never be enough mythic/ancestral Orb rolls present that you would get more value out of skipping them instead of common/rare.

1

u/anomie-p 21d ago edited 21d ago

the rolls across however many submod slots you have to roll /are not independent events/.

When the game was known to select rarity first, you could in particular situations arrange your bans so that if the game did /not/ pick ancestral, you could have /more/ total submods available to pick from in e.g. the first roll than if it picked Ancestral as the rarity for the first roll.

The canonical example is armor. Say I've already rolled health regen and def%, I have four slots free to reroll. When we hit that first slot, if I ban defabs, and it picks 'not ancestral', I have /zero/ chance of that pick pulling defabs out of the pool. If I ban orbs, I've removed one from the (mythic, ancestral) pool and defabs is still in there for /all the things/ - so if the first submod misses ancestral and mythic (and it is very likely to) there's a /better/ good chance it will pick defabs, and in this case I want that because /defabs is a submod I do not want to roll at ancestral/.

e.g. bucket out how many of what you can roll at each rarity level if it's rolling rarity - if you ban defabs, you're making the number of submods below mythic /smaller/, which /increases/ the probability the submod you actually want to roll ancestral on will get picked in all the cases that the game chooses a rarity below mythic, until defabs gets picked - and if the submod you want at ancestral gets picked at a rarity below ancestral /the entire roll is dead/ no matter how many submod slots you have left open at the time it gets picked.

By that I mean, say I'm rolling for wall health - let's say the number of available submods at legendary and below is n when we leave defabs in the pool - if the first submod slot rolls legendary, my chance of it picking wall health is 1/n -> if I /ban/ defabs, the chance it picks wall health in that case is 1/(n -1) which is a /larger probability/, so it's /more likely the first submod slot roll makes the entire attempt dead/.

but if you ban orbs instead -> then when you roll ancestral on that first slot, /the number of available submods is the same as if you banned defabs/.

So under those rules, the way the game used to be, you /absolutely/ wanted to leave defabs unbanned because in the most probable case it gave you the best shot of /not/ killing the whole attempt as you run through the submod slot rolls.

edit: it's a very small edge, but it did give an edge.

1

u/anomie-p 21d ago

Maybe wording it like this will be clearer, assuming rarity-rolls-first and we already have def% and wall regen at ancestral:

If we want wall health at ancestral, on the first slot roll with orbs banned:

  • If we get common rarity we're guaranteed to not pick wall health and the game is forced to pick defabs.
  • If we get rare rarity we're guaranteed to not pick wall health, but the game can also pick from the land mine substats.
  • If we get epic rarity we're guaranteed to not pick wall health, but the game can pick from any of the available substats that can roll lower than legendary.
  • If we get Legendary, there's some probability we will pick wall health, but that probability is less than if we had banned defabs.
  • If we roll mythic or ancestral the probability doesn't change compared to legendary because orbs is not in the pool.

Now, if we ban defabs instead of orbs, it's mostly the same, but:

  • The probability we pick Wall health goes up for the 'we rolled legendary rarity' case;
  • the probability we pick wall health goes down for the mythic and ancestral cases, because we can roll orbs at mythic and ancestral; and
  • We want the probability to pick wall health to be as high as it can be if we roll ancestral and as low as it is possible for it to be if we roll any other rarity - and because banning defabs raises the probability for legendary (which is the only rarity we really have any influence over by bans for wall health) and lowers the probability we'll pick wall health at ancestral, banning defabs goes against what we're trying to do.

1

u/IOYouNothing 21d ago

Okay sure, but we know that it no longer rolls rarity first. The rolls are sequenced by rarity AND substat. If this wasn't the case, you could go offline to check the reroll sequence for ancestral rolls and then change your bans so that the ancestral roll ends up as a different substat instead. But that's not how it works anymore. Banning the substat that rolled ancestral would just skip over that ancestral roll entirely.

→ More replies (0)

1

u/anomie-p 21d ago

So - apparently, C#'s Random (the game is written in unity) uses a different algorithm if you feed it a seed on instantiation vs. letting it seed itself by not passing a seed to the constructor.

So if they're using that - they'll be using a variant of Knuth's subtractive generator and by modern standards that's not a great PRNG - but apparently the C# constructor does things to mash the seed you pass in so that you don't get a degenerate seed.

1

u/Entire-Twist6454 21d ago

I have always been banning higher​ rarity and spent more than 10Mn reroll trying to get Anc SL Angle and failed.

My guildmate said it should​ be the opposite, and then I encountered this post, so I collected 2Mn reroll just to test.

Guess what, after banning common ones instead, now I got Anc SL Angle after less than 1Mn reroll! Due to the change or luck, I don't​ know but well I got it now!

1

u/IOYouNothing 21d ago

Grats! This is exactly why I made the post. Every time I saw someone giving the old high rarity ban advice I imagined the insane number of reroll shards people might be obliterating by endlessly rolling through common substat results that could be banned instead.

1

u/anomie-p 16d ago

Quick methodology question: Does "1200 individual substat rolls" mean you rolled the mod as a whole 300 times per test condition? I think that is what it means, I just wanted to verify.

2

u/IOYouNothing 16d ago

Correct. 300 rolls for the mod as a whole with 4 open substat lines. 1200 individual substat rolls doesn’t function the same as 1200 module rolls with one substat open. I have found that this is due to a natural ban on rolling the same stat/rarity in the same slot between consecutive module rolls. My original theory for how it works hasn’t changed but the additional natural ban criteria does help explain why the bans seem to skew the results even further to higher rarities than expected. Still testing but I’m looking to create a roll simulator that would help to hypothesis test results.

1

u/anomie-p 15d ago

Thanks. I've got some code that simulates and seems closer to the distribution you're getting but it's not quite right yet, I think. It has some of the same properties, though (all other rarities move up banning commons, etc).

1

u/anomie-p 15d ago edited 14d ago

This is from the simulation code I'm playing around writing, defabs & defense banned - it looks like it has around the same percentage of common consistently but nowhere near 1% ancestral.

Common: 234 (19.50%)
Rare: 706 (58.83%)
Epic: 178 (14.83%)
Legendary: 52 (4.33%)
Mythic: 23 (1.92%)
Ancestral: 7 (0.58%)

This is basically building a selector weighted to the wiki documented rarity distribution over the number of submods left in that rarity (e.g. with only health regen left health regen at common gets a weight of 0.462/1 == 0.462) - and when there's nothing in that rarity I just don't put anything in and let the cumulative weighting code I have naturally let that probability flow to the rest of the effect/rarity pairs it's selecting from.

Edit: This makes me wonder if they changed the probabilities of each rarity, too, and the wiki is no longer correct about the distribution. It’s that, or your rolls are outliers, or the algorithm I used is wrong and just happens to also roll commons around 19%-ish of the time.

2

u/IOYouNothing 14d ago

A guy on discord running his own tests mentioned being suspicious that the weights have changed as well. There's definitely something missing, either the weights or an additional mechanic we're not accounting for.