Lovely は、実行時に LÖVE 2D ゲームにコードを埋め込む lua インジェクターです。実行可能なパッチャーとは異なり、MOD はゲームの部分的または全体を再インストールすることなく、何度でもインストール、更新、削除できます。これは、インプロセス lua API 迂回と使いやすい (および配布) パッチ システムによって実現されます。
lovely-x86_64-pc-windows-msvc.zip
になります。version.dll
ゲーム ディレクトリにコピーします。 Steam でゲームを右クリックし、[管理] にカーソルを合わせ、[ローカル ファイルの参照] を選択すると、ゲームのディレクトリに移動できます。%AppData%/Balatro/Mods
である必要があります (Balatro を改造している場合)。WINEDLLOVERRIDES="version=n,b" %command%
に設定します。lovely-aarch64-apple-darwin.tar.gz
になります。 Intel CPU を使用している場合は、 lovely-x86_64-apple-darwin.tar.gz
になります。liblovely.dylib
とrun_lovely.sh
ゲーム ディレクトリにコピーします。 Steam でゲームを右クリックし、[管理] にカーソルを合わせ、[ローカル ファイルの参照] を選択すると、ゲームのディレクトリに移動できます。/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
# Define a var substitution rule. This searches for lines that contain {{lovely:var_name}}
# (var_name from this example, it can really be anything) and replaces each match with the
# provided value.
# This example would transform print('{{lovely:var_name}}') to print('Hello world!').
#
# USEFUL: For when you want to reduce the complexity of repetitive injections, eg. embedding
# release version numbers in multiple locations.
[ vars ]
var_name = " Hello world! "
# Inject one or more lines of code before, after, or at (replacing) a line which matches
# the provided pattern.
#
# USEFUL: For when you need to add / modify a small amount of code to setup initialization
# routines, etc.
[[ patches ]]
[ patches . pattern ]
target = " game.lua "
pattern = " self.SPEEDFACTOR = 1 "
position = " after "
payload = '''
initSteamodded()
print('{{lovely:var_name}}')
'''
match_indent = true
times = 1
# Inject one or more lines of code before, after, at, or interwoven into one or more
# Regex capture groups.
# - I recommend you to use a Regex playground like https://regexr.com to build
# your patterns.
# - Regex is NOT EFFICIENT. Please use the pattern patch unless absolutely necessary.
# - This patch has capture group support.
# - This patch does NOT trim whitespace from each line. Take that into account when
# designing your pattern.
#
# USEFUL: For when the pattern patch is not expressive enough to describe how the
# payload should be injected.
[ patches . regex ]
target = " tag.lua "
pattern = " (?[ t ]*)if (?_context.type == 'eval' then) "
position = ' at '
line_prepend = ' $indent '
payload = '''
local obj = SMODS.Tags[self.key]
local res
if obj and obj.apply and type(obj.apply) == 'function' then
res = obj.apply(self, _context)
end
if res then
return res
elseif $cond
'''
times = 1
# Append or prepend the contents of one or more files onto the target.
#
# USEFUL: For when you *only* care about getting your code into the game, nothing else.
# This does NOT inject it as a new module.
[[ 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 " ,
]
# Inject a new module into the game *before* a target file it loaded.
# USEFUL: For when you want to silo your code into a separate require-able module OR inject a "global" dependency before game / mod code begins execution.
[[ patches ]]
[ 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