-
-
Notifications
You must be signed in to change notification settings - Fork 120
1.28.0: .NET 9 and Miscellaneous Improvements
Upgraded to .NET 9
Reloaded-II now ships with .NET 9 (currently RC2) as its runtime; given that no major issues have been reported thus far. This should give modders access to new APIs as well as performance improvements.
Improved: Running protontricks with certain Flatpak installs.
Many people running Protontricks via Flatpak rely on setting an alias to protontricks-launch via ~/.bashrc. In fact, the install guide recommends this.
However, the .desktop shortcuts generated by the installer previously did not account for this.
Exec=protontricks-launch --appid 3847140856 "/home/sewer/Desktop/Reloaded-II - Sonic Heroes/Reloaded-II.exe"
Because the command was not ran in a shell, ~/.bashrc was not being sourced; so the alias would not work for Flatpak users. Installs from the updated installer now create a shortcut that uses bash to invoke the command:
Exec=bash -ic 'protontricks-launch --appid 3847140856 "/home/sewer/Desktop/Reloaded-II - Sonic Heroes/Reloaded-II.exe"'
This should cause ~/.bashrc to be sourced; and hopefully the alias to work.
Note: Normally running a specific shell is not the best practice, however the whole installer itself is a hack and bash is ubiquitous enough that I can't name a distro that doesn't ship it out of the box.
Improved: Flickering on xwayland
Client side decorations (window glow) has been disabled by default on Linux; this reduces the amount of flicker encountered when running the application via Wine on Xwayland.
It also helps maximize screen real estate, the invisible border should no longer look 'weird' in tiling window managers.
Fixed: Auto Update Working Directory
Previously if you moved a game, you would need to move both the EXE Path and Working Directory in the Edit Application menu. This caused a lot of issues as users would not notice, and then get non-bootable games.
In this update, I've made the Working Directory adjust alongside the EXE Path. This preserves the relative path, in other words, if your working directory is 2 folders up, then the new working directory will also be 2 folders up.
All reactions
Replies: 17 comments 3 replies
It seems like updating within the client fails 100% of the time, NET 9 installed or not. Did something happened between testing and deployment?
All reactions
Not to my awareness, an update error that's not related to failure to install runtime is highly unusual.
I'm guessing the error is in the inner, AggregateException
All reactions
1.28.4: Miscellaneous Bug Fixes
- @dreamsyntax added a confirmation dialog for mod deletes
- @dreamsyntax sanitized the Application name when creating a shortcut, which should fix making shortcuts for Metaphor.
- And just in case I (Sewer) sanitized the path for Proton shortcuts.
- If the installer fails to create a shortcut on Linux, it will hint to the user that their
protontrickspermissions may be incorrect.
All reactions
1.28.5: More Miscellaneous Bug Fixes
- @dreamsyntax added a fallback to
C:/Reloadedif the user uses OneDrive for their desktop. - @dreamsyntax updated the code to download Visual C++ 2022 instead of 2019, if missing.
- I (Sewer) extended the fallback to
C:/Reloadedto also apply if the user has non-ASCII characters as that causes problems with some games. - Fixed an accidental breaking change from yesterday that caused Proton shortcuts to not be correctly placed.
All reactions
1.28.6: Path/Location Warnings & Minor Theme Adjustment
- @dreamsyntax added warnings for when Reloaded and/or the
Modsfolder are placed in OneDrive, or are placed in a special path.
OneDrive you want to avoid for performance reasons.
Special paths you want to avoid because some games don't support them well. Some games may fail to load custom assets out of the mod folders; Reloaded now warns about this indiscriminately.
Same as above. Sometimes people download old games through 'mysterious ways', place them in a special location and try to mod them before trying even an unmodded game. This way they'll hopefully know that the path may be a problem.
Before:
After:
In the interest of accessibility, and people using monitors with interesting contrast ratios; the following adjustment above was made.
The Reloaded theme was originally made on a cheap TN panel; however for some IPS displays and beyond, this change makes a lot of sense.
All reactions
1.28.7: Fix Crash on Load Ordering with Keyboard/Controller
Moving a mod that was already at the end of the list further down (out of bounds) led to a crash.
This was somehow overlooked by everyone for years; it's fixed now.
All reactions
1.28.8: A set of Bug fixes from @RyoTune
A fix for drag/drop:
- Fixed: Drag and Drop now works everywhere on the main window for installing mods.
And various improvements to the Edit Mod dialog:
- Fixed:
unknown apps(games not added to Reloaded) being removed after a mod is edited via the GUI. - Added: Mods can now add support for
unknown apps(games not added to Reloaded) via the UI. - Fixed: The view filter (search) in the
Edit Moddialog is reset on switching pages. - Added: You can now see the
AppIdof enabled games in theEdit Moddialog.
And lastly, the default NuGet feed has been updated to https://packages.sewer56.moe/v3/index.json,
in both the documentation and program.
All reactions
1.29.0: Minor Functionality / Maintenance Update
This release consists of community contributions; cleaned up and merged into the main project.
User Friendly Enums by @RyoTune
Thanks to @RyoTune it is now possible to give 'enums' user friendly named in mod configs;
before you had:
public enum SampleEnum { NoOpinion, Sucks, IsMediocre, IsOk, IsCool, ILoveIt, }
Which produced
With the new addition, it's now possible to add user friendly names to each configuration item:
public enum SampleEnum { [Display(Name = "No Opinion 🤷")] NoOpinion, [Display(Name = "It's Sucks! 👎")] Sucks, [Display(Name = "It's mediocre 😐")] IsMediocre, [Display(Name = "It's okay! 👍")] IsOk, [Display(Name = "It's cool! 😎")] IsCool, [Display(Name = "I Love It!!! ❤️🔥")] ILoveIt, }
Explicit Item Ordering by @RyoTune
[Display(Order = 0)] public int OrderFirst { get; set; } [Display(Order = 1)] public int OrderSecond { get; set; } [Display(Order = 2)] public int OrderThird { get; set; }
Lower order means items come first.
Do note that this is inverted from the original PR; so if you originally wrote your mod against Reloaded II.5 ReMIX fork, it may be the opposite to what you expected.
Launcher Error Reporting by @TheBestAstroNOT + @Sewer56
Launcher errors now give you the option to print the error details to a text file.
Hopefully this is a bit friendlier for end users 🤞.
Improved Missing Loader Error by @TheBestAstroNOT + @Sewer56
Sometimes users do the following:
- Use the
Deploy ASI Loaderfeature in Reloaded, and then uninstall Reloaded. - Use the
Deploy ASI Loaderfeature and then move the Reloaded folder.
The error message for missing Mod Loader DLL was updated to account for these situations.
The user is now explicitly let known how to resolve the error.
All reactions
1.29.1: Emergency .NET 9.0.5 Rollback
Microsoft rolled out .NET 9.0.5 with a change that causes crashes in all games when used with Reloaded-II.
I've made the following changes to address this:
- Enforced .NET 9.0.4: Mod loader now requires .NET 9.0.4 and prevents booting with 9.0.5
- Launcher still allows 9.0.5, but will prompt 9.0.4 installation for Mod Loader if needed.
- Improved Dependency Installation: Automatically downloads and installs exact dependency versions
- Enhanced Progress Feedback: Detailed progress during dependency installation
- Automatic Runtime Installation: Fully automatic runtime installation in launcher
Note: The crashes appear to be related to garbage collector changes in .NET 9.0.5, though specific details are still being investigated.
Bug Fixes by @RyoTune
- Fixed Config Reset Crashes: Fixed crashes when resetting configurations with different integer types (byte, short vs int)
- Fixed Mod Template ConfigContext: Mod templates now properly set ConfigContext with IApplicationConfig
- This allows mods to have per-application (per-game) configurations.
French Localization by @dysfunctionalriot
Complete French translation added! 🇫🇷 All text up to version 1.29.0 has been translated.
All reactions
Trying to update through the Reloaded 2 64 bit client continuously fails
All reactions
-
👍 1
Details
Exception: One or more errors occurred. (Object reference not set to an instance of an object.) Stacktrace: at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at Reloaded.Mod.Launcher.Lib.Models.ViewModel.Dialog.ModLoaderUpdateDialogViewModel.<>c__DisplayClass28_0.b__1() at Reloaded.Mod.Launcher.Lib.Utility.ActionWrappers.<>c__DisplayClass2_0.b__0(Object _) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg) at System.Windows.Threading.DispatcherSynchronizationContext.Send(SendOrPostCallback d, Object state) at Reloaded.Mod.Launcher.Lib.Utility.ActionWrappers.ExecuteWithApplicationDispatcher(Action action) at Reloaded.Mod.Launcher.Lib.Models.ViewModel.Dialog.ModLoaderUpdateDialogViewModel.OnApplySelfUpdate(String newUpdateDir) at Sewer56.Update.UpdateManager`1.StartUpdateAsync(NuGetVersion version, OutOfProcessOptions outOfProcessOptions, UpdateOptions updateOptions) at Reloaded.Mod.Launcher.Lib.Models.ViewModel.Dialog.ModLoaderUpdateDialogViewModel.Update() at Reloaded.Mod.Launcher.Pages.Dialogs.ModLoaderUpdateDialog.UpdateClick(Object sender, RoutedEventArgs e) at System.Threading.Tasks.Task.<>c.b__128_0(Object state) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Window.ShowHelper(Object booleanBox) at System.Windows.Window.Show() at System.Windows.Window.ShowDialog() at Reloaded.Mod.Launcher.LibraryBindings.ShowDialogAndGetResult(Window window) at Reloaded.Mod.Launcher.LibraryBindings.ShowModLoaderUpdate(ModLoaderUpdateDialogViewModel viewmodel) at Reloaded.Mod.Launcher.Lib.Update.<>c__DisplayClass5_0.b__0(Object _) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)All reactions
Here's the workaround: #598 (comment)
All reactions
I do want to mention that 1.29.1 fixed crashes on boot in Persona 5 Royal with mods like https://gamebanana.com/mods/410862 . Didn't realize that was the cause along with the random crashes I was experiencing.
Cheers!
All reactions
1.29.2: Miscellaneous Things
Just a few low effort fixes and miscellany. As usual, Reloaded-II is on life support while I spend
the next years building the next best thing - if you want features, please contribute!
Fix: Better Error Handling for Bad Update Files
Previously, if someone uploaded a corrupted Sewer56.Update.Metadata.json file to GameBanana or GitHub,
Reloaded would crash. Now it handles these errors gracefully instead of crashing.
Might add UI in future.
Fix: Unnecessary Runtime Downloads
Fixed an issue where the dependency installer was requesting unnecessary .NET runtime downloads.
The problem was that the installer wasn't filtering out the Mods folder, so it tried to install
runtimes that mods were built with, even though all mods use the loader's runtime.
Now it only installs truly needed dependencies.
[This happened because in the last release the in-launcher dependency installer was updated to use
the same code as Setup.exe; and this was a small oversight in the migration.]
Updated French Localization by @dysfunctionalriot
🇫🇷 Updated translations for version 1.29.1.
All reactions
1.29.3: More Miscellaneous Improvements
Allow .NET 9 Versions >= 9.0.8 for loader.
No update to .NET 10 as of current; but am allowing 9.0.8 or greater for loader now.
According to 3rd party reports I got thus far, Proton needs updating to receive some upstream fixes from Wine for .NET 10, which may take a while to reach downstream.
We wait for Proton 11, I suppose.
Added Progress Bar for Mod Installation by @TheBestAstroNOT
If a mod takes longer than 3 seconds to install via Drag & Drop, a simple progress bar will display on the screen now.
In practice you should only see this if you install large mods (think >500MB); on a typical CPU.
Save Mod Config on Publish, Including IncludeFiles and ExcludeFiles by @TheBestAstroNOT , @Sewer56
When you Publish a mod you have an option to exclude certain files from the released project via File Inclusions & Exclusions.
By default, that is all .json files except .deps.json and .runtimeconfig.json ones.
Previously, changes on this menu didn't save; as barely anyone ever changed the defaults.
Now they do.
Reorder ASI Loader DLL Detection Order by @dreamsyntax
The order of which DLL name gets selected for Ultimate ASI Loader was changed.
Now matches using order defined in our code, rather than the order in PE Header.
With that in mind, items were rearranged to be as least intrusive as possible.
For instance, ASI Loader as dinput8.dll has caused issues in the past in limited scenarios; e.g. when using C# library with SharpDX to read inputs via dinput.
Disabled CET
.NET 9 added a security feature (on by default) which is incompatible with older unsupported versions of Windows.
Namely Windows 10 22H2 and older.
Given that Reloaded-II is already unsafe by design (injects arbitrary code), and it's usually not used for multiplayer, there is no good reason for CET to be enforced.
Rather, it should be the game's responsibility to opt in. Generally, if possible, if the base game runs on the PC, the modded game should too, out of the box.
Misc
- Update Dependencies (@dreamsyntax)
All reactions
1.29.4: Misc Linux Installer Improvements
Small improvements to install on Linux:
- Ensure 'Applications' directory exists so creating shortcut doesn't fail during install on some systems.
- Create
Software\Winekey in registry if doesn't exist. May fix odd cases where people's 'show dot files' settings don't enable by default.
Updated French Localization by @dysfunctionalriot
🇫🇷 Updated translations for version 1.29.1.
All reactions
1.30.0: Sliders and Supported Games
Added TickFrequencyDouble to SliderControlParamsAttribute
The TickFrequency property on SliderControlParamsAttribute was previously an int, which prevented
using non-integer tick frequencies for sliders (e.g., 0.5).
A new TickFrequencyDouble property has been added. When set, it takes precedence over the old TickFrequency property.
// Old way (integer only, now obsolete) [SliderControlParams(minimum: 0, maximum: 1, tickFrequency: 1)] // New way (supports non-integer values) [SliderControlParams(minimum: 0, maximum: 1, TickFrequencyDouble = 0.1)]
Alongside the addition of textFieldFormat from @monkeyman192 which (somehow) sat unreleased for 2 years, due to missing Reloaded.Mod.Interfaces release, you can now have sliders with nice fractions in configs, without crazy behaviour.
A real example where this could be useful could look like this:
imageMaking the HUD arbitrarily wide on widescreen displays.
The old TickFrequency property has been marked as [Obsolete] but remains functional for backwards compatibility.
Warn When Installing Mods Without Supported Games
When installing mods via drag-and-drop, download, or the r2: protocol, Reloaded-II now checks if the mod
has any supported applications configured. If none are found, a dialog will prompt you to select which
game(s) the mod should be enabled for.
- Selecting Yes opens the mod edit dialog to configure supported applications
- Selecting No keeps the mod installed without changes (you can configure it later)
This helps prevent the occasional issue where a mod author forgot to mark a mod as compatible with any game.
Without an associated game, the mod wouldn't appear in any game's mod list, which could have left users confused.
Fixes #751.
Contributed by @TheBestAstroNOT (thanks!) , with extra quick cleanup done before merging.
All reactions
1.30.1: Fixes for French Text and Publishing
Fix ModConfig.json Regex Inclusion Duplicate Check by @Nenkai
ModConfig.json is required for all mods, but .json files are otherwise excluded when packaging. Reloaded-II ensures it's included by checking your "Include Regexes" list.
The duplicate check was broken, causing ModConfig\.json to appear twice in the list if you already had it configured.
This happened because the check used a StringWrapper type that didn't implement Equals, so it compared object references instead of the actual string values.
Add French Strings for "Yes/No" Dialog by @dysfunctionalriot
Adds French localization strings for the mod compatibility warning dialog buttons introduced in 1.30.0.
All reactions
1.30.2: Cloud Storage & Wine Improvements
Fix Broken File Detection in OneDrive Folders
The directory scanner (file search) skipped symlinks for 'offline' (non-local) files.
The file is offline. The data of the file is not immediately available.
FileAttributes.Offline
A younger me, half a decade ago misunderstood this to mean as
'this file cannot be accessed' or 'on a server, but you're offline'.
This was not correct- what it rather means is, if you try to read the data; it will
fetch it from the cloud rather than local storage. This means that if a file is
on cloud, but not on local storage; we would not recognise it.
Opst34 reported a mod that
could not be configured due to the OneDrive sync feature.
Over the years, this may also have caused the infamous endless update loop some
users saw inside OneDrive.
The scanner no longer ignores these files. Just in case, infinite recursion is also handled,
by a hard recursion-depth cap (256). So if you got cyclic symlinks like
C:\Reloaded-II\Mods\Loop\Loop\Loop\..., it will stop after 256 iterations rather
than hanging.
Detection of cloud storage also updated; since users who have installed Windows
without OneDrive enabled, and then opted into it later would not be caught. This
however wasn't well tested; but should not cause regression in worse case.
Only Write steamappid.txt File When Correct ID Is Obtained by @datasone0
Reloaded previously wrote the steamappid.txt file unconditionally, even when the
obtained ID was invalid or defaulted. It now only writes the file when a correct
Steam AppID is retrieved, avoiding incorrect overrides.
All reactions
Just a tiny maintenance update that took around ~12h of work over the weekend.
My health hasn't been the best lately- because I haven't been taking good care of myself.
So this is all I can give for now in some spare time.
1.30.3: Startup Freeze Fix, Network Hammering Fix & Steam DRM Docs
Fix Launcher Freezing on Startup by @drewmcelhany
Some users reported the launcher hanging on startup; never quite making it to
the main window.
The cause was the mod update check. After updates were found, but before
showing the update dialog, the launcher fetched extra details for each one;
asking the download source for the file size, and pulling the changelog text.
It did this on the thread responsible for drawing the UI. A slow network or
unresponsive download source froze the whole launcher.
The fetch now happens in the background; the dialog only opens once the
data is ready.
Also hardened the surrounding code while at it:
- Don't crash when the update list is somehow empty
- Don't crash when a download source can't report file sizes
- A failing changelog download no longer aborts the whole update check
- Background work no longer accidentally hops back onto the UI thread
Fixes #910.
(Note: The actual cause is my NuGet server being slow as of late; while gobbling
up gigabytes of RAM. I've been investigating why.)
Fix Server Slowdown / Self-Inflicted DDoS by @Sewer56
Found the cause of the slow server mentioned above.
It was me; to be more exact; a multitude of different issues all piling up:
- Launcher started full file downloads just to get their size
- Launcher didn't send a
User-Agentheader - Server wrote to the database on every download
- Server re-ran search queries that rarely change
- Server let clients request unbounded result sets
Launcher Downloading Files to Get Their Size
When checking for mod updates; the launcher needs the file size of each
available update.
To get it, the launcher sent a full GET request; which started downloading the file,
and then immediately threw it away. Every user, on every launch, for every
available update.
Multiply that by enough users at once; and we've basically DDoS'd ourselves.
Hence the slowdown, and the RAM gobbling.
Things got worse when I added HTTPS support via a Caddy reverse proxy late last
year; since abandoned downloads now kept a TLS connection open longer per
request.
The size check now issues a HEAD request; which gets the file size from headers
alone- no body download.
Launcher Not Sending a User-Agent
The launcher wasn't sending a User-Agent header on any of its HTTP requests.
It now does; so I can distinguish scrapers more easily.
The rest of the issues were server-side. The server itself
was also not built for the kind of traffic Reloaded gets; so I fixed that too.
Original BaGet was mostly for smaller deployments.
Batch Download Counts
Every package download ran a database write before returning the file.
These writes fought over the same database lock; queuing everything up.
Download counts (which BaGet doesn't even properly track in the first place) are
now buffered in memory and flushed every 5 seconds.
In local testing this pushed throughput from ~1,100 to ~4,700 req/s; and cut
worst-case latency from 640ms down to 37ms.
Cache Search and Autocomplete
Search and autocomplete hit the database fresh on every request.
These are now cached in memory.
In local testing this pushed throughput from ~1,470 to ~4,640 req/s; and cut
worst-case latency from 51ms down to 19ms. Results may be stale for up to 2
minutes; but package listings don't change often enough to notice.
Cap Search Page Size & Fix Total Hit Count
The search endpoint accepted any amount of user requested results; so a request
like take=100000 would pull a massive result set.
The page size is now capped at 1000; well above what any legitimate client uses.
Also fixed; the totalHits field was reporting the page size instead of the
actual total number of matching packages.
Document Steam DRM Debugging Issues by @Nenkai & @Sewer56
Games with Steam's Stub DRM may ignore breakpoints or crash when a debugger
attaches.
Reloaded already warned in the console when it detected the DRM's .bind
section; that warning now links to a new
Troubleshooting entry
with the workaround (unpack the exe with Steamless,
then point Reloaded at the unpacked executable).
The 'New Mod Project' docs also warn about this upfront; so mod authors don't
lose an afternoon wondering why their breakpoints are dead.
Improved Dependency Loop Error Message by @TheBestAstroNOT
The 'dependency loop' error shown when resolving mod dependencies now mentions
another common cause: hitting the download API rate limit. If you see it,
waiting an hour and trying again may just fix it.
Updated UltimateASILoader to v9.7.2
The bundled Ultimate ASI Loader used for ASI support has been updated to
v9.7.2; pulling in the upstream fixes and improvements since the last bump.