Este repositorio contiene una lista de entradas que superarán a Pokémon Platino. Utilizando una combinación de técnicas y simulaciones, el progreso en el juego está garantizado. No hay manipulación de RNG involucrada, no se requieren entradas de cuadro perfecto y la secuencia de entradas es estática e invariable independientemente de lo que ocurra en el juego.
Puedes encontrar el código del simulador aquí.
Las entradas se pueden encontrar en el directorio commands
. Cada archivo corresponde a una parte diferente del juego, y cada uno fluye entre sí del 1 al 9. También hay un archivo auxiliar para alterar la memoria del juego para realizar pruebas y un archivo para registrar las entradas mientras se juega.
Cada archivo de comando contiene una lista de comandos con el formato [
, donde el primer valor es qué comando ejecutar y el segundo es cuántos cuadros mantener ese comando. En los casos en que el comando es un conjunto de pulsaciones de botones,
indica cuántas repeticiones de ese comando se deben realizar.
Los comandos básicos son los siguientes:
Dominio | Descripción |
---|---|
a | A |
b | B |
uf | Arriba |
df | Abajo |
si | Izquierda |
rf | Bien |
calle | Comenzar |
incógnita | incógnita |
y | Y |
ub | Arriba + B |
base de datos | Abajo + B |
libra | Izquierda + B |
rb | Derecha + B |
w | Esperar |
Otros botones, como seleccionar, L y R, no se utilizan.
En los archivos de comandos, se utilizan comandos adicionales para representar un conjunto de estas pulsaciones de botones básicos. Por ejemplo, para presionar A 10 veces, se usa {'press_a', 10}
como taquigrafía, en lugar de 10 comandos seguidos para mantener presionado el botón A durante 60 fotogramas.
Cada archivo también define hasta 12 comandos personalizados que realizan diversas rutinas, como manejar el correo de memoria, realizar acciones de batalla estándar o navegar por secciones del juego que deben repetirse.
Tenga en cuenta que los comandos l
, r
, u
y d
son abreviaturas para dar un paso en una dirección, y lf
, rf
, uf
y df
son los comandos para mantener presionado un botón direccional durante una cierta cantidad de fotogramas.
En lugar de escribir comandos a mano, si desea modificar la secuencia o crear una nueva, puede usar el archivo recordInputs
junto con el emulador bizhawk para registrar las entradas que realiza y luego generarlas en un formato que pueda usarse en los guiones.
Para registrar sus entradas, primero debe borrar las teclas de acceso rápido del controlador, es decir, evitar que el emulador use sus entradas como comandos directamente. Puede hacer esto a través de Config -> Controllers -> Misc -> Clear
. Puede volver a cargar las teclas de acceso rápido más tarde con Misc -> Load Defaults
en el mismo menú.
Luego debes abrir la consola lua a través de Tools -> Lua Console -> Script -> Open Script
, donde luego abres el script recordInputs.lua
. Una vez que el script comience a ejecutarse, registrará sus entradas.
Las teclas de acceso rápido de los botones se enumeran en el archivo recordInputs.lua
, pero las dos más importantes son lshift
, que genera la lista de comandos formateados cuando termina de grabar, y rshift
, que agrega un comando de tiempo de espera de 60 fotogramas. La grabadora de entrada NO registra el tiempo de inactividad, lo que significa que si no agrega los tiempos de espera con rshift
, simplemente ejecutará los comandos rápidamente uno tras otro sin interrupciones.
Esto hace que la lista de salida de entradas y lo que realmente hiciste mientras jugabas sean diferentes. Puede ser fácil olvidarse de agregar los tiempos de espera, lo que causará problemas durante la reproducción. Pero como beneficio, no hay presión para registrar las entradas en un temporizador.
Otras teclas coinciden con las predeterminadas para el emulador, las teclas de flecha para movimiento, x
, z
, s
, a
para A
, B
, X
, Y
, y enter
para iniciar.
Puede haber cierta volatilidad con el control táctil, que es una entrada necesaria al comienzo del juego. Para avanzar, deberás tocar el centro de la pantalla, golpeando el centro de una pokebola. Esta es una entrada analógica no estándar y se indica en el código como touch_middle
. Esto sólo ocurre una vez.
También existe la posibilidad de que las entradas no tengan en cuenta algo que simplemente desconozco o que no pensé en comprobar. Este error humano siempre está presente, independientemente de cuántas veces haya verificado y vuelto a verificar la secuencia en busca de problemas y errores.
Pokémon utiliza un generador de números aleatorios congruentes lineales (LCRNG) para producir la mayoría de sus números aleatorios. Esto funciona creando una secuencia de números que parece lo suficientemente aleatoria y luego avanzando por la secuencia uno a la vez para producir números "aleatorios".
Los juegos de Pokémon de la generación 4 se diferencian de sus predecesores en que no alternan números aleatorios, solo usan un número aleatorio cuando es necesario.
Por ejemplo, en Ruby/Sapphire/Emerald, el juego recorrerá la secuencia de números aleatorios cada dos fotogramas, incluso si no sucede nada en el juego, y producirá cualquier número actual cuando el juego solicite uno.
En Diamante/Perla/Platino, el generador de números aleatorios permanece estático hasta que el juego solicita un valor. Es decir, si estás parado en un área vacía del juego, el generador de números aleatorios no hará nada.
Si simulas todos los resultados posibles del generador de números aleatorios para una acción determinada, por ejemplo, lanzar una moneda, en los juegos Gen 4 este resultado es determinista (suponiendo que estás en un área vacía o "tranquila") independientemente de tu momento.
En los juegos Gen 3, este resultado no es determinista, depende de tu tiempo. Es decir, si lanzas la moneda ahora, podría tener un resultado diferente que si la lanzas 2 segundos después.
Para nuestros propósitos, esta cualidad de los juegos Gen 4 hace que incluso si un jugador humano usa esta lista de entradas para jugar, seguirá funcionando correctamente, ya que un jugador humano no haría las entradas en momentos exactos, y presione los botones un poco antes o un poco tarde. Siempre que los botones no se presionen demasiado pronto, puedes retrasarlos por un período de tiempo indefinido, sin ningún efecto en el resultado del juego (suponiendo que, eventualmente, presiones los botones).
Utilizando este principio, simular los 4 mil millones de posibles semillas, o posiciones iniciales, en la secuencia de números aleatorios de Pokémon Platino nos permite predecir lo que sucederá en todos los juegos posibles. Por ejemplo, lanzar una moneda al aire 100 veces tiene un número determinista de resultados. Al comprobarlos todos, podemos descubrir el peor/mejor escenario, que en este caso es una división 80/20.
Para lanzar una moneda, este proceso se parece mucho al uso de las matemáticas para determinar nuestro valor esperado utilizando estadísticas simples. Para cosas más complicadas, como las batallas de Pokémon, resulta mucho más difícil usar las matemáticas para determinar el resultado. Es más fácil simular los 4 mil millones de posibilidades que calcular la probabilidad dada la posibilidad de hacer críticos, fallar, tiradas de daño, rango de IA, posibilidades de efectos secundarios, etc.
Hacer esto nos da una idea de qué estrategias ganan en cada juego posible y me permite derrotar a diferentes entrenadores con un 100% de certeza, incluso si matemáticamente existiera la posibilidad de fallar o perder.
El resultado final es esta secuencia de entradas, que debería superar cada juego de platino de principio a fin sin ninguna posibilidad de fallo, salvo errores o errores.