Lovely ist ein Lua-Injektor, der zur Laufzeit Code in ein LÖVE 2D-Spiel einbettet. Im Gegensatz zu ausführbaren Patchern können Mods immer wieder installiert, aktualisiert und entfernt werden, ohne dass eine teilweise oder vollständige Neuinstallation des Spiels erforderlich ist. Dies wird durch prozessinterne Lua-API-Umleitung und ein einfach zu verwendendes (und zu verteilendes) Patch-System erreicht.
Laden Sie die neueste Version für Windows herunter. Dies wird lovely-x86_64-pc-windows-msvc.zip
“ sein.
Öffnen Sie das ZIP-Archiv und kopieren Sie version.dll
in das Spielverzeichnis. Sie können zum Verzeichnis des Spiels navigieren, indem Sie in Steam mit der rechten Maustaste auf das Spiel klicken, den Mauszeiger über „Verwalten“ bewegen und „Lokale Dateien durchsuchen“ auswählen.
Legen Sie eine oder mehrere Mods im Mod-Verzeichnis ab (NICHT dasselbe wie das Spieleverzeichnis). Dies sollte %AppData%/Balatro/Mods
sein (wenn Sie Balatro modden).
Nur Steam Deck / Proton / Wine Stellen Sie die Startoptionen Ihres Spiels in Steam auf WINEDLLOVERRIDES="version=n,b" %command%
ein.
Führen Sie das Spiel über Steam aus.
Laden Sie die neueste Version für Mac herunter. Wenn Sie eine CPU der M-Serie (M1, M2 usw.) haben, ist dies lovely-aarch64-apple-darwin.tar.gz
. Wenn Sie eine Intel-CPU haben, lautet diese lovely-x86_64-apple-darwin.tar.gz
Öffnen Sie das .zip-Archiv, kopieren Sie liblovely.dylib
und run_lovely.sh
in das Spielverzeichnis. Sie können zum Verzeichnis des Spiels navigieren, indem Sie in Steam mit der rechten Maustaste auf das Spiel klicken, den Mauszeiger über „Verwalten“ bewegen und „Lokale Dateien durchsuchen“ auswählen.
Legen Sie eine oder mehrere Mods im Mac-Mod-Verzeichnis ab (NICHT dasselbe wie das Spieleverzeichnis). Dies sollte /Users/$USER/Library/Application Support/Balatro/Mods
sein, wobei $USER
Ihr Benutzername ist (wenn Sie Balatro modden).
Wenn Sie diesen Ordner nicht finden können, drücken Sie die Shift-Command-.
(Punkt), um versteckte Dateien im Finder anzuzeigen.
Führen Sie das Spiel aus, indem Sie run_lovely.sh
entweder per Drag & Drop auf Terminal.app
unter Anwendungen > Dienstprogramme ziehen und dann die Eingabetaste drücken, oder indem Sie sh run_lovely.sh
im Terminal im Spielverzeichnis ausführen.
Hinweis: Aufgrund eines Fehlers im Steam-Client können Sie Ihr Spiel nicht über Steam auf dem Mac ausführen. Sie müssen es mit dem Skript run_lovely.sh
ausführen.
Wichtig : Mods mit Lovely-Patchdateien ( lovely.toml
oder in lovely/*.toml
) müssen in einem eigenen Ordner im Mod-Verzeichnis installiert werden. Keine Ausnahmen!
Beachten Sie, dass das Patch-Format instabil ist und sich ändern kann, bis Lovely die frühe Entwicklung verlässt.
Patch-Dateien legen fest, wo und wie die Code-Injection innerhalb des Spielprozesses erfolgt. Ein gutes (komplexes) Beispiel hierfür finden Sie im Steamodded-Repo hier.
[manifest]version = "1.0.0"priority = 0# Definieren Sie eine Variablenersetzungsregel. Dies sucht nach Zeilen, die {{lovely:var_name}} # enthalten (var_name in diesem Beispiel, es kann wirklich alles sein) und ersetzt jede Übereinstimmung durch den # bereitgestellten Wert.# Dieses Beispiel würde print('{{lovely:var_name} }') to print('Hello world!').# # NÜTZLICH: Wenn Sie die Komplexität sich wiederholender Injektionen reduzieren möchten, z. Einbetten von # Release-Versionsnummern an mehreren Orten.[vars]var_name = "Hallo Welt!"# Fügen Sie eine oder mehrere Codezeilen vor, nach oder an (ersetzen) einer Zeile ein, die # dem bereitgestellten Muster entspricht.## NÜTZLICH: Für wenn Sie eine kleine Menge Code hinzufügen/ändern müssen, um Initialisierungsroutinen usw. einzurichten.[[Patches]] [patches.pattern]target = "game.lua"pattern = "self.SPEEDFACTOR = 1"position = "after"payload = '''initSteamodded()print('{{lovely:var_name}}')'''match_indent = truetimes = 1# Fügen Sie eine oder mehrere Codezeilen vor, nach, bei oder in eine oder mehrere # Regex-Erfassungsgruppen ein.# - Ich empfehle Ihnen, einen Regex-Spielplatz wie zu verwenden https://regexr.com, um # Ihre Muster zu erstellen.# - Regex ist NICHT EFFIZIENT. Bitte verwenden Sie den Muster-Patch, sofern nicht unbedingt erforderlich.# – Dieser Patch unterstützt Capture-Gruppen.# – Dieser Patch entfernt NICHT Leerzeichen aus jeder Zeile. Berücksichtigen Sie dies beim # Entwerfen Ihres Musters.## NÜTZLICH: Wenn der Musterpatch nicht aussagekräftig genug ist, um zu beschreiben, wie die # Nutzlast injiziert werden soll.[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 und obj.apply and type(obj.apply) == 'function' then res = obj.apply(self, _context)endif res then return reselseif $cond''' times = 1# Den Inhalt einer oder mehrerer Dateien an das Ziel anhängen oder voranstellen.## NÜTZLICH: Wenn es Ihnen *nur* darum geht, Ihren Code ins Spiel zu bringen, nichts anderes. # Dadurch wird es NICHT als neues Modul eingefügt.[[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", ]# Fügen Sie ein neues Modul in das Spiel ein, *bevor* eine Zieldatei geladen wurde.# NÜTZLICH: Wenn Sie Ihren Code in ein separates, erforderliches Modul siloisieren möchten ODER eine „globale“ Abhängigkeit einfügen möchten, bevor der Spiel-/Modcode mit der Ausführung beginnt .[[Patches]] [patches.module]source = "nativefs.lua"before = "main.lua"name = "nativefs"
Verwenden Sie pattern
, um Code an bestimmten Stellen im Ziel chirurgisch einzubetten. Unterstützt *
(entspricht 0 oder mehr Vorkommen eines beliebigen Zeichens) und ?
(entspricht genau einem Vorkommen eines beliebigen Zeichens) Platzhalter.
Verwenden Sie regex
-Patches nur, wenn der Muster-Patch Ihre Anforderungen nicht erfüllt. Dies ist im Grunde der Muster-Patch, jedoch mit einer unterstützenden Regex-Abfrage-Engine, Erfassungsgruppen und allem.
Verwenden Sie copy
, wenn Sie eine große Menge positionsunabhängigen Codes in das Ziel kopieren müssen.
Verwenden Sie module
Patches, um ein Lua-Modul in die Laufzeit des Spiels einzufügen. Beachten Sie, dass dies derzeit nur Einzeldateimodule unterstützt, dies sollte sich jedoch bald ändern.
Patchdateien werden aus Mod-Verzeichnissen im Mod-Ordner ( MOD_DIR
) geladen. Lovely lädt alle Patch-Dateien, die in MOD_DIR/ModName/lovely/
vorhanden sind, oder lädt einen einzelnen Patch aus MOD_DIR/ModName/lovely.toml
. Wenn mehrere Patches geladen werden, werden sie in der Reihenfolge, in der sie gefunden werden, in das Spiel eingefügt.
Im Patch definierte Pfade basieren auf dem Verzeichnis des Mods. Beispielsweise wird core/deck.lua
in MOD_DIR/ModName/core/deck.lua
aufgelöst.
Jede Patch-Definition hat ein einzelnes Patch-Ziel. Diese Ziele sind die relativen Pfade der Quelldateien, wenn sie mit einem Tool wie 7zip aus dem Spiel gelöscht werden. Beispielsweise kann man auf eine Datei der obersten Ebene wie main.lua
oder auf eine Datei in einem Unterverzeichnis wie engine/event.lua
abzielen.
Lovely speichert gepatchte Lua-Quelldateien im MOD_DIR/lovely/dump
. Protokolle werden ebenfalls in MOD_DIR/lovely/log
geschrieben.
manifest.version