Compare commits

...

46 Commits

Author SHA1 Message Date
Ribbit 15becaa5a3 [Audio] Tighten sink queue back pressure (#2840)
Co-authored-by: Ribbit <ribbit@placeholder.com>
Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2840
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
2025-10-28 04:26:58 +01:00
Ribbit 3d4bb08cfc Revert "[Shader Recompiler] Caching optimization for Texture_Pass (#481)" (#2859)
This commit has some bugs that causes FPS drops, and crashes after playing for more than 1hr+.

Needs to be reworked and further tested.

Co-authored-by: Ribbit <ribbit@placeholder.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2859
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
2025-10-28 04:26:45 +01:00
MaranBr b2ac18173f [video_core] Fix more edge cases in image_view and image_view_info (#2853)
This fixes more edge cases where incorrect textures were used in image_view and image_view_info.

Complement to PR 2830.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2853
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
2025-10-28 04:25:23 +01:00
crueter 39f226a853 [qt] Ryujinx save data link (#2815)
This adds an action to the Game List context menu that lets users link
save data from Eden to Ryujinx, or vice versa.

Unfortunately, this isn't so simple to deal with due to the way Ryujinx's saves work. Ryujinx stores its saves in the... config directory... in `bis/user/save`. Unlike Yuzu, however, it doesn't store things by TitleID, instead it's just a bunch of directories from 000...01 to 000...0f and so on. The way it *maps* TitleID to SaveID is via `imkvdb.arc` in `bis/system/save/8000000000000000/0/` and also an identical copy in the `1` directory for... some reason. `imkvdb.arc` is handled by `FlatMapKeyValueStore` in LibHac, which, as the name implies, is a key-value storage system that `imkvdb.arc`, and seemingly `imkvdb.arc` alone, uses. The way this class is written is really weird, almost as if it's designed to accommodate more types of kvdbs... but for now we can safely assume that there aren't gonna be any other `kvdb` implementations added to HorizonNX.

Regardless, the file format is ridiculously simple so I didn't actually need to do a deep dive into C# code... of which I can basically only read Avalonia. A simple `xxd` on the `imkvdb.arc` is all that's needed, and here's everything that matters:
- The `IMKV` magic header (4 bytes)
- 8 bytes that don't really have anything useful to us, except for a size byte (presumably a `u32`) strewn at offset `0x08` from the start of the file, which is useless to us
- Then we start the `IMEN` list. I don't know what the `IM` stands for, but `IMEN` is just, well, an ENtry. Offsets shown are relative to the start of the `IMEN` header.
  * 4-byte `IMEN` magic header at 0x0
  * 8 bytes of filler data. It contains two `0x40` bytes, but I'm not really sure what they do
  * TitleID (u64) at `0xC`, for example `00a0 df10  501f 0001` for Legends: Arceus (the byte order is swapped)
  * 0x38 bytes of filler starting at offset 0x14
  * SaveID (u64) at `0x4C`, for example `0a00 0000 0000 0000` for my Legends: Arceus save
  * 0x38 bytes of filler starting at offset 0x54

Full example for Legends: Arceus:
```
000001b0: 494d 454e 4000 0000 4000 0000 00a0 df10  IMEN@...@.......
000001c0: 501f 0001 0100 0000 0000 0000 0000 0000  P...............
000001d0: 0000 0000 0000 0000 0000 0000 0100 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0a00 0000  ................
00000200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000210: 0000 0000 0100 0000 0000 0000 0000 0000  ................
00000220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000230: 0000 0000 0000 0000 0000 0000 494d 454e  ............IMEN
```
Ultimately, the size of the `IMEN` sits at 0x8C or 140 bytes. With this knowledge reading all the TitleID -> SaveID pairs is basically free, and outside of validation and stuff is like 15 lines of relevant code. Some interesting caveats, though:
- There are two entries for some TitleIDs for... some reason? Ignoring the second one seems to work though.
- Within each save directory, there are directories `0` and `1`... and only `0` ever seems used??? It's where Ryujinx points you to for save, so I just chose to use that.

Once everything is parsed, the rest of the implementation is extremely trivial:
- When the user requests a Ryujinx link, match the current program_id to the corresponding SaveID in `imkvdb`
- If it doesn't exist, just error out (save data is probably nonexistent)
- If it does though, give the user the option to use Eden's current save data OR Ryujinx's current save data.

Old save data is deleted depending on which one you chose.

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2815
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2025-10-28 03:46:47 +01:00
lizzie 61ab1be0e7 [dynarmic] replace mcl::bit_cast with std::bit_cast; fix IR_emit codepath warnings for UNREACHABLE(); remove type trait mcl::integer_of_size dependency (#2775)
- std::bit_cast already on libc++ (see also #2774)
- type trait is a 5-liner for u8/u16/u32/u64
- UNREACHABLE(); can just be converted into __builtin_unreachable() (TODO: eventually phase out to std::unreachable() once all platforms support it)\
The templatery parametrization is creating many copies of the same function, polluting i-cache and just bloating code size for minimal savings (and in fact could be negative net savings because of the bloated code size) - this is mostly in preparation to a partial removal of template<size_t XXX> in functions to remove instancing (think of the function being copied x4 times... because the compiler is forced to inline it...)
Signed-off-by: lizzie lizzie@eden-emu.dev

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2775
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-28 03:46:24 +01:00
lizzie 3ba9769d7a [docs/user] add reshade instructions to fix flickers and such (#2848)
mini-tutorial courtesy of bob
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2848
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-28 03:44:38 +01:00
lizzie dd9cae4ebc [logging, debugger] remove unescesary logic and only query USER env variable once (#2800)
- censoring an username would lead to the variable being queried everytime something is written, just store it on a static
- dont use a map<> for something that can be done in a switch statment (and that the compiler will optimise for free!!!)
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2800
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-27 20:55:01 +01:00
Caio Oliveira 8fa36a7737 nuke: Goodbye PCH, you will not be missed (#2821)
Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2821
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
2025-10-27 20:50:16 +01:00
crueter 07b09b3849 [codeowners] nyxynx -> kleidis (#2855)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2855
2025-10-27 17:31:06 +01:00
crueter 903faacaab [qt] clarify orphaned profiles by showing GOOD uuids (#2850)
Shows what profile UUIDs are actually good so the user knows which one
to copy their saves to.

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2850
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2025-10-27 11:25:42 +01:00
lizzie c713d44c88 [dynarmic, docs] Add support for DragonFly, shared mapping fallback to private, and update docs (#2829)
Add deps instructions for void linux, alpine, nixOS, DragonFlyBSD, update haiku new stuff; add basic coding guidelines

Also fixes ucontext on dragonfly :)

Allows fallback if ftruncate() fails (DragonFly doesnt like shm of big files with hammer2...) This will also indirectly help OpenIndiana and Solaris since they dont like big shared files either.

The downside is that no inspection of the memory can be easily done. But that's just an edge case anyways.

Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2829
Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-27 05:13:44 +01:00
lizzie 2a3e815dcd [cmake, dynarmic/tests] do not enable avx2, remove unused cmake opts (#2844)
Signed-off-by: lizzie lizzie@eden-emu.dev
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2844
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-27 04:52:27 +01:00
Ribbit dc907616a9 [Android] Fix Amiibo bug (#2847)
Co-authored-by: Ribbit <ribbit@placeholder.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2847
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
2025-10-27 04:52:08 +01:00
Caio Oliveira 0be29d2947 [meta] fix building with clang 21.1.4 (#2839)
Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2839
Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
2025-10-27 00:37:24 +01:00
Ribbit 683c2834aa [Android] Finally add Amiibo load support to Android (#2845)
Co-authored-by: Ribbit <ribbit@placeholder.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2845
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
2025-10-26 22:33:18 +01:00
xbzk c788dbb3ef single commit to fix glCcolorMagic logic (#2842)
just pushing this fix for some silly bug before i forget it for the second time.

just too obvious that don't even need to test.

may fix some blued stuff where it should be green, and vice versa.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2842
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: xbzk <xbzk@eden-emu.dev>
Co-committed-by: xbzk <xbzk@eden-emu.dev>
2025-10-26 20:51:21 +01:00
crueter 7846f4de31 [ci] delete old workflows (#2843)
unneeded, and highly outdated

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2843
2025-10-26 20:45:06 +01:00
crueter a0769ad835 [cmake] MinGW builds; fix line endings; fix weird multiplayer lobby behavior (#2835)
MinGW builds perform pretty dramatically better than MSVC in my (brief) testing, getting 40% better FPS on my KVM than MSVC. How this will translate to the real world, who knows, but this is a really good target to have.

TODO: Add this to CI, potentially replace clang-cl

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2835
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2025-10-26 17:28:14 +01:00
DraVee 470214412b [cmake] sse2neon: vendor it! (#2817)
sse2neon: Revert to "DLTcollab/sse2neon@66267b52fd74951d8c224a4ed8baad4102c3cfd7"

2024-01-30 21:15:29 +0800 Optimize CRC intrinisics for targets lacking of CRC extension
github.com/DLTcollab/sse2neon/commit/66267b52fd74951d8c224a4ed8baad4102c3cfd7

* superseed #107

Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2817
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: DraVee <caiooliveirafarias0@gmail.com>
Co-committed-by: DraVee <caiooliveirafarias0@gmail.com>
2025-10-26 02:59:51 +01:00
godpow 41e15e95b1 [crypto] Rework AES CTR/XTS streaming and squash heap churn (#2782)
AES Updates:
Replaced heap churn with stack scratch buffers tail handling now stays in-place, no more recursive transcode detours.
CTR/XTS modes read in larger, aligned chunks and still handle odd offsets cleanly.
XTS prefetches a few sectors ahead to reduce extra reads.
AesCtrStorage writer now uses the pooled buffer properly one stack slab, chunk forward, bump counter, repeat.
Result: less malloc noise, fewer watchdog spikes at startup (though mbedtls still sets the pace).
This should make the loading speed slightly better than before. Make sure to test.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2782
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: godpow <thesaviorsrule@yahoo.com>
Co-committed-by: godpow <thesaviorsrule@yahoo.com>
2025-10-26 02:12:27 +01:00
MaranBr 73ebf59af7 [video_core] Improve texture rendering (#2830)
This fixes some edge cases and improves texture rendering, bringing it closer to specifications. This fixes many assertions that occur in some games, such as EOW.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2830
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
2025-10-26 02:14:45 +02:00
Bix 53bfd56b70 [Frontend] Added data for in emulator compatibility list (#2784)
This update restores the in emu compatibility list to Eden. I’ve moved it in-tree since it’s only a few kilobytes in size. If you’d prefer it to be hosted in a separate repository, let me know or feel free to move it yourself.

The compatibility list currently includes only a limited selection of games, so contributions are welcome and encouraged.
Authored-by: Bix <bix@bixed.xyz>
Signed-off-by: Bix <bix@bixed.xyz>

Co-authored-by: the great timothy IV <bix@X1Carbon.home>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2784
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: Bix <bix@bixed.xyz>
Co-committed-by: Bix <bix@bixed.xyz>
2025-10-26 02:14:34 +02:00
Ribbit 6ba25b6cc0 [vk] Correct polygon draw topology mapping for line and point modes (#2834)
Co-authored-by: Ribbit <ribbit@placeholder.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2834
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
2025-10-26 01:38:08 +02:00
crueter 8d565d7793 [qt] fix Discord RPC by using httplib (#2825)
Commit `a079a93645a7219ada1bef84f476eb8269614f5b` inexplicably replaced
the httplib implementation of discord_impl.cpp with an inferior
Qt::Network version. This causes a lot of issues especially w.r.t CA
certs which are handled differently with bundled OpenSSL. Thus, this
just adds back the httplib implementation and makes discord RPC work
again.

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2825
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2025-10-25 07:28:08 +02:00
Caio Oliveira 311c71146d android: Duplicate string (#2833)
Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2833
Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
2025-10-25 03:26:33 +02:00
lizzie 7751f86c1b [vk] Disable EDS on Mesa Intel integrated UHD drivers (#2788)
Affects specifically mesa 22.3.6-1 with an iGPU of UHD 620.

Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2788
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-24 22:21:01 +02:00
lizzie 4834fec159 [audio] Fix BOTW by increasing ring-size (#2822)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2822
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-24 12:38:42 +02:00
JPikachu b5d54b8df7 [acc, ldn] Implement CreateClientProcessMonitor and stub LoadIdTokenCache changes (#2810)
- IManagerForApplication/SystemService: from 19.0.0+ LoadIdTokenCache (3) is now LoadIdTokenCacheDeprecated (3)
- IManagerForApplication/SystemService: LoadIdTokenCache (4) stubbed
- Implement CreateClientProcessMonitor to ldn:s and ldn:u
- Create new client_process_monitor.cpp/.h files
- Change non-domain (C) functions into domain (D) functions to fix crashes

Thanks to SwitchBrew documentation, fixes 'Pokemon: Legends Z-A' LDN issues.

Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-authored-by: unknown <sahyno1996@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2810
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: JPikachu <jpikachu@eden-emu.dev>
Co-committed-by: JPikachu <jpikachu@eden-emu.dev>
2025-10-24 12:34:49 +02:00
MaranBr cd4bcb91cc [video_core] Better error messages (#2827)
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2827
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
2025-10-24 11:35:33 +02:00
unknown 199bc6a170 [texture_cache] Fix WIN32 #ifdef for texture_cache (#2823)
The #ifdef introduced in #2720 was wrong

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2823
Co-authored-by: unknown <sahyno1996@gmail.com>
Co-committed-by: unknown <sahyno1996@gmail.com>
2025-10-23 08:12:24 +02:00
lizzie 05c721bb41 [compat] fix libusb when disabled error (solaris, fbsd, etc) (#2649)
This fixes an issue in builds where libusb is disabled, it also uses and prioritizes system dependencies over vendored ones (so ports is easier)

Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2649
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 19:12:33 +02:00
lizzie 71241b7560 [dynarmic] remove bloated LUT usage that makes giant functions for no good reason (#2801)
Long story short, each of these LUT generates a function that is only ran once, spam the entire code with bunch of little "specialized templates" (remember, N * M * L) and basically bloat codesize for no good reason
Additionally it tries to outsmart the compiler which it's not always a good idea - herein I replace most (except 1) of those "helper" LUTs with something the compiler can actually work satisfiably

Happy reminder of the sheer amount of functions spammed:
mcl::list thing generates a number from 0 to 63 for (fsize 64), add the 0-31 for fsize 32, 0-15 for fsize 16 and you got around... 64+32+16 = 112 functions for a single parameter
Now include in the equation rounding_mode, which is about, what, 6? so 112*6 = 672

Yeah

Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2801
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 12:23:13 +02:00
lizzie e0c554976a [video_core] fix compilation errors from bad merge, fix string_view UB (#2812)
- fixes string_view corruption
- fixes the latest master
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2812
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 06:42:01 +02:00
lizzie 1b1ab551a9 [maxwell] fix ordering of sizes for atomicops (#2778)
S64 goes after F16x2FTZRN
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2778
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 04:55:27 +02:00
lizzie 87cacbeed4 [compat] HaikuOS port (#2805)
Still had the issues with libusb, but that should get solved with the other PRs anyways
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2805
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 04:53:40 +02:00
lizzie 992bae4e2a [common] replace Common::BitCast with libc++ provided one (#2774)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2774
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 02:56:28 +02:00
lizzie 6ff043c4fb [core/filesystem] "easier" cheats folder structure like Ryujinx (#2795)
Less annoying way to make cheats

Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2795
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-22 00:57:42 +02:00
crueter 86432f9552 [dist, android] update translations from transifex (#2811)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2811
2025-10-21 23:39:07 +02:00
Inix cde02bfe46 [frontend, android] Move update_checker to frontend_common and add Android support (#2687)
I still have to add a setting to disable the auto update checking on a later PR, firstly lets make sure i didn't accidentally break anything  with CMAKE. or QT.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2687
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Inix <Nixy01@proton.me>
Co-committed-by: Inix <Nixy01@proton.me>
2025-10-21 23:36:35 +02:00
lizzie 1971fbe5af [core, qt] remove non-ascii from src code (#2779)
Done with `find src -type f -iname '*.md' -print0 | xargs -0 pcregrep --color='auto' -nr '[^\x00-\x7F]'`
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2779
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-21 21:58:56 +02:00
lizzie d0206c35fb [qt] fix aspect ratio enum mismatch for framebuffer (#2792)
the framebuffer:
```c++
enum class AspectRatio {
    Default,
    R4_3,
    R21_9,
    R16_10,
    StretchToWindow,
};
```
the actual enum
```c++
ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch);
```
If someone were to add a new setting it would likely cause catastrophe.

1280/720 = 16/9

Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2792
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-21 21:39:09 +02:00
crueter df26fe2cac [cmake, android] remove stale popups, fix freebsd sdl2 (#2794)
FreeBSD has the wonderful feature of defining symbols that conflict with
itself making statically linking sdl2 literally impossible. What a
wonderful feature, wow I wonder why FreeBSD has so little market share
🤔

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2794
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
2025-10-21 21:08:13 +02:00
crueter f1debdbac5 [license-header] make it actually work with posix shells (#2797)
grep doesn't support -P in POSIX, so to get around this we just replace
\n with space and match that with a POSIX basic expression

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2797
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
2025-10-21 21:00:26 +02:00
lizzie f08f4cccdc [dynarmic/cmake] fatal fail on darwin if mig fails (#2802)
Back-ported from Azahar dynarmic [commit](https://github.com/azahar-emu/dynarmic/commit/cbca2f5761a838e99ee6a9ffde206f9e076569d0)

Co-authored-by: Marcin Serwin <marcin@serwin.dev>
Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2802
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-10-21 20:50:36 +02:00
crueter bff09f36cc [update_checker] Use bundled Mozilla certificates for httplib (#2785)
Previously, using bundled OpenSSL would result in the SSL library to
fail to resolve certificates due to weird system funkiness that is
basically impossible to deal with in a way that won't give you anal
cancer. So to solve this the OpenSSL CI now bundles a precompiled
certificate from Mozilla, which makes the update checker work

Needs update checker testing on Windows and Android first and foremost

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2785
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
2025-10-21 20:43:42 +02:00
crueter e33d426ac4 [cmake] set boost components as optional (#2807)
https://github.com/boostorg/system/issues/132

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2807
2025-10-21 05:49:02 +02:00
292 changed files with 18154 additions and 23139 deletions
+7 -9
View File
@@ -66,20 +66,18 @@ header_line2() {
echo "$1 SPDX-License-Identifier: $LICENSE"
}
# PCRE header string
pcre_header() {
begin="$1"
echo "(?s)$(header_line1 "$begin").*$(header_line2 "$begin")"
}
check_header() {
begin="$1"
file="$2"
content="$(head -n5 < "$2")"
header="$(pcre_header "$begin")"
# separate things out as spaces to make our lives 100000000x easier
content="$(head -n5 < "$2" | tr '\n' ' ')"
if ! echo "$content" | grep -Pzo "$header" > /dev/null; then
line1="$(header_line1 "$begin")"
line2="$(header_line2 "$begin")"
# perl and awk are actually awful, so to avoid this problem we avoid it by avoiding it
if ! echo "$content" | grep -o "$line1 $line2" >/dev/null; then
# SRC_FILES is Kotlin/C++
# OTHER_FILES is sh, CMake
case "$begin" in
+2 -1
View File
@@ -67,8 +67,9 @@ else
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
fi
if [ "$DEVEL" != "true" ]; then
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_UPDATE_CHECKER=ON)
fi
if [ "$USE_WEBENGINE" = "true" ]; then
+2 -2
View File
@@ -36,8 +36,8 @@ cmake .. -G Ninja \
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
-DDYNARMIC_ENABLE_LTO=ON \
-DYUZU_USE_BUNDLED_QT=${BUNDLE_QT:-false} \
-DUSE_CCACHE=${CCACHE:-false} \
-DENABLE_QT_UPDATE_CHECKER=${DEVEL:-true} \
-DUSE_CCACHE=${CCACHE:-false} \
-DENABLE_UPDATE_CHECKER=${DEVEL:-true} \
"${EXTRA_CMAKE_FLAGS[@]}" \
"$@"
-60
View File
@@ -1,60 +0,0 @@
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
$ErrorActionPreference = "Stop"
# Check if running as administrator
if (-not ([bool](net session 2>$null))) {
Write-Host "This script must be run with administrator privileges!"
Exit 1
}
$VSVer = "17"
$ExeFile = "vs_community.exe"
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
$Destination = "./$ExeFile"
Write-Host "Downloading Visual Studio Build Tools from $Uri"
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($Uri, $Destination)
Write-Host "Finished downloading $ExeFile"
$Arguments = @(
"--quiet", # Suppress installer UI
"--wait", # Wait for installation to complete
"--norestart", # Prevent automatic restart
"--force", # Force installation even if components are already installed
"--add Microsoft.VisualStudio.Workload.NativeDesktop", # Desktop development with C++
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # Core C++ compiler/tools for x86/x64
"--add Microsoft.VisualStudio.Component.Windows11SDK.26100",# Windows 11 SDK (26100)
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041",# Windows 10 SDK (19041)
"--add Microsoft.VisualStudio.Component.VC.Llvm.Clang", # LLVM Clang compiler
"--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset", # LLVM Clang integration toolset
"--add Microsoft.VisualStudio.Component.Windows11SDK.22621",# Windows 11 SDK (22621)
"--add Microsoft.VisualStudio.Component.VC.CMake.Project", # CMake project support
"--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", # VC++ 14.2 toolset
"--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang" # LLVM Clang for native desktop
)
Write-Host "Installing Visual Studio Build Tools"
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -ArgumentList $Arguments
# Spinner while installing
$Spinner = "|/-\"
$i = 0
while (-not $InstallProcess.HasExited) {
Write-Host -NoNewline ("`rInstalling... " + $Spinner[$i % $Spinner.Length])
Start-Sleep -Milliseconds 250
$i++
}
# Clear spinner line
Write-Host "`rSetup completed! "
$ExitCode = $InstallProcess.ExitCode
if ($ExitCode -ne 0) {
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
Exit $ExitCode
}
Write-Host "Finished installing Visual Studio Build Tools"
-152
View File
@@ -1,152 +0,0 @@
# TODO: This document needs to be formatted,
# some stuff needs cleaned up etc
name: eden-build
#on:
# push:
# branches: [ "master" ]
# TODO: combine build.yml into trigger_release.yml
jobs:
source:
if: ${{ !github.head_ref }}
runs-on: source
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Pack
run: ./.ci/source.sh
- name: Upload
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: source.zip
path: artifacts/
windows:
runs-on: windows
strategy:
matrix:
target: ["msvc"] # TODO: Add msys2
defaults:
run:
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
env:
CCACHE_DIR: ${{ runner.workspace }}/.cache/.ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: windows
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Set up vcpkg cache
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/vcpkg_installed
${{ github.workspace }}/build/externals
${{ github.workspace }}/.vcpkg
key: ${{ runner.os }}-${{ matrix.target }}-vcpkg-${{ hashFiles('**/CMakeLists.txt', '**/vcpkg.json') }}-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-${{ matrix.target }}-vcpkg-
- name: Set up MSVC
uses: https://github.com/ilammy/msvc-dev-cmd@v1
if: ${{ matrix.target == 'msvc' }}
- name: Cygwin with autoconf # NEEDED FOR LIBUSB
shell: cmd
run: ./.ci/windows/cygwin.bat
- name: Configure & Build
shell: bash
run: |
./.ci/windows/qt-envvars.sh
DEVEL=true WINDEPLOYQT="/c/Qt/6.9.0/msvc2022_64/bin/windeployqt6.exe" .ci/windows/build.sh -DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6
- name: Package artifacts
shell: bash
run: |
./.ci/windows/qt-envvars.sh
./.ci/windows/package.sh
- name: Upload Windows artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: ${{ matrix.target }}.zip
path: artifacts/*
linux:
runs-on: linux
env:
CCACHE_DIR: /home/runner/.cache/ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: linux
TARGET: fresh
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Build
run: TARGET=appimage DEVEL=true ./.ci/linux/build.sh
- name: Package AppImage
run: DEVEL=true ./.ci/linux/package.sh &> /dev/null
- name: Upload Linux artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 3
name: linux.zip
path: ./*.AppImage
android:
runs-on: android
env:
OS: android
TARGET: universal
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Set tag name
run: |
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
fi
echo $GIT_TAG_NAME
- name: Build
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
env:
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
- name: Package Android artifacts
run: ./.ci/android/package.sh
- name: Upload Android artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: android.zip
path: artifacts/*
-203
View File
@@ -1,203 +0,0 @@
name: Build Application and Make Release
#on:
# push:
# tags: [ "*" ]
permissions:
contents: write
jobs:
source:
runs-on: source
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Pack
run: ./.ci/source.sh
- name: Upload
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: source.zip
path: artifacts/
windows:
runs-on: windows
strategy:
matrix:
target: ["msvc"] # TODO: Add msys2
defaults:
run:
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
env:
CCACHE_DIR: ${{ runner.workspace }}/.cache/.ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: windows
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Set up vcpkg cache
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/vcpkg_installed
${{ github.workspace }}/build/externals
${{ github.workspace }}/.vcpkg
key: ${{ runner.os }}-${{ matrix.target }}-vcpkg-${{ hashFiles('**/CMakeLists.txt', '**/vcpkg.json') }}-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-${{ matrix.target }}-vcpkg-
- name: Set up MSVC
uses: https://github.com/ilammy/msvc-dev-cmd@v1
if: ${{ matrix.target == 'msvc' }}
- name: Cygwin with autoconf # NEEDED FOR LIBUSB
shell: cmd
run: ./.ci/windows/cygwin.bat
- name: Configure & Build
shell: bash
run: DEVEL=false ./.ci/windows/build.sh
- name: Package artifacts
shell: bash
run: |
export PATH="${PATH}:/c/Qt/6.9.0/msvc2022_64/bin"
./.ci/windows/package.sh
- name: Upload Windows artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: ${{ matrix.target }}.zip
path: artifacts/*
linux:
runs-on: linux
env:
CCACHE_DIR: /home/runner/.cache/ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: linux
TARGET: fresh
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Build
run: TARGET=appimage RELEASE=1 ./.ci/linux/build.sh v3 8
- name: Package AppImage
run: ./.ci/linux/package.sh v3 &> /dev/null
- name: Upload Linux artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: linux.zip
path: ./*.AppImage*
android:
runs-on: android
env:
CCACHE_DIR: /home/runner/.cache/ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: android
TARGET: universal
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Set tag name
run: |
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
fi
echo $GIT_TAG_NAME
- name: Build
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
env:
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
- name: Package Android artifacts
run: ./.ci/android/package.sh
- name: Upload Android artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: android.zip
path: artifacts/*
create_release:
needs: [linux, windows, android]
runs-on: linux
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'recursive'
path: 'eden-source'
- name: Download artifacts
uses: forgejo/download-artifact@v4
with:
path: artifacts
- name: Grab and store version
run: |
cd eden-source
tag_name=$(git describe --tags --abbrev=0)
echo "VERSION=$tag_name" >> $GITHUB_ENV
echo $tag_name
- name: Package artifacts properly
shell: bash
run: |
set -ex
mv ${{ github.workspace }}/eden-source eden-${{ env.VERSION }}
cd artifacts
ls *.zip
mkdir -p dist
cp linux.zip/Eden-*.AppImage dist/Eden-Linux-${{ env.VERSION }}-amd64.AppImage
cp linux.zip/Eden-*.AppImage.zsync dist/Eden-Linux-${{ env.VERSION }}-amd64.AppImage.zsync
cp msvc.zip/eden-windows-msvc*.zip dist/Eden-Windows-MSVC-${{ env.VERSION }}-amd64.zip
cp android.zip/eden-android*.apk dist/Eden-Android-${{ env.VERSION }}.apk
cp android.zip/eden-android*.aab dist/Eden-Android-${{ env.VERSION }}.aab
cp source.zip/eden-unified-source*.tar.xz dist/Eden-Source-${{ env.VERSION }}.tar.xz
cp source.zip/eden-unified-source*.tar.xz.sha256sum dist/Eden-Source-${{ env.VERSION }}.tar.xz.sha256sum
- name: Create release
id: create_release
uses: actions/forgejo-release@v2.6.0
with:
direction: upload
tag: ${{ env.VERSION }}
title: Eden ${{ env.VERSION }}
release-dir: artifacts/dist/
+49
View File
@@ -0,0 +1,49 @@
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index be7f442..5fd0438 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -1766,9 +1766,10 @@ int singleMain()
glslang::FinalizeProcess();
} else {
ShInitialize();
+#ifndef __HAIKU__
ShInitialize(); // also test reference counting of users
ShFinalize(); // also test reference counting of users
-
+#endif
bool printShaderNames = workList.size() > 1;
if (Options & EOptionMultiThreaded) {
@@ -1793,8 +1794,9 @@ int singleMain()
PutsIfNonEmpty(WorkItems[w]->results.c_str());
}
}
-
+#ifndef __HAIKU__
ShFinalize();
+#endif
}
if (CompileFailed.load())
@@ -1809,8 +1811,10 @@ int C_DECL main(int argc, char* argv[])
{
ProcessArguments(WorkItems, argc, argv);
+#ifdef __HAIKU__
+ return singleMain();
+#else
int ret = 0;
-
// Loop over the entire init/finalize cycle to watch memory changes
const int iterations = 1;
if (iterations > 1)
@@ -1820,8 +1824,8 @@ int C_DECL main(int argc, char* argv[])
if (iterations > 1)
glslang::OS_DumpMemoryCounters();
}
-
return ret;
+#endif
}
//
+52
View File
@@ -0,0 +1,52 @@
From e1a946ffb79022d38351a0623f819a5419965c3e Mon Sep 17 00:00:00 2001
From: crueter <crueter@eden-emu.dev>
Date: Fri, 24 Oct 2025 23:41:09 -0700
Subject: [PATCH] [build] Fix MinGW missing GetAddrInfoExCancel definition
MinGW does not define GetAddrInfoExCancel in its wstcpi whatever header,
so to get around this we can just load it with GetProcAddress et al.
Signed-off-by: crueter <crueter@eden-emu.dev>
---
httplib.h | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/httplib.h b/httplib.h
index e15ba44..90a76dc 100644
--- a/httplib.h
+++ b/httplib.h
@@ -203,11 +203,13 @@
#error Sorry, Visual Studio versions prior to 2015 are not supported
#endif
-#pragma comment(lib, "ws2_32.lib")
-
using ssize_t = __int64;
#endif // _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#pragma comment(lib, "ws2_32.lib")
+#endif
+
#ifndef S_ISREG
#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG)
#endif // S_ISREG
@@ -3557,7 +3559,15 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
auto wait_result =
::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000));
if (wait_result == WAIT_TIMEOUT) {
+#ifdef __MINGW32__
+ typedef INT (WSAAPI *PFN_GETADDRINFOEXCANCEL)(HANDLE *CancelHandle);
+ auto wsdll = LoadLibraryW((wchar_t*) "ws2_32.lib");
+ PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel = (PFN_GETADDRINFOEXCANCEL) GetProcAddress(wsdll, "GetAddrInfoExCancel");
+
+ if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
+#else
if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); }
+#endif
::CloseHandle(event);
return EAI_AGAIN;
}
--
2.51.0
@@ -0,0 +1,129 @@
From d765ebed3598ddfd7167fc546474626ac5ef9498 Mon Sep 17 00:00:00 2001
From: Anthony Roberts <anthony.roberts@linaro.org>
Date: Fri, 2 Aug 2024 16:55:57 +0100
Subject: [PATCH] Add support for clang-cl on Windows (#633)
This commit adds support for clang-cl (clang, pretending to be MSVC) to
SSE2NEON on Windows ARM64 platforms. This change is part of some Blender
work, as using clang-cl provides a ~20-40% speedup compared to MSVC.
Compiled with the following command line (via a VS2022 Native ARM64 Tools
CMD window):
msbuild sse2neon.vcxproj /p:Configuration=Release /p:CLToolExe=clang-cl.exe
/p:CLToolPath="C:\Program Files\LLVM\bin\"
Known failures in test suite:
Test mm_cvttpd_epi32
Test rdtsc
Co-authored-by: Anthony Roberts <anthony.roberts@linaro.org>
---
sse2neon.h | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/sse2neon.h b/sse2neon.h
index 56254b5..76cf8e3 100644
--- a/sse2neon.h
+++ b/sse2neon.h
@@ -180,7 +180,7 @@
}
/* Compiler barrier */
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
#define SSE2NEON_BARRIER() _ReadWriteBarrier()
#else
#define SSE2NEON_BARRIER() \
@@ -856,7 +856,7 @@ FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b)
{
poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0);
poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0);
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
__n64 a1 = {a}, b1 = {b};
return vreinterpretq_u64_p128(vmull_p64(a1, b1));
#else
@@ -1767,7 +1767,7 @@ FORCE_INLINE void _mm_free(void *addr)
FORCE_INLINE uint64_t _sse2neon_get_fpcr(void)
{
uint64_t value;
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
value = _ReadStatusReg(ARM64_FPCR);
#else
__asm__ __volatile__("mrs %0, FPCR" : "=r"(value)); /* read */
@@ -1777,7 +1777,7 @@ FORCE_INLINE uint64_t _sse2neon_get_fpcr(void)
FORCE_INLINE void _sse2neon_set_fpcr(uint64_t value)
{
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
_WriteStatusReg(ARM64_FPCR, value);
#else
__asm__ __volatile__("msr FPCR, %0" ::"r"(value)); /* write */
@@ -2246,7 +2246,7 @@ FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b)
FORCE_INLINE void _mm_prefetch(char const *p, int i)
{
(void) i;
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
switch (i) {
case _MM_HINT_NTA:
__prefetch2(p, 1);
@@ -4817,7 +4817,7 @@ FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b)
// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_pause
FORCE_INLINE void _mm_pause(void)
{
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
__isb(_ARM64_BARRIER_SY);
#else
__asm__ __volatile__("isb\n");
@@ -5713,7 +5713,7 @@ FORCE_INLINE __m128d _mm_undefined_pd(void)
#pragma GCC diagnostic ignored "-Wuninitialized"
#endif
__m128d a;
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
a = _mm_setzero_pd();
#endif
return a;
@@ -8127,7 +8127,7 @@ FORCE_INLINE int _sse2neon_sido_negative(int res, int lb, int imm8, int bound)
FORCE_INLINE int _sse2neon_clz(unsigned int x)
{
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(__clang__)
unsigned long cnt = 0;
if (_BitScanReverse(&cnt, x))
return 31 - cnt;
@@ -8139,7 +8139,7 @@ FORCE_INLINE int _sse2neon_clz(unsigned int x)
FORCE_INLINE int _sse2neon_ctz(unsigned int x)
{
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(__clang__)
unsigned long cnt = 0;
if (_BitScanForward(&cnt, x))
return cnt;
@@ -9055,7 +9055,7 @@ FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon)
// AESE does ShiftRows and SubBytes on A
uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0));
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) || defined(__clang__)
uint8x16_t dest = {
// Undo ShiftRows step from AESE and extract X1 and X3
u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1)
@@ -9242,7 +9242,7 @@ FORCE_INLINE uint64_t _rdtsc(void)
* bits wide and it is attributed with the flag 'cap_user_time_short'
* is true.
*/
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && !defined(__clang__)
val = _ReadStatusReg(ARM64_SYSREG(3, 3, 14, 0, 2));
#else
__asm__ __volatile__("mrs %0, cntvct_el0" : "=r"(val));
--
2.48.1
+52 -49
View File
@@ -13,6 +13,8 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
set(PLATFORM_OPENBSD ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
set(PLATFORM_NETBSD ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
set(PLATFORM_HAIKU ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(PLATFORM_LINUX ON)
endif()
@@ -175,13 +177,14 @@ endif()
# qt stuff
option(ENABLE_QT "Enable the Qt frontend" ON)
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
option(ENABLE_QT_UPDATE_CHECKER "Enable update checker for the Qt frontend" OFF)
option(ENABLE_UPDATE_CHECKER "Enable update checker (for Qt and Android)" OFF)
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
# FreeBSD doesn't have a cubeb port yet, vendoring it isn't required (it's optional anyways)
cmake_dependent_option(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT PLATFORM_FREEBSD" OFF)
set(EXT_DEFAULT OFF)
if (MSVC OR ANDROID)
@@ -196,7 +199,8 @@ cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from source" "${PL
# sirit
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${EXT_DEFAULT})
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
# Re-allow on FreeBSD once its on mainline ports
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "WIN32 OR PLATFORM_LINUX OR APPLE" OFF)
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT WIN32 OR NOT ARCHITECTURE_arm64" OFF)
mark_as_advanced(FORCE ENABLE_OPENGL)
@@ -208,11 +212,6 @@ cmake_dependent_option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
if (YUZU_USE_PRECOMPILED_HEADERS)
message(STATUS "Using Precompiled Headers.")
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
endif()
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
if(YUZU_ENABLE_LTO)
include(CheckIPOSupported)
@@ -231,9 +230,6 @@ if(USE_CCACHE)
message(STATUS "Found ccache at: ${CCACHE_BINARY}")
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_BINARY})
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BINARY})
if (YUZU_USE_PRECOMPILED_HEADERS)
message(FATAL_ERROR "Precompiled headers are incompatible with ccache. Re-run CMake with -DYUZU_USE_PRECOMPILED_HEADERS=OFF.")
endif()
else()
message(WARNING "USE_CCACHE enabled, but no executable found at: ${CCACHE_PATH}")
endif()
@@ -431,6 +427,9 @@ include(CPMUtil)
if (ENABLE_OPENSSL)
if (YUZU_USE_BUNDLED_OPENSSL)
AddJsonPackage(openssl)
if (OpenSSL_ADDED)
add_compile_definitions(YUZU_BUNDLED_OPENSSL)
endif()
endif()
find_package(OpenSSL 1.1.1 REQUIRED)
@@ -532,11 +531,7 @@ else()
find_package(zstd 1.5 REQUIRED MODULE)
# wow
if (PLATFORM_LINUX)
find_package(Boost 1.57.0 CONFIG REQUIRED headers context system fiber)
else()
find_package(Boost 1.57.0 CONFIG REQUIRED)
endif()
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
find_package(gamemode 1.7 MODULE)
@@ -576,6 +571,35 @@ function(create_target_directory_groups target_name)
endforeach()
endfunction()
# Platform-specific library requirements
# Put these BEFORE EXTERNALS or Boost WILL die
# =============================================
if (APPLE)
# Umbrella framework for everything GUI-related
find_library(COCOA_LIBRARY Cocoa)
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
find_library(ICONV_LIBRARY iconv REQUIRED)
list(APPEND PLATFORM_LIBRARIES ${ICONV_LIBRARY})
elseif (WIN32)
# Target Windows 10
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
set(PLATFORM_LIBRARIES winmm ws2_32 iphlpapi)
if (MINGW)
# PSAPI is the Process Status API
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version)
endif()
elseif (PLATFORM_HAIKU)
# Haiku is so special :)
# Some fucking genius decided to name an entire module "network" in 2019
# this caused great disaster amongst the Haiku community who had came first with
# their "libnetwork.so"; since CMake doesn't do magic, we have to use an ABSOLUTE PATH
# to the library itself, otherwise it will think we are linking to... our network thing
set(PLATFORM_LIBRARIES bsd /boot/system/lib/libnetwork.so)
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
set(PLATFORM_LIBRARIES rt)
endif()
add_subdirectory(externals)
# pass targets from externals
@@ -587,6 +611,9 @@ find_package(VulkanUtilityLibraries)
find_package(SimpleIni)
find_package(SPIRV-Tools)
find_package(sirit)
if (ARCHITECTURE_arm64)
find_package(sse2neon)
endif()
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
find_package(xbyak)
@@ -597,7 +624,7 @@ if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
# find_package(httplib CONFIG)
endif()
if (ENABLE_WEB_SERVICE)
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
find_package(cpp-jwt)
endif()
@@ -684,12 +711,17 @@ function(set_yuzu_qt_components)
if (ENABLE_QT_TRANSLATION)
list(APPEND YUZU_QT_COMPONENTS2 LinguistTools)
endif()
if (USE_DISCORD_PRESENCE)
list(APPEND YUZU_QT_COMPONENTS2 Network)
endif()
set(YUZU_QT_COMPONENTS ${YUZU_QT_COMPONENTS2} PARENT_SCOPE)
endfunction(set_yuzu_qt_components)
if(ENABLE_QT)
set_yuzu_qt_components()
find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS})
set(QT_MAJOR_VERSION 6)
# Qt6 sets cxx_std_17 and we need to undo that
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
endif()
if (UNIX AND NOT APPLE AND NOT ANDROID)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBVA libva)
@@ -705,14 +737,6 @@ if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS "https://github.com/FFmpeg/FFmpeg")
endif()
if(ENABLE_QT)
set_yuzu_qt_components()
find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS})
set(QT_MAJOR_VERSION 6)
# Qt6 sets cxx_std_17 and we need to undo that
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
endif()
if (WIN32 AND YUZU_CRASH_DUMPS)
set(BREAKPAD_VER "breakpad-c89f9dd")
download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd")
@@ -729,27 +753,6 @@ endif()
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# Platform-specific library requirements
# ======================================
if (APPLE)
# Umbrella framework for everything GUI-related
find_library(COCOA_LIBRARY Cocoa)
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
find_library(ICONV_LIBRARY iconv REQUIRED)
list(APPEND PLATFORM_LIBRARIES ${ICONV_LIBRARY})
elseif (WIN32)
# Target Windows 10
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
set(PLATFORM_LIBRARIES winmm ws2_32 iphlpapi)
if (MINGW)
# PSAPI is the Process Status API
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version)
endif()
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
set(PLATFORM_LIBRARIES rt)
endif()
# Setup a custom clang-format target (if clang-format can be found) that will run
# against all the src files. This should be used before making a pull request.
# =======================================================================
-15
View File
@@ -1,15 +0,0 @@
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# buildcache wrapper
OPTION(USE_CCACHE "Use buildcache for compilation" OFF)
IF(USE_CCACHE)
FIND_PROGRAM(CCACHE buildcache)
IF (CCACHE)
MESSAGE(STATUS "Using buildcache found in PATH")
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
ELSE(CCACHE)
MESSAGE(WARNING "USE_CCACHE enabled, but no buildcache executable found")
ENDIF(CCACHE)
ENDIF(USE_CCACHE)
+354
View File
@@ -0,0 +1,354 @@
[
{
"compatibility": 0,
"directory": "the-legend-of-zelda-breath-of-the-wild",
"releases": [
{"id": "01007EF00011E000"}
],
"title": "The Legend of Zelda: Breath of the Wild"
},
{
"compatibility": 1,
"directory": "super-mario-odyssey",
"releases": [
{"id": "0100000000010000"}
],
"title": "Super Mario Odyssey"
},
{
"compatibility": 0,
"directory": "animal-crossing-new-horizons",
"releases": [
{"id": "01006F8002326000"}
],
"title": "Animal Crossing: New Horizons"
},
{
"compatibility": 1,
"directory": "pokemon-legends-z-a",
"releases": [
{"id": "0100F43008C44000"}
],
"title": "Pokémon Legends: Z-A"
},
{
"compatibility": 1,
"directory": "the-legend-of-zelda-tears-of-the-kingdom",
"releases": [
{"id": "0100F2C0115B6000"}
],
"title": "The Legend of Zelda: Tears of the Kingdom"
},
{
"compatibility": 0,
"directory": "super-mario-galaxy",
"releases": [
{"id": "010099C022B96000"}
],
"title": "Super Mario Galaxy"
},
{
"compatibility": 3,
"directory": "star-wars-republic-commando",
"releases": [
{"id": "0100FA10115F8000"}
],
"title": "Star Wars: Republic Commando"
},
{
"compatibility": 0,
"directory": "doki-doki-literature-club-plus",
"releases": [
{"id": "010086901543E000"}
],
"title": "Doki Doki Literature Club Plus"
},
{
"compatibility": 1,
"directory": "pokemon-scarlet",
"releases": [
{"id": "0100A3D008C5C000"}
],
"title": "Pokémon Scarlet"
},
{
"compatibility": 1,
"directory": "pokemon-violet",
"releases": [
{"id": "01008F6008C5E000"}
],
"title": "Pokémon Violet"
},
{
"compatibility": 2,
"directory": "pokemon-legends-arceus",
"releases": [
{"id": "01001E300D162000"}
],
"title": "Pokémon Legends: Arceus"
},
{
"compatibility": 0,
"directory": "splatoon-2",
"releases": [
{"id": "01003BC0000A0000"}
],
"title": "Splatoon 2"
},
{
"compatibility": 1,
"directory": "super-smash-bros-ultimate",
"releases": [
{"id": "01006A800016E000"}
],
"title": "Super Smash Bros. Ultimate"
},
{
"compatibility": 0,
"directory": "mario-kart-8-deluxe",
"releases": [
{"id": "0100152000022000"}
],
"title": "Mario Kart 8 Deluxe"
},
{
"compatibility": 0,
"directory": "splatoon-3",
"releases": [
{"id": "0100C2500FC20000"}
],
"title": "Splatoon 3"
},
{
"compatibility": 0,
"directory": "new-super-mario-bros-u-deluxe",
"releases": [
{"id": "0100EA80032EA000"}
],
"title": "New Super Mario Bros. U Deluxe"
},
{
"compatibility": 0,
"directory": "hyrule-warriors-age-of-calamity",
"releases": [
{"id": "01002B00111A2000"}
],
"title": "Hyrule Warriors: Age of Calamity"
},
{
"compatibility": 2,
"directory": "luigis-mansion-3",
"releases": [
{"id": "0100DCA0064A6000"}
],
"title": "Luigi's Mansion 3"
},
{
"compatibility": 2,
"directory": "pokemon-brilliant-diamond",
"releases": [
{"id": "0100000011D90000"}
],
"title": "Pokémon Brilliant Diamond"
},
{
"compatibility": 2,
"directory": "pokemon-shining-pearl",
"releases": [
{"id": "010018E011D92000"}
],
"title": "Pokémon Shining Pearl"
},
{
"compatibility": 1,
"directory": "super-mario-3d-world-bowsers-fury",
"releases": [
{"id": "010028600EBDA000"}
],
"title": "Super Mario 3D World + Bowser's Fury"
},
{
"compatibility": 0,
"directory": "the-legend-of-zelda-links-awakening",
"releases": [
{"id": "01006BB00C6F0000"}
],
"title": "The Legend of Zelda: Link's Awakening"
},
{
"compatibility": 1,
"directory": "fire-emblem-three-houses",
"releases": [
{"id": "010055D009F78000"}
],
"title": "Fire Emblem: Three Houses"
},
{
"compatibility": 2,
"directory": "metroid-dread",
"releases": [
{"id": "010093801237C000"}
],
"title": "Metroid Dread"
},
{
"compatibility": 0,
"directory": "paper-mario-the-origami-king",
"releases": [
{"id": "0100A3900C3E2000"}
],
"title": "Paper Mario: The Origami King"
},
{
"compatibility": 1,
"directory": "xenoblade-chronicles-definitive-edition",
"releases": [
{"id": "0100FF500E34A000"}
],
"title": "Xenoblade Chronicles: Definitive Edition"
},
{
"compatibility": 2,
"directory": "xenoblade-chronicles-3",
"releases": [
{"id": "010074F013262000"}
],
"title": "Xenoblade Chronicles 3"
},
{
"compatibility": 1,
"directory": "pikmin-3-deluxe",
"releases": [
{"id": "0100F8600D4B0000"}
],
"title": "Pikmin 3 Deluxe"
},
{
"compatibility": 0,
"directory": "donkey-kong-country-tropical-freeze",
"releases": [
{"id": "0100C1F0054B6000"}
],
"title": "Donkey Kong Country: Tropical Freeze"
},
{
"compatibility": 1,
"directory": "kirby-and-the-forgotten-land",
"releases": [
{"id": "01004D300C5AE000"}
],
"title": "Kirby and the Forgotten Land"
},
{
"compatibility": 2,
"directory": "mario-party-superstars",
"releases": [
{"id": "01006B400D8B2000"}
],
"title": "Mario Party Superstars"
},
{
"compatibility": 0,
"directory": "clubhouse-games-51-worldwide-classics",
"releases": [
{"id": "0100F8600D4B0000"}
],
"title": "Clubhouse Games: 51 Worldwide Classics"
},
{
"compatibility": 1,
"directory": "ring-fit-adventure",
"releases": [
{"id": "01006B300BAF8000"}
],
"title": "Ring Fit Adventure"
},
{
"compatibility": 2,
"directory": "arms",
"releases": [
{"id": "01009B500007C000"}
],
"title": "ARMS"
},
{
"compatibility": 0,
"directory": "super-mario-maker-2",
"releases": [
{"id": "01009B90006DC000"}
],
"title": "Super Mario Maker 2"
},
{
"compatibility": 0,
"directory": "pokemon-lets-go-pikachu",
"releases": [
{"id": "010003F003A34000"}
],
"title": "Pokémon: Let's Go, Pikachu!"
},
{
"compatibility": 1,
"directory": "pokemon-lets-go-eevee",
"releases": [
{"id": "0100187003A36000"}
],
"title": "Pokémon: Let's Go, Eevee!"
},
{
"compatibility": 2,
"directory": "pokemon-sword",
"releases": [
{"id": "0100ABF008968000"}
],
"title": "Pokémon Sword"
},
{
"compatibility": 2,
"directory": "pokemon-shield",
"releases": [
{"id": "01008DB008C2C000"}
],
"title": "Pokémon Shield"
},
{
"compatibility": 1,
"directory": "new-pokemon-snap",
"releases": [
{"id": "0100F4300C182000"}
],
"title": "New Pokémon Snap"
},
{
"compatibility": 0,
"directory": "mario-golf-super-rush",
"releases": [
{"id": "0100C9C00E25C000"}
],
"title": "Mario Golf: Super Rush"
},
{
"compatibility": 1,
"directory": "mario-tennis-aces",
"releases": [
{"id": "0100BDE00862A000"}
],
"title": "Mario Tennis Aces"
},
{
"compatibility": 2,
"directory": "wario-ware-get-it-together",
"releases": [
{"id": "0100563010F22000"}
],
"title": "WarioWare: Get It Together!"
},
{
"compatibility": 0,
"directory": "big-brain-academy-brain-vs-brain",
"releases": [
{"id": "0100190010F24000"}
],
"title": "Big Brain Academy: Brain vs. Brain"
}
]
-5
View File
@@ -1,8 +1,3 @@
<!--
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC>
<qresource prefix="compatibility_list">
<file>compatibility_list.json</file>
+766 -622
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+591 -452
View File
File diff suppressed because it is too large Load Diff
+629 -490
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+639 -497
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+594 -455
View File
File diff suppressed because it is too large Load Diff
+628 -489
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+622 -483
View File
File diff suppressed because it is too large Load Diff
+634 -495
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+641 -502
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+590 -451
View File
File diff suppressed because it is too large Load Diff
+600 -461
View File
File diff suppressed because it is too large Load Diff
+635 -491
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,5 +1,5 @@
# ui stuff
/src/android @AleksandrPopovich @nyxynx @Producdevity
/src/android @AleksandrPopovich @kleidis @Producdevity
/src/yuzu @crueter
/src/eden @crueter
/src/frontend_common @crueter
+42
View File
@@ -1,5 +1,16 @@
# Caveats
<!-- TOC -->
- [Arch Linux](#arch-linux)
- [Gentoo Linux](#gentoo-linux)
- [macOS](#macos)
- [Solaris](#solaris)
- [HaikuOS](#haikuos)
- [OpenBSD](#openbsd)
- [FreeBSD](#freebsd)
- [NetBSD](#netbsd)
<!-- /TOC -->
## Arch Linux
- httplib AUR package is broken. Set `httplib_FORCE_BUNDLED=ON` if you have it installed.
@@ -41,6 +52,20 @@ export LIBGL_ALWAYS_SOFTWARE=1
- If using OpenIndiana, due to a bug in SDL2's CMake configuration, audio driver defaults to SunOS `<sys/audioio.h>`, which does not exist on OpenIndiana. Using external or bundled SDL2 may solve this.
- System OpenSSL generally does not work. Instead, use `-DYUZU_USE_BUNDLED_OPENSSL=ON` to use a bundled static OpenSSL, or build a system dependency from source.
## HaikuOS
It's recommended to do a `pkgman full-sync` before installing. See [HaikuOS: Installing applications](https://www.haiku-os.org/guides/daily-tasks/install-applications/). Sometimes the process may be interrupted by an error like "Interrupted syscall". Simply firing the command again fixes the issue. By default `g++` is included on the default installation.
GPU support is generally lacking/buggy, hence it's recommended to only install `pkgman install mesa_lavapipe`. Performance is acceptable for most homebrew applications and even some retail games.
For reasons unberknownst to any human being, `glslangValidator` will crash upon trying to be executed, the solution to this is to build `glslang` yourself. Apply the patch in `.patch/glslang/0001-haikuos-fix.patch`. The main issue is `ShFinalize()` is deallocating already destroyed memory; the "fix" in question is allowing the program to just leak memory and the OS will take care of the rest. See [this issue](https://web.archive.org/web/20251021183604/https://github.com/haikuports/haikuports/issues/13083).
For this reason this patch is NOT applied to default on all platforms (for obvious reasons) - instead this is a HaikuOS specific patch, apply with `git apply <absolute path to patch>` after cloning SPIRV-Tools then `make -C build` and add the resulting binary (in `build/StandAlone/glslang`) into PATH.
`cubeb_devel` will also not work, either disable cubeb or uninstall it.
Still will not run flawlessly until `mesa-24` is available. Modify CMakeCache.txt with the `.so` of libGL and libGLESv2 by doing the incredibly difficult task of copy pasting them (`cp /boot/system/lib/libGL.so .`)
## OpenBSD
After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg-build/build.make` to use `-j$(nproc)` instead of just `-j`.
@@ -57,6 +82,23 @@ The available OpenSSL port (3.0.17) is out-of-date, and using a bundled static l
## NetBSD
Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `echo 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0_2025Q3/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`:
```sh
ip6addrctl=YES
ip6addrctl_policy=ipv4_prefer
```
System provides a default `g++-10` which doesn't support the current C++ codebase; install `clang-19` with `pkgin install clang-19`. Then build with `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`.
Make may error out when generating C++ headers of SPIRV shaders, hence it's recommended to use `gmake` over the default system one.
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
```sh
pkgin python313
git clone --depth=1 https://github.com/KhronosGroup/glslang.git
cd glslang
python3.13 ./update_glslang_sources.py
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -- -j`nproc`
cmake --install build
```
+77
View File
@@ -0,0 +1,77 @@
# Coding guidelines
These are mostly "suggestions", if you feel like your code is readable, comprehensible to others; and most importantly doesn't result in unreadable spaghetti you're fine to go.
But for new developers you may find that following these guidelines will make everything x10 easier.
## Naming conventions
Simply put, types/classes are named as `PascalCase`, same for methods and functions like `AddElement`. Variables are named `like_this_snake_case` and constants are `IN_SCREAMING_CASE`.
Template typenames prefer short names like `T`, `I`, `U`, if a longer name is required either `Iterator` or `perform_action` are fine as well.
Macros must always be in `SCREAMING_CASE`. Do not use short letter macros as systems like Solaris will conflict with them; a good rule of thumb is >5 characters per macro - i.e `THIS_MACRO_IS_GOOD`, `AND_ALSO_THIS_ONE`.
Try not using hungarian notation, if you're able.
## Formatting
Do not put if/while/etc braces after lines:
```c++
// no dont do this
if (thing)
{
some(); // ...
}
// do this
if (thing) {
some(); // ...
}
// or this
if (thing)
some(); // ...
// this is also ok
if (thing) some();
```
Brace rules are lax, if you can get the point across, do it:
```c++
// this is fine
do {
if (thing) {
return 0;
}
} while (other);
// this is also ok --- albeit a bit more dense
do if (thing) return 0; while (other);
// ok as well
do {
if (thing) return 0;
} while (other);
```
There is no 80-column limit but preferably be mindful of other developer's readability (like don't just put everything onto one line).
```c++
// someone is going to be mad due to this
SDL_AudioSpec obtained;
device_name.empty() ? device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false) : device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false);
// maybe consider this
SDL_AudioSpec obtained;
if (device_name.empty()) {
device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false);
} else {
device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false);
}
// or this is fine as well
SDL_AudioSpec obtained;
device = SDL_OpenAudioDevice(device_name.empty() ? nullptr : device_name.c_str(), capture, &spec, &obtained, false);
```
+77 -30
View File
@@ -5,7 +5,6 @@ To build Eden, you MUST have a C++ compiler.
- GCC 12 also requires Clang 14+
* On Windows, this is either:
- **[MSVC](https://visualstudio.microsoft.com/downloads/)** (you should select *Community* option),
* *A convenience script to install the Visual Community Studio 2022 with necessary tools is provided in `.ci/windows/install-msvc.ps1`*
- clang-cl - can be downloaded from the MSVC installer,
- or **[MSYS2](https://www.msys2.org)**
* On macOS, this is Apple Clang
@@ -26,6 +25,9 @@ If you are on desktop and plan to use the Qt frontend, you *must* install Qt 6,
* Linux and macOS users may choose to use the installer as well.
* MSYS2 can also install Qt 6 via the package manager
If you are on Windows, a convenience script to install MSVC, MSYS2, Qt, all necessary packages for MSYS2, and set up a zsh environment with useful keybinds and aliases can be found [here](https://git.crueter.xyz/scripts/windev).
- For help setting up Qt Creator, run `./install.sh -h qtcreator`
If you are on Windows and NOT building with MSYS2, you may go [back home](Build.md) and continue.
## Externals
@@ -62,7 +64,7 @@ Certain other dependencies will be fetched by CPM regardless. System packages *c
* [libusb](https://github.com/libusb/libusb)
* [VulkanMemoryAllocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
* [sirit](https://github.com/eden-emulator/sirit)
* [httplib](https://github.com/yhirose/cpp-httplib) - if `ENABLE_QT_UPDATE_CHECKER` or `ENABLE_WEB_SERVICE` are on
* [httplib](https://github.com/yhirose/cpp-httplib) - if `ENABLE_UPDATE_CHECKER` or `ENABLE_WEB_SERVICE` are on
- This package is known to be broken on the AUR.
* [cpp-jwt](https://github.com/arun11299/cpp-jwt) 1.4+ - if `ENABLE_WEB_SERVICE` is on
* [unordered-dense](https://github.com/martinus/unordered_dense)
@@ -84,6 +86,8 @@ On riscv64:
These are commands to install all necessary dependencies on various Linux and BSD distributions, as well as macOS. Always review what you're running before you hit Enter!
Notes for writers: Include build tools as well, assume user has NOTHING installed (i.e a fresh install) but that they have updated beforehand so no `upgrade && update` or equivalent should be mentioned - except for rolling release systems like Arch.
Click on the arrows to expand.
<details>
@@ -134,6 +138,35 @@ sudo dnf install qt6-qtbase-private-devel
* Fedora 36+ users with GCC 12 need Clang and should configure CMake with: `cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`
</details>
<details>
<summary>Alpine Linux</summary>
First, enable the community repository; [see here](https://wiki.alpinelinux.org/wiki/Repositories#Enabling_the_community_repository).
```sh
# Enable the community repository
setup-apkrepos -c
# Install
apk add g++ git cmake make mbedtls-dev mbedtls-static mesa-dev qt6-qtbase-dev qt6-qtbase-private-dev libquazip1-qt6 ffmpeg-dev libusb-dev libtool boost-dev sdl2-dev zstd-dev vulkan-utility-libraries spirv-tools-dev openssl-dev nlohmann-json lz4-dev opus-dev jq patch
```
`mbedtls-static` has to be specified otherwise `libeverest.a` and `libp256m.a` will fail to be found.
</details>
<summary>Void Linux</summary>
```sh
xbps-install -Su git make cmake clang pkg-config patch mbedtls-devel SPIRV-Tools-devel SPIRV-Headers lz4 liblz4-devel boost-devel ffmpeg6-devel catch2 Vulkan-Utility-Libraries Vulkan-Headers glslang openssl-devel SDL2-devel quazip-qt6-devel qt6-base-devel qt6-qt5compat-devel fmt-devel json-c++ libenet-devel libusb-devel
```
Yes, `nlohmann-json` is just named `json-c++`. Why?
</details>
<details>
<summary>NixOS</summary>
A convenience script is provided on the root of this project [shell.nix](../shell.nix). Run the usual `nix-shell`.
</details>
<details>
<summary>macOS</summary>
@@ -150,40 +183,27 @@ To run with MoltenVK, install additional dependencies:
brew install molten-vk vulkan-loader
```
</details>
[Caveats](./Caveats.md#macos).
</details>
<details>
<summary>FreeBSD</summary>
As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/jwt-cpp devel/unordered-dense devel/zydis`
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
</details>
[Caveats](./Caveats.md#freebsd).
</details>
<details>
<summary>NetBSD</summary>
Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `cat 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0_2025Q3/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`:
```
ip6addrctl=YES
ip6addrctl_policy=ipv4_prefer
```
For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers ffmpeg7 libva nlohmann-json jq libopus qt6 mbedtls3 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config libusb1`.
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
```sh
pkgin python313
git clone https://github.com/KhronosGroup/glslang.git
cd glslang
python3.13 ./update_glslang_sources.py
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -- -j`nproc`
cmake --install build
```
[Caveats](./Caveats.md#netbsd).
</details>
<details>
<summary>OpenBSD</summary>
@@ -192,8 +212,9 @@ pkg_add -u
pkg_add cmake nasm git boost unzip--iconv autoconf-2.72p0 bash ffmpeg glslang gmake llvm-19.1.7p3 qt6 jq fmt nlohmann-json enet boost vulkan-utility-libraries vulkan-headers spirv-headers spirv-tools catch2 sdl2 libusb1-1.0.27
```
</details>
[Caveats](./Caveats.md#openbsd).
</details>
<details>
<summary>Solaris / OpenIndiana</summary>
@@ -205,23 +226,49 @@ Run the usual update + install of essential toolings: `sudo pkg update && sudo p
- **clang**: Version 20 is broken, use `sudo pkg install developer/clang-19`.
Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/lz4 libusb-1 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm developer/fmt`.
</details>
[Caveats](./Caveats.md#solaris).
</details>
<details>
<summary>MSYS2</summary>
* Open the `MSYS2 MinGW 64-bit` shell (`mingw64.exe`)
* Download and install all dependencies using:
* `pacman -Syu git make mingw-w64-x86_64-SDL2 mingw-w64-x86_64-cmake mingw-w64-x86_64-python-pip mingw-w64-x86_64-qt6 mingw-w64-x86_64-toolchain autoconf libtool automake-wrapper`
* Add MinGW binaries to the PATH:
* `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
* Add VulkanSDK to the PATH:
* `echo 'PATH=$(readlink -e /c/VulkanSDK/*/Bin/):$PATH' >> ~/.bashrc`
</details>
* Download and install all dependencies:
```
BASE="git make autoconf libtool automake-wrapper jq patch"
MINGW="SDL2 cmake python-pip qt6-base toolchain ffmpeg boost catch fmt lz4 nlohmann-json openssl zlib zstd enet opus mbedtls vulkan-devel libusb vulkan-memory-allocator unordered_dense zydis clang ccache"
packages="$BASE"
for pkg in $MINGW; do
packages="$packages mingw-w64-x86_64-$pkg"
done
pacman -Syu --needed --noconfirm $packages
```
* Notes:
- Using `qt6-static` is possible but currently untested.
- Other environments are entirely untested, but should theoretically work provided you install all the necessary packages.
- Clang is installed as it generally works better here. You can compile with GCC just fine, however.
- Add `qt-creator` to the `MINGW` variable to install Qt Creator. You can then create a Start Menu shortcut to the MinGW Qt Creator by running `powershell "\$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Qt Creator.lnk');\$s.TargetPath='C:\\msys64\\mingw64\\bin\\qtcreator.exe';\$s.Save()"` in Git Bash or MSYS2.
* Add MinGW binaries to the PATH if they aren't already:
* `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
* or `echo 'PATH=/mingw64/bin:$PATH' >> ~/.zshrc`
</details>
<details>
<summary>HaikuOS</summary>
```sh
pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel zydis_devel libusb1_devel libz_devel glslang mbedtls3
```
[Caveats](./Caveats.md#haikuos).
</details>
<summary>RedoxOS</summary>
TODO: Fix syscall crashes (heavy IO stalls and hangup due to net mutexes?)
```sh
sudo pkg update && sudo pkg install git cmake
sudo pkg install ffmpeg6 sdl2 zlib llvm18
+1 -2
View File
@@ -22,7 +22,6 @@ Notes:
- `YUZU_USE_BUNDLED_FFMPEG` (ON for non-UNIX) Download (Windows, Android) or build (UNIX) bundled FFmpeg
- `ENABLE_CUBEB` (ON) Enables the cubeb audio backend
- `YUZU_TESTS` (ON) Compile tests - requires Catch2
- `YUZU_USE_PRECOMPILED_HEADERS` (ON for non-UNIX) Use precompiled headers
- `YUZU_DOWNLOAD_ANDROID_VVL` (ON) Download validation layer binary for Android
- `YUZU_ENABLE_LTO` (OFF) Enable link-time optimization
* Not recommended on Windows
@@ -38,6 +37,7 @@ Notes:
- `YUZU_USE_BUNDLED_OPENSSL` (ON for MSVC) Download bundled OpenSSL build
* Always on for Android
* Unavailable on OpenBSD
- `ENABLE_UPDATE_CHECKER` (OFF) Enable update checker for the Qt an Android frontends
The following options are desktop only:
- `ENABLE_SDL2` (ON) Enable the SDL2 desktop, audio, and input frontend (HIGHLY RECOMMENDED!)
@@ -51,7 +51,6 @@ The following options are desktop only:
* Unavailable on Windows/ARM64 and Android
- `ENABLE_QT` (ON) Enable the Qt frontend (recommended)
- `ENABLE_QT_TRANSLATION` (OFF) Enable translations for the Qt frontend
- `ENABLE_QT_UPDATE_CHECKER` (OFF) Enable update checker for the Qt frontend
- `YUZU_USE_BUNDLED_QT` (ON for MSVC) Download bundled Qt binaries
* Note that using **system Qt** requires you to include the Qt CMake directory in `CMAKE_PREFIX_PATH`, e.g:
* `-DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6`
+1
View File
@@ -5,6 +5,7 @@ This contains documentation created by developers. This contains build instructi
- **[General Build Instructions](Build.md)**
- **[Cross Compiling](CrossCompile.md)**
- **[Development Guidelines](Development.md)**
- **[Coding guidelines](Coding.md)**
- **[Dependencies](Deps.md)**
- **[Debug Guidelines](./Debug.md)**
- **[CPM - CMake Package Manager](CPMUtil.md)**
+1
View File
@@ -9,3 +9,4 @@ This handbook is primarily aimed at the end-user - baking useful knowledge for e
- **[Graphics](user/Graphics.md)**
- **[Platforms and Architectures](user/Architectures.md)**
- **[Testing](user/Testing.md)**
- **[Data, savefiles and storage](user/Storage.md)**
+1 -1
View File
@@ -27,5 +27,5 @@ Boolean flags (set `true` to enable, `false` to disable):
* AppImage packaging script: `.ci/linux/package.sh`
* Accepts same arch targets as build script
* Use `DEVEL=true` to rename app to `Eden Nightly`
* Use `DEVEL=true` to rename app to `Eden Nightly` and disable the update checker
* This should generally not be used unless in a tailor-made packaging environment (e.g. Actions/CI)
+8
View File
@@ -52,6 +52,7 @@ IA-64 (Itanium) support is completely unknown. Existing amd64 packages will not
The vast majority of Eden's testing is done on Windows, Linux, and Android. However, first-class support is also provided for:
- HaikuOS
- FreeBSD
- OpenBSD
- NetBSD
@@ -126,6 +127,13 @@ BSD and Solaris distributions tend to lag behind Linux in terms of Vulkan and ot
AMD GPU support on these platforms is limited or nonexistent.
## HaikuOS
HaikuOS supports (see below) Vulkan 1.3 and has Mesa 24.0. Because OpenGL ES is used instead of the desktop flavour of OpenGL the OpenGL backend is actually worse than the Vulkan one in terms of stability and system support. OpenGL is highly not recommended due to it being: out of tree builds of Mesa and generally unstable ones at that. Users are advised to use Vulkan whenever possible.
- Additionally system drivers for NVIDIA and Intel iGPUs exist and provide a native Vulkan ICD with the `Xcb` interface as opposed to the native `BView`
- In order to obtain Vulkan 1.3 support with native `BView` support; Swiftshader can be compiled from source [see this thread](https://discuss.haiku-os.org/t/swiftshader-vulkan-software-renderer-on-haiku/11526/6).
## VMs
Eden "can" run in a VM, but only with the software renderer, *unless* you create a hardware-accelerated KVM with GPU passthrough. If you *really* want to do this and don't have a spare GPU lying around, RX 570 and 580 GPUs are extremely cheap on the black market and are powerful enough to run most commercial games at 60 FPS.
+1
View File
@@ -25,6 +25,7 @@ Eden will store configuration files in the following directories:
- **Windows**: `%AppData%\Roaming`.
- **Android**: Data is stored internally.
- **Linux, macOS, FreeBSD, Solaris, OpenBSD**: `$XDG_DATA_HOME`, `$XDG_CACHE_HOME`, `$XDG_CONFIG_HOME`.
- **HaikuOS**: `/boot/home/config/settings/eden`
If a `user` directory is present in the current working directory, that will override all global configuration directories and the emulator will use that instead.
+24
View File
@@ -47,6 +47,26 @@ Various graphical filters exist - each of them aimed at a specific target/image
While stock shaders offer a basic subset of options for most users, programs such as [ReShade](https://github.com/crosire/reshade) offer a more flexible experience. In addition to that users can also seek out modifications (mods) for enhancing visual experience (60 FPS mods, HDR, etc).
**Installing ReShade (Windows)**
1. [Download ReShade](https://reshade.me/#download) with add-on support.
- [ReShade Setup 6.6.2 (Windows 64-bit) with add-on support](https://reshade.me/downloads/ReShade_Setup_6.6.2_Addon.exe)
- SHA512 checksum: `1f09a73afa160480c13ffdd73cc04b1dc82943dddea58ad3bb9375f26b48c2787d0a85197e46b6fce32a4fd3472465520a3355ed3436241e17fba7ebaff7ffec`.
2. Open ReShade and hit browse, then the folder where `eden.exe` is at, hit open, then hit next.
3. Select Vulkan as the rendering API, hit next.
4. In "Select effects to install" screen: hit next don't change anything.
5. In "Select add on" screen: click the box for `Shader Toggler by Otis` ([GitHub](https://github.com/FransBouma/ShaderToggler)) and hit next.
**Using the Shader Toggler**
1. Launch a game, you must see a ReShade pop up afterwards.
2. Progress to a point with a flickering shader.
3. Hit the Home key on keyboard (or change binds if you don't have one).
4. Navigate to the add on tab at the top of the ReShade menu.
5. At the bottom where Shader Toggler is at open the drop down and max out the slider that says "# of fames collected" then select change shaders while staring at the flickering shader.
6. When the Shader Toggler finishes collecting frames in the top left hit Numpad 2 till it turns off the flickering lines.
7. Hit Numpad 3 to add it the group of shaders to turn off and hit done and save all toggle groups.
8. Hit the edit button and select "active at startup" for the shader to be turned off on every game launch.
9. Caps lock to manually turn on and off the shader (default key you can change it with the previous edit button)
## Driver specifics
### Mesa environment variable hacks
@@ -60,3 +80,7 @@ Unstable multithreaded optimisations are offered by the stock proprietary NVIDIA
### swrast/LLVMpipe crashes under high load
The OpenGL backend would invoke behaviour that would result in swarst/LLVMpipe writing an invalid SSA IR (on old versions of Mesa), and then proceeding to crash. The solution is using a script found in [tools/llvmpipe-run.sh](../../tools/llvmpipe-run.sh).
### HaikuOS compatibility
HaikuOS bundles a Mesa library that doesn't support full core OpenGL 4.6 (required by the emulator). This leads to HaikuOS being one of the few computer platforms where Vulkan is the only available option for users. If OpenGL is desired, Mesa has to be built manually from source. For debugging purpouses `lavapipe` is recommended over the GPU driver; there is in-kernel support for NVIDIA cards through.
+39
View File
@@ -0,0 +1,39 @@
# User Handbook - Data, savefiles and storage
## Cheats
Cheats can be placed in the two manners:
**Method 1**:
- Right click on "Open mod directory"
- Create a file called `cheat_mycheat.txt` (the file must start with `cheat_` to be recognized as one)
- Write the cheat into said text file
- Done
This method doesn't account for build IDs, so any cheats for previous builds will not be automatically filtered out.
**Method 2**:
- Right click on "Open mod directory"
- Create a folder called `My cheat`
- Inside said folder create another one: `cheats`
- Then inside said folder create a file with the build ID in hexadecimal, lowercase, for example `1234FBCDE0000000.txt`
- Write the cheat into said text file
- Done
To delete a cheat simply do the process backwards (delete the folder/file).
## Savefiles
The method to access save data is simple:
- Right click on "Open save directory"
## Maintaining a library
### ZFS
One of the best ways to keep a gallery of archives is using a ZFS pool compressed with zstd.
```sh
sudo zfs create zroot/switch`
sudo zfs set compression=zstd zroot/switch
```
A new ZFS dataset will then be available on `/zroot/switch`. From which then can be added as a normal game directory. Remember to ensure proper permissions with `chmod 755 /zroot/switch/*`.
+8 -2
View File
@@ -141,12 +141,17 @@ if (ENABLE_SDL2)
endif()
elseif (YUZU_USE_BUNDLED_SDL2)
message(STATUS "Using bundled SDL2")
if (PLATFORM_FREEBSD)
set(BUILD_SHARED_LIBS ON)
endif()
AddJsonPackage(sdl2)
endif()
find_package(SDL2 2.26.4 REQUIRED)
endif()
set(BUILD_SHARED_LIBS OFF)
# SPIRV Headers
AddJsonPackage(spirv-headers)
@@ -209,7 +214,7 @@ if (VulkanMemoryAllocator_ADDED)
endif()
# httplib
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
AddJsonPackage(httplib)
endif()
@@ -397,6 +402,7 @@ endif()
# sse2neon
if (ARCHITECTURE_arm64 AND NOT TARGET sse2neon)
AddJsonPackage(sse2neon)
add_library(sse2neon INTERFACE)
target_include_directories(sse2neon INTERFACE sse2neon)
target_include_directories(sse2neon INTERFACE ${sse2neon_SOURCE_DIR})
endif()
+13 -1
View File
@@ -30,7 +30,10 @@
"tag": "v%VERSION%",
"hash": "b364500f76e2ecb0fe21b032d831272e3f1dfeea71af74e325f8fc4ce9dcdb3c941b97a5b422bdeafb9facd058597b90f8bfc284fb9afe3c33fefa15dd5a010b",
"git_version": "0.26.0",
"find_args": "MODULE GLOBAL"
"find_args": "MODULE GLOBAL",
"patches": [
"0001-mingw.patch"
]
},
"cpp-jwt": {
"version": "1.4",
@@ -210,5 +213,14 @@
"key": "steamdeck",
"bundled": true,
"skip_updates": "true"
},
"sse2neon": {
"repo": "DLTcollab/sse2neon",
"sha": "66267b52fd",
"hash": "3aed8676e1b8c428acb076464663e3968a721457b08710a7c5f8df2fbdaa5601053c1606169a55e987e7a58dd17e3cc3b7fbf953aa891c5ac5f8ce2941862e4b",
"download_only": "true",
"patches": [
"0001-Add-support-for-clang-cl-on-Windows-633.patch"
]
}
}
+3 -5
View File
@@ -39,14 +39,12 @@
#include <stdint.h>
#endif
// TODO: We should likely vendor this in the future and just make a patch that makes the code section be like this
// this kind of macro stupidity is beyond me, but again upstream rejects patches so...
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER)
#define RENDERDOC_CC __cdecl
#elif defined(__linux__) || defined(__FreeBSD__) || defined(__sun__)
#define RENDERDOC_CC
#elif defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__)
#define RENDERDOC_CC
#else
#error "Unknown platform"
#define RENDERDOC_CC
#endif
#ifdef __cplusplus
-9285
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.05";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShellNoCC {
packages = with pkgs; [
# essential programs
git cmake clang gnumake patch jq pkg-config
# libraries
openssl boost fmt nlohmann_json lz4 zlib zstd
enet libopus vulkan-headers vulkan-utility-libraries
spirv-tools spirv-headers simpleini vulkan-memory-allocator
vulkan-loader unzip mbedtls zydis glslang python3 httplib
cpp-jwt ffmpeg-headless libusb1 cubeb
qt6.full # eden
SDL2 # eden-cli
discord-rpc gamemode # optional components
];
}
-3
View File
@@ -62,9 +62,6 @@ if (MSVC AND NOT CXX_CLANG)
/Zc:throwingNew
/GT
# Modules
/experimental:module- # Explicitly disable module support due to conflicts with precompiled headers.
# External headers diagnostics
/external:anglebrackets # Treats all headers included by #include <header>, where the header file is enclosed in angle brackets (< >), as external headers
/external:W0 # Sets the default warning level to 0 for external headers, effectively disabling warnings for them.
+19 -16
View File
@@ -74,22 +74,24 @@ android {
externalNativeBuild {
cmake {
val extraCMakeArgs = (project.findProperty("YUZU_ANDROID_ARGS") as String?)?.split("\\s+".toRegex()) ?: emptyList()
arguments.addAll(listOf(
"-DENABLE_QT=0", // Don't use QT
"-DENABLE_SDL2=0", // Don't use SDL
"-DENABLE_WEB_SERVICE=1", // Enable web service
"-DENABLE_OPENSSL=ON",
"-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
"-DYUZU_USE_CPM=ON",
"-DCPMUTIL_FORCE_BUNDLED=ON",
"-DYUZU_USE_BUNDLED_FFMPEG=ON",
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
"-DBUILD_TESTING=OFF",
"-DYUZU_TESTS=OFF",
"-DDYNARMIC_TESTS=OFF",
*extraCMakeArgs.toTypedArray()
val extraCMakeArgs =
(project.findProperty("YUZU_ANDROID_ARGS") as String?)?.split("\\s+".toRegex())
?: emptyList()
arguments.addAll(
listOf(
"-DENABLE_QT=0", // Don't use QT
"-DENABLE_SDL2=0", // Don't use SDL
"-DENABLE_WEB_SERVICE=1", // Enable web service
"-DENABLE_OPENSSL=ON",
"-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
"-DYUZU_USE_CPM=ON",
"-DCPMUTIL_FORCE_BUNDLED=ON",
"-DYUZU_USE_BUNDLED_FFMPEG=ON",
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
"-DBUILD_TESTING=OFF",
"-DYUZU_TESTS=OFF",
"-DDYNARMIC_TESTS=OFF",
*extraCMakeArgs.toTypedArray()
))
abiFilters("arm64-v8a")
@@ -227,6 +229,7 @@ android {
}
}
tasks.register<Delete>("ktlintReset", fun Delete.() {
delete(File(layout.buildDirectory.toString() + File.separator + "intermediates/ktLint"))
})
@@ -200,6 +200,21 @@ object NativeLibrary {
external fun logSettings()
/**
* Checks for available updates.
*/
external fun checkForUpdate(): String?
/**
* Return the URL to the release page
*/
external fun getUpdateUrl(version: String): String
/**
* Returns whether the update checker is enabled through CMAKE options.
*/
external fun isUpdateCheckerEnabled(): Boolean
enum class CoreError {
ErrorSystemFiles,
ErrorSavestate,
@@ -439,13 +454,6 @@ object NativeLibrary {
*/
external fun firmwareVersion(): String
/**
* Verifies installed firmware.
*
* @return The result code.
*/
external fun verifyFirmware(): Int
/**
* Check if a game requires firmware to be playable.
*
@@ -541,6 +549,21 @@ object NativeLibrary {
*/
external fun clearFilesystemProvider()
/**
* Gets the current virtual amiibo state reported by the core.
*
* @return Native enum value for the current amiibo state.
*/
external fun getVirtualAmiiboState(): Int
/**
* Loads amiibo data into the currently running emulation session.
*
* @param data Raw amiibo file contents.
* @return Native enum value representing the load result.
*/
external fun loadAmiibo(data: ByteArray): Int
/**
* Checks if all necessary keys are present for decryption
*/
@@ -12,6 +12,10 @@ import android.app.NotificationManager
import android.content.Context
import org.yuzu.yuzu_emu.features.input.NativeInput
import java.io.File
import java.io.FileOutputStream
import java.security.KeyStore
import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
import org.yuzu.yuzu_emu.utils.DocumentsTree
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
@@ -35,6 +35,8 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
PICTURE_IN_PICTURE("picture_in_picture"),
USE_CUSTOM_RTC("custom_rtc_enabled"),
BLACK_BACKGROUNDS("black_backgrounds"),
ENABLE_UPDATE_CHECKS("enable_update_checks"),
JOYSTICK_REL_CENTER("joystick_rel_center"),
DPAD_SLIDE("dpad_slide"),
HAPTIC_FEEDBACK("haptic_feedback"),
@@ -24,7 +24,7 @@ object Settings {
SECTION_INPUT_PLAYER_SIX,
SECTION_INPUT_PLAYER_SEVEN,
SECTION_INPUT_PLAYER_EIGHT,
SECTION_THEME(R.string.preferences_theme),
SECTION_APP_SETTINGS(R.string.app_settings),
SECTION_DEBUG(R.string.preferences_debug),
SECTION_EDEN_VEIL(R.string.eden_veil),
SECTION_APPLETS(R.string.applets_menu);
@@ -35,8 +35,6 @@ object Settings {
const val PREF_FIRST_APP_LAUNCH = "FirstApplicationLaunch"
const val PREF_SHOULD_SHOW_DRIVER_WARNING = "ShouldShowDriverWarning"
const val PREF_SHOULD_SHOW_PRE_ALPHA_WARNING = "ShouldShowPreAlphaWarning"
const val PREF_SHOULD_SHOW_EDENS_VEIL_DIALOG = "ShouldShowEdensVeilDialog"
const val PREF_MEMORY_WARNING_SHOWN = "MemoryWarningShown"
const val SECTION_STATS_OVERLAY = "Stats Overlay"
@@ -750,6 +750,12 @@ abstract class SettingsItem(
valuesId = R.array.rendererApiValues
)
)
put(
SwitchSetting(
BooleanSetting.ENABLE_UPDATE_CHECKS,
titleId = R.string.enable_update_checks,
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_DEBUG,
@@ -82,9 +82,6 @@ class SettingsFragmentPresenter(
}
fun onViewCreated() {
if (menuTag == MenuTag.SECTION_EDEN_VEIL) {
showEdenVeilWarningDialog()
}
loadSettingsList()
}
@@ -108,7 +105,7 @@ class SettingsFragmentPresenter(
MenuTag.SECTION_INPUT_PLAYER_SIX -> addInputPlayer(sl, 5)
MenuTag.SECTION_INPUT_PLAYER_SEVEN -> addInputPlayer(sl, 6)
MenuTag.SECTION_INPUT_PLAYER_EIGHT -> addInputPlayer(sl, 7)
MenuTag.SECTION_THEME -> addThemeSettings(sl)
MenuTag.SECTION_APP_SETTINGS -> addThemeSettings(sl)
MenuTag.SECTION_DEBUG -> addDebugSettings(sl)
MenuTag.SECTION_EDEN_VEIL -> addEdenVeilSettings(sl)
MenuTag.SECTION_APPLETS -> addAppletSettings(sl)
@@ -1033,6 +1030,14 @@ class SettingsFragmentPresenter(
override fun reset() = IntSetting.THEME.setInt(defaultValue)
}
if (NativeLibrary.isUpdateCheckerEnabled()) {
add(HeaderSetting(R.string.app_settings))
add(BooleanSetting.ENABLE_UPDATE_CHECKS.key)
}
add(HeaderSetting(R.string.theme_and_color))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
add(
SingleChoiceSetting(
@@ -1164,29 +1169,4 @@ class SettingsFragmentPresenter(
add(BooleanSetting.DEBUG_FLUSH_BY_LINE.key)
}
}
fun showEdenVeilWarningDialog() {
val shouldDisplayVeilWarning =
PreferenceManager.getDefaultSharedPreferences(activity!!.applicationContext)
.getBoolean(Settings.PREF_SHOULD_SHOW_EDENS_VEIL_DIALOG, true)
if (shouldDisplayVeilWarning) {
activity?.let {
MessageDialogFragment.newInstance(
it,
titleId = R.string.eden_veil_warning_title,
descriptionId = R.string.eden_veil_warning_description,
positiveButtonTitleId = R.string.dont_show_again,
negativeButtonTitleId = R.string.close,
showNegativeButton = true,
positiveAction = {
PreferenceManager.getDefaultSharedPreferences(activity!!.applicationContext)
.edit() {
putBoolean(Settings.PREF_SHOULD_SHOW_EDENS_VEIL_DIALOG, false)
}
}
).show(it.supportFragmentManager, MessageDialogFragment.TAG)
}
}
}
}
@@ -35,6 +35,8 @@ import android.widget.FrameLayout
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.StringRes
import androidx.appcompat.widget.PopupMenu
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.Insets
@@ -54,12 +56,19 @@ import androidx.window.layout.WindowLayoutInfo
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textview.MaterialTextView
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.yuzu.yuzu_emu.HomeNavigationDirections
import org.yuzu.yuzu_emu.NativeLibrary
import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.activities.EmulationActivity
import org.yuzu.yuzu_emu.databinding.DialogOverlayAdjustBinding
import org.yuzu.yuzu_emu.databinding.FragmentEmulationBinding
import org.yuzu.yuzu_emu.features.input.NativeInput
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
import org.yuzu.yuzu_emu.features.settings.model.Settings
@@ -82,12 +91,11 @@ import org.yuzu.yuzu_emu.utils.ViewUtils
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible
import org.yuzu.yuzu_emu.utils.collect
import org.yuzu.yuzu_emu.utils.CustomSettingsHandler
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.coroutines.Dispatchers
import java.io.ByteArrayOutputStream
import java.io.File
import kotlin.coroutines.coroutineContext
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import java.io.File
class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private lateinit var emulationState: EmulationState
@@ -121,6 +129,60 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private var perfStatsRunnable: Runnable? = null
private var socRunnable: Runnable? = null
private var isAmiiboPickerOpen = false
private var amiiboLoadJob: Job? = null
private val loadAmiiboLauncher =
registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
isAmiiboPickerOpen = false
val binding = _binding ?: return@registerForActivityResult
binding.inGameMenu.requestFocus()
if (!isAdded || uri == null) {
return@registerForActivityResult
}
if (!NativeLibrary.isRunning()) {
showAmiiboDialog(R.string.amiibo_wrong_state)
return@registerForActivityResult
}
amiiboLoadJob?.cancel()
val owner = viewLifecycleOwner
amiiboLoadJob = owner.lifecycleScope.launch {
val bytes = readAmiiboFile(uri)
if (!isAdded) {
return@launch
}
if (bytes == null || bytes.isEmpty()) {
showAmiiboDialog(
if (bytes == null) R.string.amiibo_unknown_error else R.string.amiibo_not_valid
)
return@launch
}
val result = withContext(Dispatchers.IO) {
if (NativeLibrary.isRunning()) {
NativeLibrary.loadAmiibo(bytes)
} else {
AmiiboLoadResult.WrongDeviceState.value
}
}
if (!isAdded) {
return@launch
}
handleAmiiboLoadResult(result)
}.also { job ->
job.invokeOnCompletion {
if (amiiboLoadJob == job) {
amiiboLoadJob = null
}
}
}
}
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -623,6 +685,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
true
}
R.id.menu_load_amiibo -> handleLoadAmiiboSelection()
R.id.menu_controls -> {
val action = HomeNavigationDirections.actionGlobalSettingsActivity(
null,
@@ -893,6 +957,96 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
}
private fun handleLoadAmiiboSelection(): Boolean {
val binding = _binding ?: return true
binding.inGameMenu.requestFocus()
if (!NativeLibrary.isRunning()) {
showAmiiboDialog(R.string.amiibo_wrong_state)
return true
}
when (AmiiboState.fromValue(NativeLibrary.getVirtualAmiiboState())) {
AmiiboState.TagNearby -> {
amiiboLoadJob?.cancel()
NativeInput.onRemoveNfcTag()
showAmiiboDialog(R.string.amiibo_removed_message)
}
AmiiboState.WaitingForAmiibo -> {
if (isAmiiboPickerOpen) {
return true
}
isAmiiboPickerOpen = true
binding.drawerLayout.close()
loadAmiiboLauncher.launch(AMIIBO_MIME_TYPES)
}
else -> showAmiiboDialog(R.string.amiibo_wrong_state)
}
return true
}
private fun handleAmiiboLoadResult(result: Int) {
when (AmiiboLoadResult.fromValue(result)) {
AmiiboLoadResult.Success -> {
if (!isAdded) {
return
}
Toast.makeText(
requireContext(),
getString(R.string.amiibo_load_success),
Toast.LENGTH_SHORT
).show()
}
AmiiboLoadResult.UnableToLoad -> showAmiiboDialog(R.string.amiibo_in_use)
AmiiboLoadResult.NotAnAmiibo -> showAmiiboDialog(R.string.amiibo_not_valid)
AmiiboLoadResult.WrongDeviceState -> showAmiiboDialog(R.string.amiibo_wrong_state)
AmiiboLoadResult.Unknown -> showAmiiboDialog(R.string.amiibo_unknown_error)
}
}
private fun showAmiiboDialog(@StringRes messageRes: Int) {
if (!isAdded) {
return
}
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.amiibo_title)
.setMessage(messageRes)
.setPositiveButton(R.string.ok, null)
.show()
}
private suspend fun readAmiiboFile(uri: Uri): ByteArray? =
withContext(Dispatchers.IO) {
val resolver = context?.contentResolver ?: return@withContext null
try {
resolver.openInputStream(uri)?.use { stream ->
val buffer = ByteArrayOutputStream()
val chunk = ByteArray(DEFAULT_BUFFER_SIZE)
while (true) {
coroutineContext.ensureActive()
val read = stream.read(chunk)
if (read == -1) {
break
}
buffer.write(chunk, 0, read)
}
buffer.toByteArray()
}
} catch (ce: CancellationException) {
throw ce
} catch (e: Exception) {
Log.error("[EmulationFragment] Failed to read amiibo: ${e.message}")
null
}
}
override fun onPause() {
if (this::emulationState.isInitialized) {
if (emulationState.isRunning && emulationActivity?.isInPictureInPictureMode != true) {
@@ -905,7 +1059,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
override fun onDestroyView() {
super.onDestroyView()
amiiboLoadJob?.cancel()
amiiboLoadJob = null
_binding = null
isAmiiboPickerOpen = false
}
override fun onDetach() {
@@ -1739,7 +1896,34 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
}
private enum class AmiiboState(val value: Int) {
Disabled(0),
Initialized(1),
WaitingForAmiibo(2),
TagNearby(3);
companion object {
fun fromValue(value: Int): AmiiboState =
values().firstOrNull { it.value == value } ?: Disabled
}
}
private enum class AmiiboLoadResult(val value: Int) {
Success(0),
UnableToLoad(1),
NotAnAmiibo(2),
WrongDeviceState(3),
Unknown(4);
companion object {
fun fromValue(value: Int): AmiiboLoadResult =
values().firstOrNull { it.value == value } ?: Unknown
}
}
companion object {
private val AMIIBO_MIME_TYPES =
arrayOf("application/octet-stream", "application/x-binary", "*/*")
private val perfStatsUpdateHandler = Handler(Looper.myLooper()!!)
private val socUpdateHandler = Handler(Looper.myLooper()!!)
}
@@ -86,6 +86,20 @@ class HomeSettingsFragment : Fragment() {
}
)
)
add(
HomeSetting(
R.string.app_settings,
R.string.app_settings_description,
R.drawable.ic_palette,
{
val action = HomeNavigationDirections.actionGlobalSettingsActivity(
null,
Settings.MenuTag.SECTION_APP_SETTINGS
)
binding.root.findNavController().navigate(action)
}
)
)
add(
HomeSetting(
R.string.preferences_controls,
@@ -216,20 +230,6 @@ class HomeSettingsFragment : Fragment() {
{ openFileManager() }
)
)
add(
HomeSetting(
R.string.preferences_theme,
R.string.theme_and_color_description,
R.drawable.ic_palette,
{
val action = HomeNavigationDirections.actionGlobalSettingsActivity(
null,
Settings.MenuTag.SECTION_THEME
)
binding.root.findNavController().navigate(action)
}
)
)
add(
HomeSetting(
R.string.about,
@@ -383,7 +383,6 @@ class SetupFragment : Fragment() {
.putBoolean(Settings.PREF_FIRST_APP_LAUNCH, false)
.apply()
mainActivity.finishSetup(binding.root.findNavController())
mainActivity.showPreAlphaWarningDialog()
}
fun pageForward() {
@@ -23,6 +23,7 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.preference.PreferenceManager
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.File
import java.io.FilenameFilter
import org.yuzu.yuzu_emu.NativeLibrary
@@ -50,6 +51,8 @@ import java.util.zip.ZipInputStream
import androidx.core.content.edit
import org.yuzu.yuzu_emu.activities.EmulationActivity
import kotlin.text.compareTo
import androidx.core.net.toUri
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
class MainActivity : AppCompatActivity(), ThemeProvider {
private lateinit var binding: ActivityMainBinding
@@ -65,43 +68,6 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
private val CHECKED_DECRYPTION = "CheckedDecryption"
private var checkedDecryption = false
private val CHECKED_FIRMWARE = "CheckedFirmware"
private var checkedFirmware = false
private val requestBluetoothPermissionsLauncher =
registerForActivityResult(
androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
val granted = permissions.entries.all { it.value }
if (granted) {
// Permissions were granted.
Toast.makeText(this, R.string.bluetooth_permissions_granted, Toast.LENGTH_SHORT)
.show()
} else {
// Permissions were denied.
Toast.makeText(this, R.string.bluetooth_permissions_denied, Toast.LENGTH_LONG)
.show()
}
}
private fun checkAndRequestBluetoothPermissions() {
// This check is only necessary for Android 12 (API level 31) and above.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
val permissionsToRequest = arrayOf(
android.Manifest.permission.BLUETOOTH_SCAN,
android.Manifest.permission.BLUETOOTH_CONNECT
)
val permissionsNotGranted = permissionsToRequest.filter {
checkSelfPermission(it) != android.content.pm.PackageManager.PERMISSION_GRANTED
}
if (permissionsNotGranted.isNotEmpty()) {
requestBluetoothPermissionsLauncher.launch(permissionsNotGranted.toTypedArray())
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen = installSplashScreen()
splashScreen.setKeepOnScreenCondition { !DirectoryInitialization.areDirectoriesReady }
@@ -128,11 +94,8 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
setContentView(binding.root)
checkAndRequestBluetoothPermissions()
if (savedInstanceState != null) {
checkedDecryption = savedInstanceState.getBoolean(CHECKED_DECRYPTION)
checkedFirmware = savedInstanceState.getBoolean(CHECKED_FIRMWARE)
}
if (!checkedDecryption) {
val firstTimeSetup = PreferenceManager.getDefaultSharedPreferences(applicationContext)
@@ -192,30 +155,47 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
// Dismiss previous notifications (should not happen unless a crash occurred)
EmulationActivity.stopForegroundService(this)
val firstTimeSetup = PreferenceManager.getDefaultSharedPreferences(applicationContext)
.getBoolean(Settings.PREF_FIRST_APP_LAUNCH, true)
if (!firstTimeSetup && NativeLibrary.isUpdateCheckerEnabled() && BooleanSetting.ENABLE_UPDATE_CHECKS.getBoolean()) {
checkForUpdates()
}
setInsets()
}
fun showPreAlphaWarningDialog() {
val shouldDisplayAlphaWarning =
PreferenceManager.getDefaultSharedPreferences(applicationContext)
.getBoolean(Settings.PREF_SHOULD_SHOW_PRE_ALPHA_WARNING, true)
if (shouldDisplayAlphaWarning) {
MessageDialogFragment.newInstance(
this,
titleId = R.string.pre_alpha_warning_title,
descriptionId = R.string.pre_alpha_warning_description,
positiveButtonTitleId = R.string.dont_show_again,
negativeButtonTitleId = R.string.close,
showNegativeButton = true,
positiveAction = {
PreferenceManager.getDefaultSharedPreferences(applicationContext).edit() {
putBoolean(Settings.PREF_SHOULD_SHOW_PRE_ALPHA_WARNING, false)
}
private fun checkForUpdates() {
Thread {
val latestVersion = NativeLibrary.checkForUpdate()
if (latestVersion != null) {
runOnUiThread {
showUpdateDialog(latestVersion)
}
).show(supportFragmentManager, MessageDialogFragment.TAG)
}
}
}.start()
}
private fun showUpdateDialog(version: String) {
MaterialAlertDialogBuilder(this)
.setTitle(R.string.update_available)
.setMessage(getString(R.string.update_available_description, version))
.setPositiveButton(android.R.string.ok) { _, _ ->
val url = NativeLibrary.getUpdateUrl(version)
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
}
.setNeutralButton(R.string.cancel) { dialog, _ ->
dialog.dismiss()
}
.setNegativeButton(R.string.dont_show_again) { dialog, _ ->
BooleanSetting.ENABLE_UPDATE_CHECKS.setBoolean(false)
NativeConfig.saveGlobalConfig()
dialog.dismiss()
}
.show()
}
fun displayMultiplayerDialog() {
val dialog = NetPlayDialog(this)
dialog.show()
@@ -233,7 +213,6 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean(CHECKED_DECRYPTION, checkedDecryption)
outState.putBoolean(CHECKED_FIRMWARE, checkedFirmware)
}
fun finishSetup(navController: NavController) {
@@ -30,4 +30,8 @@ if (ENABLE_OPENSSL OR ENABLE_WEB_SERVICE)
target_link_libraries(yuzu-android PRIVATE OpenSSL::SSL cpp-jwt::cpp-jwt)
endif()
if (ENABLE_UPDATE_CHECKER)
target_compile_definitions(yuzu-android PUBLIC ENABLE_UPDATE_CHECKER)
endif()
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} yuzu-android)
@@ -62,6 +62,8 @@ namespace AndroidSettings {
Settings::Setting<s32> theme_mode{linkage, -1, "theme_mode", Settings::Category::Android};
Settings::Setting<bool> black_backgrounds{linkage, false, "black_backgrounds",
Settings::Category::Android};
Settings::Setting<bool> enable_update_checks{linkage, true, "enable_update_checks",
Settings::Category::Android};
// Input/performance overlay settings
std::vector<OverlayControlData> overlay_control_data;
+88 -4
View File
@@ -7,8 +7,10 @@
#include <codecvt>
#include <locale>
#include <span>
#include <string>
#include <string_view>
#include <vector>
#include <dlfcn.h>
#ifdef ARCHITECTURE_arm64
@@ -61,9 +63,13 @@
#include "core/loader/loader.h"
#include "frontend_common/config.h"
#include "frontend_common/firmware_manager.h"
#ifdef ENABLE_UPDATE_CHECKER
#include "frontend_common/update_checker.h"
#endif
#include "hid_core/frontend/emulated_controller.h"
#include "hid_core/hid_core.h"
#include "hid_core/hid_types.h"
#include "input_common/drivers/virtual_amiibo.h"
#include "jni/native.h"
#include "video_core/renderer_base.h"
#include "video_core/renderer_vulkan/renderer_vulkan.h"
@@ -840,10 +846,6 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_firmwareVersion(JNIEnv* env, jclas
return Common::Android::ToJString(env, display_version);
}
jint Java_org_yuzu_yuzu_1emu_NativeLibrary_verifyFirmware(JNIEnv* env, jclass clazz) {
return static_cast<int>(FirmwareManager::VerifyFirmware(EmulationSession::GetInstance().System()));
}
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_gameRequiresFirmware(JNIEnv* env, jclass clazz, jstring jprogramId) {
auto program_id = EmulationSession::GetProgramId(env, jprogramId);
@@ -1006,6 +1008,44 @@ jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_areKeysPresent(JNIEnv* env, jobje
return ContentManager::AreKeysPresent();
}
jint Java_org_yuzu_yuzu_1emu_NativeLibrary_getVirtualAmiiboState(JNIEnv* env, jobject jobj) {
if (!EmulationSession::GetInstance().IsRunning()) {
return static_cast<jint>(InputCommon::VirtualAmiibo::State::Disabled);
}
auto* virtual_amiibo =
EmulationSession::GetInstance().GetInputSubsystem().GetVirtualAmiibo();
if (virtual_amiibo == nullptr) {
return static_cast<jint>(InputCommon::VirtualAmiibo::State::Disabled);
}
return static_cast<jint>(virtual_amiibo->GetCurrentState());
}
jint Java_org_yuzu_yuzu_1emu_NativeLibrary_loadAmiibo(JNIEnv* env, jobject jobj,
jbyteArray jdata) {
if (!EmulationSession::GetInstance().IsRunning() || jdata == nullptr) {
return static_cast<jint>(InputCommon::VirtualAmiibo::Info::WrongDeviceState);
}
auto* virtual_amiibo =
EmulationSession::GetInstance().GetInputSubsystem().GetVirtualAmiibo();
if (virtual_amiibo == nullptr) {
return static_cast<jint>(InputCommon::VirtualAmiibo::Info::Unknown);
}
const jsize length = env->GetArrayLength(jdata);
std::vector<u8> bytes(static_cast<std::size_t>(length));
if (length > 0) {
env->GetByteArrayRegion(jdata, 0, length,
reinterpret_cast<jbyte*>(bytes.data()));
}
const auto info =
virtual_amiibo->LoadAmiibo(std::span<u8>(bytes.data(), bytes.size()));
return static_cast<jint>(info);
}
JNIEXPORT void JNICALL
Java_org_yuzu_yuzu_1emu_NativeLibrary_initMultiplayer(
JNIEnv* env, [[maybe_unused]] jobject obj) {
@@ -1111,4 +1151,48 @@ JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_updatePowerState(
g_is_charging.store(isCharging, std::memory_order_relaxed);
g_has_battery.store(hasBattery, std::memory_order_relaxed);
}
// return #ifdef ENABLE_UPDATE_CHECKER
JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_isUpdateCheckerEnabled(
JNIEnv* env,
jobject obj) {
#ifdef ENABLE_UPDATE_CHECKER
return JNI_TRUE;
#else
return JNI_FALSE;
#endif
}
#ifdef ENABLE_UPDATE_CHECKER
JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_checkForUpdate(
JNIEnv* env,
jobject obj) {
const bool is_prerelease = ((strstr(Common::g_build_version, "pre-alpha") != nullptr) ||
(strstr(Common::g_build_version, "alpha") != nullptr) ||
(strstr(Common::g_build_version, "beta") != nullptr) ||
(strstr(Common::g_build_version, "rc") != nullptr));
const std::optional<std::string> latest_release_tag =
UpdateChecker::GetLatestRelease(is_prerelease);
if (latest_release_tag && latest_release_tag.value() != Common::g_build_version) {
return env->NewStringUTF(latest_release_tag.value().c_str());
}
return nullptr;
}
JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_getUpdateUrl(
JNIEnv* env,
jobject obj,
jstring version) {
const char* version_str = env->GetStringUTFChars(version, nullptr);
const std::string url = fmt::format("{}/{}/releases/tag/{}",
std::string{Common::g_build_auto_update_website},
std::string{Common::g_build_auto_update_repo},
version_str);
env->ReleaseStringUTFChars(version, version_str);
return env->NewStringUTF(url.c_str());
}
#endif
} // extern "C"
@@ -33,6 +33,11 @@
android:icon="@drawable/ic_two_users"
android:title="@string/multiplayer" />
<item
android:id="@+id/menu_load_amiibo"
android:icon="@drawable/ic_nfc"
android:title="@string/load_amiibo" />
<item
android:id="@+id/menu_overlay_controls"
@@ -28,7 +28,7 @@
<!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(مُحسَّن)</string>
<string name="process_ram">ذاكرة RAM للعملية: %1$d م.ب</string>
<string name="process_ram">Process RAM: %1$d MB</string>
<string name="shaders_prefix">بناء</string>
<string name="shaders_suffix">شادر(شادرات)</string>
<string name="charging">(يشحن)</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">حجاب عدن</string>
<string name="eden_veil_description">إعدادات تجريبية لتحسين الأداء والقدرة. قد تسبب هذه الإعدادات شاشات سوداء أو مشاكل أخرى في اللعبة.</string>
<string name="eden_veil_warning_title">الإعدادات التجريبية</string>
<string name="eden_veil_warning_description">الإعدادات الموجودة في حجاب عدن تجريبية للغاية وقد تسبب مشاكل. إذا لم يتم تشغيل اللعبة، فقم بتعطيل أي إضافات.</string>
<string name="veil_extensions">امتدادات GPU</string>
<string name="dyna_state">الحالة الديناميكية الموسعة</string>
@@ -242,7 +240,6 @@
<string name="keys_description">اختر ملف <b>prod.keys</b> من الزر ادناه</string>
<string name="select_keys">إختيار المفاتيح</string>
<string name="firmware">الفريموير</string>
<string name="firmware_description">حدد ملف firmware.zip بالزر أدناه. يتطلب عدن حاليًا الإصدار 19.0.1 أو إصدارًا أقدم.</string>
<string name="select_firmware">حدد الفريموير</string>
<string name="games">الألعاب</string>
<string name="games_description">حدد مجلد <b>العابك</b> من الزر ادناه.</string>
@@ -253,8 +250,6 @@
<string name="back">عودة</string>
<string name="add_games">إضافة الألعاب</string>
<string name="step_complete">مكتمل</string>
<string name="bluetooth_permissions_granted">تم منح أذونات البلوتوث.</string>
<string name="bluetooth_permissions_denied">تم رفض أذونات البلوتوث. قد يكون دعم التحكم محدودًا.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">عرض دائري</string>
<string name="game_image_desc"> لقطة شاشة لـ%1$s</string>
<string name="folder">مجلد</string>
<string name="pre_alpha_warning_title">برامج ما قبل ألفا</string>
<string name="pre_alpha_warning_description">تحذير: هذا البرنامج هو في مرحلة ما قبل ألفا وقد يكون الأخطاء وتنفيذات الميزة غير المكتملة.</string>
<string name="dont_show_again">عدم العرض مجددًا</string>
<string name="add_directory_success">تمت إضافة مجلد اللعبة الجديد بنجاح</string>
<string name="home_search">البحث</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">أضيفت مؤخراً</string>
<string name="open_user_folder">فتح مجلد عدن</string>
<string name="open_user_folder_description">إدارة الملفات الداخلية لـ عدن</string>
<string name="theme_and_color_description">تعديل مظهر التطبيق</string>
<string name="no_file_manager">لم يتم العثور على مدير الملفات</string>
<string name="notification_no_directory_link">لا يمكن فتح مجلد عدن</string>
<string name="notification_no_directory_link_description">الرجاء تحديد موقع مجلد المستخدم باستخدام اللوحة الجانبية لمدير الملفات يدويًا</string>
@@ -402,10 +394,10 @@
<string name="applets_error_description"><![CDATA[يرجى التأكد من أن ملف <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> الخاص بك و <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-system-firmware\">الفريموير</a> مثبتة وحاول مرة أخرى.<br>بالإضافة إلى ذلك، تأكد من أن الفريموير الخاص بك هو من الإصدار 19.0.1 أو أقدم.]]></string>
<string name="album_applet">الألبوم</string>
<string name="album_applet_description">شاهد الصور المخزنة في مجلد لقطات شاشة المستخدم باستخدام عارض صور النظام</string>
<string name="mii_edit_applet">تحرير Mii</string>
<string name="mii_edit_applet_description">باستخدام محرر النظام Miis عرض وتحرير</string>
<string name="mii_edit_applet">تعديل Mii</string>
<string name="mii_edit_applet_description">عرض وتحرير Miis باستخدام محرر النظام</string>
<string name="cabinet_applet">خزانة</string>
<string name="cabinet_applet_description">تحرير وحذف البيانات المخزنة على أميبو</string>
<string name="cabinet_applet_description">تعديل وحذف البيانات المخزنة على أميبو</string>
<string name="cabinet_launcher">مشغل الخزانة</string>
<string name="cabinet_nickname_and_owner">إعدادات الاسم المستعار والمالك</string>
<string name="cabinet_game_data_eraser">ممحاة بيانات اللعبة</string>
@@ -429,7 +421,7 @@
<string name="user_data_export_success">تم تصدير بيانات المستخدم بنجاح</string>
<string name="user_data_import_success">تم استيراد بيانات المستخدم بنجاح</string>
<string name="user_data_export_cancelled">تم إلغاء التصدير</string>
<string name="user_data_import_failed_description">تأكد من أن مجلدات بيانات المستخدم موجودة في جذر مجلد zip وتحتوي على ملف تكوين في config/config.ini وحاول مرة أخرى.</string>
<string name="user_data_import_failed_description">تأكد من أن مجلدات بيانات المستخدم موجودة في جذر مجلد zip وتحتوي على ملف تكوين في config/config.ini ثم حاول مرة أخرى.</string>
<!-- General settings strings -->
<string name="frame_limit_enable">الحد من السرعة</string>
<string name="frame_limit_enable_description">يحد من سرعة المحاكاة بنسبة محددة من السرعة العادية</string>
@@ -497,7 +489,7 @@
<!-- Debug settings strings -->
<string name="cpu">وحدة المعالج المركزية</string>
<string name="use_auto_stub">استخدام الستاب التلقائي</string>
<string name="use_auto_stub">استخدم الملحق التلقائي</string>
<string name="use_auto_stub_description">يقوم تلقائيًا بإضافة خدمات ووظائف ناقصة. قد يحسن التوافق ولكنه قد يتسبب في تعطل المشغل ومشاكل في الاستقرار.</string>
<string name="gpu">وحدة معالجة الرسومات</string>
@@ -560,10 +552,10 @@
<string name="unused">غير مستخدم</string>
<string name="input_mapping_filter">مرشح تعيين الإدخال</string>
<string name="input_mapping_filter_description">اختر جهازًا لتصفية مدخلات الخرائط</string>
<string name="auto_map">تعيين وحدة التحكم تلقائيًا</string>
<string name="auto_map">تعيين ذراع التحكم تلقائيًا</string>
<string name="auto_map_description">حدد جهازًا لمحاولة رسم الخرائط التلقائية</string>
<string name="attempted_auto_map">تم محاولة التعيين التلقائي باستخدام %1$s</string>
<string name="controller_type">نوع وحدة التحكم</string>
<string name="controller_type">نوع ذراع التحكم</string>
<string name="pro_controller">Pro Controller</string>
<string name="handheld">محمول</string>
<string name="dual_joycons">Dual Joycons</string>
@@ -622,7 +614,8 @@
<string name="install">تثبيت</string>
<string name="fetch">جلب</string>
<string name="delete">حذف</string>
<string name="edit">حرر</string>
<string name="edit">تعديل</string>
<string name="import_success">تم الاستيراد بنجاح</string>
<string name="export_success">تم التصدير بنجاح</string>
<string name="start">بدء</string>
<string name="global">عالمي</string>
@@ -669,10 +662,9 @@
<string name="preferences_graphics_description">مستوى الدقة ،الدقة ،ذاكرة التخزين المؤقت للتظليل</string>
<string name="preferences_audio">الصوت</string>
<string name="preferences_audio_description">محرك الإخراج ، حجم الصوت</string>
<string name="preferences_controls">التحكم</string>
<string name="preferences_controls_description">مدخلات وحدة تحكم الخريطة</string>
<string name="preferences_controls">عناصر التحكم</string>
<string name="preferences_controls_description">مدخلات ذراع تحكم في الخريطة</string>
<string name="preferences_player">اللاعب %d</string>
<string name="preferences_theme">السمة واللون</string>
<string name="preferences_debug">تصحيح الأخطاء</string>
<string name="preferences_debug_description">CPU/GPU debugging, graphics API, fastmem</string>
@@ -680,7 +672,7 @@
<string name="info">معلومات</string>
<string name="info_description">معرف البرنامج، المطور، الإصدار</string>
<string name="per_game_settings">إعدادات خاصة للعبة</string>
<string name="per_game_settings_description">تحرير الإعدادات الخاصة بهذه اللعبة</string>
<string name="per_game_settings_description">تعديل الإعدادات الخاصة بهذه اللعبة</string>
<string name="launch_options">تشغيل الإعدادات</string>
<string name="path">المسار</string>
<string name="program_id">معرف العنوان</string>
@@ -689,6 +681,18 @@
<string name="copy_details">نسخ التفاصيل</string>
<string name="add_ons">الإضافات</string>
<string name="add_ons_description">التعديلات والتحديثات والمحتوى القابل للتنزيل</string>
<string name="playtime">زمن اللعب:</string>
<string name="reset_playtime">مسح زمن اللعب</string>
<string name="reset_playtime_description">إعادة ضبط زمن اللعب الحالي للعبة إلى 0 ثانية</string>
<string name="reset_playtime_warning_description">سيؤدي هذا إلى مسح بيانات زمن اللعب الحالية للعبة. هل أنت متأكد؟</string>
<string name="playtime_reset_successfully">تمت إعادة ضبط زمن اللعب</string>
<string name="edit_playtime">تعديل زمن التشغيل</string>
<string name="hours">ساعات</string>
<string name="minutes">دقائق</string>
<string name="hours_must_be_between_0_and_9999">يجب أن تكون الساعات بين 0 و 9999</string>
<string name="minutes_must_be_between_0_and_59">يجب أن تكون الدقائق بين 0 و 59</string>
<string name="seconds_must_be_between_0_and_59">يجب أن تكون الثواني بين 0 و 59</string>
<string name="playtime_updated_successfully">تم تحديث زمن اللعب بنجاح</string>
<string name="clear_shader_cache">مسح ذاكرة التخزين المؤقت للتظليل</string>
<string name="clear_shader_cache_description">يزيل جميع التظليلات التي تم إنشاؤها أثناء لعب هذه اللعبة</string>
<string name="clear_shader_cache_warning_description">سوف تواجه المزيد من التأتأة مع تجديد ذاكرة التخزين المؤقت للتظليل</string>
@@ -723,6 +727,11 @@
<string name="verify_no_result">تعذر التحقق من السلامة</string>
<string name="verify_no_result_description">لم يتم التحقق من صحة محتويات الملف</string>
<string name="verification_failed_for">فشل التحقق من الملفات التالية:\n%1$s</string>
<string name="share_game_settings">مشاركة الإعدادات</string>
<string name="import_config">استيراد الإعدادات</string>
<string name="export_config">تصدير الإعدادات</string>
<string name="share_config_failed">فشل مشاركة ملف الإعدادات</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">الخاص بك ROM تم تشفير</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[يرجى اتباع الأدلة لإعادة نسخ <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">ألعاب البطاقات</a> أو <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">العناوين الرقمية</a>.]]></string>
@@ -741,7 +750,7 @@
<string name="custom_settings_failed_message">فشل تطبيق الإعدادات المخصصة لـ %1$s: %2$s</string>
<string name="launch_with_default_settings">التشغيل بالإعدادات الافتراضية</string>
<string name="launch_cancelled">تم إلغاء التشغيل</string>
<string name="custom_settings_failure_reasons">غير قادر على تطبيق الإعدادات المطلوبة. قد يكون هذا بسبب отсут برامج تشغيل GPU أو مشاكل في التهيئة.</string>
<string name="custom_settings_failure_reasons">تعذر تطبيق الإعدادات المطلوبة. قد يكون ذلك بسبب فقدان برامج تشغيل GPU أو مشكلات في التكوين.</string>
<string name="custom_settings_applied">تم تطبيق الإعدادات المخصصة</string>
<string name="launching_game">جارٍ التشغيل %1$s...</string>
<string name="failed_to_initialize_game">فشل تهيئة اللعبة</string>
@@ -754,7 +763,7 @@
<string name="config_write_failed">فشل كتابة ملف التهيئة</string>
<string name="config_apply_failed">فشل تطبيق التهيئة</string>
<string name="config_already_exists_title">التهيئة موجودة بالفعل</string>
<string name="config_already_exists_message">الإعدادات المخصصة موجودة بالفعل لـ \'%1$s\' .\nهل ترغب في استبدال التكوين الحالي؟\nلا يمكن التراجع عن هذا الإجراء.</string>
<string name="config_already_exists_message">الإعدادات المخصصة موجودة بالفعل لـ \'%1$s\' .\n\nهل ترغب في استبدال التكوين الحالي؟\n\nلا يمكن التراجع عن هذا الإجراء.</string>
<string name="config_exists_prompt">جارٍ التحقق من التكوين الحالي...</string>
<string name="overwrite_cancelled">تم إلغاء الاستبدال</string>
<string name="overwrite">استبدال</string>
@@ -764,7 +773,7 @@
<string name="invalid_driver_file">ملف برنامج تشغيل غير صالح: %s</string>
<string name="network_unavailable">لا يوجد اتصال بالشبكة. يرجى التحقق من اتصال الإنترنت والمحاولة مرة أخرى.</string>
<string name="driver_missing_title">مطلوب برنامج تشغيل وحدة معالجة الرسومات</string>
<string name="driver_missing_message">يتطلب إعداد اللعبة برنامج تشغيل وحدة معالجة الرسومات \"\'%s\'\" وهو غير مُثبّت على جهازك.\nهل ترغب بتنزيله وتثبيته الآن؟</string>
<string name="driver_missing_message">يتطلب إعداد اللعبة برنامج تشغيل وحدة معالجة الرسومات \"\'%s\'\" وهو غير مُثبّت على جهازك.\n\nهل ترغب بتنزيله وتثبيته الآن؟</string>
<string name="driver_download_cancelled">تم إلغاء تنزيل برنامج التشغيل. لا يمكن تشغيل اللعبة بدون برنامج التشغيل المطلوب.</string>
<string name="download">تنزيل</string>
@@ -775,14 +784,14 @@
<string name="emulation_rel_stick_center">مركز العصا النسبي</string>
<string name="emulation_dpad_slide">مزلاق الأسهم</string>
<string name="emulation_haptics">الاهتزازات الديناميكية</string>
<string name="emulation_show_overlay">عرض وحدة التحكم</string>
<string name="emulation_hide_overlay">إخفاء وحدة التحكم</string>
<string name="emulation_show_overlay">عرض ذراع التحكم</string>
<string name="emulation_hide_overlay">إخفاء ذراع التحكم</string>
<string name="emulation_toggle_all">تبديل الكل</string>
<string name="emulation_control_adjust">ضبط التراكب</string>
<string name="emulation_control_scale">الحجم</string>
<string name="emulation_control_opacity">الشفافية</string>
<string name="emulation_touch_overlay_reset">إعادة تعيين التراكب</string>
<string name="emulation_touch_overlay_edit">تحرير التراكب</string>
<string name="emulation_touch_overlay_edit">تعديل التراكب</string>
<string name="emulation_pause">إيقاف المحاكاة مؤقتًا</string>
<string name="emulation_unpause">إلغاء الإيقاف المؤقت للمحاكاة</string>
<string name="emulation_input_overlay">خيارات التراكب</string>
@@ -804,7 +813,7 @@
<string name="save_load_error">خطأ في الحفظ/التحميل</string>
<string name="fatal_error">خطا فادح</string>
<string name="fatal_error_message">حدث خطأ فادح. تحقق من السجل للحصول على التفاصيل.\nقد يؤدي استمرار المحاكاة إلى حدوث أعطال.</string>
<string name="device_memory_inadequate">ذاكرة الوصول العشوائي للجهاز: \'%1$s\'\nموصى به: \'%2$s\' </string>
<string name="device_memory_inadequate">ذاكرة الوصول العشوائي للجهاز: %1$s\nموصى به: %2$s</string>
<string name="memory_formatted">%1$s %2$s</string>
<string name="no_game_present">لا توجد لعبة قابلة للتمهيد</string>
@@ -894,7 +903,7 @@
<string name="resolution_four">4X (2880p/4320p) (بطيء)</string>
<!-- Renderer VSync -->
<string name="renderer_vsync_immediate">Immediate (Off)</string>
<string name="renderer_vsync_immediate">Immediate (إيقاف)</string>
<string name="renderer_vsync_mailbox">Mailbox</string>
<string name="renderer_vsync_fifo">FIFO (On)</string>
<string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
@@ -943,6 +952,8 @@
<string name="cpu_accuracy_accurate">دقيق</string>
<string name="cpu_accuracy_unsafe">غير آمن</string>
<string name="cpu_accuracy_paranoid">Paranoid</string>
<string name="cpu_accuracy_debugging">تصحيح الأخطاء</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">الأسهم</string>
<string name="gamepad_left_stick">العصا اليسرى</string>
@@ -953,11 +964,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">بناء التظليل</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">تغيير سمة التطبيق</string>
<string name="theme_default">افتراضي</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">تغيير وضع السمة</string>
<string name="theme_mode_follow_system">اتبع النظام</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">حجاب عدن</string>
<string name="eden_veil_description">ڕێکخستنە تاقیکارییەکان بۆ باشترکردنی کارایی و توانا. ئەم ڕێکخستنانە لەوانەیە ببێتە هۆی شاشە ڕەشەکان یان کێشەیتری یاری.</string>
<string name="eden_veil_warning_title">ڕێکخستنە تاقیکارییەکان</string>
<string name="eden_veil_warning_description">ڕێکخستنەکانی ناو پردی عەدن زۆر تاقیکارییە و ڕەنگە کێشە دروست بکات. ئەگەر یارییەکەت کارینەکات، هەموو زیادکراوەکان ناچالاک بکە.</string>
<string name="veil_extensions">پاشکۆکانی GPU</string>
<string name="dyna_state">الحالة الديناميكية الممتدة</string>
@@ -228,9 +226,6 @@
<string name="next">دواتر</string>
<string name="back">گەڕانەوە</string>
<string name="add_games">زیادکردنی یاری</string>
<string name="bluetooth_permissions_granted">مۆڵەتی بلوتۆس درا.</string>
<string name="bluetooth_permissions_denied">مۆڵەتی بلوتۆس ڕەتکرایەوە. پشتیوانی کۆنتڕۆڵەر دەکرێت سنوردار بێت.</string>
<!-- Home strings -->
<string name="alphabetical">پێنووس</string>
@@ -238,8 +233,6 @@
<string name="view_grid">تۆڕ</string>
<string name="view_carousel">کارۆسێل</string>
<string name="folder">فۆڵدەر</string>
<string name="pre_alpha_warning_title">نەرمەکاڵای پێش-ئەلفا</string>
<string name="pre_alpha_warning_description">ئاگاداری: ئەم وەشانە بۆ بڵاوکردنەوە یان پیشاندانی گشتی نییە. ئەم نەرمەکاڵایە لە قۆناغی پێش-ئەلفادایە و لەوانەیە هەڵەی تێدا بێت.</string>
<string name="dont_show_again">دووبارە نیشان مەدە</string>
<string name="home_search">گەڕان</string>
<string name="home_settings">ڕێکخستنەکان</string>
@@ -277,7 +270,6 @@
<string name="search_recently_added">بەم دواییە زیادکرا</string>
<string name="open_user_folder">کردنەوەی فۆڵدەری یوزو</string>
<string name="open_user_folder_description">بەڕێوەبردنی فایلە ناوخۆییەکانی یوزو</string>
<string name="theme_and_color_description">دەستکاری کردنی شێوازی ئەپەکە</string>
<string name="no_file_manager">هیچ فایل بەڕێوەبەرێک نەدۆزرایەوە</string>
<string name="notification_no_directory_link">نەتوانرا ناونیشانی یوزو بکرێتەوە</string>
<string name="notification_no_directory_link_description">تکایە شوێنی فۆڵدەری بەکارهێنەر لەگەڵ پانێڵی لایەنی فایل بەڕێوەبارەکان بە دەست بدۆزەرەوە.</string>
@@ -333,6 +325,7 @@
<string name="error_firmware_missing">فریموێر پێویستە بۆ کارپێکردنی هەندێک یاری و بەکارهێنانی بەرنامەکان. ئێدین تەنها لەگەڵ فریموێری 19.0.1 یان کۆنتر کار دەکات.</string>
<string name="error_firmware_corrupted">فریموێر هەیە بەڵام ناتوانرێت بخوێنرێتەوە. پشکنین بکە بۆ کلیلی شیکردنەوە و دووبارە فریموێرەکە دامپ بکە ئەگەر پێویست بوو.</string>
<string name="error_firmware_too_new">فریموێر زۆر نوێ یان ناتوانرێت بخوێنرێتەوە. ئێدین تەنها لەگەڵ فریموێری 19.0.1 یان کۆنتر کار دەکات.</string>
<string name="keys_failed">سەرکەوتوو نەبوو لە ناساندنی کلیلی</string>
<string name="keys_install_success">کلیلەکان بە سەرکەوتوویی ناسێندران</string>
<string name="error_keys_copy_failed">یەک یان زیاتر کلیل سەرکەوتوو نەبوو لە ناساندن.</string>
@@ -538,7 +531,6 @@
<string name="preferences_system">سیستەم</string>
<string name="preferences_graphics">گرافیک</string>
<string name="preferences_audio">دەنگ</string>
<string name="preferences_theme">ڕەنگ و ڕووکار</string>
<string name="preferences_debug">چاککردنەوە</string>
<string name="path">ڕێڕەو</string>
<string name="version">وەشان</string>
@@ -604,7 +596,6 @@
<string name="emulation_unpause">لادانی وەستاندنی ئیمولەیشن</string>
<string name="emulation_input_overlay">هەڵبژاردەکانی داپۆشەر</string>
<string name="touchscreen">رووکاری لەمسی</string>
<!-- Software keyboard -->
<string name="software_keyboard">کیبۆردی نەرمەکاڵا</string>
@@ -642,6 +633,7 @@
<string name="temperature_celsius">سیلیزی</string>
<string name="temperature_fahrenheit">فارینهایت</string>
<!-- Memory Sizes -->
<string name="memory_byte_shorthand">B</string>
<string name="memory_gigabyte">GB</string>
<!-- Renderer APIs -->
@@ -728,11 +720,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">دروستکردنی سێبەرەکان</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">گۆڕینی ڕووکاری ئەپەکە</string>
<string name="theme_default">بنەڕەت</string>
<string name="theme_material_you">کەرەستەی تۆ</string>
<!-- Theme Modes -->
<string name="change_theme_mode">گۆڕینی دۆخی ڕووکار</string>
<string name="theme_mode_follow_system">پەیڕەوی کردنی سیستەم</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Edenův závoj</string>
<string name="eden_veil_description">Experimentální nastavení pro zlepšení výkonu a schopností. Tato nastavení mohou způsobit černé obrazovky nebo další herní problémy.</string>
<string name="eden_veil_warning_title">Experimentální nastavení</string>
<string name="eden_veil_warning_description">Nastavení obsažená v Edenově závoji jsou vysoce experimentální a mohou způsobit problémy. Pokud se vaše hra nespustí, deaktivujte všechna rozšíření.</string>
<string name="veil_extensions">Rozšíření GPU</string>
<string name="dyna_state">Rozšířený dynamický stav</string>
@@ -225,9 +223,6 @@
<string name="next">Další</string>
<string name="back">Zpět</string>
<string name="add_games">Přidat hry</string>
<string name="bluetooth_permissions_granted">Bluetoothová oprávnění udělena.</string>
<string name="bluetooth_permissions_denied">Bluetoothová oprávnění zamítnuta. Podpora ovladače může být omezena.</string>
<!-- Home strings -->
<string name="alphabetical">Abecedně</string>
@@ -235,8 +230,6 @@
<string name="view_grid">Mřížka</string>
<string name="view_carousel">Kolotoč</string>
<string name="folder">Složka</string>
<string name="pre_alpha_warning_title">Předběžná verze</string>
<string name="pre_alpha_warning_description">Varování: Tato verze není určena pro veřejnost. Může obsahovat chyby.</string>
<string name="dont_show_again">Nezobrazovat znovu</string>
<string name="home_search">Hledat</string>
<string name="home_settings">Nastavení</string>
@@ -311,6 +304,7 @@
<string name="error_firmware_missing">Firmware je vyžadován pro spuštění některých her a aplikací. Eden funguje pouze s firmwarem 19.0.1 nebo starším.</string>
<string name="error_firmware_corrupted">Firmware byl nahlášen jako přítomný, ale nelze jej přečíst. Zkontrolujte šifrovací klíče a v případě potřeby firmware převezměte znovu.</string>
<string name="error_firmware_too_new">Firmware je příliš nový nebo nelze přečíst. Eden funguje pouze s firmwarem 19.0.1 nebo starším.</string>
<string name="keys_failed">Selhání instalace klíčů</string>
<string name="keys_install_success">Klíče úspěšně nainstalovány</string>
<string name="error_keys_copy_failed">Jeden nebo více klíčů se nepodařilo zkopírovat.</string>
@@ -488,7 +482,6 @@
<string name="preferences_graphics">Grafika</string>
<string name="preferences_audio">Zvuk</string>
<string name="preferences_audio_description">Výstupní engine, hlasitost</string>
<string name="preferences_theme">Vzhled a barva</string>
<string name="preferences_debug">Ladění</string>
<!-- Game properties -->
<string name="info">Info</string>
@@ -599,7 +592,6 @@
<string name="touchscreen">Dotyková obrazovka</string>
<string name="lock_drawer">Zamknout zásuvku</string>
<string name="unlock_drawer">Odemknout zásuvku</string>
<!-- Software keyboard -->
<string name="software_keyboard">Softwarová klávesnice</string>
@@ -691,13 +683,13 @@
<string name="cpu_accuracy_accurate">Přesné</string>
<string name="cpu_accuracy_unsafe">Nebezpečné</string>
<string name="gamepad_home">Home</string>
<!-- Disk shader cache -->
<string name="building_shaders">Budování shaderů</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Změnit vzhled aplikace</string>
<string name="theme_default">Výchozí</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Změnit styl vzhledu</string>
<string name="theme_mode_follow_system">Podle systému</string>
@@ -70,8 +70,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Edens Schleier</string>
<string name="eden_veil_description">Experimentelle Einstellungen zur Verbesserung der Leistung und Funktionalität. Diese Einstellungen können schwarze Bildschirme oder andere Spielprobleme verursachen.</string>
<string name="eden_veil_warning_title">Experimentelle Einstellungen</string>
<string name="eden_veil_warning_description">Die in Edens Schleier enthaltenen Einstellungen sind hoch experimentell und können Probleme verursachen. Wenn Ihr Spiel nicht startet, deaktivieren Sie alle Erweiterungen.</string>
<string name="veil_extensions">GPU-Erweiterungen</string>
<string name="dyna_state">Erweiterter dynamischer Status</string>
@@ -228,7 +226,6 @@
<string name="keys_description">Wähle deine &lt;b>prod.keys&lt;/b> Datei mit dem Button unten aus.</string>
<string name="select_keys">Schlüssel auswählen</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Wählen mit dem Button unten deine <b>firmware.zip</b>-Datei.\nEden benötigt derzeit Version <b>19.0.1</b> oder niedriger.</string>
<string name="select_firmware">Firmware auswählen</string>
<string name="games">Spiele</string>
<string name="games_description">Wähle mit dem Knopf unten den &lt;b>Spiele&lt;/b>-Ordner aus.</string>
@@ -239,8 +236,6 @@
<string name="back">Zurück</string>
<string name="add_games">Spiele hinzufügen</string>
<string name="step_complete">Fertig!</string>
<string name="bluetooth_permissions_granted">Bluetooth-Berechtigungen erteilt.</string>
<string name="bluetooth_permissions_denied">Bluetooth-Berechtigungen verweigert. Controller-Unterstützung kann eingeschränkt sein.</string>
<!-- Home strings -->
@@ -251,8 +246,6 @@
<string name="view_carousel">Karussell</string>
<string name="game_image_desc">Scrennshot für %1$s</string>
<string name="folder">Ordner</string>
<string name="pre_alpha_warning_title">Pre-Alpha Software</string>
<string name="pre_alpha_warning_description">WARNUNG: Diese Version ist nicht für die Öffentlichkeit bestimmt.</string>
<string name="dont_show_again">Nicht mehr anzeigen</string>
<string name="add_directory_success">Neues Spieleverzeichnis erfolgreich hinzugefügt.</string>
<string name="home_search">Suche</string>
@@ -297,7 +290,6 @@
<string name="search_recently_added">Kürzlich hinzugefügt</string>
<string name="open_user_folder">Eden-Ordner öffnen</string>
<string name="open_user_folder_description">Eden\'s interne Dateien verwalten</string>
<string name="theme_and_color_description">Das Aussehen der App ändern</string>
<string name="no_file_manager">Kein Dateimanager gefunden</string>
<string name="notification_no_directory_link">Eden-Verzeichnis konnte nicht geöffnet werden</string>
<string name="notification_no_directory_link_description">Bitte suche den Benutzerordner manuell über die Seitenleiste des Dateimanagers.</string>
@@ -651,7 +643,6 @@ Wird der Handheld-Modus verwendet, verringert es die Auflösung und erhöht die
<string name="preferences_controls">Steuerung</string>
<string name="preferences_controls_description">Belege die Kontrollertasten</string>
<string name="preferences_player">Spieler %d</string>
<string name="preferences_theme">Theme und Farbe</string>
<string name="preferences_debug">Debug</string>
<string name="preferences_debug_description">CPU/GPU-Debugging, Grafik-API, Fastmem</string>
@@ -765,7 +756,6 @@ Wirklich fortfahren?</string>
<string name="touchscreen">Touchscreen</string>
<string name="lock_drawer">Menü sperren</string>
<string name="unlock_drawer">Menü entsperren</string>
<!-- Software keyboard -->
<string name="software_keyboard">Software-Tastatur</string>
@@ -911,11 +901,10 @@ Wirklich fortfahren?</string>
<!-- Disk shader cache -->
<string name="building_shaders">Shader werden erstellt</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Theme</string>
<string name="theme_default">Standard</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Design</string>
<string name="theme_mode_follow_system">System folgen</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Velo de Eden</string>
<string name="eden_veil_description">Configuraciones experimentales para mejorar el rendimiento y la capacidad. Estas configuraciones pueden causar pantallas negras u otros problemas en el juego.</string>
<string name="eden_veil_warning_title">Configuraciones experimentales</string>
<string name="eden_veil_warning_description">Los ajustes contenidos en el velo de Eden son altamente experimentales y pueden causar problemas. Si tu juego no arranca, desactiva cualquier extensión.</string>
<string name="veil_extensions">Extensiones de la GPU</string>
<string name="dyna_state">Estado dinámico extendido</string>
@@ -147,7 +145,7 @@
<!-- Optimize Spir-V output -->
<string name="never">Nunca</string>
<string name="on_load">Al cargar</string>
<string name="on_load">En carga</string>
<string name="always">Siempre</string>
<!-- Multiplayer -->
@@ -242,7 +240,6 @@
<string name="keys_description">Selecciona tu archivo <b>prod.keys</b> utilizando el botón de abajo.</string>
<string name="select_keys">Seleccionar las claves</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Selecciona tu archivo <b>firmware.zip</b> con el botón abajo.\nEden actualmente requiere la versión <b>19.0.1</b> o inferior.</string>
<string name="select_firmware">Seleccionar firmware</string>
<string name="games">Juegos</string>
<string name="games_description">Selecciona la carpeta <b>Juegos</b> utilizando el botón de abajo</string>
@@ -253,8 +250,6 @@
<string name="back">Atrás</string>
<string name="add_games">Añadir Juegos</string>
<string name="step_complete">¡Completado!</string>
<string name="bluetooth_permissions_granted">Permisos de Bluetooth concedidos.</string>
<string name="bluetooth_permissions_denied">Permisos de Bluetooth denegados. El soporte para controladores puede ser limitado.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Carrusel</string>
<string name="game_image_desc">Captura de pantalla para %1$s</string>
<string name="folder">Carpeta</string>
<string name="pre_alpha_warning_title">Software Pre-Alfa</string>
<string name="pre_alpha_warning_description">ADVERTENCIA: Este software se encuentra en la etapa pre-alfa y puede tener errores e implementaciones de funciones incompletas.</string>
<string name="dont_show_again">No mostrar de nuevo</string>
<string name="add_directory_success">Nuevo directorio de juegos agregado exitosamente</string>
<string name="home_search">Buscar</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Añadido recientemente</string>
<string name="open_user_folder">Abrir la carpeta de Eden</string>
<string name="open_user_folder_description">Administrar los archivos internos de Eden</string>
<string name="theme_and_color_description">Modificar la apariencia de la aplicación</string>
<string name="no_file_manager">Explorador de archivos no encontrado</string>
<string name="notification_no_directory_link">No se pudo abrir la carpeta Eden</string>
<string name="notification_no_directory_link_description">Por favor, busque la carpeta user con el panel lateral del explorador de archivos de forma manual.</string>
@@ -617,6 +609,7 @@
<string name="fetch">Obtener</string>
<string name="delete">Borrar</string>
<string name="edit">Editar</string>
<string name="import_success">Importado exitosamente</string>
<string name="export_success">Exportado correctamente</string>
<string name="start">Comenzar</string>
<string name="global">Global</string>
@@ -666,7 +659,6 @@
<string name="preferences_controls">Controles</string>
<string name="preferences_controls_description">Asignar entradas del mando</string>
<string name="preferences_player">Jugador %d</string>
<string name="preferences_theme">Tema y color</string>
<string name="preferences_debug">Depuración</string>
<string name="preferences_debug_description">CPU/GPU debug, API gráfica, fastMEM</string>
@@ -683,6 +675,18 @@
<string name="copy_details">Copiar detalles</string>
<string name="add_ons">Extras/Add-ons</string>
<string name="add_ons_description">Activa/desactiva mods, actualizaciones y DLC</string>
<string name="playtime">Tiempo de juego:</string>
<string name="reset_playtime">Borrar tiempo de juego</string>
<string name="reset_playtime_description">Restablecer el tiempo de juego actual a 0 segundos</string>
<string name="reset_playtime_warning_description">Esto borrará los datos de tiempo de juego actual. ¿Estás seguro\?</string>
<string name="playtime_reset_successfully">El tiempo de juego se ha restablecido</string>
<string name="edit_playtime">Editar tiempo de juego</string>
<string name="hours">Horas</string>
<string name="minutes">Minutos</string>
<string name="hours_must_be_between_0_and_9999">Las horas deben estar entre 0 y 9999</string>
<string name="minutes_must_be_between_0_and_59">Los minutos deben estar entre 0 y 59</string>
<string name="seconds_must_be_between_0_and_59">Los segundos deben estar entre 0 y 59</string>
<string name="playtime_updated_successfully">Tiempo de juego actualizado exitosamente</string>
<string name="clear_shader_cache">Limpiar la caché de shaders</string>
<string name="clear_shader_cache_description">Elimina todos los shaders construidos mientras se jugaba al juego</string>
<string name="clear_shader_cache_warning_description">Experimentarás más parones mientras que la caché de shaders se regenera</string>
@@ -717,6 +721,11 @@
<string name="verify_no_result">No se pudo ejecutar la verificación de integridad</string>
<string name="verify_no_result_description">No se ha podido comprobar la validez de los contenidos del archivo</string>
<string name="verification_failed_for">La verificación falló en los siguientes archivos:\n%1$s</string>
<string name="share_game_settings">Compartir configuración</string>
<string name="import_config">Importar configuración</string>
<string name="export_config">Exportar configuración</string>
<string name="share_config_failed">No se pudo compartir el archivo de configuración</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Su ROM está encriptada</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[Siga las guías para volver a volcar sus <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">tarjetas de juego</a> o <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">títulos digitales</a>.]]></string>
@@ -937,6 +946,8 @@
<string name="cpu_accuracy_accurate">Preciso</string>
<string name="cpu_accuracy_unsafe">Impreciso</string>
<string name="cpu_accuracy_paranoid">Paranoico</string>
<string name="cpu_accuracy_debugging">Depuración</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">Cruceta</string>
<string name="gamepad_left_stick">Palanca izquierda</string>
@@ -947,11 +958,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Construyendo shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Cambiar tema</string>
<string name="theme_default">Predeterminado</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Cambiar modo del tema</string>
<string name="theme_mode_follow_system">Igual al sistema</string>
@@ -66,8 +66,6 @@
<string name="veil_misc">پردازنده و حافظه</string>
<string name="eden_veil">پرده عدن</string>
<string name="eden_veil_description">تنظیمات آزمایشی برای بهبود عملکرد و قابلیت. این تنظیمات ممکن است باعث نمایش صفحه سیاه یا سایر مشکلات بازی شود.</string>
<string name="eden_veil_warning_title">تنظیمات آزمایشی</string>
<string name="eden_veil_warning_description">تنظیمات موجود در پرده عدن بسیار آزمایشی هستند و ممکن است باعث مشکلاتی شوند. اگر بازی شما اجرا نمی‌شود، همه پسوندها را غیرفعال کنید.</string>
<string name="frame_skipping">در حال توسعه: رد کردن فریم‌ها</string>
<string name="frame_skipping_description">با فعال کردن رد کردن فریم‌ها، عملکرد را با کاهش تعداد فریم‌های رندر شده بهبود دهید. این قابلیت در حال توسعه است و در نسخه‌های آینده فعال خواهد شد.</string>
<string name="frame_interpolation">زمان‌بندی پیشرفته فریم‌ها</string>
@@ -290,8 +288,6 @@
<string name="back">قبلی</string>
<string name="add_games">افزودن بازی‌ها</string>
<string name="step_complete">تکمیل شد!</string>
<string name="bluetooth_permissions_granted">مجوزهای بلوتوث اعطا شد.</string>
<string name="bluetooth_permissions_denied">مجوزهای بلوتوث رد شد. پشتیبانی کنترلر ممکن است محدود باشد.</string>
<!-- Home strings -->
<string name="alphabetical">الفبایی</string>
@@ -299,8 +295,6 @@
<string name="view_grid">گرید</string>
<string name="view_carousel">کاروسل</string>
<string name="folder">پوشه</string>
<string name="pre_alpha_warning_title">نرم‌افزار پیش‌آلفا</string>
<string name="pre_alpha_warning_description">هشدار: این نسخه برای استفاده عمومی نیست. ممکن است دارای اشکالات باشد.</string>
<string name="dont_show_again">عدم نمایش مجدد</string>
<string name="add_directory_success">پوشه بازی با موفقیت اضافه شد</string>
<string name="home_search">جستجو</string>
@@ -341,7 +335,6 @@
<string name="search_recently_added">به تازگی اضافه شده‌ها</string>
<string name="open_user_folder">باز کردن پوشه Eden</string>
<string name="open_user_folder_description">مدیریت فایل‌های داخلی Eden</string>
<string name="theme_and_color_description">تغییر ظاهر برنامه</string>
<string name="no_file_manager">هیچ برنامه مدیریت فایلی پیدا نشد</string>
<string name="notification_no_directory_link">پوشه Eden باز نشد</string>
<string name="notification_no_directory_link_description">لطفاً پوشه کاربری را با استفاده از پنل کناری برنامه مدیریت فایل به صورت دستی پیدا کنید.</string>
@@ -625,7 +618,6 @@
<string name="preferences_graphics_description">سطح دقت، وضوح، حافظه پنهان سایه‌زن</string>
<string name="preferences_audio">صدا</string>
<string name="preferences_audio_description">موتور خروجی، میزان</string>
<string name="preferences_theme">رنگ و تم</string>
<string name="preferences_debug">اشکال‌زدایی</string>
<string name="preferences_debug_description">اشکال‌زدایی پردازنده/گرافیک، API گرافیک، fastmem</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Voile d\'Eden</string>
<string name="eden_veil_description">Paramètres expérimentaux pour améliorer les performances et les capacités. Ces paramètres peuvent causer des écrans noirs ou d\'autres problèmes de jeu.</string>
<string name="eden_veil_warning_title">Paramètres expérimentaux</string>
<string name="eden_veil_warning_description">Les paramètres du Voile d\'Eden sont très expérimentaux et peuvent causer des problèmes. Si votre jeu ne démarre pas, désactivez toutes les extensions.</string>
<string name="veil_extensions">Extensions GPU</string>
<string name="dyna_state">État dynamique étendu</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Sélectionnez votre fichier &lt;b>prod.keys&lt;/b> avec le bouton ci-dessous.</string>
<string name="select_keys">Sélectionner les clés</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Sélectionnez votre <b>firmware.zip</b>avec le bouton ci-dessous.\nEden nécessite actuellement la version <b>19.0.1</b> ou antérieure.</string>
<string name="select_firmware">Sélectionner le firmware</string>
<string name="games">Jeux</string>
<string name="games_description">Sélectionnez votre dossier &lt;b>de Jeux&lt;/b> avec le bouton ci-dessous.</string>
@@ -253,8 +250,6 @@
<string name="back">Retour</string>
<string name="add_games">Ajouter des jeux</string>
<string name="step_complete">Terminé !</string>
<string name="bluetooth_permissions_granted">Autorisations Bluetooth accordées.</string>
<string name="bluetooth_permissions_denied">Autorisations Bluetooth refusées. Le support des contrôleurs peut être limité.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Carrousel</string>
<string name="game_image_desc">Captures d\'écran pour %1$s</string>
<string name="folder">Dossier</string>
<string name="pre_alpha_warning_title">Logiciel Pré-Alpha</string>
<string name="pre_alpha_warning_description">AVERTISSEMENT : Cette version ne doit pas être partagée ou montrée au public. Ce logiciel est en phase pré-alpha et peut contenir des bugs et des fonctionnalités incomplètes.\nSi vous avez obtenu un accès non autorisé à cette version, il est fortement recommandé de la désinstaller immédiatement.</string>
<string name="dont_show_again">Ne plus afficher</string>
<string name="add_directory_success">Nouveau dossier de jeux ajouté</string>
<string name="home_search">Rechercher</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Ajouté récemment</string>
<string name="open_user_folder">Ouvrir le dossier de Eden</string>
<string name="open_user_folder_description">Gérer les fichiers internes de Eden</string>
<string name="theme_and_color_description">Modifier l\'apparence de l\'application</string>
<string name="no_file_manager">Aucun gestionnaire de fichiers trouvé</string>
<string name="notification_no_directory_link">Impossible d\'ouvrir le répertoire de Eden</string>
<string name="notification_no_directory_link_description">Veuillez localiser manuellement le dossier utilisateur avec le panneau latéral du gestionnaire de fichiers.</string>
@@ -617,6 +609,7 @@
<string name="fetch">Récupérer</string>
<string name="delete">Supprimer</string>
<string name="edit">Éditer</string>
<string name="import_success">Importé avec succès</string>
<string name="export_success">Exportation réussie</string>
<string name="start">Start</string>
<string name="global">Global</string>
@@ -666,7 +659,6 @@
<string name="preferences_controls">Contrôles</string>
<string name="preferences_controls_description">Mapper l\'entrée du contrôleur</string>
<string name="preferences_player">Joueur %d</string>
<string name="preferences_theme">Thème et couleur</string>
<string name="preferences_debug">Débogage</string>
<string name="preferences_debug_description">Débogage CPU/GPU, API graphique, fastmem</string>
@@ -683,6 +675,18 @@
<string name="copy_details">Copier les détails</string>
<string name="add_ons">Extensions</string>
<string name="add_ons_description">Activer les mods, mises à jour et DLC</string>
<string name="playtime">Temps de jeu :</string>
<string name="reset_playtime">Réinitialiser le Temps de Jeu</string>
<string name="reset_playtime_description">Réinitialiser le temps de jeu du jeu actuel à 0 seconde</string>
<string name="reset_playtime_warning_description">Cela effacera les données de temps de jeu du jeu actuel. Êtes-vous sûr\?</string>
<string name="playtime_reset_successfully">Le temps de jeu a été réinitialisé</string>
<string name="edit_playtime">Modifier le Temps de Jeu</string>
<string name="hours">Heures</string>
<string name="minutes">Minutes</string>
<string name="hours_must_be_between_0_and_9999">Les heures doivent être comprises entre 0 et 9999</string>
<string name="minutes_must_be_between_0_and_59">Les minutes doivent être comprises entre 0 et 59</string>
<string name="seconds_must_be_between_0_and_59">Les secondes doivent être comprises entre 0 et 59</string>
<string name="playtime_updated_successfully">Temps de jeu mis à jour avec succès</string>
<string name="clear_shader_cache">Effacer le cache des shaders</string>
<string name="clear_shader_cache_description">Supprime tous les shaders générés en jouant à ce jeu</string>
<string name="clear_shader_cache_warning_description">Vous risquez de rencontrer davantage de saccades pendant que le cache des shaders se régénère.</string>
@@ -717,6 +721,11 @@
<string name="verify_no_result">La vérification de l\'intégrité n\'a pas pu être effectuée</string>
<string name="verify_no_result_description">La validité du contenu du fichier n\'a pas été vérifiée</string>
<string name="verification_failed_for">La vérification a échoué pour les fichiers suivants : %1$s</string>
<string name="share_game_settings">Partager la Configuration</string>
<string name="import_config">Importer la Configuration</string>
<string name="export_config">Exporter la Configuration</string>
<string name="share_config_failed">Échec du partage du fichier de configuration</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Votre ROM est cryptée</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[Suivez les guides pour redumper vos <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">cartes de jeu</a> ou <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">titres numériques</a>.]]></string>
@@ -937,6 +946,8 @@
<string name="cpu_accuracy_accurate">Précis</string>
<string name="cpu_accuracy_unsafe">Risqué</string>
<string name="cpu_accuracy_paranoid">Paranoïaque</string>
<string name="cpu_accuracy_debugging">Débogage</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">Pavé directionnel</string>
<string name="gamepad_left_stick">Stick gauche</string>
@@ -947,11 +958,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Compilation des shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Changer le thème de l\'application</string>
<string name="theme_default">Par défaut</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Changer le mode de thème</string>
<string name="theme_mode_follow_system">Automatique</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">עדן וייל</string>
<string name="eden_veil_description">הגדרות ניסיוניות לשיפור ביצועים ויכולות. הגדרות אלו עלולות לגרום למסכים שחורים או לבעיות אחרות במשחק.</string>
<string name="eden_veil_warning_title">הגדרות ניסיוניות</string>
<string name="eden_veil_warning_description">הגדרות במסך העדן ניסיוניות מאוד ועלולות לגרום לבעיות. אם המשחק לא עולה, השבת את כל ההרחבות.</string>
<string name="veil_extensions">הרחבות GPU</string>
<string name="dyna_state">מצב דינמי מורחב</string>
@@ -229,8 +227,6 @@
<string name="back">אחורה</string>
<string name="add_games">הוסף משחקים</string>
<string name="step_complete">הושלם!</string>
<string name="bluetooth_permissions_granted">הרשאות Bluetooth אושרו.</string>
<string name="bluetooth_permissions_denied">הרשאות Bluetooth נדחו. תמיכה בבקרים עשויה להיות מוגבלת.</string>
<!-- Home strings -->
@@ -239,8 +235,6 @@
<string name="view_grid">רשת</string>
<string name="view_carousel">קרוסלה</string>
<string name="folder">תיקייה</string>
<string name="pre_alpha_warning_title">תוכנת טרום-אלפא</string>
<string name="pre_alpha_warning_description">אזהרה: גרסה זו אינה מיועדת לשימוש ציבורי. התוכנה בשלבי פיתוח מוקדמים ועלולה להכיל באגים.</string>
<string name="dont_show_again">אל תציג שוב</string>
<string name="home_search">חפש</string>
<string name="home_settings">הגדרות</string>
@@ -281,7 +275,6 @@
<string name="search_recently_added">הוסף לאחרונה</string>
<string name="open_user_folder">פתח את תיקיית Eden </string>
<string name="open_user_folder_description">נה ל את הקבצים הפנימיין של Eden</string>
<string name="theme_and_color_description">ערוך את נראות האפליקציה</string>
<string name="no_file_manager">לא נמצא מנהל קבצים</string>
<string name="notification_no_directory_link">לא יכול לפתוח את ספריית Eden</string>
<string name="notification_no_directory_link_description">בבקשה מקם את תיקיית המשתמש בפנל הצידי של מנהל הקבצים באופן ידני.</string>
@@ -344,6 +337,7 @@
<string name="error_firmware_missing">נדרש קושחה להפעלת משחקים ויישומים מסוימים. עדן עובד רק עם קושחה 19.0.1 או ישנה יותר.</string>
<string name="error_firmware_corrupted">קושחה קיימת אך לא ניתנת לקריאה. בדוק מפתחות פענוח ושמור קושחה מחדש אם needed.</string>
<string name="error_firmware_too_new">קושחה חדשה מדי או לא ניתנת לקריאה. עדן תומך רק בקושחה 19.0.1 או ישנה יותר.</string>
<string name="keys_failed">התקנת מפתחות נכשלה</string>
<string name="keys_install_success">מפתחות הותקנו בהצלחה</string>
<string name="error_keys_copy_failed">אחד או יותר מהמפתחות לא הצליחו להעתקה.</string>
@@ -562,7 +556,6 @@
<string name="preferences_graphics_description">רמת דיוק, רזולוציה, מטמון שיידרים</string>
<string name="preferences_audio">שמע</string>
<string name="preferences_audio_description">מנוע פלט, עוצמת שמע</string>
<string name="preferences_theme">צבע ונושא</string>
<string name="preferences_debug">דיבאג</string>
<string name="preferences_debug_description">דיבאגינג עבור מעבד/מעבד גרפי, ממשק תוכנה עבור הגרפיקות, fastmem</string>
@@ -635,7 +628,6 @@
<string name="emulation_unpause">המשך אמולציה</string>
<string name="emulation_input_overlay">אופציות עבור שכבת-על</string>
<string name="touchscreen">מסך מגע</string>
<!-- Software keyboard -->
<string name="software_keyboard">מקלדת תוכנה</string>
@@ -775,11 +767,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">בונה שיידרים</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">שנה את נושא האפליקצייה</string>
<string name="theme_default">ברירת מחדל</string>
<string name="theme_material_you">חומר אתה/מאטיריאל יו</string>
<!-- Theme Modes -->
<string name="change_theme_mode">שנה את מצב הנושא</string>
<string name="theme_mode_follow_system">עקוב אחרי המערכת</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Eden Fátyla</string>
<string name="eden_veil_description">Kísérleti beállítások a teljesítmény és képesség javításához. Ezek a beállítások fekete képernyőket vagy más játékproblémákat okozhatnak.</string>
<string name="eden_veil_warning_title">Kísérleti beállítások</string>
<string name="eden_veil_warning_description">Az Eden Fátyla beállításai nagyon kísérleti jellegűek, és problémákat okozhatnak. Ha a játék nem indul el, kérjük, tiltsa le az összes kiterjesztést.</string>
<string name="veil_extensions">GPU kiterjesztések</string>
<string name="dyna_state">Kiterjesztett Dinamikus Állapot</string>
@@ -229,8 +227,6 @@
<string name="back">Vissza</string>
<string name="add_games">Játékok hozzáadása</string>
<string name="step_complete">Kész!</string>
<string name="bluetooth_permissions_granted">Bluetooth engedélyek megadva.</string>
<string name="bluetooth_permissions_denied">Bluetooth engedélyek megtagadva. A kontroller támogatás korlátozott lehet.</string>
<!-- Home strings -->
@@ -239,8 +235,6 @@
<string name="view_grid">Rács</string>
<string name="view_carousel">Körhinta</string>
<string name="folder">Mappa</string>
<string name="pre_alpha_warning_title">Pre-Alpha szoftver</string>
<string name="pre_alpha_warning_description">FIGYELMEZTETÉS: Ez a verzió nem nyilvános. A szoftver pre-alpha állapotban van, hibákat és hiányos funkciókat tartalmazhat.</string>
<string name="dont_show_again">Ne mutassa újra</string>
<string name="home_search">Keresés</string>
<string name="home_settings">Beállítások</string>
@@ -280,7 +274,6 @@
<string name="search_recently_added">Nemrég hozzáadva</string>
<string name="open_user_folder">Eden mappa megnyitása</string>
<string name="open_user_folder_description">Eden belső fájljainak kezelése</string>
<string name="theme_and_color_description">Az alkalmazás megjelenésének módosítása</string>
<string name="no_file_manager">Nem található fájlkezelő</string>
<string name="notification_no_directory_link">Nem sikerült megnyitni a Eden könyvtárat</string>
<string name="notification_no_directory_link_description">Kérjük, manuálisan keresd meg a felhasználói mappát a fájlkezelő oldalsó paneljével.</string>
@@ -341,6 +334,7 @@
<string name="error_firmware_missing">A firmware szükséges egyes játékok és alkalmazások futtatásához. Az Eden csak 19.0.1 vagy régebbi firmware-ekkel működik.</string>
<string name="error_firmware_corrupted">A firmware jelen van, de nem olvasható. Ellenőrizze a visszafejtési kulcsokat és szükség esetén dumpolja újra a firmware-t.</string>
<string name="error_firmware_too_new">A firmware túl új vagy nem olvasható. Az Eden csak a 19.0.1 vagy régebbi firmware-ekkel működik.</string>
<string name="keys_failed">A kulcsok telepítése sikertelen</string>
<string name="keys_install_success">A kulcsok sikeresen telepítve</string>
<string name="error_keys_copy_failed">Egy vagy több kulcs másolása sikertelen.</string>
@@ -618,7 +612,6 @@
<string name="preferences_audio_description">Kimeneti motor, hangerő</string>
<string name="preferences_controls">Irányítás</string>
<string name="preferences_player">Játékos %d</string>
<string name="preferences_theme">Téma és színek</string>
<string name="preferences_debug">Hibakeresés</string>
<string name="preferences_debug_description">CPU/GPU hibakeresés, grafikus API, fastmem</string>
@@ -730,7 +723,6 @@
<string name="touchscreen">Érintőképernyő</string>
<string name="lock_drawer">Fiók bezárása</string>
<string name="unlock_drawer">Fiók kinyitása</string>
<!-- Software keyboard -->
<string name="software_keyboard">Szoftver billenytűzet</string>
@@ -873,7 +865,7 @@
<!-- Disk shader cache -->
<string name="building_shaders">Árnyékolók létrehozása</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Alkalmazás témájának módosítása</string>
<string name="theme_default">Alapértelmezett</string>
<!-- Theme Modes -->
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Eden\'s Veil</string>
<string name="eden_veil_description">Pengaturan eksperimental untuk meningkatkan kinerja dan kemampuan. Pengaturan ini dapat menyebabkan layar hitam atau masalah game lainnya.</string>
<string name="eden_veil_warning_title">Pengaturan Eksperimental</string>
<string name="eden_veil_warning_description">Pengaturan di Eden\'s Veil sangat eksperimental dan dapat menyebabkan masalah. Jika game tidak mau berjalan, nonaktifkan semua ekstensi.</string>
<string name="veil_extensions">Ekstensi GPU</string>
<string name="dyna_state">Status Dinamis Ekstensi</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Pilih file &lt;b>prod.keys&lt;/b> Anda dengan tombol di bawah ini.</string>
<string name="select_keys">Pilih Kunci</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Pilih berkas <b>firmware.zip</b> dengan tombol dibawah.\nSaat ini Eden memerlukan versi <b>19.0.1</b> atau dibawahnya.</string>
<string name="select_firmware">Pilih Firmware</string>
<string name="games">Permainan</string>
<string name="games_description">Pilih folder &lt;b>Games&lt;/b> Anda dengan tombol di bawah ini.</string>
@@ -253,8 +250,6 @@
<string name="back">Kembali</string>
<string name="add_games">Tambahkan permainan</string>
<string name="step_complete">Selesai!</string>
<string name="bluetooth_permissions_granted">Izin Bluetooth diberikan.</string>
<string name="bluetooth_permissions_denied">Izin Bluetooth ditolak. Dukungan controller mungkin terbatas.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Karousel</string>
<string name="game_image_desc">Tangkap layar untuk %1$s</string>
<string name="folder">Folder</string>
<string name="pre_alpha_warning_title">Perangkat Lunak Pre-Alpha</string>
<string name="pre_alpha_warning_description">PERINGATAN: Build ini tidak dimaksudkan untuk dibagikan atau ditunjukkan ke publik. Perangkat lunak ini dalam tahap pre-alpha dan mungkin memiliki bug dan fitur yang belum lengkap. \nJika Anda mendapatkan akses tidak sah ke build ini; sangat disarankan untuk mencopotnya segera</string>
<string name="dont_show_again">Jangan Tampilkan Lagi</string>
<string name="add_directory_success">Direktori permainan baru berhasil ditambahkan</string>
<string name="home_search">Cari</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">baru ditambahkan</string>
<string name="open_user_folder">Buka folder Eden</string>
<string name="open_user_folder_description">Kelola file internal Eden\'s</string>
<string name="theme_and_color_description">Ubah tampilan aplikasi</string>
<string name="no_file_manager">Tidak menemukan file manager</string>
<string name="notification_no_directory_link">Tidak bisa membuka direktori Eden</string>
<string name="notification_no_directory_link_description">Silakan cari folder pengguna dengan panel samping manajer file secara manual.</string>
@@ -662,7 +654,6 @@
<string name="preferences_controls">Kendali</string>
<string name="preferences_controls_description">Petakan input kontroler</string>
<string name="preferences_player">Player %d</string>
<string name="preferences_theme">Tema dan warna</string>
<string name="preferences_debug">Awakutu</string>
<string name="preferences_debug_description">CPU/GPU debugging, graphics API, fastmem</string>
@@ -928,11 +919,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">membangun shader</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Ubah Tema</string>
<string name="theme_default">Bawaan</string>
<string name="theme_material_you">Material Anda</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Mengubah Tema</string>
<string name="theme_mode_follow_system">Mengikuti Sistem</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Velo di Eden</string>
<string name="eden_veil_description">Impostazioni sperimentali per migliorare prestazioni e capacità. Queste impostazioni possono causare schermate nere o altri problemi di gioco.</string>
<string name="eden_veil_warning_title">Impostazioni sperimentali</string>
<string name="eden_veil_warning_description">Le impostazioni nel Velo di Eden sono altamente sperimentali e possono causare problemi. Se il gioco non si avvia, disabilita tutte le estensioni.</string>
<string name="veil_extensions">Estensioni GPU</string>
<string name="dyna_state">Stato dinamico esteso</string>
@@ -122,7 +120,7 @@
<string name="cpu_ticks">Tick</string>
<string name="skip_cpu_inner_invalidation">Salta invalidamento interno CPU</string>
<string name="skip_cpu_inner_invalidation_description">Salta alcuni invalidamenti della cache lato CPU durante gli aggiornamenti di memoria, riducendo l\'uso della CPU e migliorandone le prestazioni. Potrebbe causare glitch o crash in alcuni giochi.</string>
<string name="cpuopt_unsafe_host_mmu">Abilita emulazione MMU host</string>
<string name="cpuopt_unsafe_host_mmu">Abilita l\'emulazione della MMU nell\'host</string>
<string name="cpuopt_unsafe_host_mmu_description">Questa ottimizzazione accelera gli accessi alla memoria da parte del programma guest. Abilitandola, le letture/scritture della memoria guest vengono eseguite direttamente in memoria e sfruttano la MMU host. Disabilitandola, tutti gli accessi alla memoria sono costretti a utilizzare l\'emulazione software della MMU.</string>
<string name="fast_cpu_time">Frequenza CPU</string>
<string name="fast_cpu_time_description">Usa Boost (1700MHz) per funzionare alla massima frequenza nativa dello Switch, o Fast (2000MHz) per funzionare al doppio della frequenza.</string>
@@ -252,8 +250,6 @@
<string name="back">Indietro</string>
<string name="add_games">Aggiungi giochi</string>
<string name="step_complete">Completato!</string>
<string name="bluetooth_permissions_granted">Permessi Bluetooth concessi.</string>
<string name="bluetooth_permissions_denied">Permessi Bluetooth negati. Il supporto del controller potrebbe essere limitato.</string>
<!-- Home strings -->
@@ -262,8 +258,6 @@
<string name="view_grid">Griglia</string>
<string name="view_carousel">Carosello</string>
<string name="folder">Cartella</string>
<string name="pre_alpha_warning_title">Software Pre-Alpha</string>
<string name="pre_alpha_warning_description">AVVISO: Questa versione non è per uso pubblico. Il software è in fase pre-alpha e può contenere bug e funzionalità incomplete.\nSe hai accesso non autorizzato a questa versione, si consiglia di disinstallarla immediatamente.</string>
<string name="dont_show_again">Non mostrare più</string>
<string name="add_directory_success">Nuova directory di gioco aggiunta correttamente </string>
<string name="home_search">Cerca</string>
@@ -307,7 +301,6 @@
<string name="search_recently_added">Aggiunti recentemente</string>
<string name="open_user_folder">Apri la cartella di Eden</string>
<string name="open_user_folder_description">Gestisci i file interni di Eden</string>
<string name="theme_and_color_description">Modifica l\'aspetto dell\'app</string>
<string name="no_file_manager">Nessun file manager trovato</string>
<string name="notification_no_directory_link">Impossibile aprire la cartella di Eden</string>
<string name="notification_no_directory_link_description">Per favore individua la cartella dell\'utente manualmente con il pannello laterale del file manager.</string>
@@ -370,6 +363,7 @@
<string name="error_firmware_missing">Il firmware è richiesto per eseguire alcuni giochi e applicazioni. Eden funziona solo con firmware 19.0.1 o precedente.</string>
<string name="error_firmware_corrupted">Il firmware è presente ma non può essere letto. Controlla le chiavi di decrittazione e ridumpa il firmware se necessario.</string>
<string name="error_firmware_too_new">Il firmware è troppo recente o illeggibile. Eden supporta solo firmware 19.0.1 o precedenti.</string>
<string name="keys_failed">Installazione chiavi fallita</string>
<string name="keys_install_success">Chiavi installate con successo</string>
<string name="error_keys_copy_failed">Una o più chiavi non sono state copiate.</string>
@@ -607,7 +601,6 @@
<string name="preferences_audio">Audio</string>
<string name="preferences_audio_description">Motore di Output audio e volume</string>
<string name="preferences_controls">Comandi</string>
<string name="preferences_theme">Tema e colori</string>
<string name="preferences_debug">Debug</string>
<string name="preferences_debug_description">Debugging CPU/GPU, API grafiche, fastmem</string>
@@ -689,7 +682,6 @@
<string name="emulation_unpause">Riprendi l\'emulazione</string>
<string name="emulation_input_overlay">Opzioni overlay</string>
<string name="touchscreen">Touchscreen</string>
<!-- Software keyboard -->
<string name="software_keyboard">Tastiera Software</string>
@@ -825,11 +817,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Costruendo gli shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Cambia tema dell\'app</string>
<string name="theme_default">Predefinito</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Cambia la modalità del tema</string>
<string name="theme_mode_follow_system">Segue il Sistema</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">エデンのベール</string>
<string name="eden_veil_description">パフォーマンスと機能を向上させる実験的な設定。この設定は黒画面やその他のゲームの問題を引き起こす可能性があります。</string>
<string name="eden_veil_warning_title">実験的な設定</string>
<string name="eden_veil_warning_description">エデンのベールに含まれる設定は非常に実験的であり、問題を引き起こす可能性があります。ゲームが起動しない場合は、拡張機能を無効にしてください。</string>
<string name="veil_extensions">GPU拡張機能</string>
<string name="dyna_state">拡張ダイナミックステート</string>
@@ -229,8 +227,6 @@
<string name="back">戻る</string>
<string name="add_games">ゲームを追加</string>
<string name="step_complete">完了!</string>
<string name="bluetooth_permissions_granted">Bluetoothの権限が許可されました。</string>
<string name="bluetooth_permissions_denied">Bluetoothの権限が拒否されました。コントローラーのサポートが制限される可能性があります。</string>
<!-- Home strings -->
@@ -241,8 +237,6 @@
<string name="view_carousel">カルーセル</string>
<string name="game_image_desc"> のスクリーンショット %1$s</string>
<string name="folder">フォルダ</string>
<string name="pre_alpha_warning_title">プレアルファ版</string>
<string name="pre_alpha_warning_description">警告: このビルドは公開用ではありません。プレアルファ段階でバグや未実装機能が含まれます。\n不正に入手した場合は直ちにアンインストールしてください</string>
<string name="dont_show_again">再表示しない</string>
<string name="home_search">検索</string>
<string name="home_settings">設定</string>
@@ -283,7 +277,6 @@
<string name="search_recently_added">最近追加された</string>
<string name="open_user_folder">Eden フォルダを開く</string>
<string name="open_user_folder_description">Eden内部のファイルを管理します</string>
<string name="theme_and_color_description">アプリの見た目を変更</string>
<string name="no_file_manager">ファイルマネージャーが見つかりませんでした</string>
<string name="notification_no_directory_link">Edenのディレクトリを開けません</string>
<string name="notification_no_directory_link_description">ファイルマネージャのサイドパネルでユーザーフォルダを手動で探してください。</string>
@@ -343,6 +336,7 @@
<string name="error_firmware_missing">一部のゲームとアプリケーションを実行するにはファームウェアが必要です。Edenは19.0.1以前のファームウェアでのみ動作します。</string>
<string name="error_firmware_corrupted">ファームウェアは存在しますが読み取れません。復号キーを確認し、必要に応じてファームウェアを再ダンプしてください。</string>
<string name="error_firmware_too_new">ファームウェアが新しすぎるか読み取れません。Edenは19.0.1以前のファームウェアのみに対応しています。</string>
<string name="keys_failed">キーのインストールに失敗</string>
<string name="keys_install_success">キーが正常にインストールされました</string>
<string name="error_keys_copy_failed">1つ以上のキーのコピーに失敗しました。</string>
@@ -562,7 +556,6 @@
<string name="preferences_graphics">グラフィック</string>
<string name="preferences_audio">サウンド</string>
<string name="preferences_controls">操作</string>
<string name="preferences_theme">テーマと色</string>
<string name="preferences_debug">デバッグ</string>
<!-- Game properties -->
<string name="info">情報</string>
@@ -635,7 +628,6 @@
<string name="emulation_unpause">再開</string>
<string name="emulation_input_overlay">表示オプション</string>
<string name="touchscreen">タッチスクリーン</string>
<!-- Software keyboard -->
<string name="software_keyboard">ソフトウェアキーボード</string>
@@ -775,11 +767,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">シェーダーを構築しています</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">アプリのテーマ</string>
<string name="theme_default">デフォルト</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">テーマモード</string>
<string name="theme_mode_follow_system">システムに従う</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">에덴의 베일</string>
<string name="eden_veil_description">성능 및 기능을 향상시키기 위한 실험적 설정. 이 설정은 검은 화면 또는 기타 게임 문제를 일으킬 수 있습니다.</string>
<string name="eden_veil_warning_title">실험적 설정</string>
<string name="eden_veil_warning_description">에덴의 베일에 포함된 설정은 매우 실험적이며 문제가 발생할 수 있습니다. 게임이 시작되지 않으면 확장 기능을 비활성화하세요.</string>
<string name="veil_extensions">GPU 확장 기능</string>
<string name="dyna_state">확장 동적 상태</string>
@@ -229,8 +227,6 @@
<string name="back">이전</string>
<string name="add_games">게임 추가</string>
<string name="step_complete">완료되었습니다!</string>
<string name="bluetooth_permissions_granted">블루투스 권한이 허용되었습니다.</string>
<string name="bluetooth_permissions_denied">블루투스 권한이 거부되었습니다. 컨트롤러 지원이 제한될 수 있습니다.</string>
<!-- Home strings -->
@@ -239,8 +235,6 @@
<string name="view_grid">격자</string>
<string name="view_carousel">캐러셀</string>
<string name="folder">폴더</string>
<string name="pre_alpha_warning_title">프리-알파 소프트웨어</string>
<string name="pre_alpha_warning_description">경고: 이 빌드는 공개용이 아닙니다. 이 소프트웨어는 프리-알파 단계이며 버그 및 미완성 기능이 있을 수 있습니다. \n무단으로 이 빌드를 획득한 경우 즉시 삭제하는 것이 좋습니다.</string>
<string name="dont_show_again">다시 보지 않기</string>
<string name="home_search">검색</string>
<string name="home_settings">설정</string>
@@ -281,7 +275,6 @@
<string name="search_recently_added">최근 추가</string>
<string name="open_user_folder">Eden 폴더 열기</string>
<string name="open_user_folder_description">Eden의 내부 파일 관리</string>
<string name="theme_and_color_description">앱 디자인 편집</string>
<string name="no_file_manager">파일 관리자를 찾을 수 없음</string>
<string name="notification_no_directory_link">Eden 디렉터리를 열 수 없음</string>
<string name="notification_no_directory_link_description">파일 관리자의 사이드 패널에서 사용자 폴더를 수동으로 찾아주세요.</string>
@@ -340,6 +333,7 @@
<string name="error_firmware_missing">일부 게임 및 애플리케이션 실행을 위해 펌웨어가 필요합니다. Eden은 19.0.1 이하 버전의 펌웨어에서만 작동합니다.</string>
<string name="error_firmware_corrupted">펌웨어가 존재하지만 읽을 수 없습니다. 복호화 키를 확인하고 필요한 경우 펌웨어를 다시 덤프하세요.</string>
<string name="error_firmware_too_new">펌웨어가 너무 최신이거나 읽을 수 없습니다. Eden은 19.0.1 이전 버전의 펌웨어에서만 작동합니다.</string>
<string name="keys_failed">키 설치 실패</string>
<string name="keys_install_success">키가 성공적으로 설치됨</string>
<string name="error_keys_copy_failed">하나 이상의 키를 복사하지 못했습니다.</string>
@@ -576,7 +570,6 @@
<string name="preferences_audio">오디오</string>
<string name="preferences_audio_description">출력 엔진, 불륨</string>
<string name="preferences_controls">조작</string>
<string name="preferences_theme">테마 및 색상</string>
<string name="preferences_debug">디버그</string>
<string name="preferences_debug_description">CPU/GPU 디버깅, 그래픽 API, Fastmem</string>
@@ -689,7 +682,6 @@
<string name="touchscreen">터치 스크린</string>
<string name="lock_drawer">에뮬레이터 메뉴 잠금</string>
<string name="unlock_drawer">에뮬레이터 메뉴 잠금 해제</string>
<!-- Software keyboard -->
<string name="software_keyboard">소프트웨어 키보드</string>
@@ -834,11 +826,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">셰이더 빌드 중</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">앱 테마 변경</string>
<string name="theme_default">기본값</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">다크 모드 설정</string>
<string name="theme_mode_follow_system">시스템 값 사용</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Edens slør</string>
<string name="eden_veil_description">Eksperimentelle innstillinger for å forbedre ytelse og funksjonalitet. Disse innstillingene kan forårsake svarte skjermer eller andre spillproblemer.</string>
<string name="eden_veil_warning_title">Eksperimentelle innstillinger</string>
<string name="eden_veil_warning_description">Innstillingene i Edens slør er svært eksperimentelle og kan forårsake problemer. Hvis spillet ikke starter, deaktiver alle utvidelser.</string>
<string name="veil_extensions">GPU-utvidelser</string>
<string name="dyna_state">Utvidet dynamisk tilstand</string>
@@ -228,9 +226,6 @@
<string name="next">Neste</string>
<string name="back">Tilbake</string>
<string name="add_games">Legg til spill</string>
<string name="bluetooth_permissions_granted">Bluetooth-tillatelser gitt.</string>
<string name="bluetooth_permissions_denied">Bluetooth-tillatelser avslått. Kontrollerstøtte kan være begrenset.</string>
<!-- Home strings -->
<string name="alphabetical">Alfabetisk</string>
@@ -238,8 +233,6 @@
<string name="view_grid">Rutenett</string>
<string name="view_carousel">Karusell</string>
<string name="folder">Mappe</string>
<string name="pre_alpha_warning_title">Forhåndsversjon</string>
<string name="pre_alpha_warning_description">ADVARSEL: Denne versjonen er ikke ment for offentlig bruk. Programvaren er i tidlig utvikling og kan inneholde feil.</string>
<string name="dont_show_again">Ikke vis igjen</string>
<string name="home_search">Søk</string>
<string name="home_settings">Innstillinger</string>
@@ -277,7 +270,6 @@
<string name="search_recently_added">Nylig lagt til</string>
<string name="open_user_folder">Åpne Eden-mappen</string>
<string name="open_user_folder_description">Administrere Edens interne filer</string>
<string name="theme_and_color_description">Endre appens utseende</string>
<string name="no_file_manager">Ingen filbehandler funnet</string>
<string name="notification_no_directory_link">Kunne ikke åpne Eden-katalogen</string>
<string name="notification_no_directory_link_description">Finn brukermappen manuelt med filbehandlingens sidepanel.</string>
@@ -333,6 +325,7 @@
<string name="error_firmware_missing">Fastvare kreves for å kjøre enkelte spill og applikasjoner. Eden fungerer bare med fastvare 19.0.1 eller eldre.</string>
<string name="error_firmware_corrupted">Fastvare er til stede, men kan ikke leses. Sjekk dekrypteringsnøklene og dump fastvaren på nytt om nødvendig.</string>
<string name="error_firmware_too_new">Fastvaren er for ny eller kan ikke leses. Eden fungerer bare med fastvare 19.0.1 eller eldre.</string>
<string name="keys_failed">Kunne ikke installere nøkler</string>
<string name="keys_install_success">Nøklene ble installert</string>
<string name="error_keys_copy_failed">En eller flere nøkler kunne ikke kopieres.</string>
@@ -545,7 +538,6 @@
<string name="preferences_graphics">Grafikk</string>
<string name="preferences_audio">Lyd</string>
<string name="preferences_controls">Kontrollere</string>
<string name="preferences_theme">Tema og farge</string>
<string name="preferences_debug">Feilsøk</string>
<!-- Game properties -->
<string name="info">Info</string>
@@ -617,7 +609,6 @@
<string name="emulation_unpause">Ta emuleringen ut av pause</string>
<string name="emulation_input_overlay">Overlay-alternativer</string>
<string name="touchscreen">Touch-skjerm</string>
<!-- Software keyboard -->
<string name="software_keyboard">Programvaretastatur</string>
@@ -655,6 +646,7 @@
<string name="temperature_celsius">Celsius</string>
<string name="temperature_fahrenheit">Fahrenheit</string>
<!-- Memory Sizes -->
<string name="memory_byte_shorthand">B</string>
<string name="memory_gigabyte">GB</string>
<!-- Renderer APIs -->
@@ -741,11 +733,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Bygging av shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Endre app-tema</string>
<string name="theme_default">Standard</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Endre temamodus</string>
<string name="theme_mode_follow_system">Følg systemet</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Zasłona Edenu</string>
<string name="eden_veil_description">Eksperymentalne ustawienia poprawiające wydajność i możliwości. Te ustawienia mogą powodować czarne ekrany lub inne problemy z grą.</string>
<string name="eden_veil_warning_title">Ustawienia eksperymentalne</string>
<string name="eden_veil_warning_description">Ustawienia w Zasłona Edenu są wysoce eksperymentalne i mogą powodować problemy. Jeśli gra się nie uruchamia, wyłącz wszystkie rozszerzenia.</string>
<string name="veil_extensions">Rozszerzenia GPU</string>
<string name="dyna_state">Rozszerzony stan dynamiczny</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Wybierz swoje klucze &lt;b>prod.keys&lt;/b> za pomocą przycisku poniżej.</string>
<string name="select_keys">Wybierz klucze</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Wybierz swój plik <b>firmware.zip</b> przyciskiem poniżej.\nEden currently requires version <b>19.0.1</b> lub niższej.</string>
<string name="select_firmware">Wybierz Firmware</string>
<string name="games">Gry</string>
<string name="games_description">Wybierz katalog z grami &lt;b>Games&lt;/b> za pomocą przycisku poniżej.</string>
@@ -253,8 +250,6 @@
<string name="back">Wstecz</string>
<string name="add_games">Dodaj gry</string>
<string name="step_complete">Gotowe!</string>
<string name="bluetooth_permissions_granted">Uprawnienia Bluetooth przyznane.</string>
<string name="bluetooth_permissions_denied">Uprawnienia Bluetooth odrzucone. Obsługa kontrolera może być ograniczona.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Karuzela</string>
<string name="game_image_desc">Zrzut ekranu dla %1$s</string>
<string name="folder">Folder</string>
<string name="pre_alpha_warning_title">Oprogramowanie w fazie pre-alfa</string>
<string name="pre_alpha_warning_description">UWAGA: Ta wersja nie jest przeznaczona do publicznego udostępniania. Może zawierać błędy i niekompletne funkcje.\nJeśli masz do niej nieautoryzowany dostęp, zaleca się natychmiastową deinstalację.</string>
<string name="dont_show_again">Nie pokazuj ponownie</string>
<string name="add_directory_success">Pomyślnie dodano nowy katalog gier</string>
<string name="home_search">Szukaj</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Ostatnio dodane</string>
<string name="open_user_folder">Otwórz folder Eden</string>
<string name="open_user_folder_description">Zarządzaj plikami emulatora</string>
<string name="theme_and_color_description">Personalizuj wygląd aplikacji</string>
<string name="no_file_manager">Nie znaleziono menedżera plików</string>
<string name="notification_no_directory_link">Nie można otworzyć folderu emulatora</string>
<string name="notification_no_directory_link_description">Proszę wybrać ręcznie folder z pomocą panelu bocznego menedżera plików.</string>
@@ -619,6 +611,7 @@
<string name="fetch">Pobierz</string>
<string name="delete">Usuń</string>
<string name="edit">Edytuj</string>
<string name="import_success">Zaimportowano pomyślnie</string>
<string name="export_success">Pomyślnie wyeksportowano</string>
<string name="start">Start</string>
<string name="global">Globalne</string>
@@ -668,7 +661,6 @@
<string name="preferences_controls">Sterowanie</string>
<string name="preferences_controls_description">Mapuj wejście kontrolera</string>
<string name="preferences_player">Gracz %d</string>
<string name="preferences_theme">Motyw i kolor</string>
<string name="preferences_debug">Debug</string>
<string name="preferences_debug_description">Debugowanie CPU/GPU, API grafiki, fastmem</string>
@@ -685,6 +677,18 @@
<string name="copy_details">Kopiuj szczegóły</string>
<string name="add_ons">Dodatki</string>
<string name="add_ons_description">Przełącz mody, aktualizacje i DLC</string>
<string name="playtime">Czas gry:</string>
<string name="reset_playtime">Wyczyść czas gry</string>
<string name="reset_playtime_description">Zresetuj czas gry do 0 sekund.</string>
<string name="reset_playtime_warning_description">Spowoduje to usunięcie danych dotyczących czasu gry w bieżącej grze. Czy na pewno chcesz to zrobić\?</string>
<string name="playtime_reset_successfully">Czas gry został zresetowany</string>
<string name="edit_playtime">Edytuj czas gry</string>
<string name="hours">Godziny</string>
<string name="minutes">Minuty</string>
<string name="hours_must_be_between_0_and_9999">Liczba godzin musi mieścić się w zakresie 09999</string>
<string name="minutes_must_be_between_0_and_59">Liczba minut musi mieścić się w zakresie 059</string>
<string name="seconds_must_be_between_0_and_59">Liczba sekund musi mieścić się w zakresie 059</string>
<string name="playtime_updated_successfully">Czas gry zaktualizowano pomyślnie</string>
<string name="clear_shader_cache">Wyczyść pamięć podręczną shaderów</string>
<string name="clear_shader_cache_description">Usuwa wszystkie shadery zbudowane podczas grania w tę grę</string>
<string name="clear_shader_cache_warning_description">Możesz doświadczyć większych przycięć, gdy pamięć podręczna shaderów będzie się odbudowywać</string>
@@ -719,6 +723,11 @@
<string name="verify_no_result">Nie można było przeprowadzić weryfikacji integralności</string>
<string name="verify_no_result_description">Zawartość pliku nie została sprawdzona pod kątem poprawności</string>
<string name="verification_failed_for">Zawartość pliku nie została sprawdzona pod kątem poprawności:\n%1$s</string>
<string name="share_game_settings">Udostępnij konfigurację</string>
<string name="import_config">Importuj konfigurację</string>
<string name="export_config">Eksportuj konfigurację</string>
<string name="share_config_failed">Nie udało się udostępnić pliku konfiguracji</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Twój ROM jest zakodowany</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[Postępuj zgodnie z przewodnikami, aby ponownie zrzucić swoje <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">karty gry</a> lub <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">tytuły cyfrowe</a>.]]></string>
@@ -939,6 +948,8 @@
<string name="cpu_accuracy_accurate">Dokładny</string>
<string name="cpu_accuracy_unsafe">Niebezpieczny</string>
<string name="cpu_accuracy_paranoid">Paranoid (Wolny)</string>
<string name="cpu_accuracy_debugging">Debugowanie</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">D-pad</string>
<string name="gamepad_left_stick">Lewa gałka</string>
@@ -949,11 +960,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Budowanie shaderów</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Ustaw motyw aplikacji</string>
<string name="theme_default">Domyślny</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Zmień tryb motywu</string>
<string name="theme_mode_follow_system">Podążaj za systemowym</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Véu do Éden</string>
<string name="eden_veil_description">Configurações experimentais que podem melhorar a performance e recursos do emulador. Essas configurações podem causar telas pretas ou outros problemas durante o jogo.</string>
<string name="eden_veil_warning_title">Configurações Experimentais</string>
<string name="eden_veil_warning_description">As configurações no Véu do Éden são altamente experimentais e podem causar problemas. Se o jogo não iniciar corretamente, desative todas as extensões.\nAlgumas configurações podem estar com nome em inglês para garantir um melhor suporte.</string>
<string name="veil_extensions">Extensões da GPU</string>
<string name="dyna_state">Extended Dynamic State</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Selecione seu arquivo &lt;b>prod.keys&lt;/b> com o botão abaixo.</string>
<string name="select_keys">Selecione as Chaves (Keys)</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Selecione seu arquivo <b>firmware.zip</b> com o botão abaixo.\nAtualmente, o Eden requer a versão <b>19.0.1</b> ou inferior.</string>
<string name="select_firmware">Selecionar Firmware</string>
<string name="games">Jogos</string>
<string name="games_description">Selecione sua pasta de <b>Jogos</b> com o botão abaixo.</string>
@@ -253,8 +250,6 @@
<string name="back">Voltar</string>
<string name="add_games">Adicionar Jogos</string>
<string name="step_complete">Concluído!</string>
<string name="bluetooth_permissions_granted">Permissões do Bluetooth concedidas.</string>
<string name="bluetooth_permissions_denied">Permissões do Bluetooth foram negadas. O suporte a controles pode ser limitado.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Carrossel</string>
<string name="game_image_desc">Captura de tela para %1$s</string>
<string name="folder">Pasta</string>
<string name="pre_alpha_warning_title">Versão Pre-Alpha</string>
<string name="pre_alpha_warning_description">AVISO: Este software está em estágio pré-alpha e pode apresentar erros e funcionalidades incompletas.</string>
<string name="dont_show_again">Não Mostrar Novamente</string>
<string name="add_directory_success">Nova pasta de jogos adicionada com sucesso</string>
<string name="home_search">Pesquisar</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Adicionado recentemente</string>
<string name="open_user_folder">Abrir a pasta do Eden</string>
<string name="open_user_folder_description">Gerencie os arquivos internos do Eden</string>
<string name="theme_and_color_description">Alterar a aparência do aplicativo</string>
<string name="no_file_manager">Nenhum gerenciador de arquivos encontrado</string>
<string name="notification_no_directory_link">Não foi possível abrir a pasta do Eden</string>
<string name="notification_no_directory_link_description">Localize manualmente a pasta do usuário usando o gerenciador de arquivos.</string>
@@ -618,6 +610,7 @@ uma tentativa de mapeamento automático</string>
<string name="fetch">Obter</string>
<string name="delete">Deletar</string>
<string name="edit">Editar</string>
<string name="import_success">Importado com sucesso</string>
<string name="export_success">Exportado com sucesso</string>
<string name="start">Start</string>
<string name="global">Global</string>
@@ -667,7 +660,6 @@ uma tentativa de mapeamento automático</string>
<string name="preferences_controls">Controles</string>
<string name="preferences_controls_description">Mapear entradas do controle</string>
<string name="preferences_player">Jogador %d</string>
<string name="preferences_theme">Tema e cor</string>
<string name="preferences_debug">Depuração</string>
<string name="preferences_debug_description">Depuração de CPU/GPU, API gráfica, fastmem</string>
@@ -684,6 +676,18 @@ uma tentativa de mapeamento automático</string>
<string name="copy_details">Copiar detalhes</string>
<string name="add_ons">Add-ons</string>
<string name="add_ons_description">Gerencie mods, atualizações e DLC</string>
<string name="playtime">Tempo de Jogo:</string>
<string name="reset_playtime">Limpar Tempo de Jogo</string>
<string name="reset_playtime_description">Resetar o contador de tempo do jogo atual</string>
<string name="reset_playtime_warning_description">Isso vai resetar os dados do contador de tempo do jogo atual. Tem certeza\?</string>
<string name="playtime_reset_successfully">Contador de tempo foi resetado</string>
<string name="edit_playtime">Editar Tempo de Jogo</string>
<string name="hours">Horas</string>
<string name="minutes">Minutos</string>
<string name="hours_must_be_between_0_and_9999">Horas devem estar entre 0 e 9999</string>
<string name="minutes_must_be_between_0_and_59">Minutos devem estar entre 0 e 59</string>
<string name="seconds_must_be_between_0_and_59">Segundos devem estar entre 0 e 59</string>
<string name="playtime_updated_successfully">Tempo de jogo atualizado com sucesso</string>
<string name="clear_shader_cache">Excluir cache de shaders</string>
<string name="clear_shader_cache_description">Remove todos os shaders compilados durante a execução do jogo</string>
<string name="clear_shader_cache_warning_description">Você terá mais engasgos enquanto o cache de shaders for recompilado</string>
@@ -718,6 +722,11 @@ uma tentativa de mapeamento automático</string>
<string name="verify_no_result">A verificação de integridade não pôde ser executada</string>
<string name="verify_no_result_description">Os conteúdos do arquivo não foram verificados se são válidos</string>
<string name="verification_failed_for">A verificação falhou para os seguintes arquivos:\n%1$s</string>
<string name="share_game_settings">Compartilhar Configuração</string>
<string name="import_config">Importar Configuração</string>
<string name="export_config">Exportar Configuração</string>
<string name="share_config_failed">Falhar ao compartilhar o arquivo de configuração</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Sua ROM está encriptada</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[Siga os guias para refazer o dump de seus <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">cartões de jogo</a> ou <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">títulos digitais</a>.]]></string>
@@ -938,6 +947,8 @@ uma tentativa de mapeamento automático</string>
<string name="cpu_accuracy_accurate">Precisa</string>
<string name="cpu_accuracy_unsafe">Inseguro</string>
<string name="cpu_accuracy_paranoid">Paranoica</string>
<string name="cpu_accuracy_debugging">Depuração</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">Botões Direcionais</string>
<string name="gamepad_left_stick">Analógico esquerdo</string>
@@ -948,11 +959,10 @@ uma tentativa de mapeamento automático</string>
<!-- Disk shader cache -->
<string name="building_shaders">Criando shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Mudar o tema do aplicativo</string>
<string name="theme_default">Padrão</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Alterar o tema</string>
<string name="theme_mode_follow_system">Igual ao Sistema</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Véu do Éden</string>
<string name="eden_veil_description">Definições experimentais para melhorar o desempenho e capacidade. Estas definições podem causar ecrãs pretos ou outros problemas no jogo.</string>
<string name="eden_veil_warning_title">Definições experimentais</string>
<string name="eden_veil_warning_description">As configurações no Véu do Éden são altamente experimentais e podem causar problemas. Se o jogo não iniciar, desative todas as extensões.</string>
<string name="veil_extensions">Extensões da GPU</string>
<string name="dyna_state">Estado Dinâmico Estendido</string>
@@ -229,8 +227,6 @@
<string name="back">Voltar</string>
<string name="add_games">Adiciona Jogos</string>
<string name="step_complete">Completo!</string>
<string name="bluetooth_permissions_granted">Permissões Bluetooth concedidas.</string>
<string name="bluetooth_permissions_denied">Permissões Bluetooth recusadas. O suporte a comandos pode ser limitado.</string>
<!-- Home strings -->
@@ -239,8 +235,6 @@
<string name="view_grid">Grelha</string>
<string name="view_carousel">Carrossel</string>
<string name="folder">Pasta</string>
<string name="pre_alpha_warning_title">Software Pré-Alpha</string>
<string name="pre_alpha_warning_description">AVISO: Esta versão não deve ser partilhada publicamente. O software está em fase pré-alpha e pode conter bugs e funcionalidades incompletas.\nSe obteve acesso não autorizado a esta versão, recomenda-se a desinstalação imediata.</string>
<string name="dont_show_again">Não mostrar novamente</string>
<string name="home_search">Pesquisar</string>
<string name="home_settings">Configurações</string>
@@ -281,7 +275,6 @@
<string name="search_recently_added">Adicionado recentemente</string>
<string name="open_user_folder">Abre a pasta Eden</string>
<string name="open_user_folder_description">Gere os ficheiro internos do Eden</string>
<string name="theme_and_color_description">Modifica a aparência da App</string>
<string name="no_file_manager">Nenhum gestor de ficheiros encontrado</string>
<string name="notification_no_directory_link">Impossível abrir pasta Eden</string>
<string name="notification_no_directory_link_description">Localiza a pasta de utilizador manualmente com o painel lateral do gestor de ficheiros.</string>
@@ -344,6 +337,7 @@
<string name="error_firmware_missing">É necessário firmware para executar alguns jogos e aplicações. O Eden só funciona com firmware 19.0.1 ou anterior.</string>
<string name="error_firmware_corrupted">Firmware está presente mas não pode ser lido. Verifique chaves de descriptografia e volte a fazer dump do firmware se necessário.</string>
<string name="error_firmware_too_new">Firmware é demasiado recente ou ilegível. O Eden só funciona com firmware 19.0.1 ou anterior.</string>
<string name="keys_failed">Falha ao instalar chaves</string>
<string name="keys_install_success">Chaves instaladas com sucesso</string>
<string name="error_keys_copy_failed">Uma ou mais chaves falharam ao copiar.</string>
@@ -629,7 +623,6 @@ uma tentativa de mapeamento automático</string>
<string name="preferences_controls">Controlos</string>
<string name="preferences_controls_description">Mapear entradas do controle</string>
<string name="preferences_player">Jogador %d</string>
<string name="preferences_theme">Cor e tema.</string>
<string name="preferences_debug">Depurar</string>
<string name="preferences_debug_description">Depuração de CPU/GPU, API gráfica, fastmem</string>
@@ -742,7 +735,6 @@ uma tentativa de mapeamento automático</string>
<string name="touchscreen">Ecrã Táctil</string>
<string name="lock_drawer">Bloquear submenu</string>
<string name="unlock_drawer">Desbloquear submenu</string>
<!-- Software keyboard -->
<string name="software_keyboard">Teclado de software</string>
@@ -887,11 +879,10 @@ uma tentativa de mapeamento automático</string>
<!-- Disk shader cache -->
<string name="building_shaders">A criar shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Mudar o tema do aplicativo</string>
<string name="theme_default">Padrão</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Alterar o tema</string>
<string name="theme_mode_follow_system">Igual ao Sistema</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Покров Эдема</string>
<string name="eden_veil_description">Экспериментальные настройки для улучшения производительности и возможностей. Эти настройки могут вызывать черные экраны или другие проблемы в игре.</string>
<string name="eden_veil_warning_title">Экспериментальные настройки</string>
<string name="eden_veil_warning_description">Настройки в Покров Эдема являются экспериментальными и могут вызывать проблемы. Если ваша игра не запускается, отключите все расширения.</string>
<string name="veil_extensions">Расширения ГПУ</string>
<string name="dyna_state">Расширенное динамическое состояние</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Выберите ваш файл &lt;b>prod.keys&lt;/b> с помощью кнопки ниже.</string>
<string name="select_keys">Выбрать ключи</string>
<string name="firmware">Прошивка</string>
<string name="firmware_description">Выберите файл <b>firmware.zip</b>с помощью кнопки снизу.\nВ настоящее время для Eden требуется версия <b>19.0.1</b> или ниже.</string>
<string name="select_firmware">Выбрать прошивку</string>
<string name="games">Игры</string>
<string name="games_description">Выберите вашу папку с &lt;b>играми&lt;/b> с помощью кнопки ниже.</string>
@@ -253,8 +250,6 @@
<string name="back">Назад</string>
<string name="add_games">Добавить игры</string>
<string name="step_complete">Выполнено!</string>
<string name="bluetooth_permissions_granted">Разрешения Bluetooth предоставлены.</string>
<string name="bluetooth_permissions_denied">Разрешения Bluetooth отклонены. Поддержка контроллера может быть ограничена.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Карусель</string>
<string name="game_image_desc">Скриншот для %1$s</string>
<string name="folder">Папка</string>
<string name="pre_alpha_warning_title">Пре-альфа версия</string>
<string name="pre_alpha_warning_description">ВНИМАНИЕ: Эта версия не предназначена для публичного использования. Возможны ошибки и неполные функции.</string>
<string name="dont_show_again">Не показывать снова</string>
<string name="add_directory_success">Новый каталог игр успешно добавлен</string>
<string name="home_search">Поиск</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Недавно добавлено</string>
<string name="open_user_folder">Открыть папку Eden</string>
<string name="open_user_folder_description">Управление внутренними файлами Eden</string>
<string name="theme_and_color_description">Изменение внешнего вида приложения</string>
<string name="no_file_manager">Не найден файловый менеджер</string>
<string name="notification_no_directory_link">Не удалось открыть папку Eden</string>
<string name="notification_no_directory_link_description">Пожалуйста, найдите папку пользователя с помощью боковой панели файлового менеджера вручную.</string>
@@ -668,7 +660,6 @@
<string name="preferences_controls">Управление</string>
<string name="preferences_controls_description">Маппинг контроллера</string>
<string name="preferences_player">Игрок %d</string>
<string name="preferences_theme">Тема и цвет</string>
<string name="preferences_debug">Отладка</string>
<string name="preferences_debug_description">Отладка ЦП/ГП, графический API, fastmem</string>
@@ -943,11 +934,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Постройка шейдеров</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Сменить тему</string>
<string name="theme_default">По умолчанию</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Сменить режим темы</string>
<string name="theme_mode_follow_system">Системная</string>
@@ -61,8 +61,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Еденова аукција</string>
<string name="eden_veil_description">Експериментална подешавања за побољшање перформанси и способности. Ова подешавања могу изазвати црне екране или друге проблеме у игри.</string>
<string name="eden_veil_warning_title">Експериментална подешавања</string>
<string name="eden_veil_warning_description">Подешавања која се налазе у оквиру ЕДЕН-ова вела су високо експериментални и могу проузроковати проблеме. Ако се ваша игра не покрене, онемогућите било какве проширења.</string>
<string name="veil_extensions">ГПУ екстензије</string>
<string name="dyna_state">Проширена динамичка држава</string>
@@ -228,8 +226,6 @@
<string name="back">Назад</string>
<string name="add_games">Додајте игре</string>
<string name="step_complete">Довршите!</string>
<string name="bluetooth_permissions_granted">Bluetooth дозволе одобрене.</string>
<string name="bluetooth_permissions_denied">Bluetooth дозволе одбијене. Подршка за контролере може бити ограничена.</string>
<!-- Home strings -->
@@ -238,8 +234,6 @@
<string name="view_grid">Мрежа</string>
<string name="view_carousel">Карусел</string>
<string name="folder">Мапа</string>
<string name="pre_alpha_warning_title">Пре-Алпха софтвер</string>
<string name="pre_alpha_warning_description">УПОЗОРЕЊЕ: Овај софтвер је у пре-алфа фази и може имати грешке и непотпуне примене функција.</string>
<string name="dont_show_again">Не покажи поново</string>
<string name="home_search">Тражити</string>
<string name="home_settings">Подешавања</string>
@@ -280,7 +274,6 @@
<string name="search_recently_added">Недавно је додато</string>
<string name="open_user_folder">Отворите директоријум ЕДЕН</string>
<string name="open_user_folder_description">Управљајте унутрашњим датотекама ЕДЕН-а</string>
<string name="theme_and_color_description">Измените изглед апликације</string>
<string name="no_file_manager">Није пронађен ниједан управник датотека</string>
<string name="notification_no_directory_link">Није могуће отворити директоријум ЕДЕН-а</string>
<string name="notification_no_directory_link_description">Молимо пронађите корисничку мапу са бочним панелом датотека менаџера и ручно.</string>
@@ -344,6 +337,7 @@
<string name="error_firmware_missing">Firmware је потребан за покретање одређених игара и апликација. Eden ради само са firmware-ом 19.0.1 или старијим.</string>
<string name="error_firmware_corrupted">Firmware је присутан али се не може прочитати. Проверите кључеве за дешифровање и поново направите firmware дамп ако је потребно.</string>
<string name="error_firmware_too_new">Firmware је превише нов или се не може прочитати. Eden ради само са firmware-ом 19.0.1 или старијим.</string>
<string name="keys_failed">Неуспела инсталација кључева</string>
<string name="keys_install_success">Кључеви успешно инсталирани</string>
<string name="error_keys_copy_failed">Један или више кључева није успело да се копира.</string>
@@ -627,7 +621,6 @@
<string name="preferences_controls">Контрола</string>
<string name="preferences_controls_description">Унос контролера мапе</string>
<string name="preferences_player">Играч%d</string>
<string name="preferences_theme">Тема и боја</string>
<string name="preferences_debug">Ослободити збрајања</string>
<string name="preferences_debug_description">ЦПУ / ГПУ уклањање погрешака, графички АПИ, ФастМем</string>
@@ -740,7 +733,6 @@
<string name="touchscreen">Екран осетљив на додир</string>
<string name="lock_drawer">Ладица за закључавање</string>
<string name="unlock_drawer">Откључај ладицу</string>
<!-- Software keyboard -->
<string name="software_keyboard">Софтверска тастатура</string>
@@ -885,11 +877,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Зграда схадера</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Промените тему апликација</string>
<string name="theme_default">Подразумевано</string>
<string name="theme_material_you">Материјал ти</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Промените режим теме</string>
<string name="theme_mode_follow_system">Слиједите систем</string>
@@ -84,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Завіса Eden</string>
<string name="eden_veil_description">Експериментальні налаштування для покращення продуктивності та сумісності. Ці налаштування можуть викликати збої, зокрема чорний екран.</string>
<string name="eden_veil_warning_title">Експериментальні налаштування</string>
<string name="eden_veil_warning_description">Налаштування Завіси Eden є експериментальними та можуть спричинити проблеми. Якщо ваша гра не запускається — вимкніть усі розширення.</string>
<string name="veil_extensions">Розширення GPU</string>
<string name="dyna_state">Розширений динамічний стан</string>
@@ -242,7 +240,6 @@
<string name="keys_description">Виберіть ваш файл &lt;b>prod.keys&lt;/b> за допомогою кнопки нижче.</string>
<string name="select_keys">Вибрати ключі</string>
<string name="firmware">Прошивка</string>
<string name="firmware_description">Виберіть свій файл <b>firmware.zip</b> за допомогою кнопки нижче.\nEden наразі потребує версії <b>19.0.1</b> або нижче.</string>
<string name="select_firmware">Вибрати прошивку</string>
<string name="games">Ігри</string>
<string name="games_description">Виберіть вашу теку з &lt;b>іграми&lt;/b> за допомогою кнопки нижче.</string>
@@ -253,8 +250,6 @@
<string name="back">Назад</string>
<string name="add_games">Додати ігри</string>
<string name="step_complete">Завершено!</string>
<string name="bluetooth_permissions_granted">Дозволи Bluetooth надано.</string>
<string name="bluetooth_permissions_denied">Дозволи Bluetooth відхилено. Підтримка контролерів може бути обмежена.</string>
<!-- Home strings -->
@@ -265,8 +260,6 @@
<string name="view_carousel">Карусель</string>
<string name="game_image_desc">Скріншот для %1$s</string>
<string name="folder">Тека</string>
<string name="pre_alpha_warning_title">Попередня версія</string>
<string name="pre_alpha_warning_description">УВАГА: Ця версія не призначена для публічного використання. Програмне забезпечення знаходиться на ранній стадії розробки та може містити помилки.</string>
<string name="dont_show_again">Більше не показувати</string>
<string name="add_directory_success">Нову теку з іграми успішно додано</string>
<string name="home_search">Пошук</string>
@@ -311,7 +304,6 @@
<string name="search_recently_added">Нещодавно додано</string>
<string name="open_user_folder">Відкрити теку Eden</string>
<string name="open_user_folder_description">Керування внутрішніми файлами Eden</string>
<string name="theme_and_color_description">Змінити зовнішній вигляд застосунку</string>
<string name="no_file_manager">Не знайдено файлового менеджера</string>
<string name="notification_no_directory_link">Не вдалося відкрити теку Eden</string>
<string name="notification_no_directory_link_description">Будь ласка, знайдіть теку користувача за допомогою бічної панелі файлового менеджера вручну.</string>
@@ -619,6 +611,7 @@
<string name="fetch">Отримати</string>
<string name="delete">Видалити</string>
<string name="edit">Редагувати</string>
<string name="import_success">Успішно імпортовано</string>
<string name="export_success">Успішно експортовано</string>
<string name="start">Запустити</string>
<string name="global">Глобальне</string>
@@ -668,7 +661,6 @@
<string name="preferences_controls">Керування</string>
<string name="preferences_controls_description">Призначити кнопки контролера</string>
<string name="preferences_player">Гравець %d</string>
<string name="preferences_theme">Тема та колір</string>
<string name="preferences_debug">Налагодження</string>
<string name="preferences_debug_description">Налагодження CPU/GPU, графічний API, швидка пам\'ять</string>
@@ -685,6 +677,18 @@
<string name="copy_details">Копіювати подробиці</string>
<string name="add_ons">Доповнення</string>
<string name="add_ons_description">Перемикати моди, оновлення та доповнення</string>
<string name="playtime">Награний час:</string>
<string name="reset_playtime">Очистити награний час</string>
<string name="reset_playtime_description">Скинути награний час поточної гри до 0 секунд</string>
<string name="reset_playtime_warning_description">Це очистить дані про награний час поточної гри. Ви впевнені\?</string>
<string name="playtime_reset_successfully">Награний час скинуто</string>
<string name="edit_playtime">Редагувати награний час</string>
<string name="hours">Години</string>
<string name="minutes">Хвилини</string>
<string name="hours_must_be_between_0_and_9999">Години повинні бути в межах від 0 до 9999</string>
<string name="minutes_must_be_between_0_and_59">Хвилини повинні бути в межах від 0 до 59</string>
<string name="seconds_must_be_between_0_and_59">Секунди повинні бути в межах від 0 до 59</string>
<string name="playtime_updated_successfully">Награний час успішно оновлено</string>
<string name="clear_shader_cache">Очистити кеш шейдерів</string>
<string name="clear_shader_cache_description">Вилучає усі скомпільовані шейдери під час відтворення цієї гри</string>
<string name="clear_shader_cache_warning_description">Під час повторної генерації шейдерів можуть виникати затримки</string>
@@ -719,6 +723,11 @@
<string name="verify_no_result">Неможливо виконати перевірку цілісності</string>
<string name="verify_no_result_description">Файли вмісту не перевірені на дійсність</string>
<string name="verification_failed_for">Не вдалося перевірити такі файли:\n%1$s</string>
<string name="share_game_settings">Поділитися налаштуванням</string>
<string name="import_config">Імпортувати налаштування</string>
<string name="export_config">Експортувати налаштування</string>
<string name="share_config_failed">Не вдалося поділитися файлом налаштування</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Ваш ROM зашифрований</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[Будь ласка, дотримуйтесь інструкцій для повторного дампу ваших <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">ігрових картриджів</a> або <a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">цифрових назв</a>.]]></string>
@@ -939,6 +948,8 @@
<string name="cpu_accuracy_accurate">Точно</string>
<string name="cpu_accuracy_unsafe">Небезпечно</string>
<string name="cpu_accuracy_paranoid">Параноїк (повільно)</string>
<string name="cpu_accuracy_debugging">Зневадження</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">Хрестовина</string>
<string name="gamepad_left_stick">Лівий джойстик</string>
@@ -949,11 +960,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Побудова шейдерів</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Змінити тему</string>
<string name="theme_default">За замовчуванням</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Змінити режим теми</string>
<string name="theme_mode_follow_system">Системна</string>
@@ -62,8 +62,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Mành che của Eden</string>
<string name="eden_veil_description">Cài đặt thử nghiệm để cải thiện hiệu suất và khả năng. Những cài đặt này có thể gây ra màn hình đen hoặc các vấn đề khác trong trò chơi.</string>
<string name="eden_veil_warning_title">Cài đặt thử nghiệm</string>
<string name="eden_veil_warning_description">Các cài đặt trong Mành che của Eden rất thử nghiệm và có thể gây ra sự cố. Nếu trò chơi của bạn không khởi động, hãy tắt tất cả các tiện ích mở rộng.</string>
<string name="veil_extensions">Tiện ích mở rộng GPU</string>
<string name="dyna_state">Trạng thái động mở rộng</string>
@@ -228,9 +226,6 @@
<string name="next">Tiếp theo</string>
<string name="back">Trở lại</string>
<string name="add_games">Thêm Trò chơi</string>
<string name="bluetooth_permissions_granted">Đã cấp quyền Bluetooth.</string>
<string name="bluetooth_permissions_denied">Từ chối quyền Bluetooth. Hỗ trợ điều khiển có thể bị hạn chế.</string>
<!-- Home strings -->
<string name="alphabetical">A-Z</string>
@@ -238,8 +233,6 @@
<string name="view_grid">Lưới</string>
<string name="view_carousel">Băng chuyền</string>
<string name="folder">Thư mục</string>
<string name="pre_alpha_warning_title">Phần mềm Pre-Alpha</string>
<string name="pre_alpha_warning_description">CẢNH BÁO: Phiên bản này chưa hoàn thiện, có thể có lỗi.</string>
<string name="dont_show_again">Đừng hiển thị lại</string>
<string name="home_search">Tìm</string>
<string name="home_settings">Cài đặt</string>
@@ -277,7 +270,6 @@
<string name="search_recently_added">Đã thêm gần đây</string>
<string name="open_user_folder">Mở thư mục Eden</string>
<string name="open_user_folder_description">Quản lý file nội bộ của Eden</string>
<string name="theme_and_color_description">Thay đổi giao diện ứng dụng</string>
<string name="no_file_manager">Không tìm thấy trình quản lý tệp</string>
<string name="notification_no_directory_link">Không thể mở thư mục Eden</string>
<string name="notification_no_directory_link_description">Vui lòng xác định thư mục người dùng với bảng điều khiển bên của trình quản lý tệp thủ công.</string>
@@ -331,6 +323,7 @@
<string name="error_firmware_missing">Firmware là cần thiết để chạy một số trò chơi và ứng dụng. Eden chỉ hoạt động với firmware 19.0.1 trở về trước.</string>
<string name="error_firmware_corrupted">Firmware được báo cáo là có nhưng không thể đọc được. Kiểm tra khóa giải mã và dump lại firmware nếu cần.</string>
<string name="error_firmware_too_new">Firmware quá mới hoặc không thể đọc. Eden chỉ hoạt động với firmware 19.0.1 trở về trước.</string>
<string name="keys_failed">Không thể cài đặt khóa</string>
<string name="keys_install_success">Đã cài đặt khóa thành công</string>
<string name="error_keys_copy_failed">Không thể sao chép một hoặc nhiều khóa.</string>
@@ -545,7 +538,6 @@
<string name="preferences_graphics">Đồ Họa</string>
<string name="preferences_audio">Âm Thanh</string>
<string name="preferences_controls">Phím</string>
<string name="preferences_theme">Chủ đề và màu sắc</string>
<string name="preferences_debug">Vá lỗi</string>
<!-- Game properties -->
<string name="info">Thông Tin</string>
@@ -617,7 +609,6 @@
<string name="emulation_unpause">Tiếp tục giả lập</string>
<string name="emulation_input_overlay">Tuỳ chọn lớp phủ</string>
<string name="touchscreen">Màn hình cảm ứng</string>
<!-- Software keyboard -->
<string name="software_keyboard">Bàn phím mềm</string>
@@ -655,6 +646,7 @@
<string name="temperature_celsius">Celsius</string>
<string name="temperature_fahrenheit">Fahrenheit</string>
<!-- Memory Sizes -->
<string name="memory_byte_shorthand">B</string>
<string name="memory_gigabyte">GB</string>
<!-- Renderer APIs -->
@@ -741,11 +733,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">Dựng shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Thay đổi chủ đề ứng dụng</string>
<string name="theme_default">Mặc định</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Thay đổi chế độ giao diện</string>
<string name="theme_mode_follow_system">Theo hệ thống</string>
@@ -65,7 +65,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">伊甸之幕</string>
<string name="eden_veil_description">实验性设置以提高性能和能力。这些设置可能会导致黑屏或其他游戏问题。</string>
<string name="eden_veil_warning_description">伊甸之幕中的设置具有高度实验性,可能导致问题。如果游戏无法启动,请禁用所有扩展。</string>
<string name="veil_extensions">GPU扩展</string>
<string name="dyna_state">扩展动态状态</string>
@@ -231,8 +230,6 @@
<string name="back">上一步</string>
<string name="add_games">添加游戏</string>
<string name="step_complete">完成!</string>
<string name="bluetooth_permissions_granted">蓝牙权限已授予。</string>
<string name="bluetooth_permissions_denied">蓝牙权限被拒绝。控制器支持可能受限。</string>
<!-- Home strings -->
@@ -241,8 +238,6 @@
<string name="view_grid">网格</string>
<string name="view_carousel">轮播</string>
<string name="folder">文件夹</string>
<string name="pre_alpha_warning_title">预发布软件</string>
<string name="pre_alpha_warning_description">警告:此版本不适用于公开分享或展示。软件处于预发布阶段,可能存在错误和功能不完整。\n如果您未经授权获取此版本,强烈建议立即卸载。</string>
<string name="dont_show_again">不再显示</string>
<string name="add_directory_success">游戏目录新增成功</string>
<string name="home_search">搜索</string>
@@ -284,7 +279,6 @@
<string name="search_recently_added">最近添加</string>
<string name="open_user_folder">打开 Eden 文件夹</string>
<string name="open_user_folder_description">管理 Eden 内部文件</string>
<string name="theme_and_color_description">更改外观</string>
<string name="no_file_manager">找不到可用的文件管理器</string>
<string name="notification_no_directory_link">无法打开 Eden 文件夹</string>
<string name="notification_no_directory_link_description">请使用文件管理器侧边栏中的内部存储手动定位用户文件夹。</string>
@@ -344,6 +338,7 @@
<string name="error_firmware_missing">运行某些游戏和系统应用需要固件。Eden仅支持19.0.1及更早版本的固件。</string>
<string name="error_firmware_corrupted">检测到固件存在但无法读取。请检查解密密钥并在必要时重新转储固件。</string>
<string name="error_firmware_too_new">固件过新或无法读取。Eden仅支持19.0.1及更早版本的固件。</string>
<string name="keys_failed">密钥安装失败</string>
<string name="keys_install_success">密钥安装成功</string>
<string name="error_keys_copy_failed">一个或多个密钥复制失败。</string>
@@ -629,7 +624,6 @@
<string name="preferences_controls">控制</string>
<string name="preferences_controls_description">使用控制器来映射输入</string>
<string name="preferences_player">玩家 %d</string>
<string name="preferences_theme">主题和色彩</string>
<string name="preferences_debug">调试</string>
<string name="preferences_debug_description">CPU/GPU 调试、图形 API 及 fastmem 内存访问</string>
@@ -742,7 +736,6 @@
<string name="touchscreen">触摸屏</string>
<string name="lock_drawer">锁定侧边菜单</string>
<string name="unlock_drawer">解锁侧边菜单</string>
<!-- Software keyboard -->
<string name="software_keyboard">软件键盘</string>
@@ -893,11 +886,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">正在编译着色器</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">切换主题</string>
<string name="theme_default">系统默认</string>
<string name="theme_material_you">Material You</string>
<!-- Theme Modes -->
<string name="change_theme_mode">更改主题模式</string>
<string name="theme_mode_follow_system">跟随系统</string>
@@ -12,6 +12,11 @@
<!-- Spinbox strings -->
<string name="increment">增加</string>
<string name="decrement">減少</string>
<string name="value_too_low">範圍最小必須為%1$d</string>
<string name="value_too_high">範圍最多必須為%1$d</string>
<string name="invalid_value">無效的範圍</string>
<!-- Input Overlay -->
<string name="overlay_auto_hide">自動隱藏虛擬按鍵</string>
<string name="overlay_auto_hide_description">在未使用虛擬按鍵幾秒後自動隱藏</string>
@@ -79,8 +84,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">伊甸之幕</string>
<string name="eden_veil_description">實驗性設定以提高效能和相容性。這些設定可能會導致黑螢幕或其他遊戲問題。</string>
<string name="eden_veil_warning_title">實驗性設定</string>
<string name="eden_veil_warning_description">伊甸之幕中的設定具有高度實驗性,可能導致問題。如果遊戲無法啟動,請停用所有擴充功能。</string>
<string name="veil_extensions">GPU擴充功能</string>
<string name="dyna_state">擴展動態狀態</string>
@@ -111,16 +114,16 @@
<string name="use_lru_cache">啟用LRU快取</string>
<string name="use_lru_cache_description">啟用或停用LRU快取,透過節省CPU進程使用率來提高效能。某些遊戲可能存在問題,特別是薩爾達傳說:王國之淚 v1.2.1(更新),如果遊戲無法啟動或隨機崩潰,請停用此選項。</string>
<string name="use_fast_cpu_time">快速 CPU 時間</string>
<string name="use_fast_cpu_time_description">強制模擬 CPU 以更高的時脈運行,減少某些 FPS 限制。此選項不穩定,可能會導致問題,較弱的 CPU 可能會看到效能下降。</string>
<string name="use_fast_cpu_time_description">強制模擬 CPU 以更高的時脈運行,減少某些 FPS 限制。此選項不穩定,可能會導致問題,較弱的 CPU 可能會看到效能下降。</string>
<string name="custom_cpu_ticks">自訂CPU時脈</string>
<string name="custom_cpu_ticks_description">設定自訂的CPU時脈值。更高的值可能提高效能,但也可能導致遊戲卡死。建議範圍為77-21000。</string>
<string name="cpu_ticks">時脈</string>
<string name="skip_cpu_inner_invalidation">跳過CPU內部無效化</string>
<string name="skip_cpu_inner_invalidation_description">在記憶體更新期間跳過某些CPU端快取無效化,減少CPU使用率並提高其性能。可能會導致某些遊戲出現故障或崩潰。</string>
<string name="skip_cpu_inner_invalidation">跳過CPU內部失效處理</string>
<string name="skip_cpu_inner_invalidation_description">在記憶體更新期間跳過某些CPU端快取的失效處理,減少CPU使用率並提高其性能。可能會導致某些遊戲出現故障或崩潰。</string>
<string name="cpuopt_unsafe_host_mmu">啟用主機 MMU 模擬</string>
<string name="cpuopt_unsafe_host_mmu_description">此最佳化可加速來賓程式的記憶體存取。啟用後,來賓記憶體讀取/寫入將直接在記憶體中執行並利用主機的 MMU。停用此功能將強制所有記憶體存取使用軟體 MMU 模擬。</string>
<string name="fast_cpu_time">CPU 時鐘</string>
<string name="fast_cpu_time_description">使用 Boost (1700MHz) 以 Switch 的最高原生時鐘速度運行,或 Fast (2000MHz) 以雙倍時鐘速度運行。</string>
<string name="fast_cpu_time_description">使用 Boost (1700MHz) 以 Switch 的最高原生時運行,或 Fast (2000MHz) 以雙倍時運行。</string>
<string name="memory_layout">記憶體佈局</string>
<string name="memory_layout_description">(實驗性)更改模擬記憶體佈局。此設定不會提高效能,但可能有助於透過模組使用高解析度的遊戲。不要在 RAM 為 8GB 或更少的手機上使用。</string>
<string name="dma_accuracy">DMA 準確度</string>
@@ -135,7 +138,7 @@
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC模擬</string>
<string name="nvdec_emulation_description">選擇影片解碼(NVDEC)的處理方式</string>
<string name="nvdec_emulation_description">選擇影片解碼(NVDEC)的方式</string>
<string name="nvdec_emulation_cpu">CPU</string>
<string name="nvdec_emulation_gpu">GPU</string>
<string name="nvdec_emulation_none"></string>
@@ -231,13 +234,12 @@
<!-- Setup strings -->
<string name="welcome">歡迎!</string>
<string name="welcome_description">瞭解如何設定 &lt;b>Eden&lt;/b> 並進入模擬。</string>
<string name="welcome_description">瞭解如何設定 <b>Eden</b>開始模擬。</string>
<string name="get_started">開始使用</string>
<string name="keys">金鑰</string>
<string name="keys_description">使用下方的按鈕安裝您的 <b>prod.keys</b> 檔案。</string>
<string name="select_keys">選擇金鑰</string>
<string name="firmware">韌體</string>
<string name="firmware_description">使用下方按鈕安裝您的 <b>firmware.zip</b> 檔案。\n目前Eden需要 <b>19.0.1</b> 或更低版本。</string>
<string name="select_firmware">選擇韌體</string>
<string name="games">遊戲</string>
<string name="games_description">使用下方的按鈕選擇您的<b>遊戲</b>資料夾。</string>
@@ -248,8 +250,6 @@
<string name="back">上一步</string>
<string name="add_games">新增遊戲</string>
<string name="step_complete">完成!</string>
<string name="bluetooth_permissions_granted">已授予藍牙存取權。</string>
<string name="bluetooth_permissions_denied">藍牙存取權被拒絕。控制器支援可能受限。</string>
<!-- Home strings -->
@@ -260,15 +260,13 @@
<string name="view_carousel">輪播</string>
<string name="game_image_desc">為%1$s螢幕截圖</string>
<string name="folder">資料夾</string>
<string name="pre_alpha_warning_title">預覽版軟體</string>
<string name="pre_alpha_warning_description">警告:此版本不應公開分享或展示。此為預覽版軟體,可能存在錯誤與未完成功能。\n若您未經授權取得此版本,強烈建議立即解除安裝</string>
<string name="dont_show_again">不再顯示</string>
<string name="add_directory_success">遊戲目錄新增成功</string>
<string name="home_search">搜尋</string>
<string name="home_settings">設定</string>
<string name="empty_gamelist">找不到檔案,或者尚未選取遊戲目錄。</string>
<string name="manage_game_folders">管理遊戲資料夾</string>
<string name="select_games_folder_description">允許 Eden 填入遊戲清單</string>
<string name="select_games_folder_description">允許 Eden 尋找您的遊戲檔案</string>
<string name="add_games_warning">跳過選擇遊戲資料夾?</string>
<string name="add_games_warning_description">如果未選擇遊戲資料夾,遊戲將不會顯示在遊戲清單。</string>
<string name="add_games_warning_help">https://yuzu-mirror.github.io/help/quickstart/#dumping-games</string>
@@ -306,7 +304,6 @@
<string name="search_recently_added">最近新增</string>
<string name="open_user_folder">開啟 Eden 資料夾</string>
<string name="open_user_folder_description">管理 Eden 的內部檔案</string>
<string name="theme_and_color_description">修改應用程式外觀</string>
<string name="no_file_manager">找不到檔案管理員</string>
<string name="notification_no_directory_link">無法開啟 Eden 目錄</string>
<string name="notification_no_directory_link_description">請使用檔案管理員的側邊面板手動定位到使用者資料夾。</string>
@@ -454,14 +451,14 @@
<string name="frame_skipping_description">啟用或停用跳幀以減少渲染幀數,提高效能。此功能仍在開發中,將在未來版本中啟用。</string>
<string name="renderer_accuracy">準確度層級</string>
<string name="renderer_resolution">解析度 (手提/底座)</string>
<string name="renderer_vsync">VSync 模式</string>
<string name="renderer_vsync">垂直同步</string>
<string name="renderer_screen_layout">方向</string>
<string name="renderer_aspect_ratio">長寬比</string>
<string name="renderer_scaling_filter">視窗適應過濾器</string>
<string name="fsr_sharpness">FSR 銳化度</string>
<string name="fsr_sharpness_description">使用 FSR 時圖片的銳化程度</string>
<string name="renderer_anti_aliasing">抗鋸齒</string>
<string name="renderer_force_max_clock">強制最大時脈 (僅 Adreno)</string>
<string name="renderer_force_max_clock">強制使用最大時脈 (僅Adreno)</string>
<string name="renderer_force_max_clock_description">強制 GPU 以可能的最大時脈執行 (熱溫限制仍會被套用)。</string>
<string name="renderer_optimize_spirv_output">最佳化Spir-V輸出</string>
<string name="renderer_optimize_spirv_output_description">最佳化編譯後的著色器以提高GPU效率。</string>
@@ -474,8 +471,8 @@
<string name="renderer_reactive_flushing">使用重新啟用排清</string>
<string name="renderer_reactive_flushing_description">犧牲效能,以改善部分遊戲的轉譯準確度。</string>
<string name="use_disk_shader_cache">磁碟著色器快取</string>
<string name="use_disk_shader_cache_description">透過將產生的著色器儲存並載入至磁碟,減少中斷。</string>
<string name="anisotropic_filtering">非等向性過濾</string>
<string name="use_disk_shader_cache_description">將產生的著色器快取儲存至硬碟以減少中斷。</string>
<string name="anisotropic_filtering">各向異性過濾</string>
<string name="anisotropic_filtering_description">改善斜角檢視時的紋理品質</string>
<string name="warning_resolution">解析度縮放到2倍或更高可能會導致問題,並可能顯著降低設備速度。</string>
@@ -524,7 +521,7 @@
<string name="range">靈敏度</string>
<string name="deadzone">無感帶</string>
<string name="modifier">用按鈕、按鍵來模擬搖桿</string>
<string name="modifier_range">修改以按鈕模擬左搖桿的值,視遊戲不同而有所差異(模擬左搖桿時,若將此數值設為50,則按下按鈕時遊戲裡的人物可能只會走動而不是奔跑,數值越高代表使用的模擬值越大)</string>
<string name="modifier_range">修改以按鈕模擬左搖桿的值,視遊戲不同而有所差異\n(模擬左搖桿時,若將此數值設為50,則按下按鈕時遊戲裡的人物可能只會走動而不是奔跑,數值越高代表使用的模擬值越大)</string>
<string name="triggers">肩部按鍵</string>
<string name="button_l">L</string>
<string name="button_r">R</string>
@@ -563,7 +560,7 @@
<string name="toggle_axis">視角反轉</string>
<string name="connected">已連線</string>
<string name="use_system_vibrator">使用系統震動器</string>
<string name="input_overlay">導入虛擬按鍵設定</string>
<string name="input_overlay">虛擬按鍵設定</string>
<string name="vibration">震動</string>
<string name="vibration_strength">震動強度</string>
<string name="profile">設定檔</string>
@@ -608,6 +605,7 @@
<string name="fetch">獲取</string>
<string name="delete">刪除</string>
<string name="edit">編輯</string>
<string name="import_success">已成功導入</string>
<string name="export_success">已成功導出</string>
<string name="start">開始</string>
<string name="global">全域</string>
@@ -637,7 +635,7 @@
<string name="successfully_installed">%1$s 安裝成功</string>
<string name="driver_failed_title">驅動程式安裝失敗</string>
<string name="failed_install_driver">無法安裝 %1$s 驅動程式,您的系統支援此驅動程式嗎?</string>
<string name="driver_empty">下載驅動程式為空,請檢查您的網路</string>
<string name="driver_empty">下載驅動程式失敗,請檢查您的網路連線</string>
<string name="downloading">下載中…</string>
<string name="installing">安裝中…</string>
<string name="latest">最新</string>
@@ -657,7 +655,6 @@
<string name="preferences_controls">控制</string>
<string name="preferences_controls_description">控制器輸入配對</string>
<string name="preferences_player">玩家 %d</string>
<string name="preferences_theme">主題和色彩</string>
<string name="preferences_debug">偵錯</string>
<string name="preferences_debug_description">CPU/GPU 偵錯、圖形 API 及 fastmem</string>
@@ -674,6 +671,18 @@
<string name="copy_details">複製詳細資料</string>
<string name="add_ons">附加元件</string>
<string name="add_ons_description">切換模組、更新及 DLC</string>
<string name="playtime">遊玩時間:</string>
<string name="reset_playtime">重設遊玩時間</string>
<string name="reset_playtime_description">將此遊戲的遊玩時間重設為0</string>
<string name="reset_playtime_warning_description">您確定要重設此遊戲的遊玩時間嗎?</string>
<string name="playtime_reset_successfully">遊玩時間已重設</string>
<string name="edit_playtime">修改遊玩時間</string>
<string name="hours">小時</string>
<string name="minutes">分鐘</string>
<string name="hours_must_be_between_0_and_9999">必須介於0到9999小時之間</string>
<string name="minutes_must_be_between_0_and_59">必須介於0到59分鐘之間</string>
<string name="seconds_must_be_between_0_and_59">必須介於0到59秒之間</string>
<string name="playtime_updated_successfully">成功更新遊玩時間</string>
<string name="clear_shader_cache">清除著色器快取</string>
<string name="clear_shader_cache_description">清除此遊戲所有已編譯的著色器快取</string>
<string name="clear_shader_cache_warning_description">重新編譯著色器快取的過程中可能會導致遊戲有些微卡頓</string>
@@ -704,10 +713,15 @@
<string name="verifying">驗證中...</string>
<string name="verify_success">完整性驗證成功!</string>
<string name="verify_failure">完整性驗證失敗!</string>
<string name="verify_failure_description">文件可能已经损坏</string>
<string name="verify_failure_description">文件可能已經損壞</string>
<string name="verify_no_result">無法執行完整性驗證</string>
<string name="verify_no_result_description">未檢查文件的完整性</string>
<string name="verification_failed_for">以下文件的完整性驗證失敗 %1$s</string>
<string name="verification_failed_for">以下文件的完整性驗證失敗\n %1$s</string>
<string name="share_game_settings">分享設定</string>
<string name="import_config">導入設定</string>
<string name="export_config">導出設定</string>
<string name="share_config_failed">分享設定失敗</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">您的 ROM 已加密</string>
<string name="loader_error_encrypted_roms_description"><![CDATA[請按照指南重新轉儲您的<a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-physical-titles-game-cards\">遊戲卡</a>或<a href=\"https://yuzu-mirror.github.io/help/quickstart/#dumping-digital-titles-eshop\">數位版遊戲</a>。]]></string>
@@ -736,10 +750,10 @@
<string name="launch">啟動</string>
<!-- Custom Config strings -->
<string name="config_write_failed">無法寫入設定檔</string>
<string name="config_apply_failed">無法套用設定</string>
<string name="config_write_failed">設定寫入失敗</string>
<string name="config_apply_failed">套用設定失敗</string>
<string name="config_already_exists_title">設定已存在</string>
<string name="config_already_exists_message">%1$s已存在自訂設定 .\n\n您要覆寫它嗎?\n\n這個動作無法復原</string>
<string name="config_already_exists_message">%1$s已存在自訂設定\n\n您要覆寫它嗎?\n\n這個動作無法復原</string>
<string name="config_exists_prompt">正在檢查現有設定...</string>
<string name="overwrite_cancelled">覆寫已取消</string>
<string name="overwrite">覆寫</string>
@@ -928,6 +942,8 @@
<string name="cpu_accuracy_accurate">高準確度</string>
<string name="cpu_accuracy_unsafe">低準確度(不安全)</string>
<string name="cpu_accuracy_paranoid">不合理</string>
<string name="cpu_accuracy_debugging">偵錯</string>
<!-- Gamepad Buttons -->
<string name="gamepad_d_pad">方向鍵</string>
<string name="gamepad_left_stick">左搖桿</string>
@@ -938,11 +954,10 @@
<!-- Disk shader cache -->
<string name="building_shaders">正在建置著色器</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">變更應用程式主題</string>
<string name="theme_default">預設</string>
<string name="theme_material_you">質感設計3</string>
<!-- Theme Modes -->
<string name="change_theme_mode">變更主題模式</string>
<string name="theme_mode_follow_system">跟隨系統</string>
@@ -525,13 +525,6 @@
<item>3</item>
</integer-array>
<string-array name="verifyFirmwareResults">
<item>""</item>
<item>@string/error_firmware_missing</item>
<item>@string/error_firmware_corrupted</item>
<item>@string/error_firmware_too_new</item>
</string-array>
<string-array name="installKeysResults">
<item>""</item>
<item>""</item>
+18 -10
View File
@@ -89,8 +89,6 @@
<!-- Eden\'s Veil -->
<string name="eden_veil">Eden\'s Veil</string>
<string name="eden_veil_description">Experimental settings to improve performance and capability. These settings may cause black screens or other game issues.</string>
<string name="eden_veil_warning_title">Experimental Settings</string>
<string name="eden_veil_warning_description">The settings contained within Eden\'s Veil are highly experimental and may cause issues. If your game does not boot, disable any extensions.</string>
<string name="veil_extensions">GPU Extensions</string>
<string name="dyna_state">Extended Dynamic State</string>
@@ -247,7 +245,7 @@
<string name="keys_description">Select your &lt;b>prod.keys&lt;/b> file with the button below.</string>
<string name="select_keys">Select Keys</string>
<string name="firmware">Firmware</string>
<string name="firmware_description">Select your &lt;b>firmware.zip&lt;/b> file with the button below.\nEden currently requires version &lt;b>19.0.1&lt;/b> or below.</string>
<string name="firmware_description">Select your &lt;b>firmware.zip&lt;/b> file with the button below.</string>
<string name="select_firmware">Select Firmware</string>
<string name="games">Games</string>
<string name="games_description">Select your &lt;b>Games&lt;/b> folder with the button below.</string>
@@ -258,8 +256,6 @@
<string name="back">Back</string>
<string name="add_games">Add Games</string>
<string name="step_complete">Complete!</string>
<string name="bluetooth_permissions_granted">Bluetooth permissions granted.</string>
<string name="bluetooth_permissions_denied">Bluetooth permissions denied. Controller support may be limited.</string>
<!-- Home strings -->
@@ -270,10 +266,11 @@
<string name="view_carousel">Carousel</string>
<string name="game_image_desc">Screenshot for %1$s</string>
<string name="folder">Folder</string>
<string name="pre_alpha_warning_title">Pre-Alpha Software</string>
<string name="pre_alpha_warning_description">WARNING: This software is in the pre-alpha stage and may have bugs and incomplete feature implementations.</string>
<string name="dont_show_again">Don\'t Show Again</string>
<string name="add_directory_success">New game directory added successfully </string>
<string name="enable_update_checks">Check for updates on app startup.</string>
<string name="update_available">Update Available</string>
<string name="update_available_description">A new version is available: %1$s\n\nWould you like to download it?</string>
<string name="home_search">Search</string>
<string name="home_settings">Settings</string>
<string name="empty_gamelist">No files were found or no game directory has been selected yet.</string>
@@ -316,7 +313,7 @@
<string name="search_recently_added">Recently added</string>
<string name="open_user_folder">Open Eden folder</string>
<string name="open_user_folder_description">Manage Eden\'s internal files</string>
<string name="theme_and_color_description">Modify the look of the app</string>
<string name="app_settings_description">Modify the behavior and look of the app</string>
<string name="no_file_manager">No file manager found</string>
<string name="notification_no_directory_link">Could not open Eden directory</string>
<string name="notification_no_directory_link_description">Please locate the user folder with the file manager\'s side panel manually.</string>
@@ -676,7 +673,6 @@
<string name="preferences_controls">Controls</string>
<string name="preferences_controls_description">Map controller input</string>
<string name="preferences_player">Player %d</string>
<string name="preferences_theme">Theme and color</string>
<string name="preferences_debug">Debug</string>
<string name="preferences_debug_description">CPU/GPU debugging, graphics API, fastmem</string>
@@ -807,11 +803,21 @@
<string name="emulation_pause">Pause emulation</string>
<string name="emulation_unpause">Unpause emulation</string>
<string name="emulation_input_overlay">Overlay options</string>
<string name="load_amiibo">Load Amiibo</string>
<string name="touchscreen">Touchscreen</string>
<string name="lock_drawer">Lock drawer</string>
<string name="unlock_drawer">Unlock drawer</string>
<string name="reset">Reset</string>
<!-- Amiibo -->
<string name="amiibo_title">Amiibo</string>
<string name="amiibo_removed_message">The current amiibo has been removed</string>
<string name="amiibo_wrong_state">The current game is not looking for amiibo</string>
<string name="amiibo_not_valid">The selected file is not a valid amiibo</string>
<string name="amiibo_in_use">The selected file is already in use</string>
<string name="amiibo_unknown_error">An unknown error occurred</string>
<string name="amiibo_load_success">Amiibo loaded</string>
<!-- Software keyboard -->
<string name="software_keyboard">Software keyboard</string>
@@ -997,10 +1003,12 @@
<!-- Disk shader cache -->
<string name="building_shaders">Building shaders</string>
<!-- Theme options -->
<!-- App options -->
<string name="change_app_theme">Change app theme</string>
<string name="theme_default">Default</string>
<string name="theme_material_you">Material You</string>
<string name="app_settings">App Settings</string>
<string name="theme_and_color">Theme And Color</string>
<!-- Theme Modes -->
<string name="change_theme_mode">Change theme mode</string>
-5
View File
@@ -56,7 +56,6 @@ add_library(audio_core STATIC
out/audio_out.h
out/audio_out_system.cpp
out/audio_out_system.h
precompiled_headers.h
renderer/audio_device.cpp
renderer/audio_device.h
renderer/audio_renderer.h
@@ -266,8 +265,4 @@ if(ANDROID)
target_compile_definitions(audio_core PUBLIC HAVE_OBOE)
endif()
if (YUZU_USE_PRECOMPILED_HEADERS)
target_precompile_headers(audio_core PRIVATE precompiled_headers.h)
endif()
create_target_directory_groups(audio_core)
-6
View File
@@ -1,6 +0,0 @@
// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/common_precompiled_headers.h"
@@ -7,7 +7,8 @@
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
#include "audio_core/renderer/command/effect/biquad_filter.h"
#include "audio_core/renderer/voice/voice_state.h"
#include "common/bit_cast.h"
#include <numeric>
#include <bit>
namespace AudioCore::Renderer {
/**
@@ -30,8 +31,8 @@ void ApplyBiquadFilterFloat(std::span<s32> output, std::span<const s32> input,
Common::FixedPoint<50, 14>::from_base(b_[2]).to_double()};
std::array<f64, 2> a{Common::FixedPoint<50, 14>::from_base(a_[0]).to_double(),
Common::FixedPoint<50, 14>::from_base(a_[1]).to_double()};
std::array<f64, 4> s{Common::BitCast<f64>(state.s0), Common::BitCast<f64>(state.s1),
Common::BitCast<f64>(state.s2), Common::BitCast<f64>(state.s3)};
std::array<f64, 4> s{std::bit_cast<f64>(state.s0), std::bit_cast<f64>(state.s1),
std::bit_cast<f64>(state.s2), std::bit_cast<f64>(state.s3)};
for (u32 i = 0; i < sample_count; i++) {
f64 in_sample{static_cast<f64>(input[i])};
@@ -45,10 +46,10 @@ void ApplyBiquadFilterFloat(std::span<s32> output, std::span<const s32> input,
s[2] = sample;
}
state.s0 = Common::BitCast<s64>(s[0]);
state.s1 = Common::BitCast<s64>(s[1]);
state.s2 = Common::BitCast<s64>(s[2]);
state.s3 = Common::BitCast<s64>(s[3]);
state.s0 = std::bit_cast<s64>(s[0]);
state.s1 = std::bit_cast<s64>(s[1]);
state.s2 = std::bit_cast<s64>(s[2]);
state.s3 = std::bit_cast<s64>(s[3]);
}
/**
@@ -63,8 +64,8 @@ void ApplyBiquadFilterFloat2(std::span<s32> output, std::span<const s32> input,
std::array<f64, 3> b_double{static_cast<f64>(b[0]), static_cast<f64>(b[1]),
static_cast<f64>(b[2])};
std::array<f64, 2> a_double{static_cast<f64>(a[0]), static_cast<f64>(a[1])};
std::array<f64, 4> s{Common::BitCast<f64>(state.s0), Common::BitCast<f64>(state.s1),
Common::BitCast<f64>(state.s2), Common::BitCast<f64>(state.s3)};
std::array<f64, 4> s{std::bit_cast<f64>(state.s0), std::bit_cast<f64>(state.s1),
std::bit_cast<f64>(state.s2), std::bit_cast<f64>(state.s3)};
for (u32 i = 0; i < sample_count; i++) {
f64 in_sample{static_cast<f64>(input[i])};
@@ -79,10 +80,10 @@ void ApplyBiquadFilterFloat2(std::span<s32> output, std::span<const s32> input,
s[2] = sample;
}
state.s0 = Common::BitCast<s64>(s[0]);
state.s1 = Common::BitCast<s64>(s[1]);
state.s2 = Common::BitCast<s64>(s[2]);
state.s3 = Common::BitCast<s64>(s[3]);
state.s0 = std::bit_cast<s64>(s[0]);
state.s1 = std::bit_cast<s64>(s[1]);
state.s2 = std::bit_cast<s64>(s[2]);
state.s3 = std::bit_cast<s64>(s[3]);
}
/**
+67 -116
View File
@@ -22,110 +22,61 @@
namespace AudioCore::Sink {
void SinkStream::AppendBuffer(SinkBuffer& buffer, std::span<s16> samples) {
SCOPE_EXIT {
queue.EmplaceWait(buffer);
++queued_buffers;
};
if (type == StreamType::In) {
if (type == StreamType::In)
return;
}
constexpr s32 min{(std::numeric_limits<s16>::min)()};
constexpr s32 max{(std::numeric_limits<s16>::max)()};
auto yuzu_volume{Settings::Volume()};
if (yuzu_volume > 1.0f) {
yuzu_volume = 0.6f + 20 * std::log10(yuzu_volume);
}
auto volume{system_volume * device_volume * yuzu_volume};
if (system_channels == 6 && device_channels == 2) {
constexpr s32 min = (std::numeric_limits<s16>::min)();
constexpr s32 max = (std::numeric_limits<s16>::max)();
auto yuzu_volume = Settings::Volume();
if (yuzu_volume > 1.0f)
yuzu_volume = 0.6f + 20.0f * std::log10(yuzu_volume);
auto const volume = system_volume * device_volume * yuzu_volume;
if (system_channels > device_channels) {
// "Topological" coefficients, basically makes back sounds be less noisy :)
// Front = 1.0; Center = 0.596; LFE = 0.354; Back = 0.707
static constexpr std::array<f32, 4> tcoeff{1.0f, 0.596f, 0.354f, 0.707f};
// We're given 6 channels, but our device only outputs 2, so downmix.
// Front = 1.0
// Center = 0.596
// LFE = 0.354
// Back = 0.707
static constexpr std::array<f32, 4> down_mix_coeff{1.0f, 0.596f, 0.354f, 0.707f};
for (u32 read_index = 0, write_index = 0; read_index < samples.size();
read_index += system_channels, write_index += device_channels) {
const auto fl =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::FrontLeft)]);
const auto fr =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::FrontRight)]);
const auto c =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::Center)]);
const auto lfe =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::LFE)]);
const auto bl =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::BackLeft)]);
const auto br =
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::BackRight)]);
const auto left_sample{
static_cast<s32>((fl * down_mix_coeff[0] + c * down_mix_coeff[1] +
lfe * down_mix_coeff[2] + bl * down_mix_coeff[3]) *
volume)};
const auto right_sample{
static_cast<s32>((fr * down_mix_coeff[0] + c * down_mix_coeff[1] +
lfe * down_mix_coeff[2] + br * down_mix_coeff[3]) *
volume)};
samples[write_index + static_cast<u32>(Channels::FrontLeft)] =
static_cast<s16>(std::clamp(left_sample, min, max));
samples[write_index + static_cast<u32>(Channels::FrontRight)] =
static_cast<s16>(std::clamp(right_sample, min, max));
for (u32 r_offs = 0, w_offs = 0; r_offs < samples.size(); r_offs += system_channels, w_offs += device_channels) {
std::array<f32, 6> ccoeff{0.f};
for (u32 i = 0; i < system_channels; ++i)
ccoeff[i] = f32(samples[r_offs + i]);
std::array<f32, 6> rcoeff{
ccoeff[u32(Channels::FrontLeft)],
ccoeff[u32(Channels::BackLeft)],
ccoeff[u32(Channels::Center)],
ccoeff[u32(Channels::LFE)],
ccoeff[u32(Channels::BackRight)],
ccoeff[u32(Channels::FrontRight)],
};
std::array<f32, 6> scoeff{
rcoeff[0] * tcoeff[0] + rcoeff[2] * tcoeff[1] + rcoeff[3] * tcoeff[2] + rcoeff[1] * tcoeff[3],
rcoeff[5] * tcoeff[0] + rcoeff[2] * tcoeff[1] + rcoeff[3] * tcoeff[2] + rcoeff[4] * tcoeff[3],
rcoeff[4] * tcoeff[0] + rcoeff[3] * tcoeff[1] + rcoeff[2] * tcoeff[2] + rcoeff[2] * tcoeff[3],
rcoeff[3] * tcoeff[0] + rcoeff[3] * tcoeff[1] + rcoeff[2] * tcoeff[2] + rcoeff[3] * tcoeff[3],
rcoeff[2] * tcoeff[0] + rcoeff[4] * tcoeff[1] + rcoeff[1] * tcoeff[2] + rcoeff[0] * tcoeff[3],
rcoeff[1] * tcoeff[0] + rcoeff[4] * tcoeff[1] + rcoeff[1] * tcoeff[2] + rcoeff[5] * tcoeff[3]
};
for (u32 i = 0; i < system_channels; ++i)
samples[w_offs + i] = s16(std::clamp(s32(scoeff[i] * volume), min, max));
}
samples_buffer.Push(samples.subspan(0, samples.size() / system_channels * device_channels));
return;
}
if (system_channels == 2 && device_channels == 6) {
} else if (system_channels < device_channels) {
// We need moar samples! Not all games will provide 6 channel audio.
// TODO: Implement some upmixing here. Currently just passthrough, with other
// channels left as silence.
std::vector<s16> new_samples(samples.size() / system_channels * device_channels);
for (u32 read_index = 0, write_index = 0; read_index < samples.size();
read_index += system_channels, write_index += device_channels) {
const auto left_sample{static_cast<s16>(std::clamp(
static_cast<s32>(
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::FrontLeft)]) *
volume),
min, max))};
new_samples[write_index + static_cast<u32>(Channels::FrontLeft)] = left_sample;
const auto right_sample{static_cast<s16>(std::clamp(
static_cast<s32>(
static_cast<f32>(samples[read_index + static_cast<u32>(Channels::FrontRight)]) *
volume),
min, max))};
new_samples[write_index + static_cast<u32>(Channels::FrontRight)] = right_sample;
}
for (u32 r_offs = 0, w_offs = 0; r_offs < samples.size(); r_offs += system_channels, w_offs += device_channels)
for (u32 channel = 0; channel < system_channels; ++channel)
new_samples[w_offs + channel] = s16(std::clamp(s32(f32(samples[r_offs + channel]) * volume), min, max));
samples_buffer.Push(new_samples);
return;
} else {
for (u32 i = 0; i < samples.size() && volume != 1.0f; ++i)
samples[i] = s16(std::clamp(s32(f32(samples[i]) * volume), min, max));
samples_buffer.Push(samples);
}
if (volume != 1.0f) {
for (u32 i = 0; i < samples.size(); ++i) {
samples[i] = static_cast<s16>(
std::clamp(static_cast<s32>(static_cast<f32>(samples[i]) * volume), min, max));
}
}
samples_buffer.Push(samples);
queue.EmplaceWait(buffer);
++queued_buffers;
}
std::vector<s16> SinkStream::ReleaseBuffer(u64 num_samples) {
constexpr s32 min = (std::numeric_limits<s16>::min)();
constexpr s32 max = (std::numeric_limits<s16>::max)();
auto samples{samples_buffer.Pop(num_samples)};
// TODO: Up-mix to 6 channels if the game expects it.
@@ -133,23 +84,22 @@ std::vector<s16> SinkStream::ReleaseBuffer(u64 num_samples) {
// Incoming mic volume seems to always be very quiet, so multiply by an additional 8 here.
// TODO: Play with this and find something that works better.
constexpr s32 min = (std::numeric_limits<s16>::min)();
constexpr s32 max = (std::numeric_limits<s16>::max)();
auto volume{system_volume * device_volume * 8};
for (u32 i = 0; i < samples.size(); i++) {
samples[i] = static_cast<s16>(
std::clamp(static_cast<s32>(static_cast<f32>(samples[i]) * volume), min, max));
}
for (u32 i = 0; i < samples.size(); i++)
samples[i] = s16(std::clamp(s32(f32(samples[i]) * volume), min, max));
if (samples.size() < num_samples) {
if (samples.size() < num_samples)
samples.resize(num_samples, 0);
}
return samples;
}
void SinkStream::ClearQueue() {
samples_buffer.Pop();
SinkBuffer tmp;
while (queue.TryPop(tmp)) {
}
while (queue.TryPop(tmp))
;
queued_buffers = 0;
playing_buffer = {};
playing_buffer.consumed = true;
@@ -163,9 +113,8 @@ void SinkStream::ProcessAudioIn(std::span<const s16> input_buffer, std::size_t n
// If we're paused or going to shut down, we don't want to consume buffers as coretiming is
// paused and we'll desync, so just return.
if (system.IsPaused() || system.IsShuttingDown()) {
if (system.IsPaused() || system.IsShuttingDown())
return;
}
while (frames_written < num_frames) {
// If the playing buffer has been consumed or has no frames, we need a new one
@@ -195,9 +144,8 @@ void SinkStream::ProcessAudioIn(std::span<const s16> input_buffer, std::size_t n
// If that's all the frames in the current buffer, add its samples and mark it as
// consumed
if (playing_buffer.frames_played >= playing_buffer.frames) {
if (playing_buffer.frames_played >= playing_buffer.frames)
playing_buffer.consumed = true;
}
}
std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes);
@@ -222,9 +170,8 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz
}
static constexpr std::array<s16, 6> silence{};
for (size_t i = frames_written; i < num_frames; i++) {
for (size_t i = frames_written; i < num_frames; i++)
std::memcpy(&output_buffer[i * frame_size], &silence[0], frame_size_bytes);
}
return;
}
@@ -234,17 +181,16 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz
if (!queue.TryPop(playing_buffer)) {
// If no buffer was available we've underrun, fill the remaining buffer with
// the last written frame and continue.
for (size_t i = frames_written; i < num_frames; i++) {
for (size_t i = frames_written; i < num_frames; i++)
std::memcpy(&output_buffer[i * frame_size], &last_frame[0], frame_size_bytes);
}
frames_written = num_frames;
continue;
}
// Successfully dequeued a new buffer.
queued_buffers--;
{ std::unique_lock lk{release_mutex}; }
{
std::unique_lock lk{release_mutex};
queued_buffers--;
}
release_cv.notify_one();
}
@@ -291,10 +237,15 @@ u64 SinkStream::GetExpectedPlayedSampleCount() {
void SinkStream::WaitFreeSpace(std::stop_token stop_token) {
std::unique_lock lk{release_mutex};
release_cv.wait_for(lk, std::chrono::milliseconds(5),
[this]() { return paused || queued_buffers < max_queue_size; });
if (queued_buffers > max_queue_size + 3) {
release_cv.wait(lk, stop_token, [this] { return paused || queued_buffers < max_queue_size; });
const auto has_space = [this]() {
const u32 current_size = queued_buffers.load(std::memory_order_relaxed);
return paused || max_queue_size == 0 || current_size < max_queue_size;
};
if (!has_space()) {
// Wait until the queue falls below the configured limit or the stream is paused/stopped.
release_cv.wait(lk, stop_token, has_space);
}
}
+2 -7
View File
@@ -30,14 +30,12 @@ add_library(
assert.h
atomic_helpers.h
atomic_ops.h
bit_cast.h
bit_field.h
bit_util.h
bounded_threadsafe_queue.h
cityhash.cpp
cityhash.h
common_funcs.h
common_precompiled_headers.h
common_types.h
concepts.h
container_hash.h
@@ -103,7 +101,6 @@ add_library(
param_package.h
parent_of_member.h
point.h
precompiled_headers.h
quaternion.h
range_map.h
range_mutex.h
@@ -156,6 +153,8 @@ add_library(
wall_clock.h
zstd_compression.cpp
zstd_compression.h
fs/ryujinx_compat.h fs/ryujinx_compat.cpp
fs/symlink.h fs/symlink.cpp
)
if(WIN32)
@@ -271,8 +270,4 @@ if(ANDROID)
target_link_libraries(common PRIVATE android)
endif()
if(YUZU_USE_PRECOMPILED_HEADERS)
target_precompile_headers(common PRIVATE precompiled_headers.h)
endif()
create_target_directory_groups(common)
-23
View File
@@ -1,23 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <version>
#ifdef __cpp_lib_bit_cast
#include <bit>
#endif
namespace Common {
template <typename To, typename From>
constexpr inline To BitCast(const From& from) {
#ifdef __cpp_lib_bit_cast
return std::bit_cast<To>(from);
#else
return __builtin_bit_cast(To, from);
#endif
}
} // namespace Common
-14
View File
@@ -1,14 +0,0 @@
// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <algorithm>
#include <array>
#include <chrono>
#include <memory>
#include <fmt/ranges.h>
#include "common/assert.h"
#include "common/common_types.h"

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