Lovely é um injetor lua que incorpora código em um jogo LÖVE 2d em tempo de execução. Ao contrário dos patchers executáveis, os mods podem ser instalados, atualizados e removidos repetidamente sem exigir a reinstalação parcial ou total do jogo. Isso é conseguido por meio do desvio da API lua no processo e de um sistema de patches fácil de usar (e distribuir).
Baixe a versão mais recente para Windows. Será lovely-x86_64-pc-windows-msvc.zip
x86_64-pc-windows-msvc.zip .
Abra o arquivo .zip e copie version.dll
para o diretório do jogo. Você pode navegar até o diretório do jogo clicando com o botão direito no jogo no Steam, passando o mouse sobre "Gerenciar" e selecionando "Navegar pelos arquivos locais".
Coloque um ou mais mods no diretório mod (NÃO no mesmo diretório do jogo). Deve ser %AppData%/Balatro/Mods
(se você estiver modificando o Balatro).
Apenas Steam Deck / Proton / Wine Defina as opções de inicialização do seu jogo no Steam para WINEDLLOVERRIDES="version=n,b" %command%
.
Execute o jogo através do Steam.
Baixe a versão mais recente para Mac. Se você tiver uma CPU da série M (M1, M2, etc.), então será lovely-aarch64-apple-darwin.tar.gz
. Se você tiver uma CPU Intel, será lovely-x86_64-apple-darwin.tar.gz
Abra o arquivo .zip, copie liblovely.dylib
e run_lovely.sh
para o diretório do jogo. Você pode navegar até o diretório do jogo clicando com o botão direito no jogo no Steam, passando o mouse sobre "Gerenciar" e selecionando "Navegar pelos arquivos locais".
Coloque um ou mais mods no diretório de mods do Mac (NÃO é o mesmo que o diretório do jogo). Deve ser /Users/$USER/Library/Application Support/Balatro/Mods
onde $USER
é o seu nome de usuário (se você estiver modificando o Balatro).
Se você não conseguir encontrar esta pasta, tente pressionar Shift-Command-.
(ponto final) para mostrar arquivos ocultos no Finder.
Execute o jogo arrastando e soltando run_lovely.sh
em Terminal.app
em Aplicativos > Utilitários e pressionando Enter, ou executando sh run_lovely.sh
no terminal dentro do diretório do jogo.
Observação: você não pode executar o jogo através do Steam no Mac devido a um bug no cliente Steam. Você deve executá-lo com o script run_lovely.sh
.
Importante : Mods com arquivos de patch Lovely ( lovely.toml
ou lovely/*.toml
) devem ser instalados em sua própria pasta dentro do diretório mod. Sem exceções!
Observe que o formato do patch é instável e propenso a mudanças até que o Lovely saia do início do desenvolvimento.
Os arquivos de patch definem onde e como a injeção de código ocorre no processo do jogo. Um bom exemplo (complexo) disso pode ser encontrado no repositório Steamodded aqui.
[manifest]version = "1.0.0"priority = 0# Defina uma regra de substituição var. Isso procura por linhas que contenham {{lovely:var_name}} # (var_name deste exemplo, pode realmente ser qualquer coisa) e substitui cada correspondência pelo # valor fornecido.# Este exemplo transformaria print('{{lovely:var_name} }') to print('Hello world!').# # ÚTIL: Para quando você deseja reduzir a complexidade de injeções repetitivas, por exemplo. incorporando # números de versão de lançamento em vários locais.[vars]var_name = "Olá, mundo!"# Injete uma ou mais linhas de código antes, depois ou em (substituindo) uma linha que corresponda # ao padrão fornecido.## ÚTIL: Para quando você precisar adicionar/modificar uma pequena quantidade de código para configurar # rotinas de inicialização, etc.[[patches]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteamodded()print('{{lovely:var_name}}')'''match_indent = truetimes = 1# Injete uma ou mais linhas de código antes, depois, em ou entrelaçadas em um ou mais # grupos de captura Regex.# - Eu recomendo que você use um playground Regex como https://regexr.com para construir # seus padrões.# - Regex NÃO É EFICIENTE. Por favor, use o patch padrão, a menos que seja absolutamente necessário.# - Este patch tem suporte para grupo de captura.# - Este patch NÃO corta espaços em branco de cada linha. Leve isso em consideração ao # projetar seu padrão.## ÚTIL: Para quando o patch do padrão não é expressivo o suficiente para descrever como a carga # deve ser injetada.[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]resif local obj e obj.apply e type(obj.apply) == 'function' then res = obj.apply(self, _context)endif res então return reselseif $cond'''times = 1# Anexe ou acrescente o conteúdo de um ou mais arquivos no destino.## ÚTIL: Para quando você *apenas* se preocupa em colocar seu código no jogo, nada mais. # Isso NÃO o injeta como um novo módulo.[[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", ]# Injete um novo módulo no jogo *antes* de um arquivo de destino carregado.# ÚTIL: Para quando você deseja isolar seu código em um módulo necessário separado OU injetar uma dependência "global" antes do código do jogo/mod começar a execução .[[remendos]] [patches.module]source = "nativefs.lua"before = "main.lua"name = "nativefs"
Use patches pattern
para incorporar código cirurgicamente em locais específicos do alvo. Suporta *
(corresponde a 0 ou mais ocorrências de qualquer caractere) e ?
(corresponde exatamente a uma ocorrência de qualquer caractere) curingas.
Use patches regex
somente quando o patch padrão não atender às suas necessidades. Este é basicamente o patch padrão, mas com um mecanismo de consulta regex de apoio, grupos de captura e tudo.
Use patches copy
quando precisar copiar uma grande quantidade de código independente de posição no destino.
Use patches module
para injetar um módulo lua no tempo de execução do jogo. Observe que atualmente isso suporta apenas módulos de arquivo único, mas isso deve mudar em breve.
Os arquivos de patch são carregados dos diretórios mod dentro da pasta mod ( MOD_DIR
). Lovely irá carregar quaisquer arquivos de patch presentes em MOD_DIR/ModName/lovely/
ou carregar um único patch de MOD_DIR/ModName/lovely.toml
. Se vários patches forem carregados, eles serão injetados no jogo na ordem em que forem encontrados.
Os caminhos definidos no patch têm raiz no diretório do mod. Por exemplo, core/deck.lua
resolve para MOD_DIR/ModName/core/deck.lua
.
Cada definição de patch possui um único destino de patch. Esses alvos são os caminhos relativos dos arquivos de origem quando retirados do jogo com uma ferramenta como o 7zip. Por exemplo, pode-se direcionar um arquivo de nível superior como main.lua
ou um em um subdiretório como engine/event.lua
.
Lovely despeja arquivos de origem lua corrigidos em MOD_DIR/lovely/dump
. Os logs também são gravados em MOD_DIR/lovely/log
.
manifest.version