Back to Page
Revision 5 (current)
Edited by Darkman425 on 8/20/2023 4:35 PM
Das Erstellen eines Lua Skriptes ist ein extrem nützliches Werkzeug für das TASen. Obgleich einige Programmierkenntnisse notwendig sind, hat der Nutzer die Macht über Dinge, wie den Bildschirm des Spiels, den Input und den Speicher. Die Folgenden Stichpunkte stellen einige übliche Anwendungen vor, allerdings sind die Möglichkeiten Grenzenlos.
*Hilfreiche Informationen auf den Bildschirm projizieren.
*Beseitigen von mühsamen Wiederhohlungen.
*Erstellen von spezifischen Umständen um Tests durchzuführen.
*Eine Lösung Brute-Forcen.
Snes9x war, im Jahre 2008, der erste Emulator der modifiziert wurde um Lua zu unterstützen. Jetzt unterstützen folgende Emulatoren Lua: FCEU(X), BizHawk, lsnes, Snes9x, Gens, VBA, Final Burn Alpha, PCSX, DeSmuME, PCEjin, VBjin, and JPC-RR.
Um Lua zu integrieren, wurden eine Anzahl von Emulator-spezifischen Funktionen erstellt, welche die Emulator-spezifische Lua-API bilden, die eine Kontrolle des Emulators ermöglicht. Wie auch immer, man ist nicht nur an Emulator-spezifische Lua Funktionen gebunden. Jeder kann jede Funktion der Haupt-Lua-API benutzen, inklusive der Datei I/O. Somit kann der Emulator programmiert werden um, sagen wir mal, mit Text Dateien zu kommunizieren!
!! Wie führt man ein Lua Skript aus
Um ein Lua Skript auszuführen, kopiere den Code und platziere ihn in einem Texteditor. Benenne die Datei als "file.lua" oder etwas, das in "lua" endet. Beim Speichern in Notepad auf Windows, musst du Anführungszeichen um den Namen {{"file.lua"}} setzen.
Gehe dann in den Emulator und führe die Lua Datei aus. Manche Emulatoren haben ein Lua Skript-Fenster; das Lua Skript wird automatisch beginnen, wen du es lädst.
!! Grundlagen
Um mit Lua vertraut zu werden, schau in das [http://www.lua.org/manual/5.1/|Lua 5.1 Handbuch] rein. Es behandelt, wie die Lua-Sprache funktioniert und die Haupt-Lua-API.
Im Emulator ist es erstrebenswert eine Hauptausführungsschleife (main execution loop) zu haben. Die Hauptausführungsschleife kann eine von zwei Formen annehmen (-- heißt, der Rest der Zeile ist ein Kommentar):
--Hier Deklarationen
while true do
--Anweisungen
emu.frameadvance()
end
und
--Hier Deklarationen
function fn()
--Anweisungen
end
gui.register(fn)
Die Zweite ist eigentlich eine Funktion, welche immer dann aufgerufen wird, wenn es ein Update auf dem Bildschirm gibt (was jede Frame passieren sollte, aber zusätzlich wird sie in manchen Emulatoren[#1] auch aufgerufen, während der Bildschirm pausiert ist). Die zweite Form ist in DeSmuME erforderlich, da die erste Form auf eine andere Weise funktioniert, wie die meisten anderen Emulatoren (siehe [Forum/Topics/18798|dieses Thema] für mehr Informationen).
*[LuaScripting/Registers|Register] - Führe Funktionen während spezifischen Ereignissen aus, einschließlich eine Frame voranschreiten, einen Zustände speichern/laden, etc.
*[LuaScripting/Display|Bildschirm] - Zeichnen, Speicherbeobachtung, etc.
*[LuaScripting/Macros|Macros]
** [LuaScripting/TableKeys|Tastatur Tasten] - Input steuern (schließt automatisches halten und schießen ein)
*[LuaScripting/MemoryEditing|Speicher Bearbeitung]
[TODO]
* Zu behandeln
** joypad.set
** savestate.create , savestate.load , savestate.save
** FCEU.pause
** FCEU.speedmode
** io.write , io.output
!!MHS für Emulatoren benutzen, in denen Lua nicht eingebettet ist
[http://memoryhacking.com/download.php|L. Spiro's Memory Hacking Software]
*Zu behandeln
**(Beachte unbedingt, dass Positionswerte meistens Gleitkommazahlen-Datentypen sind.)
!!Mehr Informationen
! Seitenlinks
* [Bizhawk/LuaFunctions|Lua Funktionen für den BizHawk Emulator]
* [EmulatorResources/Lsnes/LuaFunctions|Lua Funktionen für den lsnes Emulator]
*Schau in einige [/HomePages/Bisqwit/LuaFunctions|kompliziertere] Lua Anwendungen von [user:Bisqwit] rein.
! Externe Links
* [http://code.google.com/p/snes9x-rr/wiki/LuaScriptingFunctions|SNES9x Lua Funktionen Bibliothek]
* [http://code.google.com/p/vba-rerecording/wiki/LuaScriptingFunctions|VBA Lua Funktionen Bibliothek]
* [http://dehacked.2y.net/snes9x-lua/|DeHackEds Beispiel-Lua Skripte]
----
[1]: Es ist bekannt, dass dies in FCEUX, PCSX und DeSmuME der Fall ist.