RNG Abuse
Taking advantage of deterministic computers in GBA FE.
Guide Contents
This guide contains the following information.
Introduction
Like all other Fire Emblem games, GBA FE uses a random number generator (RNG) to determine the chance-based events in the game, such as level ups, attacks hitting and/or critting, and even enemy Hard Mode bonuses in the GBA era.
However, computers (and Gameboys) are deterministic in their operation. It is impossible to get a truly random result from a machine that is build to run instructions written by humans and nothing else. However, randomness is a useful concept in real life, especially since people tend to like the thrill of chance (the best feeling is when your unit gets a 7 stat level up). So, we turn to mathematics and probability to replicate the feeling of randomness, otherwise known as pseudorandom.
This guide is not going to cover the exact details of implementing pseudorandomness, but the basic idea is this:
- Choose a number
- Do a lot of math on that number (depends on the pseudorandom algorithm)
- The algorithm will spit out an unending sequence of numbers that appear to be patternless
The game will do this every time you boot it up, and it uses the sequence of "random" numbers to determine which attacks will hit and which stats will grow. If you want to learn more about pseudorandomness, check out these Wikipedia links.
Consuming Random Numbers
Everytime the game is faced with an action that involves chance, it will consume the next random number from the generated sequence. The common RN burning actions in GBA era and their number of burned RNs are listed below.
Action | RNs | Explanation |
---|---|---|
Attack | 3 | 2 RNs burned for hit, 1 RN burned for crit (crit is still rolled even if the attack misses, but a missed attack cannot crit). |
Status staff cast | 1 | 1 RN burned for hit. |
Level up | 7 | 1 RN burned for each stat, note that the order of RNs mostly follows the top-down order of the stat screen, except Luck is rolled last. |
Cursor dance | 1 | 1 RN burned per dance, see details below. |
There are also other actions that burn RNs that don't always occur. Examples of these are determining Hard Mode bonuses, how Klein and Thea move in Chapter 11A/10B. These events are not well understood, but they also don't really matter when it comes to RNG abusing.
Cursor Dancing
From the table in the previous section, the only RN burning action that you can freely do is cursor dancing. This allows you to burn any arbitrary number of RNs so that you can manipulate the pseudorandom number sequence in a way that lets you predict every event in the game. As long as you can see the sequence of numbers (which you can, more later), it's easy to cursor dance until the exact RNs you need are queued up.
The premise of cursor dancing is simple. You select a unit, and move the movement cursor in a way such that it paths out and then back in of their movement range. Under the right circumstances, there will be multiple ways for the new path to be formed, and the game will have to burn one single RN to determine which path is taken. The example below illustrates this in a simplest way possible.
Roy (from Smash Bros and FE6) has 5 movement. We can use up all 5 tiles to do a loop around him, as shown in the first screenshot below. If we were to move one more tile down, this would be 6 tiles total - but still within his movement range, because it is actually only 2 tiles away, we just took a really inefficient path getting there. Now, there are two possible ways to form the path: down then left (second screenshot), and left then down (third screenshot).
Doing so will consume 1 RN, if that RN is 50 or below then the path taken will be down then left (second screenshot), if it is above 50 then the path will be left then down (third screenshot). Note that if there terrain obstructing either path, then no RNs will be burned, because the game will always take the unobstructed path. For example, if we try doing this pathing trick next to a forest tile, the chosen path will always be the one that does not path through the forest tile.
In the next two screenshots, the path will always be left then down, and no RNs will be burned (the house does not obstruct movement).
The easiest and fastest way to burn a large amount of RNs is to take a flier, and zig-zag to the edge of their movement range. From there, move the cursor one tile out of their movement range, then back in to their movement range to a different tile. This will cause the game to burn 1 RN to figure out what zig-zag path to take, and can be repeated many times in succession. See the next three screenshots.
Abusing the RNG
With the above cursor dancing knowledge, you can already start RNG abusing for good level ups. For example, lets say you have Moulder (FE8) who is one Heal use away from leveling up, and you really really want him to gain a point of Magic. Then, you could do the following.
- Create a save state
- Heal with Moulder
- Check the level up
- If he gained the desired stats, you're done
- If not, load the save state
- Use cursor dancing to burn an arbitrary number of RNs
- Repeat from step 1
This lets you try a different set of 7 RNs until you get a level up that you like. Assuming your unit has decent enough growth rates, you can use this method to get good level ups every time without too much effort.
A similar strategy can be employed to rig hits and/or crits. Simply create a save state, try the attack, if it doesn't work then load the save state, burn an arbitrary number of RNs and try again. As long as the displayed hit/crit are not too low, you'll get the desired outcome within a reasonable amount of time.
Viewing RNs
RNG abusing can be taken one step further using scripts. There is a Lua script made by vykan12 that can display the exact sequence of RNs that the game has generated. It will let you RNG abuse with extreme precision, making it possible to always rig perfect level ups, rig low percentage hits and crits, and more. This is what makes many LTC and 0% (or both) strategies feasible.
To see the RNs, you'll need an emulator capable of running Lua, VBA is a common choice. You'll also need the script itself, which can be downloaded from vykan12's GitHub. Mekkah also has a tutorial on how to set the script up with VBA.
RNG Abusing Without Emulators
It is possible to RNG abuse level ups on real consoles as well, although this is much more tedious. It involves using the basic 5 movement cursor dance shown previously, since we know that if the cursor goes down then left it means that the RN is 50 or below.
Furthermore, soft resetting the game after cursor dancing and then choosing "Resume Chapter" will reset the RN sequence to the point before you started cursor dancing. Given this, you could RNG abuse for good level ups in the following way.
- Have a unit that is about to level up, let's say from OHKOing an enemy on this turn.
- Get something to record results with, such as a pen and a piece of paper.
- Position a 5 movement character up in a way such that they can do the wrap-around cursor dance freely.
- Begin cursor dancing, recording each down-left result as "Low", and each left-down result as "High".
- Once you get a string of 7 "Lows" (low being 50 or below, high being above 50), immediately soft reset the game.
- Your unit will level up after hitting an enemy once - this means that before the 7 level up RNs are burned, the attack from your unit will also burn 3 RNs.
- Hence, you can cursor dance the exact number of times to advance the RN sequence until it is exactly 3 RNs before the string of 7 "Lows". If you mess this up, you can always soft reset as long as you have not made the attack yet.
- Once the RN sequence is in the desired spot, proceed with the attack. After the 3 RNs are burned for hit and crit, your unit will level up with all RNs 50 and below, making it extremely likely that those stats increase (assuming they have decent growths).
To make this less tedious, you could compromise and go with good level ups instead of trying for perfect ones. A common way of doing this is to search for a string of 4 "Low" RNs, and cursor dancing in a way such that those 4 line up with Str, Skl, Spd, and Def. The order of stat RNs rolled is HP, Str, Skl, Spd, Def, Res, Lck. A few of the other stats may still go up if you're lucky.