Help FP Image lists and DMD's

Future Pinball

AnonTet

Pinball Master
Site Supporters
Joined
Jun 21, 2020
Messages
2,036
Solutions
1
Reaction score
1,194
Points
125
Favorite Pinball Machine
Indiana Jones
So I figure it out on out to load and play an imagelist to be used as DMD animation.

And yes, I've read the posts here about it, including the most recents on the subject on the Circus Voltaire thread.

This is still a mistery/obscure/dark magic theme in FP but if there are tables that have it working it means it works... well, to be honest I can't find ANY table using DMD using .AddImageList... but I want simple stuff and this is enough (for now).

My problem:
I have 2 image lists and I know they both work if, for example, I used them as action to plunger (1st things before anything really happens).

The problem is that I can't see the animations after DMD starts to display scores and all that.

So it must be something like missing or wrongly placed .flushqueue or.flushanimation... FP manual sucks on this and online help is nill. There's actually a thread in vpforums that was never answered and it seems the same problem.

is imagelist way of doing things just broken or is the knowledge lost or...? Any information can be useful so thanks in advance.
 
One thing I havent really touched to be honest.

If anything I tend to remove animations on the DMD as some end up looking corrupt on DMDext and I would rather just use an overlay to show nicer looking images instead of 128x32 dots.

SLAMT1LT's older tables like Superman, Robocop, etc have some on them.
 
Last edited:
I've figure it out. Funny there's no resources on this.

Another underrated feature of FP that, for some reason was never used and all you need is an imagelist and be mindful of timings!
 
I've figure it out. Funny there's no resources on this.

Another underrated feature of FP that, for some reason was never used and all you need is an imagelist and be mindful of timings!

You should write a tutorial.
 
I should. But 1st I need to finish the table :D
 
I used the image list for my dmd star wars. It works, but it's not great. I had to use an automate to use the images from the movies with photoshop cs4. I would have to check.
 
I did it in a much more simple fashion. Actually, the less I work with images, the better :D

There's a much more simple way to do things: gif/awebp. Just split/resize, convert to bmp; import to add using dmd.addimagelist and time it, Hell it can even call sounds to sync them with the animation.

Everything done in a few minutes depending on the source.

More than enough for a 1st attempt and why I ended up using more animations than I anticipated.

It was a simple "Let put FizX on this one" project... it's not anymore... but, what the hell, I enjoy it so it's worth it. I'll share it when ready, obviously but i'm limited on time (especially this week).
 
AnonTeT how you fixed the problem?
the curious thing is, some imagelists work perfect on dmd, and some didnt show....

example: dISPDMD1.Queuetext "[as100][il5][sf1][ef10]" on spinner it works, the same fails on optotrigger.

tryed variants with flushqueue and flushanimation but nothing works.
 
I did it in a much more simple fashion. Actually, the less I work with images, the better :D

There's a much more simple way to do things: gif/awebp. Just split/resize, convert to bmp; import to add using dmd.addimagelist and time it, Hell it can even call sounds to sync them with the animation.

Everything done in a few minutes depending on the source.

More than enough for a 1st attempt and why I ended up using more animations than I anticipated.

It was a simple "Let put FizX on this one" project... it's not anymore... but, what the hell, I enjoy it so it's worth it. I'll share it when ready, obviously but i'm limited on time (especially this week).

Do you have to use a resolution of 128x32? The resolution of Bob's color DMDs is rather poor.
 
hi, yes i use the resolution 128x32.
the scripting is now 99% finished on my new table, but the dmd animations drive me crazy.
i cant figure out why the same animation in some cases work perfect the 2 seconds and in other u see 0,1sec the animation, then black..
i convert in jpg, not in bmp, resize,but it works too, see attached vid...

Is it possible to give priority to the animation so that it can't be canceled?
 

Attachments

  • 20240318_193937_1.mp4
    4.3 MB
@loxagon
Can you look at Metal Slug please?
I've been away for quite a while and I forgot what I did by now.

Pretty sure there's no priority flag. But when you start an animation, set a flag and then on the other animation check if the flag is 1 or true or whatever. If so, don't start the animation. don't forget to reset the flag so other animations can run, obviously.
 
hi, yes i use the resolution 128x32.
the scripting is now 99% finished on my new table, but the dmd animations drive me crazy.
i cant figure out why the same animation in some cases work perfect the 2 seconds and in other u see 0,1sec the animation, then black..
i convert in jpg, not in bmp, resize,but it works too, see attached vid...

Is it possible to give priority to the animation so that it can't be canceled?

@Gimli is pretty good at that. Every table seems to be different in the best way to do it. The times I have been able to figure it out was when I looked at the code for other DMD sequences already on the table.
 
ok thank you guys,
I'm still trying to solve the problem and will take a look at the Metal Slug. If necessary, I'll leave them out, but you're a perfectionist somewhere and want to realize all ideas from your head.
 
Hi Guys,

the DMD Animations just don't leave me in peace. For me, it's just part of pinball and i want it to work :p.
After a few days of intensive testing I came to some results, I'll write the findings here if someone wants to work with imagelists.

1. very often the animations are aborted, this depends to 99% on points that are awarded and cancel the animation. Check that the points are ALWAYS above the flush queue.
Example:
addscore(100000)
DispDMD1.FlushQueue
dISPDMD1.Queuetext "[as80][il24][sf1][ef18][edge3]"

2. I work a lot with lights and checklights. if your sub refers to checklights in which points are awarded, this also interrupts the animation or does not trigger it in the first place.

3.It is not possible to prioritize the animation, but it is possible to control it to a certain extent. If I put a text behind the animation that I adjust in length to the animation and then add [Na] to the text, I can influence the animation to a certain extent.
Example:
addscore(10000000)
DispDMD1.FlushQueue
dISPDMD1.Queuetext "[as300][il20][sf1][ef6[edge2]"
DispDmd1.QueueText "[edge3][f6]BLA BLA", deFlip, 1000, True
DispDmd1.QueueText "[edge3][f6]BLA", deFlip, 1000, True
DispDmd1.QueueText "[edge++3][f6][na] ", denone, 100, True

It's all beginner stuff, but I didn't find any information anywhere that could help me. If you want to make a table yourself, I hope that this helps.

Lox
 
Last edited:
Hi Guys,

the DMD Animations just don't leave me in peace. For me, it's just part of pinball and i want it to work :p.
After a few days of intensive testing I came to some results, I'll write the findings here if someone wants to work with imagelists.

1. very often the animations are aborted, this depends to 99% on points that are awarded and cancel the animation. Check that the points are ALWAYS above the flush queue.
Example:
addscore(100000)
DispDMD1.FlushQueue
dISPDMD1.Queuetext "[as80][il24][sf1][ef18][edge3]"

2. I work a lot with lights and checklights. if your sub refers to checklights in which points are awarded, this also interrupts the animation or does not trigger it in the first place.

3.It is not possible to prioritize the animation, but it is possible to control it to a certain extent. If I put a text behind the animation that I adjust in length to the animation and then add [Na] to the text, I can influence the animation to a certain extent.
Example:
addscore(10000000)
DispDMD1.FlushQueue
dISPDMD1.Queuetext "[as300][il20][sf1][ef6[edge2]"
DispDmd1.QueueText "[edge3][f6]BLA BLA", deFlip, 1000, True
DispDmd1.QueueText "[edge3][f6]BLA", deFlip, 1000, True
DispDmd1.QueueText "[edge++3][f6][na] ", denone, 100, True

It's all beginner stuff, but I didn't find any information anywhere that could help me. If you want to make a table yourself, I hope that this helps.

Lox

You might look at Flug's "Medieval Madness". At the end of the game, there are playing cards displayed and you have to pick whether the next card is higher or lower. Anyway, the cards are displayed on the the DMD using image lists.

I am in the process of updating "Medieval Madness". I have had the same problem as you to try to get some of my new DMD text to display when an animation is running. Running FlushAnimation and FlushQueue didn't help. I noticed pressing the coin in key stopped the animation. It had the FlushAnimation and FlushQueue code there also and "Dmdinuse = FALSE" that I didn't understand. None of that helped. Then I decided to try the following line that was there. To my surprise, it stopped the animation.

TimerDMD.Enabled = FALSE

I don't really know why it worked. It didn't seem like it would work when I tried it.
 
@Ioxagon - inserted a condition that I called "DmdFirst" in men in black to enable or disable the display of points in " sub Addscore(points) " so that the animations are not interrupted.
And if I want to redisplay the points later I use a timer of the same time as my animation that redisplays after expiration or a function directly with a sub. Javous it's quite confusing all that, but it works.
 
@Ioxagon - inserted a condition that I called "DmdFirst" in men in black to enable or disable the display of points in " sub Addscore(points) " so that the animations are not interrupted.
And if I want to redisplay the points later I use a timer of the same time as my animation that redisplays after expiration or a function directly with a sub. Javous it's quite confusing all that, but it works.

Thanks! So that is the reason for the timer. It took a long time for me to figure it out. I hope Loxagon is still around. I remember reading this and had no ideas at the time it was posted until I figured it out last night.
 
It took me a long time to create a decent dmd. I'm sure there must be a better way. Maybe create a Select case with a hierarchy to assign the points in "sub Addscore(points)". Otherwise, using timers is pretty easy to use but limiting...
 
I am actually working on Medieval Madness that Francisco666 built initially. The following is some code he calls "DMD Stuff". Is this actually related to scoring? It doesn't make sense to me. It is placed above some code that performs scoring.

Code:
Sub Target100000_hit
    empiezadmd 50, 1, 32, 125
End Sub

Sub empiezadmd(pInterval, pFont, pStart, pEnd)
    Dmdinuse = TRUE
    PrimerLetra = pStart
    UltimaLetra = pEnd
    fuente = pFont
    velocidad = pInterval
    ResetTimer TimerDMD, pInterval
End Sub

Sub TimerDMD_expired()
    TimerDMD.Enabled = FALSE
    PrimerLetra = PrimerLetra + 1
    dmdstring = "[f"+CStr(fuente)+"]" & Chr(PrimerLetra) & "[f1] "
    DMDSetText dmdstring
    If (PrimerLetra = UltimaLetra) Then
        MyAddDebugText "to zero7"
        Dmdinuse = FALSE
        TimerDMD.Enabled = FALSE
        ResetTimer Timeraddzero, 100
        Exit Sub
    End If
    ResetTimer TimerDMD, velocidad
End Sub

Sub Timeraddzero_expired
    DMDSetText "[f1] "
    Timeraddzero.Enabled = FALSE
    Dmdinuse = FALSE
    DMDFlushAndUpdate MyDMD.UpdateInterval
    Addscore(0)
End Sub
 
Hi George,

Looking at the code (and if I recall correctly 🤔) - I do not believe that it relates to 'scoring' as such, and seems to identify the DMD font number (animation?) sequence that is to be played dependent upon the required action... i.e. the DMD font refresh speed, font number (animation) and the start and end font frames (characters as it were) being identified.

In the above instance - when Target_10000 has been hit - display DMD Font 1, play through the frames 32 to 125, using a frame refresh rate of 50 ms (hopefully this makes sense?).

FYI: Also, when 'dabbling' in DMD Fonts / Animations etc. previously - I did 'adjust' the code to make it easier to read/understand in English, and added a number of comments etc. to understand 'what' was happening during each step of the DMD Animation sequence, including running / refreshing multiple 'fonts' being displayed during the same sequence; this i used when creating a DMD Clock of varying Tables' DMD Animations and 'Different' text fonts for showing the time/date etc. as an overlay (same approach for showing the current score as an example) - as when extracting the animations / fonts and converting to FP DMD *.dmdf files, different lengths are required (even multiple *.dmdf files to create one animation), running at different speeds etc.. There will no doubt need to be a 're-assignment' throughout the coding of more than 32 assigned *.dmdf files - but that's all part of the fun :smile:.

Gin
 
It's related to scoring: if an animation is used (DMDInUse = True), you have to wait for the end of this animation before to display the score.

Code:
Sub AddScore(points)
    If (fpTilted = FALSE) Then
        nvScore(CurrentPlayer) = nvScore(CurrentPlayer) + (points)
'        nvScore(CurrentPlayer) = nvScore(CurrentPlayer) + (points/100)
        puntaje(CurrentPlayer)=puntaje(CurrentPlayer)+ points
        If puntaje(CurrentPlayer)=>4000000000then
>>>> code for free replay <<<<<<<<<<<<<
            If replaygived(CurrentPlayer)=FALSE then
                replaygived(CurrentPlayer)=TRUE
                nvcredits=nvcredits+1
                playSound"s_replaya", VOV
                KnockerSound
                LightSeqPfFlash.Play SeqRandom, 40, ,2000
                Timeraddzerolow.Enabled = FALSE 
                TimerDMDlow.Enabled = FALSE
                TimerDMD.Enabled = FALSE
                Timeraddzero.Enabled = FALSE 
                MyDMD.AddFont 32, "replayat"
                MyDMD2.AddFont 32, "replayat"
                PrimerLetra=31
                UltimaLetra=90
                fuente =32
                velocidad=40
                textstring="[f1] "
                empiezadmd
            Exit Sub
            end If
        end If
>>>> you don't display code if DMD is used for an animation <<<<<<<<<<<<<<<
        If dmdinuse=TRUE or dmdinuselow=TRUE then
        Exit Sub
        end If
 
Thanks guys! I can see that you wouldn't want to stop an animation just to display a score. I do need to stop animations when the player presses a key code that displays something on the DMD. I'm betting they will wait to press the key code when their favorite animations stop running.

I guess this is why I am not the best coder. I probably wouldn't understand it much better if the code used English. On the other hand, I am somewhat proud of the fact that I can understand Gimli's tweaker code well enough to be able to add it to a table and even contributed to development of some of the code.
 
Last edited:
General chit-chat
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.
      Chat Bot Mibs Chat Bot Mibs: Tigre has left the room.
      Back
      Top