https://pinballmakers.com/wiki/api.php?action=feedcontributions&user=S1500&feedformat=atomPinball Makers - User contributions [en]2024-03-29T14:03:48ZUser contributionsMediaWiki 1.27.1https://pinballmakers.com/wiki/index.php?title=Sound_assignments&diff=998Sound assignments2015-02-09T13:46:53Z<p>S1500: </p>
<hr />
<div><br />
With any pinball machine, quite a few sounds(or voice callouts, or combinations of both) can be applied to various events. Here's just a list. Note that you are not limited to just one sound per event. To add variety to your pin, you could have even just different takes on the same callouts & randomly play one on invocation. For example, on a Sesame Street-themed pinball, you could have a callout of Bert saying "Get the extra ball!" as well as Ernie saying the same thing. <br />
<br />
'''Scoring mechanisms'''<br />
<br />
Standup target (each unique)<br />
<br />
spinner target - make it brief<br />
<br />
Orbit<br />
<br />
Reverse orbit<br />
<br />
ramp shot - <br />
<br />
failed ramp shot - if only 1 switch is hit<br />
<br />
inlane (each unique or shared)<br />
<br />
outlane - negative sound<br />
<br />
pop bumper - numerous sounds<br />
<br />
kicker cup capture<br />
<br />
kicker cup release<br />
<br />
slingshot - unique left/right<br />
<br />
ball launch - invoked when ball [[shooter lane]] switch is released. Example: ''Fun House''<br />
<br />
<br />
'''Modes'''<br />
<br />
mode begin<br />
<br />
mode end<br />
<br />
seconds ticker - for timed modes<br />
<br />
target switch - example: ding sound for switching skill shot targets in ''Terminator 2''<br />
<br />
<br />
'''Other'''<br />
<br />
credit add - partial - example "More please!" ''Star Trek: The Next Generation''<br />
<br />
credit add - complete <br />
<br />
game start<br />
<br />
hit start button w/ insufficient credits<br />
<br />
<br />
'''Gameplay'''<br />
<br />
ball start<br />
<br />
warning<br />
<br />
tilt<br />
<br />
extra ball lit<br />
<br />
extra ball<br />
<br />
shoot again<br />
<br />
determine replay<br />
<br />
replay achieved <br />
<br />
high score achieved - <br />
<br />
"add x credits" - credit awarded(for high score achievement)</div>S1500https://pinballmakers.com/wiki/index.php?title=Sound_assignments&diff=997Sound assignments2015-02-06T14:43:40Z<p>S1500: </p>
<hr />
<div><br />
With any pinball machine, quite a few sounds(or voice callouts, or combinations of both) can be applied to various events. Here's just a list. Note that you are not limited to just one sound per event. To add variety to your pin, you could have even just different takes on the same callouts & randomly play one on invocation. For example, on a Sesame Street-themed pinball, you could have a callout of Bert saying "Get the extra ball!" as well as Ernie saying the same thing. <br />
<br />
'''Scoring mechanisms'''<br />
<br />
Standup target (each unique)<br />
<br />
spinner target - make it brief<br />
<br />
Orbit<br />
<br />
Reverse orbit<br />
<br />
ramp shot<br />
<br />
failed ramp shot<br />
<br />
inlane (each unique or shared)<br />
<br />
outlane - negative sound<br />
<br />
pop bumper - numerous sounds<br />
<br />
kicker cup capture<br />
<br />
kicker cup release<br />
<br />
slingshot - unique left/right<br />
<br />
ball launch - invoked when ball [[shooter lane]] switch is released. Example: ''Fun House''<br />
<br />
<br />
<br />
'''Other'''<br />
<br />
credit add - partial - example "More please!" ''Star Trek: The Next Generation''<br />
<br />
credit add - complete <br />
<br />
game start<br />
<br />
mode begin<br />
<br />
mode end<br />
<br />
ball start<br />
<br />
warning<br />
<br />
tilt<br />
<br />
extra ball lit<br />
<br />
extra ball<br />
<br />
shoot again<br />
<br />
determine replay<br />
<br />
replay achieved <br />
<br />
high score achieved<br />
<br />
"add x credits" - credit awarded(for high score achievement)</div>S1500https://pinballmakers.com/wiki/index.php?title=User:S1500&diff=993User:S15002015-02-05T14:46:20Z<p>S1500: </p>
<hr />
<div>Hi, I'm S1500, and I like to help out wikis.<br />
<br />
I did a significant amount of wiki page creation/editing on pinballcontrollers.com's wiki ,and much of that content will be copied here, but with pseudocode. <br />
<br />
To-do list for myself(or anyone, I guess):<br />
<br />
* Fancy animation for completing bonus lanes - (light/sound + diable on/off but score points briefly)<br />
<br />
* Team scores for 4 player games(add left + add right)<br />
<br />
* ask if anyone's got a modern Stern machine, or check the owner's manual<br />
<br />
* fold-down backbox versus old-fashioned lift-off<br />
<br />
* kickstands for playfields<br />
<br />
* lifting up pf on butt(modern machines) versus tilt back/lay against backbox(older machines)<br />
<br />
* unique guide for kickback left outlanes(differs slightly)<br />
<br />
* fold-down backboxes<br />
<br />
* upright bolt for backboxes<br />
<br />
* rubber feet on back of cab<br />
<br />
* rubber feet on front of backbox(for fold-down)<br />
<br />
* GI light for backbox "book" panel (see Vector)<br />
<br />
* Talk about pf rotisseries (buy, make, borrow) <br />
<br />
<br />
<br />
I do a lot of doodling on my spare time, so why not take a look at my [https://picasaweb.google.com/100199182750726683592/PinballSketchbook?authuser=0&feat=directlink my pinball sketchbook]</div>S1500https://pinballmakers.com/wiki/index.php?title=User:S1500&diff=992User:S15002015-02-05T13:05:00Z<p>S1500: </p>
<hr />
<div>Hi, I'm S1500, and I like to help out wikis.<br />
<br />
I did a significant amount of wiki page creation/editing on pinballcontrollers.com's wiki ,and much of that content will be copied here, but with pseudocode. <br />
<br />
To-do list for myself(or anyone, I guess):<br />
<br />
* Fancy animation for completing bonus lanes - (light/sound + diable on/off but score points briefly)<br />
<br />
* Team scores for 4 player games(add left + add right)<br />
<br />
* ask if anyone's got a modern Stern machine, or check the owner's manual<br />
<br />
* fold-down backbox versus old-fashioned lift-off<br />
<br />
* kickstands for playfields<br />
<br />
* lifting up pf on butt(modern machines) versus tilt back/lay against backbox(older machines)<br />
<br />
* unique guide for kickback left outlanes(differs slightly)<br />
<br />
* fold-down backboxes<br />
<br />
* upright bolt for backboxes<br />
<br />
* rubber feet on back of cab<br />
<br />
* rubber feet on front of backbox(for fold-down)<br />
<br />
* GI light for backbox "book" panel (see Vector)<br />
<br />
<br />
<br />
I do a lot of doodling on my spare time, so why not take a look at my [https://picasaweb.google.com/100199182750726683592/PinballSketchbook?authuser=0&feat=directlink my pinball sketchbook]</div>S1500https://pinballmakers.com/wiki/index.php?title=User:S1500&diff=966User:S15002015-01-31T17:32:20Z<p>S1500: </p>
<hr />
<div>Hi, I'm S1500, and I like to help out wikis.<br />
<br />
I did a significant amount of wiki page creation/editing on pinballcontrollers.com's wiki ,and much of that content will be copied here, but with pseudocode. <br />
<br />
To-do list for myself(or anyone, I guess):<br />
<br />
* Fancy animation for completing bonus lanes - (light/sound + diable on/off but score points briefly)<br />
<br />
* Team scores for 4 player games(add left + add right)<br />
<br />
* ask if anyone's got a modern Stern machine, or check the owner's manual<br />
<br />
* fold-down backbox versus old-fashioned lift-off<br />
<br />
* kickstands for playfields<br />
<br />
* lifting up pf on butt(modern machines) versus tilt back/lay against backbox(older machines)<br />
<br />
<br />
<br />
I do a lot of doodling on my spare time, so why not take a look at my [https://picasaweb.google.com/100199182750726683592/PinballSketchbook?authuser=0&feat=directlink my pinball sketchbook]</div>S1500https://pinballmakers.com/wiki/index.php?title=Status_Report&diff=925Status Report2015-01-28T02:51:53Z<p>S1500: Created page with "A status report can be displayed to the player after they hold down one(or both) flipper buttons after a specified period of time. The report will be shut off as soon as the..."</p>
<hr />
<div>A status report can be displayed to the player after they hold down one(or both) flipper buttons after a specified period of time. <br />
<br />
The report will be shut off as soon as the button(or buttons) is released.<br />
<br />
A typical status report will display:<br />
<br />
Current player <br />
<br />
Current ball<br />
<br />
number of extra balls<br />
<br />
<br />
Also, a status report can show game-specific details, typically pertaining to modes.</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=924Programming2015-01-28T02:45:43Z<p>S1500: /* Ball Trough */</p>
<hr />
<div>After the initial [[Construction#Whitewood|whitewood]] has been built, it is time to bring it to life by programming the control system and adding game rules.<br />
<br />
== Languages ==<br />
<br />
The programming language being used is going to be dictated primarily by the hardware control system chosen. Off the shelf systems such as '''[[Construction#Off-the-Shelf_Boards|P-ROC or Fast]]''' have a close relationship to '''[http://github.com/preble/pyprocgame PyProcGame]''', which is dedicated exclusively to the P-ROC, or the '''[https://missionpinball.com/framework/ Mission Pinball Framework]''' which supports both P-ROC and FAST and is a more higher level programming framework.<br />
<br />
For more lower-level control, there is the [http://github.com/preble/libpinproc libpinproc] library for P-ROC boards, which allow binding into other languages and building of custom frameworks using things like [http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer SDL] or [http://www.sfml-dev.org/ SFML] which provides access to ''OpenGL'' and other graphics APIs.<br />
<br />
If using custom hardware, it is up to the designer to decide on how to interface with the controller.<br />
<br />
=== Pinball Frameworks ===<br />
<br />
* [https://missionpinball.com/framework/ Mission Pinball]: Currently supports both P-ROC and FAST controllers, written in Python<br />
* [http://pyprocgame.pindev.org/ PyProcGame]: Developed specifically for the P-ROC controllers, written in Python<br />
* [https://github.com/preble/libpinproc libPinPROC]: Lower level C library for P-ROC<br />
* [http://benheck.com/amh Python]: Language used for the Pinheck board<br />
<br />
== Rules ==<br />
<br />
As pinball hardware advanced in complexity from simple relays to transistors, so did game rules. ''Electromechanical'' (EM) pinball machines often struggled to register multiple switch hits at the same time, while early ''Solid State'' (SS) games allowed fast response times and multiple concurrent switch hits to be registered. Faster CPUs with more memory allow for the deeper rule sets of modern pinball.<br />
<br />
Rules can be as simple as ''Complete the rollovers for bonus multiplier'' to stacking several mode-scoring multiballs together.<br />
<br />
=== Maintaining State ===<br />
<br />
Deeper rule tracking requires maintaining '''State''', which is a map (in memory) of the current switch conditions, such as:<br />
<br />
* What was the state of all the switches N seconds ago? <br />
* Has anything changed in N seconds?<br />
* How many times has a switch been hit total?<br />
<br />
<br />
These are all ''States'' and the control program keeping track of these allows for modes and other advanced rules.<br />
<br />
Think of an orbit shot: two switches, one of the left side orbit entry, one of the right side orbit entry. An orbit is complete if both switches are hit in order. It takes time for the ball to travel from one side to the other - there may be 5 seconds or more if the ball is slow, struggles to get to the apex, or dribbles down the other side. A failed orbit may count two hits to only one of the switches. It may count only one hit if the ball just makes it and rolls back down. The orbit shot is a good example of needing to know the previous switch state, the question then becomes, how many previous states to track? <br />
<br />
''Example'': If an orbit is a multiball jackpot shot, how to handle when a second ball enters the left orbit before the first ball has triggered the right orbit switch? This means an orbit that can be fed from either direction is probably not a good way to score a jackpot. This is why a ramp shot is very easy to track a jackpot on - ramps have an apex and once your past the apex, any exit switch hit from the ramp is easily countable. <br />
<br />
Another example of an advanced rule would be tracking the order of something - having five drop targets that give an extra bonus if hit in order of one to five, or five to one. This is a variable outside of standard switch state and it has to be managed outside of just target hits, as well as be reset on a ball drain, reset if a mode changes, or reset if the drop targets are reset.<br />
<br />
Code complexity is increased by remembering the state of that variable and which targets have been hit or not between changing players.<br />
<br />
The deeper rules become, the more variables, flags and timers that are needed to be tracked and managed, and the more difficult the code becomes to debug and maintain.<br />
<br />
Some other examples of maintaining state:<br />
<br />
* If a target enables a kickback, will extra kick backs be added if it is already lit?<br />
* Knowing how many balls are in the ball trough before lighting the add-a-ball insert.<br />
<br />
=== Game Logic Flow ===<br />
<br />
For an example of a typical layout of general game rules and how the logic should flow, see the [[Rule Flow]] subpage.<br />
<br />
=== Priority ===<br />
<br />
Modes, display events and sounds all need to be '''prioritized''' relative to each other - for example, background displays or sounds are a lower priority than a switch hit or score display. <br />
<br />
For example, if a high priority sound is playing, and the ball hits a switch that triggers a low priority sound effect, the control program can skip playing the lower priority sound, or play it at a lower volume. Or, if there is a display event for a pop bumper hit, it will be higher priority than the score display.<br />
<br />
== Light Shows ==<br />
<br />
With modern CPU-controlled lamps, it is possible to use general illumination, flashers and playfield insert lamps to produce '''Light Shows''' during Attract mode to bring attention to the game from a passer-by, or while the game is active to convey information to the player.<br />
<br />
For example, lighting lamps from the bottom of the playfield up to the top, then turn them off from the bottom up would be a distinct lamp show used during Attract mode. Below shows part of the attract mode for ''High Speed'' which uses multiple techniques.<br />
<br />
[[Image:high-speed-attract-mode.gif]]<br />
<br />
''Mission Pinball Framework'' supports the concept of [https://missionpinball.com/docs/lighting/light-scripts/ Light scripts], which allow a maker to script what lamps are lit, for how long, and at a specific brightness to produce various effects.<br />
<br />
=== Light Groups ===<br />
<br />
Lights can be put into ''groups'' of similar lamps that allow for specific light effects. For example ''High Speed'' has the circular rev lamps, which lend themselves to a circular lamp effect, or the lamps in a row above them are well suited to a side-to-side effect.<br />
<br />
=== Backbox ===<br />
<br />
Most modern games have abandoned controlled lamps in the backbox to save on costs, but a garage maker has no such restrictions on creativity and can add various light effects to the backglass. Separating sections off to light separately is a common technique.<br />
<br />
[[Image:backbox-light-show.gif]]<br />
<br />
== Settings / Preferences ==<br />
<br />
=== Audits ===<br />
<br />
Auditing for a pinball machine involves keeping a tally of various activities, such as:<br />
<br />
* Total plays<br />
* Total balls played<br />
* Coins dropped<br />
* Replays awarded<br />
<br />
<br />
Creating audit tracking is easy, programming-wise. When a game is over, you would simply increment the "total games played" variable up by one. <br />
<br />
=== Settings ===<br />
<br />
These are values that modify the game rules. Most modern games have dozens of settings that dramatically alter game play. Some examples include:<br />
<br />
* Free Play<br />
* Balls Per Game<br />
* Replay enabled<br />
* Replay score percentage<br />
* Extra balls enabled<br />
* Ball Save enabled<br />
<br />
<br />
=== Diagnostics ===<br />
<br />
Another benefit of the switch from EM to Solid State electronics was the ability to include '''Diagnostics''' as a standard part of new games. The operator can run quick diagnostics on a machine without having to lift the playfield. Some example include:<br />
<br />
* '''Switch Test''': With the playfield glass removed, switches can be individually tested, with the number being shown on numerical scoring games, or the matrix coordinates being shown on DMD pins.<br />
* '''Sound Test''': With modern computer-based pinball machines, this test might be obsolete.<br />
* '''Coil Test''': Coils can be individually fired for checking faults, or all coils fired in order to test all coils.<br />
* '''Light Test''': Insert lights can be checked for burned out bulbs by flashing them individually.<br />
* '''Unique Mechanism Test''': This would apply to parts unique to the machine. An example would be the rotating box on ''Bally Theatre of Magic''.<br />
<br />
== Scoring ==<br />
<br />
For scoring, a separate scoring subroutine should be used and called as needed. This routine can do checks for earning game-wide rewards (points, replay) each time a player's score is incremented. Having it separate also allows for incorporating a ''double score'' mode for adding twice the amount of points without having to incorporate the mode check in each target hit routine.<br />
<br />
Pseudocode example:<br />
<br />
<pre><br />
def add_score(points):<br />
game.curplayer.score = game.curplayer.score + points<br />
if curplayer.score => game.settings.replayscore:<br />
award_replay()<br />
</pre><br />
<br />
=== Bonus Lanes ===<br />
<br />
Bonus lanes are typically located at the top of the playfield, consisting of three or more lanes a ball can fall through at random. A ball falling through one of the lanes will light the lane. A bonus will be awarded, typically with a bonus multiplier (but can vary) if all the lanes are lit. <br />
<br />
Beginning with ''Williams Firepower'', hitting the flipper buttons would cycle the lit lanes left or right, allowing the player to move the unlit lane under the falling ball, achieving the bonus. Bonus lanes are frequently incorporated into the skill shot.<br />
<br />
Layout:<br />
<br />
* One switch per lane. <br />
* Each lane will have one light associated with it. Some games have two lights per lane, creating two sets of bonus lanes (Example: ''Williams Barracora''').<br />
<br />
<br />
Pseudocode example:<br />
<br />
<pre><br />
// variables<br />
cur_bonus = 1 <br />
lane1 = off <br />
lane2 = off<br />
lane3 = off<br />
tmplane = off<br />
<br />
def switch1_hit<br />
lane1 = on<br />
play_sound(boink)<br />
curplayer.add_score(10)<br />
lights.lane1 = on<br />
<br />
def switch2_hit<br />
lane2 = on<br />
play_sound(boink)<br />
curplayer.add_score(10)<br />
lights.lane2 = on<br />
<br />
def switch3_hit<br />
lane3 = on<br />
play_sound(boink)<br />
curplayer.add_score(10)<br />
lights.lane3 = on<br />
<br />
// and the code for cycling the bonus lanes, tied to flipper button<br />
<br />
// code for checking all bonus lanes<br />
def check_all_lanes()<br />
with curplayer<br />
if (lane1 = on) + (lane2 = on) + (lane3 = on)<br />
increase_bonus()<br />
play_sound(yay_bonus!)<br />
display_msg("BONUS INCREASED")<br />
// shut off states & reset!<br />
lights.lane1 = off<br />
lights.lane2 = off<br />
lights.lane3 = off<br />
<br />
// the code for increasing the bonus multiplier <br />
// bonus held not implemented<br />
<br />
def increase_bonus()<br />
curplayer.cur_bonus = curplayer.cur_bonus + 1<br />
// give any special award if it is at a high #<br />
</pre><br />
<br />
== Game Modes ==<br />
<br />
These are modes that are specific to the game in question and relate to the theme or specific special devices included in the design. They can also fall outside regular gameplay - for example, ''Bally Safecracker'' has a special ''Assault the Vault'' mode triggered by using a unique token in the coin slot. Or ''Williams Black Knight'' and ''Time Fantasy'', which have a special post-game timed mode governed by time earned in regular gameplay, where you have unlimited balls to score extra points. <br />
<br />
=== General Modes ===<br />
<br />
These are modes that are general to most games, rather than rules specific to the machine's theme.<br />
<br />
==== Game Start ====<br />
<br />
==== Game End ====<br />
<br />
After the game ends, cleanup of the playfield device and some variables internal to the software should be done. Examples in no particular order include:<br />
<br />
* Release any locked balls from kickers<br />
* Release any locked balls from vertical upkickers<br />
* Disable flippers<br />
* Return any mechanical devices to Game Start state<br />
* Check for any high scores achieved by any players and record initials<br />
* Run Replay Match<br />
* Set number of current players to zero<br />
* Null/delete any player objects<br />
* Delete the game session object<br />
* Audits - increase # of games played, etc.<br />
<br />
==== Replay Match ====<br />
<br />
==== Ball Seek ====<br />
<br />
In the event a ball gets stuck and the player is unable to play, many machines will go into a '''Ball Seek''' mode. All mechanisms that interact with the ball will individually fire after a specified "idle" delay in an attempt to free the stuck ball. The ''Ball Seek'' mode will often run continuously until the missing ball is found, or only repeat a few times at which point the ball is marked as ''lost'' and game play continues, with the software compensating for the missing ball as best as possible.<br />
<br />
A timer is updated to check for any '''idle time''' of the ball - any switch hits (indicating ball movement) resets this timer. If no switch activity occurs for a specified period of time (as set by an operator setting), the '''Ball Seek''' subroutine would be run.<br />
<br />
Put the timer reset calls through all the switch detection events (except for shooter lane, tilt plumb, buttons) as those switch hits indicate a healthy running ball session.<br />
<br />
A ball in the shooter lane should disable the timer, with it starting after confirming a ball has been launched and is in play. For convenience sake, invoke the ball seek timer after a player has passed or failed the skill shot. So, just after shutting down the skill shot (if implemented), start the ball save timer.<br />
<br />
Shut down the ball save timer once the ball session is over. <br />
<br />
Pseudocode example:<br />
<br />
<pre><br />
// invoke the ball seeker routine<br />
def bs_timer_start()<br />
// ball saver invoked<br />
bs_timer_countdown = 60<br />
<br />
// reset the timer<br />
def bs_timer_reset()<br />
bs_timer_countdown = 60<br />
<br />
// shut down the timer entirely<br />
def bs_timer_shutdown()<br />
bs_timer_countdown = -1<br />
<br />
// this runs when the timer has expired<br />
def ball_saver()<br />
if ( bs_timer_countdown = 0 ) <br />
// fire the coils<br />
coils.popbumper1.fire()<br />
// fire drop target reset<br />
coils.dtbank1.fire()<br />
// and so forth<br />
// reset timer and hopefully we won't have to run it again<br />
bs_timer_reset()<br />
<br />
// example of the 1 of many target hits<br />
// that show the timer reset routine<br />
def leaftarget1_hit()<br />
score.addpoints(50)<br />
sound.play("boop")<br />
bs_timer_reset()<br />
</pre><br />
<br />
==== Ball Save ====<br />
<br />
'''Ball save''' is when a ball in play is drained out shortly into the ball session. This routine can be triggered via the outlanes or center drain.<br />
<br />
Typically ''Ball Save'' is either time-based or score-based. The allowed time for ball save to be active can be set via '''Preferences'''.<br />
<br />
==== Extra Ball ====<br />
<br />
==== Skill Shot ====<br />
<br />
'''Skill Shots''' are available when the player first plunges the ball. Plunging the ball at the right strength, or at the right time, or hitting a specific switch, will earn the player a reward - generally a bonus multiplier or a large points bonus.<br />
<br />
Used in conjunction with a physical plunger (as opposed to an autoplunger), plunging the ball at just the right strength to hit a specific switch will award the ''Skill Shot'' value.<br />
<br />
Some shots are ''Strength-based'', where a group of targets or switches can be hit by the ball from the plunger, and the indicated target or switch, when hit, will award the value. Of these types, variations include the '''Side''' style where the ball is aimed at targets in a vertical alignment (as in ''Williams No Good Gofers''), or '''Over''' where the ball is plunged over the switches, as shown in this example from ''Williams Pinbot'':<br />
<br />
[[Image:pinbot-skill.jpg|400px]]<br />
<br />
For games with autoplungers, there are ''Time-based'' examples where the player must time the activation of the plunger to correspond with the ball hitting a lit target - ''Williams Terminator 2'' is an example of this type. Many autoplunger games use a randomly-chosen ''Bonus Lane'', where the skill shot is achieved if the ball goes through the indicated lane at the end of a plunge. <br />
<br />
When coding, the logic is:<br />
<br />
* Initialize the skill shot mode at the begin of a ball session<br />
* End the skill shot after the player has passed or failed<br />
<br />
==== Tilt ====<br />
<br />
Although not thought of as a ''mode'', it fits the same model - it is triggered from one or multiple switch events, in this case, the switch being the tilt bob. When the tilt is triggered enough times (and after warnings issued), the game will end the current ball. <br />
<br />
A ''Tilt'' should trigger the following:<br />
<br />
* Disable Flippers<br />
* Shut off GI and any insert lights<br />
* Shut off music<br />
* Disable pop bumpers<br />
* Disable slingshots<br />
* Do not award end-of-ball bonus points<br />
<br />
Once the ball is returned the trough, regular play resumes.<br />
<br />
An additonal mode is the '''Slam Tilt''', triggered by a switch on the coin door. The main difference is that the whole game for all players will be immediately ended, as to punish the player for being rough with the machine.<br />
<br />
==== Status Report ====<br />
<br />
Generally activated by holding down both flippers.<br />
<br />
[[Status Report]]<br />
<br />
=== Device Modes ===<br />
<br />
These are general modes that trigger specific mechanical devices.<br />
<br />
==== Kickback ====<br />
<br />
See the [[Kickback]] subpage for hardware details.<br />
<br />
For the kickback, some checks will need to be done to ensure that the ball is out of the outlane area. One solution is to leave it active for a specified period of time to give an additional kickback to ensure the ball is out.<br />
<br />
Other triggers may include:<br />
<br />
* A sound or call-out indicating to the player that kickback is enabled<br />
* A sound or call-out when kickback is invoked<br />
<br />
<br />
The action to activate the kickback is to pulse the solenoid. What is critical is getting the timing correct where it does not fire too soon, or too late, where the ball will be missed. Some timing adjustments will need to be done to find the sweet spot where it will handle the most amount of ball velocity variations.<br />
<br />
Pseudocode example:<br />
<br />
<pre><br />
// variables<br />
kickback_enabled = (on/off) <br />
<br />
// scope: ball session<br />
<br />
def enable_kickback()<br />
ballsess.kickback_enabled = on<br />
lights.kb = flashy<br />
play.sound("kickback is on!")<br />
<br />
// switch hit event for the left outlane<br />
// determines if you drain or kick<br />
<br />
def leftoutlane_sw()<br />
if ballsess.kickback_enabled = on<br />
( kickback_fire() )<br />
else<br />
score.addpoints(50)<br />
sound.play("aww shucks")<br />
<br />
// fire the kickback<br />
<br />
def fire_kickback()<br />
sound.play("misspiggy hiyah!")<br />
coils.kickback.pulse()<br />
<br />
// insert any additional "keep hot" code here<br />
// okay, shut off the kickback<br />
disable_kickback()<br />
<br />
// shut off kb<br />
// also shut this off if you tilt<br />
<br />
def disable_kickback()<br />
ballsess.kickback_enabled = off<br />
lights.kb = off<br />
</pre><br />
<br />
==== Ball Trough ====<br />
<br />
See the [[Ball Trough]] subpage for hardware details.<br />
<br />
Pseudocode example:<br />
<pre><br />
<br />
// callback function<br />
// returns true if the trough is full<br />
function is_trough_full()<br />
if (trsw1 = true) + (trsw2=true) + (trsw3=true)<br />
return true<br />
else<br />
return false<br />
</pre><br />
<br />
==== Drop Targets ====<br />
<br />
See the [[Drop Targets]] subpage for hardware details.<br />
<br />
For a drop target bank, a check is needed after every drop target hit. As an example of using ''state'' to manage the game, a player could be awarded points for hitting the drop targets in order (Example: ''Bally Centaur''), or award points for completing multiple sets of drop target banks. <br />
<br />
Pseudocode:<br />
<br />
<pre><br />
// variable scope(current ball session)<br />
dbank1 = off<br />
dbank2 = off<br />
dbank3 = off<br />
<br />
def dbank1_hit()<br />
score.addpoints(50)<br />
dbank1 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
def dbank2_hit()<br />
score.addpoints(50)<br />
dbank2 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
def dbank2_hit()<br />
score.addpoints(50)<br />
dbank3 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
// check to see if all the drop targets have been hit<br />
<br />
def check_dropbank1()<br />
if (dbank1= on) & (dbank2=on) & (dbank3=on)<br />
// reward for completing drop target bank<br />
play_sound(chaching)<br />
score.addpoints(200)<br />
<br />
// reset the variables<br />
dbank1= off<br />
dbank2 = off<br />
dbank3 = off<br />
<br />
// reset 'em<br />
coils.dbank1.pulse()<br />
<br />
// separate routine for resetting drop target bank ,<br />
// add this to the "ball begin" routine<br />
<br />
def reset_drop_bank()<br />
coils.dbank1.pulse()<br />
</pre><br />
<br />
==== Slingshots ====<br />
<br />
See the [[Slingshots]] subpage for hardware details.<br />
<br />
Most off-the-shelf controllers allow a user to create '''Triggers''', where if a specific switch is hit, it causes a specific coil to fire. For slingshots, this is all that is needed for them to operate as expected, plus recording any scoring involved.<br />
<br />
Pseudocode:<br />
<pre><br />
TBD<br />
</pre><br />
<br />
==== Kicker Hole ====<br />
<br />
See the [[Kicker Hole]] subpage for hardware details.<br />
<br />
Pseudocode:<br />
<pre><br />
TBD<br />
</pre><br />
<br />
==== Divertors ====<br />
<br />
See the [[Divertors]] subpage for hardware details.<br />
<br />
Pseudocode:<br />
<pre><br />
TBD<br />
</pre><br />
<br />
==== Vertical Up-Kickers ====<br />
<br />
See the [[VUK]] subpage for hardware details.<br />
<br />
Pseudocode:<br />
<pre><br />
TBD<br />
</pre><br />
<br />
== Sound ==<br />
<br />
Sound is a critical component of any pinball machine. EM games used bells and chimes to inform the player while modern games use digitized voice callouts and stereo music.<br />
<br />
Some things to consider when deciding on how to incorporate sound in a game include:<br />
<br />
* Avoid playing sounds continuously over the top of one another. For example, having an explosion sound when a pop bumper is triggered - if the ball is getting a lot of pop bumper action and it triggers three pops in very fast succession, restarting the sound event on each trigger would sound like white noise. Thus, choose not to play the same sound effect unless N time has passed (say 3 seconds), or never play the same sound affect at the same time.<br />
* Too many sound effects playing over each over mutes the effect it should have on the player and can be confusing.<br />
* Timing of sound events should be kept short, as the longer the sound, the more likely it will overlap with another switch event trigger, leading to too many overlapping sound events or the white noise problem mentioned earlier.<br />
* Normalize the volume of all the sound effects to the same level to maintain a common volume level on the machine itself. <br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Shooter_lane&diff=895Shooter lane2015-01-26T02:04:16Z<p>S1500: </p>
<hr />
<div><br />
== Summary ==<br />
<br />
<br />
<br />
'''Full-Length Shooter Lanes'''<br />
<br />
Most pinball games have a shooter lane(on the right) that is the entire length of the playfield. <br />
<br />
<br />
'''Partial Length Shooter Lanes'''<br />
<br />
Some shooter lanes go only partway back to the rear of the playfield, and diverts left(with a 1-way gate). This allows for more playfield space. <br />
<br />
Examples: ''Vector'', ''No Good Gofers''<br />
<br />
<br />
'''No Shooter Lanes'''<br />
<br />
''Lexy Lightspeed'' has no shooter lane at all, due to the video display hardware. Bally Spectrum is an old solid state where the ball pops out from under the apron. ''Starship Troopers'' has the outlane and shooter lane shared.</div>S1500https://pinballmakers.com/wiki/index.php?title=Kickback&diff=833Kickback2015-01-25T20:22:50Z<p>S1500: Created page with "'''Summary''' The kickback feature in a pinball machine allows the player to continue where they would have otherwise drained out the left outlane. A solenoid fires(not unlik..."</p>
<hr />
<div>'''Summary'''<br />
<br />
The kickback feature in a pinball machine allows the player to continue where they would have otherwise drained out the left outlane. A solenoid fires(not unlike an auto-plunger) against the ball, which quickly shoots it up the outlane and back into the playfield. For many games, this is enabled as part of the [[ball save]] and given to the player as a reward during normal play. <br />
<br />
Examples: ''Star Trek: The Next Generation''<br />
<br />
'''Hardware'''<br />
<br />
The only unique part of this feature is the solenoid that's mounted in the apron area. A lane blade(?) will need to be mounted for the ball to properly shoot upward and towards the left.<br />
<br />
You will want 1 light(possibly dedicated) mounted above the left outlane to indicate to the player kickback is active.<br />
<br />
'''Resources'''<br />
<br />
1. A sound or callout indicating to the player that kickback is enabled.<br />
<br />
2. A sound or calllout when kickback is invoked. <br />
<br />
'''Software'''<br />
<br />
The action of the kickback is simply pulsing the solenoid. What is critical is getting the timing correct where it doesn't fire too soon or too late where the ball will be missed. Some timing adjustments will need to be done to find the sweet spot where it will handle the most amount of ball velocity variations.<br />
<br />
Some checks will need to be done to ensure that the ball is out of the outlane area. You might want to make it "hot" for a specified period of time to give an additonal kickback to ensure the ball is out.<br />
<br />
// variables<br />
// kickback_enabled = (on/off) <br />
// scope: ball session<br />
def enable_kickback()<br />
ballsess.kickback_enabled = on<br />
lights.kb = flashy<br />
play.sound("kickback is on!")<br />
<br />
<br />
// switch hit event for the left outlane<br />
// determines if you drain or kick<br />
def leftoutlane_sw()<br />
if ballsess.kickback_enabled = on<br />
( kickback_fire())<br />
else<br />
score.addpoints(50)<br />
sound.play("aww shucks")<br />
<br />
<br />
// fire the kickback<br />
def fire_kickback()<br />
sound.play("misspiggy hiyah!")<br />
coils.kickback.pulse()<br />
// insert any additional "keep hot" code here<br />
// okay, shut off the kickback<br />
disable_kickback()<br />
<br />
// shut off kb<br />
// also shut this off if you tilt<br />
def disable_kickback()<br />
ballsess.kickback_enabled = off<br />
lights.kb = off</div>S1500https://pinballmakers.com/wiki/index.php?title=Shooter_lane&diff=822Shooter lane2015-01-25T16:58:02Z<p>S1500: Created page with " == Summary == '''Full-Length Shooter Lanes''' Most pinball games have a shooter lane(on the right) that is the entire length of the playfield. '''Partial Length Shoote..."</p>
<hr />
<div><br />
== Summary ==<br />
<br />
<br />
<br />
'''Full-Length Shooter Lanes'''<br />
<br />
Most pinball games have a shooter lane(on the right) that is the entire length of the playfield. <br />
<br />
<br />
'''Partial Length Shooter Lanes'''<br />
<br />
Some shooter lanes go only partway back to the rear of the playfield, and diverts left(with a 1-way gate) <br />
<br />
Examples: ''Vector''<br />
<br />
<br />
'''No Shooter Lanes'''<br />
<br />
Lexy Lightspeed has no shooter lane at all, due to the video display hardware.</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=819Programming2015-01-25T16:32:01Z<p>S1500: /* Procedures */</p>
<hr />
<div>After the initial [[Construction#Whitewood|whitewood]] has been built, it is time to bring it to life by programming the control system and adding game rules.<br />
<br />
== Rules ==<br />
<br />
As pinball hardware advanced in complexity from simple relays to transistors, so did game rules. ''Electromechanical'' (EM) pinball machines often struggled to register multiple switch hits at the same time, while early ''Solid State'' (SS) games allowed fast response times and multiple concurrent switch hits to be registered. Faster CPUs with more memory allow for the deeper rule sets of modern pinball.<br />
<br />
Rules can be as simple as ''Complete the rollovers for bonus multiplier'' to stacking several mode-scoring multiballs together.<br />
<br />
=== Maintaining State ===<br />
<br />
Deeper rule tracking requires maintaining '''State''', which is a map (in memory) of the current switch conditions, such as:<br />
<br />
* What was the state of all the switches N seconds ago? <br />
* Has anything changed in N seconds?<br />
* How many times has a switch been hit total?<br />
<br />
<br />
These are all ''States'' and the control program keeping track of these allows for modes and other advanced rules.<br />
<br />
Think of an orbit shot: two switches, one of the left side orbit entry, one of the right side orbit entry. An orbit is complete if both switches are hit in order. It takes time for the ball to travel from one side to the other - there may be 5 seconds or more if the ball is slow, struggles to get to the apex, or dribbles down the other side. A failed orbit may count two hits to only one of the switches. It may count only one hit if the ball just makes it and rolls back down. The orbit shot is a good example of needing to know the previous switch state, the question then becomes, how many previous states to track? <br />
<br />
''Example'': If an orbit is a multiball jackpot shot, how to handle when a second ball enters the left orbit before the first ball has triggered the right orbit switch? This means an orbit that can be fed from either direction is probably not a good way to score a jackpot. This is why a ramp shot is very easy to track a jackpot on - ramps have an apex and once your past the apex, any exit switch hit from the ramp is easily countable. <br />
<br />
Another example of an advanced rule would be tracking the order of something - having five drop targets that give an extra bonus if hit in order of one to five, or five to one. This is a variable outside of standard switch state and it has to be managed outside of just target hits, as well as be reset on a ball drain, reset if a mode changes, or reset if the drop targets are reset.<br />
<br />
Code complexity is increased by remembering the state of that variable and which targets have been hit or not between changing players.<br />
<br />
The deeper rules become, the more variables, flags and timers that are needed to be tracked and managed, and the more difficult the code becomes to debug and maintain.<br />
<br />
Some other examples of maintaining state:<br />
<br />
* If a target enables a kickback, will extra kick backs be added if it is already lit?<br />
* Knowing how many balls are in the ball trough before lighting the add-a-ball insert.<br />
<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
[[Diagnostics]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Seek]]<br />
<br />
[[Ball Save]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Kickback]]<br />
<br />
[[Skill Shot]]<br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Replay]]<br />
<br />
[[Status Report]] - Holding down a flipper for a status report<br />
<br />
<br />
<br />
'''Hardware-specific procedures'''<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
[[Divertors]]<br />
<br />
[[VUKs]] - Vertical Up-Kickers<br />
<br />
== Languages ==<br />
<br />
The programming language being used is going to be dictated primarily by the hardware control system chosen. Off the shelf systems such as '''[[Construction#Off-the-Shelf_Boards|P-ROC or Fast]]''' have a close relationship to '''[http://github.com/preble/pyprocgame PyProcGame]''', which is dedicated exclusively to the P-ROC, or the '''[https://missionpinball.com/framework/ Mission Pinball Framework]''' which supports both P-ROC and FAST and is a more higher level programming framework.<br />
<br />
For more lower-level control, there is the [http://github.com/preble/libpinproc libpinproc] library for P-ROC boards, which allow binding into other languages and building of custom frameworks using things like [http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer SDL] or [http://www.sfml-dev.org/ SFML] which provides access to ''OpenGL'' and other graphics APIs.<br />
<br />
If using custom hardware, you likely have the means for writing control software without the help of this guide.<br />
<br />
=== Pinball Frameworks ===<br />
<br />
* [https://missionpinball.com/framework/ Mission Pinball]: Currently supports both P-ROC and FAST controllers, written in Python<br />
* [http://pyprocgame.pindev.org/ PyProcGame]: Developed specifically for the P-ROC controllers, written in Python<br />
* [https://github.com/preble/libpinproc libPinPROC]: Lower level C library for P-ROC<br />
<br />
== Sound ==<br />
With anything that conveys sound as a key to whats going on, you want to have some form of priority. A background sound effect might have a low priority of say 4, but 'Shoot the ram for jackpot' might have a priority of 1. If a priority 1 sound is playing, and the player his a switch that triggers a background sound effect, the system can know now to play the sound effect over the top of the more important jackpot instruction call out. You also do not want to be playing sounds continuously over the top of one another, say you have an explosion sound when a pop bumper is triggered, if the ball is getting a lot of pop bumper action and triggering 3 pops in very fast succession, you do not want to have the sound affect triggered as one long continuous shotgunning whitenoise. You could choose not to play the same sound effect unless N time has passed (say 3 seconds), or never play the same sound affect at the same time.<br />
<br />
Too many sound effects playing over each over mutes the affect it should have on the player.<br />
<br />
You should also normalise the volume of all the sound effects to the same level so it does not play havoc with the volume control on the machine itself. <br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=782Programming2015-01-25T01:07:53Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
[[Diagnostics]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Skill Shot]]<br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
[[Status Report]] - Holding down a flipper for a status report<br />
<br />
[[Ball Seek]]<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=764Programming2015-01-24T16:38:47Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
[[Diagnostics]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Skill Shot]]<br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
[[Status Report]] - Holding down a flipper for a status report<br />
<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Talk:Auditing&diff=762Talk:Auditing2015-01-24T16:21:20Z<p>S1500: Created page with "Can someone list what auditing is done on a modern Stern machine?"</p>
<hr />
<div>Can someone list what auditing is done on a modern Stern machine?</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=759Programming2015-01-24T16:10:37Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
[[Diagnostics]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Skill Shot]]<br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=758Programming2015-01-24T14:45:54Z<p>S1500: /* Settings/Preferences */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
[[Diagnostics]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=User:S1500&diff=757User:S15002015-01-24T14:41:15Z<p>S1500: Created page with "Hi, I'm S1500, and I like to help out wikis. I did a significant amount of wiki page creation/editing on pinballcontrollers.com's wiki ,and much of that content will be copie..."</p>
<hr />
<div>Hi, I'm S1500, and I like to help out wikis.<br />
<br />
I did a significant amount of wiki page creation/editing on pinballcontrollers.com's wiki ,and much of that content will be copied here, but with pseudocode. <br />
<br />
I do a lot of doodling on my spare time, so why not take a look at my [https://picasaweb.google.com/100199182750726683592/PinballSketchbook?authuser=0&feat=directlink my pinball sketchbook]</div>S1500https://pinballmakers.com/wiki/index.php?title=Talk:Construction&diff=756Talk:Construction2015-01-24T14:38:36Z<p>S1500: Created page with "Great page, but we need to break this one down to individual components. This will allow individual pages to be fleshed out better, make things easier to find, and save on ban..."</p>
<hr />
<div>Great page, but we need to break this one down to individual components. This will allow individual pages to be fleshed out better, make things easier to find, and save on bandwidth costs. :)</div>S1500https://pinballmakers.com/wiki/index.php?title=Drop_Targets&diff=754Drop Targets2015-01-24T04:18:06Z<p>S1500: Created page with " For a drop target bank, only a minor check is needed after every drop target it. '''Idea''' Give a reward for hitting the drop targets in order. Example: ''Centaur''. Gi..."</p>
<hr />
<div><br />
For a drop target bank, only a minor check is needed after every drop target it.<br />
<br />
<br />
'''Idea'''<br />
<br />
Give a reward for hitting the drop targets in order. Example: ''Centaur''. <br />
<br />
Give a reward for completing multiple sets of drop target banks. <br />
<br />
'''Hardware'''<br />
<br />
1 switch for each of the targets<br />
<br />
1 coil to reset the targets<br />
<br />
(optional) 1 light for each target in the bank<br />
<br />
'''Pseudocode'''<br />
<br />
//variable scope(current ball session)<br />
dbank1 = off<br />
dbank2 = off<br />
dbank3 = off<br />
<br />
def dbank1_hit()<br />
score.addpoints(50)<br />
dbank1 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
<br />
def dbank2_hit()<br />
score.addpoints(50)<br />
dbank2 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
<br />
def dbank2_hit()<br />
score.addpoints(50)<br />
dbank3 = on<br />
play_sound(boink)<br />
check_dropbank1()<br />
<br />
// check to see if all the drop targets have been hit<br />
def check_dropbank1()<br />
if (dbank1= on) & (dbank2=on) & (dbank3=on)<br />
// reward for completing drop target bank<br />
play_sound(chaching)<br />
score.addpoints(200)<br />
// reset the variables<br />
dbank1= off<br />
dbank2 = off<br />
dbank3 = off<br />
// reset 'em<br />
coils.dbank1.pulse()<br />
<br />
<br />
<br />
<br />
//separate routine for resetting drop target bank ,<br />
// add this to the "ball begin" routine<br />
def reset_drop_bank() <br />
coils.dbank1.pulse()</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=751Programming2015-01-24T03:46:09Z<p>S1500: /* Modes */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[mini-modes]] - Drop target sets, etc<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=746Programming2015-01-24T03:43:46Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
[[Game Start]] <br />
<br />
[[Game End]] <br />
<br />
[[Extra Ball]]<br />
<br />
[[Replay]]<br />
<br />
<br />
Hardware-specific procedures<br />
<br />
[[Drop Targets]]<br />
<br />
[[Slingshots]]<br />
<br />
[[Kicker cup]]<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=744Programming2015-01-24T03:39:26Z<p>S1500: /* Rules */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
<br />
[[Basic mode rules]]<br />
<br />
[[tournament rules]]<br />
<br />
=== Light Shows ===<br />
<br />
[[insert lights]]<br />
<br />
[[attract mode]]<br />
<br />
[[insert light groups]]<br />
<br />
[[backbox lighting]]<br />
<br />
=== Modes ===<br />
<br />
[[modes]]<br />
<br />
[[special modes]]<br />
<br />
<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Music_loops&diff=743Music loops2015-01-24T03:34:30Z<p>S1500: Created page with " An easy way to do a music loop, is to create a single sound file with Audacity. You can test music loops with looped playback (shift + play?) and trim the beginning & end app..."</p>
<hr />
<div><br />
An easy way to do a music loop, is to create a single sound file with Audacity. You can test music loops with looped playback (shift + play?) and trim the beginning & end appropriately.<br />
<br />
'''Assignments'''<br />
<br />
1 song loop for main no-mode play. <br />
<br />
song loop for each different mode<br />
<br />
song loop for end of game<br />
<br />
song loop for entering high score initials</div>S1500https://pinballmakers.com/wiki/index.php?title=Sound_assignments&diff=742Sound assignments2015-01-24T03:27:56Z<p>S1500: Created page with " With any pinball machine, quite a few sounds(or voice callouts, or combinations of both) can be applied to various events. Here's just a list. '''Scoring mechanisms''' Sta..."</p>
<hr />
<div><br />
With any pinball machine, quite a few sounds(or voice callouts, or combinations of both) can be applied to various events. Here's just a list.<br />
<br />
'''Scoring mechanisms'''<br />
<br />
Standup target (each unique)<br />
<br />
spinner target - make it brief<br />
<br />
Orbit<br />
<br />
Reverse orbit<br />
<br />
ramp shot<br />
<br />
failed ramp shot<br />
<br />
inlane (each unique or shared)<br />
<br />
outlane - negative sound<br />
<br />
pop bumper - numerous sounds<br />
<br />
kicker cup capture<br />
<br />
kicker cup release<br />
<br />
slingshot - unique left/right<br />
<br />
ball launch - invoked when ball [[shooter lane]] switch is depressed. Example: Fun House<br />
<br />
<br />
<br />
'''Other'''<br />
<br />
game start<br />
<br />
mode begin<br />
<br />
mode end<br />
<br />
ball start<br />
<br />
warning<br />
<br />
tilt<br />
<br />
extra ball lit<br />
<br />
extra ball<br />
<br />
shoot again<br />
<br />
determine replay<br />
<br />
replay achieved <br />
<br />
high score achieved</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=739Programming2015-01-24T03:11:00Z<p>S1500: /* Sound */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==<br />
<br />
[[sound assignments]]<br />
<br />
[[Music loops]]<br />
<br />
[[Basic sounds]]<br />
<br />
[[voice callouts]]</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=737Programming2015-01-24T03:01:25Z<p>S1500: /* Settings/Preferences */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Settings/Preferences ===<br />
<br />
[[Auditing]]<br />
<br />
[[Settings]]<br />
<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=734Programming2015-01-24T02:28:50Z<p>S1500: /* Scoring */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Settings/Preferences ===<br />
=== Scoring ===<br />
<br />
[[Bonus Lanes]]<br />
<br />
[[Basic scoring]]<br />
<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=730Programming2015-01-24T02:17:05Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Settings/Preferences ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
[[Ball Save]] <br />
<br />
[[Tilt]] <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=724Programming2015-01-22T03:32:33Z<p>S1500: </p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Settings/Preferences ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
Ball Save <br />
<br />
Tilt <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=723Programming2015-01-22T03:20:23Z<p>S1500: /* High Score Entry */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
Ball Save <br />
<br />
Tilt <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=722Programming2015-01-22T03:20:14Z<p>S1500: /* Procedures */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
Ball Save <br />
<br />
Tilt <br />
<br />
Game Start <br />
<br />
Game End <br />
<br />
Extra Ball<br />
<br />
Replay<br />
<br />
=== High Score Entry ===<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=721Programming2015-01-22T03:18:44Z<p>S1500: /* High Score Entry */</p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
<br />
<br />
<br />
=== High Score Entry ===<br />
<br />
== Sound ==</div>S1500https://pinballmakers.com/wiki/index.php?title=Programming&diff=720Programming2015-01-22T03:18:15Z<p>S1500: </p>
<hr />
<div>== Languages ==<br />
=== Frameworks ===<br />
[https://missionpinball.com/framework/ Mission Pinball]<br />
<br />
== Rules ==<br />
=== Light Shows ===<br />
=== Modes ===<br />
=== Scoring ===<br />
=== Procedures ===<br />
<br />
<br />
<br />
<br />
== High Score Entry == <br />
<br />
<br />
<br />
== Sound ==</div>S1500