Learning about Slay the Spire correlated RNG and whoops shit, I made this mistake too.
TLDR: Initialize all of your generators with seeds generated by a generator initialized with the game seed lmfao
I've set up my RNG system like Slay the Spire's, where you use a bunch of independent random number generators that you use to keep track of independent parts of the game/run's generation. You have a generator for deciding what enemies appear in a fight, what encounters happen in what order, and what items get dropped, etc. This is really handy for debugging when you want to re-roll only specific parts of the game without having the cascading effects of changing the rolls for everything else in the game. If I find an interesting seed that produces some interesting results but want to see what a given encounter would look like if it had rolled differently for enemies, I can just step forward the enemy random number generator, rebuild the encounter with those enemies, and still get the same room order afterwards.
The ISSUE with this, is in how you set all your independent generators up. The fast and easy way that it seems both Mega Crit and I did, was just create a bunch of generators, and give them all the game/run seed and call it a day. Unfortunately, this means that there's now some correlation between each generator's sequence of generated values.
The enemy spawn generator is going to generate 1, 2, 6, 1, 6, 8, 9 in that order, and the encounter type generator is ALSO going to generate 1, 2, 6, 1, 6, 8, 9 in that order. If the check I use to generate Big Scary Monster is value < 3, and the check I use to generate a shop for an encounter is value < 2, seeing a shop first thing means that you can be certain that Big Scary Monster is going to show up in the first combat encounter and that can affect what you buy from the shop.
At first, the way around this felt like just adding some offset to generator's internal state/position, but that just means the generators are going to overlap at a different number of rolls instead of the first several. Instead I think you've gotta have a one-off generator that's initialized with the game/run's seed, and use it to generate new seeds for each individual generator and nothing else. Your game stays deterministic (assuming your generators are), but the first rolls of each generator are going to be no easier to guess than any independent value from your pseudo-random number generator, no matter how many rolls you observe from other generators :)

Sleepy-girl representation is important
