Lovely는 런타임에 LÖVE 2D 게임에 코드를 삽입하는 루아 인젝터입니다. 실행 가능한 패치 프로그램과 달리 모드는 부분 또는 전체 게임을 다시 설치할 필요 없이 계속해서 설치, 업데이트 및 제거할 수 있습니다. 이는 프로세스 내 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를 모딩하는 경우).Shift-Command-.
(마침표)는 Finder에 숨겨진 파일을 표시합니다.Terminal.app
에 run_lovely.sh
끌어다 놓은 다음 Enter 키를 누르거나 게임 디렉터리 내의 터미널에서 sh run_lovely.sh
실행하여 게임을 실행하세요. 참고: Steam 클라이언트의 버그로 인해 Mac에서는 Steam을 통해 게임을 실행할 수 없습니다. run_lovely.sh
스크립트를 사용하여 실행해야 합니다.
중요 : Lovely 패치 파일( lovely.toml
또는 lovely/*.toml
)이 있는 모드는 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개 이상의 모든 문자와 일치) 및 ?
지원합니다. (모든 문자 중 정확히 한 번만 일치함) 와일드카드.regex
패치를 사용하세요. 이것은 기본적으로 패턴 패치이지만 정규식 쿼리 엔진, 캡처 그룹 등을 지원합니다.copy
패치를 사용하십시오.module
패치를 사용하여 게임 런타임에 Lua 모듈을 삽입합니다. 이는 현재 단일 파일 모듈만 지원하지만 곧 변경될 예정입니다. 패치 파일은 mod 폴더( MOD_DIR
) 내의 mod 디렉터리에서 로드됩니다. 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