Cemu 2.1
This is the major release of Cemu 2.1 with a cumulative changelog which includes the changes from all 93 experimental releases since Cemu 2.0.
For users that were already using our experimental updates (2.0-x), you can think of this release as the final experimental update. There are no noteworthy additional changes compared to Cemu 2.0-95 other than the new version number.
Starting with this release, Cemu will now only have a single release channel. Instead of experimental releases, there is a new option to control whether Cemu will update immediately to cutting-edge releases, which may contain uncaught bugs, or update with a slight delay. More details on this can be found here
Changelog
Major new additions:
- Added appimage and flatpak releases for Linux
- Added an experimental release for macOS. Available for x86-64 only for now but it can be run on ARM macs through Rosetta 2 emulation. MoltenVK is used as the graphics backend
- Added a tool to emulate the USB portals for Skylanders and Disney Infinity
- Added NFC/NTAG support. Pokemon Rumble U figures can now be scanned from a file similar to the existing Amiibo scanning
- Added support for titles stored in
.wuhb
(Wii U homebrew) and.app
(NUS) format - Added support for connecting to Pretendo network services
- Cemu on Windows is now non-portable by default for new installations only. All data and config files will be stored in
%appdata%/Cemu
. This makes the Windows installation match other platforms. Existing installations will not be affected - Added portable mode by placing a directory named
portable
next to the Cemu executable. Cemu will then store data and config files in this folder. This works on all platforms
General:
- Added
Disable screen saver
setting - Added
--title-id
command line parameter to launch games by title id - Added desktop shortcut creation to game list
- Added experimental GamePad microphone support
- Improved unicode character support across the board, including the names and descriptions of graphic packs
- Cemu will no longer refuse to start when the MLC path is invalid
- Fixed several GamePad window size issues
- Fixed a regression causing an infinite loop in the renderer. This would previously cause Tokyo Mirage Sessions and PokkΓ©n Tournament to freeze on boot
- Fixed a regression causing some games to crash without dumped Mii system files. Known affected games were Sonic Lost World and Super Mario 3D World
- Initial support for title switching
- Improved compatibility with the Wii U menu which can now run and launch games
- Games with launchers, like RyΕ« ga Gotoku 1 & 2 HD and Steamworld Collection, are now playable
- This feature is still experimental. Once it's stable, the option to quit games without closing Cemu will be added
- Fixed a crash that could occur when the Title Manager tried to display system data titles
- Fullscreen mode can now also be toggled with F11
- The GamePad view will now display the game-specific bootup screen
- Discord rich presence will use the translated title name that matches the console language, instead of defaulting to English
- Fixed an issue where error dialogs in a game (erreula) can't be interacted with if the GamePad window is open
- Updated default game profiles
- Decreased the latency of the H264 decoder by decoding frames asynchronously
Windows:
- Re-enabled DPI awareness
- Fixed a crash that would occur when no audio devices are available
Linux:
- Added wayland support
- Added support for storing MLC and game files on case-sensitive filesystems
- Added an option to enable GameMode
- Brought online features on a par with Windows builds
- Enabled DSU controller support
- Emulated games can now access HID devices from the host via libusb (e.g. Skylanders portal)
- Many changes to improve robustness of the Linux build
- Added debug option to create core dumps on crash
- Improved diagnostics logging in case of crashes or other exceptions. Cemu is now also shipped with symbols so that stack traces show function names
- The CPU and memory statistics in the overlay now work on Linux
- The background colors of the Game List now match the brightness of the window theme instead of always using bright colors
- Fixed an issue where closing the GamePad window would freeze Cemu
- Fixed a bug where the GamePad window would not render anything with OpenGL
- Fixed an issue where some UI dialogs would cause Cemu to crash after closing them
- Fixed many smaller UI issues specific to WxWidget's wxGTK backend
UI:
- Added
Receive untested updates
option to general settings. More info here - Added
Open Cemu folder
andOpen MLC folder
options to the File menu - Added new options when right-clicking a game inside the Game List
- Copy the title ID, name or icon of a game
- Delete the shader cache of a game
- Added a location column to the Title Manager
- Separated icons in the Game List into their own hideable column
- Fixed empty title names in Title Manager if the console language is set to something other than English
- Fixed an issue where custom game names would not show in the Game List when it was set to icon mode
- Fixed an issue where an extra "c" entry would show up in the save import/export dropdown in the Title Manager
- Fixed an incorrect error message that could occur while installing games due to a mistake in the calculation of free disk space
- The font size of overlay text will now scale according to the display's DPI
- Fixed a crash that would occur when clicking on the Format column header in the Title Manager
- Use the long title names in the Game List instead of the short name. This was changed due to some games which have cut-off short names
- UI elements for options that cannot be changed at runtime are now grayed out when a game is running
- Simplified the
Getting Started
dialog - Various smaller tweaks and restructuring of the UI to make Cemu more user-friendly
CPU:
- Improved emulation of PowerPC overflow condition. Improves compatibility with some Unity and DS Virtual Console games
GPU core (Latte):
- Added support for more shader instructions, some of which are necessary for homebrew shaders compiled with CafeGLSL
- Optimized output of the shader decompiler which slightly reduces shader compilation times
- Removed shaderMulAccuracy
min
option since it has no measurable benefits over the other options - Use better hashing for the buffer cache to avoid hash collisions. Fixes a bug in BotW where the weapon trail effect would sometimes render in a solid red color for a single frame
- Added support for a missing vertex format used by Rabbids Land
- Corrected calculation of
FragCoord.w
. Fixes rendering issues in DS Virtual Console games - Fixed several issues where the shader decompiler could generate broken GLSL. Fixes rainbow colors on characters in Tekken Tag Tournament 2
- Various smaller optimizations
OpenGL:
- Removed
-legacy
command line parameter which has been non-functional for a long time. Originally this would disable some features to fix crashes on pre-2015 Intel GPU drivers - Cemu should no longer crash if OpenGL fails to initialize
- Fixed a regression where Cemu's precompiled shader cache for OpenGL wasn't actually used
- Lowered latency of texture readback. This fixes severe FPS drops in BotW whenever something is lit on fire
Vulkan:
- The option
Async shader compile
is now enabled by default - Multi-threaded pipeline compilation during the shader cache loading screen is now again enabled on Nvidia drivers which results in much faster pipeline loading
- Fixed incorrect decoding of
R4G4
texture format whenVK_FORMAT_R4G4_UNORM_PACK8
is not supported. Fixes invisible rupee counter in Twilight Princess HD - Several changes to make Cemu align more with the Vulkan specification
- Avoid a crash if validation layer is enabled but not installed
- Improve floating point emulation accuracy in shaders when
VK_KHR_SHADER_FLOAT_CONTROLS
extension is available. This fixes mobs in Minecraft having misplaced limbs - Added support for
R32_X8_FLOAT
color texture format - Allow
RGBA16F
texture format with SRGB bit. Fixes a crash in Sonic Transformed - Fixed stencil front mask using the value of the back mask
- Enhanced synchronization of draw calls involving textures that are read from and written to simultaneously. Resolves an issue with broken heightmaps in BotW on the Mesa RADV driver
- Resolved a crash that occurred when the pipeline cache failed to open due to corruption or other issues
Online Functionality:
- Fixed online connectivity for accounts in North America region after Wii U system update 5.5.6
- Added option to switch between Nintendo, Pretendo or custom server URLs
- Online mode and server selection can be set per-account instead of only globally
- The Download Manager will always connect to Nintendo servers even if the current account is set to Pretendo or custom servers. This avoids the hassle of having to switch server settings temporarily to use the Download Manager
- Fixed SpotPass downloads not working at all on Linux/MacOS and generally improved robustness of SpotPass downloads
- Correctly set the current app in the friend status so it doesn't show up as "???" to other friends anymore
- Added rudimentary proxy support (can currently only be configured by editing settings.xml)
Input:
- Added a pairing utility for Wiimotes
- Added Wiimote support for Linux and MacOS
- Fixed a crash on Cemu startup caused by DSU initialization that would occur when not connected to any network
- Added support for analog triggers for DSU API controllers
- Fixed incorrect CRC calculation in DSU protocol
- Fixed an issue where the UI would allow to configure more controllers of a particular type than technically supported
- Always refresh the input settings UI when a different controller profile is selected
- Loading a controller profile in the input settings, then changing the name and saving it again correctly creates new profile under the new name now
- Simulate the behavior of the Wii U input driver returning no input data when queried too quickly. Fixes extra controllers not being detected in Affordable Space Adventures
- Increased frequency of WPAD/KPAD sampling callbacks. This fixes the high latency of controllers in PokΓ©mon Rumble U
Audio:
- Added a default device to the Cubeb device selection
Localization:
- More parts of Cemu are now translatable
- While some languages have been updated with new translations, most translations remain incomplete. We are looking into streamlining the translation process in the future
Graphic packs and patches:
- The feature to change the pixel format of a texture (
overwriteFormat
in rules.txt) is now working correctly on Vulkan - Fixed an issue in the parser for assembly patches where commas inside strings would be treated as a delimiter
- Games will now see new files added via graphic packs. Previously when a game iterated a directory, it would only see files matching the names of the original game files and not any of the new files added by graphic packs
Debugging:
- Added GDB stub for attaching external debuggers
- Added a simplistic PPC profiler to the PPC Threads view
- Fixed register window not updating in PPC debugger on Linux/MacOS
- Added logging breakpoints
- Added support for memory read/write breakpoints on Linux
- PPC stack traces in log.txt will display function names if they are available
- Added
Invalid API usage
log type. This log type is aimed at homebrew developers and will inform about misuse of certain API functions - Assigned a name to all of Cemu's threads. The main thread is now called
cemu
- Added a window to view logging output in realtime (Debug -> Open logging window)
- Various smaller fixes for the PPC debugger
Technical CafeOS and HLE improvements:
- Fixed a bug in
nn_save
that would prevent a title from accessing the saves of other titles. This is often for bonus content like Captain Toad Treasure Tracker or demo versions of games - Fixed an out-of-bounds memory access in sndcore
- Reworked coreinit API related to thread creation (
OSCreateThread
,OSCreateThreadType
) - Added HLE implementions for
nfc.rpl
,ntag.rpl
andproc_ui.rpl
- Implemented coreinit FSA API which is used by homebrew compiled with WUT 1.3.0 or newer
- Reworked nsyshid to support different backends (currently the backends are: libusb, Windows HID API and emulated portals)
- Stubbed drmapp
PatchChkIsFinished
,AocChkIsFinished
,TicketChkIsFinished
andnn_sl.GetDefaultWhiteListAccessor
to avoid errors and crashes on the Wii U menu - Stubbed
sysapp.SYSSwitchToEManual
to avoid softlocks when accidentally opening the manual in any game - Fixed a regression where most
OSAtomic
functions would return the wrong value - Fixed issues where Mii names where handled with the wrong endianness leading to names being displayed as garbled text in some games
OSReport
andOSConsoleWrite
are now thread-safe and calling them in parallel will not cause log corruption or crashes- Various improvements to coreinit OSDynLoad API
- Reworked coreinit memory mapping API (
OSAllocVirtAddr
,OSMapMemory
, etc.) - Tweaked coreinit thread scheduler to avoid a deadlock in Just Dance 2019
- Fixed an issue where emulated PowerPC threads would sometimes immediately end their allotted timeslice
- Added support for parent directory references ("..") in FS/FSA file paths
- Fixed an issue where the FS/FSA working directory would be ignored for some filesystem operations
- Implemented more parts of
nn_olv
. Mario Kart 8 tournaments and ranking uploads are now functional - Fully reworked nn_fp (Friend service) implementation
- Implemented PPC va_list and va_arg. Additionally reworked functions that rely on these
- Fixed UTC offset calculation in
GetUtcOffset
/GetUtcOffsetEx
- Correctly handle permissions for
FSGetMountSource
. This fixes One Piece: Unlimited World Red freezing on boot - Started work on a new modularized approach of handling HLE modules. This will eventually simplify title switching and is a prerequisite for multi-process emulation
- Improved accuracy of
OSSwitchCoroutine
. Fixes a crash in Injustice: Gods Among Us during boot - Implemented minimal code for
KBDGetKey
. Fixes MSX Virtual Console games freezing on boot - Correctly treat the target in
GX2CopyColorBufferToScanBuffer
as a bitmask and not an id - Avoid a crash in
nsysnet.recvfrom
when the peer address is null - Added support for
SO_TYPE
innsysnet.getsockopt
- Added support for
SO_BIO
andSO_ENOTCONN
innsysnet
- Correctly set wiimote position visibility state in
KPADRead
. This fixes the wiimote cursor being invisible in Little Inferno - Fixed a crash that would happen when
KPADGetUnifiedWpadStatus
was called while input logging is enabled - Improved handling of APIs that should fail gracefully in offline mode (e.g.,
nn_act.AcquireNexToken
) - Implemented additional CafeOS API:
- coreinit:
OSIsDebuggerPresent
,OSGetForegroundBucketFreeArea
,OSGetSystemTick
,MCP_GetTitleId
- nsysnet:
inet_ntop
- nn_act:
GetTransferableId
- nn_acp:
ACPGetTitleMetaXml
,ACPGetOlvAccesskey
- zlib125:
deflateInit_
- coreinit:
Disclaimer: The specific games mentioned in this changelog are notable examples that have known improvements, but the list is not all-inclusive. Other games likely benefit from these changes too but might not have been caught during testing. By nature all changes are game-independent
Credits
This release was brought to you in large parts by:
@capitalistspz, @ColinKinloch, @Crementif, @deReeperJosh, @emiyl, @Exzap, @Fs00, @GaryOderNichts, @goeiecool9999, @lijunyu-cn, @m-chojnacki, @Maschell, @MythicalPlayz, @qurious-pixel, @ssievert42, @SSimco, @Tachi107
With additional contributions by:
@20943204920434, @abouvier, @ActualMandM, @AGraber, @amppz, @ArtemisX64, @bitscher, @blueskythlikesclouds, @chrispurnell, @dougthor42, @ElijahPepe, @EpicUsername12, @exverge-0, @FearlessTobi, @german77, @greybaron, @gurrgur, @iamqk, @IntriguingTiles, @JakobDev, @jcrm1, @jn64, @jonbarrow, @krystian-booker, @lisa-wolfgang, @niko1point0, @OatmealDome, @rawdatafeel, @RivanParmar, @rluxv, @SamoZ256, @schspa, @Shoegzer, @splatoon1enjoyer, @Squall-Leonhart, @squelchiee, @tastymeatball, @Tillsunset, @UltraHDR, @why-keith, @yeah-its-gloria, @Zopolis4
Translations by:
@cakama3a, @Deci8BelioS, @FRtranslator, @Fs00, @Genglxy, @Hackjjang, @iliya8801, @liddack, @Linx-ESP, @Milihraim, @MMatiasMG, @MoonlightWave-12, @palody, @smileyhead, @wcxu21, @webserfer