|
1 |
| -## Changelog (1.26.2) |
| 1 | +## Changelog (1.27.0) |
2 | 2 |
|
3 |
| -- Fixed: Automated Builds not including new language options. |
4 |
| -- Added: Logging mod install location in loader. |
5 |
| - - We're logging this so it's easier to detect the 'user installed source code, not the mod' scenario. |
| 3 | +[Read and Discuss in a Browser](https://github.com/Reloaded-Project/Reloaded-II/discussions/347). |
| 4 | +[Previous Changelog](https://github.com/Reloaded-Project/Reloaded-II/releases/tag/1.26.2). |
6 | 5 |
|
7 |
| -## Changelog (1.26.1) |
| 6 | +This is a longer 'Progress Report' kind of post. Consider reading in a browser. |
8 | 7 |
|
9 |
| -- Microsoft Store unprotecting no longer uses PowerShell. |
10 |
| - - We now use internal Windows COM interfaces. |
11 |
| - - Improves reliability where access to script running in PowerShell is restricted out of the box. (Admin setting, etc.) |
12 |
| - - This may more likely break with future Windows versions. |
13 |
| - - However updating the code be very easy (~10 mins) should it come to that. |
| 8 | +## Dependency Resolution Update |
14 | 9 |
|
15 |
| -- ASI Loader deployment now places `Reloaded.Mod.Bootstrapper.asi` in game folder, instead of `scripts` subfolder. |
16 |
| - - Makes uninstall easier for end users. |
| 10 | +This update is focused on more reliable resolution of missing dependencies, notably, reducing the amount of time that the following message is seen: |
17 | 11 |
|
18 |
| -- Changed: Persona 4 Golden (MS Store) now aliases to Persona 4 Golden (Steam). |
19 |
| - - The devs used a different EXE name, which resulted in a different `AppId`, despite being the same game. |
20 |
| - - This meant end users won't see downloaded mods easily. |
21 |
| - - So an alias directly inside the code was added. |
| 12 | + |
22 | 13 |
|
23 |
| -## Changelog (1.26.0) |
| 14 | +**A fix for end users:** |
| 15 | +- Launching Reloaded without Internet after a mod download will no longer render missing dependencies undownloadable. |
| 16 | + - We now ensure we don't remove unused dependency metadata if we're missing dependencies. |
| 17 | +- Fixed a very rare edge where it was technically possible the launcher incorrectly reports a missing dependency. |
| 18 | + - This would happen if a mod had multiple download locations (e.g. GameBanana+GitHub), but was removed from 1 location. |
24 | 19 |
|
25 |
| -1.26.0 is a small feature update, bringing small features and bugfixes intended to make Reloaded-II |
26 |
| -better work 'out of the box' for various different kinds of users. (i.e. Reliability) |
| 20 | +**A fix for mod authors:** |
| 21 | +- A launcher restart is no longer required to update mod dependency info. |
| 22 | + - This info is what's used to download missing dependencies. |
| 23 | + - *You can now safely add/edit a mod in launcher, set dependency, add some files and publish*. |
| 24 | + - Previously a launcher restart was required to ensure dependency info was embedded in your mod. |
| 25 | + - We now update the dependency data before publish, ensuring mod authors don't pack mod with missing dependencies. |
| 26 | + |
| 27 | +**An Automated Error Handler for Edge Cases:** |
| 28 | +- We now use the [Search Index](https://github.com/Reloaded-Project/Reloaded-II.Index) as a fallback, if all else fails. |
| 29 | + - The search index is what normally makes your mod searches in App super fast. |
| 30 | + - But it also knows the unique `ModId` of each uploaded mod. |
| 31 | + - So we can use this to find missing mods. |
| 32 | + - This currently works for 11 games that use Reloaded-II on GameBanana (I don't index any other sites currently). |
| 33 | + - Enabling this has some security implications. This is only used as a last resort fallback, when all else fails. |
27 | 34 |
|
28 |
| -Through most of its life, Reloaded-II has been a 'solo' project, so this update focuses on making R2 |
29 |
| -last just a little bit longer while I spend the next ~2 years working on Reloaded3. |
| 35 | +This should hopefully help in getting cases where users experience missing dependencies closer to 0. |
| 36 | +***Especially*** in situations where a dependency is hosted only in 1 location, e.g. `Only <This Mod Site>` |
30 | 37 |
|
31 |
| -Below is a small 'Progress Report'. |
32 |
| -Community contributions are always welcome, and as usual, thanks for using this software. |
| 38 | +## Updated Docs |
33 | 39 |
|
34 |
| -### Win32 Microsoft Store (i.e. GamePass) Games should now work 'Out of the Box' |
| 40 | +Documentation and in-launcher tutorial has been updated to feature installing via drag-and-drop as a method of installation. |
35 | 41 |
|
36 |
| -In short: They should be as simple to set up as games on other launchers. |
37 |
| -(If you're interested in the details, read on, otherwise skip.) |
| 42 | + |
38 | 43 |
|
39 |
| -For a very long time, GamePass games have been a pain to set up. |
| 44 | +(Hint: It's animated in the launcher) |
40 | 45 |
|
41 |
| -Due to Copy Protection (DRM) that Microsoft employs at the Operating System level, |
42 |
| -you're not allowed to read all of the game files, even if you 'own' the game. |
| 46 | +## Infrastructure Update |
43 | 47 |
|
44 |
| -This is problematic, because: |
45 |
| -- We can't inject code into game directly, as it needs to be started via `gamelaunchhelper.exe`. |
46 |
| - - So you can have working cloud saves, etc. |
47 |
| -- We can't install a shim (e.g. ASI Loader), because we can't read the EXE files. |
48 |
| - - They're encrypted on disk, and only decrypted when the game is ran. |
49 |
| - - So we can't figure out how to install a shim. |
| 48 | +The open [1st party package server](http://packages.sewer56.moe:5000/about) is an unsung hero ensuring your modding experience is as smooth as possible. This is the place where ***critical*** code mods are fetched from automatically when the primary source (like GitHub) hits its limits - a common scenario given GitHub's restrictions of 60 requests per hour per IP. |
50 | 49 |
|
51 |
| -Unfortunately, as a result, this meant that we just had to say 'figure it out yourself' for a while. |
52 |
| -As Reloaded-II has historically mostly been a solo effort, and I don't use Windows outside of debugging mods, |
53 |
| -I've never really had opportunities to investigate further. |
| 50 | +Given Reloaded's modular nature, you'll typically hit that limit restarting the launcher around 4 times. Now imagine you have a family, or are in a hotel room, or just troubleshooting, this limit may already be exhausted. Now you download a new mod, which requires some framework/critical component and suddenly you're told... |
54 | 51 |
|
55 |
| -That was until @Aemony gave me a hint by linking the [following post](https://github.com/ianpatt/sfse/issues/10#issuecomment-1732552638). |
| 52 | + |
56 | 53 |
|
57 |
| -So I bought GamePass from my own pocket, and started investigating. |
58 |
| -Turns out that if you spawn a process in the 'AppX' context of the game via [Invoke-CommandInDesktopPackage](https://learn.microsoft.com/en-us/powershell/module/appx/invoke-commandindesktoppackage?view=windowsserver2022-ps), |
59 |
| - or via `IDesktopAppxActivator` COM interface, you can read the normally encrypted files just fine. |
| 54 | +Not ideal. |
60 | 55 |
|
61 |
| -With that in mind, I've written some code to dump unencrypted game files, and then replace the originals |
62 |
| -with them, so Reloaded-II can work as expected. The process is multi step, and error prone to some |
63 |
| -degree, however all games on GamePass that are frequently used with Reloaded seem to work just fine for now. |
64 |
| -[Source Code](https://github.com/Reloaded-Project/Reloaded-II/blob/master/source/Reloaded.Mod.Launcher.Lib/Utility/TryUnprotectGamePassGame.cs). The code I wrote should work on Win10 21H2 and above, no guarantees for older |
65 |
| -Windows builds. |
| 56 | +With the surge of users, traffic on this server has risen drastically. In the past 20 days we have ***transferred 6TB of data***. Month started with approximately 5MB/s and is now 7.5MB/s. This is especially surprising, as the critical code mods stored here are typically under 0.5MB in size. |
66 | 57 |
|
67 |
| -An additional set of patches were made to ensure: |
68 |
| -- GamePass games survive 'Verify Game Files' functionality. |
69 |
| -- GamePass games survive updates (hopefully). |
70 |
| - - Note: GamePass games can change their *real* EXE location (not the fake one in your game folder) after an update. |
71 |
| - - If this happens Reloaded-II should still work now. |
| 58 | + |
72 | 59 |
|
73 |
| -When finding a GamePass game, Reloaded-II will now auto-unprotect it for you, and install ASI Loader. |
74 |
| -When you launch from the launcher, it'll boot `gamelaunchhelper.exe`, to ensure your cloud saves work, |
75 |
| -and the ASI Loader shim will handle loading Reloaded itself when the actual game boots. |
| 60 | + |
76 | 61 |
|
77 |
| -Things should hopefully work 'just fine', for now. |
| 62 | +I only found out a few days ago, as I was looking into why the server was unresponsive. Sometimes queries randomly took ~2-3 seconds to respond, and I was rather flabbergasted. |
78 | 63 |
|
79 |
| -PS. If you're unfortunate enough to have a Denuvo game on GamePass, your game start times should |
80 |
| -now be ~3 seconds faster on a typical PC. You're welcome. Unfortunately, this is just another |
81 |
| -case of how anti-piracy tech unfortunately always hurts the paying customer the most. |
| 64 | +The Package server runs on a *very minimal-effort* fork of [BaGet](https://github.com/loic-sharma/BaGet/), renamed as [BaGet-Reloaded](https://github.com/Sewer56/BaGet-ReloadedII) to avoid confusion with the original project. Using the Sqlite3 backend. |
82 | 65 |
|
83 |
| -### Mod Subfolders |
| 66 | +To the best of my knowledge, the delays in responses were caused by a combination of: |
| 67 | +- A lot of writes to the DB, which blocks reads in Sqlite out of the box. |
| 68 | + - Notably, BaGet increments the 'download count' every time a package is returned via search. |
| 69 | +- Sustained load on a shared CPU (a.k.a. 'vCPU'). [to a very, very small extent] |
84 | 70 |
|
85 |
| -(Originally contributed by @ItsKaa, thanks!) |
| 71 | +I changed the settings on Sqlite3 to use [WAL](https://www.sqlite.org/wal.html) and `synchronous=NORMAL`. This allows us to perform reads during writes, thus fixing up the performance. In addition, I bumped the server specs a bit, just in case the load continues to climb. Currently the server is completely responsive again. |
86 | 72 |
|
87 |
| -You can now store mods in subfolders of Mods folder. |
| 73 | +### A Thank You |
88 | 74 |
|
89 |
| -Example `Reloaded-II/Mods` folder: |
90 |
| -``` |
91 |
| -Mods |
92 |
| -├── FlatOut |
93 |
| -│ ├── flatout2.packs.goofyahhmod |
94 |
| -│ ├── flatout2.utils.modloader |
95 |
| -│ ├── flatout2.utils.mpnamechange |
96 |
| -│ ├── flatout2.utils.richpresence |
97 |
| -│ └── flatout2.utils.zpatch |
98 |
| -├── <other unrelated mod 1> |
99 |
| -├── <other unrelated mod 2> |
100 |
| -└── <other unrelated mod 3> |
101 |
| -``` |
| 75 | +Services like the `Package Server` are supported by your donations. |
| 76 | +They also help cover occasional game purchases. |
| 77 | +Recent Example: [Fixing Compatibility with Special K in presence of Steam Copy Protection/DRM](https://github.com/Reloaded-Project/Reloaded-II/issues/308#issuecomment-1973715264) for games like Granblue Relink |
102 | 78 |
|
103 |
| - |
| 79 | +In the ~4 years I've been accepting donations so far, I've received a total of ***£358.87 (and 4 games)***. This has helped cover most of the costs involved. e.g. Package Server, Server Backups, Discord Bot(s), Search Index, Services for some Online Mods, Domain (Website Name) Costs etc. |
104 | 80 |
|
105 |
| -If you're a fan of manual mod organization, say in the style of Stardew Valley, this is for you. |
106 |
| -Should make you feel more at home. |
| 81 | +With these donations I can almost break even. I don't have any concrete numbers (hard to calculate), but based on some quick maths, I've probably spent around £450-500 on Reloaded related things so far. |
107 | 82 |
|
108 |
| -### Preserve Mod Order |
| 83 | +Thank you. |
109 | 84 |
|
110 |
| -(Contributed by @ItsKaa, thanks!) |
| 85 | +### About the Future |
111 | 86 |
|
112 |
| -The order of mods in the launcher is now fully preserved across restarts. |
113 |
| -Previously, the enabled mods would show first in load order, and disabled ones would show after |
114 |
| -in alphabetical order. |
| 87 | +Please remember. For most of its life, Reloaded has been a solo project. |
| 88 | +Not just the Manager, but the Loader and many of the core components used across your popular mods. |
115 | 89 |
|
116 |
| -For newly added games, this is now the default (may change depending on feedback). For games |
117 |
| -people previously added before this update, this is opt-in. |
| 90 | +In any case, the work on the successor continues, albeit slowly. |
118 | 91 |
|
119 |
| - |
| 92 | +Every week, I spend around 24-30 hours on Reloaded things, ***on top of my fulltime job***. Hopefully in 2 years, we'll live in a future where users can start experimenting with porting core components from Reloaded-II to Reloaded3. This is not easy to do, but I will relentlessly keep going, until it is done. |
120 | 93 |
|
121 |
| -In either case, you can change this setting at any time according to your preference. |
| 94 | +The intent of the recent reliability/bug-fix patches is to allow me to step back from maintaining Reloaded-II for a longer time and let me focus on the successor. |
122 | 95 |
|
123 |
| -### Reloaded-II now defaults to DLL Hijacking as opposed to DLL Injection |
| 96 | +If you are a programmer, I should hopefully have a ['Specification'](https://reloaded-project.github.io/Reloaded-III/) ready not too long from now. The work on this is resuming today, after a long hiatus, so various core parts of Reloaded3 will be open to community contributions. Until then, hang tight. |
124 | 97 |
|
125 |
| -i.e. Reloaded-II now uses ASI Loader by default, instead of DLL Injection for newly added games. |
126 |
| - |
127 |
| -Many Steam users have been reporting that ***their Steam clients render their controllers absolutely |
128 |
| -unusable for anything that wasn't launched by Steam***. Unfortunately, I don't think this will be |
129 |
| -fixed any time soon either. |
130 |
| - |
131 |
| -In order to reduce tech support requests of `I launched via Reloaded and my controller doesn't work`, |
132 |
| -I decided to (unfortunately) bend over to Valve and make using a shim for launching Reloaded's |
133 |
| -Loader the default. |
134 |
| - |
135 |
| -Although I ***really, really, really*** don't like modifying game folders (they should be untouched!!), |
136 |
| -I'm unfortunately forced to make this change to avoid end user issues. |
137 |
| - |
138 |
| -### Improving 'Missing Dependencies' Experience |
139 |
| - |
140 |
| - |
141 |
| - |
142 |
| -In some rare cases, mods which depend on other mods don't have the required update information to |
143 |
| -download the other mod. |
144 |
| - |
145 |
| -As Reloaded doesn't have a central package server, we copy the update info of each dependency into |
146 |
| -each mod that depends on it. That update info is then used to download the needed dependencies in |
147 |
| -lieu of a lack of a central package server. Reloaded updates this info on every reboot of the launcher. |
148 |
| - |
149 |
| -In some cases, a modder may for example, forget to add update info to their mod, and some other mod |
150 |
| -may set a dependency on it. Or the author of the mod that depends on it may have added the dependency |
151 |
| -with a text editor, before hitting 'Publish'. In both these cases, the update info may be missing, |
152 |
| -and dependency cannot be auto downloaded. |
153 |
| - |
154 |
| -In this Release, 2 changes have been made to improve this experience: |
155 |
| -- Hitting 'Publish' triggers the action to copy dependency info. |
156 |
| -- Missing Dependency Dialog shows which mod's dependency is missing. |
157 |
| - |
158 |
| -With these two changes, the likelyhood of a missing dependency error is reduced. And if it occurs, |
159 |
| -it's easy to figure out which package was incorrectly uploaded/packaged or is missing update info. |
160 |
| - |
161 |
| -### Automatic Language Selection on First Boot |
162 |
| - |
163 |
| - |
164 |
| - |
165 |
| -Bing Chilling! |
166 |
| - |
167 |
| -This is very long overdue, and a simple change. When you first boot Reloaded-II, it'll |
168 |
| -auto select the language for you. So if your system display language is 中文(简体), Reloaded |
169 |
| -will auto select `zh-CN.xaml` on first boot. |
170 |
| - |
171 |
| -### Drag & Drop Mod Installation |
172 |
| - |
173 |
| - |
174 |
| - |
175 |
| -Mods can now be installed by dragging them over the Reloaded-II window. |
176 |
| - |
177 |
| -This is intended to make mod installation easier in the cases where you're downloading a mod from |
178 |
| -a place that doesn't provide you a '1 click install' button. (e.g. GitHub, Nexus, that certain |
179 |
| -kinky mod site etc.) |
180 |
| - |
181 |
| -### Loader Logging Change |
182 |
| - |
183 |
| -A small change to how the loader logs mods that are about to be loaded. |
184 |
| - |
185 |
| -Old logs: |
186 |
| -``` |
187 |
| -[Reloaded] Loaded: FlatOut2.Utils.ModLoader in 118ms |
188 |
| -[Reloaded] Loaded: FlatOut2.Utils.RichPresence in 9ms |
189 |
| -[Reloaded] Loaded: FlatOut2.Utils.ZPatch in 3ms |
190 |
| -``` |
191 |
| - |
192 |
| -New logs: |
193 |
| -``` |
194 |
| -[Reloaded] Loading 3 Mod(s). |
195 |
| -[Reloaded] |
196 |
| -[Reloaded] Loading: FlatOut 2 Mod Loader |
197 |
| -[Reloaded] - AppId : FlatOut2.Utils.ModLoader |
198 |
| -[Reloaded] - LoadTime: 112ms |
199 |
| -[Reloaded] |
200 |
| -[Reloaded] Loading: FlatOut 2 Discord Rich Presence |
201 |
| -[Reloaded] - AppId : FlatOut2.Utils.RichPresence |
202 |
| -[Reloaded] - LoadTime: 9ms |
203 |
| -[Reloaded] |
204 |
| -[Reloaded] Loading: ZPatch |
205 |
| -[Reloaded] - AppId : FlatOut2.Utils.ZPatch |
206 |
| -[Reloaded] - LoadTime: 3ms |
207 |
| -``` |
208 |
| -Although more verbose, this change should make it easier for troubleshooting. |
209 |
| -You can identify if a mod is stuck/deadlocked by the fact `LoadTime` doesn't appear. |
210 |
| -And you can more easily match up mod IDs to user friendly mod names. |
211 |
| - |
212 |
| -### Miscellaneous Changes |
213 |
| -- Loader and Launcher now filter out duplicate mods (in a predictable manner). |
214 |
| -- Updated translations. |
215 |
| -- Loader saves ~150KB of RAM again, with trimming re-enabled. |
216 |
| - |
217 |
| -### Bug Fixes |
218 |
| -- Added a minimum height in mod update dialog. |
219 |
| -- Fixed a bug where updating multiple outdated copies of the same mod at once would cause the launcher to crash. |
220 |
| -- Added an explicit full config refresh during dependency resolution. |
221 |
| - - Should make the 'Download Loop' issue less common on networked drives, maybe even OneDrive. |
222 |
| - |
223 |
| -End of human written changelog. |
224 | 98 | ------------------------------------
|
225 | 99 |
|
226 | 100 | ## Complete Changes (Autogenerated)
|
|
0 commit comments