Суть библиотеки в полном упрощении отрисовки текстур и текста, вывода звука без сильной потери производительности.
- Скачайте архив: Стабильная версия / Предрелизная версия (с последними изменениями).
- Папку внутри архива поместите по пути X:/PSP/GAME/.
- В списке игр найдите USGAPI и запустите.
- Каждая игра имеет свою папку в папке Games.
- В корне папки с вашей игрой должен лежать script.lua
Перед отправкой PR, убедитесь, что игра соответствует требованиям:
- Игра должна использовать только USGAPI и класс buttons. Если чего-то нет в USGAPI, то пользуйтесь доступными аналогами, либо, если считаете, что это должно быть добавлено, жалуйтесь.
- Игра должна использовать локальные переменные.
- Игра не должна создавать/изменять глобальные переменные.
- У игры должен быть выход в любой момент по кнопке START.
- Выход из игры должен осуществляться путём выхода из скрипта
- Очистка ассетов происходит автоматически после выхода из файла, поэтому вызывать unloadAll НЕ НУЖНО.
- Создать папку со своей игрой в папке Games.
- Создать в папке своей игры файл script.lua (это будет главным файлом игры).
- Создайте fork от моего репозитория.
- Внесите в него изменения.
- Создайте Pull Request (PR).
- Ожидайте проверки. Если будут какие-то недочёты - исправляете в своей ветке и они докидываются в PR.
- Ваша игра добавлена!
Ну мне лень самому документацию делать, просто потому что в этом нет острой необходимости.
Сама либа имеет типизацию через Lua Language Server. Ставите её, после чего VS Code показывает подсказки где какой аргумент ставить. Плюс можете накатить LuaPlayerYT в менеджере аддонов, чтобы подсказки с buttons работали.
Если говорить про сам код, то вот кратко:
local USGAPI = require("Libs.USGAPI"); -- подключение библиотеки
local gamePath = USGAPI.getGamePath(); -- получение пути к папке с игрой
-- (важно: если вы вызовите во вложенной папке, например Games/YourGame/Scripts,
-- то переменная будет указывать на папку Scripts)
while true do
USGAPI.startFrame();
if (buttons.pressed(buttons.cross)) then
--делаем какие-то действия
end;
--отрисовка текста
USGAPI.drawText(gamePath .. 'gameFont.ttf', 10, 10, 'Текст игровым шрифтом');
USGAPI.drawText('Fonts/arial.ttf', 10, 20, 'Текст глобальным шрифтом');
--отрисовка текстуры
USGAPI.drawTexture(gamePath .. 'player.png', 100, 150);
if (buttons.pressed(buttons.start)) then break; end; -- выход из файла по кнопке start
end;Для предзагрузки есть два способа:
-- передать пути к ассетам подряд через запятую
USGAPI.preload("Images/Tex_64.jpg", "Images/Tex_256.jpg", "Fonts/arial.ttf", "Sounds/startGame.wav");
-- передать пути к ассетам таблицей
local preloadList = { "Images/Tex_64.jpg", "Images/Tex_256.jpg", "Fonts/arial.ttf", "Sounds/startGame.wav" };
USGAPI.preload(preloadList);Кидаете в нейронку файл LLM_Prompt_USGAPI_RU.txt (где-то можно прям ссылку указать) и пишете ей что-то по типу:
Сделай игру minecraft или Сделай крутую игру чтобы бегать можно было и взрывы всякие и вообще всё клёво
Далее она начнёт что-то вытворять. Очень желательно всё тщательно проверить, и подправить по красоте.
В папке с игрой вы можете создать файл meta.lua, в котором вы можете указать метаданные вашей игры.
В начале файла можно указать тип UIGameMeta, после чего LLS будет подсказывать возможные поля/значения. Все поля - необязательные, так что необязательно каждый из них писать.
---@type UIGameMeta
return {
category = "Classic",
altName = "Game Name",
author = "Author"
};Да, такое может быть, потому что библиотека сама не очищает ОЗУ. Делает это только главное меню после выхода из игры. Поэтому если хочется вручную почистить, то вызывайте функцию USGAPI.unloadAll() или USGAPI.unloadAllTextures().