Fishing encounters

*For general information about wild encounters, see Wild encounters.*
This page describes **fishing** for wild Pokémon.

## Where to fish

Fishing can be done while facing any water tile, i.e. a tile whose terrain tag is defined as `can_fish` (5, 6, 7 or 9 by default). The player can fish while standing on land or while surfing.

## Fishing sprites

Fishing involves showing the player's sprite cast and use a fishing rod. There are two versions of this animation, one used when standing and fishing and the other used when surfing and fishing. Both are defined by a player character's metadata. As with all other player character graphics, the fishing charsets take the player's outfit into consideration.

## Encounter types

The three encounter types used for fishing are:

* OldRod
* GoodRod
* SuperRod

These three encounter types are identical, and are each triggered by the corresponding fishing rod item. Traditionally they are in the order "worst -> best".

## Scripts

The fishing scripts are all located in the script section **Overworld\_Fishing**. The main method is `def pbFishing`, and what follows below is a description of what this method does.

The method first defines two values: "biteChance" (probability there will be a bite) and "hookChance" (probability of a battle after successfully hooking it, i.e. by pressing the use button fast enough). By default, the former depends on the type of fishing rod used and the ability of the first Pokémon in the party, and the latter is 100.

Then `def pbFishingBegin` is called, which displays the rod casting animation.

A random number ("time") is then chosen (`rand(5..10)` dots), and `def pbWaitMessage` is called which displays "`. . . . .`" at the rate of one dot every 0.4 seconds until there are "time" number of dots. If the player presses the use or back button while the dots are being displayed, the fishing is cancelled with the message "Not even a nibble...".

If the fishing is not cancelled, then another random number is chosen (out of 100). If this number is greater than or equal to "biteChance", or there are no encounters defined for the used rod in that map, then the fishing is cancelled with the message "Not even a nibble...". If the random number is less than "biteChance", then `def pbWaitForInput` is called, which displays the message "Oh! A bite!" at the end of the dots. It then waits for a short time (0.5 to 1 seconds) for the player to tap either the use or back button. If they don't do so within that time, then the fishing is cancelled with the message: "It got away...".

However, if the player *does* manage to tap a button within that time, then a third random number is chosen (out of 100). If this number is less than "hookChance", then a Pokémon has been hooked and a wild battle ensues. If the third random number is greater than or equal to "hookChance", then the whole process happens again (i.e. everything after casting the rod). This keeps happening until the player either successfully hooks a Pokémon (leading to a battle) or fails.

At the end of the fishing session (both after successfully hooking a Pokémon and after failing to hook one), `def pbFishingEnd` is called, which is just the reverse of the rod casting animation (i.e. reels in). Then a battle occurs (if successful).

### Automatic hooking

There is a setting (`FISHING_AUTO_HOOK`) in the script section **Settings**, which if TRUE will mean that Pokémon are hooked automatically rather than requiring a reaction text.

## Tips

* Change the probabilities and waiting times, to make it easier/harder to hook a Pokémon. Notably, the default length of time in which you have to press a button to hook the Pokémon is fairly short (between 0.5 and 1 second), and you may want to make this longer so that players with slower reaction times stand a chance of hooking a Pokémon.
* Create new fishing encounter methods that depend on the time of day as well as the type of rod, e.g. certain species can only be fished for during the day.
* Have just one fishing rod, but different kinds of bait that will attract different species (the encounter type will depend on the type of bait used, not the type of rod used).
* Modify the species encountered through fishing depending on whether the player is fishing on a particular tile in a map (e.g. Feebas may do this). Save the special tile(s) coordinates somewhere (remember to relate them to a particular map), and modify the item handler effects for the rod items as appropriate.
* Why not turn fishing into a mini-game, rather than a simple reaction test?