Heyy everyone!
Continuing my work on the input system overhaul, this PR is mainly focused around three new features :
- Dynamic Input Swap
- Device Profile Linking
- Player Device Assignement
What are these new features and why are they bundled in the same PR you might ask?
- **Dynamic Input Swap**
Is a new feature that, when enabled, allows the user to switch between multiple input devices, without having to return to the settings menu. This feature can be enabled at the bottom of the Input Settings menu, next to the "global input" checkbox. A nifty new tooltip has been added for clarity.
- **Device Profile linking** :
While working on Dynamic Input Swap, one issue arose, which was that Ryujinx would use that device’s Default profile, without the user being able to specify a specific profile to use on that specific device. This feature fixes that, by allowing the user to link a profile as the device’s Default. This means that this profile will be auto loaded when selecting that same device, both when connecting it to the emulator, and when using Dynamic Input Swap. This feature can be found next to the Device Profiles dropdown, and includes a nifty new tooltip. By default, the "default" profile is linked to any device. There also is a small icon to the right of the profile name’s Right to visualise which profile is linked.
- **Player Device Assignement** :
Another issue that arose while working on Dynamic Input Swap was that enabling the feature would render multi player configurations unusable. This new feature addresses this issue by adding a new menu, which allows the user to assign different Input Devices to different players. Inside this new menu, you also get the device’s linked profile and the list of which players are already assigned to which input device, below and to the right of the input device name, respectively. You also get an option to allow mapping the same input device to different players.
### Nerd Zone
This PR adds a new player-level input routing layer on top of the existing `InputConfig` system.
Previously, each player effectively had one active input config, tied to one device. Given Dynamic Input Swap needs more state than that, this PR introduces a persisted `PlayerInputAssignment` model, which stores the player index, whether Dynamic Input Swap is enabled or not, the list of assigned input devices and an optional profile name bound to each assigned device.
The new assignment data lives coexists with the existing input configs instead of replacing them, which should keep the old single-device behavior intact when Dynamic Input Swap is disabled, while allowing dynamic players to own multiple devices.
New configl types include:
- `AssignedInputDevice`
- `AssignedInputDeviceType`
- `PlayerInputAssignment`
- `PlayerInputAssignmentHelper`
- `PlayerInputDeviceAssignmentItem`
`PlayerInputAssignmentHelper` normalizes assignments, deduplicates device entries, preserves a primary device, and compares assignments for dirty-checking.
On the runtime side, `NpadManager` now passes both the normal `InputConfig` and the player assignment to `NpadController`. When Dynamic Input Swap is disabled, Ryujinx switches to the old behavior : one player config opens one device. However, when it's enabled, `NpadController` opens every assigned keyboard/controller device it can resolve, tracks their state snapshots, and promotes the active source based on recent input.
Dynamic swap currently follows a “last meaningful input wins” model (annotated in the code) :
So if the keyboard produces new input, it becomes active; if an assigned controller produces new input, that controller becomes active; if the active device stops producing input and another assigned device is held/active, the active source can fall back; and if no device has produced input yet, the initial active source is chosen from the selected config and available assigned devices.
Per-device profile binding is handled by storing the profile name on the assigned device entry. When a device is selected or resolved through Dynamic Input Swap, Ryujinx tries to load that bound profile for the matching device type. If the profile is missing, invalid, or explicitly `Default`, it falls back to the generated default config for that device type.
The new restore-to-defaults behavior deliberately bypasses linked profiles. This means pressing the reset button loads the real generated Default profile for the currently selected device, not the profile linked to that device.
The input settings UI now dirty-checks both the currently edited input config and the player input assignment state, meaning that assigning/unassigning devices, changing Dynamic Input Swap, or changing profile bindings correctly marks the page as modified -> in continuation of my previous efforts in #13 to clean up its behaviour.
The Assigned Devices dialog is backed by the currently available keyboard/controller device list. It also checks other players’ persisted assignments so the UI can show which players already use a device. If duplicate assignment is disabled, devices already assigned to another dynamic-swap player are disabled for the current player.
If no explicit player assignments exist yet, Ryujinx synthesizes a default assignment from the existing input config. Dynamic swap is disabled by default until the user enables it.
⚠️⚠️⚠️⚠️⚠️Caution : this PR is still a WIP; and while all features described above have been fully implemented, various issues still remain, notably inside the Player assignement menu, that are getting worked on. Additionally, little bug testing has been done across the emulator, so it is not guaranteed that this build will be bug free.
Signed by : 🦫
With the very generous help and support from @neo 🤗
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/125
- Attempted fixing the strength: so far it hasn't been successful.
- Rumble should skip vibrations if they're not in-line with poll-rate: would like to come back to this. Queuing just does exactly what the hid buffer does, but our timer (poll rate) is not in sync with the rate the controller is reading at, which causes excess drops.
- Refactored the class so that implementing support for HD rumble for other controllers (DS5, Steam Controller) is much easier in the future.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/109
This PR introduces splash text messages that change per startup on the loading screen after selecting a game. It also moves the "RYUBING" logo splash in logs to be inside its own class, which also handles loading screen splashes and titlebar splashes. Credits to VewDev, Lotp, Sh0inx, yell0wsuit, and Greemdev for pointers and assistance throughout this PR.
Co-authored-by: Awesomeangotti <awesomeangotti@noreply.git.ryujinx.app>
Co-authored-by: Awesomeangotti <143439211+Awesomeangotti@users.noreply.github.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/128
Add RPC support for NSMBUD play reports that generate on main menu and after finishing a course.
Tracked things:
Main menu
Last played course
Examples:
Main menu

After finishing a course (By dying or by beating it)

In the future should I be doing batch PRs for RPC related things? Yes.
Co-authored-by: Awesomeangotti <143439211+Awesomeangotti@users.noreply.github.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/130
I fixed the remaining Linux file picker issues after testing on Steam Deck. User profile images, mod manager, title manager, and DLC directory were still using the old file picker methods and not the helper methods. I could only apply the helper method to user profiles, but I came up with a workaround for the others.
The reason for the draft PR: I'd ideally like to fix the other three at the helper level, so maybe @greem can help with that since since he wrote the initial implementation.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/24
Ayyyy, welcome to the UI: File Menu → General Improvements PR!
Wooo, we progressing smoothly!
This PR introduces small visual and "feature" improvements to the `File` menu.
### LOCALISATION:
* **Fractured:** More locales:
* `Dialog_ContentLoading.json` - content loading dialogs (Updates/DLC)
* `Dialog_FileTypeAssociations` - file association dialogs
* `Dialog_FileMenu` - File menu dialog strings (complements `MenuBar_File.json`)
* **Added:** Additional entires to `Error.json`
* **Populated:** `MenuBar_File.json`
### FILE MENU:
* **Added:** Keyboard shortcuts to `Load Application` and `Load Unpacked Game`
* Cmd + O/Ctrl + O and Cmd + Shift + O/Ctrl + Shift + O for macOS and other OS, respectively.
* While many users rely on autoloaded game directories, manually opening content remains a common workflow (for those that don't rely on autoload directories).
* **Merged:** `Load Title Updates` and `Load DLC` → `Load Updates/DLC`
* Both actions follow the same workflow: selecting one or more directories and allowing Ryujinx to load the content.
* To reduce redundancy, they have been consolidated into a single menu item that loads both Updates and DLC simultaneously, mirroring the behavior of the existing autoload functionality.
* As part of this change, Title Updates has been simplified to Updates for consistency with the rest of the UI. The remaining reference in the Game List context menu has also been updated from `Manage Title Updates` to `Manage Updates`.
* **Added/Updated:** File picker titles for content loading actions
* `Load Application`: Select a Switch application file to load
* `Load Unpacked Game`: Select a folder containing an unpacked Switch application to load
* `Load Updates/DLC`: Select one or more folders to bulk load updates and DLC from
* **Improved:** `Associate File Types` and `Remove File Type Associations` (initially moved to the `File` menu in #42)
* These options were previously nested under `Manage File Types` and exposed as `Install File Types` and `Uninstall File Types`. The submenu added unnecessary navigation, while the action names did not clearly communicate their purpose.
* The two actions have been replaced with a single dynamic menu item, whose displayed and performed action updates based on the current association state. The respective icons have been added as well (imported namespace Projektanker.Icons to allow for dynamic switching):
* Link → `Associate File Types`
* Link-Slash →`Remove File Type Associations`
* A tooltip has also been added to clarify the action being performed.
* This option is only usable when a game is not running (why associate file types when running a game? Play the game!)
* **Note:** These options are only available on Windows and Linux. macOS already provides robust per‑file “Open With” handling, so a custom association system isn’t necessary. Support can be added later if needed, but current macOS limitations in Ryujinx prevent certain behaviors; these will be addressed in future PRs.
* **Updated:** Menu Icons
* Several icons have been updated to better reflect their associated actions and improve consistency throughout the menu:
* `Load Updates/DLC...` now uses a single Inbox Tray icon instead of separate Update and DLC icons.
* `Open Ryujinx Folder`, `Open Logs Folder`, and `Open Screenshots Folder` now share the same folder icon, as all three actions ultimately open a folder/directory.
* `Exit` is now an Exit icon (arrow-right-from-bracket) instead of a Power button.
### OTHER:
* **Improved:** `Load Updates/DLC` dialog messages
* Existing dialog messages were longer than necessary and included terms such as "missing" updates and "new" DLC.
* These messages have been simplified and standardized:
* Updates Added: {0} or Updates Removed: {0}
* DLC Added: {0} or DLC Removed: {0}
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
A GIGANTIC, ENORMOUSE HUUUUUUGEE thank you to @Babib3l for testing this and ensuring the commands work! WOOOOO!!!
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/127
Ayyyy, welcome to the UI: Options Menu → General Improvements PR!
We cruisin'!
This is the first PR of a small series aimed at improving the `Options` menu and related submenus.
This initial PR focuses on smaller visual and navigational improvements to the main `Options` menu. As this is part of a progressive series (two PRs _for now_), further bug fixes and refinements may be present in Part 2. Additionally, as the `View` menu is related to some of the changes presents in this PR, it has also received minor adjustments (see details below).
### LOCALISATION
* **Fractured:**
* `MenuBar_Options.json` - `Options` menu locales
* `MenuBar_View.json` - `View` menu locales
* `Settings_Interface.json` - Interface `Settings` tab locales (UI-only)
* **Added:** Missing "e" in Italian translation of `User Profiles` (thank you BOBBIJDJ for pointing it out!)
**NOTE:** `MenuBar_View.json` and `Settings_Interface.json` were not populated in this PR.
### OPTIONS MENU
* **Moved:** `Toggle Fullscreen` to the `View` menu.
* This option affects the current window/view state, so it belongs under `View` rather than `Options`.
* **Moved:** `Show Console` checkbox to the `View` menu.
* Even though it was previously under `Options`, this is a real-time visibility toggle. It affects Ryujinx "immediately" (shows/hides the console window, and as immediately as you can get with our current implementation), so it fits better alongside other current view controls like `Toggle Fullscreen` and the `Window Size` presets.
* **Moved:** `Start Games in Fullscreen` and `Start Games Without UI` (renamed to "Hide UI on Game Start" for better flow) from the `Options` menu to the `Interface` tab in `Settings`.
* These are persistent launch preferences rather than actions that can affect just the current session. Settings is the semantically correct location for them. They now sit alongside other launch-related options such as `Confirm Game Shutdown`.
* Their respective locales were transferred to the newly created `Settings_Interface.json`.
* **Renamed:** `Change Language` → `Language`
* Made consistent with the shorter style used by other items in this menu in previous cleanups.
* **Modified:** Menu item order (see images below).
### VIEW MENU
The `View` menu received only light adjustments in this PR (mainly padding/margins to better fit the newly added `Show Console` checkbox ). A dedicated _View Menu_ follow-up PR is planned to reorganise it further and add new options. Furthermore, _Options Menu (Part 2 of 2)_ will follow shortly as well.
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/133
Hello and welcome to my PR that adds discord rich presence stuff from play reports generated by Miitopia.
The following items are tracked and displayed:
Main menu (for booting game)
MII Selector (from main menu)
Region (Game stage based)
Gold (Only updates at start of game play due to lack of play reports generated after loading into world)
As a bonus, I will be exporting the title icon for discord rich presence images and providing the title ID so it can be added to rich presence images. (See bottom of my message)
Examples of current rich presence messages:
At Greenhorne (Starting area)

After defeating final boss

Rich presence image and titleID:
titleID: 01003da010e8a000

Co-authored-by: Awesomeangotti <143439211+Awesomeangotti@users.noreply.github.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/129
This PR aims to fix a bug inside the settings window that caused the Controller Stick visualizer to run at extremely degraded performance when the selected profile had a rainbow LED configuration:
Old behaviour : <video src="/attachments/1915ab74-6e1b-4e2f-9182-820cbed5359b" title="Screen Recording 2026-05-30 105859" controls></video>
New / updated behaviour : <video src="/attachments/dd293402-19e7-439e-8aa6-114d4ee22404" title="Screen Recording 2026-05-30 110338" controls></video>
The issue was that the input settings page automatically subscribed controllers to rainbow LED updates when a saved profile with rainbow LEDs enabled was loaded.
Reopening input settings on a non-default controller profile could immediately start the rainbow LED update loop from the settings UI, which caused the stick visualizer to become sluggish or jittery on affected controllers. The preview handler is now only registered when the rainbow LED option is changed in the settings UI, and it uses a stable handler so duplicate callbacks are not stacked.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/119
This PR refactors keyboard handling to use physical key mappings for all gameplay input, ensuring controls remain consistent across different OS keyboard layouts.
I'd like to give out an ENORMOUS thank you to @Neo for his very generous help on getting MacOS caps lock behaviour working, but as well for taking the time for extensive testing, planning and discussions, and finally for writing this PR message :) Keep being awsome pal 👊
### New Features :
* **New**: Gameplay input now uses physical key positions instead of OS layouts, ensuring the same physical key triggers the same action across keyboard layouts.
* Key rebinding stores physical keys and config compatibility is preserved, with physical keys now the primary gameplay‑binding format.
* Physical‑key model is now consistent across platforms, including updated SDL/headless behavior.
* **Added**: New Input setting "Reset keybinds to default", with a new confirmation dialog appears when changes are being overwritten.
* **Fractured**: Keyboard‑related locales to the newly created `KeyboardLayout.json`.
* New input device settings/actions use clearer labels and tooltips.
* UI Key Labels (such as Left Shift and Right Shift) are more accurate and standardized, with clearer symbols, consistent naming, dynamic learning of printable labels from real key events, and persistence across restarts.
### Improvements :
* **Reduced**: Incorrect key labels by using observed host symbols instead of language assumptions.
* **Reduced**: Stuck/stale keys by using binary pressed‑key tracking, fixing rebinding/gameplay paths, better held‑key recovery after focus changes, and clearing keyboard state when Ryujinx/settings windows lose focus.
* **Improved**: Device handling → refreshing no longer clears the selector, disconnect fallback is consistent, reconnect restores controllers automatically, and the UI avoids invalid/empty device states.
* **Improved**: Async input‑assignment callbacks are now guarded when switching views/devices, preventing stale callbacks from hitting detached views.
* **Adjusted**: Input visualiser to be more robust when switching sources or handling controller disconnect/reconnect, without needing to reopen settings.
* **Improved**: Modification (changes to input controls) tracking
* Rebinding to the same value, reverting to original config, restoring defaults without differences, or reloading equivalent profiles no longer leaves Player marked as modified.
* **Reduced**: Keyboard LED noise in logs and added optional UI keyboard‑state/rebinding diagnostics.
### Fixes :
* **Special Keys**:
* AltGr and other special keys behave correctly, including proper Ctrl+Alt → AltRight handling and more consistent normalization of special/synthetic keys.
* Caps Lock is now reliably bindable on all platforms (Windows/Linux register every press; macOS every other).
* **Fixed**: Certain cases where keyboard input broke after pointer interactions
### Current Limitations
These are planned on being fixed/improved upon in future PRs:
* Hotkeys still use semantic (Key) mappings.
* Software keyboard / text input still uses the semantic path
* Printable key labels may fall back to defaults until observed from host input.
* Full semantic/physical split currently implemented only in the Avalonia driver.
Co-authored-by: _Neo_ <ursamajorjanus2819@gmail.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/13
Ayyyy, welcome to the UI: Actions Menu → General Improvements PR!
We are soooo back boys and girls.
This is the first PR in a series aimed at delivering the largest overhaul and set of improvements to the Actions menu yet.
This initial PR introduces smaller visual and navigation improvements as part of the broader Actions menu refresh, while also serving as the starting point for locale fracturing across the entirety of Ryujinx. As this is a series of progressive PRs, bug fixes and additional refinements will continue to be rolled out throughout the series.
### GENERAL:
* **Fractured:** A bunch of locales. The following new files, and their designations, were created:
* `MenuBar_Actions.json` - all UI-related locales for the `Actions` menu
* `MenuBar_File.json` - all UI-related locales for the `File` menu
* `Dialog_Firmware.json` - all firmware-related dialog locales
* `Dialog_Keys.json` - all keys-related dialogs locales
* `Error.json` - all error-related locales
* `StatusBar.json` - all UI-related locales for the Status Bar
**NOTE:** To keep this PR manageable, `MenuBar_File.json`, `Error.json`, and `StatusBar.json` were NOT populated with their locales. Additionally, `RenderDoc.json` was deleted and all of its locales were moved to `MenuBar_Actions.json` because all RenderDoc locales are present only in the `Actions` menu.
* **Fixed:** Some typos in `Locales.md`.
### **DEFAULT ACTIONS:**
* **Added:** File picker dialog titles for `Install Firmware` and `Install Keys`.
* `Install Firmware`: "Select an XCI file or a ZIP archive to install firmware from" and "Select a folder to install firmware from".
* `Install Keys`: "Select a KEYS file to install keys from" and "Select a folder to install keys from".
* **Improved:** `Install Firmware` and `Install Keys` submenus.
* Submenus no longer have periods before file extensions; this avoids visual issues in right‑to‑left languages matches other emulators using uppercase extensions (e.g. `Install Firmware` → `Install Firmware (.XCI or .ZIP)` is now `Install Firmware` → `Install Firmware (XCI or ZIP)`).
* Submenus no longer repeat the main menu title; they now show only the specific option, making navigation cleaner (e.g. `Install Firmware` → `Install Firmware (XCI or ZIP)` is now `Install Firmware` → `XCI or ZIP`).
* Submenus now end with an ellipsis; this follows UI conventions that signal additional user input is required (e.g. `Install Firmware` → `XCI or ZIP...`).
* **Moved:** `Manage File Types` menu and submenu.
* These menus let Windows and Linux users associate formats like .xci and .nsp with the emulator so they can be opened by double‑clicking. macOS already handles this automatically when an app supports the format.
* Since this PR focuses on the `Actions` menu, this menu and its submenus have been moved under `File`, with their locales relocated to the new `MenuBar_File.json`.
* This menu is useful but currently too vague about its purpose. A later PR will refine and clarify it.
* **Improved:** `Mii Editor`
* Removed the `Mii Editor` tooltip, as the menu was already self‑explanatory.
* The loading text for the `Mii Editor` is now locale-dynamic, instead of the previously static "miiEdit".
### **IN-GAME ACTIONS:**
* **Updated:** Menu grouping with separators (see images below)
* **Renamed:** `Resume` to `Resume Emulation` and `Pause` to `Pause Emulation`, ensuring consistency with the other options.
* **Fixed:** `Pause Emulation`/`Resume Emulation` UI Bug
* Previously, if a user paused emulation and then exited the game without closing the emulator, the next game launch would incorrectly show `Resume Emulation`, as though the new game were paused.
* **Updated:** `Scan Amiibo` and `Scan Skylander` icons to a chess rook and dragon, making them clearer and more fun than the previous cubes.
* **Added:** Shortcut for `Simulate Wake-up Message`
* Few games support it, but an in‑game shortcut still helps players who use it often.
* **Removed:** `Manage Cheats` from the menu
* `Manage Cheats` doesn't properly work in-game right now, and is removed in this PR. It will be returned to later in Part 4.
Please see the image comparisons below.
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/42
Did you know that the garbage collector's default settings are designed for single-threaded applications and quick start-up times? We don't care about either of these.
Configured:
- Concurrent GC (default is true) (set for clarity)
- RetainVM: segments that should be deleted are put on a standby list for future use (default is false)
- QuickJit: enabling quick JIT decreases startup time but can produce code with degraded performance characteristics; for example, the code may use more stack space, allocate more memory, and run slower. (default is true) (disabled)
- ReadyToRun: configures whether the .NET runtime uses pre-compiled code for images with available ReadyToRun data; disabling this option forces the runtime to JIT-compile framework code. (default is true) (set to false, we dont publish with this option anyway)
- TieredPGO: this setting enables dynamic (tiered) profile-guided optimization (PGO) in .NET 6 and later versions. If quick JIT is disabled but tiered compilation is enabled, only pre-compiled code participates in tiered compilation. If a method is not pre-compiled with ReadyToRun, the JIT behavior is the same as if tiered compilation were disabled.
Features:
- Set ``GCLatencyMode.Interactive`` when in-menu and emulator is paused, otherwise uses ``GCLatencyMode.LowLatency``.
- Added a new UI option in the Settings > CPU menu to toggle ``GCLatencyMode.LowLatency`` during guest runtime.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/88
Adds Discord Rich Presence for Tomodachi Life: Living the Dream, Tomodachi Life: Living the Dream - Welcome Version, and Animal Crossing: New Horizons
Tomodachi Life Rich Presence uses your total Mii count, and your island level

Animal Crossing New Horizons Rich Presence uses your island name

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/103
- Added Onedrive folder check for Windows.
- Added iCloud and Downloads folder checks for macOS.
- Added sudo checks for macOS/Linux.
- Added dialogue prompts for macOS/Linux.
- Added unofficial build warning for detected Flatpak install.
These checks have console fallbacks in case the GUI decides it doesn't want to work that day.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/4
As described. Should hopefully bring speed-ups for macOS devices (thanks Ori!) and general improvements across the board for the vulkan backend (maybe).
This will be followed up with a PR from @KeatonTheBot.
Co-authored-by: V380-Ori <infiniteloop0finsanity@gmail.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/16
- Echoes of Wisdom (Warps)
- Super Mario Odyssey (Kingdoms)
- Super Mario Bros. Wonder (World & Course)
- Pokemon Scarlet/Violet (DLC & Accademy Rooms)
- Super Mario 3D All Stars (Game Selection) (Berry is working on track showcase)
Co-authored-by: berrydiaboli <anthonyhoffman54444@gmail.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/93
This PR aims to Fix the Windows fullscreen gap when toggling from maximized state by using canonical Win32 fullscreen approach. When entering fullscreen, the window style is saved and replaced with WS_POPUP | WS_VISIBLE to remove all window chrome (title bar, borders), then SetWindowPos sizes the window to cover the full screen with SWP_FRAMECHANGED to force Win32 to recalculate the frame. On exit, the original window style is restored. This eliminates the few-pixel gap at the top that occurred because Avalonia's WindowState = FullScreen transition from a maximized state retained the title bar non-client area, leaving visible space at the top of the screen (Fullscreen resolution would be 1920 x 1072p on a 1080p monitor, it now correctly renders at 1920 x 1080p)
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/80
Implemented a new debug log type called NetLog and added more verbose logging to the LDN service.
I'd like some feedback on what all should be logged under this category -- I'm likely going to be adding logs for sockets as well, but I want to know specifically if the logging should be more or less verbose and what would be the most helpful things to log.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/5
When connecting multiple controllers of the same model, the first device's name ends with (0), the second with (1), the third with (1), the fourth with (1), and so on. To ensure these names are truly unique, GetUniqueGamepadName is now called recursively.
Before:

After:

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/27
This PR addresses [Ryubing/Issues#345](https://github.com/Ryubing/Issues/issues/345) by fixing the Windows console hide/show path so it only acts on Ryujinx’s own console window instead of whatever window happens to be focused during startup. Previously, when Show Console was disabled, the helper could race with focus changes and end up affecting another app or shell window while leaving the console visible; this change removes that foreground-window dependency and keeps the startup behavior scoped to the Ryujinx console.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/32
- update decompression functions to use native libs
- add support for 7zip and tar.xz archives with SharpCompress
- add .7z and tar.xz artifacts to releases
- remove linux non-appimage builds from PRs
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/26