github ethangreen-dev/lovely-injector v0.5.0-beta1

latest releases: v0.5.0-beta7, v0.5.0-beta6, v0.5.0-beta5...
5 months ago

Warning: This is a beta release

If you encounter issues with this build and are NOT a mod author then please install the latest stable release: https://github.com/ethangreen-dev/lovely-injector/releases/tag/v0.4.0

The biggest concern with this release (and the reason why it's a beta) is that I cannot yet be confident that the re-implemented pattern patch behaves 1:1 with stable.

What's Changed

  • Implement shared "Lovely runtime" to reduce code duplication across win and mac targets by @ethangreen-dev in #6
    This is a backend change which reduces the complexity required to support windows and mac targets.
  • Complex Regex patching and patch optimization via ropey by @ethangreen-dev in #7
    This makes it possible to write patches with Regex, enabling MUCH MORE complex patch behavior than before.
  • Cleanup previously dumped buffers at startup, remove @ prefix from file names by @ethangreen-dev in #11
    This will remove the dump directory (Balatro/Mods/lovely/dump) directory at startup to ensure old buffers aren't kept around. This also ensures that buffers dumped to this directory do not have the @ prefix.
  • Add check and panic message when old dwmapi.dll binary is found within the game directory by @ethangreen-dev in #12
    This change adds a panic when dwmapi.dll is found within the game directory, with instructions on how to fix it.
  • Add --disable-console argument by @ethangreen-dev in #13
    For people who find the console annoying. Add this to the Steam launch args: --disable-console.

Regex Patches

This beta release is primarily meant to test long-awaited Regex patch - a new format which enables infinitely more complex (and expressive) patch behavior. Be careful with this tool, though, as it's easy to seriously damage runtime patching performance, cause infinite loops, or even trigger memory overflows.

Full documentation is pending, so here's a quick and dirty example:

[[patches]]
[patches.regex]
target = "game.lua"
pattern = "(?<indent>[ \t]*)if love.filesystem.getInfo\\(v.file\\) then \n.*\n.*\n"
position = "after"
line_prepend = "$indent"
payload = "print('hello world!')\n"

A note about the position and root_capture: The former specifies where relative to the root capture (Regex capture group) the payload will be inserted. I accept before, after, and at. The latter is the only value that will directly replace the capture with the payload. Capture groups can be interpolated into the payload as well, so it's quite simple to parse values out of the codebase and interpolate them into your payload.

line_prepend will prepend each value containing (non newline or empty) line of the payload with the containing value. Capture groups are interpolated into this value, as show in the previous example.

Refer to the regex patch struct definition for more information:

pub struct RegexPatch {

(I will write documentation sometime)

Full Changelog: v0.4.0...v0.5.0-beta1

Don't miss a new lovely-injector release

NewReleases is sending notifications on new releases.