Lovely adalah injektor lua yang menyematkan kode ke dalam game LÖVE 2d saat runtime. Tidak seperti patcher yang dapat dieksekusi, mod dapat dipasang, diperbarui, dan dihapus berulang kali tanpa memerlukan instalasi ulang game sebagian atau seluruhnya. Hal ini dicapai melalui proses memutar lua API dan sistem patch yang mudah digunakan (dan didistribusikan).
Unduh rilis terbaru untuk Windows. Ini akan menjadi lovely-x86_64-pc-windows-msvc.zip
.
Buka arsip .zip, salin version.dll
ke direktori game. Anda dapat menavigasi ke direktori game dengan mengeklik kanan game di Steam, mengarahkan kursor ke "Kelola", dan memilih "Jelajahi file lokal".
Masukkan satu atau lebih mod ke dalam direktori mod (TIDAK sama dengan direktori game). Ini harusnya %AppData%/Balatro/Mods
(jika Anda memodifikasi Balatro).
Hanya Steam Deck / Proton / Wine Setel opsi peluncuran game Anda di Steam ke WINEDLLOVERRIDES="version=n,b" %command%
.
Jalankan gamenya melalui Steam.
Unduh rilis terbaru untuk Mac. Jika Anda memiliki CPU seri M (M1, M2, dll.) maka ini akan menjadi lovely-aarch64-apple-darwin.tar.gz
. Jika Anda memiliki CPU Intel maka itu akan menjadi lovely-x86_64-apple-darwin.tar.gz
Buka arsip .zip, salin liblovely.dylib
dan run_lovely.sh
ke direktori game. Anda dapat menavigasi ke direktori game dengan mengeklik kanan game di Steam, mengarahkan kursor ke "Kelola", dan memilih "Jelajahi file lokal".
Masukkan satu atau lebih mod ke dalam direktori mod Mac (TIDAK sama dengan direktori game). Ini harusnya /Users/$USER/Library/Application Support/Balatro/Mods
di mana $USER
adalah nama pengguna Anda (jika Anda memodifikasi Balatro).
Jika Anda tidak dapat menemukan folder ini, coba tekan Shift-Command-.
(titik) untuk menampilkan file tersembunyi di Finder.
Jalankan game dengan menyeret dan melepaskan run_lovely.sh
ke Terminal.app
di Aplikasi > Utilitas lalu tekan enter, atau dengan menjalankan sh run_lovely.sh
di terminal dalam direktori game.
Catatan: Anda tidak dapat menjalankan game Anda melalui Steam di Mac karena ada bug dalam klien Steam. Anda harus menjalankannya dengan skrip run_lovely.sh
.
Penting : Mod dengan file patch Lovely ( lovely.toml
atau lovely/*.toml
) harus diinstal ke foldernya sendiri di dalam direktori mod. Tidak ada pengecualian!
Perlu diperhatikan bahwa format patch tidak stabil dan rentan berubah hingga Lovely keluar dari pengembangan awal.
File patch menentukan di mana dan bagaimana injeksi kode terjadi dalam proses game. Contoh bagus (kompleks) mengenai hal ini dapat ditemukan di repo Steamodded di sini.
[manifest]version = "1.0.0"priority = 0# Definisikan aturan substitusi var. Ini mencari baris yang berisi {{lovely:var_name}} # (var_name dari contoh ini, bisa berupa apa saja) dan mengganti setiap kecocokan dengan # nilai yang diberikan.# Contoh ini akan mengubah print('{{lovely:var_name} }') to print('Halo dunia!').# # BERMANFAAT: Ketika Anda ingin mengurangi kompleksitas injeksi berulang, misalnya. menyematkan # nomor versi rilis di beberapa lokasi.[vars]var_name = "Halo dunia!"# Menyuntikkan satu atau lebih baris kode sebelum, sesudah, atau pada (mengganti) baris yang # cocok dengan pola yang disediakan.## BERMANFAAT: Untuk ketika Anda perlu menambahkan/memodifikasi sejumlah kecil kode untuk mengatur inisialisasi # rutinitas, dll.[[patch]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteamodded()print('{{lovely:var_name}}')'''match_indent = truetimes = 1# Suntikkan satu atau lebih baris kode sebelum, sesudah, di, atau terjalin ke dalam satu atau lebih # Grup penangkapan regex.# - Saya menyarankan Anda untuk menggunakan taman bermain Regex seperti https://regexr.com untuk membangun # pola Anda.# - Regex TIDAK EFISIEN. Silakan gunakan patch pola kecuali benar-benar diperlukan.# - Patch ini memiliki dukungan grup capture.# - Patch ini TIDAK memangkas spasi dari setiap baris. Pertimbangkan hal ini saat # mendesain pola Anda.## BERMANFAAT: Ketika patch pola tidak cukup ekspresif untuk menjelaskan bagaimana # payload harus disuntikkan.[patches.regex]target = "tag.lua"pattern = "(? <indent>[t ]*)if (?<cond>_context.type == 'eval' lalu)"position = 'at'line_prepend = '$indent'payload = '''local obj = SMODS.Tags[self.key]resif lokal obj dan obj.apply dan ketik(obj.apply) == 'function' lalu res = obj.apply(self, _context)endif res lalu kembalikan reselseif $cond'''times = 1# Tambahkan atau tambahkan konten satu atau lebih file ke target.## BERMANFAAT: Ketika Anda *hanya* peduli untuk memasukkan kode Anda ke dalam game, tidak ada yang lain. # Ini TIDAK menyuntikkannya sebagai modul baru.[[patch]] [patches.copy]target = "main.lua"position = "tambahkan"sources = ["core/core.lua","core/deck.lua","core/joker.lua","core/sprite.lua ","debug/debug.lua","loader/loader.lua", ]# Menyuntikkan modul baru ke dalam game *sebelum* file target dimuat.# BERMANFAAT: Untuk saat Anda ingin menyimpan kode Anda ke dalam modul terpisah yang diperlukan ATAU menyuntikkan ketergantungan "global" sebelum kode game/mod mulai dieksekusi .[[tambalan]] [patches.module]source = "nativefs.lua"before = "main.lua"name = "nativefs"
Gunakan tambalan pattern
untuk menanamkan kode melalui pembedahan di lokasi tertentu dalam target. Mendukung *
(cocok dengan 0 atau lebih kemunculan karakter apa pun) dan ?
(cocok persis dengan satu kemunculan karakter apa pun) wildcard.
Gunakan patch regex
hanya jika patch pola tidak memenuhi kebutuhan Anda. Ini pada dasarnya adalah patch pola tetapi dengan mesin kueri regex yang mendukung, grup tangkapan, dan semuanya.
Gunakan copy
tambalan ketika Anda perlu menyalin sejumlah besar kode yang tidak bergantung pada posisi ke target.
Gunakan patch module
untuk memasukkan modul lua ke dalam runtime permainan. Perhatikan bahwa saat ini hanya mendukung modul file tunggal, tetapi ini akan segera berubah.
File patch diambil dari direktori mod di dalam folder mod ( MOD_DIR
). Lovely akan memuat file patch apa pun yang ada dalam MOD_DIR/ModName/lovely/
atau memuat satu patch dari MOD_DIR/ModName/lovely.toml
. Jika beberapa patch dimuat, patch tersebut akan dimasukkan ke dalam game sesuai urutan penemuannya.
Jalur yang ditentukan dalam patch di-root oleh direktori mod. Misalnya, core/deck.lua
memutuskan menjadi MOD_DIR/ModName/core/deck.lua
.
Setiap definisi patch memiliki satu target patch. Target ini adalah jalur relatif dari file sumber ketika dibuang dari game dengan alat seperti 7zip. Misalnya, seseorang dapat menargetkan file tingkat atas seperti main.lua
, atau file di subdirektori seperti engine/event.lua
.
Lovely dump menambal file sumber lua ke MOD_DIR/lovely/dump
. Log juga ditulis ke MOD_DIR/lovely/log
.
manifest.version