Posted 9 months ago by

The Flash PRNG algorithm is publically available in an official Flash GitHub repository - AVMPlus. We have known about this for quite a while, yet never looked too deeply into it. That is, until now. We assumed Flash RNG would be chaotic and completely unpredictable. As it turns out we were wrong, Flash RNG is much more manageable than previously expected. There are no RNG calls other than from within the .swf and the seed is determined when the game is opened based on data from hardware performance counters (essentially random). To be clear, the seed does not change without reloading the .swf and the RNG only updates when it's used in the game. For example, the actions of the player do not matter between book puzzle opens (assuming no bats and music opens, of course).

Because there are only around 2 billion seeds (2^31) we can launch a trivial brute force attack to recover the seed (although there are more sophisticated approaches, such as the algorithm described here: https://eprint.iacr.org/2019/086.pdf ). Since we are working with partial information, brute force is usually the best approach. Using this knowledge we created an RNG predictor for books and it makes getting 8 books, a previously almost unattainable feat, doable within 5 minutes.

Then the question arose: "Does it make sense to use this in actual speedruns of the game?". The issue at hand is that this is usually only possible after playing around in the game for a while. Then resetting within the game, something akin to getting items before a run starts.

At least one thing was clear, we cannot ban dynamic RNG prediction - finding the seed during a run. This is because it is fundamentally impossible to check for and it raises no flash-philosophical objections: the run is started from a clear state and the runner only uses information available to them without external software. However, one might object and question how feasible it would be for a person to find the seed without computer help. Well, it is likely impossible but it is possible to find certain correlations between RNG outcomes that humans can notice and react to. If we were to only allow only "human" RNG manipulation, the rules would be so vague and person-dependent, they would be almost nonsensical. If we were to ban RNG manipulation entirely, we might as well require the runner to visit all rooms in GSSH 2 as if they were unable to infer where the chocolate donuts are. This makes clown code prediction a likely future GSSH 2 strategy.

When it comes to pre-run RNG manipulation, we ultimately decided to split the categories where the RNG plays a big role into Set Seed (pre-run preparations) and Random Seed (.swf reloading). We decided Set Seed is interesting enough for its own category as, even though not easy to justify as legit, it lets us reach the true limits of the games. Set Seed allows using a custom .swf available in resources to, well... set the seed before each run. This is because actually preparing for a run could take hours to days without it. I believe the runners' comfort is more important than authenticity in this case.

The leaderboards and the rules have been updated to reflect this. Top 3 runs in Random Seed categories now require the runner to reload the .swf between most attempts.

GET YOUR FREE WR NOW WHAT ARE YOU DOING THIS POST IS SO BORING WTF You get the news 1 day late cause GSSH 1 is the superior game ;)

Read more
Game stats
Followers
34
Runs
191
Players
36
Latest news
The Random Seed/Set Seed split

The Flash PRNG algorithm is publically available in an official Flash GitHub repository - AVMPlus. We have known about this for quite a while, yet never looked too deeply into it. That is, until now. We assumed Flash RNG would be chaotic and completely unpredictable. As it turns out we were wrong, F

9 months ago
Latest threads
Posted 4 years ago
0 replies
Posted 5 months ago
7 replies
Posted 3 years ago
0 replies
Posted 4 years ago
3 replies