Merge 91fb9c34463e8d77b31c6189605397f9006f154f into e5fdbd0b830a95197ba1cbac401821e8b1a5a917

This commit is contained in:
Trigus42 2024-10-22 10:00:57 -05:00 committed by GitHub
commit 879dc9d1cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
138 changed files with 13683 additions and 3 deletions

84
.github/workflows/docs.yml vendored Normal file
View File

@ -0,0 +1,84 @@
name: Build docs
on:
push:
branches:
- 'mirror/master'
paths:
- 'docs/**'
- '.github/workflows/docs.yml'
pull_request:
paths:
- 'docs/**'
- '.github/workflows/docs.yml'
workflow_dispatch:
inputs:
deploy:
description: 'Deploy to GitHub Pages'
required: false
default: false
type: boolean
permissions:
contents: write
checks: write
jobs:
build-docs:
runs-on: ubuntu-latest
steps:
- name: Print inputs
if: github.event_name == 'workflow_dispatch'
run: |
echo "Inputs: ${{ toJson(inputs) }}"
- uses: actions/checkout@v4
- name: Configure Git Credentials
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v5
with:
python-version: 3.x
cache: 'pip'
- run: pip install -r requirements.txt
working-directory: docs
- name: Build Docs and Capture Warnings
id: build_docs
working-directory: docs
run: |
mkdocs build 2>&1 | tee mkdocs-output.log
- name: Annotate Warnings and Errors
if: always() && steps.build_docs.outcome != 'skipped'
working-directory: docs
run: |
warnings=$(grep -i 'WARNING' mkdocs-output.log || true)
errors=$(grep -i 'ERROR' mkdocs-output.log || true)
if [ -n "$warnings" ]; then
# Annotate warnings
echo "$warnings" | while read -r warning; do
echo "::warning::${warning}"
done
fi
if [ -n "$errors" ]; then
# Annotate errors
echo "$errors" | while read -r error; do
echo "::error::${error}"
done
# Fail the build if any errors were found
exit 1
fi
- name: Deploy to GitHub Pages
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' && github.event.inputs.deploy == 'true'
working-directory: docs
run: mkdocs gh-deploy --force

6
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
# MkDocs build output
/site/
# Python virtual env
venv/
.venv/

65
docs/mkdocs.yml Normal file
View File

@ -0,0 +1,65 @@
site_name: Ryujinx
repo_url: "https://github.com/ryujinx-mirror/ryujinx"
docs_dir: src
repo_name: "ryujinx-mirror/ryujinx"
remote_branch: docs
theme:
name: material
logo: assets/icon.svg
favicon: assets/icon.svg
palette:
- media: "(prefers-color-scheme: light)"
scheme: default
primary: custom
toggle:
icon: material/brightness-7
name: Switch to dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: custom
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- navigation.tracking
- navigation.tabs
- navigation.indexes
- navigation.expand
- navigation.sections
- header.autohide
- content.code.copy
- content.code.select
- content.code.annotate
markdown_extensions:
- pymdownx.highlight:
anchor_linenums: true
pygments_lang_class: true
line_spans: __span
- pymdownx.inlinehilite
- pymdownx.superfences
- pymdownx.smartsymbols
- sane_lists
extra_css:
- stylesheets/extra.css
plugins:
- search
nav:
- Home:
- index.md
- Setup:
- setup/index.md
- Firmware Dumping: setup/firmware-dumping/index.md
- Keys: setup/keys.md
- Multiplayer: setup/multiplayer-ldn/index.md
- Development Guide:
- dev-guide/index.md
- Code Style: dev-guide/coding-guidelines/coding-style.md
- PR Guidelines: dev-guide/workflow/pr-guide.md
- Guides:
- dev-guide/guides/index.md
- Mac Metal Frame Capture: dev-guide/guides/metal-frame-capture.md
- Support:
- FAQ / Troubleshooting: faq/faq.md
- Change Log: changelog.md

2
docs/requirements.txt Normal file
View File

@ -0,0 +1,2 @@
mkdocs-material
mkdocs-redirects

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 255.76 255.76" xmlns="http://www.w3.org/2000/svg">
<defs>
<style>.cls-1{fill:#02c5e5;}.cls-2{fill:#ff5f55;}.cls-3{fill:none;}</style>
</defs>
<g transform="matrix(.9095 0 0 .8953 11.05 10.745)" data-name="Ebene 2">
<g transform="matrix(1.0347 0 0 1.0337 -11.831 -3.2313)" data-name="Ebene 1">
<g data-name="Ebene 2">
<g data-name="Ebene 1-2">
<path class="cls-1" d="m80.63 0v220.39h-36.26c-14 0-35.74-20.74-35.74-39.13v-141.13c0-20.94 22.73-40.13 40.43-40.13z"/>
<path class="cls-2" d="m175.13 35.37v220.39h36.26c14 0 35.74-20.74 35.74-39.13v-141.13c0-20.94-22.73-40.13-40.43-40.13z"/>
<polygon class="cls-1" points="124.34 137.96 122.58 145.57 90.64 145.57 92.89 137.96"/>
<polygon class="cls-2" points="160.29 137.96 157.84 145.57 122.58 145.57 124.34 137.96"/>
<polygon class="cls-1" points="130.39 111.86 128.62 119.47 95.14 119.47 97.39 111.86"/>
<polygon class="cls-2" points="164.79 111.86 162.34 119.47 128.62 119.47 130.39 111.86"/>
<polygon class="cls-1" points="104.24 167.99 122.83 87.77 129.78 87.77 111.19 167.99"/>
<polygon class="cls-2" points="128.18 167.99 146.77 87.77 153.89 87.77 135.3 167.99"/>
</g>
</g>
</g>
<path transform="matrix(1.0995 0 0 1.1169 -12.149 -12.001)" d="m165.33 142.58v-101.93l16.983 0.16784c19.35 0.19124 19.436 0.20386 26.88 3.9456 12.687 6.3774 21.597 17.899 23.195 29.995 0.30635 2.3198 0.41903 26.298 0.33152 70.546l-0.13258 67.031-1.4193 3.9678c-2.1946 6.1352-5.1178 10.616-10.502 16.098-6.7176 6.839-12.628 10.462-19.053 11.681-1.2174 0.23087-9.8787 0.41977-19.247 0.41977h-17.034z" fill="none" stroke="#000" stroke-width="4"/>
<path transform="matrix(1.0995 0 0 1.1169 -12.149 -12.001)" d="m37.969 211.01c-9.6676-2.6664-20.751-12.474-26.004-23.011-3.4279-6.876-3.1936-1.1507-3.1861-77.849 0.007271-75.191-0.13024-71.16 2.6354-77.259 4.8351-10.663 15.985-20.275 27.517-23.72 3.1495-0.94089 4.3908-1.0144 20.114-1.1904l16.758-0.18759v203.87l-17.883-0.0402c-12.95-0.02915-18.453-0.19769-19.952-0.61107z" fill="none" stroke="#000" stroke-width="4"/>
<path transform="matrix(1.0995 0 0 1.1169 -12.149 -12.001)" d="m121.46 162.07c0.13203-0.55672 1.2139-5.1623 2.4042-10.235l2.1642-9.2224-10.042-0.44988 1.4368-6.2982 10.31-0.44988 1.911-8.0977c1.051-4.4538 1.9175-8.3508 1.9255-8.6601 0.0108-0.41667-1.2674-0.56234-4.9341-0.56234-2.7218 0-4.9486-0.11023-4.9486-0.24495 0-0.13473 0.32828-1.5518 0.72951-3.1491l0.7295-2.9042h10.147l1.5713-6.6356c0.86421-3.6496 2.0487-8.71 2.6322-11.245l1.0609-4.6096 3.0366-0.0016c1.6702-8.65e-4 3.0366 0.18766 3.0366 0.41894s-1.1134 5.1214-2.4743 10.867c-1.3609 5.7455-2.4743 10.613-2.4743 10.816 0 0.20316 3.414 0.42478 7.5866 0.49248l7.5866 0.12309-0.90553 3.0366-0.90554 3.0367h-7.5808c-4.1695 0-7.583 0.15183-7.5856 0.3374-6e-3 0.39451-3.5003 15.259-3.8606 16.42-0.22661 0.73073 0.36976 0.78728 8.3029 0.78728h8.547l-2.2621 6.7281-16.291 0.24495-0.9976 4.0489c-0.54867 2.2269-1.6466 6.8325-2.4399 10.235l-1.4423 6.1858h-3.1073c-2.9936 0-3.0985-0.037-2.8672-1.0122z" fill="none" stroke="#000" stroke-linejoin="round" stroke-width="2" style="paint-order:normal"/>
<path transform="matrix(1.0995 0 0 1.1169 -12.149 -12.001)" d="m98.765 162.76c0.0097-0.19687 1.0819-4.8117 2.3827-10.255l2.365-9.8972-8.6809-0.12198c-6.5034-0.0914-8.6792-0.26065-8.6743-0.67481 0.0036-0.30406 0.38544-1.7675 0.84843-3.2521l0.84181-2.6992 17.368-0.44988 1.9192-8.0977c1.0556-4.4538 1.9282-8.3508 1.9393-8.6601 0.0155-0.43275-2.1682-0.56234-9.4754-0.56234-7.4096 0-9.4489-0.12354-9.2835-0.56235 0.11661-0.30929 0.54881-1.7264 0.96045-3.1491l0.74843-2.5868h18.738l1.143-4.8362c0.62865-2.6599 1.813-7.721 2.632-11.247l1.489-6.4107h3.0876c2.7279 0 3.0609 0.09171 2.8586 0.78728-0.7583 2.6066-4.7802 20.156-4.7802 20.858 0 0.72886 0.34949 0.84874 2.4743 0.84874 1.3609 0 2.4743 0.11023 2.4743 0.24495s-0.32828 1.5518-0.72951 3.1491l-0.7295 2.9042h-5.2544l-0.44847 1.687c-0.63793 2.3997-3.6351 15.245-3.6351 15.579 0 0.15334 1.1393 0.2788 2.5318 0.2788h2.5318l-0.27849 1.687c-0.15317 0.92787-0.49222 2.4462-0.75345 3.3741l-0.47497 1.687h-5.2693l-1.6609 7.0855c-0.91348 3.897-2.0078 8.5026-2.4318 10.235l-0.77087 3.1491-3.0102 0.13302c-1.6556 0.0732-3.0023-0.0281-2.9925-0.22494z" fill="none" stroke="#000" stroke-linejoin="round" stroke-width="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

1
docs/src/assets/icon.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 255.76 255.76"><defs><style>.cls-1{fill:#02c5e5;}.cls-2{fill:#ff5f55;}.cls-3{fill:none;}</style></defs><g id="Ebene_2" data-name="Ebene 2"><g id="Ebene_1-2" data-name="Ebene 1"><g id="Ebene_2-2" data-name="Ebene 2"><g id="Ebene_1-2-2" data-name="Ebene 1-2"><path class="cls-1" d="M80.63,0V220.39H44.37c-14,0-35.74-20.74-35.74-39.13V40.13C8.63,19.19,31.36,0,49.06,0Z"/><path class="cls-2" d="M175.13,35.37V255.76h36.26c14,0,35.74-20.74,35.74-39.13V75.5c0-20.94-22.73-40.13-40.43-40.13Z"/><polygon class="cls-1" points="124.34 137.96 122.58 145.57 90.64 145.57 92.89 137.96 124.34 137.96"/><polygon class="cls-2" points="160.29 137.96 157.84 145.57 122.58 145.57 124.34 137.96 160.29 137.96"/><polygon class="cls-1" points="130.39 111.86 128.62 119.47 95.14 119.47 97.39 111.86 130.39 111.86"/><polygon class="cls-2" points="164.79 111.86 162.34 119.47 128.62 119.47 130.39 111.86 164.79 111.86"/><polygon class="cls-1" points="104.24 167.99 122.83 87.77 129.78 87.77 111.19 167.99 104.24 167.99"/><polygon class="cls-2" points="128.18 167.99 146.77 87.77 153.89 87.77 135.3 167.99 128.18 167.99"/></g><rect class="cls-3" width="255.76" height="255.76"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

4249
docs/src/changelog-old.md Normal file

File diff suppressed because it is too large Load Diff

7356
docs/src/changelog.md Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

View File

@ -0,0 +1,35 @@
*Written by: [@jcm93](https://github.com/jcm93)*
Below is the method that I have found to produce reliable Metal GPU frame captures of Switch titles in Ryujinx, using Xcode and the lldb debugger. The first draft of this guide will be "quick and dirty;" hopefully, it will be updated continuously so it eventually conforms to best practices, insofar as such a thing can be said to exist in this situation.
![metal-frame-capture](./assets/metal-frame-capture.png)
## External Build System Project in Xcode
Xcode seems to be more willing to harness an application properly if it's nominally in charge of the entire build process, even if the application isn't using a familiar C-family build toolchain. So we will add Ryujinx as an "External Build System" project, with `dotnet`, our favorite external build system.
1. Clone the Ryujinx github repository as normal: ```git clone https://github.com/ryujinx-mirror/ryujinx```
2. In Xcode, create a New Project. For the template, navigate to "Other", then search for or select "External Build System". For the "Build Tool", provide the location of your `dotnet` installation. For me, this is `/usr/local/share/dotnet/dotnet`. Create the project in any directory you wish; for convenience, you may want to create a folder in your cloned Ryujinx repository named `macos-xcode` or similar.
3. With your project created, for the build Arguments, substitute `build -c debug src/Ryujinx`. For the directory, browse and pick the base directory for your cloned Ryujinx repository that contains the `Ryujinx.sln` file. Uncheck "Pass build settings in environment."
* *If you have better knowledge of Ryujinx dotnet build arguments, please put whatever here for your preferred Ryujinx build settings. This is just the most minimal way I found to get it building without poring over Ryujinx build scripts.*
4. Optionally, add all project files to the project with "File->Add Files to...", creating folder references and selecting the build target.
5. Build the project.
6. Tell Xcode the binary you want it to debug by navigating to Product->Scheme->Edit Scheme. Under Info, then Executable, select Other.... Then, at the prompt, navigate to your repository folder, then the binary location. In the example from step 3, this would be `<base directory>/src/Ryujinx/bin/Debug/net8.0/Ryujinx`.
7. Also in the Scheme editor, under Options, then "GPU Frame Capture", select "Metal" instead of "Automatically."
8. At this point, Ryujinx should be building properly, and launching and harnessing properly within the Xcode debugger. However, we're not done yet!
## Build Debug MoltenVK
We need a version of MoltenVK compiled with debug symbols. Luckily, building MoltenVK per its documentation is straightforward. Follow its build steps [here](https://github.com/KhronosGroup/MoltenVK/?tab=readme-ov-file#fetching-moltenvk-source-code), making sure you end up building in Debug mode.
> [!NOTE]
> Ryujinx uses an old version of MoltenVK, 1.2.0. Checking out its code at 1.2.0 and building on a current SDK *should* be straightforward. However, I typically opt to build current/main MoltenVK with a one line patch to fix an issue with occlusion queries. That patch is reproduced here: [MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm](https://github.com/jcm93/MoltenVK/commit/9639a5b6be9fac19dadeaa07049aaece58ee1cf7#)
With debug MoltenVK in hand, replace the `libMoltenVK.dylib` binary in the `src/Ryujinx/bin/Debug/net8.0/` directory of your Ryujinx repository with the debug .dylib you just built.
## Miscellany
You should now be able to produce frame captures stably within Xcode of Ryujinx titles. To save a capture as a shareable file, use the Export button in the Summary tab. A couple of other notes:
* You will need to tell lldb to ignore `SIGUSR1`; for whatever reason, this pops up everywhere once guest code is loaded. To do so within your current lldb debugger session, just enter ```pro hand -p true -s false SIGUSR1```.
* We did not enter any of the usual "secret sauce" for enabling capture, like adding `Metal Capture Enabled = YES` to the Info.plist file or `MTL_CAPTURE_ENABLE=1` to our environment variables. In my testing, none of these variables actually exposed the option for frame capture in Xcode. Rather, the important determinant in the option being enabled was what we did in Step 7. If you better integrate Ryujinx's build scripts, these other options might come into play more.
* The usual caveats for Ryujinx debugging apply. Mainly, if we aren't using the Hypervisor, we need to use the Software memory mode, or else hit segfaults nearly instantly in guest code.

View File

@ -21,7 +21,7 @@ Contributing (Building, testing, benchmarking, profiling, etc.)
If you want to contribute a code change to this repo, start here.
- [Contributor Guide](../CONTRIBUTING.md)
- [Contributor Guide](https://github.com/ryujinx-mirror/Ryujinx/CONTRIBUTING.md)
Coding Guidelines
=================

View File

@ -24,7 +24,7 @@ If during the code review process a merge conflict occurs, the PR author is resp
## Pull Request Builds
When submitting a PR to the `Ryujinx/Ryujinx` repository, various builds will run validating many areas to ensure we keep developer productivity and product quality high. These various workflows can be tracked in the [Actions](https://github.com/ryujinx-mirror/Ryujinx/actions) tab of the repository. If the job continues to completion, the build artifacts will be uploaded and posted as a comment in the PR discussion.
When submitting a PR to the `Ryujinx/Ryujinx` repository, various builds will run validating many areas to ensure we keep developer productivity and product quality high. These various workflows can be tracked in the [Actions](https://github.com/ryujinx-mirror/ryujinx/actions) tab of the repository. If the job continues to completion, the build artifacts will be uploaded and posted as a comment in the PR discussion.
## Review Turnaround Times
@ -42,7 +42,7 @@ Anyone with write access can merge a pull request manually when the following co
* The PR has been approved by two reviewers and any other objections are addressed.
* You can request follow up reviews from the original reviewers if they requested changes.
* The PR successfully builds and passes all tests in the Continuous Integration (CI) system. In case of failures, refer to the [Actions](https://github.com/ryujinx-mirror/Ryujinx/actions) tab of your PR.
* The PR successfully builds and passes all tests in the Continuous Integration (CI) system. In case of failures, refer to the [Actions](https://github.com/ryujinx-mirror/ryujinx/actions) tab of your PR.
Typically, PRs are merged as one commit (squash merges). It creates a simpler history than a Merge Commit. "Special circumstances" are rare, and typically mean that there are a series of cleanly separated changes that will be too hard to understand if squashed together, or for some reason we want to preserve the ability to dissect them.

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

776
docs/src/faq/faq.md Normal file
View File

@ -0,0 +1,776 @@
This is an assortment of the most common questions and issues Ryujinx users are having as of this document's latest revision date.
Press `CTRL+F` or `F3` and search for any keywords or errors you may be interested in. If your question, error or issue is not addressed here, please [join Discord](https://discord.gg/ryujinx) and well answer it there, and perhaps add it to this page.
## Table of Contents
[Frequently Asked Questions](#frequently-asked-questions)
[Common Errors and Troubleshooting](#common-errors-and-troubleshooting)
[Game-Specific Errors and Troubleshooting](#game-specific-errors-and-troubleshooting)
## Frequently Asked Questions
### **• Where's the prod.keys file?/Where can I download [game]?**
**We do not support piracy.** It is forbidden to request copyrighted content (Firmware/Games/Keys/Shaders) on our repositories or on the Ryujinx Discord.
### **• Do I need a Switch to use this emulator?**
Ryujinx emulator is capable of running many homebrew applications, and can be a crucial tool in the development and debugging of homebrew applications and games. To play commercial games, you will need access to a Switch compatible with custom firmware (CFW), which will enable you to dump your system firmware, keys and legally purchased games.
### **__• What does "dumping" mean?__**
In this context, to dump files is to transfer them from your hacked Nintendo Switch to your PC, using either a microSD card or a USB-C cable.
### **__• How can I dump my firmware/games/keys?__**
First, you need to hack your Nintendo Switch, which you can learn how to do here: [https://nh-server.github.io/switch-guide/](https://nh-server.github.io/switch-guide/).
Once you have hacked your Switch, [backed up your keys](keys.md)
and [dumped your firmware](https://github.com/ryujinx-mirror/ryujinx/wiki/Firmware-Dumping-Guide-(TegraExplorer-or-hbmenu-&-Goldleaf)),
you may use the [nxdumptool homebrew](https://github.com/DarkMatterCore/nxdumptool/releases) on your Switch to dump your games, updates and DLC files.
### **__• Why use an emulator if I already have a Switch?__**
1. To play in 4K/higher resolutions than the Switch.
2. Allows multiple different controllers to be used.
3. Smoother/higher FPS with good enough hardware.
4. Play over the internet with LDN on games that support local wireless.
5. Modding games is faster and easier than on Switch.
6. Don't need a capture card to stream or record.
7. Easily use older updates of games you've dumped before if something you want gets patched.
8. Convenience: you avoid having several consoles plugged in and switching between them to play what you want.
9. Years down the line, online shops and services will close, and hardware will start breaking down, but emulation and digital dumps wont; in the future, the console and its games will be preserved digitally thanks to Ryujinx and your game backups that you created in the present, even after the system is long dead and your console has become a paperweight.
### **__• How well does [game] run on Ryujinx?__**
You can find compatibility reports here: [https://github.com/ryujinx-mirror/ryujinx-Games-List/issues](https://github.com/ryujinx-mirror/ryujinx-Games-List/issues)
If you wish to contribute, you can open a new issue if the game has never been added, or you can add your test results as a comment on a game's issue for it to be merged into the top post, as long as it contains all the necessary information.
### **__• What are the optimal best settings?__**
Default settings and Vulkan if your GPU supports it. Ryujinx works out of the box and is already on the best settings by default.
You can of course tinker with the graphics settings (resolution, antialiasing, scaling filter, anisotropic filtering) so you can achieve the proper image quality for your setup, but **you shouldnt change anything else** unless specified in compatibility entries or instructed by a staff member. Youre very likely to make performance worse (and in a few cases, crash) if you do.
### **__• I have no idea what I'm doing. How do I Ryujinx?__**
Follow the Ryujinx Setup & Configuration Guide:[ https://github.com/ryujinx-mirror/ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide](https://github.com/ryujinx-mirror/ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide) or see the Readme:[ https://github.com/ryujinx-mirror/ryujinx/blob/master/README.md](https://github.com/ryujinx-mirror/ryujinx/blob/master/README.md) .
If you are still having trouble, please visit a support channel on our [Discord Server](https://discord.gg/VkQYXAZ) and we will be happy to assist.
### **__• How do I add games to Ryujinx?__**
Add a games directory in `Settings` > `User Interface` > `Game Directories` > `Add`.
![games directory](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/cd3091c3-1423-4f68-9389-cc4b8e9114ad)
The games dont have to show up on the window where you are selecting the folder, as its looking for folders, not game files.
If after selecting the correct game directory your games still do not show up on the main Ryujinx window, either your games arent in the correct format or youve chosen the wrong directory.
### **__• How can I use a single joycon/DS4/DS5/PS4/PS5/Pro Controller/Xbox controller on Ryujinx?__**
All of these controllers are supported natively. Simply head to `Options` > `Settings` > `Input` > `Player 1` > `Configure`, select your gamepad from the `Input Device` dropdown, click `Load` top right, then click `Save`.
### **__• How can I use dual joycons on Ryujinx?__**
You need [DS4Windows](https://github.com/Ryochan7/DS4Windows/releases/) for the joycon pair to show up on Ryujinx (they will be an "Xbox" controller under input devices). On DS4Windows, select joycon support and enable the UDP server for motion controls.
### **__• How can I use a GameCube controller on Ryujinx?__**
You will need [Delfinovin](https://github.com/Struggleton/Delfinovin).
If your joysticks dont work, spin them for a bit until they do.
### **__• How can I play with mouse and keyboard controls?__**
Mouse controls are not currently supported. You can make do with something like mouse2joy or reWASD, but the vast majority of our users have preferred controller gyro over this workaround.
### **__• How can I unbind a button/key?__**
Left click on the binding then press middle click on your mouse.
### **__• Help! Why is the emulator crashing?__**
Refer to the [troubleshooting](#common-errors-and-troubleshooting) and [game-specific](#game-specific-errors-and-troubleshooting) sections below.
If you cant find your issue in this page: join our [Discord server](https://discord.gg/ryujinx), provide an explanation of the issue and upload a .log file to the appropriate support channel. Our staff will take a look and give you some pointers on what's going wrong.
### **__• How can I lower the resolution?__**
Disable docked mode or set a custom resolution multiplier of 0.xx (for example: `0.75`) or 0,xx (`0,75`), depending on what your language uses.
Though if youre trying to improve performance by doing this, keep in mind it will only work in the unlikely scenario that your GPU is the bottleneck. The vast majority of the time, emulation is CPU-bottlenecked, as it mostly runs on CPU.
### **__• Game runs really slow for me. What can I do to increase the FPS?__**
Make sure your graphics card drivers and Ryujinx are up to date.
If you have an AMD or Intel graphics card, you should always use the Vulkan backend instead of OpenGL. You may also dual boot Linux if you're still experiencing issues, as Mesa drivers are usually less buggy than AMD/Intel Windows drivers.
You may also be experiencing shader compilation stuttering (see the below answer), in which case, the more you play, the less of a problem itll be, as the shader cache will build up and the stutters will slowly go away.
If your game is still slow, you might need to get a better PC or wait for emulator optimizations.
### **__• What are shaders and why do I need them?__**
Shaders are small programs used in videogame rendering. In modern emulation (and even some PC games), every time a new model or effect shows up on screen, its shader needs to be compiled (read: translated) for your GPU. While the shader is being compiled, the game needs to pause, which you will know as shader compilation stuttering. Once the shader has been compiled, it gets stored in a shader cache, which will ensure you dont stutter the next time that shader comes up.
Unfortunately, shader compilation is not easy to circumvent. Vulkan is significantly faster at shader compilation than OpenGL thanks to SPIR-V, Vulkan's shader backend. On first runs we recommend letting games play out opening cutscenes and then restarting, or running anything that makes them play themselves, such as automatic racing in MK8 or bot matches in SSBU. This will compile some shaders and, with a fast enough CPU and Vulkan, the hiccups will be greatly reduced.
### **__• How do I enable asynchronous shader compilation/async shaders?__**
Asynchronous shader compilation introduces graphical glitches, which sometimes dont go away until a restart, and does not actually eliminate stuttering completely; as such, the Ryujinx developers have no plans to implement this feature. However, outside contributors are welcome to write and open a pull request for it, and it will be reviewed, approved and added to the main builds if it's up to Ryujinx standards.
### **__• Why is my game 30fps?__**
Because the game you're playing is a 30fps game.
### **__• How do I uncap the framerate?__**
`F1` uncaps fps, or `Tab` if you have an older install. You can also click `Vsync` at the bottom left of the status bar in windowed mode.
### **__• But now my game is going too fast! How do I make it normal speed?__**
The vast majority of Nintendo Switch games have their physics and speed tied to the framerate, and as such, increasing the framerate increases the game speed. In these cases, you need to find a 60fps mod (or whatever target you want; some 120fps mods exist) for your specific game.
You also have to keep in mind that these mods may be static, which means going under the target may cause the game to run in slow motion. If your hardware cant run a game at that target, you will be better off not using framerate mods.
### **__• How do I install mods for a game?__**
Right click the game > `Open Mods Directory`. Extract your mods here. Folder structure should be `Ryujinx` > `mods` > `contents` > [game ID] > [mod name] > `exefs` or `romfs` > mod files.
![image3](assets/232947929-2532b894-5c3f-4924-a4c8-0114bc2dfd6d.png)
Afterwards, right click the game and click on `Manage Mods` to ensure that the mods are enabled before playing.
![mod manager](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/eb004241-a52e-4127-9acd-e9e1aa1539b0)
If the mods don't work in-game, they are most likely not for your version of the game.
### **__• How do I install cheats for a game?__**
Right click the game > `Open Mods Directory`. Create a folder named `Cheats`, and inside it, create a .txt file with the first 16 characters of the game versions build ID as the file name. The BID is usually mentioned somewhere in the same page as the cheats themselves, but if you can't find it, it can be obtained from the cheat manager.
![image](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/181d9ab3-7a20-49fa-b6b8-1f8dc8d62e17)
![image](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/1f46d557-b962-4168-abaa-9b58ac66c350)
Open the .txt file and add your cheats into it. Afterwards, right click the game > `Manage Cheats` and enable the ones you want to use. You can also manage them during gameplay by going into `Actions` > `Manage Cheats`.
If the cheats don't work in-game, they are most likely not for your version of the game.
### **__• What are the hotkeys/"keyboard shortcuts" in Ryujinx?__**
- `ESC` exits the emulation.
- `F1` toggles Vsync (read: framerate cap).
- `F2` toggles mute/unmute.
- `F4` unhides the UI. It doesnt hide it so as to avoid accidents.
- `F5` pauses and unpauses emulation.
- `F8` takes a screenshot at the internal resolution the game is rendering at (and not at the screen resolution). The screenshots are saved in your systems pictures folder (ex. `C:\Users\yourname\Pictures\Ryujinx`) or in `portable\screenshots` if youre using a portable install.
- `F9` toggles docked/handheld mode.
- `F11`/`Alt+Enter` toggles fullscreen.
There are also hotkeys for increasing and decreasing resolution scaling, and increasing and decreasing sound volume, but they are unbound by default. Most of these are exposed and configurable in the Avalonia UI, and there's an [open pull request](https://github.com/ryujinx-mirror/ryujinx/pull/4503) to add the remaining ones.
### **__• What is Avalonia?__**
Avalonia is a user interface framework. We have been developing a new Avalonia-based UI for quite some time now, and we plan to completely remove the old GTK UI soon.
### **__• Where can I try this Avalonia thing?__**
As of 1.1.1217, Avalonia has become the default UI.
### **__• Does Avalonia autoupdate?__**
Yes.
### **__• How do I update the emulator?__**
Click on `Help` then `Check for Updates`.
### **__• How do I report a bug?__**
If you've found a bug, please first make sure it's not been reported on the [main issue tracker](https://github.com/ryujinx-mirror/ryujinx/issues) or on the [game compatibility list](https://github.com/ryujinx-mirror/ryujinx-Games-List/issues). Then post a comment in the game's compatibility entry with a screenshot, a log and a save file, along with an explanation on how to reproduce the issue. This allows our developers to quickly look into bugs, without having to worry about how to reproduce them.
### **__• How well does Ryujinx run on macOS?__**
Apple Silicon macOS devices, such as the M1 or M2, can run Ryujinx with good playability across many titles.
Intel Macs have a lot more issues due to old, deprecated drivers or unsupported hardware. A lot of integrated Intel GPUs (5th gen or older) dont support the necessary Vulkan featureset to work.
On Intel Macs with AMD GPUs or newer Intel iGPUs, you likely want to either dual boot Linux or use Boot Camp to run Windows, as macOS drivers for these graphics cards leave much to be desired.
Keep in mind Ryujinx needs bare metal access, so it won't run on a VM without some kind of GPU passthrough.
### **__• Can I run Ryujinx on iPhone/iPad/iOS?__**
No. iOS heavily restricts JIT, does not completely support .NET runtime and does not give apps sufficient RAM to run something such as Ryujinx, plus sideloading has plenty of issues, among other things. The iOS space needs to change significantly before Ryujinx on iOS is even a consideration.
### **__• Can I run Ryujinx on Android?__**
No. While we would love to see Ryujinx on Android devices, our priorities currently lie in improving the core experience for Windows, Linux and macOS users.
### **__• Can I run Ryujinx on Xbox Series X?__**
No. It requires a DirectX renderer, which Ryujinx does not have at the moment. There are also RAM limitations and some graphics features that Ryujinx needs arent supported on DirectX, among other things.
### **__• When is [feature] coming?__**
We dont like giving ETAs, as all of our developers work on Ryujinx in their free time, and you can never know when something will be entirely ready in open source projects in general.
If you would like to help speed up the process, we currently have a [Patreon](https://www.patreon.com/ryujinx/membership) goal that, when reached, will help gdkchan, the main developer and project lead, to become a full-time developer.
### **__• Has [feature] been implemented/[bug] been fixed yet?__**
You can search for it by pressing `CTRL+F` or `F3` on our changelog page: https://github.com/ryujinx-mirror/ryujinx/wiki/Changelog
### **__• How can I create a Mii?__**
`File` > `Load/Open Applet` > `Mii Editor`. You cant create them from in-game as Ryujinx doesnt support loading applets during gameplay yet.
### **__• How can I use an Amiibo?__**
Go in-game to where it asks you to scan one, then click on `Actions` > `Scan an Amiibo`.
### **__• Where can I find a game's save files?__**
Once you have [added a games directory](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-how-do-i-add-games-to-ryujinx), right click a game and select `Open User Save Directory` or `Open Device Save Directory`. Most games utilise a user save, but some games use a system save; for example Animal Crossing.
![saves](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/3aad07fb-98e4-49b7-a6fa-bd9e6acdcd48)
Save files are all compatible across Switch devices and all Switch emulators, so you may copy and paste them anywhere and they will still work.
### **__• Where can I find ALL game save files?__**
`C:\Users\yourname\AppData\Roaming\Ryujinx\bis\user\save\` or `\portable\bis\user\save` if you're on a portable install.
### **__• Why are the save folders all sorted by some weird numerical order instead of having their game IDs?__**
This is how the Switch itself does it. We are merely trying to emulate the Nintendo Switch filesystem properly.
### **__• Can I extract data from a game using Ryujinx?__**
Once you have [added a games directory](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-how-do-i-add-games-to-ryujinx), right click on a game > `Extract Data`, choose the section you want to extract, then select the folder you want to extract it to.
DLC data is NOT extracted currently.
### **__• Why is the option to extract data greyed out?__**
It's disabled on the LDN builds. Use the main Ryujinx build.
### **__• What is FIFO% and how do I lower it?__**
FIFO (First In First Out) is the emulated GPU's command queue. Higher percentage means the commands are taking longer to be processed by your CPU/Ryujinx, lower percentage means the command queue is not the limiting factor. The acronym describes the order in which the commands are processed.
To reiterate, this is **not** GPU usage, it's the emulated Nintendo Switch's GPU commands, which are processed by your CPU (as is most of the stuff in an emulator) and then fed to your GPU in order to present an image.
### **__• How does CPU usage work in Ryujinx?__**
Ryujinx has 1:1 guest to host threads (but a scheduler keeps only one active per 4 cores at a time), there is one GPU command processing thread, there is optionally one GPU backend thread, there are up to 8 shader background compile threads, there is a dynamic number of JIT highcq background threads, and there are an unbounded number of ASTC decompression threads.
### **__• How do I build a PR?__**
To build a pull request, first of all [download and install the .NET SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0). Go to the top of the PR > click the link after "from" (ex. `gdkchan:true-gmem`), click the green `<> Code` button > `Download ZIP`, extract it, open the extracted folder, `shift+right click` on an empty area of the folder, then click `Open PowerShell window here`, type `dotnet publish -c Release` and click `Enter`. After its done, the window will say where it put the files. If you still cant find them, search for `Ryujinx.exe`, or `Ryujinx.Ava.exe` for the Avalonia build.
### **__• How do I play online multiplayer?__**
With our LDN build, which allows playing games that feature local wireless or local play, simulating 2 consoles being within close proximity to each other, with other Ryujinx LDN players over the Internet.
See the Multiplayer Guide here:[ https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide](https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide)
### **__• When I click on connect to the internet, Ryujinx doesnt connect?__**
See the multiplayer guide above. Youre not supposed to click on anything that mentions “online” or “the internet” in-game as that leads to Nintendo servers; youre supposed to find the local play/local wireless/play locally option, which is then used to connect over the internet with other Ryujinx users.
### **__• What multiplayer modes does Ryujinx support and what are the differences between them?__**
**LDN**/local wireless/local play is an ad-hoc WiFi connection between 2 or more consoles in close proximity. [A ton of games](https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide#how-to-play-ldn) have this on the Switch. We use this to connect Ryujinx instances over the internet.
**ldn_mitm** makes LDN/local wireless/local play behave as if it were LAN, allowing for same-network (local) connections. This can be used to connect Ryujinx with hacked consoles that have [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm/releases) installed on them. If you use [XLink Kai](https://www.teamxlink.co.uk/wiki/Ryujinx_XLink_Kai_Setup), you can connect via ldn_mitm with other Ryujinx and hacked Switch consoles through the internet, not just locally.
**LAN** is 2 or more systems connecting through an access point locally. About [15 games](https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide#lan-mode-games) have this on the Switch. Games with a LAN mode can connect with **any consoles or Ryujinx instances** on the same network. If you use [XLink Kai](https://www.teamxlink.co.uk/wiki/Ryujinx_XLink_Kai_Setup) or a VPN like [Zerotier](https://www.zerotier.com/download/), you can connect LAN games across any Ryujinx instances, Switch consoles and other emulators through the internet, not just locally.
Nintendo Switch Online is not supported. Custom servers that replicate Nintendo Switch Online are not supported.
### **__• How can I connect Ryujinx to a Switch?__**
Read the above answer, specifically the LAN and ldn_mitm parts.
Hacked consoles can use both LAN and ldn_mitm. To connect with unhacked consoles, the game needs to include a LAN mode. At the time of writing, only [a handful of games](https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide#lan-mode-games) support LAN mode on Switch; if the game youre playing is not one of them, **you cant connect them to an unhacked Switch** yet. It may become possible in the future.
### **__• Can I play online with my friend whos using a Nintendo Switch?__**
See the previous two answers. To play with a Nintendo Switch over the internet, youre gonna need XLink Kai or a VPN like Zerotier, and also, if the game doesnt have a LAN mode, the Nintendo Switch will need to be hacked as you will need to use ldn_mitm. There is currently no way to hook up a Nintendo Switch console to Ryujinxs LDN servers. However, in the future it may be possible to connect a PC to an unmodded Switch via LDN locally, without the need for ldn_mitm.
### **__• Can I trade Pokémon between Ryujinx and my Switch?__**
If the Switch isn't hacked, you can only do it on Pokémon Sword and Shield. However, an update to the game (not to Ryujinx) broke LAN mode, and it only works for a select lucky few.
### **__• Why do we keep disconnecting?__**
Some games are extremely finicky and will disconnect the moment anyones framerate drops, like Mario Kart 8 Deluxe. This includes shader compilation stuttering, so every player will have to play through every track in single player mode first, in order to cache shaders, and also ensure that they can maintain 60fps on every stage. Remember to keep Vsync enabled as well, since it acts as a framelimiter.
### **__• Im playing with a friend and why is it so laggy?__**
Real world distance still applies, so if youre in different continents or just really far away from each other on the Earth, then you will have the corresponding latency.
It can also be that a P2P connection was not formed and youre connecting via the master server, which will of course increase latency as well. If this is happening, you can try connecting using ldn_mitm in conjunction with either XLink Kai or a VPN like Zerotier, which would allow you to connect to each other directly.
If youre playing Super Smash Bros. Ultimate, the game has latency baked into it and pretty bad netcode. Most Smash players use Parsec instead of LDN to play together, so you could try that instead.
### **__• What does LDN stand for?__**
Nobody actually knows, but our best guess is “Local Direct Network” or "Local Distance Network". Nintendo internally refer to local wireless functionality as “LDN”, but the full name is never used.
### **__• Can I make Ryujinx into a portable install?__**
Yes! See the [portable mode quick reference guide](https://github.com/ryujinx-mirror/ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide#portable-mode).
### **__• Whats a portable install?__**
By default, Ryujinx uses your `C:\Users\yourname\AppData\Roaming\Ryujinx` directory for storing firmware, keys, save files, configs, caches etc. If you make a folder named `portable` in the same directory as the Ryujinx executable, the emulator will use that folder instead of the AppData one to store all those files. This is useful if you would like to keep everything in one place, or to avoid settings resetting or shaders constantly rebuilding if youre testing multiple different Ryujinx versions.
### **__• How can I support Ryujinx?__**
There are many ways to support or contribute to Ryujinx. You can support us through Patreon (https://www.patreon.com/ryujinx) or you can boost the server with Discord Nitro. If you know how to help somebody in support, you can help us by answering questions there. You can help with testing future changes to the emulator in Discords #pr-testing channel or in a PRs discussion page as well.
If you are a developer, there are [Good First Issues](https://github.com/ryujinx-mirror/ryujinx/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) listed on our issue tracker. We do encourage you to talk to some devs in our Discords development channel before setting off, so we can confirm your work isn't conflicting with another user's, and so we can help you get used to the codebase and what needs to be done with various issues.
## **Common Errors and Troubleshooting**
Most of the errors below will be displayed on the console or log files. To view your log files, go to `File` > `Open Logs Folder`. Youll likely want to open the biggest and latest one of the 3 files.
![image-3](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/62f441b2-c8d3-4f99-b5f4-36d445c72542)
![image](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/30c8e179-16a8-47db-ac19-8829001cb928)
### • Cant open Ryujinx: `|E| Application : Unhandled exception caught: System.TypeInitializationException: The type initializer for 'Gtk.Application' threw an exception. ---> System.DllNotFoundException: Gtk: libgtk-3-0.dll, libgtk-3.so.0, libgtk-3.0.dylib, gtk-3.dll`
This error is specific to the old GTK UI. As of 1.1.1217, Avalonia has become the default, so please redownload Ryujinx if possible. If you're on an old, unsupported version:
Some emulator files are missing. Redownload Ryujinx, make sure its extracted properly and dont put it on the desktop or the root of a drive, as those are protected folders. Third party antivirus software can also randomly delete these files, so if you have one, make exceptions for Ryujinx or uninstall the antivirus.
### • Cant open Ryujinx: `|E| Application : Unhandled exception caught: GLib.GException: Unrecognized image file format at Gdk.PixbufLoader.Write(Byte[] buf, UInt64 count)`
Similar to the above, Ryujinx is most likely in a protected folder. Move it somewhere else.
### • Cant open Ryujinx, console closes without any errors and without opening the main window:
Ensure Ryujinx is not on the desktop or a protected folder and that you don't have any third party antivirus software. This issue has also been reported to have been caused by "defender omega" controllers, so disconnect it if you have one.
### • Crashing after selecting Vulkan, trying to open settings or booting a game using Vulkan with `|E| GUI.RenderLoop Application : Unhandled exception caught: Ryujinx.Graphics.Vulkan.VulkanException: Initialization failed, none of the available GPUs meets the minimum requirements. at Ryujinx.Graphics.Vulkan.VulkanInitialization.FindSuitablePhysicalDevice(Vk api, Instance instance, SurfaceKHR surface, String preferredGpuId) in D:\a\Ryujinx\Ryujinx\Ryujinx.Graphics.Vulkan\VulkanInitialization.cs:line 217`
If you have a system consisting of an AMD Ryzen CPU with an AMD Radeon iGPU (4600H, 4800H, 5600H etc) and an Nvidia dGPU, you need to update **BOTH** graphics card drivers from their respective websites. Not just the dedicated Nvidia one, and not just from Windows update.
https://www.amd.com/en/support
https://www.nvidia.com/download/index.aspx
If your hardware doesnt match the above, its possible your GPU drivers are simply out of date. In the case that they arent, your GPU might not meet the minimum requirements to run Ryujinx, for example any Intel iGPUs 5th gen or older.
### • Crashing after selecting Vulkan, trying to open settings or booting a game using Vulkan with `|E| GUI.RenderLoop Application : Unhandled exception caught: System.NullReferenceException: Object reference not set to an instance of an object. at Ryujinx.Graphics.Vulkan.CommandBufferPool.AddWaitable(Int32 cbIndex, MultiFenceHolder waitable) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Graphics.Vulkan\CommandBufferPool.cs:line 147`
Same as above.
### • `|E| GUI.RenderThread Application : Unhandled exception caught: Ryujinx.Graphics.Vulkan.VulkanException: Unexpected API error "ErrorFeatureNotPresent".`
Similar to the issue above, the emulator cannot detect a graphics card with Vulkan support. Check that your GPU drivers are on the latest possible version, and if they are, then unfortunately your GPU doesnt meet minimum requirements.
### • `|E| GUI.RenderLoop Application : Unhandled exception caught: System.IO.FileNotFoundException: Could not find or load the native library: vulkan-1.dll Attempted: "vulkan-1.dll", "C:\Users\pc\Desktop\publish\vulkan-1.dll" at Silk.NET.Core.Loader.LibraryLoader.ThrowLibNotFound(String name, PathResolver resolver)`
Similar to the issue above, the emulator cannot detect a graphics card with Vulkan support. Check that your GPU drivers are on the latest possible version, and if they are, then unfortunately your GPU doesnt meet minimum requirements.
### • `|E| GUI.RenderLoop Application : Unhandled exception caught: System.NotSupportedException: No supported Vulkan surface found! at SPB.Graphics.Vulkan.VulkanHelper.EnsureInit()`
Similar to the issue above, the emulator cannot detect a graphics card with Vulkan support. Check that your GPU drivers are on the latest possible version, and if they are, then unfortunately your GPU doesnt meet minimum requirements.
### • Crashing after double-clicking any game with `(Ryujinx:18152): Gtk-CRITICAL **: 00:44:23.202: gtk_list_store_get_value: assertion 'iter_is_valid (iter, list_store)' failed 00:00:00.058 |I| Gpu : Backend Threading (Auto): True Marshaling row-activated signal 00:00:00.265 |E| Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at Ryujinx.Ui.MainWindow.LoadApplication(String path, Boolean startFullscreen) in D:\a\Ryujinx\Ryujinx\Ryujinx\Ui\MainWindow.cs:line 718`
This error is specific to the old GTK UI. As of 1.1.1217, Avalonia has become the default, so please redownload or update Ryujinx if possible. If you're on an old, unsupported version:
If the error looks like this, click the game once then press `Enter` or use the Avalonia UI.
![image5](assets/232948327-0bf8e054-b9c2-4b4f-9c96-27177d7e0b2a.png)
### • Crashing after booting a game or crashing after applying an update with `|E| HLE.OsThread.8 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> LibHac.Common.HorizonResultException: ResultFsNonRealDataVerificationFailed (2002-4604): Hash error!`
Your game file, update file or both are corrupted/invalid, you need to [dump](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-what-does-dumping-mean) them again and [ensure nothing goes wrong in the process](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-hangs-on-boot-log-says-e-loader-loadnca-no-exefs-found-in-nca).
- If removing the update works, it's the update file that is corrupted.
- If the error still occurs, it's the game file that is corrupted.
### • `|E| Application : Unhandled exception caught: LibHac.Common.HorizonResultException: ResultFsPartitionSignatureVerificationFailed (2002-4644): Invalid Partition FS type "????" at LibHac.Common.ThrowHelper.ThrowResult(Result result, String message)`
Similar to the above error, the file youre trying to load is not a supported file type or may be corrupt.
### • Crashing after booting a game with `|E| Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> LibHac.Common.HorizonResultException: ResultFsPathNotFound (2002-0001)`
You might be running an update file instead of a game file. See [here](https://github.com/ryujinx-mirror/ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide#managing-game-updates) for how to properly update a game.
Another possible cause is Ryujinx might be forbidden from accessing the save folder for this game. This can be either due to a permission issue, for instance, from being placed on the desktop, the root of a drive or any kind of protected folder; or due to an antivirus not allowing the files to be accessed by the emulator.
### • Crashing with `|E| HLE.OsThread.8 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: System archive with titleid 0100000000000823 was not found on Storage BuiltInSystem. Found in None.`
Your firmware is too old to run the game youre trying to run, and it tried to use files that dont exist in such an old version. Update your keys and firmware.
### • “Ryujinx has encountered an error: System update title was not found in the firmware package.”
The file you're trying to install as a firmware does not contain actual firmware. See the [firmware dumping guide](https://github.com/ryujinx-mirror/ryujinx/wiki/Firmware-Dumping-Guide) for how to dump yours.
### • “RYU-0003: Firmware parsing error Ryujinx was unable to parse the provided firmware. **_This is usually caused by outdated keys_**.”
The error itself tells you. Firmware and keys go hand in hand; if you update your firmware, you need to update your keys too.
### • Crashing on boot with `|E| HLE.OsThread.8 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> LibHac.Common.Keys.MissingKeyException: Missing NCA title key.`
Similar to the above; redump and update your keys.
### • Crashing on boot with `|E| HLE.OsThread.8 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> LibHac.Common.Keys.MissingKeyException: Unable to decrypt title key.`
Similar to the above; redump and update your keys.
### `|E| HLE.OsThread.8 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Collections.Generic.KeyNotFoundException: The given key 'None' was not present in the dictionary.`
Similar to the above; redump and update your keys.
### • `|N| Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> LibHac.Common.Keys.MissingKeyException: Unable to decrypt NCA section.`
Similar to the above; redump and update your keys.
### • Cant open settings/crashing with `|E| Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: An item with the same key has already been added.`
Go to `C:\Users\yourname\AppData\Roaming\Ryujinx\bis\system\Contents\registered` (or `portable\bis\system\Contents\registered` if on a portable install) and delete the contents of the “registered” folder, then reinstall your firmware. If that doesn't work, redump/update your keys.
If you get this error but the below strings mention `PTC`, it means your PPTC is corrupted, in which case right click the game on the games list > `Cache Management` > `Queue PPTC Rebuild`.
### • Game hangs on boot, log says `|E| Loader LoadNca: No ExeFS found in NCA`
When dumping your game, enable “Remove console specific data”, “Generate ticket-less dump” and “Change NPDM RSA key/sig in Program NCA” in nxdumptool.
### • NSP file won't show on the main menu, loading it from file will hang the emulator and log the following warning: `|W| Loader GetNpdm: NPDM file not found, using default values!` followed by these errors: `|E| Loader LoadNsos: Process initialization returned error "InvalidMemoryRegion".` `|E| Loader TryLoad: Unable to load: Could not find Main NCA`
You're trying to load an update file instead of a game file. See [the setup guide](https://github.com/ryujinx-mirror/ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide#managing-game-updates) for how to properly update your games.
### • Ryujinx showing a black screen:
First, make sure that the game you are trying to run is actually supported and that your graphics card is capable of running it.
If you have an Nvidia GPU, go to the Nvidia control panel and click `Restore` to set it to default settings.
If you have an AMD or Intel GPU, update your GPU drivers and use the Vulkan graphics backend.
If you only have an Intel iGPU, make sure it's on a 6th-gen CPU or newer. Older Intel iGPUs do not support the necessary features to run Ryujinx.
If the problem persists, make sure that any external application that could affect rendering is disabled. This includes software which puts an overlay on top of the emulator display window, like the MSI Afterburner overlay or Twitch Studio.
### • Black screen with sound on Nvidia:
Restore your Nvidia control panel global settings to defaults.
![image8](assets/232948458-2f290f24-b27d-4b12-8170-039a32743030.png)
### • Ryujinx window is transparent/see-through:
Disable sharpening under global graphics in the Radeon control panel.
![image](assets/232948514-1df76fe2-9340-40ad-9cae-c84bffb60181.png)
### • Emulator window hanging/not responding after exiting a game:
Close the console window, it will also close the other one. If youve hidden the console, youll need to use the task manager to terminate the Ryujinx process. As of **1.1.848**, this should happen much less frequently.
### • Game crashes with `|E| GUI.RenderThread Application : Unhandled exception caught: Ryujinx.Graphics.Vulkan.VulkanException: Unexpected API error "ErrorOutOfDeviceMemory".`
This means your VRAM was exhausted. Check that your resolution scaling isnt too high; 4x is overkill for virtually every setup.
If youre playing Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder or The Legend of Zelda: Tears of the Kingdom, you might need to enable texture recompression in graphics settings. This is because these games use ASTC textures, which are supported natively without needing to be decompressed on the Switch, but when decompressed on PC can become massive and take up a lot of VRAM.
If youre playing other games and your resolution is on native, it might be an issue with emulating that particular game. Check the [game compatibility list](https://github.com/ryujinx-mirror/ryujinx-Games-List/issues) to see if its been reported, and if not, post a test result.
### • Game crashes with `|E| GUI.RenderLoop Application : Unhandled exception caught: Ryujinx.Graphics.Vulkan.VulkanException: Unexpected API error "ErrorDeviceLost".`
This is a generic Vulkan crash. Theres hardly any information that can be gleaned from it, and the solutions vary wildly from case to case, but most of the time its not something users can fix or workaround.
On Nvidia, some device loss crashes were introduced in driver version **527.37** (not just in emulated games; native PC games too) and, at time of writing, it seems drivers newer than this still have some problems. If you are on newer Nvidia drivers and cant find any mention of these crashes in the compatibility list for your game, it might be worth downgrading the driver version.
On AMD and Intel GPUs, a bigger amount of games have this issue. If updating to the latest drivers doesnt fix it, your best bet will be Linux and Mesa drivers.
### • Game crashing with `|E| HLE.GuestThread.19 Application : Unhandled exception caught: Ryujinx.HLE.Exceptions.GuestBrokeExecutionException: The guest program broke execution! at Ryujinx.HLE.HOS.Kernel.SupervisorCall.Syscall.Break(UInt64 reason) in D:\a\Ryujinx\Ryujinx\Ryujinx.HLE\HOS\Kernel\SupervisorCall\Syscall.cs:line 1873`
This means the game itself crashed, and not the emulator. The cause could be a million different things; however the key for troubleshooting this is not in the error itself, but rather what comes before it.
![image4](assets/232946932-25878047-c64c-4cd6-83bd-44fd9ecccc83.png)
As shown in this example, right before the “guest stack trace”, there will be a short error with a code at the end. There can be many of these as well, but well cover the most common.
- `ResultFsPermissionDenied (2002-6400)` here usually means Ryujinx has been denied access to the save folder for this game. Most of the time its solved if you delete the save folder: Right click the game > `Open User Save Directory`. Backup the contents if you care about the save. Go up 2 levels and delete the selected folder. Run the game again.
- If this doesnt fix it, check that Ryujinx isnt on a protected folder (such as the desktop or the root of a drive) and that a third party antivirus (if you have one) isnt blocking Ryujinx from using the save folder. If all else fails, make a portable install and bring over your caches and saves from the previous install.
- `ResultFsTargetNotFound (2002-1002)` might have the same causes and solutions as those described above.
- `ResultKvdbInvalidKeyValue (2020-0005)`, also similar to the 2 above errors, means the savedata index for the game isnt found, so the savedata is corrupted. Try backing up and then deleting the game's savedata folders. If this doesn't solve it, backup your whole Ryujinx data folder (`C:\Users\yourname\AppData\Roaming\Ryujinx`, or the portable folder if you've made a [portable install](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-whats-a-portable-install)) and then delete it. Then restore the subfolders (caches, save files) you'd like to keep.
- `ResultFsOutOfRange (2002-3005)` usually indicates a bad dump (corrupt game files). If FS integrity checks is disabled and you are getting this error, enable it, run the game again and check if you now get a hash error as described [here](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-crashing-after-booting-a-game-or-crashing-after-applying-an-update-with-e-hleosthread8-application--unhandled-exception-caught-systemreflectiontargetinvocationexception-exception-has-been-thrown-by-the-target-of-an-invocation-----libhaccommonhorizonresultexception-resultfsnonrealdataverificationfailed-2002-4604-hash-error).
- `ResultErrApplicationAborted (2162-0001)` is as generic as it gets. Check your games compatibility list entry or the game-specific troubleshooting entry in this page if you get this.
### • Crashing with `Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.`
This is another generic error. It also doesnt normally show on logs, only on the console when crashing. A possible cause is Ryujinx being in a protected folder or blocked by a third party antivirus. If this is not the case, check the compatibility page for your game.
If you're getting this error when running a game on Vulkan and the below strings mention SDL2, you need to uninstall Gshade or stop it from trying to hook onto Ryujinx. Similarly, if Ryujinx won't open and the below strings also mention SDL2, close Medal.
If you're getting this error on a Rog Ally, go to `Add or remove programs` on Windows and uninstall the "OpenCL, OpenGL, and Vulkan Compatibility Pack".
![image-3](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/37650ca4-be94-4b86-9a6e-f5caf5793ece)
### • `|E| HLE.GuestThread.20 Cpu InvalidAccessHandler: Invalid memory access at virtual address 0x0000000000000000. |E| HLE.GuestThread.20 Application : Unhandled exception caught: Ryujinx.Memory.InvalidMemoryRegionException: Attempted to access an invalid memory region.`
Invalid memory access errors, especially ones with the `0x0000000000000000` address, are usually caused by mod or cheat conflicts. Check that any given 2 (or more) mods or cheats youre using dont modify the same game files, and remove them if they do. This error can also be caused by poorly-made mods that dont work on Nintendo Switch hardware.
Be aware that disabled cheats are still loaded into memory, so that they can be enabled while the game is running; if you are getting this crash and only have cheats but no mods, the issue is likely a conflict among the cheats, **even if theyre disabled**.
### • Inconsistent frame pacing/frame times:
Disable Ryujinx vsync and cap the framerate externally via your GPU driver settings or RivaTuner Statistics Server. Note that this wont work for all games; Super Smash Bros. Ultimate, for instance, speeds up even if you cap the framerate externally, as it relies on the vsync signal to determine game speed.
As of **1.1.739**, frametimes are considerably smoother.
### • Fullscreen framerate is not as smooth as on windowed mode/G-Sync not working:
On the Nvidia control panel, head to `Vulkan/OpenGL present method` and select `Prefer layered on DXGI Swapchain` to enable GSync on a GSync-compatible monitor.
![image](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/f697a9f5-2798-4391-910c-8b5dd3b4414b)
### • RTSS/MSI Afterburner wont hook to Ryujinx:
Open Ryujinx settings before running a game.
### • Controller buttons exit emulation/joystick moves cursor/mouse moves on its own/controller presses keyboard keys:
Shutdown Steam or disable the gamepad configurations you may have active on Steam.
### • Any kind of issue using DualShock 4, DualShock 5 gamepads:
Do not use Betterjoy or DS4Windows, they work with Ryujinx natively and external software may cause issues.
### • Instant communication error trying to play LDN:
Make sure Ryujinx is allowed on your firewall. If it still occurs, disable P2P in multiplayer settings.
### • ldn_mitm won't connect/Ryujinx and Switch wont see each other:
Both Ryujinx and the CFW Switch must be on the same network, timezone setting and game version. Check that Ryujinx is not being blocked by the firewall or a third party antivirus, that you're using a custom user profile on Ryujinx, that youve actually selected ldn_mitm in Ryujinxs multiplayer settings, that you've enabled ldn_mitm on your Switch console and that no passphrase is being used. Try several times as well, since it doesnt always work on the first attempt.
### • Game says save file is corrupted:
If the save is from a newer game version, trying to use it on an older update may cause the game to read it as corrupted. In this case simply exit the emulation and update the game.
If your PC shuts down unexpectedly (blue screen, power outage) while the game is running, the save file might also get corrupted. This is due to Windows keeping the file open at all times, and not just when the game is being saved. As a general rule of thumb, we recommend making frequent backups of your save files, in case something like this happens.
### • `|W| HLE.OsThread.10 ServiceNv Wait: GPU processing thread is too slow, waiting on CPU.`
The wording is a bit unclear. The error refers to the CPU thread that processes the emulated GPU being too slow, and **not** your GPU being too slow. This error mostly pops up during shader compilation, which is normal and you shouldn't worry about.
However, if you're getting it even with shaders cached, that may mean your CPU is a tad slower than what is recommended to run Ryujinx properly.
### • `|W| GPU.MainThread Gpu Log: Shader translator: Shader instruction Votevtg is not implemented` ///`|E| GPU.MainThread Gpu GetInfo: Invalid texture format 0x7FFFF (sRGB: False).`
These are both errors that dont actually affect how any game runs and are safe to ignore.
### • Crashing with `|E| HLE.OsThread.6 Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: No valid channel configuration found!`
Change your audio backend to SDL2 or OpenAL. SoundIO can cause this crash in certain situations.
### • Updated Ryujinx and it didnt restart when clicking “Yes”:
If you are on Windows 11, Windows Command Line needs to be set to `Windows Console Host` instead of `Windows Terminal` for it to work.
### • Ryujinx executable disappeared/deleted itself after updating:
Redownload the emulator and do not update while a game is running or settings are open. Do not extract it to a protected folder such as the desktop. Make exceptions for or uninstall any third party antivirus you might be using.
### • Updated Ryujinx and now the executable/all my files are gone/named “.ryuold”:
Simply head to the website, download the latest version and delete the Ryujinx folder that failed to update, with care not to delete your `portable` folder if you have one.
This may happen if you update while a game is running or while emulator settings are open, if you have a third party antivirus falsely flagging Ryujinx upon updating or if you have Ryujinx on a protected folder, such as the desktop or the root of a drive.
### • Cant connect to the internet/Error Code: 2306-0520 Unable to connect to the Internet. The DNS settings or proxy server may have been entered incorrectly:
Read [here](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-what-multiplayer-modes-does-ryujinx-support-and-what-are-the-differences-between-them). Ryujinx does not support connecting to Nintendo Switch Online (NSO). Any options in a game that prompt you to connect to the internet will almost assuredly try to connect to Nintendo servers, which will not work.
If you are trying to play multiplayer with other Ryujinx users, you will want [local wireless/local play/play locally](https://github.com/ryujinx-mirror/ryujinx/wiki/Multiplayer-(LDN-Local-Wireless)-Guide), which despite the name will work over the internet. If you are trying to play with Nintendo Switch users, you want LAN mode in games that support it, or ldn_mitm which will allow playing with consoles via LDN, though only if theyre hacked.
### • Experiencing audio delay after playing for over an hour:
Pause and unpause emulation (`F5` by default). You may also try changing your audio backend to OpenAL if you're on SDL2.
### • Antivirus flagged Ryujinx as `FileRepMalware`:
Uninstall Avast. Ryujinx is safe as long as you downloaded it from our GitHub or official downloads.
### • Games not loading/freezing after loading caches/PPTC:
Uninstall AVG. Ryujinx is safe as long as you downloaded it from our GitHub or official downloads.
### • Updated Ryujinx and now every game is crashing with `|E| Application : Unhandled exception caught: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Could not map view of backing memory. va=0x0000000008000000 size=0x0000000000010000, error code 998)`
You are using ESET antivirus, so you will need to create a HIPS exception for Ryujinx, in:
ESET > Advanced Settings > HIPS > DEEP BEHAVIOR INSPECTION > Exclusions > Edit > Add the Ryujinx folder (the one with the executable) there.
### • `|E| HLE.GuestThread.22 Application : Unhandled exception caught: Ryujinx.HLE.Exceptions.UndefinedInstructionException: The instruction at 0x000000000bfaeff0 (opcode 0x00000000) is undefined!`
Usually, this error means that a CPU instruction is not implemented, in which case all you can do is wait for it to be implemented. However, `opcode 0x00000000` indicates something is wrong, as thats not a real instruction. If you have this opcode, right click the game > `Cache Management` > `Open PPTC Directory` and delete its contents.
### • Low performance on Linux/Steam Deck:
Ensure you are running Ryujinx through `Ryujinx.sh` and NOT the executable itself.
![image](https://github.com/ryujinx-mirror/ryujinx/assets/79612681/dd1f817d-393b-40e2-8212-e55f9abfe358)
### • Any kind of audio issues/softlocking/crashing on macOS:
Ensure you set SDL2 as the audio backend and that your Mac meets the minimum requirements.
### • Crashing on Mac with `|E| HLE.GuestThread.16 Application : Unhandled exception caught: System.Exception: Unhandled exception from guest kernel with ESR 0x82000086 (InstructionAbortLowerEl). at Ryujinx.Cpu.AppleHv.HvExecutionContext.Execute(HvMemoryManager memoryManager, UInt64 address) in /runner/_work/Ryujinx_Eve/Ryujinx_Eve/Ryujinx.Cpu/AppleHv/HvExecutionContext.cs:line 143`
Update your macOS version.
### • Touch screen not working properly:
Disable docked mode and `Direct Mouse Access`. Touch functionality will not work properly on docked mode for obvious reasons, and `Direct Mouse Access` doesn't allow it to work.
## • LDN Error Codes
| Error code | Description |
| --------------- | ---------------- |
| 2203-0016 | WiFi not available.|
| 2203-0022 | WiFi disabled/LDN unavailable: **download the LDN build, make sure LDN is enabled**. |
| 2203-0032 | Invalid state. |
| 2203-0048 | Invalid client (node) data. |
| 2203-0064 | Connection failed. |
| 2203-0065 | Network wasn't found. |
| 2203-0066 | Connection timeout. |
| 2203-0067 | Not allowed to connect (rejected). |
| 2203-0096 | Invalid argument. |
| 2203-0097 | Invalid object. |
| 2203-0113 | Local game version too low, **you need to update your game**. |
| 2203-0114 | Local game version too high, **the other players need to update their games**. |
| 2203-0144 | Lobby is full. |
| 2318-0006 | Network connection lost: ensure Ryujinx is allowed on your firewall, try restarting your router. |
| 2318-0311 | Local game version is too low, **you need to update your game**. |
| 2318-0312 | Local game version is too high, **the other players need to update their games**. |
| 2618-0006 | Network connection lost: ensure Ryujinx is allowed on your firewall, try restarting your router. |
| 2618-0008 | Invalid state. |
| 2618-0014 | Timeout. |
| 2618-0302 | Invalid client data. |
| 2618-0308 | Generic error occurred. |
| 2618-0309 | Network wasn't found. |
| 2618-0310 | Network is full. |
| 2618-0311 | Local game version is too low, **you need to update your game**. |
| 2618-0312 | Local game version is too high, **the other players need to update their games**. |
| 2618-0313 | WiFi is disabled, enable guest internet access. |
| 2618-0314 | Console fell asleep. |
## **Game-Specific Errors and Troubleshooting**
### Animal Crossing New Horizons
- In-game time is wrong: set your timezone in system settings.
- Crashing on ARM macOS: disable the hypervisor.
### Astral Chain
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
- Game is not the right speed: right click on the games list > `Cache Management` > `Queue PPTC Rebuild`.
### Bayonetta 3
- Stuck in training mode/loading screen in chapter 1: dump your game from your Switch console again, your file is corrupted.
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
- Audio desync during cutscenes: this is unavoidable as the game was not made with stutters in mind, rolling the whole cutscene audio and assuming the video will always play at the same speed. As a result of shader compilation and ASTC texture decoding, there will always be stutters during cutscenes, and the video will always fall behind the audio. In the future, when ASTC texture decoding and shader compilation are improved, it may be possible to minimize the stutters to a point where theyre not noticeable on a fast enough CPU. Currently, the only solution is to watch the cutscenes elsewhere or try to resync the video via speeding it up by toggling Vsync.
### Bayonetta Origins: Cereza and the Lost Demon
- Flickering square artifacts: its a driver issue on Nvidia RTX 3000/4000 graphics cards and on drivers newer than 522.25. Surprisingly, the higher the emulator scaling, the less apparent it is; at 2x its much less noticeable, and at 3x it goes away almost completely.
### FIFA 202anything
- Player indicators are invisible. No solution as of yet.
### Fire Emblem Engage
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
- **There are reports of users corrupting their save files and being unable to progress through chapter 13 due to using certain mods**. Last reported batch of mods used on a broken save file were "arena 100 exp mod, playable emblems mod through cobalt, and battle outfits mod through cobalt". Beware of using these mods on your first playthrough.
### Hyrule Warriors: Age of Calamity
- This game is hard to emulate at an acceptable speed. If youre having bad performance on both backends, all you can do is upgrade your hardware or wait for improvements to Ryujinx.
### Kirby and the Forgotten Land
- Do not use the “No DoF” mod available for this game, as it causes it to hang.
### Luigis Mansion 3
- Requires a [mod for disabling dynamic resolution](https://github.com/ryujinx-mirror/ryujinx/files/14937306/Disable-Dynamic-Resolution.zip) and running on game version 1.0.0 in order to attain the best possible performance.
### Mario Kart 8 Deluxe
- Crashing every other boot: select a default Mii. Having a custom Mii selected will crash every second time the game is launched.
- Communication error during races: every player needs to have cached shaders beforehand and hardware capable of holding 60fps at all times, otherwise after a couple frame drops the game will desync and disconnect.
### Mario Party Superstars
- “Multiple players are using the same save data. Please choose different user profiles”: run the game on version 1.0.0, as the update doesnt currently work on LDN.
- Communication error during matches: every player needs to have cached shaders beforehand and hardware capable of holding 60fps at all times, otherwise after several frame drops the game will desync and disconnect. Luckily this game isnt as prone to desyncs as Mario Kart 8.
- Crashing when trying to use local play: right click the game > `Cache Management` > `Open PPTC Directory`, delete the contents of the folder.
### Mario Strikers: Battle League
- Crashing on boot: use [this mod](https://github.com/piplup55/switch-mods-cheats/raw/master/Mario%20Strikers%20Battle%20League/cutscene%20fix.7z) to bypass the intro video.
### Metroid Dread
- Requires a [mod for disabling FXAA (1.0.0)](https://cdn.discordapp.com/attachments/495758692495523854/896240412107345960/Disable_FXAA.7z) to better increase the resolution in docked mode. This mod is not needed if running on handheld mode.
### Metroid Prime Remastered
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
### Monster Hunter Rise
- Crashing on the loading splash screen on the multiplayer build: you need LDN 3.0.0, as it's currently the only LDN build where Sunbreak (anything newer than 3.9.1) will run. (The game is playable on the main builds.)
- LDN 3.0.0 for Windows: https://cdn.discordapp.com/attachments/801087226649509889/1044298521978876016/ryujinx-1.1.0-ldn3.0-win_x64.zip
- LDN 3.0.0 for Linux: https://cdn.discordapp.com/attachments/801087226649509889/1044298522658353152/ryujinx-1.1.0-ldn3.0-linux_x64.tar.gz
- **Do not use LDN 3.0.0 for other games**, only for this one.
### Nintendo Switch Sports
- Crashing anywhere: you need this PR build https://github.com/ryujinx-mirror/ryujinx/pull/4047
- If the artifacts are expired, you'll need to [build it yourself](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-how-do-i-build-a-pr).
### Octopath Traveler II
- Crashing on boot: disable ignore missing services, queue a PPTC rebuild, delete both caches if that doesn't work.
### Pokémon Legends Arceus
- Game crashes on launch: make sure `Use alternative memory layout (Developers)` is disabled in system settings.
- Controller going crazy/moving to the left/pressing buttons on its own: disable the handheld controller in input settings. Alternatively, disable the player 1 controller if playing on handheld mode. If it still occurs after doing this: Go to `File` > `Open Ryujinx Folder`, delete `config.json` (or `LDNconfig.json` if using LDN version), restart the emulator, open the player 1 settings, select your controller from the `Input Device` dropdown top left, click `Load` top right, click `Save` bottom right, re-add your games directory, click `Save` and run the game.
- If you have invisible models and are on the latest Ryujinx version, then your GPU is probably too old and doesnt support the necessary features to render models in this game. Check if you can update your graphics drivers and ensure you're on the latest Ryujinx build.
### Pokémon Let's Go Pikachu/Eevee
- This game can only be played with single joycons in docked mode. To play with a normal controller, you need to disable docked mode and configure the handheld controller in input settings.
### Pokémon Scarlet/Pokémon Violet
- Game crashes on launch: make sure `Use alternative memory layout (Developers)` is disabled in system settings.
- Controller going crazy/pressing buttons on its own: disable the handheld controller in input settings. Alternatively, disable the player 1 controller if playing on handheld mode. If it still occurs after doing this: Go to `File` > `Open Ryujinx Folder`, delete `config.json` (or `LDNconfig.json` if using LDN version), restart the emulator, open the player 1 settings, select your controller from the `Input Device` dropdown top left, click `Load` top right, click `Save` bottom right, re-add your games directory, click `Save` and run the game.
- Cant click on director Clavell on the electric gym challenge: increase your stick deadzone to `0.15`-`0.20` in input settings.
- To play the special event raids for Pikachu, Charizard, Greninja, Iron Leaves, Walking Wake, Scrumbling Jumblo, Poffin McGuffin etc: you can inject them into your save file using pkhex. They will also not be tied to a timeframe if you do this, which means you can do any of them at any moment.
### Pokémon Sword/Pokémon Shield
- LAN mode doesnt work: it's been reported that players must update their Wild Area news files via pkhex for LAN mode to work properly.
### Sonic Frontiers
- Flashing textures: only happens on AMD GPUs on Windows, its not an issue on Linux with Mesa drivers.
### Sonic Origins
- Crashing/freezing: theres no fix yet.
### Splatoon 2
- Cant level up or get weapons: NSO is not supported and therefore its impossible to level up on Ryujinx. You need to download a save file with gear already unlocked or transfer your own from your Switch.
### Splatoon 3
- Softlock on the yellow/purple loading screen: disable guest internet access. If you want to use LAN mode, you have to enable guest internet access when youre in the Shoal, not before booting the game.
- Cant level up or get weapons: NSO is not supported and therefore its impossible to level up on Ryujinx. You need to download a save file with gear already unlocked or transfer your own from your Switch.
### Super Mario Bros. Wonder
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
- Crashing on the LDN build: this game does **not** have LDN. If you would like to play multiplayer over the internet, use Parsec.
### Super Mario Maker 2
- Cant connect to course world and download levels: you need a save file with the levels already loaded into it, as NSO is not supported.
### Super Mario Odyssey
- Do not use “Disable Dynamic Resolution” mods with this game. They are not needed and might cause issues.
- In case of abnormally low performance, purge your shader cache.
- Cant scan an Amiibo: this game needs you to hold the `D-pad right` button first, as it asks on screen.
### Super Smash Bros. Ultimate
- This game has some performance issues due to the fact that NROs arent cached by the emulator. Unfortunately theres nothing that users can do about it at the moment.
- This issue does not exist on ARM macOS devices running with the hypervisor enabled.
- Input lag/laggy connection: this game has really bad netcode, which also manifests during LDN games. Most Smash players use [Parsec](https://parsec.app/) instead, as that doesnt interact with the games own network code.
- Stuck on infinite loading when creating local play match: Skyline blocks LDN connectivity, which means you cant play LDN with mods unless every player attaches a [Skyline logger](https://github.com/Coolsonickirby/skyline-logger-files/releases
), which disables this blocker. Alternatively, as mentioned above, use [Parsec](https://parsec.app/).
- Black screen/softlock on boot when using mods: disable guest internet access.
### Taiko no Tatsujin
- Crashing after accepting User Agreement: you need to accept the first User License agreement and **not** accept the second Data Analysis Policy to launch the game.
### The Great Ace Attorney Chronicles
- Black screen: set resolution scaling to native.
### The Legend of Zelda: Breath of the Wild
- While this game runs perfectly fine on Ryujinx, we always recommend playing the Wii U version on [Cemu](http://cemu.info/) if possible, as its the superior experience. If youve already made progress on your Switch save, you can convert it to a Wii U save with the [BotW save manager](https://github.com/DeltaJordan/BotW-Save-Manager/releases).
- 20fps lock: if the game cant hold 30fps, it will lock to 20. This is how the game works on both Wii U and Switch. You can use a [30fps mod (for 1.6.0)](https://cdn.discordapp.com/attachments/835681932703563826/850475511805509662/BOTW_30_FPS.zip) to stop this from happening.
- Crashing on ARM macOS: disable the hypervisor.
### The Legend of Zelda: Links Awakening
- Requires a [“60fps” mod](https://cdn.discordapp.com/attachments/356187763139280896/724250990928461834/Stable-60fps-v2.zip) to stabilise performance.
### The Legend of Zelda: Skyward Sword HD
- Audio issues seem to appear on slower CPUs.
### The Legend of Zelda: Tears of the Kingdom
- 20fps lock: if the game cant hold 30fps, it will lock to 20. This is how the game works on Switch. You can use the dynamic fps mod included with [Ultracam](https://gamebanana.com/mods/480138) to stop this from happening. As of **1.1.802**, this should happen much less frequently.
- Blurry graphics: the game uses both FSR and FXAA, which don't work that well with resolution scaling. You can use the mods included with [Ultracam](https://gamebanana.com/mods/480138) to workaround the issue.
- Crashing with `ErrorOutOfDeviceMemory`: [see above](https://github.com/ryujinx-mirror/ryujinx/wiki/FAQ-and-Troubleshooting#-game-crashes-with-e-guirenderthread-application--unhandled-exception-caught-ryujinxgraphicsvulkanvulkanexception-unexpected-api-error-erroroutofdevicememory).
- Crashing with `ErrorDeviceLost`: this can happen on older Nvidia drivers, in which case update them to version **516.94** or newer, or use OpenGL.
- Crashing with `|E| GPU.MainThread Application : Unhandled exception caught: System.NullReferenceException: Object reference not set to an instance of an object.', '`: you are using a certain broken mod called "Visualfixes", remove it.
- Still crashing after removing faulty mods: right click the game > `Cache Management` > `Open PPTC Directory` and delete its contents.
- Infinite saving/loading: close any programs that could be accessing your save and restart explorer.exe in Windows task manager.
- Fast cutscenes/no audio/softlocking/black screen on power selector: don't use outdated 60fps mods, use the dynamic fps mod from [Ultracam](https://gamebanana.com/mods/480138) as specified above.
- Rainbow corruption all over the landscape: you have a Polaris (AMD RX 500/400) GPU. Use Linux or buy a functional card.
- Sky islands have a weird outline: this is an upscaling issue. There exist mods that work around this. [Ultracam](https://gamebanana.com/mods/480138) also includes resolution mods which will increase the native resolution of the game; those can be used instead of the Ryujinx upscaler.
### The World Ends With You -Final Remix-
- Cant defeat Pig Samba enemy that is asleep: `Actions` > `Simulate Wake-up Message`
### Xenoblade Chronicles: Definitive Edition
- Game looks blurry even with upscaling: this game has an antialiasing implementation that does not scale properly. You can either run Vulkan and use the `lib_nx.ini` graphics settings mod to disable the antialiasing and use emulator resolution scaling, or run OpenGL and use the `lib_nx.ini` graphics settings to increase the internal resolution of the game.
### Xenoblade Chronicles 2
- Game looks blurry even with upscaling: this game has an antialiasing implementation that does not scale properly. You can either use the `lib_nx.ini` graphics settings mod to disable the antialiasing and use emulator resolution scaling, or use the `lib_nx.ini` graphics settings mod to increase the internal resolution of the game.
- Mods not working: if you have the Torna DLC in digital format, you need to create a folder with the game ID that ends in 9001 add the mods in the folder. It should be right below the one that opens when clicking on `Open Mods Directory`.
- Softlocking on save menu: save very frequently, use the Blade awakening menu instead of the save menu (opening core crystals saves the game). This issue also exists on console, but its made more frequent by emulation.
### Xenoblade Chronicles 3
Play this game on Vulkan, otherwise you will not watch the cutscenes.
- Crashing when opening the menu or scrolling through character menus: bind a ZL shortcut for the save menu and save from there instead of opening the menu normally and quicksaving, and always save before trying to open the menu normally or before trying to do character customization.
- There are 2 different crashes going on here. However, the crash when scrolling through character menus seems to be fixed as of version 1.3.0 of the game.
- Game looks blurry even with upscaling: this game has an antialiasing implementation that does not scale properly. You can use graphics settings mods to enable emulator scaling or to increase the internal resolution of the game. For the latter, keep emulator scaling on native.

1
docs/src/index.md Normal file
View File

@ -0,0 +1 @@
# Ryujinx

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,38 @@
Thanks to Candy for providing the guide details & images. Loosely based off of [NH Switch Guide](https://nh-server.github.io/switch-guide/extras/updating/#updating-emummc-by-dumping-an-updated-firmware-from-your-sysmmc).
What you will need:
- The latest release of [TegraExplorer](https://github.com/suchmememanyskill/TegraExplorer/releases) (the `.bin` file)
---
1. Make sure your sysMMC is up to date. If your sysMMC is not up to date, update it through System Settings.
2. Boot your Switch into RCM.
3. Using a Payload Injector, such as TegraRcmGUI or fusee-interfacee-tk, inject the TegraExplorer.bin Payload (like you would with Hekate).
![Screenshot 2022-12-03 at 10 45 13 PM](assets/205474096-25049c51-9659-4122-a4f1-c2fc2eb00a4d.png)
4. Using the joystick and the A buttons, select `FirmwareDump.te`.
![Screenshot_0a75c7c9](assets/205474107-a103b5e8-6b31-42f2-ba34-a798172931cb.png)
5. Select `Dump sysmmc`.
![Screenshot_0ad4061c](assets/205474109-8c5fb59c-99c8-42a3-afbb-4da61865335b.png)
6. Wait about 1-2 minutes for the tool to dump your firmware.
![Screenshot_0d9ca2b9](assets/205474110-14016849-477b-486b-989f-6b713ec9cc74.png)
7. When the tool finishes, press any button.
8. Select `Power off`.
![Screenshot_2dec46de](assets/205474112-5e6bcb81-a46e-40ff-85df-4edea0f0a66a.png)
9. Remove the SD card from your Switch, and insert it into your PC.
10. A folder containing your firmware should now exist at `/tegraexplorer/Firmware/<version-number>`
![Screenshot 2022-12-03 at 11 09 38 PM](assets/205474104-0aba8839-aee8-4ad9-bdbe-ac07e390d73a.png)

667
docs/src/setup/index.md Normal file
View File

@ -0,0 +1,667 @@
This article assumes you have already **[hacked your Nintendo Switch](https://nh-server.github.io/switch-guide/)** and **[dumped your Nintendo Switch keys](../keys)** (prod.keys) and firmware file(s).
This guide also illustrates how to use an untrimmed game cartridge dump (XCI file) to install firmware directly to Ryujinx. If you would prefer to dump the firmware standalone, you may follow this **[firmware dumping guide](firmware-dumping)**.
If you haven't already downloaded Ryujinx, get the latest version from the releases page.
<!-- Ryujinx checks for updates automatically at startup. You can disable this feature in *Options > Settings*. You can also check for updates manually by navigating to `Help > Check for Updates`. -->
## Preface
Ryujinx comes pre-optimized by default. If a particular menu option is not mentioned in this guide, it should be ignored and not changed unless directly instructed by Ryujinx staff.
***When requesting support on the Ryujinx official Discord server, you will usually be asked for your log file. With this in mind, Logging should be left at default settings (enabled) for everything except debug logs. Do not enable debug logs unless specifically instructed by Ryujinx staff.***
## System Requirements
In order to use *Ryujinx* your computer will need:
- At least 8GB RAM
- A GPU supporting OpenGL 4.5/Vulkan 1.2 or higher
- Your **prod.keys** and either your **[dumped firmware](firmware-dumping)** or game cartridge untrimmed XCI
- Your dumped Nintendo Switch games or homebrew
- OS: Windows 10.0.17134 or higher / macOS 12 / Any modern linux distribution (see dependencies)
Recommended **Baseline** (Native Resolution and Framerate):
- CPU: Ryzen 5 3600
- RAM: 16GB DDR4
- GPU: NVIDIA GTX 1060 6GB
## Dependencies
### Windows
- **Windows 10 RS4 (Redstone 4, version 1803) or newer** is required.
- Graphics drivers must be up to date.
### Linux
Run these commands in your terminal:
- Archlinux-based distros:
```bash
sudo pacman -S sdl2 openal
```
- Ubuntu-based distros:
```bash
sudo apt-get install libsdl2-2.0 libsdl2-dev libalut-dev
```
- Fedora:
```bash
sudo dnf install SDL2-devel openal-soft
```
### macOS
- macOS 12 Monterey or later is recommended.
## Initial Setup
### Placement of prod.keys
By default Ryujinx will use `%appdata%/Ryujinx` (or the equivalent application data folder on Linux/macOS) to store all of it's permanent files. This includes firmware, save files, shader caches and other configuration. If you wish Ryujinx to be fully self-contained you may use [portable mode!](#portable-mode)
1. Now that you've downloaded the *Ryujinx* archive, open it and
extract the contents of the publish folder onto your drive in
the location of your choice. We recommend against using your desktop
or the root of any drive as these can sometimes be protected.
2. Navigate to where you extracted the *Ryujinx* files, and
double-click on `Ryujinx.exe`. This will launch the emulator and you
will be met with the following message (don't worry; this is
normal!)
![image](assets/8581e188-2ac7-479f-ab49-f72034d4071e.png)
3. Click *OK* on the warning box.
Now that *Ryujinx* has been launched, the proper folders have been
created for you in your `%appdata%` folder.
4. Click *File* at the top left of the *Ryujinx* window, and then click
*Open Ryujinx* *Folder*.
![image](assets/955c55d0-4084-4239-ad23-d8b1fc5414f8.png)
5. Navigate down into the system subfolder and paste your prod.keys file
here. The file/folder structure should look like this (JohnDoe
substituted for your username):
![image](assets/86277827-9d7d2600-bb94-11ea-9900-b5351364fd14.png)
6. Close and reopen *Ryujinx* so that the prod.keys file is validated. You're done installing keys!
### Installation of Firmware
Now that your keys are installed, it's time to install a firmware. Make
sure you have an untrimmed XCI file of a recent game cartridge you
dumped, or have compiled your [dumped firmware](firmware-dumping) into a ZIP file.
1. Open *Ryujinx*. There should be no warning about KEYS.md anymore; if
you still get the warning, go back through the prod.keys steps and
ensure you have placed the file correctly.
2. Now that *Ryujinx* is open, click *Tools > Firmware > Install from XCI/ZIP*.
![image](assets/405afd16-9e0a-4911-a82f-575dc8939e36.png)
This brings up the "Choose the firmware file to open" window.
![image](assets/fc03f9eb-1210-41be-ab7b-b9ee4f1fce98.png)
3. Using the *Ryujinx* window, navigate to the location of your dumped
XCI file and click *Open*. You will be asked to confirm whether you
want to install the firmware. Make sure your prod.keys are at least
as new as the firmware you are installing!
*(Your firmware version number may vary)*
![image](assets/804c398c-3b2b-446f-aabd-8e7129bec19e.png)
4. Click *Yes*. You will see a message that the firmware is
installing and was successfully installed.
![image](assets/155c02c5-dd0d-4888-a94b-23eabff84821.png)
5. Click *OK*. If all went well, you will now see your firmware version
listed as the "System Version" in the bottom right hand corner of
the main *Ryujinx* window.
![image](assets/86278217-4035a480-bb95-11ea-9803-fabc39dbec5b.png)
## Adding Your Games to Ryujinx
You have keys and firmware ready to go. Time to add your games!
With *Ryujinx* open, click on *Options > Settings*. This takes you
straight to the *General* tab.
![image](assets/86278362-7c690500-bb95-11ea-9667-cb61e7d45b8e.png)
There are two different methods in which you can add a Game Directory in this window.
### 1st Method
Type the absolute path of the folder containing your games into the path
field and click *Add*.
![image](assets/86278453-a6bac280-bb95-11ea-8bb0-005e89dbb295.png)
### 2nd Method
Without typing anything into the path field, click *Add*.
![image](assets/86278489-b76b3880-bb95-11ea-929c-da8b53052406.png)
This brings up the navigation window. Navigate to the folder containing your games (e.g. `D:\Switch Games`) and click *Add*.
![image](assets/86278572-d5d13400-bb95-11ea-98e6-91a58667a538.png)
1. Whichever method you chose, **click *Save*** to save the game directory setting.
2. Your games will now show up in the main *Ryujinx* window.
![image](assets/86278608-e7b2d700-bb95-11ea-8b2c-f12b1b7f0fcc.png)
## Managing Game Updates
Manage game update versions from within Ryujinx
Now that your games are added, you may wish to update your game for
various reasons e.g. bugfixes, new content, etc. *Ryujinx* has built-in
functionality to manage which version of the game you want to play.
1. In the main *Ryujinx* game list right-click the game you want to
apply an update to. Then click *Manage Title Updates*.
![image](assets/86278648-fef1c480-bb95-11ea-8a28-6099f5e0c8bf.png)
After clicking *Manage Title Updates*, you will see the *Ryujinx --
Title Update Manager* menu.
2. In the *Ryujinx -- Title Update Manager* menu, click *Add*.
![image](assets/86278688-0d3fe080-bb96-11ea-8aae-f353f2dc952d.png)
3. Clicking *Add* will bring up the navigation menu. Navigate to the location
of your game's update files and select update you want to add to *Ryujinx*,
and click *Add*.
![image](assets/86278723-16c94880-bb96-11ea-972f-bb1c8683ed6d.png)
This will bring you back to the *Ryujinx -- Title Update Manager*
window. You may repeat this for any other game version update files
you wish to add to *Ryujinx*.
1. In the *Ryujinx -- Title Update Manager* window, select the version
of the update you wish to be applied to the game and click *Save*.
![image](assets/86278755-22b50a80-bb96-11ea-9c1c-c4fc13a0e4cb.png)
2. Verify that the proper version number is shown in the main *Ryujinx*
games list window.
![image](assets/86278789-2e083600-bb96-11ea-9b55-816a81b53601.png)
Your game update has now been applied, and you may repeat the
process for any other games you wish to apply updates to.
## Managing DLC
Manage Downloadable Content for your games
Some games have downloadable content available that you may wish to add
to your game. *Ryujinx* has built-in functionality to add & manage your
DLC.
1. With *Ryujinx* open, right-click on the game you want to add or
manage DLC for and click *Manage DLC* to bring up the *Ryujinx - DLC
Manager* window.
![image](assets/86278819-37919e00-bb96-11ea-93cb-0a266c0c1b24.png)
2. Within the *Ryujinx -- DLC Manager* window, click *Add* to open the
DLC navigation screen.
![image](assets/86278847-40826f80-bb96-11ea-99bf-05c22af2c680.png)
3. Navigate to the location of the DLC file(s) you wish to apply, then
double-click the file to automatically add it. Or you may select the
file or files, and click *Add*.
**Note: you may add more than one DLC file at a time!**
![image](assets/86278879-5001b880-bb96-11ea-9fb3-859efbd631f9.png)
4. You will now see your DLC in the *Ryujinx - DLC Manager* window.
**Click *Save*** to save your configuration.
![image](assets/86286616-08822900-bba4-11ea-838e-eaf95c98d6dc.png)
**Note: always drill down to see the proper status of the DLC .nca file you are managing. Checking and unchecking the .nca file is the way to enable and disable the DLC. The parent container (.nsp file) shows unchecked by default, even if the DLC is enabled.**
Repeat this process, if you wish, for any other games you would like to manage DLC for.
## Managing Mods
Quick Start Guide for managing mods
Various game mods are available from enthusiasts & content creators online. *Ryujinx* supports the following types of mods:
1. ExeFS Partition Replacement
2. ExeFS File Replacement
3. ExeFS Patching
4. RomFS Partition Replacement
5. RomFS File Replacement
**For an in-depth explanation of the mods implementation & advanced usage options in *Ryujinx*, check the description in the original PR [here](https://github.com/ryujinx-mirror/ryujinx/pull/1249)**.
To enable mods:
1. With *Ryujinx* open, right-click on the game you wish to manage mods for and click *Open Mods Directory*.
![image](assets/87058158-f9fbc900-c1c4-11ea-8dcd-7bea51fc71e6.png)
This will open the `AppData\Roaming\Ryujinx\mods\contents\<game ID>\` folder.
2. Create a subfolder under the game id folder with an appropriate name conveying the mod you will be using. For instance, you might name the folder "Lana" if you were using a mod to add a Lana skin to Mario Kart 8 Deluxe.
![image](assets/87060018-3d573700-c1c7-11ea-82f8-3a54c788490c.png)
3. Copy your mod's romfs folder or exefs folder into the new folder you created.
![image](assets/87071634-b3fc3080-c1d7-11ea-8a28-a1aa86009f5c.png)
Mods can also be placed in the `AppData\Roaming\Ryujinx\sdcard` folder if the mod has been packaged for real hardware (usually indicated with an "atmosphere" folder as the top directory). With *Ryujinx* open, right-clicking on the game you wish to manage SD mods for and clicking *Open Atmosphere Mods Directory* will open the `AppData\Roaming\Ryujinx\sdcard\atmosphere\contents\<game ID>` folder where the romfs/exefs folders are located.
![image](assets/156943587-5242ccda-d74d-4d2f-8446-a1941beb4c2c.png)
![image](assets/156943543-ea49ec82-57b7-46eb-a12e-5daf64b1cad5.png)
## Managing Cheats
Ryujinx now has native cheats/runtime mods support!
It implements full support Atmosphere style cheats (except game pausing/resume):
[Atmosphere Cheats](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/cheats.md)
## Installation of Atmosphere Cheats
A good place to acquire Atmosphere cheats is:
- [WerWolv's EdiZon Cheats](https://github.com/WerWolv/EdiZon_CheatsConfigsAndScripts/tree/master/Cheats) (general switch cheats)
Inside the cheat `zip`, `rar`, or other archive format, there is usually a file structure like this:
```
Cheat_Name\cheats\0123456789ABCDEF.txt
```
Where `0123456789ABCDEF` will vary according to the game and the cheat (this is the build id of the executable the cheat attaches itself to). A cheat can also contain several `txt` files.
**Cheats are game-specific and version-specific, they will not work if transferred from one game to another or to an incompatible update of the game.**
To install the cheat:
- Open Ryujinx, right-click the game you wish to install the cheat and select to open its `Mod directory`;
- A directory like this will open: `Ryujinx\mods\contents\XXXXXXXXXXXXXXXX\`, `XXXXXXXXXXXXXXXX` will be the id of the chosen game;
- Extract the cheat archive to the mod directory, keeping the cheat name: `Ryujinx\mods\contents\XXXXXXXXXXXXXXXX\Cheat_Name\cheats\<all the txt files>`.
## Activating/Deactivating cheats
Currently, all cheats are automatically enabled and cannot be disabled, so mixing, for instance, 60, 90 and 120 fps cheats may cause a conflict.
One alternative is to create a directory `disabled_cheats` in the mod directory and move all unused cheats there. Another one is to prepend something to the file name, for instance `off_0123456789ABCDEF.txt` as a valid cheat must not have anything but `0123456789ABCDEF.txt` in its name.
The .txt files can also contain several cheats that may conflict. To switch off individual cheats inside a .txt file first **backup the .txt file** to something like `bak_0123456789ABCDEF.txt` (this will also prevent the backup to be loaded as a cheat). Next, in the .txt file, there will be sections, each with a name within `[ ]` brackets and filled with sequences of letters and numbers (the code of the cheat), for instance:
```
[New Super Mario Bros. U Deluxe]
[Start with 99 Lives]
58000000 00CC9860
78000000 0002A1C0
61000000 00000000 00000063
[Time = 999]
58000000 00C88A70
78001000 00000090
64000000 00000000 003E6F00
[Start as Penguin]
58000000 00CC9860
78000000 0002A1C4
61000000 00000000 00000005
```
To disable the time cheat, just remove its section and the code:
```
[New Super Mario Bros. U Deluxe]
[Start with 99 Lives]
58000000 00CC9860
78000000 0002A1C0
61000000 00000000 00000063
[Start as Penguin]
58000000 00CC9860
78000000 0002A1C4
61000000 00000000 00000005
```
## Managing User Profiles
Ryujinx offers the ability to use multiple, customizable user profiles. **WARNING:** Save data is specific to each user profile so if you delete a profile, the save data under that profile is also deleted.
### Edit a user profile
1. With Ryujinx open, but no game running, click on *Options > Manage User Profiles*
![image](assets/115936775-62b1ea80-a453-11eb-9df8-5d39cf414057.png)
Now in the Manage User Profiles window, you will see the default RyuPlayer profile. This is the default profile that comes with Ryujinx and **cannot be deleted** as it contains all of the original save data for your games. You may, however, rename it and change the picture to something else, if you like.
![image](assets/115936853-98ef6a00-a453-11eb-9bdb-2b2076ff529d.png)
2. To rename a profile, simply select it and type in the new text.
![image](assets/115936950-e1a72300-a453-11eb-9d5d-027826457759.png)
3. To change the profile image, select the profile in the list and click **Change Profile Image**.
![image](assets/115937027-10bd9480-a454-11eb-977a-2afdec837dab.png)
You will then be prompted to select from either a custom image, or from one of the many avatars provided in the firmware.
![image](assets/115937083-2df26300-a454-11eb-95de-7db4a12aaa45.png)
If you choose to import an image: supported formats are `png`, `bmp`, and `jpg`. You can use the image you want, but it will be resized to 256x256 pixels, so using a square image is recommended.
If you choose to use a built-in firmware avatar, click on **Select Firmware Avatar**
In the Manage Accounts - Avatar window, select the avatar you want, and choose a background color. When finished, click **Choose** to make it the profile's image.
![image](assets/115937295-df919400-a454-11eb-90ac-f31263ec543e.png)
![image](assets/115937710-b7566500-a455-11eb-905c-c748e8baeae8.png)
### Add a new profile
1. With Ryujinx open, but no game running, click on *Options > Manage User Profiles*
![image](assets/115936775-62b1ea80-a453-11eb-9df8-5d39cf414057.png)
2. Click on the **Add New Profile** button at the bottom left corner of the window.
![image](assets/115938010-8a568200-a456-11eb-8a1b-a610fd8f5c7e.png)
3. A window will pop up asking you to name the new Profile. Enter the desired name of the new profile, and click OK.
![image](assets/115938038-9e9a7f00-a456-11eb-8464-3855cde7241d.png)
4. You will now be prompted to choose the profile image. Follow step 3 from the user profile editing instructions above.
![image](assets/115938416-c9390780-a457-11eb-9761-eff2e0dd5efa.png)
That's it!
## Input Configuration
Setting up your controls: this part requires close attention, so read
carefully!
1. Plug in the controller(s) that you will be using.
2. Open *Ryujinx* and navigate to *Options \> Settings*
![image](assets/86278975-7aec0c80-bb96-11ea-897f-9a4ed393f3b0.png)
3. You will now see the *Ryujinx - Settings* window. Click on the
*Input* tab.
![image](assets/86278991-82abb100-bb96-11ea-9a00-adacae14b34c.png)
Before proceeding to configure anything, the options on the Input page
need some explanation:
*Direct Keyboard Access*:
Checking this box emulates a real, physical
keyboard being directly connected to a Nintendo Switch via USB. ***Do
not check this box unless you have a specific reason***
*Enable Docked Mode*:
Checking this box emulates the Nintendo Switch
being docked. Docked Mode enables higher resolution, higher FPS, and
better graphical fidelity on games that support these features.
**If you check this box, you will need to click configure under Player 1 (top left menu item).**
**If you leave this box unchecked, you will need to click configure under Handheld (bottom right menu item)**
1. Click *Configure* under *Player 1* if you have enabled *Docked
Mode*, or click configure *Handheld* if you have not enabled *Docked
Mode*.
![image](assets/86279008-8d664600-bb96-11ea-9ed3-32034ad9f53a.png)
2. You should now be in the *Ryujinx -- Controller Settings* screen.
Click on the *Input Device* dropdown and choose the *Xinput
controller*. If you have connected multiple controllers, choose the
one you want to be configured to be P1 in game.
**If you do not see any Xinput controllers in the list, you will need to use an Xinput wrapper/translator such as [x360ce](https://www.x360ce.com/).**
![image](assets/86279068-a969e780-bb96-11ea-913c-6da064e6d7a6.png)
1. After selecting your Xinput controller you should now see a full
mapping UI. If you want to map the buttons in a standard
Xinput-compatible fashion, there is no need to individually map the
buttons. Simply click on the empty *Profile* dropdown, select
*Default*, and click *Load*. This populates the buttons with preset
mappings for your Xinput-compatible (or Xinput wrapped/translated)
controller. Otherwise, click on "*Unbound*" for each button you want
to map, then press the actual button on your controller that you
want for the Nintendo Switch controller button you've
chosen.
![image](assets/86279165-d1f1e180-bb96-11ea-9d77-b9c029ce5b3a.png)
You may continue tweaking the settings to your liking, or binding
each button from scratch if you want a fully custom button layout.
**NOTE: while the default *Deadzones* are 0.10, we recommend
increasing your *Deadzones* to at least 0.20 in order to avoid
unwanted joystick drift.**
If you are in *Docked Mode* and have additional controllers to
configure, configure them now under Player 2, Player 3, and so on.
7. ***Click Save to save your configuration.***
Alternately, you may skip the input UI and edit your config.json file
found in `%appdata%\ryujinx\`
## Motion Controls
### Motion Controls
Ryujinx offers the ability to use motion controls with motion-enabled controllers such as a Switch Pro Controller, Joycons, Playstation DS4, smartphones with motion support, Steam controller, and others.
To use motion controls in Ryujinx:
1. Launch & configure your favorite cemuhook server application (Betterjoy, DS4Windows, Steam Gyro, etc.) with your bluetooth or wired motion-enabled controller. Leave the application running.
2. In Ryujinx, navigate to *Options > Settings > Input* tab and select which controller you are configuring. Remember: if you are in docked mode, configure Player 1. If you are in Handheld mode, configure the Handheld controller.
![image](assets/92328779-5c841080-f020-11ea-80a1-af54341c4deb.png)
3. Select your motion controller from the dropdown. It will be listed as "Xinput controller".
![image](assets/92328812-9ead5200-f020-11ea-88f4-706c8f2bd5b6.png)
4. Configuration options:
- If you have already configured your controller's input buttons to your liking and only need to configure motion controls, check the "Enable Motion Controls" box and fill in the following information:
**Controller Slot:** the controller slot # your motion controller is configured as in your cemuhook server application. Default is "0"
**Gyro Sensitivity:** 100% (you may adjust this to suit)
**Server Host:** the IP address of the computer being used to host the cemuhook server. 127.0.0.1 is localhost/the same computer running Ryujinx.
**Server Port:** 26760
![image](assets/92329071-542cd500-f022-11ea-9aff-9b1e22f29b61.png)
- Alternately, you can simply click on the empty Profile dropdown, select Default, and click Load. This populates the buttons with preset mappings and also fills in the motion control settings with recommended defaults. You may continue tweaking the settings to your liking, or binding each button from scratch if you want a fully custom button layout.
**NOTE: while the default Deadzones are 0.10, we recommend increasing your Deadzones to at least 0.20 in order to avoid unwanted joystick drift.**
Make sure to check the "Enable Motion Controls" box!
![image](assets/92328941-740fc900-f021-11ea-9663-ee1eeee47cee.png)
- Paired Joycons extra options:
If you set your controller type to Joycon Pair, an option called "Mirror Input" becomes available. This is useful for games in which both Joycons are connected to a Joycon grip and are moving together. If you enable this checkbox, the first Joycon's motion will be used for both Joycons.
![image](assets/92338812-00e17380-f070-11ea-9090-e94abe4d1134.png)
5. Click Save to save your configuration.
Repeat steps 2 through 5 for any other motion controllers you wish to configure. If you have more than one, make sure to choose the respective slot # for each controller!
## Amiibo Emulation
All Amiibo are able to be virtually scanned within the emulator, as long as you are actively connected to the internet. No files or dumps are required!
**To scan an Amiibo:**
1. While playing a game that supports Amiibo, either navigate to the area where Amiibo scanning is expected, or press/hold the correct button to enable the Amiibo scan prompt. This site has a basic list of supported games and what benefits are provided by each: [https://amiibo.life/games]()
2. Click the "Actions" menu header, then click "Scan an Amiibo"
![unknown1](assets/111011795-d82d9400-839a-11eb-8798-c426fe5bc973.png)
3. Choose the Amiibo you want from the Amiibo Series and Character dropdowns. Note: only the Amiibo that have content for the game you are currently playing are shown in this window. All the same, if you'd like to see all Amiibo you may check the box that says "Show All Amiibo".
![unknown2](assets/111011810-e8de0a00-839a-11eb-8a5c-d03b0e094ec4.png)
**Addendum:** In The Legend of Zelda: Breath of the Wild, you may continually scan Amiibo as many times as you wish by checking the box labeled "Hack: Use Random Tag Uuid" box.
## Profiled Persistent Translation Cache
Speed up game loading times with PPTC
In a nutshell, this feature caches translated functions so that they do
not need to be translated every time the game loads. This results in a
significant reduction of load times \--the amount of time between
launching a game and arriving at the title screen\-- for nearly every
game.
**NOTE: You must launch the game at least twice and let it load**
**to the title screen or beyond before performance improvements are**
**unlocked on the third launch! These improvements are permanent and do**
**not require any extra launches going forward.**
PPTC (Profiled Persistent Translation Cache) is now enabled by default. To disable it:
1. With *Ryujinx* open, click on *Options \> Settings*
![image](assets/86279303-082f6100-bb97-11ea-92bc-68f24612d7e2.png)
2. Then navigate to the *System* tab and **uncheck the box** marked
*Enable Profiled Persistent Translation Cache*
![image](assets/86279433-3b71f000-bb97-11ea-8bd2-0435ba8ece33.png)
From time to time you may wish to examine or purge your PPTC cache files if you are experiencing PPTC-related issues.
To open the PPTC cache file location:
1. With Ryujinx open, right-click the game in the game list whose PPTC cache files you wish to view. This will bring up a pop-up menu.
2. Navigate to *Cache Management > Open the PPTC directory*
![image](assets/86624278-486c5600-bf80-11ea-9de5-47340af14a0c.png)
To purge the PPTC cache files:
1. With Ryujinx open, right-click the game in the game list whose PPTC cache files you wish to purge. This will bring up a pop-up menu.
2. Navigate to *Cache Management > Purge the PPTC cache*
![image](assets/86625047-ac434e80-bf81-11ea-9dd7-7f3465f8c0d2.png)
## Graphics Enhancements
*Ryujinx* offers a few graphics enhancement options.
1. *Resolution Scaling*, which offers a much sharper image with little to no impact to performance. Resolution scaling can increase image quality much more noticeably than Anisotropic Filtering. Ryujinx's resolution scaling implementation allows native, 2x, 3x, 4x, or even custom ratios for upscaling.
2. *Anisotropic Filtering*, which can visibly improve graphic quality. [Wikipedia says](https://en.wikipedia.org/wiki/Anisotropic_filtering):
*In layman's terms, anisotropic filtering retains the "sharpness" of*
*a texture normally lost by MIP map texture's attempts to avoid*
*aliasing. Anisotropic filtering can therefore be said to maintain crisp*
*texture detail at all viewing orientations while providing fast*
*anti-aliased texture filtering.*
3. *Shader Cache*, which stores onto disk the shaders that have already been compiled, negating the need to compile them again. This feature is highly sought after as it significantly reduces stuttering and FPS drops on subsequent plays of a particular game making for a smoother, more enjoyable gameplay experience. **Note: Shader Cache is enabled by default.**
4. *Aspect Ratio Options*, which allow you to adjust the width-to-height ratio to your liking. **Note: these options may give your game a stretched or squeezed appearance unless you are using mods that change the expected aspect ratio of the game.**
### Enable Resolution Scaling
**Note: Enabling this feature may cause graphical glitches on some games.**
**These settings may be changed in-game on the fly!**
**On a standard 1080p display, 2x resolution scaling is recommended.**
1. With *Ryujinx* open, click *Options \> Settings*
![image](assets/86672580-078e3480-bfb4-11ea-8c01-86b05066a4dc.png)
2. Navigate to the *Graphics* tab and click the dropdown next to Resolution Scale. Select your desired level of resolution scaling.
![image](assets/86673437-e7ab4080-bfb4-11ea-86de-876d7563f6a2.png)
**Click *Save*** to save the enhancement setting.
### Enable Anisotropic Filtering
**Note: enabling this feature may cause graphical glitches on some**
**games.**
1. With *Ryujinx* open, click on *Options \> Settings*
![image](assets/86279490-547aa100-bb97-11ea-97ad-549534e9d635.png)
2. Navigate to the *Graphics* tab and click the dropdown next to
*Anisotropic Filtering*. Set it to your desired level.
![image](assets/86279552-6ceabb80-bb97-11ea-8b88-1e19983ed890.png)
**Click *Save*** to save the enhancement setting.
### Manage shader Cache
**Shader Cache is enabled by default**. There are no good reasons to disable it other than for testing purposes.
Disabling this setting is strongly discouraged. However, if you absolutely must disable it:
1. With Ryujinx open, navigate to *Options > Settings*.
2. Navigate to the Graphics tab and disable shader cache by unchecking the box marked "Enable Shader Cache"
In some rare cases, a shader cache might become corrupted and crash when compiling shaders on boot. To solve this you'll have to purge the shader cache for that particular game. Right click on a game in the game list and navigate to Cache Management > Purge Shader Cache.
![image](assets/98551756-e76ccb80-225a-11eb-83b8-ce99b712e7d6.png)
To view the shader cache directory for a particular game:
1. Right click on a game in the game list and navigate to Cache Management > Open Shader Cache Directory.
![image](assets/98551866-0ec39880-225b-11eb-8380-967c97bfd97f.png)
### Adjust aspect ratio
#### Method 1
With Ryujinx open, navigate to *Options > Settings* and click on the Graphics tab. Click on the Aspect Ratio dropdown and adjust the ratio to your liking.
![image](assets/102350497-3f85a480-3f62-11eb-95b2-c9ef3d468315.png)
#### Method 2
With your game running, click on the aspect ratio button in the status toolbar at the bottom of the Ryujinx window.
![image](assets/102351140-3517da80-3f63-11eb-8d14-a2c1fc9bfd5d.png)
#### Method 3
1. Use Option 1 and select "Stretch to Fit Window" or Option 2 and select "Stretched".
2. Simply click and drag your window borders to the size you want!
## Portable Mode
If you wish, you may use a custom folder location for all Ryujinx data (as opposed to keeping it in its default location: `%appdata%`). This is done via the command-line or, more conveniently, a custom shortcut. In the future, the ability to configure custom data folders may be added to the GUI.
**NOTE: You must manually create the custom folder first before using portable mode! After enabling portable mode, you will need to copy your prod.keys file and any desired game data/save data from its original location to the new data folder.**
### Enable *Portable Mode*
### Method 1: Create a "portable" subfolder
**Recommended method**
Create a subfolder in the Ryujinx program base directory called `portable`. This automatically enables portable mode and utilizes this `portable` folder for system folder contents (keys, firmware, PPTC/shader caches, etc.).
![image](assets/111225959-14811000-85a6-11eb-9ffa-a8d2f5d899cd.png)
### Method 2: Command-line
Open a command prompt, navigate to the location of the Ryujinx executable and type the following command: `ryujinx.exe -r D:\[folderpath]`. For example, if your custom folder was `D:\ryujinxdata`, your command would be the following:
```
ryujinx.exe -r D:\ryujinxdata
```
![image](assets/91670371-0ec84f00-eada-11ea-9e0a-034ff6eee440.png)
The command prompt window will become the console window when Ryujinx launches.
### Method 3: Custom Shortcut
1. Right-click on your Ryujinx executable and click Send To -> Desktop Shortcut
![image](assets/91670437-bf365300-eada-11ea-8bde-ce0b1cb7aa73.png)
2. Locate the new shortcut on your desktop and right-click on it, then click Properties
![image](assets/91670516-8fd41600-eadb-11ea-8eb3-acfb97d64c65.png)
3. In the Properties window, click into the Target field and add a space onto the end of the existing command. Then add `-r [folderpath]` where `[folderpath]` is your own custom data folder full path, and click OK.
For example, if your custom data folder was `D:\ryujinxdata`, the addition you would paste into the target field would be `-r D:\ryujinxdata`.
![image](assets/91670585-315b6780-eadc-11ea-8534-244a46eb1536.png)
On MacOS, the command would be `/Applications/Ryujinx.app/Contents/MacOS/Ryujinx -r /path/to/custom/ryujinx/folder`.
You can now use this shortcut any time you want to launch Ryujinx in portable mode!
## Launch in Fullscreen
Ryujinx can automatically launch games in fullscreen mode. You can enable this functionality in one of two ways:
### Method 1
In Ryujinx, click on Options, then check the box marked "Start Games in Fullscreen Mode".
![image](assets/100805553-173b6900-33ec-11eb-9702-71626f67f6e3.png)
### Method 2
If you launch Ryujinx from the commandline, add a --fullscreen option. Like so:
![image](assets/100806049-03dccd80-33ed-11eb-88a4-d5a56ada8bb0.png)

39
docs/src/setup/keys.md Normal file
View File

@ -0,0 +1,39 @@
Keys are required for decrypting most of the file formats used by the Nintendo Switch.
Keysets are stored as text files. These 2 filenames are automatically read:
* `prod.keys` - Contains common keys used by all Nintendo Switch devices.
* `title.keys` - Contains game-specific keys.
Ryujinx will first look for keys in `C:\Users\yourname\AppData\Roaming\Ryujinx\system`, `\portable\system` on a portable install or `~/.var/app/org.ryujinx.Ryujinx/config/Ryujinx/system/`on the flatpak version. To access this directory, go to `File` > `Open Ryujinx folder`, then click on `system`. If Ryujinx doesn't find any keys in those folders, it will look in `$HOME\.switch`.
To dump your `prod.keys` and `title.keys` please follow these steps.
1. First off [learn how to boot into RCM mode and inject payloads](https://nh-server.github.io/switch-guide/) if you haven't already.
2. Make sure you have an SD card with the latest release of [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere/releases) inserted into your Nintendo Switch.
3. Download the latest release of Picklock_RCM/Lockpick_RCM.
4. Boot into RCM mode.
5. Inject the `Picklock_RCM`/`Lockpick_RCM.bin` that you have downloaded at `Step 3.` using your preferred payload injector. We recommend [TegraRCMGUI](https://github.com/eliboa/TegraRcmGUI/releases) as it is easy to use and has a decent feature set.
6. Using the `Vol+/-` buttons to navigate and the `Power` button to select, select `Dump from SysNAND | Key generation: X` ("X" depends on your Nintendo Switch's firmware version).
7. The dumping process may take a while depending on how many titles you have installed.
8. After its completion, press any button to return to the main menu of Picklock_RCM/Lockpick_RCM.
9. Navigate to and select `Power off` if you have an SD card reader. Or you could Navigate and select `Reboot (RCM)` if you want to mount your SD card using `TegraRCMGUI > Tools > Memloader V3 > MMC - SD Card`.
10. You can find your keys in `sd:/switch/prod.keys` and `sd:/switch/title.keys` respectively.
11. Copy these files and paste them in your Ryujinx `system` folder.
And you're done!
## Title keys
These are only used for games that are not dumped from cartridges but from games downloaded from the Nintendo eShop. These are also only used if the eShop dump does *not* have a `ticket`. If the game does have a ticket, Ryujinx will read the key directly from that ticket.
Title keys are stored in the format `rights_id = key`.
For example:
```
01000000000100000000000000000003 = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
01000000000108000000000000000003 = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
01000000000108000000000000000004 = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```
## Prod keys
These are typically used to decrypt system files and encrypted game files. These keys get changed in about every major system update, so make sure to keep your keys up-to-date if you want to play newer games!

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Some files were not shown because too many files have changed in this diff Show More