How We Solved the Worst Minigame in Zelda's History
Linkus73 HN recommenders · 2020–2024
1.1M views · explainer · evergreen · Uploaded 2020-05-19
Linkus7 explains how a community reverse-engineered The Wind Waker to predict its random number generator and beat the Sploosh Kaboom battleship minigame consistently. It includes d3 animations by Peter Schmidt-Nielsen.
HN recommends it as a rigorous, fun example of reverse engineering a game to predict and conquer its RNG.
1:25:348 Bit & '8 Bitish' Graphics-Outside the Box
GDC Festival of Gaming
24:39SM64 - Watch for Rolling Rocks - 0.5x A Presses (Commentated) [OUTDATED]
pannenkoek2012
22:21Reverse emulating the NES to give it SUPER POWERS!
suckerpinch
1:01:07The Ultimate Game Boy Talk (33c3)
media.ccc.de
31:37How Crash Bandicoot Hacked The Original Playstation | War Stories | Ars Technica
Ars Technica
5:58MarI/O - Machine Learning for Video Games
SethBling
53:51The Engoodening of No Man's Sky
Internet Historian
16:18Computer program that learns to play classic NES games
suckerpinch
5 comments from Hacker News
Good point. That approach was in fact used for "Sploosh Kaboom", a RNG minigame in the Windwaker: [VIDEO]
Excellent video. I'm impressed the author went to recreate the run frame by frame, and then used those findings to analyze what was happening. Never expected this video to turn into a full on reverse engineering explanation. As a side note, this kind of speed run has become more popular in the recent years for a combination of reasons: - First, it's difficult to improve on the regular world records since they're so optimized (just have a look at Quake Done Quick and its sequels). - Second, the emulators available to the speed running community have evolved. They now include better ways to track what's happening in memory. - Third, the games themselves are understood better (as recently exemplified by the Super Mario 64 full reverse engineering). So it's creating a whole new genre of runs that simply isn't about execution anymore. If you're interested in the topic, you might like the Super Mario World speed run that uses a similar technique ( [LINK] ), or the recent work on removing randomness from Wind Waker runs ( [VIDEO] ).
That's true. I did think about mentioning this possibility, but decided not to. Another good example of predicting RNG, after a large amount of gameplay, for a non-turn-based game: [VIDEO] I think in certain Pokemon games, people figured out how to predict and manipulate random encounters based on an animation in the load screen.
The sheer depth of knowledge and analytical ability pannenkoek has is honestly quite amazing. I've become quite spoiled watching their SM64 videos, it's been incredibly hard to find something of similar rigor and production value for other games. The closest I've found so far has been a video on how a group of speed runners were able to conquer RNG for a puzzle in Wind waker[0]. [0]: [VIDEO]
If you're developing a game, there's a fairly big issue in that many things may be requesting values from, and thus incrementing, the PRNG, and many of them could be indirectly controlled by the user (where they are, where they're looking, etc. [VIDEO] is a fun video about reverse-engineering Zelda to predict the randomness in a minigame) As far as the approach, I agree in that I don't understand why 'no code changes' is that important, especially in the context of Python which has a general attitude of consent towards monkeypatching code. Maybe one of the randomness sources was hashing all the source files? :P