Draw odds are Garbage!

Options
13»

Comments

  • TheEyeDoctorsWife
    TheEyeDoctorsWife Posts: 829 Critical Contributor
    Options
    Disheartening? Disappointing? Did you have a better adjective?

    I know that when you have saved up tokens for a while and it is finally time to open them and cover the latest 3, but instead you get just a few, it feels underwhelming at best, when it should be an exciting moment.
    Forum rules forbid my opinion .
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    Options
    I totally agree that it can be very disappointing.  Disheartening to the point of quitting the game.  Does that sound extreme?  Imagine a new player that plays 20 battles a day, which takes an hour or so.  They’re dedicated and continue playing 20 battles a day but this only produces about 50 CP per week.  After 6 weeks they start champing 3*s and get some LTs.  Let’s also imagine that they listened to certain forum advice and hoarded their LTs and CP.  Let’s say they’ve saved 21 pulls and hope to get 3 x 5* covers to up their strength and performance.

    They then open 21 Latest but get either one or no 5* covers at all.  We’ve seen posts like this. So, they get angry and disappointed because all of their hard work did not pay off and they’ve been consistently playing the game for a couple months.  That kills their motivation and then they quit (and rightly so). 

    It takes a lot of battles and rewards just to get 1 pull.  Then that reward only has a small chance of a 5* cover.  But I must say this is all about expectations.  Most forumites talk about 4* covers for their use in their champ farm and focus on covering 5*s.  If new players acquire this same perspective, they’ll be very disappointed when they can’t keep up.  
  • Srheer0
    Srheer0 Posts: 510 Critical Contributor
    Options
    I find it interesting that people have that many CPs saved up and expect a different rate of return in multiple pulls. 
    Just because a casino (for example) boasts a 97% slot payback, people will expect to get a return of $97 for every $100 they put into any given machine. That 97% payout is an average of all their machines over the course of months or years, not per machine.
    When I’m given a 1:7 chance of a 5*, I don’t assume I’m going to get one for every 7 pulls. Especially when I see a 4* with 35x odds in the 4* list. Have you noticed the Odds for getting a 4* have been removed? To me this could equate to odds of 93:100, or you might see seven 5*’s in every 100 pulls… over the course of several months if not years.

    That's something I dislike about pulls. They tell you SOME of the odds, but not all of them. EG,

    Heroic Pack -  4star 1:40, 3star 1:13. But they don't say the 2star rate. You have to work it out. Those are just numbers from memory and could be wrong, so don't quote me on the specific numbers. 
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    edited April 2022
    Options
    Srheer0 said:
    I find it interesting that people have that many CPs saved up and expect a different rate of return in multiple pulls. 
    Just because a casino (for example) boasts a 97% slot payback, people will expect to get a return of $97 for every $100 they put into any given machine. That 97% payout is an average of all their machines over the course of months or years, not per machine.
    When I’m given a 1:7 chance of a 5*, I don’t assume I’m going to get one for every 7 pulls. Especially when I see a 4* with 35x odds in the 4* list. Have you noticed the Odds for getting a 4* have been removed? To me this could equate to odds of 93:100, or you might see seven 5*’s in every 100 pulls… over the course of several months if not years.

    That's something I dislike about pulls. They tell you SOME of the odds, but not all of them. EG,

    Heroic Pack -  4star 1:40, 3star 1:13. But they don't say the 2star rate. You have to work it out. Those are just numbers from memory and could be wrong, so don't quote me on the specific numbers. 
    The 2* rate is just the leftovers, the bottom of a nested if else statement.  I’m guessing it’s programmed like this:

    At some previous point in time, generate a sequence of numbers that represent the covers you would get when pulled.  For each pull, they first determine the tier, then the character position in that tier, then the power position for that character.  I’m guessing they check the tier from the top down, so if it “falls through” those checks, you end up with the bottom tier for that token.  

    The problem here is adding new characters because your existing sequence of pulls may not include them.  For example, let’s say in your next 100 LL pulls, the positions of the 4* characters you would get range from 10 to 100 (out of 120 characters).  So if a new 4* character is added to the pool in a position below 10 or above 100, then there’s no chance of getting that character in the next 100 pulls. 

    To further show the problem, let’s say your next 1000 LL pulls include all 4* characters from 1 to 120, but then they add a new 4* character bringing the total to 121.  Now whoever is in the last position in the list (maybe Yondu) cannot be obtained in the next 1000 pulls.  So, they must refresh your sequence to include all characters.  

    This brings up 2 big questions: 

    #1 How far out do they calculate the sequences?
    #2 How often do they update the sequences?

  • Ptahhotep
    Ptahhotep Posts: 419 Mover and Shaker
    Options
    bbigler said:

    This brings up 2 big questions: 

    #1 How far out do they calculate the sequences?
    #2 How often do they update the sequences?

    If I were programming this I would simply store two numbers: a seed and a count of pulls made. Since pseudo random numbers are repeatable when the same seed is used the sequence is fixed and the count gives the position in the sequence for the next pull. Also, everyone uses the same sequence but starts at a different point in it. Pseudo random numbers give a very  long sequence that eventually wraps around, so is effectively infinite. The sequence only updates in the sense that what you pull can change as more characters are added to the pool. Your random number won’t change, but the cover it yields might.
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    Options
    Ptahhotep said:
    bbigler said:

    This brings up 2 big questions: 

    #1 How far out do they calculate the sequences?
    #2 How often do they update the sequences?

    If I were programming this I would simply store two numbers: a seed and a count of pulls made. Since pseudo random numbers are repeatable when the same seed is used the sequence is fixed and the count gives the position in the sequence for the next pull. Also, everyone uses the same sequence but starts at a different point in it. Pseudo random numbers give a very  long sequence that eventually wraps around, so is effectively infinite. The sequence only updates in the sense that what you pull can change as more characters are added to the pool. Your random number won’t change, but the cover it yields might.
    That is very clever, but do you think it would do that calculation (seeding the RNG and looping equal to the count until you get your number) every time you make a pull?  Would it do that processing for a quick claim of 50?  I’m doubtful because the processing time would increase with each pull.  

    I have a new theory though that I’m very confident with because it solves the problem of creating a sequence in advance without knowing how many characters / covers are in the pool…..

    They generate / store 2 numbers for each pull, one is the tier and the other is a percentage which represents a position along the line of all possible covers in that tier.  For example, if there were 60 possible covers, then 50% would represent the 30th cover along that line.  If there are 80 possible covers, then 50% maps to the 40th cover instead.  When a pull is made, it simply looks up the tier and cover in that position (rounding up or down), then loads the graphic to show to you.  

    But since most tiers have over 100 possible covers, they would need to store a percentage value down to a tenth of a percent, like 49.7%.  This would support pools up to 1000 possible covers.  And this sequence of percentage numbers does not need to change when new characters are added to the pool.  
  • Timemachinego
    Timemachinego Posts: 467 Mover and Shaker
    edited April 2022
    Options
    It's known that the calculation is done well in advance so that people are no longer able to "re-roll" like they did once upon a time; the only real questions are how "long" that string of pre-determined results is and if there are any quirks in the algorithm that may lean results in this or that direction (which is what Bad posits in another thread).

    Given that I've struck out for over 60 and I've got alliance mates that have gone over 100 straight without a single 5 (in the same store, this is important), I think we can safely say that there's no pity-action to the algo and for those kind of horrible results to be possible it has to be sufficiently long to balance that out over time to the stated odds.
  • HoundofShadow
    HoundofShadow Posts: 8,004 Chairperson of the Boards
    edited April 2022
    Options
    I guess that string is as long as your maximum number of pulls. So, if you have 100 LTs and 2000 CPs, your string will go on for the next 180 pulls. In Classic, it'll go all the way to 80 pulls. Everytime you gain enough CP/LTs for the next pull, they'll update it.
  • Bad
    Bad Posts: 3,146 Chairperson of the Boards
    Options
    I know that the algorithm refresh and shuffles another time because before I was pulling weekly and many times I got results not optimal to champ a character, too many covers of a power.
    However the four times I broke a hoard and I pulled deeply I could champ the characters smoothly. 
    Special stores should work in the same way but I can't say because I never pulled 250 times in one.
    Classic store I don't think it works in the same way but again I use to pull on LL.
  • Ptahhotep
    Ptahhotep Posts: 419 Mover and Shaker
    Options
    bbigler said:
    Ptahhotep said:
    bbigler said:

    This brings up 2 big questions: 

    #1 How far out do they calculate the sequences?
    #2 How often do they update the sequences?

    If I were programming this I would simply store two numbers: a seed and a count of pulls made. Since pseudo random numbers are repeatable when the same seed is used the sequence is fixed and the count gives the position in the sequence for the next pull. Also, everyone uses the same sequence but starts at a different point in it. Pseudo random numbers give a very  long sequence that eventually wraps around, so is effectively infinite. The sequence only updates in the sense that what you pull can change as more characters are added to the pool. Your random number won’t change, but the cover it yields might.
    That is very clever, but do you think it would do that calculation (seeding the RNG and looping equal to the count until you get your number) every time you make a pull?  Would it do that processing for a quick claim of 50?  I’m doubtful because the processing time would increase with each pull.  
    It’s not necessary to loop through the sequence; the count can simply be added to the seed to get an incremented seed that indicates the new position.
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    Options
    @Ptahhotep From some recent analysis, I’m very very confident that they are using a percentage position in the cover pool to give out covers.

    Now whether this position is stored or calculated on the fly is debatable.  If the RNG can run fast enough, then it’s believable that it could calculate the next position as you pull and store an incremented seed.  But it also needs to calculate the tier as well, so maybe it stores 2 seeds for each token pool.  So is that done on the fly or stored?  We may never know.  But calculating these things on the fly would certainly solve the problem of needing to store a long list and expand it periodically.  But I’m no longer perplexed by how they handle new characters entering the pool.  
  • Rhipf
    Rhipf Posts: 294 Mover and Shaker
    Options
    bbigler said:

    But since most tiers have over 100 possible covers, they would need to store a percentage value down to a tenth of a percent, like 49.7%.  This would support pools up to 1000 possible covers.  And this sequence of percentage numbers does not need to change when new characters are added to the pool.  

    Instead of saving percentages just keep the two random numbers. Divide the first number by the number of tiers and remainder is the tier (one star tier is numbered zero to make things easier) Divide the number by the total number of characters in a tier. The remainder of the division (rounded down to a whole number) would be the character that gets selected (characters numbering starting at zero).
    Using this method adding characters doesn't make any difference since you are just dividing the random number by a larger number.
  • KGB
    KGB Posts: 3,040 Chairperson of the Boards
    Options
    I guess that string is as long as your maximum number of pulls. So, if you have 100 LTs and 2000 CPs, your string will go on for the next 180 pulls. In Classic, it'll go all the way to 80 pulls. Everytime you gain enough CP/LTs for the next pull, they'll update it.

    I don't think they keep a bunch of pre-rolled numbers. I think they do as Ptahhotep suggested. They just keep the initial seed and the number of pulls made. Then each time you draw, they just generate the next random number in the sequence and update the number of pulls made. Otherwise they'd need to keep tons of pulls stored for every possible store and vault (I for example have tons of covers for old vaults) which would consume a lot of space.

    KGB
  • KGB
    KGB Posts: 3,040 Chairperson of the Boards
    Options
    bbigler said:

    I have a new theory though that I’m very confident with because it solves the problem of creating a sequence in advance without knowing how many characters / covers are in the pool…..

    They generate / store 2 numbers for each pull, one is the tier and the other is a percentage which represents a position along the line of all possible covers in that tier.  For example, if there were 60 possible covers, then 50% would represent the 30th cover along that line.  If there are 80 possible covers, then 50% maps to the 40th cover instead.  When a pull is made, it simply looks up the tier and cover in that position (rounding up or down), then loads the graphic to show to you.  

    But since most tiers have over 100 possible covers, they would need to store a percentage value down to a tenth of a percent, like 49.7%.  This would support pools up to 1000 possible covers.  And this sequence of percentage numbers does not need to change when new characters are added to the pool.  
    The number of characters in the pool has to be not only known, but also stored someplace. The reason is that old vaults contain a lesser set of characters. For example I have tokens from some old introducing events where there were FAR less 4* characters and if I look at the draw odds it only lists the characters that were in the  game at that time. So it's not possible to get new characters from these old vaults and hence it means they also stored the list of characters in each tier for that vault.

    Now heroic, mighty and latest & class legends have an ever increasing list of characters as new ones are added. But at the time they are added, they update the list so it's 'known and fixed' at the moment you do your draw. So they clearly are NOT prerolling your characters because it would break every time a new character was added.

    KGB
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    Options
    KGB said:
    bbigler said:

    I have a new theory though that I’m very confident with because it solves the problem of creating a sequence in advance without knowing how many characters / covers are in the pool…..

    They generate / store 2 numbers for each pull, one is the tier and the other is a percentage which represents a position along the line of all possible covers in that tier.  For example, if there were 60 possible covers, then 50% would represent the 30th cover along that line.  If there are 80 possible covers, then 50% maps to the 40th cover instead.  When a pull is made, it simply looks up the tier and cover in that position (rounding up or down), then loads the graphic to show to you.  

    But since most tiers have over 100 possible covers, they would need to store a percentage value down to a tenth of a percent, like 49.7%.  This would support pools up to 1000 possible covers.  And this sequence of percentage numbers does not need to change when new characters are added to the pool.  
    The number of characters in the pool has to be not only known, but also stored someplace. The reason is that old vaults contain a lesser set of characters. For example I have tokens from some old introducing events where there were FAR less 4* characters and if I look at the draw odds it only lists the characters that were in the  game at that time. So it's not possible to get new characters from these old vaults and hence it means they also stored the list of characters in each tier for that vault.

    Now heroic, mighty and latest & class legends have an ever increasing list of characters as new ones are added. But at the time they are added, they update the list so it's 'known and fixed' at the moment you do your draw. So they clearly are NOT prerolling your characters because it would break every time a new character was added.

    KGB
    If they stored a percentage position (which I’m sure of), then adding new characters is not a problem.  But it is logical that they would want to avoid storing long lists for every store and vault.  So they probably store 2 seed values each that get updated when you pull, 1 seed to determine the tier and the other to determine the percentage position in that tier for those covers.  Plus, these seed positions must be stored on their server along with all other data for the current state of your account.  So, restarting or reinstalling the game won’t change the covers you would get.  
  • Timemachinego
    Timemachinego Posts: 467 Mover and Shaker
    edited April 2022
    Options
    KGB said:


    Now heroic, mighty and latest & class legends have an ever increasing list of characters as new ones are added. But at the time they are added, they update the list so it's 'known and fixed' at the moment you do your draw. So they clearly are NOT prerolling your characters because it would break every time a new character was added.

    KGB

    Correct, exact characters are not prerolled but rarity and "character position" are (at least in LL). It makes me guess that the held preroll for Classics may be a lot shorter to account for the monthly additions or there's some other mechanism there, like you're rolling a table of 1000 for the characters that just loops so there's always room to add one at the end.
  • bbigler
    bbigler Posts: 2,111 Chairperson of the Boards
    Options
    KGB said:


    Now heroic, mighty and latest & class legends have an ever increasing list of characters as new ones are added. But at the time they are added, they update the list so it's 'known and fixed' at the moment you do your draw. So they clearly are NOT prerolling your characters because it would break every time a new character was added.

    KGB

    Correct, exact characters are not prerolled but rarity and "character position" are (at least in LL). It makes me guess that the held preroll for Classics may be a lot shorter to account for the monthly additions or there's some other mechanism there, like you're rolling a table of 1000 for the characters that just loops so there's always room to add one at the end.
    Classics work the same way with the algorithm producing a rarity and cover position in that tier.  I believe the stored seed is fed into the RNG which produces a random percentage, like 0.942, which is then multiplied by the total number of covers in the pool (192), which equals 180.8, which is rounded to 181, and the cover in position 181 for that pool is OML Black.  The random percentage is then stored as the new seed.  

    As long as the starting seed is stored, then the sequence of random covers is repeatable.  But if the cover pool changes (new characters), so does the sequence.  But it changes ever so slightly with percentages possibly mapping to different covers.  So, OML Black could become OML yellow.