Lovely は、実行時に LÖVE 2D ゲームにコードを埋め込む lua インジェクターです。実行可能なパッチャーとは異なり、MOD はゲームの一部または全体を再インストールすることなく、何度でもインストール、更新、削除できます。これは、インプロセス lua API 迂回と使いやすい (および配布) パッチ システムによって実現されます。
Windows 用の最新リリースをダウンロードします。これは、 lovely-x86_64-pc-windows-msvc.zip
になります。
.zip アーカイブを開き、 version.dll
ゲーム ディレクトリにコピーします。 Steam でゲームを右クリックし、[管理] にカーソルを合わせ、[ローカル ファイルの参照] を選択すると、ゲームのディレクトリに移動できます。
1 つ以上の MOD を MOD ディレクトリ (ゲーム ディレクトリと同じではありません) に置きます。これは%AppData%/Balatro/Mods
である必要があります (Balatro を改造している場合)。
Steam Deck / Proton / Wine のみSteam でのゲームの起動オプションをWINEDLLOVERRIDES="version=n,b" %command%
に設定します。
Steam を通じてゲームを実行します。
Mac 用の最新リリースをダウンロードします。 M シリーズ CPU (M1、M2 など) を使用している場合、これはlovely-aarch64-apple-darwin.tar.gz
になります。 Intel CPU を使用している場合は、 lovely-x86_64-apple-darwin.tar.gz
になります。
.zip アーカイブを開き、 liblovely.dylib
とrun_lovely.sh
ゲーム ディレクトリにコピーします。 Steam でゲームを右クリックし、[管理] にカーソルを合わせ、[ローカル ファイルの参照] を選択すると、ゲームのディレクトリに移動できます。
1 つ以上の MOD を Mac の MOD ディレクトリ (ゲーム ディレクトリと同じではありません) に置きます。これは/Users/$USER/Library/Application Support/Balatro/Mods
である必要があります。 $USER
はユーザー名です (Balatro を MOD している場合)。
このフォルダーが見つからない場合は、 Shift-Command-.
(ピリオド) Finder に隠しファイルを表示します。
run_lovely.sh
[アプリケーション] > [ユーティリティ] のTerminal.app
にドラッグ アンド ドロップして Enter キーを押すか、ゲーム ディレクトリ内のターミナルでsh run_lovely.sh
実行して、ゲームを実行します。
注: Steam クライアント内のバグのため、Mac 上の Steam を通じてゲームを実行することはできません。 run_lovely.sh
スクリプトを使用して実行する必要があります。
重要: Lovely パッチ ファイル ( lovely.toml
またはlovely/*.toml
内) を含む MOD は、MOD ディレクトリ内の独自のフォルダーにインストールする必要があります。例外はありません!
Lovely の開発初期段階が終了するまで、パッチの形式は不安定で変更される可能性があることに注意してください。
パッチ ファイルは、ゲーム プロセス内のコード インジェクションがどこでどのように行われるかを定義します。この良い (複雑な) 例は、Steamodded リポジトリにあります。
[manifest]version = "1.0.0"priority = 0# var 置換ルールを定義します。これは、{{lovely:var_name}} を含む行を検索します。 # (この例の var_name は、実際には何でも構いません) と、各一致を # 指定された値に置き換えます。 # この例では、 print('{{lovely:var_name} を変換します) }') to print('Hello world!').# # 有用: 繰り返しの注入の複雑さを軽減したい場合に使用します。 embedding # 複数の場所にリリースのバージョン番号を埋め込みます。[vars]var_name = "Hello world!"# 提供されたパターンに一致する行の前、後、または行 (置換) に 1 つ以上のコード行を挿入します。 ## 有用:初期化ルーチンなどをセットアップするために少量のコードを追加/変更する必要がある場合[[パッチ]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteamodded()print('{{lovely:var_name}}')''match_indent = truetimes = 1# 1 つ以上のコード行を 1 つ以上の Regex キャプチャ グループの前、後、位置、または織り交ぜて挿入します。# - Regex を使用することをお勧めします。 # パターンを構築するには https://regexr.com のようなプレイグラウンドを使用してください。# - 正規表現は効率的ではありません。どうしても必要な場合を除き、パターン パッチを使用してください。# - このパッチにはキャプチャ グループがサポートされています。# - このパッチは各行の空白を削除しません。 # パターンを設計するときは、それを考慮してください。## 有用: パターン パッチがペイロードの注入方法を説明するのに十分な表現力を持っていない場合に # 使用します。[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 および type(obj.apply) == 'function' then res = obj.apply(self, _context)endif res then return reselseif $ cond'''times = 1# 1 つ以上のファイルの内容をターゲットに追加または先頭に追加します。## 有用: コードをターゲットに挿入することのみを気にする場合に使用します。ゲーム、それ以外は何もありません。 # これは新しいモジュールとして挿入しません。[[パッチ]] [patches.copy]target = "main.lua"position = "append"sources = ["core/core.lua","core/deck.lua","core/joker.lua","core/sprite.lua ","デバッグ/デバッグ.lua","ローダー/ローダー.lua", ]# 新しいモジュールをゲームにロードするターゲット ファイルの *前* に挿入します。# 有用: コードを別の必須モジュールにサイロ化する場合、またはゲーム/MOD コードの実行が開始される前に「グローバル」依存関係を挿入する場合に使用します。 .[[パッチ]] [patches.module]source = "nativefs.lua"before = "main.lua"name = "nativefs"
pattern
パッチを使用して、ターゲット内の特定の場所にコードを外科的に埋め込みます。 *
(任意の文字の 0 個以上の出現と一致) および?
をサポートします。 (任意の文字の 1 回の出現に正確に一致する) ワイルドカード。
regex
パッチは、パターン パッチがニーズを満たさない場合にのみ使用してください。これは基本的にパターン パッチですが、補助的な正規表現クエリ エンジン、キャプチャ グループなどを備えています。
大量の位置に依存しないコードをターゲットにコピーする必要がある場合は、 copy
パッチを使用します。
module
パッチを使用して、ゲームのランタイムに lua モジュールを挿入します。現在、これは単一ファイル モジュールのみをサポートしていますが、これはすぐに変更される予定であることに注意してください。
パッチ ファイルは、mod フォルダー ( MOD_DIR
) 内の mod ディレクトリからロードされます。 Lovely は、 MOD_DIR/ModName/lovely/
内に存在するパッチ ファイルをロードするか、 MOD_DIR/ModName/lovely.toml
から単一のパッチをロードします。複数のパッチがロードされている場合、パッチは見つかった順にゲームに挿入されます。
パッチ内で定義されたパスは、MOD のディレクトリをルートとします。たとえば、 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