Lua scripting es una herramienta extremadamente útil cuando se está realizando un TAS. Aunque se requiere de cierto conocimiento de programación, el usuario tiene el poder sobre cosas como lo que se despliega en la pantalla, entradas y hasta memoria. Las siguientes son algunas aplicaciones comunes, aunque las posibilidades son infinitas:
- Mostrar información útil en la pantalla.
- Eliminar la repetición tediosa.
- Crear circunstancias específicas para pruebas.
- Resolver por medio de la fuerza bruta.
Snes9x fue el primer emulador modificado para soportar Lua, allá en el 2008. En la actualidad, los siguientes emuladores soportan Lua: FCEU(X), BizHawk, lsnes, Snes9x, Gens, VBA, Final Burn Alpha, PCSX, DeSmuME, PCEjin, VBjin, and JPC-RR.
Para poder integrar Lua, se crearon una cantidad de funciones específicas al emulador, las cuales forman la API de Lua específicas al emulador, habilitando el control del emulador. Sin embargo, uno no está limitado sólo a funciones de Lua específicas al emulador. Cualquiera puede usar cualquier función principal de la API de Lua, incluyendo archivos E/S. Por lo tanto, el emulador puede ser escrito para comunicarse con, digamos, ¡Archivos de texto!
Como correr un script de Lua
Para correr un script de Lua, copia el código y colócalo en un editor de texto. Nombra al archivo como "archivo.lua" o cualquier cosa que termine con extensión "lua". Cuando salvas desde Bloc de Notas (Notepad) en Windows, necesitas poner comillas alrededor del nombre
"archivo.lua"
.
Después ve al emulador y corre el archivo Lua. Algunos emuladores tienen una ventana de script de Lua; dicho script comenzará automáticamente cuando lo cargues.
Lo básico
Para familiarizarse con Lua, consulta el manual de Lua 5.1 (inglés). Cubre cómo funciona el lenguaje Lua y la API principal de Lua.
En el emulador, es deseable tener un bucle de ejecución principal. El bucle de ejecución principal puede tomar una de las siguientes dos formas (-- significa que el resto de la línea es un comentario):
--Insertar declaraciones aquí while true do --Insertar declaraciones aquí emu.frameadvance() end
y
--Insertar declaraciones aquí
function fn() --Insertar declaraciones aquí end
gui.register(fn)
La segunda forma es técnicamente una función que es llamada cada vez que hay una actualización que mostrar (que se supone que pasa en cada cuadro, pero también es llamada en algunos emuladores[1] mientras la pantalla está en pausa). La segunda forma es necesaria para el DeSmuME ya que la primera forma funciona de manera diferente a la mayoría de los otros emuladores (consulte este tópico) para más información.
- Registros - Corren funciones durante eventos específicos, incluyendo avanzar un cuadro, guardar/cargar el estado, etc.
- Visualizador - Dibujando, observación de memoria, etc.
- Macros
- LuaScripting/Tabla de botones - Manipulación de entradas, incluyendo presión y disparo automáticos)
- Edición de memoria
- Por cubrir
- joypad.set
- savestate.create , savestate.load , savestate.save
- FCEU.pause
- FCEU.speedmode
- io.write , io.output
Usando MHS para emuladores que no cuentan con Lua embebido
- Por cubrir
- (Asegúrate de tener en cuenta que los valores de posición comúnmente son tipos de datos de punto flotante)
Más información
Enlaces del sitio
- Funciones Lua para el emulador BizHawk
- Funciones Lua para el emulador lsnes
- Explora alguna de las aplicaciones Lua más complicadas hechas por Bisqwit.
Enlaces externos
- Libreria de funciones Lua para SNES9x
- Libreria de funciones Lua para VBA
- Ejemplos de scripts de Lua por DeHackEd
[1]: Esto es conocido que ocurre en FCEUX, PCSX, and DeSmuME.