lovely
Lovely is a runtime lua injector for LÖVE 2d
| Date uploaded | a month ago |
| Version | 0.10.0 |
| Download link | Thunderstore-lovely-0.10.0.zip |
| Downloads | 12471 |
| Dependency string | Thunderstore-lovely-0.10.0 |
README
Lovely is a runtime lua injector for LÖVE 2d
Lovely is a lua injector which embeds code into a LÖVE 2d game at runtime. Unlike executable patchers, mods can be installed, updated, and removed over and over again without requiring a partial or total game reinstallation. This is accomplished through in-process lua API detouring and an easy to use (and distribute) patch system.
Manual Installation
Windows + Proton / Wine
- Download the latest release for Windows. This will be
lovely-x86_64-pc-windows-msvc.zip. - Open the .zip archive, copy
winmm.dllinto the game directory. You can navigate to the game's directory by right-clicking the game in Steam, hovering "Manage", and selecting "Browse local files". If you are upgrading from an older version of Lovely, delete the oldversion.dllfrom the game directory. - Put one or more mods into the mod directory (NOT the same as the game directory). You may need to create the
Modsfolder yourself, or launch Balatro with lovely installed once to create it automatically. If you are modding Balatro, this should be
%AppData%/Balatro/Modson Windows~/.steam/steam/steamapps/compatdata/2379780/pfx/drive_c/users/steamuser/AppData/Roaming/Balatro/Modson Steam Deck (~/will be called Home if you are moving files in the GUI file manager)- Flatpak version of Steam:
~/.var/app/com.valvesoftware.Steam/.steam/steam/steamapps/compatdata/2379780/pfx/drive_c/users/steamuser/AppData/Roaming/Balatro/Mods
- Only Steam Deck / Proton / Wine Set your game's launch options in Steam to
WINEDLLOVERRIDES="winmm=n,b" %command%. - Run the game through Steam.
Mac
- Download the latest release for Mac. If you have an M-series CPU (M1, M2, etc.) then this will be
lovely-aarch64-apple-darwin.tar.gz. If you have an Intel CPU then it will belovely-x86_64-apple-darwin.tar.gz - Open the .zip archive, copy
liblovely.dylibandrun_lovely_macos.shinto the game directory. You can navigate to the game's directory by right-clicking the game in Steam, hovering "Manage", and selecting "Browse local files". - Put one or more mods into the Mac mod directory (NOT the same as the game directory). This should be
/Users/$USER/Library/Application Support/Balatro/Modswhere$USERis your username (if you are modding Balatro).
If you can't find this folder, try pressingShift-Command-.(period) to show hidden files in Finder. - Run the game by either dragging and dropping
run_lovely_macos.shontoTerminal.appin Applications > Utilities and then pressing enter, or by executingsh run_lovely_macos.shin the terminal within the game directory.
Note: You cannot run your game through Steam on Mac due to a bug within the Steam client. You must run it with the run_lovely_macos.sh script.
Important: Mods with Lovely patch files (lovely.toml or in lovely/*.toml) must be installed into their own folder (or zip file) within the mod directory. No exceptions!
Linux Native
- Install
loveusing your distribution's package manager. This issudo pacman -S loveon SteamOS and Arch-based distros, andsudo apt install loveon Ubuntu & Debian-based ones. - Download the latest release for Linux. This will be
x86_64-unknown-linux-gnu.tar.gz. - Open the .tar.gz archive, copy
liblovely.soandrun_lovely_linux.shinto the game directory. You can navigate to the game's directory by right-clicking the game in Steam, hovering "Manage", and selecting "Browse local files". - Put one or more mods into the mod directory (NOT the same as the game directory). If you are modding Balatro, this should be
~/.local/share/love/Mods. - Run the game by executing
./run_lovely_linux.shin the terminal within the game directory (you can copy this file into the directory of choice).
Patches
Note that the patch format is unstable and prone to change until Lovely is out of early development.
Patch files define where and how code injection occurs within the game process. A good (complex) example of this can be found in the Steamodded repo here.
[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 # Optional, when omitted all instances of the pattern will be replaced. Otherwise the first <times> instances will be replaced.
# 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 = "(?<indent>[\t ]*)if (?<cond>_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",
]
payload = "-- I'm extra code that isn't worth an extra file"
# 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"
TL;DR - Patch variants
- Use
patternpatches to surgically embed code at specific locations within the target. Supports*(matches 0 or more occurrences of any character) and?(matches exactly one occurrence of any character) wildcards. - Use
regexpatches only when the pattern patch does not fulfill your needs. This is basically the pattern patch but with a backing regex query engine, capture groups and all. - Use
copypatches when you need to copy a large amount of position-independent code into the target. - Use
modulepatches to inject a lua module into the game's runtime. Note that this currently only supports single file modules, but this should be changing soon.
Patch files
Patch files are loaded from mod directories inside of the mod folder (MOD_DIR). Lovely will load any patch files present within MOD_DIR/ModName/lovely/ or load a single patch from MOD_DIR/ModName/lovely.toml. If multiple patches are loaded they will be injected into the game in the order by order of their priority.
Paths defined within the patch are rooted by the mod's directory. For example, core/deck.lua resolves to MOD_DIR/ModName/core/deck.lua.
Patch targets
Each patch definition has one or more patch targets. These targets are typically the relative paths of source files when dumped from the game with a tool like 7zip. For example, one can target a top-level file like main.lua, or one in a subdirectory like engine/event.lua.
For certain games/libraries, files are loaded differently. Targets (or more specifically buffer names) can be arbitrarily anything.
Lovely itself uses the format of =[lovely <patchname> "<relative path to mod>"] for buffers loaded via module patch.
Patch debugging
Lovely dumps patched lua source files to MOD_DIR/lovely/dump. Logs are likewise written to MOD_DIR/lovely/log.
Not yet implemented
manifest.version
CHANGELOG
v0.10.0
The lovely Windows binary has been renamed to winmm.dll!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Install guide
| OS | Download |
|---|---|
| Windows | lovely-x86_64-pc-windows-msvc.zip |
| Mac (Arm) | lovely-aarch64-apple-darwin.tar.gz |
| Mac (x86) | lovely-x86_64-apple-darwin.tar.gz |
| Linux | lovely-x86_64-unknown-linux-gnu.tar.gz |
What's Changed
- Improvements to readme by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/343
- nix flake: upgrade rustc to fix experimental feature compile error by @kasimeka in https://github.com/ethangreen-dev/lovely-injector/pull/349
- Use
$HOMEinstead of/home/$USERinrun_lovely_linux.shby @Ecorous in https://github.com/ethangreen-dev/lovely-injector/pull/351 - small clarification in readme by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/359
- readme: say patches can have multiple targets by @kasimeka in https://github.com/ethangreen-dev/lovely-injector/pull/370
- fix: game dump using wrong buffer by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/355
- replace chrono with jiff by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/379
- winmm.dll by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/378
- fix: use canonical paths by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/385
- ci: fix mac builds by using native macos-latest runner by @S1M0N38 in https://github.com/ethangreen-dev/lovely-injector/pull/364
New Contributors
- @Ecorous made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/351
- @S1M0N38 made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/364
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.9.0...v0.10.0
v0.9.0
Hello! Just wanted to take this moment to thank everyone in this amazing community for their ingenuity and creativity and wonderful drive. It's really rare for a game to persist for as long as Balatro and I'm so proud that I have been able to be a part of it for the past (almost) two years.
I can't even begin to explain how thankful I am to have the incredible @WilsontheWolf and @cg-223. They have taken care of so much work between now and v0.8.0 and I am so lucky to have them as maintainers. They deserve so much appreciation for keeping up the pressure and making this release happen.
And remember to thank the hardworking people that make the mods, they keep this community alive.
You are obligated to try these mods out: (and legally obligated to try out every mod you see elsewhere, too)
Entropy, Tangents, Matador, LobotomyCorp, Amulet, Hatchet, Gros Balatro, Stocking Stuffer, MrBones, Insignia, MyDreamJournal, Balatro Plus, Arrow, TooManyJokers, Multiverse, 45DegreeRotatedBeatblock, Basslatro, Joyous Spring, Incognito, Galdur, Hyperfixation, Hot Potato, UltraViolet, Qualatro, Corrupted Nether, Fusion Jokers, Fortlatro, 1 in 10000 Chance for Withered Foxy Jumpscare Every Second, BeatblockPlus, Beattools, Scruffy Plays Pikmen, Lovely Mobile Maker Revo's Vault Dilatro
Install guide
| OS | Download |
|---|---|
| Windows | lovely-x86_64-pc-windows-msvc.zip |
| Mac (Arm) | lovely-aarch64-apple-darwin.tar.gz |
| Mac (x86) | lovely-x86_64-apple-darwin.tar.gz |
| Linux | lovely-x86_64-unknown-linux-gnu.tar.gz |
Mobile Mods!!!!
@WilsontheWolf has created https://lmm.shorty.systems, it lets you mod Balatro on mobile with lovely by porting the Steam version of the game. Try it out.
[!IMPORTANT] BREAKING CHANGES:
- Module patches with
load_now = truethat fail to load or execute now properly propagate errors instead of failing silently.- On Linux native, the mod directory has changed from
~/.config/<game>/Modsto~/.local/share/<game>/Modsto follow XDG standards. You'll need to move your mods to the new location.
Contributors
Big thanks to the following contributors:
- @cg223 for multiple targets support, copy patch payloads, nested folder loading, and runtime API additions
- @WilsontheWolf for the runtime API (
reload_patches, variable store),load_nowerror handling, Linux directory fix, andluaL_loadbufferhook, and lots more - @kasimeka for fixing the
--vanillasegfault on Unix and adding Nix support - @SpomJ for improving Linux installation documentation
- @hliuson for release workflow improvements
Notable Changes
[!IMPORTANT] Most mods WILL NOT WORK AS ZIPS until modloaders have added support. NO EXCEPTIONS!
Zip mods
TL;DR: Mods can now be distributed as zip files.
Lovely can now load mods packaged as zips. Packaging is simple, just drop your mod files into the archive into either the top-level or into a folder, both are valid.
mod.zip
lovely.toml
...
works the same as
mod.zip
mod/
lovely.toml
...
Recursive patch loading
TL;DR: Patch files are loaded recursively, clean your lovely dirs.
Patch files inside the lovely/ directory are loaded recursively from subdirectories.
For example:
tangents/
lovely/
questionable_feature.toml
features/
real_feature.toml
content.toml
tweaks/
balanced.toml
Multiple targets per patch
TL;DR: Pattern, regex, and copy patches can target multiple files.
Patch away with reckless abandon:
[[patch]]
[patch.pattern]
target = ["main.lua", "game.lua", "init.lua"]
pattern = "old_code"
payload = "new_code"
Copy patch payloads
TL;DR: Copy patch payload field
Copy patches now have an optional payload field that lets you inject code without the fuss of a separate file:
[[patch]]
[patch.copy]
target = "main.lua"
position = "append"
payload = """
-- Inline code here
print("Injected!")
"""
Runtime API additions
TL;DR: New Lua APIs for runtime patch manipulation.
The lovely module now exposes several new functions for runtime control:
lovely.reload_patches()- Reload all patches from disk without restarting. This does not reapply patches, you need a restart for that.lovely.apply_patches(buffer_name, buffer_content)- Apply patches to arbitrary buffers at runtime. You can patch shaders with this! And whatever you want, really.lovely.set_var(key, value)- Store a var in the store.lovely.get_var(key)- Retrieve a var from the store.lovely.remove_var(key)- Remove and return a var from the store.
Example usage:
-- Store configuration
lovely.set_var("is_tangents_questionable", "true")
-- Retrieve it later
if lovely.get_var("is_tangents_questionable") == "true" then
panic!("What?")
end
-- Apply patches to a dynamically loaded buffer
local patched = lovely.apply_patches("buffer_name", buffer)
-- Force a patch reload (not a restart)
lovely.reload_patches()
Module patches now apply Lovely patches
TL;DR: You can patch injected modules.
Injected modules can now be patch targets! =[lovely modname "filename"]
Bug Fixes
- Fixed hardcoded game names in Linux launch scripts (
run_lovely_linux.sh) - Fixed segfault when running with
--vanillaflag on Unix - Fixed double-panic behavior on Windows
- Fixed panic when obtaining extension from extensionless files
- Fixed incorrect mod directory on Linux (#325)
What's Changed
- v0.8.0 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/250
- Update release.yml by @hliuson in https://github.com/ethangreen-dev/lovely-injector/pull/265
- fix(unix): prevent segfault when run with
--vanillaby @kasimeka in https://github.com/ethangreen-dev/lovely-injector/pull/263 - feat: add nix package and devshell by @kasimeka in https://github.com/ethangreen-dev/lovely-injector/pull/278
- feat: check preload for if lovely was loaded by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/283
- Runtime: Implement native Lua modules v2 by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/285
- feat: reload on lovely module by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/286
- Allow patching lovely modules by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/293
- Add name fields to patches by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/298
- Support nested folders inside Mods/foo/lovely by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/290
- Add Lua-sided apply_patches function by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/300
- feat: lua variable store by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/299
- Allow multiple targets on a patch by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/297
- feat: win hook luaL_loadbuffer by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/305
- feat: lua table helper by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/306
- feat: log path in lua module by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/303
- Check needs_patching before calling apply_patches from Lua by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/310
- feat: only do dwmapi check on windows by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/308
- feat: patch table load is a result by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/307
- Add optional payload field to copy patches by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/318
- Fix double-panic behavior on windows by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/321
- feat: blacklist by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/319
- Add context to error occurring with lovely being mistakenly run by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/322
- Add generic lovely target for C code (liblovely) by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/206
- resolve some clippy warnings by @cg-223 in https://github.com/ethangreen-dev/lovely-injector/pull/324
- fix: wrong dir on linux by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/325
- Add pattern and regex patch benches via criterion + gh action by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/323
- Add linux-native installation instructions by @sqrvrt in https://github.com/ethangreen-dev/lovely-injector/pull/225
- fix: hard coded balatro in
run_lovely_linux.shby @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/338 - add extended dump debug info via json sidecar files by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/339
- Add support for zip mods by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/330
- v0.9.0 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/340
New Contributors
- @hliuson made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/265
- @cg-223 made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/298
- @sqrvrt made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/225
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.8.0...v0.9.0
v0.7.1
What's Changed
- fix: sort patches initially by order, then by prio by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/123
- fix: revert build toolchain to 1.77.2 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/124
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.7.0...v0.7.1
v0.7.0
Contributors
A huge thanks goes out to the following contributors:
- @flakywanderer for improving log messages with patch metadata.
- @WilsontheWolf for fixing the logging of panics on Unix targets.
- @drgrib for improving the Steam Deck install guide.
- @vgskye for completing much of the work on the Lovely Linux target.
- @asquared31415 for updating the Linux PR.
- @Rick1029 for writing a guide on running Lovely and Love2D games natively on Linux.
Notable Changes
#103 Expanded patch targets
TL;DR: You can specify more patch targets.
Patches can now target other mods and even love2d itself. Since non-Balatro buffer names can be complex you should use --dump-all and the corresponding .txt file in dump/ to determine the name of your target.
[!IMPORTANT] Patching other mods can cause problems if done incorrectly - problems that can be impossible to debug even with a complete dump. Be careful with this tool, communicate your intent with other devs as needed, document what you've done, and remember to have fun!
#114 Strict patch application ordering
TL;DR: Pattern and regex order inconsistencies have been fixed.
Lovely patches have a strict order in which they are applied: module → copy → pattern → regex, however this was not the case in v0.6.0. This version (and all the ones preceding it) merged the pattern and regex patches together such that they were applied in the same step in the order that they were defined within the patch file. This has been resolved by separating and applying these patches sequentially.
#103 Improved debugging via --dump-all
TL;DR: Use
--dump-allto dump everything.
Every encountered buffer can be dumped, not just the ones that have been patched. Alongside each is a text file which contains the internal name of the buffer - use this name in the target field of patches.
#121 Hacky patch directory interpolation
TL;DR: Use
{{lovely_hack::patch_dir}}in your payloads to access the patch's mod directory.
This variable will be replaced with the parent directory of the patch (either ../lovely.toml or ../../lovely/patch.toml, for example. It's a hacky and temporary solution that WILL be replaced at some point in the future, but it'll work fine for now.
#66 + #102 Linux support
TL;DR: Native Linux support but you must build it yourself (for now).
Follow the guide written by @Rick1029: https://github.com/Rick1029/lovely-injector/
What's Changed
- Include patch file origin paths in patch logging messages by @flakywanderer in https://github.com/ethangreen-dev/lovely-injector/pull/89
- feat: add {{lovely:mod_dir}} interpolation by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/95
- fix: replace flawed tolstring impl with tostring lua call by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/96
- updated version of #66 by @asquared31415 in https://github.com/ethangreen-dev/lovely-injector/pull/102
- Add extended patch target support by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/103
- Add a proper window title, fix --disable-mods arg (Windows) by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/104
- feat: log panics in unix by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/112
- Add strict patch file ordering to fix edge-case panics on Unix platforms by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/113
- Add strict patch application order to pattern and regex patches by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/114
- Update README.md path for Steam Deck by @drgrib in https://github.com/ethangreen-dev/lovely-injector/pull/93
- Fix bad file ordering on Windows + Unix by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/117
- chore: bump crate versions to 0.7.0 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/119
- fix: bad workflow caused by lovely-mac name change by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/120
- fix: change patch dir interp to be backwards compat by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/121
New Contributors
- @asquared31415 made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/102
- @drgrib made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/93
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.6.0...v0.7.0
v0.6.0
What's Changed
- Implement shared "Lovely runtime" to reduce code duplication across win and mac targets by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/6
- Complex Regex patching and patch optimization via ropey by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/7
- Cleanup previously dumped buffers at startup, remove @ prefix from file names by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/11
- Add check and panic message when old
dwmapi.dllbinary is found within the game directory by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/12 - Add
--disable-consoleargument by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/13 - Fix bad pattern text insert due to Rope byte API use mixup by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/14
- Increment version to 0.5.0-beta2 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/15
- Fix build failure caused by libudis86-sys and retour on Linux native hosts by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/16
- Fix hard crash when printing nil value, change mod path for mac systems by @tetraminus in https://github.com/ethangreen-dev/lovely-injector/pull/18
- Improved toml errors by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/22
- Implement log file writing and apply general logging improvements by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/25
- Fix #20 and #24 by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/28
- Update README with Mac install guide, various other adjustments to content + formatting by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/29
- Implement Github Action release workflow by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/31
- Fix invalid archive file type in README install guide by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/33
- make v0.5.0-beta3 release, ga fix for master branch trigger by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/34
- fix ga workflow trigger by removing branch check by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/35
- Clarify Steam Deck / Proton / Wine install instructions by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/36
- feat: unhardcoded game directory by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/27
- Implement mod disable / enable via .lovelyignore files by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/37
- Remove erroneous dbg! statement sadge by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/30
- Revert pattern patch
overwritedeprecation warning by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/39 - Update core version to v0.5.0-beta4 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/40
- Mac: use the name of the enclosing .app for the mod directory by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/41
- update core version to v0.5.0-beta4 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/42
- Improve install instructions, again by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/43
- Fix incorrect delta calculation by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/45
- Pass through args to run_lovely.sh by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/46
- Fix bad windows download link in release workflow by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/49
- Update to v0.5.0-beta6 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/50
- Refactor, resolve some issues by @english5040 in https://github.com/ethangreen-dev/lovely-injector/pull/51
- Fix unconditional removal of last byte #53 by @dadahsueh in https://github.com/ethangreen-dev/lovely-injector/pull/54
- Update to v0.5.0-beta7 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/56
- fix: build failure caused by isize, itertools deps by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/57
- Implement better patches by @flakywanderer in https://github.com/ethangreen-dev/lovely-injector/pull/68
- Allow patching games running on LOVE2D 12, or otherwise using luaL_loadbufferx by @tetraminus in https://github.com/ethangreen-dev/lovely-injector/pull/70
- Load modules lazily through package.preload by @flakywanderer in https://github.com/ethangreen-dev/lovely-injector/pull/74
- Add MIT license by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/75
- fix: module source names by @WilsontheWolf in https://github.com/ethangreen-dev/lovely-injector/pull/76
- Fix edgecase panic caused by chunk names containing bad utf8 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/78
- Fix reverse output of Lua log messages by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/80
- Update to v0.6.0 by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/87
New Contributors
- @WilsontheWolf made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/22
- @english5040 made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/28
- @dadahsueh made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/54
- @flakywanderer made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/68
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.4.0...v0.6.0
v0.4.0
What's Changed
-
Add mac support by @tetraminus in https://github.com/ethangreen-dev/lovely-injector/pull/2 Not yet released - requires more testing and implementation work. This is however an important first step.
-
Change DLL proxy to
version.dllby @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/3 This fix is required to ensure lovely is loaded by the upcoming Balatro release, which includes a newer build of Love2D. -
Fix panic caused by invalid utf8 log msg in Lua print hook by @ethangreen-dev in https://github.com/ethangreen-dev/lovely-injector/pull/4 Fixes an edge-case panic caused by lossless UTF-8 conversion of log messages across Lua FFI within
sys::override_print.
New Contributors
- @tetraminus made their first contribution in https://github.com/ethangreen-dev/lovely-injector/pull/2
Full Changelog: https://github.com/ethangreen-dev/lovely-injector/compare/v0.3.1...v0.4.0
v0.3.1
-
[9f1c346] Implement native
printoverride This fixes missed output from Luaprintcalls -
[436fcc7] Implement lua module injection. This allows modules to be injected and
require-ed. Initially implemented for nativefs. -
[436fcc7] Add Lovely metadata injection. This makes it possible for a Lua caller to query information about the Lovely environment.
-
[7ceeace] Add
LOVELY_INTEGRITYglobal const to patched source files. This has been implemented to enable runtime integrity checking for Ankh. -
[ffeb76f] Fix missing target name check in
PatternPatch.