Skip to content

Cemu 2.1

Compare
Choose a tag to compare
@github-actions github-actions released this 26 Aug 19:07
· 26 commits to main since this release
1234e2c

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 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_

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