Dieses Repository enthält eine Liste von Eingaben, die Pokemon Platinum schlagen werden. Durch die Kombination von Techniken und Simulationen wird der Fortschritt im Spiel garantiert. Es ist keine RNG-Manipulation erforderlich, es sind keine Frame-perfekten Eingaben erforderlich und die Reihenfolge der Eingaben ist unabhängig von Ereignissen im Spiel statisch und unveränderlich.
Den Simulatorcode finden Sie hier
Die Eingaben finden Sie im commands
. Jede Datei entspricht einem anderen Teil des Spiels und geht von 1 bis 9 ineinander über. Außerdem gibt es eine Hilfsdatei zum Ändern des Spielspeichers zum Testen und eine Datei zum Aufzeichnen von Eingaben während des Spielens.
Jede Befehlsdatei enthält eine Liste von Befehlen im Format [
, wobei der erste Wert angibt, welcher Befehl ausgeführt werden soll, und der zweite Wert angibt, für wie viele Frames dieser Befehl gespeichert werden soll. In Fällen, in denen der Befehl aus einer Reihe von Tastendrücken besteht, gibt
an, wie viele Wiederholungen dieses Befehls ausgeführt werden müssen.
Die grundlegenden Befehle lauten wie folgt:
Befehl | Beschreibung |
---|---|
A | A |
B | B |
uf | Hoch |
df | Runter |
lf | Links |
rf | Rechts |
st | Start |
X | X |
j | Y |
ub | Oben + B |
db | Runter + B |
Pfund | Links + B |
rb | Rechts + B |
w | Warten |
Andere Tasten wie „Auswählen“, „L“ und „R“ werden nicht verwendet.
In den Befehlsdateien werden zusätzliche Befehle verwendet, um einen Satz dieser grundlegenden Tastendrücke darzustellen. Um beispielsweise A 10 Mal zu drücken, wird {'press_a', 10}
als Abkürzung verwendet, anstatt 10 Befehle hintereinander, um die A-Taste 60 Frames lang gedrückt zu halten.
Jede Datei definiert außerdem bis zu 12 benutzerdefinierte Befehle, die verschiedene Routinen ausführen, z. B. die Verarbeitung von Speicherpost, die Ausführung von Standardkampfaktionen oder die Navigation durch Abschnitte des Spiels, die wiederholt werden müssen.
Beachten Sie, dass die Befehle l
, r
, u
und d
Abkürzungen für einen Schritt in eine Richtung sind und lf
, rf
, uf
und df
die Befehle zum Halten einer Richtungstaste für eine bestimmte Anzahl von Bildern sind.
Anstatt Befehle manuell zu schreiben, können Sie, wenn Sie die Sequenz ändern oder eine neue erstellen möchten, die Datei recordInputs
in Verbindung mit dem Bizhawk-Emulator verwenden, um die von Ihnen vorgenommenen Eingaben aufzuzeichnen und sie dann in einem Format auszugeben, das in verwendet werden kann die Skripte.
Um Ihre Eingaben aufzuzeichnen, müssen Sie zunächst die Controller-Hotkeys löschen, dh verhindern, dass der Emulator Ihre Eingaben direkt als Befehle verwendet. Sie können dies über Config -> Controllers -> Misc -> Clear
tun. Sie können die Hotkeys später mit Misc -> Load Defaults
im selben Menü wieder laden.
Dann müssen Sie die Lua-Konsole über Tools -> Lua Console -> Script -> Open Script
öffnen, wo Sie dann das Skript recordInputs.lua
öffnen. Sobald das Skript ausgeführt wird, werden Ihre Eingaben aufgezeichnet.
Die Tastenkombinationen sind in der Datei recordInputs.lua
aufgeführt, aber die beiden wichtigsten sind lshift
, das die Liste der formatierten Befehle ausgibt, wenn Sie mit der Aufnahme fertig sind, und rshift
, das einen Befehl mit einer Wartezeit von 60 Frames hinzufügt. Der Eingaberekorder zeichnet KEINE Leerlaufzeiten auf. Wenn Sie also die Wartezeiten nicht mit rshift
hinzufügen, führt er die Befehle einfach schnell nacheinander und ohne Pausen aus.
Dies führt dazu, dass die Ausgabeliste der Eingaben und das, was Sie beim Spielen tatsächlich getan haben, unterschiedlich sind. Es kann leicht passieren, dass man die Wartezeiten vergisst, was bei der Wiedergabe zu Problemen führen kann. Ein Vorteil ist jedoch, dass kein Druck besteht, die Eingaben mit einem Timer aufzuzeichnen.
Andere Tasten entsprechen der Standardeinstellung für den Emulator, die Pfeiltasten für Bewegung, x
, z
, s
, a
für A
, B
, X
, Y
und enter
für Start.
Bei der Touch-Steuerung, die zu Beginn des Spiels eine erforderliche Eingabe darstellt, kann es zu einer gewissen Volatilität kommen. Um voranzukommen, müssen Sie auf die Mitte des Bildschirms tippen und so die Mitte eines Pokeballs treffen. Dies ist ein nicht standardmäßiger analoger Eingang und wird im Code als touch_middle
bezeichnet. Dies kommt nur einmal vor.
Es besteht auch die Möglichkeit, dass die Eingaben etwas nicht berücksichtigen, von dem ich einfach nichts weiß oder das ich nicht überprüfen wollte. Dieser menschliche Fehler ist immer vorhanden, unabhängig davon, wie oft ich die Sequenz auf Probleme und Fehler überprüft und erneut überprüft habe.
Pokemon verwendet einen linearen kongruenten Zufallszahlengenerator (LCRNG), um die meisten seiner Zufallszahlen zu erzeugen. Dies funktioniert, indem eine Folge von Zahlen erstellt wird, die zufällig genug erscheint, und dann die Folge einzeln durchlaufen wird, um „zufällige“ Zahlen zu erzeugen.
Die Pokémon-Spiele der Generation 4 unterscheiden sich von ihren Vorgängern dadurch, dass sie keine Zufallszahlen durchlaufen, sondern nur dann eine Zufallszahl verwenden, wenn sie benötigt wird.
Beispielsweise durchläuft das Spiel in Ruby/Sapphire/Emerald die Folge von Zufallszahlen in jedem zweiten Frame, auch wenn im Spiel nichts passiert, und gibt die Zahl aus, auf der es sich gerade befindet, wenn das Spiel nach einer fragt.
Bei Diamond/Pearl/Platinum bleibt der Zufallszahlengenerator statisch, bis das Spiel nach einem Wert fragt. Das heißt, wenn Sie im Spiel in einem leeren Bereich stehen, wird der Zufallszahlengenerator nichts unternehmen.
Wenn Sie alle möglichen Ergebnisse des Zufallszahlengenerators für eine bestimmte Aktion simulieren, beispielsweise das Werfen einer Münze, ist dieses Ergebnis in Gen-4-Spielen deterministisch (vorausgesetzt, Sie befinden sich in einem leeren oder „ruhigen“ Bereich), unabhängig von Ihrem Timing.
In Gen-3-Spielen ist dieses Ergebnis nicht deterministisch, es hängt von Ihrem Timing ab. Das heißt, wenn Sie die Münze jetzt werfen, kann es zu einem anderen Ergebnis kommen, als wenn Sie sie zwei Sekunden später werfen würden.
Für unsere Zwecke sorgt diese Qualität der Gen-4-Spiele dafür, dass das Spiel auch dann ordnungsgemäß funktioniert, wenn ein menschlicher Spieler diese Eingabeliste zum Spielen verwendet, da ein menschlicher Spieler die Eingaben nicht zu genauen Zeiten vornehmen würde Entweder drücken Sie die Tasten etwas früher oder etwas später. Solange die Tasten nicht zu früh gedrückt werden, können Sie sie auf unbestimmte Zeit verzögern, ohne dass dies Auswirkungen auf den Ausgang des Spiels hat (vorausgesetzt, Sie drücken die Tasten irgendwann).
Mithilfe dieses Prinzips können wir durch die Simulation aller 4 Milliarden möglichen Startplätze oder Startpositionen auf der Zufallszahlenfolge von Pokemon Platinum vorhersagen, was in allen möglichen Spielen passieren wird. Wenn man beispielsweise eine Münze 100 Mal wirft, gibt es eine deterministische Anzahl an Ergebnissen. Indem wir sie alle überprüfen, können wir das Worst-/Best-Case-Szenario ermitteln, das in diesem Fall eine 80/20-Aufteilung ist.
Beim Münzwerfen ähnelt dieser Vorgang sehr stark der Verwendung von Mathematik, um mithilfe einfacher Statistiken einfach unseren erwarteten Wert zu ermitteln. Bei komplizierteren Dingen wie Pokémon-Kämpfen wird es viel schwieriger, den Ausgang mithilfe von Mathematik zu bestimmen. Es ist einfacher, alle 4 Milliarden Möglichkeiten zu simulieren, als die Wahrscheinlichkeit zu berechnen, die mit der Chance auf kritische Treffer, Fehlschläge, Schadenswürfe, KI-Rng, Sekundäreffektchancen usw. gegeben ist.
Dadurch erhalten wir einen Einblick, welche Strategien in jedem möglichen Spiel gewinnen, und ermöglichen es mir, verschiedene Trainer mit 100-prozentiger Sicherheit zu besiegen, selbst wenn rechnerisch die Chance bestünde, zu scheitern oder zu verlieren.
Das Endergebnis ist diese Abfolge von Eingaben, die jedes Platinum-Spiel von Anfang bis Ende schlagen sollte, ohne dass die Möglichkeit eines Fehlers besteht, sofern keine Fehleingaben oder Fehler auftreten.