Luck Manipulation
Luck manipulation is the act of controlling how the game determines "random" results. It has many names, including "luck abuse", "randomness abuse", or "RNG abuse".
Background
In computer games, "randomness" is determined entirely by mathematical algorithms in the form of a stream of numbers. This stream of numbers effectively acts as a source of random numbers for all purposes of the game. There is no real randomness, but only an algorithm (a sequence of mathematical instructions) that operates on the existing system, including the player's input. All computer algorithms are deterministic; that is, given the same system and player input, it will always do the same thing.
In modern computer games random number generators are usually initialized (usually at the start of the game) using the system clock so that it will always give different results each time the game is played. Old consoles lacked any system clock and hence the initialization and generation of random numbers had to be initialized with other random factors. Usually the only random factor which the game could use was the player's keypresses and their timings. In normal play a person will time button presses quite randomly, providing a good source of randomness for the game. Naturally in a tool-assisted speedrun all keypresses are always timed the same, and thus the game will always generate the same random numbers from them.
Luck manipulation involves changing the input to control the result of random effects.
How is input used?
Depending on the game, input plays specific roles in determining randomness. For example, in various RPGs (a genre whose games are a staple of this randomness), delaying a frame will cause the game to use different numbers for randomness, which may then cause a different result. Delaying frames may cause a hit to become a critical hit, or cause an enemy's attack to miss, or change the amount of damage done by an attack. You are only limited by the game's mechanics, loss of time, and your patience.
The degree of entropy (randomness) that input contributes may be huge, in which case you have many options to manipulate. On the other hand, the contribution may be so small as to be negligible, in which case manipulation is very difficult or impossible.
Can a game's randomness be predicted?
If you are willing to, you can find the game's RNG (random number generator) in memory. It would look like a sequence of randomly changing bytes. Thus you can tell if a certain event is changing these numbers. To try to find the game's RNG, use
memory search.
Unless the RNG is easily deciphered, finding out how the game uses these random numbers, as well as determining the algorithm, is very difficult. ROM disassembly (analysis of code) is required.
Input hardly has an effect. What should I do?
Try to research on what does cause the randomness to change. It might be a very straightforward and controllable event. If, however, the game is very stubborn and it is too difficult to control, consider giving up.
Should I try to manipulate the 1 in 10000 chance?
If you know exactly how to do this easily, by all means go ahead. Otherwise, stay reasonable. Lua scripting is better suited to manipulating very rare chances.
Examples
One of the prime examples of luck manipulation is the
Dragon Warrior movie. The player abuses luck in his movie of this game in different ways.
- All undesired enemy encounters are avoided by stopping his motion for a frame or two at various times along the player's path.
- When encountering enemy, its HP is manipulated to be as low as possible.
- Critical hits are gotten 100% of the time by scrolling through the battle menu and waiting to attack on a particular frame. A single frame of difference would not have resulted in a critical hit.
- When using an enemy encounter to suicide, the enemy is manipulated to attack first.
In a non-tool-assisted context, luck manipulation mainly refers to save scumming (saving a game and then trying a random part and reloading over and over until a favorable outcome occurs).
More reading