Warning
This is the dev documentation for an unreleased version of MPF!
This is the documentation for MPF 0.56+, which is the “dev” (next) release of MPF that is a work-in-progress. Unless you’re specifically looking for this version, you probably want to use the version of documentation called “latest” which is for the latest released version of MPF. That documentation is at docs.missionpinball.org/en/latest.
MPF Release Notes¶
Here’s the history of the various release versions and changes of the Mission Pinball Framework. (Patch releases and bug fixes are not included in this list.)
0.55¶
Released: June 25, 2021
Video about some of the changes in 0.55:
Video about release creation:
Breaking changes in config¶
- Removed Python 3.5 support
- Added Python 3.8 and 3.9 support (default in Ubuntu 20.04)
New Features¶
- Flashing Segment Displays in P-Roc
- Segment Display Match Flashing
- Visual Pinball Engine (VPE) Support
- New argument “remaining” in counts
- Initial support for auto-generating wire harnesses
- Tilt improvements
- New hardware: Initial PKONE support
- Improved config validation
- More Service Mode Features
- Open Pinball Project 2.1 Firwmare (for Cobrapin)
- State Machines in non-game modes
- EOS repulse in software
- Better EOS support in FAST and P/P3-Roc
- Ball search only starts at boot when there is at least one ball
- Allow updating speed and manual_advance of shows
- Power management for enable on coils
- Production bundles for config in production machines
- RGB segment displays
- New hardware: FAST segment displays
- Segment displays emulator
- Animations for segment displays
- New command: “mpf hardware benchmark”
- Improved servo support
- Support switches in Pololu Tic
- Add more subscriptions and placeholders
- New spinner device
- New crash reporter
- More and better segment mappings
- Better drop target event behaviour
New Config Options¶
- New delay setting for all config players to delay execution
- New option enabled for displays
- New option max_hold_duration for coils to prevent burning your coils by accident
- Persist_frame on images
- logic_block_timeout for all logic blocks (counters, accruals and sequences)
- Added block in sound_player
- New option stop_timeout_after_last_move in servos
Bug Fixes¶
- Fixed color bugs during fading
- Fix P-Roc driver_pulsed_patter
- Fix bug where initial count of playfield has been wrong
- Ball lock fixes when physical lock has been full
- Highscore mode fix
- Fixed bug on ball tracking during eject with plunger
- Fixed crash on multiple returning balls in the trough
- Fixed crash in bonus
- Fixed crashes in service mode
- Fix timer on step_back and advance in shows
- Fix ball search behavior for diverters
- Fixed bitmap font bugs
0.54¶
Released: November 7, 2020
This release contains incremental improvements and a lot of bugfixes. We identified a few potential upgrade issues:
- Deprecated
ball_locks
device has been removed. Usemultiball_locks
orball_holds
instead. - Space-separated lists have been removed. Use comma-separated lists or yaml lists instead (with or without spaces). MPF sticks to YAML conventions here and allows all kinds of legal YAML lists (which does not include space-separated lists).
- Deprecate
playfield_active
tags on shots. Those tags are only required for switches which are not part of shots or devices (so almost none). MPF will complain and you might have to remove the tag in that case. - MPF will complain on event handlers with the same name as a switch.
This should not happen in practice and has been done to catch typical user error
(i.e. using the event
s_my_switch
instead ofs_my_switch_active
). - Diagnostics menu (switch, coil, light) is now a sub-menu in service mode.
MPF, MPF-MC, MPF-LS and MPF-Monitor
New Features¶
- Deduplicate asyncio code - jab
- Support more Pin2DMD hardware options - jab
- Do not flush in pypinproc - jab
- Do not call flush on write_data in pypinproc to speed up LEDs on PD-LED - jab
- Better default logging for ball devices - jab
- Support event args in show_tokens - jab
- Log virtual time in unit tests - jab
- New “mpf format” command to format configs - jab
- Refactor hardware fades for performance - jab
- Driverboards per platform to support FAST and P-Roc in parallel in one machine - jab
- Crash asset loader thread on exception - jab
- Validate widgets and targets in slide_player - jab
- Validate slides in widget_player - jab
- Refactor pypinproc to use PRWriteDataUnbuffered - jab
- Refactor libpinproc to use PRWriteDataUnbuffered - jab
- Util cleanup - jab
- Turn off incands at start for OPP - jab
- Remove space separated lists - jab
- Support delayed pulses in autofires and kickbacks and implement it for OPP - jab
- Refactor config loading - jab
- Support serial LEDs in OPP on new boards - jab
- Enable dot priority syntax everywhere - jab
- Remove dash syntax for control events - jab
- Unity config spec loading for mpf and mc - jab
- Remove ball locks as they have been replaced by multiball_locks and ball_holds - jab
- Dynamic value for keep_multiplier in bonus mode - seanirby
- Batch commands for PD-LED - jab
- Inputs on Neopixel wings in OPP - jab
- Add mpf build production_bundle - jab
- Log config load times - jab
- Interface for binary data storage (instead of yaml) for high scores and audits - jab
- Test software update in service mode - jab
- Fix asset loading in overloaded modes - jab
- Remove space separated lists in MC - jab
- Refactor Config Loading in MC - jab
- Build MC on Python 3.5 to 3.7 - jab
- Support Production Config Bundles in MC - jab
- Better error messages for incorrectly formatted shows - jab
- Retry connect to LISY/APC serial - jab
- Validate shows in achievements - jab
- Improve smart_virtual errors - jab
- Improve error when a required setting is missing - jab
- Improve generic validator errors - jab
- Support switches in OSC platform - jab
- Implement events in OSC platform - jab
- Support BCD, 14-segment and 16-segment displays as segment_display - jab
- Improve empty device collection error - jab
- Validate playfield_active tags on shot switches - jab (breaking change - you have to remove those tags)
- Point users to our fork of apigpio (called apigpio-mpf) - jab
- Validate platforms and prevent configuring features which do not exist on platform - jab
- Runtime errors with documentation links - jab
- Add glow effect and 2 - seanirby (see blog post about glow effect)
- Add font for 14-segment displays similar to Williams System 11 displays - seanirby
- Pin all dependencies - jab
- Commandline config generator - F4b1-
- Add end_ball and end_game events to game - jab
- Prevent true and false in placeholder (use True and False) - jab
- Expose more P/P3-Roc errors - jab
- mpf hardware scan for LISY - jab
- Refactor driver lights to properly encapsulate internals - jab
- Parallel device initialisation - jab
- Implement chained lights - jab (see separate blog post)
- Add spread spectrum modulation (SSM) PWM for fast coil for low-noise hold - jab
- Improve error message on failed template evaluation - jab
- Add debug output to state_machines - jab
- Better config validator error paths - jab
- Support new templates syntax for all template_str - jab
- Add subscriptions in variable_player - jab
- Pass timestamps from platform for switch changes - jab
- Refactor hot switch path for performance, 2, 3, 4 - jab
- Add sound_loop_start_at/end_at and implement them in MC - qcapen
- Allow multiple entrance_switches - jab
- Prevent event handler with the same name as switches (to catch common beginner mistakes) - jab (breaking change in theory but unlikely for real machines)
- Performance improvements - jab
- Add show_queues to serialize shows - jab
- Support pinproc in Python 3.7 and 3.8 on Windows - qcapen
- Recompiled pinproc for Python 3.5 and 3.6 on Windows to include recent improvements - qcapen
- Improve memory leak finder - jab
- Add debug button in iMC - jab
- Load named_colors in mc and test them - jab
- Require ffpyplayer for all platforms as it seems to solve video issues - jab
- Better type hints in mpf-ls - jab
- Autocomplete events and go to definition for events - jab
- Support more events in mpf-ls - jab
- Install latest kivy in debian installer - jab
- Better error handling in debian installer - jab
- Add source_devices to multiball_locks - jab
- Select pulse_ms based on ball count during eject - jab
- Add start_running option to shows - avanwinkle
- Support pulse_power in P/P3-Roc where possible - jab
- Better log output for P/P3-Roc - jab
- Always log OPP chain serial - jab
- Support GPIO inputs on P3-Roc - jab
- Faster and better light batching - jab
- Support Neopixel Wings on OPP - jab
- Prevent fades to the previous color - jab
- Deterministic fades - jab
- Allow platforms to set batch granularity for fades - jab
- Improve ball counters - jab
- Python 3.8 compatibility (only MPF not MC because of kivy) - jab
- Support Repulse on EOS in MPF (only supported in Spike so far) - jab
- Event to reset high scores - jab
- Event to reset audits - jab
- Event to reset earnings records - jab
- Event to reset credits - jab
- More modern service mode - jab
- Add twitch bot support - Mark Seiden
- Improve twitch bot - Mark Seiden
- Add advance_random_events to accruals - jab
- Show a nice error when communication with P/P3-Roc breaks down - jab
- Support more than 256 lights in LISY API > 10 - jab
- Extend motor device - jab
- Add shop jump - avanwinkle
- Add settle_time_ms to entrance switch counter to prevent ejecting thin air - jab
- First version of VPE platform (not finished yet) - jab
- Test and build on Ubuntu 20.04 - jab
- Support conditional events and fallback for random_event_player - avanwinkle
- Python 3.8 support in MPF-MC (except kivy) - qcapen
- Faster image loading in sequences - jab
- Add block events to text_input and use them in carousel - avanwinkle
- Nicer errors in MC - avanwinkle
- Expose switch config in pypinproc - jab
- Support loading light shapes from MPF Monitor in showcreator - markinc
- Add Mac build for showcreator - markinc
- Improve logging in MPF Spike Bridge - jab
- Extend MPF Monitor with a lot of new features - kylenahas
- Monitor performance improvements - kylenahas
- More monitor perf improvements - jab
- Add config arg to MPF Monitor - avanwinkle
Bug fixes & code improvements¶
- Fix fast shutdown bug when an error occured - jab
- Prevent crashes from empty platform configs - jab
- Fix crash in some MC players - jab
- Fix multiple subscriptions in show_player - jab
- Fix new fades in VPX - Wolfmarsh
- Add test for VPX platform - jab
- Fix multiple subscriptions in light_player - jab
- Fix gamma test slide - jherrm
- Add test for gamma_test_slide - jab
- Do not crash test when sound system is not loaded - jab
- Test and fix end_bonus_event - jab
- Only validate widgets when using the add action - jab
- Fix master volume bug - qcapen
- Fix asset loading when overloading a mode fixes bug 1366 - jab
- Detect missing curly backets in conditional events fix bug 1497 - jab
- Prevent adding player during high score of a one ball game - seanirby
- Fix config spec for hardware section - jab
- Fix servos on PD-LED with new libpinproc and add a test - jab
- Fix subscriptions in logic blocks - jab
- Fix broken subscriptions during player change - jab
- Disable Mac Wheels as they caused install issues - jab
- Fix crash in smart_virtual with entrance_switches - jab
- Fix achievement_group auto_select with allow_selection_change_while_disabled - jab
- Fix BCP encoding crash - seanirby
- Remove lower-casing of colors because it breaks placeholders - jab
- Fix crash in variable_player - seanirby
- Fix non-connected switches for P3-Roc - seanirby
- Fix initial switch state for RPi platform - jab
- Fix OSC crashes with complex event parameters - jab
- Fix ball count in multiball_lock full event with physical_only strategy
- Do not poll OPP boards without switches - jab
- Fix input mask for OPP Neopixel wings - jab
- Allow duration for wipe transition - jab
- Fix crash when not specifying keep_multiplier in bonus entry - jab
- Fix random argument order in OSC events - jab
- Fix crash in drop_target - jab
- Respect switch and coils defaults for autofire rules - jab
- Fix init race in steppers - jab
- Fix number crash in FAST - jab
- Fix late crash during shutdown - jab
- Fix crash in digital_outputs with FAST platform settings - jab
- Consistent fade_out for display_light_player - jab
- Fix bash export in installer - jab
- Fix crash when a ball is lost (because of the next bug) - jab
- Prevent ball skipping when target is not a ball device - jab
- Consistent jam switch handling in ball counter - jab
- Prevent incorrect playfield activation by drop_target_bank resets - jab
- Fix light ordering for fades - jab
- Fix config parsing for developers.missionpinball.org - jab
- Use the correct commands for the correct Spike Firmare (Spike System 1 vs System 2) - jab
- Correct Active Mode Updates to MPF Monitor - jab
- Fix config validation issues with System 11 - jab
- Fix potential crash - jab
- Always configure both banks of all PD-16s on P/P3-Roc to prevent polarity issues and stuck on coil on the hardware - jab
- Fix sound loop bug - qcapen
- Fix loop bug when stealing/replacing a playing sound with a higher priority sound - qcapen
- Fix animations when two slides animate the same image - jab
- Do not crash on empty config collections - jab
- Fix animations in slides in shows - jab
- Prevent crash in sound_player with placeholders - jab
- Expose video control events to MPF - jab
- Fix crashes in image pool and regression test them - jab
- Fix Spike 2 Init Sequence - jab
- Fix incorrect active modes in MPF Monitor - jab
- Prevent crash in Monitor - jab
MPF Documentation
- Release notes to 0.53 - jab
- Extend fadecandy documentation - jab
- Document Pin2DMD - jab
- Faster docs generation - jab
- Remove stuff from roadmap which has been implemented - jab
- Link to our libpinproc fork - jab
- Add link to VS Redistributables for pypinproc on Windows - jab
- Fix DMD font style names - kevwilde
- Support assets in doc tests - jab
- Support virtual platform in doc test cases - jab
- Document common problems with Numlock when using keyboard in MPF - jab
- Example for multiball without physical lock - jab
- Reformat all examples for good copy and paste experience - jab
- Extend PD-LED FET documentation and drawing - colemanomartin
- Test and fix mc examples, more and more - jab
- Test all slides in the tutorial - jab
- Improve PD-LED documentation - seanirby
- Fix typo - driskel
- Fix settings name - enteryourinitials
- Update docs for driverboards per platform - jab
- Test and fix DMD style names in examples - jab
- Test and fix all kinds of slightly broken examples - jab
- Test and fix animation examples - jab
- Test and fix widget examples, more and more - jab
- Test and fix slide examples and more - jab
- Test and fix display examples - jab
- Test remaining mc examples - jab
- Add dual_wound_coil example for diverters - SwizzleFish
- Document solution for common Windows install problem - AdrianD72
- Add mystery award example - aaronmatthies
- Fix broken links and references to ball_locks - aaronmatthies
- Link to APC video - jab
- Remove old-syntax list examples from docs - jab
- Use commas to separate lists - jab
- Dual-coil diverters - jab
- Add generic part numbers - jab
- Document Motors - jab
- Document Shakers - jab
- Add Pop Bumper Images - aaronmatthies
- Add example how to end a game by long-pressing start - jab
- Describe PSU magic - jab
- How to fix drop target reset issues - jab
- Document Pololu Tic - jab
- Reference placeholders in bonus mode - seanirby
- Keyboard tutorial - jab
- Integrating Logic Blocks and Lights - jab
- Tutorial on Counter and Slide integration - jab
- Update all config references: OPP, Pin2DMD and P-Roc and many more - jab
- How to drain all balls and keep the ball live, 2 - mwiz
- Improve achievments documentation - atummons
- Fix event annotations - jab
- Remove old section about shot reuse - seanirby
- Update config references for all kinds of devices, 5, 6, 7 - jab
- Document color_correction_profiles - jab
- Notes about style for text sizes - jab
- Update tutorial - jab
- Update motors - jab
- Render nice 404 with helpful links jab
- Links to list of documented error messages - jab
- Document show format errors - jab
- More errors and document MPF language server - jab
- Update BCP reference - jab
- Update multiball_locks reference - jab
- Update steprocker reference - jab
- Update achievements reference - jab
- Update widget_style reference - jab
- Improve state_machine - atummons
- Document common errors - jab
- Update videos reference - jab
- Add VPX to tutorial - jab
- Document OSC platform - jab
- Update variable_player reference - jab
- Update snux reference - jab
- Update player_vars and shot_groups reference - jab
- Document light_segment_display - jab
- Document WS2812 specifics and similar chips - jab
- Document CFE-ConfigValidator-4 - jab
- Document CFE-ConfigValidator-2 - jab
- Document CFE-ConfigValidator-1 - jab
- Update logic_blocks reference - jab
- Document CFE-ConfigValidator-12 - jab
- Document CFE-ConfigValidator-13 - jab
- Document CFE-DeviceManager-3 - jab
- Document mpf build production_bundle - jab
- Update track_player reference - jab
- Update sounds reference - jab
- Improve ball_device reference - chris20-20
- Improve switches reference and more - chris20-20
- Fix typo and more typos - chris20-20
- Update sound_system reference - jab
- Update sound_player reference - jab
- Document defaults in references - jab
- Add links to tutorial and more links - chris20-20
- Improve tutorial - chris20-20
- Improve coil_player documentation - chris20-20
- Fix LCD width and height - chris20-20
- Document MC errors - jab
- Fix link in docs - F4b1-
- Document glow effect - seanirby
- Improve event reference - jab
- Add physical building section - jab
- Improve common ground warning - jab
- Add common issues section for Multimorphic - jab
- Playfield layout considerations from Jimmy - jab (content from Compy)
- More on common ground from Gerry Stellenberg - jab (content from Gerry)
- Update instructions to build docs locally - seanirby
- More playfield layout and images - Compy
- Example on how to end a game properly using events - jab
- More details and considerations on coils - jab
- Properly document MPF language server - jab
- Clarify that a RPi is not a pinball controller without further hardware - jab
- Related links for all driver howtos - jab
- Bring back Indy Lane tutorial from old website - jab (based on content from Brian)
- Warn about current Python 3.8 issues - BENETNATH
- Fix typo in udevadm command - BENETNATH
- General hardware troubleshooting guide - jab
- mpf hardware scan example for the P-Roc - jab
- Document common P/P3-Roc issues - jab
- Link troubleshooting section from more places - jab
- Troubleshooting guide for FAST hardware - jab
- Correct addressing section for P3-Roc - Coleman
- More hardware troubleshooting for P3-Roc boards and cables - Coleman
- Document new game events - jab
- Document -t command line option - jab
- Troubleshooting guide for OPP hardware - jab
- Troubleshooting guide for LISY/APC - jab
- How to ask questions in the forum for hardware issues - jab
- Example for transition_out - jab
- Better widget examples - public-profile
- CSSC instructions on Linux - jab (content from Scott Danesi)
- More OPP troubleshooting - jab
- Document default_pulse_power/default_hold_power limitations in P3-Roc - seanirby
- Troubleshooting for Fadecandy - jab
- Pin2DMD troubleshooting - jab
- Suggest firmware updates for P/P3-Roc and FAST - jab
- Extend high voltage warning - jab
- Document default recycle times in P/P3-Roc - jab (content from Gerry)
- Document debounce and recycle behaviour of autofire_coils - jab
- Document chained lights and numbers vs channels for all platforms - jab (see separate blog post)
- Coil troubleshooting - jab
- FAST on Linux troubleshooting - jab
- Document debounce and recycle behaviour of flippers - jab
- Notes on RGB and colored inserts - jab
- How to install Debian with MPF in VirtualBox - kylenahas
- Example for state_machines with placeholders - jab
- Document start_loop_at/end_loop_at on sounds - qcapen
- Document rotation animations - Coleman
- Readd tutorial to mpf-examples and test it - jab
- Fix sound references in demo_man - kylenahas
- Add monitor image and config to demo_man - kylenahas
- How to wire coils and scoops - jab
- Magnet example - jab
- How to debug MPF Spike Bridge - jab
- Add Physical Building Section - Nate
- Add Stern Magnet Board - jab
- Document start_running in shows (with examples) - avanwinkle
- How to capture spike net bus - jab
- How to replace FETs on FAST hardware - jab
- Dedicated Magnet Driver boards - jab
- Fix typos - bghill
- Update Windows Install Instruction for Multimorphic - qcapen
- Add part numbers - bghill
- Fix snux docs and more - jab
- Remarks on referencing slides in a show from outside - jab
- Document twitch bot - Mark Seiden
- Add details about keys and widgets - atummons
- Enhance twitch docs - Mark Seiden
- Document known P/P3-Roc errors - jab
- Link correct demo man from docs - jab
- Document common demo man issues - jab
- Document advance_random_events - jab
- Document reset_audit_events - jab
- Document repulse on EOS for flippers - jab
- Document reset_high_score_events - jab
- Document light chaining with previous and start_channel - jab
- Document source_device in multiball_locks - jab
- Update Motor documentation - Lance-o-nator
- Improve tutorial - flamtime
- Add driver troubleshooting - jab
- Document P/P3-Roc runtime errors - jab
- P/P3-Roc Firmware Upgrade section - jab
- Document CobraPin platform - cobra18t
- Fix reset_when_complete in docs - avanwinkle
- Document carousel block_events - avanwinkle
- Document more common errors - jab
- More breakout boards - jab
- Ubuntu 20.04 install instructions - jab
- Add missing config references for release - avanwinkle
- Renamed end_loop_at and start_loop_at to loop_end_at and loop_start_at - qcapen
0.53¶
Released: January 11, 2020
This is a 0.52 maintenance release with cleanups and some refactorings. We identified a few potential upgrade issues:
- We fixed validation of animations. You might get a validation error with repeat: -1. Change it to repeat: false. See the change in the docs.
- We changed active_time of ball_save from ms to secs. In case you did not use a unit here this might change the time. Details.
- Machine variables changed if you accessed them from code (but not via config).
- Achievement state changed if you accessed it from code (but not via config or placeholders).
MPF and MPF-MC
New Features¶
- Support segment displays connected to normal light of a platform - jab
- Batch LED updates for PD-LED and P/P3-Roc to prevent bus overflows - jab
- Make separate thread configurable in P/P3-Roc and reduce IPC overhead - jab
- Highlight settings in service mode - avanwinkle
- Spike-MPF bridge in Rust - jab
- Use new Spike-MPF bridge in MPF - jab
- Use a better default for max_servo_value on PD-LEDs - jab
- Allow reverse sorted highscore categories - yensho
- Light batching in Spike for better light sync - jab based on request by Dave
- Read ticks_per_second per node for Spike - jab
- Reliable speed/flow control in Spike - jab
- Initial Spike 2 support for the mpf-spike bridge - jab
- Limit light batch size in Spike to prevent bus desync - jab
- Ignore duplicate handler warnings during init - avanwinkle
- Add support for steppers in Spike - jab
- Support Spike 2 backlight - jab
- Support Spike 1 and Spike 2 backlight in bridge - jab
- Servo and Steppers as Diverters - jab
- Separate event handlers and code to catch incorrect arguments in custom code - jab
- Auto launch when machine is tilted - jab based on question from Philip D
- Show player and machine variables in the Text UI - woosle1234
- Allow dynamic values in timer control events - avanwinkle based on report by wilder
- Reduce default batch size for Spike LEDs - jab based on tests by Dave
- Custom events_when_added and events_when_removed for widgets [2] - qcapen based on feature request by cfbenn
- Better cache invalidation of config_spec cache - jab
- Refactor Text UI to prevent text clutter - jab
- Allow user to disable ball search in a ball device - dziedada
- Better signal handlers and shutdown logging during crashes - jab to fix some exit issues
- Improve show and lights performance - jab
- Refactor DelayManager - jab
- Exit MPF when the FAST Nano reboots/crashes during a game - jab
- Add a setting for free play to service mode when credits mode is loaded - jab based on request by Greg
- Allow newer FAST firmware versions - jab based on problems with Firmware 1.05 by Brian Cox
- Support inverted switches and non-numeric drivers in Virtual Pinball - mfuegemann
- Extend README and add hardware rules to VPX Bridge and Test- mfuegemann
- Placeholders in credits mode - jab
- Placeholders in tilt mode - jab
- RGB LEDs and flashers in Virtal Pinball - mfuegemann
- Update asciimatics - jab
- Add –vpx commandline option to mpf and mc- jab
- Add VPX demo table with MPF config - mfuegemann
- Placeholders for StateMachine devices - jab
- Initial support for the Arduino Pinball Platform - jab, bontango and blackknight
- More debug in FAST platform and longer wait times - jab to support more FAST firmwares
- Generic System 11 A/C Relay handling (for APC and Snux) - jab
- Improve duplicate event handler message - jab as it caused confusion for Sepp
- Better error message when number is empty - jab based on report by Sepp
- Placeholders in show_tokens in show_player - jab to allow dynamic values in all widgets
- More useful and accurate validation errors in dicts - jab
- Add links to the docs to warnings and errors - jab
- Improve fake game in tests to handle multiball drains - jab
- Remove Windows Python 3.4 build of MPF-MC - qcapen
- Improve sound_loop_player design - qcapen
- Python 3.7 support for Windows in MPF-MC - qcapen
- Add placeholder conditions for items in carousel mode - avanwinkle
- Add control events to counters - dziedada
- Support for the APC platform - jab, bontango and blackknight
- Validate switch numbers in LISY/APC - jab
- Set DTS to low on connect for APC and clear serial after reset - jab
- Modern lights for LISY/APC - jab
- Refactor sound loop - qcapen
- Allow tokens for widgets in shows - jab based on request from Sean-Paul
- Don’t activate diverter if activate_event present - GabeKnuth
- Add enabled and rotation_enabled to placeholders for shots/shot_groups - jab based on request from Mike
- Throws Error when attempting to define more than one default display - GranolaDaniel
- Update unity-bcp-server to latest version - qcapen
- Segment display support for APC - jab
- Add token to slide_player to pass variables and MC - jab based on request in the forum by Greg
- Increased light update throughput - jab
- Add express syntax for sound_player - jab
- Refactor machine variables - pmansukhani
- Tune shows and events - jab
- Setup improvements and wheels for OSX - qcapen
- Nicer errors on syntax errors in conditions - jab
- Improve debug log of early messages in OPP - jab
- Option to send length bytes in LISY protocol - jab
- Better error message on invalid displays in LISY - jab
- Load modes from subfolders - pmansukhani
- Move code out of the hot path for light updates - jab
- Reserve all show_player options in show_tokens to prevent indent mistakes - jab based on bug report by Alex
- Improve linter and remove previously undetected unused imports - jab
- Better debug output for LISY platform - jab
- Fix segment display mapping for APC - jab
- Configuration setting for player_vars and machine_vars to show in text ui - avanwinkle
- Better command logging for the P/P3-Roc - jab
- Support daisy chaining in the Pololu Maestro - jab
- Expose P-Roc hardware version as machine variable - jab
- Placeholders for shoot_again in multiball - pmansukhani
- Support show_tokens with placeholders in shot_profiles - jab
- Regression Test for Diverters (for a bug which was fixed during refactoring) - jab
- Expose MPF and MC version in MPF-MC on connect - jab
- Support pulse power in P/P3-Roc - jab
- Add Scaffolding CLI to MPF - jab
- Optimized Service Mode for LCDs - jab
- Suggestions on config typos - jab
- Copy light positions in scaffolding CLI from monitor to MPF for display_light_player - jab
- Add start_enabled to achievements and refactor code - jab
- Add unselect_events to achievements and more cleanup - jab
- More achievement refactoring - jab
- Refactored test cases - jab
- Drop Python 3.4 support - jab
- Turn device collections into native dicts - jab
- Led_color default show now supports all default show_tokens - jab
- Log asset loading times for tuning - jab
- Show shot state in MPF-monitor - jab
- Validate transitions in state_machines - jab
- Improve config parsing/validation - jab
- Nicer errors and suggestions in shows - jab
- Improve install and dependency manangement for Max and Linux - jab
- Improve build and install on Windows - jab
- Lazy loading for zipped image sequences to speed up game startup - jab
- New experimental language server support for IDEs - jab
- Generic high score mode which works for DMD and LCD, 2 - jab
- Improve correctness, speed and error messages of config validation - jab
- Option to ignore checksum errors in Spike - jab
- Support new input command for Spike FW 0.49+ - jab
- Implement over current detection for Spike - jab
- Arbitrary start state for state_machines - avanwinkle
- Configurable debounce times and FW 0.49+ for Spike - jab
- Coil priorities in hw rules for Spike FW 0.49+ - densminger and jab
- Placeholders in ball save active_time - avanwinkle
- Autodetect FAST ports - avanwinkle
- Improve robustness of LISY protocol - jab
- Emacs instructions - seanirby
- Support goto definition and hover + mode support - jab
- Basic diagnostics - jab
- Improve placeholder performance by evaluating them only when needed - jab
- Update ruamel.yaml to improve the install experience on Windows - jab
- Benchmark and tune/cache placeholder parsing - jab
- Priorities in ball_holds and ball_locks - avanwinkle
- Batch light for PD-LED - jab
- Benchmark and tune event performance - jab
- Extend combo_switches to include the triggering switch in the event - avanwinkle
- Initial Pin2DMD support (not yet working) - jab
- Option to ignore FAST RGB CPU crashes - avanwinkle
- Tracing for libpinproc calls - jab
- Software update via Service mode - jab
- Add tests for accrual restarts - jab
Bug fixes & code improvements¶
- Fix some yaml parsing errors - jab
- Fix error with Python 3.7 - avanwinkle
- Fix driver stuck on in rules in P/P3-Roc - jab
- Do not crash in service cli when playing invalid shows - jab
- Fix crash in debug message for duplicate priorities - jab based on report from Dave
- Fix crash after config error - jab based on report by Wilder
- Properly use priority in widget_player when the slide is not active and becomes active later - avanwinkle
- Do not crash when failing to read stepper position in Spike - jab
- Allow carousel mode during attract - avanwinkle
- Do not start highscore mode without a game - jab based on report by wilder
- Properly save window positions in MPF Monitor - jab based on report by Greg
- Lock with physical_only strategy would never be full and count is off by one - jab based on report by Coleman
- Do not keep ball in outhole after tilt - jab based on report by Matt
- Fix crash in bonus mode with uvloop - jab based on report by Matt
- Prevent shutdown glitches in FAST - jab with the help of Dave
- Prevent crash during early errors in P-Roc - jab based on report by Coleman
- Preserve curly brakets in string_to_list - avanwinkle
- Fix bug preventing access to settings in custom code - avanwinkle
- Properly implement disable_random event in random_event_player - avanwinkle
- Fix enable attribute for placeholders in devices - avanwinkle
- Fix regression in multiball counting - avanwinkle
- Fix sound_loop_player bugs - qcapen
- Fix Mac build - qcapen
- Fix Kivy recursion erros in Kivy 1.11 - qcapen
- Fix events_when_xxx on sounds and 2 - qcapen and jab based on report by Greg
- Fix parsing regression in OPP with matrix input cards and more - jab
- Fix sound about to finish notification bug - qcapen
- Fixes for latest Spike Firmware and bridge - jab
- Always send a multiple of three LEDs to the Fadecandy to fix RGBW - jab based on bug report by Cadrion
- Fix polarity issue on P-Roc with WPC hardware - jab
- LISY command fixes in protocol v0.9 and 2 - jab
- Fix image unload crash in MC - avanwinkle
- Fix inverted condition on show player conditions - avanwinkle
- Prevent false positive duplicate numbers in virtual platform - jab
- Prevent crash in Text UI - jab
- Scaffolding from any path (just like other commands) - jab
- Set default enable/disable_event for magnets - jab
- Bring back state_names_to_not_rotate in shot_profiles - jab to fix bug reported by Greg
- Prevent false positive duplicate events handlers - jab based on report from Greg
- Fix crash in show player - jab
- Fix config validation - kevinleedrum
- Fix reenabling of achievement_groups - jab
- Improve error urls - jab
- Fix call to libpinproc for pulse_power - jab
- Do not crash on headless display_light_player - jab
- Fix setting number of LEDs per node in Spike FW 0.49+ - densminger and jab
- High score mode should run before match mode - jab
- Prevent crash in text ui on unknown switch event - jab
- Also advance score reels for non-active players - jab
- Consider OPP firmware version per chain instead of globally - jab
- Fix sequence_shots with a single switch and delay - jab
- Fix crash in score reels - jab
- Prevent crash in variable player when adding a variable for a non-exising player - jab
- Prevent duplicate BCP messages which could trigger duplicate sounds or widgets - jab
MPF Documentation
- Extend Multimorphic PowerEntry board documentation - colemanomartin
- Center Post Ball Save Example - mwiz
- Part numbers for trough opto boards - jab
- Image for Center Post - swizzlefish
- Improve game mode example - gregsealby
- Fix typos, fix2 - densminger
- Extend documentation for multiple screens - jab based on question by Haggis and solution by Snux
- Fix tutorial step 18 - jab based on question by Pablo
- Document new Spike bridge - jab
- Document steppers and add images - colemanomartin
- Image an image of a servo - colemanomartin
- Better stepper example code - colemanomartin
- Details about PD-LED servo fine tuning - colemanomartin
- Clarify monitorable servo properties - colemanomartin
- Document showcreator - jab
- Fix typo - cfbenn
- Docs for named_colors and example for dynamic widgets - avanwinkle based on request by Philip
- Better examples for sequence_shots - colemanomartin
- More text for the showcreator - jab
- Light_player examples - jab
- How to use shows in shows - jab
- Windows install error and fix - jab based on error from Jordan
- Document common logic block questions - jab based on question in forum from iizi
- Document servos and steppers as diverters - jab based on question in forum
- Document parameters of extra ball events - avanwinkle
- Document start_game_event and add_player_event - jab
- Add warnings about common ground to all coils - jab
- More tags vs tokens in shows - jab
- How to embed high score in attract mode - jab based on example by Greg
- How to display a timer on a slide - jab based on example from Coleman
- Common pitfall with accruals - colemanomartin
- Enable of StepStick needs to be low not high - colemanomartin
- Add Multimorphic part numbers for breakout boards and LEDs - jab
- Document breakout boards for switches - jab
- More homebrew part numbers - jab
- Thermal considerations about resistors on Optos - colemanomartin
- Document rotation on widgets - colemanomartin based on question in forum
- Update notes on rotation of widgets - colemanomartin
- Document custom widget events - qcapen
- How to configure tilt and change tilt slides - jab based on example/question in the forum
- Stern Spike Steppers - jab
- More examples for delaying game/ball ending - jab based on question by Coleman
- DIP 6 and Servos on the PD-LED - colemanomartin
- How to add a slam_tilt slide - jab based on suggestion in forum
- How to use sequence_shots in shot_groups - jab based on example by Greg
- Document shot_profiles - jab based on question by Jordy
- How to use virtual env on Mac with Kivy - driskel
- Improve dynamic values example - MarkInc666
- How to add credits settings to service mode - jab
- How to add tilt settings to service mode - jab
- Document placeholders for StateMachine devices - jab
- Document state machine configs - jab
- Add more config links and document timer transitions - jab
- Fixes in the tutorial and more - ironspider
- Document LISY protocol - jab
- Update example links - GabeKnuth
- Fix Mac install instructions - GabeKnuth
- Typos, Bad English and more - ironspider
- Rotation is counter-clock wise not clockwise - colemanomartin
- Document game variables - cfbenn
- Improve tutorial and fix typos - soraxxo
- Log mesage reference section - jab
- Add score slide to tutorial step 17 - Coleman
- Fix instructions on how to install a specific MPF version 2 - mfulleratlassian
- Improved and test multiball example - jab based on question by Sepp
- Fix typos - nhardt
- Document wire-to-wire connectors - ironspider
- Add wiresheet for 7-segment displays with mypinballs controller - unRARed
- When Two Drop Targets Are Hit Simultaneously How Do I Keep Two Sounds From Playing - qcapen
- Typos, 2, 3 - ironspider
- Notes on Mac install - bowilliams
- Remind users about venv when installing pypinproc - bowilliams
- Document modes in subfolders - pmansukhani
- Wording improvments, grammar fixes, typos, more typos, more grammar, simple past, proper count - ironspider (a lot of fixes)
- More precise description - ironspider
- Add modern Stern Opto Trough - ironspider
- Fix segment_displays in shows - snux
- Document LISY35 flipper enable - jab based on question by Dave
- Document local outputs on the P-Roc when using PDB boards - jab
- Update LISY procotol - jab
- Add LISY35 to WPC section - jab
- Document machine variables and more - jab
- Add images for coils, buttons, flasher, up-down-ramps and diverters - kevinleedrum
- Improve skill shot documentation - jab
- Improve service mode documentation - jab
- Document text_ui section - avanwinkle
- Fix typos and grammar - catrinaisahuman
- Fix typo in path - arthurlutz
- Added flipper image - tpilewicz
- Documentation (integration) tests with MC to make sure examples always work - jab
- Integration test for shots and widgets - jab
- Remove Python 3.4 references from docs - cfbenn
- Upgrade instructions for old to new kivy version - jab
- Document numlock keyboard issue - mwiz
- Document common problems with OPP on Ubuntu - jab
- Extend APC documentation - jab
- Document how to install MPF Spike bridge with FW 0.49+ - densminger
- Improve OPP docs - jab
- APC documentation - jab
- Document how to use newer Spike 1 firmwares with MPF - densminger
- Typo - jab
- Show config tests in docs - jab
- Example for other player scoring - jab
0.52¶
Released: February 02, 2019
This is a 0.51 maintenance release with cleanups and some refactorings. There should not be any breaking changes but a lot of bug fixes.
MPF
New Features¶
- OSC platform to control external lights - jab based on request in forum
- Validate variables in variable_player - jab based on config in example
- Placeholders for shots and shot_groups - jab based on question from mike wiz
- Better error messages for placeholders - jab
- Show proper error when fadecandy server is not running - jab based on request from Brian Cox
- Nicer output on startup errors - jab
- Show shutdown reason on exit of MPF - jab
- Show import error for pinproc - jab
- Upstream Raspberry Pi DMD support - jab based on external platform from Michael Betz
- Support for Spike Trough via SPI Bit Bang - jab
- Move libpinproc to a separate thread - jab
- Score Queues for SS style scoring - jab based on request in forum
- Check for OPP firmware mismatch on start - jab based on bug report in forum
- Evaluate placeholders from service cli - jab
- Improve USB latency for I2C in pypinproc - jab based on suggestion by rosh
- Only enable AC relay by default during the game. Keep it off in attract - snux
- Ball Routing device to route balls to certain devices - jab
- Support for the Pololu Tic stepper controller - wolfmarsh
- Update Smartmatrix Teensy Code Example for New Cookie - aaronmatthies and eli
- Placeholders in event_player based on event parameters - avanwinkle
- Update ruamel yaml parser - jab
- Use newer cython to support Python 3.7 - jab
- Add Python 3.7 support to MPF - jab
Bug fixes & code improvements¶
- Fix audio problems - jab (based on 0.50 fix)
- Fix name clashes between multiple anonymous slides - jab based on bug report by pinballpeople
- Properly support external platforms in MC - jab based on report by TheLegoMoviePinball
- Honour -a and -A option when loading config_spec in MPF and MC - jab based on report by TheLegoMoviePinball
- Honour slide parameter in inactive slides - avanwinkle
- Fix iMC startup crash - jab based on report by snux
- Remove use_sound_setting from default options - avanwinkle
MPF-MC
New Features¶
- Add a segment display font - jab based on example from BorgDog
- Conditionals on add_to_slide animations - avanwinkle
Bug fixes & code improvements¶
- Fix audio problems - jab (based on 0.50 fix)
- Fix name clashes between multiple anonymous slides - jab based on bug report by pinballpeople
- Properly support external platforms in MC - jab based on report by TheLegoMoviePinball
- Honour -a and -A option when loading config_spec in MPF and MC - jab based on report by TheLegoMoviePinball
- Honour slide parameter in inactive slides - avanwinkle
- Fix iMC startup crash - jab based on report by snux
- Remove use_sound_setting from default options - avanwinkle
MPF Documentation
- How to change the size of switches and light in the MPF monitor - jab based on questions from Jack Danger and Dan
- Document StepStick stepper drivers in MPF - jab based on request from Tom
- How to show virtual segment displays in MC - jab based on example from BorgDog
- How to use multiple displays - jab based on question in forum by Chris B and Snux
- Credits mode tutorial - jab based on old tutorial
- Tutorial on debugging memory leaks - jab based on question from Brian Cox
- Document RPi DMD platform - jab
- How to subscribe variables in config players - jab based on question
- Documenting the snux platform - snux
- How to use a Stern Spike Trough in other platforms than Stern Spike - jab
- How to use Solid State Style Score Queues - jab based on request in forum
- Document event handler priorities - jab
- How to use multiple locks in a multiball - jab
- Monitorable properties for shots and shot_groups - jab based on question by snux
- Document recycle settings for more platforms - jab based on question by Cole M
- Explain logic and modes in MPF - colemanomartin
- Notes on case-sensitivity - colemanomartin
- Explain A and C side preference in System11/Snux - snux
- Fix typos - travisbmartin
- Document monitorable properties and event in logic blocks - jab
- Example for conditionals in log - jab
- Update Smartmatrix documentation for new cookie - aaronmatthies
- Document start/launcher/tournament buttons - jab
- Document part numbers and voltages for bulbs, flashers, GIs and popbumpers and LEDs - jab
- Up-Down ramps - jab
- Updated Mac Install Instructions - avanwinkle
- Image for WS2812 LEDs - kylenahas
0.51¶
Released: November 24, 2018
This is a 0.50 maintenance release with cleanups and some refactorings. Breaking changes in common features are minimal but some minor changes might be required in some cases (e.g. we removed some defunctional options). It comes with lots of performance improvements and new settings for production machines.
MPF
New Features¶
- Configurable match number - jab
- Support I2C on the RPi via pigpio - jab
- Improve event order - jab
- Refactor accelerometers - jab (breaking change)
- Support burst IRs and local inputs/outputs on the P3-Roc - jab
- Validate P-Roc direct input numbers - jab
- Rename scriptlets to custom_code - jab
- Add json logging - muffler-aus
- Improve startup performance - jab
- Allow lists of flashers - avanwinkle
- Prevent spaces in event handlers - avanwinkle (breaking change)
- Allow float in timers - jab
- Major performance improvements for switch handlers - jab
- Major performance improvements in lights and shows - jab
- Add option to disable sound output - avanwinkle
- Support multiple I2C servo controllers - jab (breaking change)
- Improve performance without logging - jab
- Add support for P3-Roc burst optos - jab
- Allow users to disable ball search rounds - jab
- Define alignment for segment displays - jab
- Add restart_events to shots and shot groups - avanwinkle
- Add placeholder support to event_player - avanwinkle
- Prevent warnings during init and batch incandescant update for OPP - jab
- Improve FAST behaviour during MPF init - jab
- Entrance switch ignore window - avanwinkle
- Improved README.md for the MPF project - austinbgill
- Prevent bad switch config for drop_targets, shots and autofires - jab
- Validate that ball_count for multiballs is the right range - jab based on question from Alex
- Allow variable_players outside game modes for machine variables - jab
- Only reset drop target banks if a target is down - jab based on request from Mark M
- Add support for flipper tapping for OPP - jab and Hugh based on forums discussion
- Serial LEDs support for PD-LED - jab with help from gstellenberg
- Only send lamp updates when lamps change in LISY - jab
- mpf test can now parse example/tests from rst files - jab
- sw_flip_events and sw_release_events for flipper to flip from software - jab based on request from Philip D
- Add event handlers to start game and add players - jab based on request from Cole M
- Add new mode_will_start hook for custom code - Lamoraldus based on discussion in forum
- Support external platforms via entry_points - jab
- Refresh Smartmatrix DMDs periodically - jab
- Support Servos on PD-LED - jab with help from gstellenberg (announcement)
- Support Steppers on PD-LED/New stepper device interface - jab with help from gstellenberg
- Support config specs for external platforms via entry_points - jab
Bug fixes & code improvements¶
- Prevent crash on empty machine vars in MC - jab
- Sync shows with sync_ms on stop - jab
- Fix pulse on drop target reset - jab
- Prevent flicker on show replace - jab
- Fix logging verbosity - avanwinkle
- Fix placeholder crash - jab
- Restore diverter state after ball search - jab
- Fix debug flag in P-Roc and P3-Roc - jab
- Prevent achivements from enabling after restoring state - avanwinkle
- Fix ms vs sec in timer pause - avanwinkle
- Fix mode events when starting/stopping mode from BCP - jab based on report by Travis Martin
- Fix display_light_player crash when used in mode - jab
- Fix crash in BCP with MPF Monitor - jab based on report from alex
- Fix pulse calculation error in Stern Spike - jab
- Actually use poll_hz in lisy section - jab
- Prevent broken flipper rules when using multiple flipper devices in FAST/OPP - jab
- Prevent lags in LISY - jab
MPF-MC
New Features¶
- Disable multi touch - qcapen
- Add json logging to MC - mfulleratlassian
- Improve startup performance - jab
- Add animations based on event parameters - jab
- Add option to disable sound output - avanwinkle
- Rename mc_scriptlets to mc_custom_code - jab
- Support other channel orders than RGB for all RGB DMDs - jab based on request from Cadrion
- Update kivy to version 1.10.1 - jab
- Support multiple (stacked) style values for widgets - avanwinkle
- Better error when showing images too early - jab based on question from Brian C
- Allow widget styles to set z values - avanwinkle
- Update kivy dependencies - jab
- Reusing named widgets - avanwinkle
Bug fixes & code improvements¶
- Properly update text widgets on text change - MarkInc666
- Fix crash on empty machine var - jab
- Reset animation on remove of image - jab
- Fix iMC crash - jab
- Fix widget leaks - jab
- Fix playlist crash - qcapen
- Fix that you cannot edit the last highscore character - jab
- Prevent multiple text handlers/Improve performance - avanwinkle
- Fix depreation warnings in kivy scale - avanwinkle
- Fix iMC initialisation - avanwinkle
MPF-Monitor
New Features¶
Bug fixes & code improvements¶
- Fix bcp crashes - jab
- Obey machine path - John
MPF Documentation
- Document state_machines - jab
- Document hardware_sound_player for older machines - jab
- Document bitmap_fonts - qcapen
- Document motors and digital_outputs - jab
- Document SPIKE DMDs - jab
- Example for logic blocks - jab
- Add documentation on game design - jab
- Update I2C accelerometer documentation - jab
- Add mode examples - jab
- Improved windows install instructions for the monitor - sliderpoint
- Document burst IR and direct inputs/ouputs on the P3-Roc - jab
- Fix smartmatrix documentation - driskel
- Document tilt mode - jab
- Document conditionals and placeholders - jab
- Document multipliers in scoring - jab
- Document color correction - jab
- Document spinners - jab
- Document shows on ball start/end - jab
- Document bonus mode - jab
- Howto on ball save on ball start - jab
- Document high score mode - jab
- Document MPF service cli - jab
- Document credits mode - jab
- Document common machine types - jab
- Document LISY - jab
- Document common modes in MPF - jab
- Add RPi debug notes on sound/video - matirwin
- Document match mode - jab
- How to use udev to ensure persistent devices on linux - jab
- Document text placeholders - jab
- Add examples for animations based on player vars - jab
- Add light examples - jab
- Clarify monitorable properties - avanwinkle
- Added a guide on mode layering - avanwinkle
- Document how to run MPF in production - jab
- Improve light_strips, ball_holds, image_widgets, widget_styles, switch_player, drop_target_banks, drop_targets, logic_blocks, coil_player, counters, switches, ball_devices, PSUs, coils, smart_virtual_platforms, multi_balls, light_rings and more - jab
- Document volatages in pinball machines - jab
- Documentation about EMC/EMI and common ground - jab
- Document FAST power filter board - jab
- Document Multimorphic power entry board - jab
- Document servo sequences - jab
- Images for targets and FAST and Multimorphic, drop_targets and optos, switches, spinners and magnets, vari-targets - with help from the fast slack
- Add part numbers for optos and switches - jab
- Add common PSU part numbers - jab
- Document uninstall - colemanomartin
- Document how to cancel a show using flipper_cancel events - mwiz
- Document wiring and voltages - jab
- Mode corrections - mwseiden
- Document electrical details of optos - jab
- Update shot group profiles documentation - avanwinkle
- Document how to use player variables with counters - mwseiden
- Document appliance classes and common ground - jab
- Added examples for PD-LED - jab
- Document appliance classes and common ground - jab
- Added examples for PD-LED - jab
- Improved bonus mode documentation - avanwinkle
- Document ball and game end mode blocking - jab inspired by Lynn
- Extra ball based on score example - jab based on example from Lynn
- How to use high score mode in EMs - jab based on example from Lynn
- Document RGB DMD channel_order parameter - jab
- Added example of game mode which increases multiplier when lanes are complete - travisbmartin
- No longer claim Python 3.4 support - it is EOL - jab
- Document PC power on/off - jab
- Typos, Typos - travisbmartin
- Improve skill shot example to prevent race condition and add timeout - jab based on question from mike wiz
- Document scoring based on logic blocks - jab based on question from alex
- Describe how to debug crashes with GDB - jab
- How to tune eject_timeouts in ball devices - jab
- Understanding tags in MPF - cfbenn
- Example for using MC with multiple screens - jab based on example from Brian Cox/cfbenn/qcapen
- Document how to use machine and player variables from code - jab
- Document multiple styles for widgets - avanwinkle
- Document how to use start button for mode selection without added new players - jab based on example provided by alex
- Document which hardware rules are used in MPF - jab based on discussion in the forum
- Document Molex KK part numbers for connectors - jab
- Document how to maintain a stable high voltage rail - jab based on suggestion by Hugh in discussion
- Common events and example for shots - jab based on question from Alex
- Autogenerated event lists for events - jab
- Initial documentation for sequence_shots - jab
- Fixed typos - travisbmartin
- Weak flippers mode - jab based question by Brian C and Philip D
- Document how to use widgets from code - cloudjor
- Extend event documentation for game_start - colemanomartin
- Doctor Who carousel example - travisbmartin
- Document sw_flip_events and sw_release_events - jab
- Example game mode with multiple shots which need to be active a the same time - jab and improvements by coleman based on question by Cole M
- Cookbook/tutorial for a super jets mode - travisbmartin
- Document how to send data from MPF to MPF-MC in custom code - cloudjor
- Added a minimal OSC plugin - jab
- Fix typos and links - zach27
- Notes on using multiple playfields - jab based on discussion in forum
- Animating a progress bar - based on discussion in forum
- Adding a picture of a drop target bank - coleman
- Fix typos - travisbmartin
- Update stepper documentation - jab
- Document PD-LED steppers, servos and serial LEDs - jab
Others
New Features¶
- Experimental external Philips Hue platform - jab based on code from Philip D
0.50¶
Released: April 23, 2018
MPF
New Features¶
- Consolidated LEDs, matrix lights, GI, and flashers into a single “light” device. Much cleaner, less code, and unified features across all light types.
- Added RGBA color support (RGB colors plus an alpha channel)
- Hardware fade support for all light (fade-in and fade-out).
- Added segmented displays support
- Added LISY hardware platform support (for Gottlieb System 1 and System 80 machines)
- Added MyPinballs 7 segment display support
- Added P-Roc alphanumeric displays support
- Added Raspberry Pi as a platform (remote via ethernet or local using pigpio)
- Added stepper motor device
- Added motor device (with position and/or end switches)
- Added Trinamics Steprocker platform
- Added SPIKE DMD support
- Support for FAST RGB DMD support
- Added digital output support (either mapped as drivers or lights)
- Added native I2C support on linux (via SMBus)
- Added NXP MMA8451 accelerometer support (via I2C)
- Support fuzz testing (to find crashes in a machine without playing it)
- Added PSU support to manage maximum power usage. Coil pulses can specify a maximum delay which is used to reorder pulses (used by ball devices, score reels and drop targets).
- Improved and broke out game lifecycle events (will start, starting, started, etc.) for game, ball, and turn starts and stops.
- Made many more settings “templatable”
- Logging to syslog
- Cleaned up and simplified shots
- Added Text UI
- Added replay credits
- Added developer documentation website (developer.missionpinball.org)
- Added support for custom named colors
- Added pluggable ejectors and ball counters in ball devices
- Added “mpf service” command to spawn a service cli (similar to service mode or SPIKE game cli)
- Added “mpf hardware scan” to enumerate all hardware platforms
- Added “mpf hardware update_firmware” to send firmware updates to all hardware platforms
Bug fixes & code improvements¶
- Support for Python 3.5 and 3.6 on Windows (including P-ROC libraries)
- Much more type checking
- Improved logic around how playfields are marked active
- Improved how device monitors work
- Improved and added config template values
- Improved multiball locks
- Improved machine variable internals
- Improved ball tracking
- Improved ball handling in ball devices
- Improved Stern SPIKE platform
- Refactored mode device loading, config validation, and config player loading
- Renamed “scoring” to “variable_player”
- Improved high score mode
- More robust score reels
- Performance improvements for fadecandy LED updates
- Performance improvements for smartmatrix devices (separate sender thread)
MPF-MC
New Features¶
- Major display refactoring
- Bitmap fonts
- Relative animation values
- Added widget rotation & scale animations
- Animation values respect initial anchor points
- Simplified, consolidated, & unified DMD, color DMD, and slide frame widgets into displays and display widgets
- New ‘sound_loop’ audio track type optimized for live looping music control driven by events. This specialized audio track type can synchronize playback of multiple looping sounds simultaneously in layers and provides gapless switching to a new set of loops. It is designed to build music that dynamically changes based on events in your game. Only supports in-memory sounds (no streaming).
- New ‘sound_loop_set’ asset type. A sound_loop_set is an asset used to play sounds in a sound_loop track that is basically a grouping of one or more sound assets. The sounds in a loop set are arranged in layers. The master layer contains the sound that establishes the length of the entire loop set. Whenever the sound in the master layer loops, all other sounds in the sound_loop_set will also loop back to the beginning.
- New ‘sound_loop_player’ config_player. The sound_loop_player is a config player that is used to control the playback of sound_loop_sets in a sound_loop audio track. The track_player can also be used with a sound_loop track to control volume and playback state.
- New ‘playlist’ audio track type is designed to provide a comprehensive set of music playing capabilities that include named playlists, playback mode (sequence, random, etc.), cross-fades between sounds/songs/playlists, and more.
- New ‘playlist’ asset type. A playlist is an asset used to group and play sound assets on a playlist track. A playlist is basically an ordered group of sounds/songs typically used to playback music.
- New ‘playlist_player’ config player. The playlist_player is a config player that is used to control the playback of playlists (and their component sounds) in a playlist track. The track_player can also be used with a playlist track to control volume and playback state.
- New sound ‘about_to_finish’ events (configurable for each sound). These post events at a specified time before the sound ends.
- New display_light_player to use your playfield lights as display in MC. Also supports transparency to overlay a graphic/animation above your light shows.
Bug fixes & code improvements¶
- Support for Python 3.5 and 3.6 on Windows
- Significant performance improvements
- Fixed many leaks (especially widgets)
- Animation steps can be run simultaneously
- Bail out when a video codec is missing
- Refactored the entire audio engine code (broke audio_interface.pyx into many different files, individual source files for each track type and base class, eliminated .pxi files and established use of .pxd files)
- Switched back to SDL_Mixer for main audio playback, mixing, and in-memory sound asset loading functions (provide more reliable and faster loading of .ogg and .flac files)
- Allow unlimited sound asset event markers (previously only allowed a fixed number)
MPF-Monitor
New Features¶
- Device list shows all monitorable attributes
Bug fixes & code improvements¶
- Improved performance of light updates/Smooth light shows
0.33¶
Released: April 10, 2017
MPF
New Features¶
- “Ball hold” device (Temporarily hold a ball while something else is happening)
- “Multiball lock” device (Track ball locks towards multiball, including virtual locks, across balls and players)
- Multiball “add a ball” feature
- Added support for Stern SPIKE platform
- Revamped logging
- Additional achievements control events
- BCP ports & interfaces are now configurable
- Drop target “keep up” feature (PWMs reset coil to “lock” target up)
- “Async” events (Events that wait for all handlers to finish before continuing)
- Additional multiball events
- More functions for people building games to use to write tests
- Built-in modes with code can have their code overloaded
- Added score reels to the smart virtual platform
- Allow machine variables to be set via BCP
- Allow setting default high scores
- Add “early save” events to ball saves
- Add all monitorable device properties to conditional events
- Use placeholders in mode timer start & end values
- More options for bonus (hurry ups, skip slides with 0 value, placeholders for score calculations, etc.)
- Improved ball search
- OPP - support for firmware 2.0 and dual wound coils
- MC scriptlets for video modes and code on the MC side
- Support for conditional events
- Template variables which are evaluated during runtime and can use placeholders (timers, logic_blocks, tilt, scoring, bonus_mode, and more)
- Early ball save
- Advanced bonus_mode
- TimedSwitch device - built-in event for flipper cradling and releasing
- Asynchronous logging - This is especially important on windows because logging previously slowed down the game. However, also important in production when under high I/O load or with slow discs.
- Timers work outside of the game now
- New “mpf diagnosis” command
- Scoring to machine variables
- Scoring for other players
- Weights in random_event_player
- Unlimited delay in ball_save to allow video modes or mode selection
- Added Machine vars for all kinds of versions
- Drop Target keep up support
- Multiball add a ball support
- New multiball_lock device which handles virtual saves for multiplayer game
- Allow BCP to bind on all IPs
Bug fixes & code improvements¶
- A lot of miscellaneous bug fixes
- Exiting service mode always put the machine back on free play
- Fixed a ball lock crash
- File loader will not try to load temp files
- Manual plunger in smart virtual platform now works properly
- Refactored ball devices to allow for different types of ball counters & be more robust for unexpected ball situations and different types of eject failures
- Made achievements and achievement groups smarter and more robust (also backported to 0.32)
- Improved log messages for BCP encoding errors
- “Hz” setting is gone (since MPF is now tickless)
- Active eject process trackers are canceled on shutdown
- Randomizer now works with a single element
- Fixed a bunch of small things that caused crashes
- Changed default on-screen DMD pixel settings
- Removed OSC plug-in since it hasn’t worked in over a year and no one uses it
- Better errors on invalid configs
- Catching a lot more config problems
- Improved ball search. Drop Target reset no longer resets ball search
- Better start/stop procedures for modes. no more event races
- Improved extra ball
- Better yaml parsing for unescaped strings
- Performance improvements through better fast paths and offloading of logging from the synchronous path
- BCP version 1.1 with synchronisation during reset
- Improved handling of ball devices with entrance_switch
- Force UTF-8 for configs on windows
- Better errors when loading assets
MPF-MC
New Features¶
- Added a camera widget (live video)
- Allow placeholders and settings
- Added keyboard debugging
- Added warnings if window size & display size aspect ratios are not the same
- MPF-MC now checks to make sure the MPF version it’s talking to is compatible
- Change the default display size to 800x600 if a displays: section is not in the config
- Re-vamped Mac installation procedure. It’s now a “real” install and does not use MPF.app anymore.
- Added a “volume” machine variable
- Added Interactive Media Controller (iMC)
- Added “anchor_y: baseline” option for text widgets
- Added gamma setting for physical DMDs
- Added new relative animation target values
Bug fixes & code improvements¶
- Improved sound asset loading speed (uses SDL_Mixer for loading to memory rather than GStreamer)
- Sound assets can be loaded while videos are playing
- Sound assets can be located in sub-folders as many levels deep as desired (not just a single level)
- Fixed points widget
- Improvements to automated testing on Travis
- widget_player positioning fixed
- Better error messages for malformed slide configs
- Prevent crash in text widget when empty and back is selected
- Changes to support BCP 1.1
0.32¶
Released: Dec 1, 2016
MPF
- Improved achievements and added achievement groups.
- Added relay events and relay queues
- Improved smart virtual platform
- Improved support for System 11 and Gottlieb System 3 style troughs (including using the ball drain as a ball storage location to get one additional ball capacity with no hardware changes).
- Verify that duplicate sections don’t exist in config files
- Check that event handlers are properly formatted before they’re registered
- Added conditional events (handlers that only fire if certain conditions are met)
- You can set starting values for player variables
- Fixed the physical mono DMD and physical RGB (color) DMD
- Added multiball lost event
- Allow devices to have inline config specs
- Added shots with events
- Better OPP platform parsing
- Fixed & improved the high score mode
- Improved service mode
- Added options for “random” events (force next, force all, save per-player, etc.)
- Added events to the BCP monitor (meaning they can be viewed in the MPF Monitor app)
- Added
-f
command line option to force all assets to load on boot for testing purposes - Added scoring options (add, replace, block)
- Use color “on” for LED default colors
- Allow multiple config player entries to fire from the same event
- Ensure that events created by the MC are sent to MPF
- Added machine vars for P-ROC and FAST hardware revisions
- Added combo switches (for “flipper cancel”, two-button skill shots, etc.)
- Lots of little bug fixes…
MPF-MC
- Fixed the widget z-order layering bug (this has been backported to 0.31). Widget orders are now higher value z: settings are on top of lower value ones.
- Negative z: values are no longer used to target parent slide frames. Instead,
target: (name)
is used. - Cleaned up debug logging so BCP frames are not included in it by default
- Events that are natively posted in the MC are now sent to MPF
- Fixed a bug to ensure that the slide_active event is only posted once per frame
- Fixed a bug that prevented slide frames from being animated
- Fixed a bug where videos were not stopping
- Allow the same slide to be used on multiple displays
- Switch to GStreamer instead of SDL_Mixer for loading and streaming sounds. (SDL2 still used for all sound output.)
- Sound file streaming is now supported from any track (streamed from disk instead of preloaded into memory)
- New “track_player” config controls sounds at the track-level (fade, volume, play, pause, stop, etc.)
- Custom loading & unloading events at the individual sound level.
- Lots of little bug fixes…
0.31¶
Released: Sept 19, 2016
MPF
- MPF is now “tickless”, meaning everything runs faster, but with less overhead
- Improved flow control for FAST hardware serial communication
- Improved BCP communications
- Improved serial communications for all devices which use serial
- Additional options for ball saves
- Removed many threads which makes everything simpler and faster under the hood
- Improved “virtual” and “smart virtual” platforms
- Prevent broken data files from crashing MPF
- Added a basic service mode (this is just a start, much more to come)
- Detect balls that jump between playfields
- Prevent duplicate rules being written to P-ROC and P3-ROC controllers
- Allow mode config files to be broken into multiple files
- Allow multiple multiball modes to run at once and add options for how it tracks them
- Allow ball locks to wait for a ball to drain before releasing their locked balls
- Added the ability to use matrix lamps/LEDs at individual channels for RGB LEDs
- Re-added high score mode (Which was in 0.21 and removed in 0.30)
- OPP platform improvements
- Improved error messages for config file errors
- Improved the way the “mpf both” command works on all platforms
- Added ability to step backwards in shows
- Refactored and improved show player
- Added ball search for servos
- Added default colors to RGB LEDs
- Added support for nested shows
- Added the “LED Group” device (am easily-configured strip of LEDs which can be strobed, pulsed, etc.)
- Added kickback mechanisms
- Added magnets
- Added blocking show queues
- Many bug fixes…
MPF-MC
- Audio library improvements (sound fading, markers, start position, instance limiting, ducking improvements)
- Allow widget events based on when slides are shown, hidden, etc.
- Improved error if you try to target a widget to an invalid slide
- Added default DMD fonts
- Many bug fixes…
0.30¶
Released: July 15, 2016
- Python 3 required
- Mac OS X support
- The Media Controller is now a separate package from MPF
- The MPF-MC has been completely rewritten from scratch (based on Kivy, SDL2, OpenGL, and Gstreamer)
- GPU is used for graphics
- Brand-new audio interface specifically written for pinball audio, which includes advanced feature like ducking, attack, attenuation, etc.
- Proper Python package installers, and inclusion in PyPI so install can be done via pip.
- System-wide mpf launcher utility with pluggable commands
- New MPF clock module replaces the old timing and timers
- All shows are driven by MPF
- Show content is “played” by the standard config_players
- Playlists become shows
- “Tocks” are gone, shows now operate on real-world time
- Light scripts are gone, replaced by placeholder “tokens” in shows
- Named colors
- Hardware accelerated LED fades
- Asset Pools
- Ball Search
- Accelerometer-based tilts
- Servo support
- Text string support
- Player achievements
0.21¶
Released: Dec 1, 2015
- SmartMatrix “real” RGB LED Color DMD support.
- System 11 support.
- High Score mode.
- Credits mode.
- Tilt mode.
- Smart virtual platform. (This is the new default platform.)
- New display elements: Character Picker and Entered Characters.
- Devices can be created and changed per mode.
- Machine variables.
- Untracked player variables.
- Central config processor, data manager, file manager, and file interfaces. This paves the way for config files in formats other than YAML.
- Added support for combo manual/auto plungers.
- Events for ball collection process.
- Driver-enabled devices.
- External light shows, controllable via BCP. (Thanks Quinn Capen!)
- Created a starter game machine config template you can use for your own machines.
- Started adding unit tests. (We’re at the very beginning of this, but we have full coverage of the ball device, the event manager, and the tutorial configuration files.)
- Rewritten driver/coil device interface.
- Rewritten ball device and ball controller code. (Thanks Jan Kantert!)
- Rewritten score controller.
- Rewritten display & slides modules.
- Many improvements and features added to ball saves.
- Python 2.7 is now required. (Previous releases would also run on Python 2.6)
- Logic blocks can now persist between balls
- Fixed & enhanced the asset loading process.
- Many improvements and features added to modes and the mode controller
- Multiple config files can be chained together at the command line
- Improved text display element.
- Improved event manager and event dispatch queue
- Moved all utility functions to their own class.
0.20¶
Sept 14, 2015
- The targets and shots modules have been combined into a single module called shots.
- The new shots module adds several new features, including:
- Shots can be members of more than one shot group, and added and removed dynamically.
- Sequence shots can track more than one simultaneous sequences. (e.g. two balls going into an orbit at essentially the same time will now count as two shots made.)
- Shots are mode-aware and will automatically enable or disable themselves based on modes starting and stopping.
- Modes now work outside of a game.
- “Machine modes” have been removed. Attract and game machine modes are now regular modes.
- This makes it easier to have always-running modes (volume control, coin door open, coin & credit tracking).
- This makes it possible to configure custom branching of mode-flow logic. (i.e. long-press the start button to load a different game mode, etc.)
- Significant performance improvements for both starting MPF and
starting a game:
- Reading the initial states of switches on a P-ROC is significantly faster.
- The auditor now waits a few seconds before writing its audit file, and it does it as a separate thread. Previously this was slowing down the game start and player rotation events.
- The way modules that need to track “all” the switches (like the auditor and OSC) was changed and now it doesn’t bog things down.
- A device manager now manages all devices. (This will enable future GUI apps to easily be able to browse the device tree.)
- Devices can be “hot added” and removed while MPF is running. This includes automatic support to add and remove devices per mode.
- All device configuration is specified and validated via a central
configuration service. This has several advantages:
- The config files are now validated as they’re loaded. For example, if there a device has a settings entry for “switches”, MPF will now validate that the strings you enter in the are actual switch names. It will give you a smart error if not.
- This paves the way for supporting config files in formats other than YAML. (JSON, XML, INI, etc.)
- This led to the removal of about 500 lines of code since all the config processing was done manually in each module before.
- The config processing is more efficient and less-error prone since it’s not written from scratch for each module.
- There’s now a master list (in mpfconfig.yaml) of all config settings for all device types.
- The config processor and validator can run as a service to support the back-end business logic behind future GUI tools which could be used to build machines.
- If you’re configuration has an unrecognized setting, the config validator will load the config file migrator to tell you what the updated name is for the section it doesn’t recognized.
- Shot rotation has been improved:
- You can now specify the states of shots you’d like to include or exclude. (i.e. only rotate between incomplete shots.)
- You can specify custom rotation patterns (i.e. a “sweep” back-and- forth instead of a simple left or right rotation)
- A ball lock device was added to make it easy to specify ball locks.
- A multiball device was added.
- A simple ball save device was added.
- Created a “random_event_player” that lets you trigger random events based on another event being posted.
- Centralized debugging
- Drop targets and drop target banks have been simplified and separated from shots.
- The states of switches tagged with ‘player’ will be passed to the game start mode, allowing branching based on which combinations of switches were held in when the start button was pressed. (The amount of time the start button was held in for is also sent.)
- Official support for multiple playfields via config files
- Added x, y, and z positions to lights and leds
- Exposed wait queue events to mode configs, allowing code-less creation of modes that can hook into game flow (bonus, etc.)
0.19¶
Released: August 6, 2015
- Completely rewritten target and drop target device module,
including:
- Per-player state tracking for targets
- Target “profiles” that control how targets behave, completely integrated with the mode system
- Light show “sync_ms” which allows new light shows to sync up with existing running shows.
- Timed switch events can be set up via the config files.
- Added “recycle_time” to switches. (Switches can be configured to not report multiple events until a cool-down time has passed.)
- Created an events_player module
- Player variables in slides automatically update themselves when they change. (No more need to find an event to tie the slide to in order for it to update!)
- Device control events exposed via the config files
- Automatic control of GI
- Activation and deactivation events can be automatically created for every switch.
- Allow multiple playfield objects to be created at once (for head-to- head pinball)
- Added support for FAST Pinball’s new WPC controller
- Added a Linuxshell script to launch mc.py and mpf.py
- Created the config file migration tool
- Added per-timer debug loggers
- Standardization of many non-standard config file naming conventions
- Color logging to LEDs
- Added P3-ROC switch test tool
- Added reset to mode timer action list
- Added restart feature to mode timers
- Flipper Device: Add debug logging to rules
- FAST:Added minimum firmware version checking for IO boards
- Added “restart” method to logic blocks
- Text display element min_digits
- Allow system modules to be replaced and subclassed
- Added configurable event names for switch tag events
- Added callback kwargs to switch handlers
- Added light and LED reset on machine mode start
- Added default machine and mode delay managers
0.18¶
Released: June 2, 2015
- FadeCandy and Open Pixel Control (OPC) support. This means you can use a FadeCandy or other OPC devices to control the LEDs in your machine.
- Rewritten FAST platform interface. It’s now “driverless,” meaning you no longer need to download and compile drivers to make it work.
- Added support to allow multiple hardware platforms to be used at once. (e.g. LEDs can be from a FadeCandy while coils are from a P-ROC.) You can even use multiple different platform interfaces for the same types of devices at once (e.g. some LEDs are FadeCandy and others are FAST).
- Added support for GI and flashers to light shows
- Added activation and deactivation events to switches
- Added support for sounds in media shows
- Added per-sound volume control
- Added support for P-ROC / P3-ROC non-debounced switches
- Exceptions and bugs that causeMPF to crash are now captured in the log file. (This will be great for troubleshooting since you can just send your log. No more needing to capture a screenshot of the crash.)
- If a child thread crashes, MPF will also crash. (Previously child threads were crashing but people didn’t know it, so things were breaking but it was hard to tell why.)
- MPF can now be used without switches or coils defined. (Makes getting started even easier.)
- “Preload” assets loading process is tracked as MPF boots, allowing display to show a countdown of the asset loading process
- Added restart_on_complete to mode timers
- Smarter handling of player-controlled eject requests while existing eject requests are in progress
- eject_all() returns True if it was able to eject any balls
- Playfield “add ball” requests are queued if there’s a current player eject request in progress
- Created a smarter asset loading process
- The attract mode start is held until all the “preload” assets are loaded
- Updated how the game controller tracks balls in play
0.17¶
Released: May 4, 2015
- Broke MPF into two pieces: The MPF core engine and the MPF media player
- Added support for the Backbox Control Protocol (BCP)
- Added device-specific debugging for LEDs.
- Added version control to config files.
- Added volume control.
- Switches that you want to start active when using virtual hardware are now added to the virtual platform start active switches: section instead of being a property of the keyboard: entry.
- Converted several former plugins to system modules, including shots, scoring, bcp, and logic blocks.
- General performance improvements. (Running MPF on my machine used to take about 50% CPU. Now it’s down to 15%.)
0.16¶
Released: April 9, 2015
- Added slide “expire” time settings to the Slide Player.
- Added Demo Man as the sample game code.
- Added start_time configuration parameter for music in the StreamTrack
- Added the SocketEvents plugin
- Created the LightScripts and LightPlayer functionality.
- Change light script “time” to “tocks”
- Created a centralized config processing module
0.15¶
Released: March 9, 2015
- Added support for game modes.
- Converted several existing modules to be mode-specific, including:
- LogicBlocks
- SoundPlayer
- SlidePlayer
- ShowPlayer
- Scoring
- Shots
- Created an Asset Manager and converted the images, animations, sound, and show modules to use it instead of each handling their own assets.
- Created an asset loader which creates a background thread to load each type of asset.
- Added an AssetDefaults section to the asset loader to specify per- folder asset settings
- Created a universal player variable system
- Added movie support (for playing MPEG videos on the LCD and DMD). They’re available as a standard display element type which means they can be positioned, layered as backgrounds, etc.
- Created a generic ModeTimers class that can be used for timed modes and goals. (With variable count rates, support for counting up and down, multiple actions which can start, stop, pause, and add time, etc.)
- Changed logic blocks so they maintain all their states and progress on a per-user basis.
- Added a “double zero” text filter. (Used to show zero-value scores as “00” instead of “0”.)
- Updated the display code so that it doesn’t show a slide until all that slides assets have been loaded.
- Renamed the “sphinx” folder to “docs”.
- Broke the three phases of machine initialization into 5 phases.
- Created the mode timer
- Renamed the “HitCounter” logic block to “Counter” and updated it to be more flexible so it can track general player-specific counts (both up and down), for example, total shots made, combos, progress towards goals, etc.
- Changed window section of config so it uses the slide builder.
- Added the ability to control lights and LEDs by tag name in shows.
- Modified the switch controller so events from undefined switches simply log a warning rather than raises an exception and halting MPF.
0.14¶
Released: February 9, 2015
- Completely rewritten ball controller.
- Completely rewritten ball device code.
- Major updates to the diverter device code.
- Creation of a new playfield module that’s responsible for managing the playfield and any balls loose on it.
- Completely rewrote the “player eject” logic. (This is what happens when the game needs to wait for the player to push a button to eject a ball from a device.)
- The ball search code was moved from the game controller to the playfield device module.
- Different types of events were broken out into their own methods. For example, to post a boolean event, instead of calling event.post(type=’boolean’), you now use event.post_boolean(). There are similar new methods for other event types, like post_relay() and post_queue().
- Added a debug option for ball devices which enables extra debug logging for problem devices.
- Tilt status was removed from the machine controller. (It was inappropriate there. Tilt is a game-specific thing, not a machine- specific thing.)
- Virtual Platform: default NC switch states fixed
0.13¶
Released: January 16, 2015
- Major update to the sound system, including:
- Support for multiple sound tracks (“voice”, “sfx”, “music”, etc.), each with their own channels, settings, volume, etc.
- Using background threads to automatically load sound files from disk in the background without slowing down the main game loop.
- Support for streaming sounds from disk versus preloading the entire sounds in memory.
- Support for sound priorities and queues, so sounds can pre-empt other sounds if they have a higher priority.
- System-wide volume control with settable steps.
- Support for the v1.0 update of FAST Pinball’s libfastpinball library. (Basically we updated the FAST platform interface to support their latest firmware and drivers)
- Support for flashers. (Previously flashers were just driven like any other driver. Now they are their own device with their own flasher- specific settings.)
- Game Controller: Changed the player rotate routine to be driven from the game_started event so the player object isn’t actually set up until the game has finished being set up.
- Pygame: Moved the Pygame event loop to the machine controller and out of the window manager. This lets us use Pygame events even if we don’t have an on screen window. (This is needed for the sound system.)
- Display: Moved the SlideBuilder instantiation earlier in the boot process so it’s available to other modules who want to use it when they’re starting up. This will let us get the “loading” screen up earlier in the boot process.
- Switch Controller: Added a method to dump the initial active states of switches to the log. This is needed for our automated log playback utility so it can set the initial switches properly.
- Ball Devices: fixed a typo on the cancel ball request event
0.12¶
Released: December 31, 2014
- Added full display and DMD support, with support for physical DMDs, on screen virtual DMDs, color DMDs, and high res LCD displays.
- Added transitions which flip between display slides with cool effects.
- Added decorators which are used to “decorate” display elements (make them blink, etc.)
- Added display support to shows so that shows can now combine display and lighting effects
- Added a Slide Builder which can assemble slides from text, image, animation, and shapes from shows and the config files.
- Added a SlidePlayer config setting which can show slides based on MPF events
- Modified the Virtual DMD display element so that it can render on screen DMDs that look more like real pixelated DMDs
- Added a font manager that lets you define font names and specify default settings (sizes, antialias, color, etc.)
- Added TrueType font support
- Added support for stand image types to be displayed on the DMD
- Added .dmd file type support for images and animations
- Addedthe OSC Sender tool
- Added the Font Tester tool
- Added the multi-language module which can replace text strings with alternate versions for multi-language environments and other (e.g. “family-friendly”) text replacements
- Improved the diverter devices so they have knowledge of what ball devices and diverters are upstream and downstream, allowing them to automatically activate and deactivate based on where balls need to go.
- Improved the ball device class so ball devices are smarter about how they interact with target devices. (e.g. a ball device will automatically eject a ball if its target device wants a ball.)
- Added support for the P3-ROC
- Added many more events
- Modified displays so they can each have independent refresh rates
0.11¶
Released: December 1, 2014
- Created a Display Controller module which is responsible for handling all interactions with all types of displays, including DMD, LCD, alphanumeric, 7-segment, etc.
- Created a DMD display module which controls both physical DMDs as well as on screen representations of physical DMDs
- Created a Window Manager, a centralized module which manages the on screen window, including full screen and resizable support
- P-ROC platform interface: Built the DMD control code
- FAST platform interface: Built the DMD control code
- Switched from Pyglet to Pygame
- Created a Sound Controller
- Created a Game Sounds plug-in that lets you control which sounds are played and looped based on MPF events
- Added PD-LED support
- Added support for P3-ROC SW-16 switch boards
- Switch Controller: Added verify_switches() method which verifies that switches are in the hardware state that MPF expects.
- Switch Controller: Adding logging so it can track when duplicate switch events were received
- LEDs: added on() and off() methods and “default color” support
- Ball Device: created _ball_added_to_feeder() and made it so the device watches for a ball entering and will request it if it needs it.
- Changed the command line options so you don’t have to specify the .yaml extension for your configuration file
- Changed the command line options so you (optionally) don’t have to specify the “machine_files” folder location
- Created default machine_files folder location settings in the config file
- Added support for absolute or relative paths in the command line options
- Added support for X/Y coordinates to LEDs and Lights for future light show mapping awesomeness.
- Created an early, early version of the Playfield Lights display interface which lets you “play” Pygame shows on your playfield lights
- Added system default font support
- Added a player number parameter to the player_add_success event
- Added a default MPF background image for the on screen window
- Added many more default settings to the system default mpfconfig.yaml file
- Virtual platform interface: Updated it so that it works when hardware DMDs are specified in the config files
0.10¶
Released: October 25, 2014
- Added enable_events, disable_events, and reset_events to devices.
- Removed the First Flips plug-in. (Since the thing above replaces it)
- Added support for network switches and drivers for FAST Pinball controllers.
- Added support for multiple USB connections to FAST Pinball controllers to separate main controller traffic from RGB LED traffic.
- Changed default debounce on and off times to 20ms for FAST Pinball controllers.
- Individual targets hit in target groups will now post events
- Changed the default show priority to 1 so it will restore lights that weren’t set with a priority by default
- Driver: Added a power parameter to driver.pulse()
- Score Reel: Added resync events to individual reels
- Score Reel: Changed repeat_pulse_ms config setting to repeat_pulse_time.
- Score Reel: Changed hw_confirm_ms config setting to hw_confirm_time.
- Changed default pulse time for all coils to 10ms
- Coils: (Fast): Added separate debounce_on and debounce_off settings
- Info Lights: Forced game_over light to off when game starts
- LEDs: Added force parameter to the off() method
0.9¶
Released: October 7, 2014
- Added a “Logic Blocks” plug-in which lets game programmers build flowchart-like game logic with the config files. No Python programming required!
- Created a “First Flips” plug-in which you can use to get your machine flipping as fast as possible. (This was written as part of our Step-by-Step Tutorial for getting started with MPF.)
- Added Tilt and Slam Tilt support. (This is built via our Logic Blocks, so they’re very advanced, supporting grouping multiple quick hits as a single hit, settling time (to make sure the plumb bob is not still swinging when the next ball is started, etc.).
- Added Extra Ball / Shoot Again support
- Created OSC interfaces for /audits
- MAJOR rewrite to the ball controller and ball device modules
- Created a non-instrumented optimized software loop which is as lean as possible if you’re running your game on a slow computer. (I’m looking at you Raspberry Pi!) Note: other single board computers are fine, like the BeagleBone Black or the ODOID, but man the Pi is slow.
- Added the ability to pull “data” from MPF via the OSC interface, so we can put player scores, ball in player, etc. on an iPhone, iPad, or Android device.
- Added an OSC audit interface so you can view audit data via your mobile device.
- Created an “Info Lights” plug-in which turns on or off lights automatically based on things that happen in the game. (Which player is up, current ball, tilt, game over, etc.) This is typically used in EM games, but of course the plug-in can be used wherever you need it.
- Finished the code for our Big Shot EM-to-SS conversion. This is included as a sample game in MPF, so you can see our config files and
- Logic Blocks which can be helpful when creating your own game.
- Fixed up drop targets to support the new lit/unlit scheme
- Added support for default states to targets and target groups (stand ups, rollovers, drop targets, etc.), including events that are posted when they are hit while lit or unlit, and the ability to light or unlight them via events
- Added Start Button press parameters which are automatically sent to the game when the start button is pressed. This is for things like how long the button was held and what other buttons where active at the time. (Start * Right Flipper, etc.)
- Added a “pre-load check) to plug-ins that allows them to test whether they’re able to run before they load and only load if everything checks out. (This means that a plug-in will no longer crash if a required Python module is missing.)
- Added ‘no_audit’ tag support. (If you add ‘no_audit’ as a tag to a switch, then the Auditor will not include that switch in the audit logs.)
- Created Action Events for shutting down the machine and added shutdown tag support (so you can cleanly shut down the machine simply by posting and event or pressing a button which is tagged with “shutdown”)
- Added performance data logging to the machine run loop (so it now tracks the percentage of time spent doing MPF tasks, hardware tasks, and idle).
- Added a reload() method to Shows which causes that show to reload itself from disk. This is nice for testing shows since you can reload them without having to restart the machine each time.
- Added support for null steps in shows (literally a step that performs no action). This makes it easier to get timing right for music shows.
- Added the ability to force a light or LED to move to a given state, regardless of its current priority or cache.
- Added a method to test whether a device is valid. This will be used for our config file validator
- Added option for restart on long start button press
- Added option to allow game start with loose balls
- Score reels maintain a valid status, allowing other modules to know whether the score reels are showing the right data or not.
- Score reels now post an event when they’re resyncing, allowing other modules to act on it. (For example the score reel controller uses this to turn off the lights for a score reel while it’s resyncing.)
- Added option to remove all handlers for an event regardless of what their registered **kwargs are.
- Added mpf command line options for verbose to console and optimized loops. (Now we can support different logging levels to the console and log file, meaning you can configure it so you only see important things on the console but you can see everything in the log file.)
- Added light on/off action events
- Added action events and methods to award the extra ball
- Created ball device disable_auto_eject() and enable_auto_eject() methods. This is how we handle player-controlled ejects (like when a ball starts or they’re launching a ball out of a cannon).
- Changed scoring from “shots” to “events”
- Changed the hardware rules for clearing a rule so it disables any drivers that were currently active from that rule
- Updated are_balls_gathered() so that if you pass it a tag which doesn’t exist, it always returns True
- Added management of switch handlers to machine modes so they can be automatically removed
- Changed switch handlers so they process delays from new handlers that are added
- Removed “standup” target device type (it was redundant with “target”)
- Moved auditor, scoring, and shots out of system and into plugins
0.8¶
Released: September 15, 2015
- Platform support for FAST Pinball hardware
- RGB LED support, including settings colors and fades
- Created target and target group device drivers for drop targets, standups, and rollovers (including events on complete, lit shot rotation, etc.)
- Created an OSC interface to view & control your pinball machine from OSC client software running on a phone or tablet
- Changed our “light controller” to a “show controller” and added support for things other than lights (like coils and events). So now a show can be a coordinated series of lights, RGB LEDs, coil firings, and events.
- Created an “event triggers” plugin which lets you configure series of switches that trigger events, including custom timings, decays, and resets. (We use this for our titlt functionality but it’s useful in other ways too.)
- Created the auditor module
- Created an intelligent diverter device driver (with hardware switch trigger integration)
- Created GI device drivers
- Created a system-wide MPF ‘defaults’ configuration file
- Created templates for new machines, new scriptlets, and new plugins
- Modified the on screen window to become a “real” LCD display plugin.
- Renamed “hacklets” to “scriptlets”
- Created a scriptlet parent class to make them even easier to use
- Broke the hardware module into “platforms” and “devices”
- Major rewrite of how the machine controller loads system modules and devices
- Shows now auto load
- Added the ability to attach handlers to lights so you can receive notifications of light status changes
- Reworked the EM score reel update process to simplify and streamline it
0.7¶
Released: September 4, 2014
- Support for lights and light shows.
- An on-screen display of game metrics like score, player, and ball number.
- A “hacklet” extension architecture which lets you add python code to finish up the “last 10%” of your game that you can’t control via the machine configuration files.
- A formal plug-in architecture which allows easy creation and modification of plug-ins that will survive core MPF framework updates.
- Cleaned up the machine flow and made that controllable via the config files
- Changed the -x command line option so it doesn’t use fakepinproc, got rid of the p_roc methods that detected fakepinproc. (Now even with the P-ROC platform it will use our virtual platform interface when no physical hardware is present. This means you don’t need pyprocgame to use fakepinproc.
- Changed the command line options to break out machine root from config files
- Moved command line options to their own python dictionary
- Changed time.clock() back to time.time() since clock was not real world which affected the light shows
- Created new events to capture start and stop of machine flow modes
- Added light support to P-ROC platform interface
- Reorganized the machine files into machine-specific subfolders
- Created an int_to_pwm() static method in Timing
0.6¶
Released: August 19, 2014
- Addition of a Shot Controller, allowing you to configure and group switches which become shots in the machine. (Read more about the concept of shots in our blog post from last week.)
- Addition of a Scoring Controller, allowing you to map score values to shots (and general scoring support for the machine).
- Addition of the Score Reel Controller, Score Reel devices, and Score Reel Group devices for mechanical score reels in EM-style machines. (Details here.)Switched entire framework timing over to real time system clock times (time.clock()) instead of ticks (for delays, tasks, switch waits, etc.)
- Changed ball controller that if it counts more balls than it thought it had, it will invoke ball_found()
- Changed the switch controller so it will ignore new switch events if they come in with the current status the switch already is
- The switch controller will ignore repeat switch events from the hardware if they are the same state that the switch was in before
- Added chime support for EM-style machines
- Changed game_start event to a queue
- Change game_start event name to game_starting (some of these entries might seem trivial, but I also use this list to track the changes I need to make to the documentation)
- Created a queue for adding new tasks so our set won’t change while iterating
0.5¶
Released: August 5, 2014
- Created a single device parent class that’s used for all devices.
- Rewrote and cleaned up devices. Now coils, switches, and lights are all devices, as are the more complex ones.
- Added “events” to the keyboard interface. This means you can use the keyboard to post MPF events (along with parameters).
- Separated out ball live confirmation and valid playfield
- Built a bunch of valid playfield methods
- Changed ball_add_live_request from direct calls to events so they’d be slotted in properly
- Broke valid playfield out into its own module
- Made the ball device “entrance” switch work
- Built a quick “coil test” mode
- Added kwargs to event handlers (meaning you can register a handler with kwargs)
- Figured out how to handle the “first time” counts of ball devices
- Added checks to attract mode to make sure all balls are home, and to the ball controller to prevent game start if all balls are not home
- Changed ejects to events. (So if you want to request that a device ejects a ball, you post an event rather than calling the device)
- Changed the balldevice_name_eject_request to be the event you use to call it, rather than the notification of the eject attempt.
- Created a get_status() method for ball devices
- Created a gather_balls() method and wrote the code that will send all the balls home before a game can be started.
- Updated stage_ball() code so it didn’t ask for another ball if there was already an eject in progress
- Moved detection of how balls fall back in out of devices and into the events that watch for the entrance
- Create player and event based ejects. (This is a system to allow players or events to eject balls from ball devices. Useful for cannons like in STTNG.)
- Got stealth and auto eject out of the ball device code since they shouldn’t care about that.
- Rewrote a lot of the ball device stuff.
- Added a manual eject capability for devices without eject coils
- Moved around some things between the ball controller and ball devices so that everything lives where it ‘makes sense’
- Added method to check whether an event has any handlers registered for it.
- Ball devices now post events based on tags when balls enter them
- Ball devices can now eject their ball if no event is registered. This will prevent balls from getting “stuck” in unconfigured devices and will make prototyping on new machines faster.
- Changed event logging to show “friendly” names of handlers
- Converted flippers to use a config dictionary instead of variables
- Cleaned up the eject confirmation and valid playfield functionality
- Added a remove_switch_handler method to the switch controller
0.4¶
Released: July 25, 2014
- MAJOR rewrite of how the hardware platform modules interact with the framework’s hardware module and how hardware is configured in general. It’s way simpler and cleaner now. :)
- Created a parent class for Devices
- Cleaned up the way hardware objects use their parent class
- Fixed the ball controller so it doesn’t get confused on the initial count after machine start up.
- Cleaned up switch processing and added a logical parameter so we only have to do all the conversion for NC or NO in one place
- Renamed the none interface to virtual. Rewrote it with the new platform interface way of working.
- Added support for holdPatter in coils
- Change add_live() to use tags instead of the plunger device
- Made it so many things, like ball search, autofires, etc. would not crash the machine if they weren’t there.
0.3¶
Released: July 16, 2014
- Changed the way config files are loaded by making Config a normal section of any config file instead of using a special initial configuration file that did nothing but point to additional files. Details here.
- Created a virtualhardware platform for virtual / software only testing that does not require P-ROC or FAST drivers.
0.2¶
Released: July 11, 2014
- Added docstring documentation
- Added /sphinx folder and got the sphinx html docs included
- Created the first version of the documentation
0.1¶
Released: June 27, 2014
- Command line parameters to select real or fake (simulated) controller hardware.
- Command line parameters to select logging level
- Command line parameters to select the location of the initial config file
- Reads an initial config file which is a list of additional config files
- Processes those config files in order to build a config dictionary
- All platform-specific hardware code is isolated into its own module. Config files specify which platform is used. All game code is 100%interchangeable between platforms.
- Game loop runs with configurable loop rate. System timer tick event is raised every tick.
- Periodic and one-time use timers can be setup
- Switches, Coils, Lamps, and LEDs are read in and configured from the config files
- Switch events are read from the hardware
- Driver commands can be sent to the hardware
- Autofire drivers are automatically configured from the config files. They can be enabled, disabled, and reconfigured as needed.
- Flippers are automatically configured based on config files. They can use EOS or not, and be based on two coils (main/hold) or one coil with pulse+pwm. Multiple coils can be connected to the same switch, and vice-versa.
- The computer keyboard can be used to simulate switch presses. Key map configuration information is stored in the config dictionary. It supports momentary, toggle (push on / push off), and inverted (key press = open) key modes. Also supports combo key mapping (Shift, Ctrl, etc.)
- A switch controller receives all notifications of debounced hardware switch events.
- Can specify timed switch modes that trigger certain methods. (i.e. do blah() when switch_1 is active for 500ms.)
- Event manager handles system events, including registering handlers, priorities, aborting events, and maintaining a queue.