Cemu v2.1 is released. Cemu is a Nintendo Wii U emulator that runs commercial games. Highly experimental software to emulate Wii U applications on PC. It’s written in C/C++ and is being actively developed with new features and fixes to increase compatibility, convenience and usability.
Cemu 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 and Open 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 when VK_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 and proc_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 and nn_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 and OSConsoleWrite 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 in nsysnet.getsockopt
Added support for SO_BIO and SO_ENOTCONN in nsysnet
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_