05/23/24: More Roulette

So when I put up the R/S/E roulette article, I had to slightly rush it to make it by April 1st - there were some things I wanted to get into better but just didn't quite have a chance to finish if I wanted to get it up in time. I figured I could get into those things afterwards and then put up these minor enhancements to the simulator when I got the chance.

This somehow turned into a whole new rabbit hole about the roulette. One of the things I didn't have time to get into was exactly emulating how the game went about randomizing for the simulator - something I believed was a minor detail whose effects would disappear in rounding anyway. Once I did get into it, though, it turned out (which I'd missed) that the calculations for the starting angle and the fuzz range were both using the final bit of the same random number, meaning they were actually highly correlated with each other - and also, after doing more thorough in-game testing which I'd also been hoping to do and getting some suspiciously consistently off results, I realized I'd missed C silently converting a float to an integer thanks to being too used to programming languages where you can't do that (note to programming language designers: this is terrible).

All in all, this meant some of my numbers were off, and that the article now needed much more nitty-gritty about precisely how the randomization works. I have now updated the article and corrected the errors in the text and in the simulator. The main upshot is that under most circumstances the slot distribution is actually slightly asymmetrical, thanks to the fuzz range being correlated with whether the starting angle is twelve o'clock or three o'clock on the one hand or six o'clock or nine o'clock on the other, and that the correct bet timing under ideal circumstances is actually specifically when the bet slot is approaching the bottom of the wheel, not the top, which will let you win 40% of the time (every time the twelve o'clock starting angle is chosen).

Additionally, I've added some new features to the simulator that I'd wanted to add:

  • You can now click the "Set bet/occupied slots" button in order to be able to use the simulator wheel like the probability-based wheel a bit earlier in the article - click the white part to set a slot as occupied, click the colored part to set a slot as your bet. The ball will bounce realistically to one of the adjacent slots at random if it lands on an occupied slot, and the probabilities shown per slot on the simulator wheel will reflect the final probabilities for each slot with bounces taken into account (including accounting for which rescue Pokémon will actually be picked, given where the ball is on the wheel when it gets stuck).
  • You can now make more granular choices about what to show in the simulator. You can set the starting angle to be random, a specific angle, or all four possible starting angles, and separately you can choose whether to use random fuzz, a specific fuzz value, or simulate either the lowest, highest and medium fuzz or all possible fuzz values.

I am also finding myself gravely wanting to restructure this code which is a series of additional functionality incrementally bolted onto what was originally just meant to be a simple little calculator that'd show your possible fuzz ranges, but at least I can do that after these necessary corrections.

Comment on this - View comments


No comments on this update as of yet. Post one?

Page last modified November 3 2020 at 02:21 UTC