Tutorial Future Pinball: A. Simple DMD's Illustrated Tutorial

Copy 'N Paste under any "nvCredits = nvCredits - 1" statements

Code:
Code:
MyNewDMD.FlushAnimation:MyNewDMD.FlushQueue

MyNewDMD.UpdateInterval = 10

MyNewDmd.QueueText "[f2][xc][y10]WELCOME PLAYER " & PlayersPlayingGame, deNone, 1000, true

MyNewDmd.QueueText  "[f2][xc][y9]GO PLAYER " & CurrentPlayer, deNone, 1000, true
Wnewnvcredits-1.jpg
 
Last edited:
D."Go Player" Template Simple (I prefer the one below)
Dgoplayer.jpg
 
Last edited:
Copy 'N Paste
Code:
Code:
MyNewDmd.Text = "[f2][xc][y10]GO PLAYER " & CurrentPlayer

Which I place under Sub createnewball()
Don't bother with this if you like the next template better !
You can save and enjoy your table with Current player Score/Statistics/ and Multiplayer Notifications or carry on !
Xnewcreatenew1.jpg
 
Last edited:
E.Go Player + Scoreboard Template (Preferred)
Enewgoplayer2.jpg
 
Last edited:
Under "Sub Createnewball()
Copy 'N Paste:

Code:
Code:
If PlayersPlayingGame > 1 then

MyNewDMD.Text = "[edge4][f2][xc][y9]GO PLAYER " & (CurrentPlayer ) & "[f1][x64][y2]P2: " & FormatNumber(nvscore2, 0, -1, 0, -1) & "[x2][y2]P1: "& FormatNumber(nvscore1, 0, -1, 0, -1) &"[f1][x2][y25]P3: " & FormatNumber(nvscore3, 0, -1, 0, -1) & "[x64][y25]P4: "& FormatNumber(nvscore4, 0, -1, 0, -1)

End if
ZZcreatenewball.jpg
 
Last edited:
Again you can "Save as" and enjoy your DMD with Current Player Score/Allplayer Scoreboard/Statistics /Multiplayer or move on to the grand finale !

F. Cycling DMD at table start and game end
This can cycle whatever DMD info you want. In the following example it will cycle Table Name, and High Scores at start
and then add last game scores and current stats at end of game to cycle routine. Enjoy !
Copy 'N Paste
Code:
Code:
CycleFutureDMD()

and place under "Sub EndofGame()" and remove AddScore(0) entry if you previously added it here
ZBNewAddscore2.jpg
 
Last edited:
Copy 'N Paste above Sub AddScore(points) , the following statement !
Ready? Brace yourself.. NOTE INSERT THE NAME OF YOUR TABLE IN THE 3 PLACES IT SAYS "TABLE NAME" BELOW


Code:
Code:
Sub CycleFutureDMD()



Dim GameWinner



If NvScore1 > NvScore2 and NvScore1 > NvScore3 and NvScore1 > NvScore4 Then

GameWinner = NvScore1

End if

If NvScore2 > NvScore1 and NvScore2 > NvScore3 and NvScore2 > NvScore4 Then

GameWinner = NvScore2

End if

If NvScore3 > NvScore1 and NvScore3 > NvScore2 and NvScore3 > NvScore4 Then

GameWinner = NvScore3

End if

If NvScore4 > NvScore1 and NvScore4 > NvScore2 and NvScore4 > NvScore3 Then

GameWinner = NvScore4

End if





If PlayersPlayingGame = 1 then

MyNewDMD.FlushAnimation:MyNewDMD.FlushQueue

MyNewDMD.UpdateInterval = 10

MyNewDMD.QueueText "[edge4][f2][xc][y9]"& FormatNumber (nvscore1, 0, -1, 0, -1) & "[f1][x2][y2]FINAL SCORE:"

MyNewDmd.QueueText "[Edge 4][f2][xc][y9]Table Name", deFlip, 2000, true

MyNewDMD.QueueText "[Edge4][f2][xc][y9]"& nvHighScore1Name & " " &FormatNumber( nvHighScore1, 0, -1, 0, -1) & "[f1][x64][y2]" &nvHighScore2Name & " " &FormatNumber(nvHighScore2, 0, -1, 0, -1) & "[x2][y2]"&nvHighScore1Name & " " & FormatNumber(nvHighScore1, 0, -1, 0, -1) &"[f1][x2][y25]"&nvHighScore3Name & " " & FormatNumber(nvHighScore3, 0, -1, 0, -1) & "[x64][y25]"&nvHighScore4Name & " " & FormatNumber(nvHighScore4, 0, -1, 0, -1), deFlip, 2000, True

MyNewDMD.QueueText "[Edge 4][f2][xc][y9]"& nvHighScore1Name & " " & FormatNumber(nvHighScore1, 0, -1, 0, -1) & "[f1][x2][y25]CREDITS: "& nvCredits & "[f1][x2][y2]HIGHSCORE: " &nvHighScore1Name & "[f1][x78][y2]GAMES: " & nvTotalGamesPlayed &"[f1][x78][y25]PLAYERS: " & PlayersPlayingGame, deFlip, 2000, False

End if



If PlayersPlayingGame > 1 then

MyNewDMD.FlushAnimation:MyNewDMD.FlushQueue

MyNewDMD.UpdateInterval = 10

MyNewDMD.QueueText "[edge4][f2][xc][y9]"& FormatNumber (GameWinner, 0, -1, 0, -1) & "[f1][x64][y2]P2: " & FormatNumber(nvscore2, 0, -1, 0, -1) & "[x2][y2]P1: "& FormatNumber(nvscore1, 0, -1, 0, -1) &"[x2][y25]P3: " & FormatNumber(nvscore3, 0, -1, 0, -1) & "[f1][x64][y25]P4: "& FormatNumber(nvscore4, 0, -1, 0, -1), deFlip, 2000, False

MyNewDmd.QueueText "[Edge 4][f2][xc][y9]Table Name", deFlip, 2000, true

MyNewDMD.QueueText "[Edge4][f2][xc][y9]"& nvHighScore1Name & " " &FormatNumber( nvHighScore1, 0, -1, 0, -1) & "[f1][x64][y2]" &nvHighScore2Name & " " &FormatNumber(nvHighScore2, 0, -1, 0, -1) & "[x2][y2]"&nvHighScore1Name & " " & FormatNumber(nvHighScore1, 0, -1, 0, -1) &"[f1][x2][y25]"&nvHighScore3Name & " " & FormatNumber(nvHighScore3, 0, -1, 0, -1) & "[x64][y25]"&nvHighScore4Name & " " & FormatNumber(nvHighScore4, 0, -1, 0, -1), deFlip, 2000, True

MyNewDMD.QueueText "[Edge 4][f2][xc][y9]"& nvHighScore1Name & " " & FormatNumber(nvHighScore1, 0, -1, 0, -1) & "[f1][x2][y25]CREDITS: "& nvCredits & "[f1][x2][y2]HIGHSCORE: " &nvHighScore1Name & "[f1][x78][y2]GAMES: " & nvTotalGamesPlayed &"[f1][x78][y25]PLAYERS: " & PlayersPlayingGame, deFlip, 2000, False

End if



If PlayersPlayingGame = 0 Then

MyNewDMD.FlushAnimation:MyNewDMD.FlushQueue

MyNewDMD.UpdateInterval = 10

MyNewDmd.QueueText "[Edge 4][f2][xc][y9]Table Name", deFlip, 2000, true

MyNewDMD.QueueText "[Edge4][f2][xc][y9]"& nvHighScore1Name & " " &FormatNumber( nvHighScore1, 0, -1, 0, -1) & "[f1][x64][y2]" &nvHighScore2Name & " " &FormatNumber(nvHighScore2, 0, -1, 0, -1) & "[x2][y2]"&nvHighScore1Name & " " & FormatNumber(nvHighScore1, 0, -1, 0, -1) &"[f1][x2][y25]"&nvHighScore3Name & " " & FormatNumber(nvHighScore3, 0, -1, 0, -1) & "[x64][y25]"&nvHighScore4Name & " " & FormatNumber(nvHighScore4, 0, -1, 0, -1), deFlip, 2000, False

End if

End Sub
ZCnewsubcyle.jpg
 
Last edited:
For those looking for more jazzy stuff like animations , check out the next tutorial on Background DMD Animations . You can also copy/paste
stuff from other DMD's in script and just change the DMD name to your new one and it may work but the timing might be a problem.

Further resources include of course, the future pinball help file under "Dot Matrix Displays"
and DmdDisplayDemo.fpt sample table that comes with future pinball is helpful. You can copy stuff from the script.

6. ToggleHud Routine :Making a Hud DMD not visible on table
Every DMD is precious. If you don't want your newly created Hud DMD (that will be captured by FutureDMD)
to be seen on the table itself, you can just drag it off to the side as some suggest. I recommend creating a toggle hud routine
for all your Hud DMD's and overlays so they can be Toggled on/off with ToggleHud key.

Why?
1. I occasionally like having the DMD's on the Hud
2. More importantly stuff just dragged off the table may be visible in the games room if you are panning around. (Especially with the amazing "Animation Sequencer" + "Forced Arcade Mode" in BAM)

Some tables already have a ToggleHud routine but if they don't:

1. Copy 'N Paste with other Dims at top of script
Code:
Code:
Dim ToggleHudOn
ZDim.jpg
 
Last edited:
2.Copy 'N Paste under Sub FuturePinball_BeginPlay()
Code:
Code:
ToggleHudOn = TRUE

'MyNewDMD.FadeOut() 'remove apostrophe to make MyNewDMD invisible on table start
ZEnewtogglehud.jpg
 
Last edited:
3.Copy 'N Paste under Sub FuturePinball_KeyPressed(ByVal KeyCode)
Code:
Code:
If (KeyCode = GetKeyCode(ToggleHudKey)) Then

If ToggleHudOn = TRUE Then

ToggleHudOn = FALSE

MyNewDMD.FadeOut()

'anyotherDMD.FadeOut()

'anyoverlay.FadeOut()

End if

If ToggleHudOn = FALSE Then

ToggleHudOn = TRUE

MyNewDMD.FadeIn()

'anyotherDMD.FadeIn()

'anyoverlay.FadeIn()

End if

   End if
ZFnewtogglehud.jpg
 
Last edited:
Just a note about determining which of your DMDs gets picked up by FutureDMD

The FutureDMD.pdf suggests deleting redundant DMDs or downgrading
the resolution of undesired DMDs to 128x16

While this may give you your desired DMD on the
third monitor, you end up with a dumbed down inferior one elsewhere. Also deleting DMD's can cause conflict if the script is calling for them.

After some experimenting, here's how to pick which DMD is being used on your third monitor: The DMD that was created first has the priority.

1. Play the game and see if FutureDMD is already picking up the right one
(Say DispDmd1)

2.If not (ie FutureDMD has picked DispDmd2) then do the following:
Change the name of the undesirable one ie change DispDmd2 to DispDmd3

3: Create a new DMD and call it DispDmd2

4.Delete the one you changed to DispDmd3

5.Now your table should work with your desired DMD ( ie DispDmd1) being used
on your third monitor, as it has priority in the pecking order.

This has worked successfully in all my tests so far

Cheers

Cheers,

Gimli
 
Great stuff Gimli!! I have one question a table I am modifying has new player dmd code but never resets to start player one which it originally had. I put go player 1 after but if flashes so quick that I cannot see new player any more. is there a timer in dmd or would i have to put in a timer script and when it expires say again go player 1? if so can you show me some of your magic code to do this? I was thinking queuetext but it seems to get stuck on new player the second time it goes through the script for a third player.

Figured it out with flushing queue and adding TextQueue to the offending statements.

Thanks
Jamos
 
Last edited:
Great stuff Gimli!! I have one question a table I am modifying has new player dmd code but never resets to start player one which it originally had. I put go player 1 after but if flashes so quick that I cannot see new player any more. is there a timer in dmd or would i have to put in a timer script and when it expires say again go player 1? if so can you show me some of your magic code to do this? I was thinking queuetext but it seems to get stuck on new player the second time it goes through the script for a third player.

Figured it out with flushing queue and adding TextQueue to the offending statements.

Thanks
Jamos
Hi Jamos
Thanks !
Sounds like you figured it out ?
 
Yes it was CENTAUR MOD 2.0 by SlamT1lt/Nimbus when I add more than 1 player with the start button it would just stay on "player added". Nimbus didn't write the table just added physics to it so not his fault. I changed the "player added" to queuetext and then had to add queuetxt to the first player score display so it would show new player then timeout after 1000 and show the first players score each time I hit the start event to add another player.
 
Last edited:
Hi Jamos
Thanks !
Sounds like you figured it out ?
[/QUO

off topic do you know where i can find ZBRrollingballsoundslib.fpl I need the rolling ball sounds for it for my bam mod table?
 
Forum activity
Help Users
You can interact with the ChatGPT Bot in any Chat Room and there is a dedicated room. The command is /ai followed by a space and then your ? or inquiry.
ie: /ai What is a EM Pinball Machine?
  • No one is chatting at the moment.
      Mibs Mibs: HZR has posted a new reply in the thread "How to Install Addressable LEDs".
      Back
      Top