View Page Source

Back to Page
Revision 13 (current)
Edited by Darkman425 on 8/20/2023 5:41 PM
Lua-скрипты — это очень полезный инструмент при ТАСинге. Хотя для их написания требуется некоторое знание программирования, они позволяют управлять такими вещами, как отображение игры на экране, ввод и память. Lua-скрипты часто используются для:
*Отображения полезной информации на экране,
*Автоматизации утомительных действий,
*Создания специальных условий для тестирования,
*Перебора всевозможных действий для нахождения решения.

Snes9x был первым эмулятором, где появилась поддержка Lua в 2008 году. Сейчас Lua поддерживают следующие эмуляторы: FCEU(X), BizHawk, lsnes, Snes9x, Gens, VBA, Final Burn Alpha, PCSX, DeSmuME, PCEjin, VBjin и JPC-RR.

Для интеграции Lua в эмуляторе были созданы некоторые специальные функции, составляющие основу Lua API эмулятора, и предоставляющие скриптам способ управления эмулятором. Однако, этими функциями скрипты не ограничены. В скриптах можно использовать любые функции из стандартной библиотеки Lua, включая поддержку чтения и записи файлов. Так, например, в эмулятор можно добавить поддержку управления через текстовые файлы!

!! Как запустить Lua-скрипт

Чтобы запустить Lua-скрипт, скопируйте исходный код и поместите его в текстовый редактор. Сохраните текст в файл с названием {{file.lua}}, или любым другим, оканчивающимся на {{.lua}}. При сохранении в Блокноте Windows, имя файла необходимо заключить в кавычки: {{"file.lua"}}.

Теперь откройте эмулятор и запустите файл Lua. В некоторых эмуляторах есть специальное окно для Lua-скриптов; после загрузки скрипт автоматически начнёт выполнение.

!! Основы

Ознакомиться с основами Lua можно в [http://www.lua.ru/doc/|руководстве по Lua 5.1]. Там описаны принципы работы языка, а также основной API.

В эмуляторе часто требуется основной цикл выполнения. Он может быть двух видов (весь текст от -- и до конца строки является комментарием):

 -- Здесь объявления
 
 while true do
     -- Здесь выражения
     emu.frameadvance()
 end
 
и

 -- Здесь объявления

 function fn()
     -- Здесь выражения
 end

 gui.register(fn)

Второй вариант технически является функцией, которая вызывается эмулятором при обновлении экрана (как правило, они происходят раз в кадр, но некоторые эмуляторы[#1] вызывают эту функцию и во время паузы). Второй вариант необходим для эмулятора DeSmuME, так как первый вариант в нём работает иначе, чем в большинстве эмуляторов (подробности есть в [Forum/Topics/18798|этом топике]).

*[LuaScripting/Registers|Регистры] — запуск функций при происхождении определённых событий, таких как прохождение кадра (frame advance), сохранение/загрузка состояния и т.п.
*[LuaScripting/Display|Отображение] — рисование, наблюдение за памятью и т.п.
*[LuaScripting/Macros|Макросы]
** [LuaScripting/TableKeys] — управление вводом, включая автозажатие и автонажатие.
*[LuaScripting/MemoryEditing|Редактирование памяти]

[TODO]

* Требуется описать:
** joypad.set
** savestate.create, savestate.load, savestate.save
** FCEU.pause
** FCEU.speedmode
** io.write, io.output

!! Использование MHS для эмуляторов без поддержки Lua

[http://memoryhacking.com/download.php|L. Spiro's Memory Hacking Software]

* Требуется описать:
** Упомянуть, что значения позиций, как правило, являются типами данных с плавающей точкой.

!! Дополнительная информация

! Ссылки на сайте

* [Bizhawk/LuaFunctions|Lua-функции в эмуляторе BizHawk]
* [EmulatorResources/Lsnes/LuaFunctions|Lua-функции в эмуляторе lsnes]
* Некоторые [/HomePages/Bisqwit/LuaFunctions|более сложные] применения Lua за авторством [user:Bisqwit].

! Внешние ссылки

* [http://code.google.com/p/snes9x-rr/wiki/LuaScriptingFunctions|Lua-функции в эмуляторе Snes9x]
* [http://code.google.com/p/vba-rerecording/wiki/LuaScriptingFunctions|Lua-функции в эмуляторе VBA]
* [http://dehacked.2y.net/snes9x-lua/|Lua-скрипты DeHackEd]

! Подстраницы

----

[1]: Известно, что такое происходит в FCEUX, PCSX и DeSmuME.