- Sound is no longer in beta, and no longer muted by default
- Control sound sample rate, volume or disable entirely
- Introduce API for sound. Sound buffer is provided frame-by-frame.[1]
- Introduce PyBoyException as the base-exception for PyBoy
- Introduce exceptions when accessing features that are not enabled
- Actually release the GIL for improved multi-threading support
- Blank out first frame after enabling LCD (emulation accuracy)
- Implement consistent frame-cycles. Each tick is targeting 70224 emulated CPU cycles.[1]
- Fix bug when using CGB boot ROM with DMG game ROM
- Fix no_input to ignore SDL2 input but keep API input
- Fix a lot of small issues related to determinism and save/load state
- Added documentation for plugin-kwargs on PyBoy constructor
- Python 3.8 support removed as it's past end-of-life
- Fix stepping with debugger after v2.4.0
- Add set_time_left to Super Mario Land wrapper
- More consistent handling of cartridge names in DMG/CGB mode
[1]: When the game enables/disables the LCD, the timing will be shorter than 70224 emulated cycles. Therefore the sound buffer will also be shorter than 16.667ms (60 FPS).
NOTE: If you depend on exact timing of a frame (assume a specific start block in Tetris etc.) then expect these to have changed. These changes improve emulation correctness, and I cannot promise specific frame timings between releases.
Although I don't expect this to become a regular occurrence.