Lovely es un inyector lua que incorpora código en un juego LÖVE 2d en tiempo de ejecución. A diferencia de los parches ejecutables, los mods se pueden instalar, actualizar y eliminar una y otra vez sin necesidad de reinstalar parcial o totalmente el juego. Esto se logra mediante el desvío de la API lua en el proceso y un sistema de parches fácil de usar (y distribuir).
Descargue la última versión para Windows. Esto será lovely-x86_64-pc-windows-msvc.zip
.
Abra el archivo .zip, copie version.dll
en el directorio del juego. Puedes navegar al directorio del juego haciendo clic derecho en el juego en Steam, colocando el cursor sobre "Administrar" y seleccionando "Examinar archivos locales".
Coloque uno o más mods en el directorio de mods (NO es lo mismo que el directorio del juego). Esto debería ser %AppData%/Balatro/Mods
(si estás modificando Balatro).
Solo Steam Deck / Proton / Wine Configura las opciones de inicio de tu juego en Steam en WINEDLLOVERRIDES="version=n,b" %command%
.
Ejecuta el juego a través de Steam.
Descargue la última versión para Mac. Si tiene una CPU de la serie M (M1, M2, etc.), este será lovely-aarch64-apple-darwin.tar.gz
. Si tienes una CPU Intel, será lovely-x86_64-apple-darwin.tar.gz
Abra el archivo .zip, copie liblovely.dylib
y run_lovely.sh
en el directorio del juego. Puedes navegar al directorio del juego haciendo clic derecho en el juego en Steam, colocando el cursor sobre "Administrar" y seleccionando "Examinar archivos locales".
Coloque uno o más mods en el directorio de mods de Mac (NO es lo mismo que el directorio del juego). Esto debería ser /Users/$USER/Library/Application Support/Balatro/Mods
donde $USER
es su nombre de usuario (si está modificando Balatro).
Si no puede encontrar esta carpeta, intente presionar Shift-Command-.
(punto) para mostrar archivos ocultos en Finder.
Ejecute el juego arrastrando y soltando run_lovely.sh
en Terminal.app
en Aplicaciones > Utilidades y luego presionando Intro, o ejecutando sh run_lovely.sh
en la terminal dentro del directorio del juego.
Nota: No puedes ejecutar tu juego a través de Steam en Mac debido a un error en el cliente Steam. Debes ejecutarlo con el script run_lovely.sh
.
Importante : Los mods con archivos de parche Lovely ( lovely.toml
o en lovely/*.toml
) deben instalarse en su propia carpeta dentro del directorio mod. ¡Sin excepciones!
Tenga en cuenta que el formato del parche es inestable y propenso a cambiar hasta que Lovely salga del desarrollo inicial.
Los archivos de parche definen dónde y cómo se produce la inyección de código dentro del proceso del juego. Un buen (complejo) ejemplo de esto se puede encontrar en el repositorio de Steamodded aquí.
[manifest]version = "1.0.0"priority = 0# Defina una regla de sustitución de var. Esto busca líneas que contengan {{lovely:var_name}} # (var_name de este ejemplo, en realidad puede ser cualquier cosa) y reemplaza cada coincidencia con el # valor proporcionado.# Este ejemplo transformaría print('{{lovely:var_name} }') to print('¡Hola mundo!').# # ÚTIL: Para cuando desee reducir la complejidad de las inyecciones repetitivas, por ejemplo. incrustando # números de versión de lanzamiento en múltiples ubicaciones.[vars]var_name = "¡Hola mundo!"# Inyecte una o más líneas de código antes, después o en (reemplazando) una línea que coincida # con el patrón proporcionado.## ÚTIL: Para cuando necesita agregar/modificar una pequeña cantidad de código para configurar rutinas de inicialización, etc.[[parches]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteamodded()print('{{lovely:var_name}}')''match_indent = truetimes = 1# Inyecte una o más líneas de código antes, después, en o entretejidas en uno o más # grupos de captura de Regex.# - Le recomiendo que use un área de juegos de Regex como https://regexr.com para construir # tus patrones.# - Regex NO ES EFICIENTE. Utilice el parche de patrón a menos que sea absolutamente necesario.# - Este parche tiene soporte para grupos de captura.# - Este parche NO recorta los espacios en blanco de cada línea. Tenga esto en cuenta al # diseñar su patrón.## ÚTIL: Para cuando el parche del patrón no es lo suficientemente expresivo para describir cómo se debe inyectar la # carga útil.[patches.regex]target = "tag.lua"pattern = "(? <sangría>[t ]*)if (?<cond>_context.type == 'eval' entonces)"position = 'at'line_prepend = '$indent'payload = '''obj local = SMODS.Tags[self.key]resif local obj y obj.apply y type(obj.apply) == 'función' luego res = obj.apply(self, _context)endif res luego devuelve reselseif $cond'''times = 1# Añade o antepone el contenido de uno o más archivos al objetivo.## ÚTIL: Para cuando *sólo* te importa introducir tu código en el juego, nada más. # Esto NO lo inyecta como un módulo nuevo.[[parches]] [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", ]# Inyecta un nuevo módulo en el juego *antes* de cargar un archivo de destino.# ÚTIL: Para cuando quieras aislar tu código en un módulo requerido separado O inyectar una dependencia "global" antes de que el código del juego/mod comience a ejecutarse .[[parches]] [patches.module]fuente = "nativefs.lua"antes = "main.lua"nombre = "nativefs"
Utilice parches pattern
para incrustar código quirúrgicamente en ubicaciones específicas dentro del objetivo. Admite *
(coincide con 0 o más apariciones de cualquier carácter) y ?
(coincide exactamente con una aparición de cualquier carácter) comodines.
Utilice parches de regex
sólo cuando el parche de patrón no satisfaga sus necesidades. Este es básicamente el parche de patrón pero con un motor de consulta de expresiones regulares de respaldo, grupos de captura y todo.
Utilice parches copy
cuando necesite copiar una gran cantidad de código independiente de la posición en el destino.
Utilice parches module
para inyectar un módulo lua en el tiempo de ejecución del juego. Tenga en cuenta que actualmente esto solo admite módulos de un solo archivo, pero esto debería cambiar pronto.
Los archivos de parche se cargan desde directorios mod dentro de la carpeta mod ( MOD_DIR
). Lovely cargará cualquier archivo de parche presente en MOD_DIR/ModName/lovely/
o cargará un único parche desde MOD_DIR/ModName/lovely.toml
. Si se cargan varios parches, se inyectarán en el juego en el orden en que se encuentren.
Las rutas definidas dentro del parche tienen su raíz en el directorio del mod. Por ejemplo, core/deck.lua
se resuelve en MOD_DIR/ModName/core/deck.lua
.
Cada definición de parche tiene un único destino de parche. Estos objetivos son las rutas relativas de los archivos fuente cuando se descargan del juego con una herramienta como 7zip. Por ejemplo, uno puede apuntar a un archivo de nivel superior como main.lua
o uno en un subdirectorio como engine/event.lua
.
Lovely descarga los archivos fuente de lua parcheados en MOD_DIR/lovely/dump
. Los registros también se escriben en MOD_DIR/lovely/log
.
manifest.version