Skip to content

Releases: mkdasher/mupen64-rr-lua-

1.1.9-3

20 Dec 20:30
Compare
Choose a tag to compare

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

27 Nov 16:40
0dba5c7
Compare
Choose a tag to compare

1.1.9

25 Nov 19:38
Compare
Choose a tag to compare

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.

389416352-0889b3e4-6201-40d4-b09e-860c13479c1b-1

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!

grafik

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.

@crackhex

Thank you for the help, your time is greatly appreciated!

1.1.8-2

11 Aug 07:47
Compare
Choose a tag to compare

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

01 Jul 13:54
Compare
Choose a tag to compare

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.

@crackhex, @irimuri

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

10 Mar 18:52
Compare
Choose a tag to compare

grafik

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

1.1.6

10 Dec 17:25
Compare
Choose a tag to compare

Performance

Rom loading and plugin loading performance has been greatly improved.
General emulation performance has been greatly improved.
Savestate performance has been greatly improved.
The config flag use_new_timer allows users to opt in to a new timer system, which should deliver better fast-forward performance at the cost of decreased normal mode speed.

Rombrowser

The rombrowser now supports sorting by column again.
The rombrowser now correctly updates after modifying its path sources.

CoreDbg

The game debugger has been overhauled and rebranded to CoreDbg.
CoreDbg now displays temporal data.

Hotkeys

Previously hardcoded hotkeys can now be changed.
Hotkeys can now be selected by doubleclicking the hotkey list entry.
The hotkey assignment section is now disabled when no actions can be performed.
The default hotkeys have been improved and freed of conflicts.

Security

os.execute has been disabled in Lua scripts.

Titlebar

The titlebar now updates from a unified path, eliminating weird visual desync bugs.

Commandline

The commandline interface has been completely overhauled.

Statusbar

The statusbar formatting has been improved, loosening spacing up a bit.
FPS and VI/s are now calculated using a moving average.

Full Changelog: 1.1.5...1.1.6

1.1.5

20 Oct 15:26
Compare
Choose a tag to compare

Noteworthy Changes

Lua

A new render target API has been added to the Direct2D namespace.
Scheduling of atupdatescreen has been improved, improving performance of scripts relying on it for graphics by up to 300%.
Lua windows now get recreated with their previous scripts after a restart.

Encoding

The options to record other windows and delay recorded frames has been added (courtesy of @onlymx13)

Rombrowser

The rombrowser has been optimized to read large rom lists faster.

TASInput

This release comes with a new and updated version of TASInput

Full Changelog: 1.1.4...1.1.5

1.1.4

03 Oct 09:24
Compare
Choose a tag to compare

Noteworthy Changes

Lua

The rendering APIs have been overhauled and are backwards-compatible by default, with an opt-in process for the new renderer.
To use the new renderer, call emu.set_renderer(2)

Additionally, Lua scripts now get cleaned up correctly when emulation stops

Core

SD Card emulation has been implemented (thanks to devwizard)

Rombrowser

The rombrowser has been rewritten and optimized. Sorting and column sizing persistence is missing, but will be added in the next release if requested

Config

The config has been rewritten, made more human-readable and backwards-compatible with the new format.

Plugins

The plugin discovery and loading system has been rewritten

Hotkeys

Hotkey selection flexibility has increased

Before Updating

Always run new versions of Mupen64-rr-lua- in an empty directory, free of config or cache files from older versions.

What's Changed

  • startPlayback can now find savestates with . in the filename by @tjk113 in #117
  • Fixed memory leak in getSavestatePath by @tjk113 in #119
  • Add SD card emulation by @devWizArd in #124

Full Changelog: 1.1.3...1.1.4

1.1.3

06 Jul 09:45
Compare
Choose a tag to compare

⚠️ Breaking Changes

The Lua rendering APIs have been overhauled, breaking compatibility with old Lua scripts.
Read the Lua documentation written by Wade7 for more information.

There are the following strategies for usage of old Lua scripts:

  • Manual adjustment to utilize new APIs
  • Usage of a compatibility layer to automatically polyfill old scripts

Join the discord server for further help with porting.

Before Updating

Always run new versions of Mupen64-rr-lua- in an empty directory, free of config or cache files from older versions.

What's Changed

Full Changelog: 1.1.2...1.1.3