Fishing isn’t much more complex than registering the fishing rod and using it, let’s check Bulbapedia to confirm…
Starting with Generation III, the fishing mechanic becomes more complex, as the player must pay attention
Oh, well, that’s what OpenCV is for, right?
In Pokémon Ruby, Sapphire, and Emerald, this requires a series of confirmations when using better rods,
A series of confirmations presents a problem, given that it’s not a fixed number and so requires distinguishing between “Not even a nibble…”, “A POKéMON’s on the hook!” and waiting to see if there’s another bite which needs an A press. Luckily, each of the different options that need to be distingushed have the text in different, non-overlapping positions.
Starting the process is simple, press Select to cast the line and then wait until a white bar appears at the bottom of the screen. Then a loop of the following steps:
- Check if A should be pressed, “Oh! A bite!” appears on the second line of text, so check for any pixels below the threshold of the background.

Oh! A bite!
- Check if a Pokémon is on the hook. This text extends further right than any other text, so again check for pixels darker than the background. Then an encounter starts as normal, so can use existing logic.

A POKéMON’s on the hook!
- If nothing was caught this time, the text extends to the left, and can be used to press A and then start the loop again.

Not even a nibble…
There’s a bit of timing needed to ensure that after pressing A for a bite it waits for enough time that the text on the next screen has time to render. Otherwise it’s possible to catch the left-hand side of the text which makes it look like it failed, while actually the text hadn’t fully rendered.
And now all ready to handle Too much water.

Fishing State Machine
Last modified on 2026-02-19