Lovely — это lua-инжектор, который встраивает код в игру LÖVE 2d во время выполнения. В отличие от исполняемых патчей, моды можно устанавливать, обновлять и удалять снова и снова, не требуя частичной или полной переустановки игры. Это достигается за счет внутрипроцессного обхода API Lua и простой в использовании (и распространении) системы исправлений.
Загрузите последнюю версию для Windows. Это будет lovely-x86_64-pc-windows-msvc.zip
-pc-windows-msvc.zip.
Откройте .zip-архив, скопируйте version.dll
в каталог игры. Вы можете перейти в каталог игры, щелкнув правой кнопкой мыши игру в Steam, наведя курсор на «Управление» и выбрав «Просмотреть локальные файлы».
Поместите один или несколько модов в каталог модов (НЕ совпадает с каталогом игры). Это должен быть %AppData%/Balatro/Mods
(если вы модифицируете Balatro).
Только Steam Deck/Proton/Wine Установите для параметров запуска игры в Steam значение WINEDLLOVERRIDES="version=n,b" %command%
.
Запустите игру через Steam.
Загрузите последнюю версию для Mac. Если у вас процессор серии M (M1, M2 и т. д.), то это будет lovely-aarch64-apple-darwin.tar.gz
. Если у вас процессор Intel, то это будет lovely-x86_64-apple-darwin.tar.gz
Откройте архив .zip, скопируйте liblovely.dylib
и run_lovely.sh
в каталог игры. Вы можете перейти в каталог игры, щелкнув правой кнопкой мыши игру в Steam, наведя курсор на «Управление» и выбрав «Просмотреть локальные файлы».
Поместите один или несколько модов в каталог модов Mac (НЕ совпадает с каталогом игры). Это должен быть /Users/$USER/Library/Application Support/Balatro/Mods
, где $USER
— ваше имя пользователя (если вы модифицируете Balatro).
Если вы не можете найти эту папку, попробуйте нажать Shift-Command-.
(точка), чтобы показать скрытые файлы в Finder.
Запустите игру, перетащив run_lovely.sh
в Terminal.app
в разделе «Приложения» > «Утилиты» и нажав Enter, либо выполнив sh run_lovely.sh
в терминале в каталоге игры.
Примечание. Вы не можете запустить игру через Steam на Mac из-за ошибки в клиенте Steam. Вы должны запустить его с помощью сценария run_lovely.sh
.
Важно : Моды с файлами патчей Lovely ( lovely.toml
или lovely/*.toml
) должны быть установлены в отдельную папку в каталоге мода. Никаких исключений!
Обратите внимание, что формат патча нестабильен и может меняться до тех пор, пока Lovely не выйдет из ранней разработки.
Файлы патчей определяют, где и как происходит внедрение кода в игровой процесс. Хороший (сложный) пример этого можно найти в репозитории Steamodded здесь.
[manifest]version = "1.0.0"priority = 0# Определите правило замены переменных. При этом выполняется поиск строк, содержащих {{lovely:var_name}} # (var_name из этого примера, оно может быть любым) и заменяет каждое совпадение предоставленным # значением.# Этот пример преобразует print('{{lovely:var_name} }') to print('Hello world!').# # ПОЛЕЗНО: Когда вы хотите уменьшить сложность повторяющихся инъекций, например. встраивание # номеров версий выпуска в нескольких местах.[vars]var_name = "Hello world!"# Вставьте одну или несколько строк кода до, после или в (замене) строки, которая # соответствует предоставленному шаблону.## ПОЛЕЗНО: Для когда вам нужно добавить/изменить небольшой объем кода для настройки # процедур инициализации и т. д. [[патчи]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteammodded()print('{{lovely:var_name}}')'''match_indent = truetimes = 1# Внедрить одну или несколько строк кода до, после, в или вплетать в одну или несколько # групп захвата регулярных выражений.# - Я рекомендую вам использовать регулярное выражение игровая площадка, такая как https://regexr.com, для создания # ваших шаблонов.# - Regex НЕ ЭФФЕКТИВЕН. Пожалуйста, используйте патч шаблона, если в этом нет крайней необходимости.# - Этот патч поддерживает группы захвата.# - Этот патч НЕ удаляет пробелы из каждой строки. Учитывайте это # при разработке шаблона.## ПОЛЕЗНО: В случаях, когда патч шаблона недостаточно выразителен, чтобы описать, как # должна быть внедрена полезная нагрузка.[patches.regex]target = "tag.lua"pattern = "(? <indent>[t ]*)if (?<cond>_context.type == 'eval' then)"position = 'at'line_prepend = '$indent'payload = '''local obj = SMODS.Tags[self.key]local resif obj и obj.apply and type(obj.apply) == 'function' then res = obj.apply(self, _context)endif res then return reselseif $cond'''times = 1# Добавить или добавить содержимое одного или нескольких файлов к цели.## ПОЛЕЗНО: если вы *только* заботитесь о том, чтобы добавить свой код в игру, ничего больше. # Это НЕ внедряет его как новый модуль.[[patches]] [patches.copy]target = "main.lua"position = "append"sources = ["core/core.lua","core/deck.lua","core/joker.lua","core/sprite.lua ","debug/debug.lua","loader/loader.lua", ]# Внедрить новый модуль в игру *перед* загрузкой целевого файла.# ПОЛЕЗНО: если вы хотите разместить свой код в отдельном обязательном модуле ИЛИ внедрить «глобальную» зависимость до того, как код игры/мода начнет выполняться .[[патчи]] [patches.module]source = "nativefs.lua"before = "main.lua"name = "nativefs"
Используйте патчи pattern
для хирургического внедрения кода в определенные места внутри цели. Поддерживает *
(соответствует 0 или более вхождению любого символа) и ?
(соответствует ровно одному вхождению любого символа) подстановочные знаки.
Используйте исправления regex
только в том случае, если исправление шаблона не соответствует вашим потребностям. По сути, это патч шаблона, но с поддержкой механизма регулярных выражений, групп захвата и всего остального.
Используйте патчи copy
, когда вам нужно скопировать большой объем позиционно-независимого кода в цель.
Используйте патчи module
, чтобы внедрить модуль lua в среду выполнения игры. Обратите внимание, что в настоящее время поддерживаются только однофайловые модули, но скоро это должно измениться.
Файлы патчей загружаются из каталогов модов внутри папки мода ( MOD_DIR
). Lovely загрузит любые файлы патчей, присутствующие в MOD_DIR/ModName/lovely/
или загрузит один патч из MOD_DIR/ModName/lovely.toml
. Если загружено несколько патчей, они будут добавлены в игру в том порядке, в котором они найдены.
Пути, определенные в патче, основаны на каталоге мода. Например, core/deck.lua
разрешается в MOD_DIR/ModName/core/deck.lua
.
Каждое определение исправления имеет одну цель исправления. Этими целями являются относительные пути к исходным файлам, которые были выгружены из игры с помощью такого инструмента, как 7zip. Например, можно выбрать файл верхнего уровня, например main.lua
, или файл в подкаталоге, например engine/event.lua
.
Lovely выгружает исправленные исходные файлы Lua в MOD_DIR/lovely/dump
. Журналы также записываются в MOD_DIR/lovely/log
.
manifest.version