The SkeletonGame Event System
A major goal of SkeletonGame is to keep you from having to wrestle with implementing the logic that controls the typical pinball game state stuff (e.g., is a ball starting? stopping? drained? tilting?). The idea is that the majority of your code can live in “modes” and your modes will be notified about these game-play events firing. To be notified of these events, your mode should provide a method with the same name as the event, and your mode needs to be active (unless otherwise noted in the table). Your mode will be notified of the event by the framework calling your method. Modes with higher priority will receive the event first. Returning a number (of seconds) will slow the event propagation so that your mode can do whatever it needs to without interruption from a lower event. If an argument is specified, your method can receive that argument and use it to gain additional information about the specific event.
The following table summarizes the current events supported in SkeletonGame (dev branch) as of 3/18/2017:
event name | fired when… | return value delays… |
---|---|---|
evt_balls_missing |
the trough reports insufficient balls, blocking the start of a game | no next function, so return value is irrelevant |
evt_balls_found |
a previous search for balls (that had blocked game start) has been resolved | nothing to delay |
evt_game_starting |
the user has pressed start from attract mode | return value delays the actual start of the game |
evt_player_added $ |
called every time a player is added to the game. Will be called at least once (after evt_game_starting ); argument is the newly created player |
no delay |
evt_ball_starting |
called when a ball is about to start for a player (prior to the ball being placed in the shooter-lane, flipers being enabled, etc) | return value delays the actual start of the ball |
evt_ball_saved |
The moment a ball has been saved by the ball saver | no delay |
evt_shoot_again $ |
a ball has drained but an extra ball is available; NOTE: evt_ball_starting WILL fire after this as a ball will be starting after this |
delays the start of the ball |
evt_ball_ending |
the final “in-play” ball has drained; args=(shoot_again,last_ball) to indicate if the player has any extra balls, and/or if this is the player’s last ball. |
the end ball process, which will initiate a bonus tally and eventually start the next ball |
evt_tilt_ball_ending |
ALTERNATIVE to evt_ball_ending when the game has been tilted. evt_ball_ending will NOT fire. This event indicates all balls are back. Good place to admonish the player (note that evt_tilt will have fired before this, if not also evt_tilt_warning ) |
either end of this ball or slam_tilt complete (game reset) |
evt_single_ball_play |
called when the number of balls in play decreases to 1. Indicates the game is no longer in a multiball mode | No return value |
evt_tilt_warning |
tilt switch has been tripped; arg is number of times the player has been warned | nothing |
evt_game_ending |
the game has ended. All balls are done. Will also fire following a slam-tilt | the game ending sequence follows; fire high score entry, then game ended |
evt_initial_entry |
if the player has been awarded a high score of some sort; this event will fire before each individual high score entry prompt. Arg is the category record of the specific award. This event may potentially multiple times after each entry has been entered. | blocks the actual entry of initials |
evt_game_ended |
after high score entry is complete (will fire even if high score entry does not occur) | this delays the call to reset() that puts the machine in a clean state before the start of the next game |
evt_tilt |
if the player has tilted the machine. the arg is a boolean indicating if the machine was slam tilted (True ) or not (False ) |
n/a |
evt_volume_up |
the volume has been changed. Use this event to show something custom to the player. The arg is the system volume as an integer (0..10) . |
n/a |
evt_volume_down |
the volume has been changed. Use this event to show something custom to the player. The arg is the system volume as an integer (0..10) . |
n/a |
$ –> means even inactive modes will receive this event.