Releases: mkdasher/mupen64-rr-lua-
1.1.9-7
Summary
This release contains some changes to the hotkey and plugin configuration UX, along with a fix for movies with an invalid sample length in the header crashing the emulator.
Features
- ConfigDialog: Hotkey conflict handling
- ConfigDialog: Plugin discovery debug delay option
Bugfixes
- ConfigDialog: Plugin buttons not being disabled when they should be
- ConfigDialog: Plugin discovery details button not being disabled during discovery
- ConfigDialog: Plugin discovery result not being reset on refresh
- Statusbar: Corrupted text on x64
- VCR: Crash when movie header provides invalid sample length
1.1.9-6
Summary
Warning
This release contains one or more important fixes.
This release fixes various race conditions.
Bugfixes
- Core: Deadlock in work queue cleanup
- Core: Race condition in generate_savestate() when calling VCR::freeze()
- Core: Race condition in work push check
- Core: Race condition in work queue processing
- Main: Buffer overrun in get_app_full_path()
- VCR: Race condition in freeze() and unfreeze()
- VCR: Race condition in seek savestate clearing
1.1.9-5
Summary
This release contains a fix for a minor bug related to savestate slots.
Bugfixes
- Core: Current slot not being set when performing slot-based save or load
1.1.9-4
Summary
This release contains a patch for memory-related issues during capture, as well as UX improvements and some bugfixes.
Features
- Build: Allow 4GB of memory usage
- ConfigDialog: Plugin discovery details
- Main: Add plugin autoselect option to plugin load error dialog
Bugfixes
- ConfigDialog: Plugins not rescanning when changing default plugins directory checkbox
- ConfigDialog: Remove rombrowser directory button not working
- Main: Plugin tab not being selected when the settings dialog is opened by the plugin error dialog
1.1.9-3
Summary
This release contains various bugfixes and capture-related improvements, along with QoL improvements.
Features
- CLI: Keep fast-forward forced on when capture parameter is specified
- CLI: Warn about conflicting behaviour when -m64 and -st options are both specified
- ConfigDialog: Add async plugin discovery
- ConfigDialog: Remember selected settings tab
- ConfigDialog: Rescan plugins after changing plugin directory
- Core/ST: Undo savestate load
- FFmpegEncoder: Respect sync mode option
- PianoRoll: Add keep playhead visible option
- Statusbar: Add layout presets
- View: Show broken plugin count in config dialog plugin page
Changes
- EncodingManager: Capture on emu thread
- Main: Simplify warping status text
- Seeker: Show status message when seek completes
- Seeker: Show warning when seek savestates are disabled
- View: Improve RAM start dialog
Bugfixes
- AVIEncoder: Double-free in stop()
- CLI: Disable and warn about movie loop when close on movie end is specified
- CLI: Fix capture not starting when playing back from-start movies
- CLI: Race condition in movie playback start
- ConfigDialog: Crash when applying editbox content
- ConfigDialog: Crash when too option item string is too long
- ConfigDialog: Fix directory options not being saved when textboxes are edited manually
- ConfigDialog: Fix plugin discovery loading text not disappearing when no broken plugins are reported
- ConfigDialog: Handle arbitrary text lengths in inline editbox
- ConfigDialog: Inline editboxes being too wide
- Core/ST: Fix slot being incremented on save operations when increment slot is enabled
- EncodingManager: Fix crash when audio frequency changes during capture
- EncodingManager: Incorrect video dimensions being used to readscreen_hybrid when no MGE implementation is available
- FFmpegEncoder: Audio drift during lag
- FFmpegEncoder: Mangled path being read
- FFmpegEncoder: Wrong divisor in sample length calculation
- IOHelpers: Fix infinite recursion
- Lua/Emu: getversion(1) cutting off first number in version
- Lua: Fix corrupted console output
- MGECompositor: Fix load_screen data becoming outdated when copying and loading in quick succession
- Main: Main window having no closing animation
- MovieDialog: Fix listview column header text corruption
- PianoRoll: Fix string corruption
- PianoRoll: Potential crash when ListView entries are too long
- PianoRoll: Use more consistent wording when mentioning seek savestates
- Rombrowser: Potential crash when ListView entries are too long
- Seeker: Fix seeker start button text getting stuck on "Stop" when begin_seek broadcasts early
- Statusbar: Avoid showing negative indicies when zero-index is enabled
- StlExtensions: Fix wrong allocation size in string_to_wstring
- VCR: Don't show savestate warnings for internal savestate API calls
- VCR: Fix incorrect wording in savestate fail dialog
- View: Attempt to improve stability of recent menus
- View: Don't "adjust" VIs when zero-index is enabled
1.1.9-2
Summary
Caution
This release contains one or more critical fixes.
This release features a critical fix for a savestate-related regression on the Pure Interpreter, along with bugfixes, QoL improvements, and some new stuff.
Thank you to @nim-ka for the incredible feedback and the contributions!
New Stuff
Bugfixes
- View: Fix key messages generated during hotkey selection reaching dialog
- View: Fix movie path being set despite movie dialog being cancelled
- View: Fix incorrect handling of empty strings in IOService::get_files_with_extension_in_directory
- Core/ST: Fix missing SI interrupt in queue when savestating on pure interpreter
Other Changes
- View: Move seek settings into combined category for piano roll, clarify piano roll disabling
- View: Ask for confirmation before reseting all settings to default
- View: Show dialog and bail when trying to reset all settings to default
- View: Clean up rsrc.rc
- View: Clean up icon resources
- View: Allow cancelling hotkey change with RMB
- PianoRoll: Show status text when disabled due to seek savestate interval
- Core/ST: Require callbacks to be non-null
- Core/ST: Don't stop VCR when cancelling st load
- Core/ST: Improve savestate warning consistency
- Core: Unify result types
Full Changelog: 1.1.9...1.1.9-2
1.1.9
Summary
This release adds the long-awaited piano roll among other useful features and fixes various bugs.
As always, feel free to ask questions about anything in the Mupen64 Development Discord Server. Bug reports and commisioned features are greatly appreciated and help sustain the development.
Piano Roll
The piano roll is the latest major addition to Mupen64.
Its main functionality is viewing and modifying the inputs in a movie. In contrast to traditional frame-by-frame TASing, the piano roll opens up the possibility of modifying frames prior to the current one.
Ecosystem Updates
π’ SM64 Lua Redux 3.0.0 - Adds SM64-specialized Piano Roll!
π’ hacktarux-azimer-rsp-hle 0.3.0
π’ mupen64plus-rsp-hle 1.0.0 - New port of the mupen64plus RSP plugin, offers better performance in some situations
π’ better-gln64 1.3
Documentation
Mupen64 now has rudimentary user-facing documentation! π₯³
New Stuff
- Piano Roll
- New Seek (now allows savestate-based reverse and mid-recording seeking, including Lua API)
- Warp Modify (including Lua API)
- New Settings UI
- FFmpeg Capturing
- Extended M64 format
- Task-based savestate system
- In-memory savestate API
- Core benchmark and timing API
- Better Logging (crash.log will no longer be generated, all mupen logs which also contain more data are now in mupen.log)
- Added Lua GDI presenter (useful for systems without DirectComposition support)
- Reimplemented CoreDbg
- Implemented hybrid capture mode using legacy readScreen
- Add statusbar scale up/down restriction option
- Add stacktrace to crash log
Tip
The new Async Executor system can reduce interaction latency and improve performance. Try enabling it in the settings!
Bugfixes
- View: Fix input and audio plugin settings being swapped in menu
- View: Fix input and audio plugin settings being swapped in menu
- View: Fix broken font in lua input dialog
- View: Fix savestates with slot extension not being accepted during drag-and-drop
- View: Fix statusbar segments not scaling in all situations
- VCR: Fix movie not being flushed when unfreezing in read-only mode
- VCR: Show error dialogs in reset fail cases
- VCR: Fix last modified date changing when playing movies
- VCR: Fix statusbar VCR section not updating immediately after loading state
- VCR: Fail in start_record when invalid start type is provided
- VCR: Fix various issues related to movie flushing
- VCR: Fix recording starting when unfreezing in rw mode during playback start
- Config: Fix default last movie type being invalid
- Messenger: Fix concurrent subscriptions and broadcasts
- Lua: Fix crash when showing file dialog during atdrawd2d
- Lua: Fix lua scripts not receiving callbacks during initial global code execution
- Core: Tighten core_executing section
- Config: Fix load current hotkey being I instead of P
- Core Fix GameShark byte comparison instructions
Performance
- Lua/WGUI: Optimize color lookup
- Lua: Optimize class lookup
- Lua: Optimize callback invocation (~60% faster C to Lua calls)
- Core: Use pool for interrupt queue allocations
- Core: Optimize timer code
- Core: Improve savestate performance
- AsyncExecutor: Implement the async executor, a new method for scheduling asynchronous tasks which reduces latency and CPU load
- Messenger: Improve broadcasting performance by about 10x
- Encoding: Reduce video buffer allocations during encode
Other Changes
There has been a major architectural cleanup effort for 1.1.9 with the main changes being: decoupling program layers, fully decoupling the core from Windows, cleaning up the project directory structure, and organizing into layers (see readme).
- View: Show more information during capture
- VCR: Change movie backup names (now use a period as the separator)
- VCR: Improve error feedback
- Core: Improve savestate error feedback
Breaking Changes
The old Lua Seek API surface has been deprecated due to fundamental changes in the seek implementation.
Old | New |
---|---|
movie.begin_seek_to | movie.begin_seek |
movie.get_seek_info | movie.get_seek_completion |
emu.atseekcompleted |
Beta Testers
During this release's testing round, the following community members performed beta testing.
Thank you for the help, your time is greatly appreciated!
1.1.8-2
Summary
This release is a hotfix for 1.1.8 and fixes a critical bug which causes movie changes to not be written to disk in some situations.
The requirement for hardware AVX2 support has also been removed.
As always, feel free to ask questions about anything in the Mupen64 Development Discord Server. Bug reports and commisioned features are greatly appreciated and help sustain the development.
1.1.8
Summary
This release aims to add quality-of-life features, as well as some long-requested ones, while also fixing bugs and patching up mistakes from the previous versions.
As always, feel free to ask questions about anything in the Mupen64 Development Discord Server. Bug reports and commisioned features are greatly appreciated and help sustain the development.
Plugin Updates
The RSP plugin of choice, Hacktarux and Azimer's HLE RSP plugin, has been revived and received stability, performance, and usability improvements. It is now available as hacktarux-azimer-rsp-hle 0.2.1.
TASInput 1.1.1 has been released, with relative joystick support and various bugfixes.
The SM64 TASing script of choice, SM64 Lua Redux 2.0.1, has been updated with various minor quality-of-life fixes.
It's recommended to use MGE-enabled plugins, such as better-gln64, for instant savestate updates, improved performance, and enhanced encoding capabilities.
Hardware Support
Warning
If Mupen64 doesn't load at all, check if your processor supports AVX2. If it doesn't, use the mupen64-sse2
or mupen64-avx1
binary instead.
Lua Advisories
emu.atwindowmessage
now only sends WM_MOUSEWHEEL
messages as part of issue #190.
input.map_virtual_key_ex
has been deprecated.
Beta Testers
During this release's testing round, the following community members performed beta testing.
Thank you for the help, your time is greatly appreciated!
New Stuff
- Savestate Insta-Update (increases savestate size and load time, requires MGE, enable "Save video to savestates")
- GameShark cheat support
- Hybrid Encoder
- Runner
- Movie Backups
- Statistics about playtime and rerecords
- Silent mode (suppresses all dialogs)
- Better crash logs with more data, better formatting, and persistence
- CLI Backwards Compatibility
- Add various missing hotkeys (ST Save/Load As, Toggle Movie Loop, Load Latest Script, New Script, Close All Scripts)
- Crash detection lag threshold value has been exposed in the settings dialog
- Input statistics in movie dialog
- Enhanced seeker with status display and cancellation
- Settings item tooltips
- Window size restores when closing rom
- Menu item for showing debug console
- Config self-healing across updates
- Add author and description replacing to movie dialog
- Extend Lua API with VCR Seek
- Silent fast-forward option (improves fast-forward performance at the cost of accuracy)
- Separate section for notifications in statusbar
- Statusbar segment scaling
Bugfixes
- Fix Lua and file dialogs not working when certain plugins are not loaded
- Fix regression regarding graphics being clipped when off-screen
- Fix movie to rom matching producing incorrect results in edge cases
- Fix some audio plugins hanging on close
- Fix occasional wrong resizing on emu close causing black regions in window
- Fix encoding on MGE-implementing plugins freezing graphics
- Fix various menu-related state bugs
- Fix movie duration formatting edge case
- Fix garbage inputs being sent when vcr_on_controller_poll is skipped
- Fix rom not found dialog showing up in unexpected situations
- Fix unexpected pausing behaviour in emu lock sections
- Fix CoreDbg not closing via close button
- Fix early return causing lua controller data copy to go stale
- Fix image pool deletion sequence issue
- Fix author and description not being visible in playback dialog
- Fix CoreDbg instruction list order being incorrect
- Fix crash when closing scripts while minimized
- Fix unexpected behaviour when running via CLI
- Fix missing error dialog for encoding start
- Fix memory leak when starting capture
- Fix encoding start being delayed by one second
- Fix region not being included in save files
- Fix savestate slot checkmark not being shown initially
- Fix allowing extensionless movie paths in movie dialog
- Fix uncapped cache D2D text layout cache growth
- Fix menu plugin config items not working before rom is launched
Performance
- View-sourced invalidation
- Moved hotkey handling out of core message loop
- Plugins are recycled across core starts
- Roms are cached across core starts (specify rom_cache_size in config)
- Allocations have been reduced in the core timer
- Improved MemPak, SRAM, FlashRAM, and EEPROM r/w performance
- Improved Lua rendering performance
- Improved core performance when lua is running
- Enabled AVX2
Other Changes
- The VCR (re-)recording, and (un-)freezing systems have been rewritten
- The lua window titlebar consistency has been improved
- The speed limiter up/down step size has been made consistent
- Stop Movie Recording/Playback have been unified
- RAM Start is shown directly in messagebox
- Improved encoding settings UI
- Further decoupled core from Windows
- Improved movie rom detection
- Improved m64 savestate finding
- Updated to Lua 5.4.2
1.1.7
New Stuff
- Lua graphics can now be drawn over the game without flickering ("Lua Compositor")
- Playing a movie will now automatically load its related ROM
- Playing to an arbitrary frame during playback is now possible ("Seeker")
- Statusbar sections have been restructured to provide more helpful information
- Detection of generic crashes has been reimplemented and improved
- Suppressing dialogs has been added, which prevents hangs during automated encoding
- Dangerous actions (e.g.: mismatched st loading) now prompt the user and allow them to continue
- 0-index statusbar has been reimplemented
- Zipped ROM loading has been reimplemented
- State slot autoincrement has been reimplemented
- The Game Debugger has now displays temporal information ("CoreDbg")
- The movie playback and recording dialogs have been consolidated and redesigned
- Auto-pausing at the last frame of a movie has been added
- The config will now be automatically reset between versions
- Loading state is now displayed in the titlebar
- Loading a state created after the current movie's end is now allowed by default in read-write mode
- emu.getversion argument is now optional
- Add comments to help generate lua documentation
Bugfixes
- The last hotkey should no longer be omitted from the hotkey list
- The broken pair of savestate hotkeys has been removed
- Encoding stability when using readScreen-implementing plugins has been improved
- The "Select Slot 10" hotkey now applies to its menu item correctly
- The "Load Latest Script" menu item has been moved below the recent submenu for consistency
- Lua Scripts now terminate correctly
- The atvi lua callback is now invoked when paused to maintain compatibility with old scripts
- The rombrowser and core have been hardened against evil roms
- The emulator now continues functioning after a crash
- Core and dispatcher have been hardened against race conditions
- Lua renderer initialization no longer fails when the window is too small
- Fixed crash in emu.getaddress
Performance
- FPS and VI/s tracking no longer blocks the emu thread
- General performance when no Lua scripts are running has been greatly improved
- The Lua D2D API's overhead has been reduced
- Plugin search frequency has been reduced
- The new timer system (introduced in 1.1.6) is now forced on, greatly improving fast-forward performance
- Fix hotkeys allowing interaction with disabled menu items
- The rombrowser's time-to-build has been reduced
- Core performance during seeking has been improved
Other Changes
- The hotkey selection list now advances automatically after receiving an input sequence
- Trace logs can now be generated in a binary format
- The statusbar layout has been changed to display more useful information
- Various unused options have been removed
- Movies with the ".savestate" extension can't be created anymore, but can still be played back
- The toolbar has been removed
- The "Start From Beginning" feature has been removed, as it's superseded by "Load Latest Movie"
Advisories
Windows 8 or above is now required to utilize Lua scripts.
The emu.atwindowmessage
callback is on its way out. See issue #190 for more information.
better-gln64 has been updated to implement MGE.
Full Changelog: 1.1.6...1.1.7