API скриптинга Lua
mGBA включает полную поддержку скриптов Lua 5.4, позволяя создавать пользовательские инструменты, тренеры, скрипты автоматизации и модификации игр. Эта документация предоставляет полный справочник по API скриптинга Lua.
Начало работы со скриптами Lua
Загрузка скриптов
Чтобы загрузить скрипт Lua в mGBA:
- Перейдите в Инструменты → Скрипты → Загрузить скрипт
- Перейдите к файлу скрипта Lua (формат .lua)
- Выберите файл скрипта и нажмите Открыть
- Скрипт будет загружен и выполнен автоматически
Функции доступа к памяти
read8(address)
Читает 8-битное значение из памяти.
Параметры:
address(number): Адрес памяти (0x00000000 до 0xFFFFFFFF)
Возвращает: 8-битное значение (0-255)
-- Пример: Чтение 8-битного значения из памяти
value = mGBA:read8(0x02000000)
print("Значение по адресу 0x02000000: " .. value)
read16(address)
Читает 16-битное значение из памяти.
Параметры:
address(number): Адрес памяти
Возвращает: 16-битное значение (0-65535)
-- Пример: Чтение 16-битного значения
value = mGBA:read16(0x02000000)
print("16-битное значение: " .. value)
read32(address)
Читает 32-битное значение из памяти.
Параметры:
address(number): Адрес памяти
Возвращает: 32-битное значение
-- Пример: Чтение 32-битного значения
value = mGBA:read32(0x02000000)
print("32-битное значение: " .. value)
write8(address, value)
Записывает 8-битное значение в память.
Параметры:
address(number): Адрес памятиvalue(number): 8-битное значение (0-255)
-- Пример: Запись 8-битного значения mGBA:write8(0x02000000, 0xFF)
write16(address, value)
Записывает 16-битное значение в память.
Параметры:
address(number): Адрес памятиvalue(number): 16-битное значение (0-65535)
write32(address, value)
Записывает 32-битное значение в память.
Параметры:
address(number): Адрес памятиvalue(number): 32-битное значение
Функции CPU и регистров
getRegister(registerName)
Получает значение регистра CPU.
Параметры:
registerName(string): Имя регистра (например, "r0", "r1", "pc", "sp")
Возвращает: Значение регистра (32-битное)
-- Пример: Получение значения PC (счётчика команд)
pc = mGBA:getRegister("pc")
print("Счётчик команд: " .. string.format("0x%08X", pc))
setRegister(registerName, value)
Устанавливает значение регистра CPU.
Параметры:
registerName(string): Имя регистраvalue(number): 32-битное значение
Функции кадров и времени
frame()
Получает номер текущего кадра.
Возвращает: Номер текущего кадра
-- Пример: Получение текущего кадра
currentFrame = mGBA:frame()
print("Текущий кадр: " .. currentFrame)
reset()
Сбрасывает эмулятор.
-- Пример: Сброс эмулятора mGBA:reset()
Функции сохранений
saveState(slot)
Сохраняет состояние в слот.
Параметры:
slot(number): Номер слота сохранения (1-10)
loadState(slot)
Загружает состояние из слота.
Параметры:
slot(number): Номер слота сохранения (1-10)
Функции ввода
pressButton(button)
Нажимает кнопку программно.
Параметры:
button(string): Имя кнопки ("A", "B", "L", "R", "Start", "Select", "Up", "Down", "Left", "Right")
-- Пример: Нажатие кнопки A
mGBA:pressButton("A")
Обратные вызовы событий
API Lua mGBA поддерживает обратные вызовы событий для изменений состояния игры:
-- Пример: Обратный вызов кадра
function onFrame()
-- Эта функция вызывается каждый кадр
local frame = mGBA:frame()
if frame % 60 == 0 then
print("Кадр: " .. frame)
end
end
-- Регистрация обратного вызова
mGBA:onFrame(onFrame)
Примеры распространённых скриптов
Тренер здоровья
-- Пример тренера здоровья
local healthAddress = 0x02000000 -- Замените на реальный адрес
function infiniteHealth()
mGBA:write16(healthAddress, 999)
end
-- Выполнять каждый кадр
mGBA:onFrame(infiniteHealth)
Счётчик кадров
-- Скрипт счётчика кадров
local startFrame = mGBA:frame()
function countFrames()
local current = mGBA:frame()
local elapsed = current - startFrame
print("Прошедших кадров: " .. elapsed)
end
mGBA:onFrame(countFrames)
Адреса памяти
Распространённые адреса памяти для игр Game Boy Advance:
- Внутренняя WRAM: 0x03000000 - 0x03007FFF (32KB)
- Внешняя WRAM: 0x02000000 - 0x0203FFFF (256KB)
- Видео RAM: 0x06000000 - 0x06017FFF (96KB)
- ROM картриджа: 0x08000000 - 0x0DFFFFFF (зависит от игры)
- SRAM картриджа: 0x0E000000 - 0x0E00FFFF (зависит от игры)
Рекомендации
- Всегда проверяйте адреса памяти перед чтением/записью
- Используйте подходящие типы данных (8-битные, 16-битные, 32-битные) для операций с памятью
- Будьте осторожны с обратными вызовами кадров, чтобы избежать проблем с производительностью
- Тщательно тестируйте скрипты перед использованием в важном геймплее
- Создавайте резервные копии файлов сохранений перед использованием скриптов, изменяющих состояние игры
Ограничения
- Скрипты Lua выполняются в основном потоке эмулятора (может влиять на производительность)
- Некоторые операции могут быть недоступны в зависимости от состояния эмулятора
- Адреса памяти могут изменяться между версиями или регионами игры
Связанные статьи
Для получения дополнительной информации о конфигурации и разработке mGBA:
- Справочник API конфигурации - Параметры программной конфигурации и управление настройками
- Руководство по продвинутой конфигурации - Подробное описание продвинутых настроек и техник оптимизации
- Обзор архитектуры - Понимание структуры кодовой базы mGBA и принципов проектирования
- Руководство для начинающих - Инструкции по установке и базовой настройке