De Whack a Hack Wiki!

Un generador de números pseudoaleatorios (Pseudorandom number generator en inglés) abreviado PRNG por sus siglas en inglés, es un dispositivo electrónico, o el intento del software, en crear un número aleatorio. Así como el número que da un dado al lanzarlo no es "al azar" (puesto que está determinado por factores tales como la fuerza, el ángulo del tiro o la fricción), los ordenadores no pueden generar números verdaderamente "al azar". Con el fin de generar eventos aleatorios en videojuegos y otras formas de software, las máquinas deben recopilar los datos que puedan (tales como la fecha, la hora, o lo último que has hecho) y realizar operaciones aritméticas con ellos para generar un número "pseudo-aleatorio", pero hay infinitas maneras de lograr estos números. El grado de aleatoriedad depende de la incapacidad del usuario para predecir el siguiente resultado del algoritmo.

Mecánica

En primer lugar, el generador debe tener una semilla (seed en inglés), un número que sirva como "base". Este número es generalmente la fecha y hora de la primera vez en la que es usado este algoritmo, durante el uso del dispositivo o una sesión activa del software (por lo que al reiniciar el dispositivo o el programa en cuestión, la semilla cambia de valor). Las semillas también suelen derivar de las acciones del usuario dentro del programa, ya que es altamente improbable repetir exactamente lo mismo más de una vez.

Este número es "añadido" a un complejo algoritmo, y este resultado se adapta de acuerdo con los valores necesario. El resultado se convierte entonces en la semilla para cualquier uso posterior del generador de aleatoriedad. Es por lo tanto que la naturaleza del generador es un algoritmo recursivo.

En los videojuegos

Generador de números aleatorios líneales congruenciales (LCRNG)

En la tercera y cuarta generación, los videojuegos utilizan 32 bit en el LCRNG.

El juego crea una semilla (un número entre 0 y 0xFFFFFFFF, o el resultado de una llamada previa a la ecuación).

Resultado = [(0x41C64E6D * Semilla) + 0x6073]

Este algoritmo se utiliza para lo siguiente:

  • Encriptar los datos de los Pokémon al guardar.
  • Generar el valor de personalidad (o PID) de un Pokémon salvaje.
  • Generar los valores individuales (o IVs) de un Pokémon salvaje (sólo en la tercera y cuarta generación).
  • Determinar la especie del Pokémon salvaje.
  • Determinar el número de la Lotería Pokémon.
  • Determinar cuándo un huevo estará disponible en la Guardería Pokémon.

En la quinta y sexta generación los videojuegos, por el contrario, utilizan 64 bit en el LCRNG, y de la siguiente manera:

Resultado = [(0x5D588B656C078965 * Semilla) + 0x0000000000269EC3]

Generador de números aleatorios alternativo (ARNG)

Los videojuegos de la cuarta generación también utilizan un algoritmo diferente para alternar, volver a generar, o modificar un valor previamente obtenido aleatoriamente. El algoritmo funciona de la misma manera, pero la ecuación cambia a:

Resultado = [(0x6C078965 * Semilla) + 0 × 1]

Este algoritmo se utiliza para lo siguiente:

  • Restricción para evitar un huevo de Manaphy variocolor desde Pokémon Ranger.
  • Determinar las especies de la manadas Pokémon.
  • Determinar los Pokémon que aparecen en el Gran Pantano.
  • Determinar los Pokémon del Jardín Trofeo.
  • Restricción para evitar los Pokémon variocolores en la tarjeta misteriosa.

Mersenne Twister (MTRNG)

Hallado a partir de la cuarta generación , el Mersenne Twister es otro tipo de generador de números aleatorios que produce 624 números aleatorios a la vez. Estos números aleatorios se almacenan y se utilizan cuando sea necesario. Una vez utilizados los 624 números, se generará otro conjunto.

Este algoritmo se utiliza para lo siguiente:

  • El valor de personalidad (PID) de los huevos Pokémon en la cuarta generación.
  • Cálculos para la amistad.
  • Animaciones de los sprites en la quinta generación.
  • IVs de los Pokémon en la quinta generación.
  • Decisión de qué movimientos usan los Pokémon salvajes en la quinta generación.