Present an error message when failing to open a file that should exist. This could happen with savestate loads, permission issues, or use by other processes. Prior to this Dolphin assumed any existing file could be opened and crashes from invalid variant access. Failing to open a file during savestate load will likely still crash but at least the user will know why.

Fix more segfaults on NetPlay quit Basically everything here was race conditions in Qt callbacks, so I changed the client/server instances to std::shared_ptr and added null checks. It checks that the object exists in the callback, and the shared_ptr ensures it doesn't get destroyed until we're done with it.

Input - Make dynamic rules be definable per game. Configuration can now define how many frames constitute a high or a low swing/shake when the button is down. Also configurable is the number of frames to execute the swing/shake after the button is released.

NetPlay: Don't update mappings on leave if player had no mappings This stops clients randomly deadlocking when a spectator leaves, as the mappings construct is not thread-safe and should not be written while the game is running.

NetPlay: Send timebase packet less frequently This packet is only used by the host to detect desyncs, and we don't really need to know the exact frame we desynced on (unless you're debugging, but you can just recompile for that), so it's perfectly fine to just send it less often. This makes it so the timebase packet is sent only every 60 frames, rather than every frame, which further cuts back on unnecessary bandwidth consumption.

Qt: Unparent NetPlay dialog from main window This should make the NetPlay dialog appear as a separate window in the taskbar on most systems, which makes more sense than a parented dialog as the user will leave it open for an extended period.

Add "Reduce Polling Rate" option to NetPlay Normally, SI is polled at a rate defined by the game, and we have to send the pad state to other clients on every poll or else we'll desync. This can result in fairly high bandwidth usage, especially with multiple controllers, mostly due to UDP/IP overhead.

Make arbitrary mipmap detection toggle invalidate the texture cache We want this setting to invalidate the cache because it may affect the appearance of textures in the rendered scene, therefore one would expect changing it while the game is running to have the expected effect immediately.

Force arbitrary mipmap detection for some games known to use it This will avoid effects being unexpectedly broken in these games if the user disables the option globally. This list is by no means comprehensive, these are just the games I could confirm use custom mipmaps.

Qt/GameCubePane: Fix issues with changing memcard slots while game is running Selecting Dummy or Memory Card would pass wrong values to EXI::ChangeDevice and not work as expected Changing path had no effect until device was changed as it didn't call EXI::ChangeDevice at all