Skip to content

Navigation Menu

Sign in
Sign up

>= 1.28.0 Update Discussion Thread #473

Sewer56 started this conversation in General
Oct 17, 2024 · 17 comments · 3 replies
Discussion options

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.

You must be logged in to vote

Replies: 17 comments 3 replies

Comment options

It seems like updating within the client fails 100% of the time, NET 9 installed or not. Did something happened between testing and deployment?

image

You must be logged in to vote
1 reply
Comment options

Sewer56 Nov 20, 2024
Maintainer Author

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

Comment options

Sewer56
Nov 30, 2024
Maintainer Author

1.28.4: Miscellaneous Bug Fixes

You must be logged in to vote
0 replies
Comment options

Sewer56
Nov 30, 2024
Maintainer Author

1.28.5: More Miscellaneous Bug Fixes

You must be logged in to vote
0 replies
Comment options

Sewer56
Dec 12, 2024
Maintainer Author

1.28.6: Path/Location Warnings & Minor Theme Adjustment

image

image

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.

image

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:

image

After:

image

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
Feb 13, 2025
Maintainer Author

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
Mar 23, 2025
Maintainer Author

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 Mod dialog is reset on switching pages.
  • Added: You can now see the AppId of enabled games in the Edit Mod dialog.

And lastly, the default NuGet feed has been updated to https://packages.sewer56.moe/v3/index.json,
in both the documentation and program.

You must be logged in to vote
0 replies
Comment options

Sewer56
Apr 20, 2025
Maintainer Author

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

image

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,
}

image

Explicit Item Ordering by @RyoTune

image

[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

image

Launcher errors now give you the option to print the error details to a text file.

image

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 Loader feature in Reloaded, and then uninstall Reloaded.
  • Use the Deploy ASI Loader feature and then move the Reloaded folder.

image

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
May 30, 2025
Maintainer Author

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

image

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.

You must be logged in to vote
0 replies
Comment options

Trying to update through the Reloaded 2 64 bit client continuously fails

You must be logged in to vote
2 replies
Comment options

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)
Comment options

Sewer56 May 31, 2025
Maintainer Author

Here's the workaround: #598 (comment)

Comment options

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!

You must be logged in to vote
0 replies
Comment options

Sewer56
Jul 14, 2025
Maintainer Author

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
Nov 15, 2025
Maintainer Author

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

Image

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

You must be logged in to vote
0 replies
Comment options

Sewer56
Nov 27, 2025
Maintainer Author

1.29.4: Misc Linux Installer Improvements

Small improvements to install on Linux:

Updated French Localization by @dysfunctionalriot

🇫🇷 Updated translations for version 1.29.1.

You must be logged in to vote
0 replies
Comment options

Sewer56
Jan 25, 2026
Maintainer Author

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.

image

A real example where this could be useful could look like this:

image

Making 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.

image
  • 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.

image

Fixes #751.
Contributed by @TheBestAstroNOT (thanks!) , with extra quick cleanup done before merging.

You must be logged in to vote
0 replies
Comment options

Sewer56
Feb 1, 2026
Maintainer Author

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
Jun 14, 2026
Maintainer Author

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.

You must be logged in to vote
0 replies
Comment options

Sewer56
Jul 25, 2026
Maintainer Author

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-Agent header
  • 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.

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

AltStyle によって変換されたページ (->オリジナル) /