• Google Translate to French or Other Languages Click on the link and a new tab will open with this page translated into French.
    Click on the "To:" pull down option to select a different language. Users will not be logged in on the new Google tab.

Fast Tracking my BAM/FP comprehension

polygame

Inserted Coin
I will take the 256 colors of a GIF versus the 8 shades of the same color of the DMD any day Terry... :)
Converting anything to Animated Gif is really easy theses days, most video editing program does it

if you want to do it old school style there is that site :
I use it a lot for retiming GIFs, work well. the editor is also well done if you don't have nothing else at hand

The pros for me is that, in texture editor you will see only one file for what could be a very large animation of 10 seconds at 24 fps,
instead of using 240 images in texture editor AND having to manage it in the image sequencer (ah! the fun I had...)... there is no Math for me here.

Paolo : I suggest breaking don't your GIFs in scene, 2000 frames for an intro at 24 fps is 83 seconds....it is a damn big intro :)
 
Last edited:

TerryRed

Pinball Master
I will take the 256 colors of a GIF versus the 8 shades of the same color of the DMD any day Terry... :)
Converting anything to Animated Gif is really easy theses days, most video editing program does it

if you want to do it old school style there is that site :
I use it a lot for retiming GIFs, work well. the editor is also well done if you don't have nothing else at hand

Paolo : I suggest breaking don't your GIFs in scene, 2000 frames for an intro at 24 fps is 83 seconds....it is a damn big intro :)


LOL... only less than half of that was the intro. :)

You were close.. it was about 65 secs for the intro. The table already had the full intro audio, so I was trying to match that. This was also the first FP "table" mod I ever tried outside of DOFLinx mods... so I was learnign a lot. Here is the full intro on my vpx pup-pack. I have the same pup-pack working on FP as well.




The rest of the videos were all split up events... but it still takes a long time for some of them at 30 frames at a time.



As for those online gif editors. Sadly they don't work with converting to transparent GIFs / or combined with a larger size,etc. I tried them all and none of them would convert the 24 bit videos I was using to transparent GIFs correctly. PuP can do 24 bit videos with transparency...but for TNA we wanted GIFs.

I'm kind of the other half of PuP and Popper (front-end that uses pup) development (Nailbuster created pup and popper)

So I created a bunch of themes for Popper and learned how to use transparent 24 bit mp4 (h264) videos in Popper. This allowed for some really cool loading videos! Here you can see a few examples of Fire, Jaws, Walking Dead, etc all using full 24 bit videos....but with the vlc window set to use black (0,0,0) as transparent. So all parts of the 24 bit video that are black are transparent (the videos are just normal videos). We've also recently learning how to use alpha stenciling to do similar effects, but more cut out to specific shapes for the transparent areas.

 

TerryRed

Pinball Master
so does the Hologram, this is how I designed it. black is transparent.

Correct. Black is trans...but the rest is semi-trans (perfect for hologram). It's too bad we couldn't have the choice for controlling that (the sem trans I mean). Overlays can work that way (with black being trans and the rest not), but FP doesnt allow you to have Overlays on the PF unless they are flat. Luckily with BAM MP you can make overlays or anything appear wherever you want now.... which is how I'm doing the pupstream mini screen on the PF.
 

Gimli

Pinball Master
This is what I meant. :)

I have the pup plug-in streaming the FP Editor and the PUP FullDMD (FullDMD on dummy plug, Editor on 2nd TV). Ignore the image quality because the the VR preview is very low res.

Anyway... the problem here is that you lose focus of the Editor window when trying to be in FP VR. You need to go back and manually click into the Editor window. So it doesn't work well in the regard.




View attachment 14388
@TerryRed
Instead of using FP editor while table is loaded, I load "NotePad" or your favorite text editor.
And then you can have my template there or whatever and just add your "moveto" codes to the text editor as you go. And then once you have them all then close BAM and FP and copy from text editor to script.

Is that what you mean ?
 

polygame

Inserted Coin
While looking at code of random table, I often see commented code that seem to be physics tweaking.

1. if this is functioning physics code, why is it commented? (comment are usually just comment, no?)
2. if it is established that this is functioning physics code, Is there a 'table template' that everyone uses somewhere?
3. is it just cut and paste and it work? (the table physics magically improve) or other stuff need to be tweaked on the table?

Maybe it is simple but don't be too arsh on me, I am still trying to wrap my head around JS/VBS script difference like :
********************************
DIM = Var(js)
********************************
Sub PowerBump_Skirt1_hit() //end sub = function PowerBump_Skirt1_hit() {//}
********************************
Seriously, I am there... I fell like I am restarting to learn english all over at 50 :(
 
Last edited:

Gimli

Pinball Master
Hey Steve,
There are a couple of code templates that most of us are using, but you can tweak them as get used to them.
Here is the dynamic flipper and bound control code:
Code:
Const BAM_VERSION = 0
AddDebugText BAM_VERSION

If BAM_VERSION > 179 Then xBAM.FixScore
'-------------------------------------------------Gimli Bam Stuff-------------------------------------------
Sub BAM_Init()
   If BAM_VERSION < 233 then Exit Sub
   Set RightFlipperExt      = xBAM.Flipper("RightFlipper")
   Set LeftFlipperExt       = xBAM.Flipper("LeftFlipper")
   RightFlipperExt.Omega    =         47
   RightFlipperExt.SetMaterial       0.4,        0.1,       0.05,      0.065
   LeftFlipperExt.Omega     =         43
   LeftFlipperExt.SetMaterial       0.4,        0.1,       0.05,      0.065
End Sub


If BAM_VERSION => 233 then
    Dim RightFlipperExt,LeftFlipperExt
    Dim omegaCorrectionR
    Dim omegaCorrectionL
    xBAM.BallSpeedLimit = 3000
End If


If BAM_VERSION => 233 then
   const MaxOmegaLeft  = 42
   const MinOmegaLeft  = 32
     const MaxOmegaRight  = 52
   const MinOmegaRight  = 42
End If


Sub RightFlipper_prehit()
   If BAM_VERSION < 233 then Exit Sub
   OnPreHitFlipperSettings(RightFlipperExt)
   omegaCorrectionR = MaxOmegaRight - (RightFlipperExt.ContactPoint * ((MaxOmegaRight - MinOmegaRight)/1.2))
      If RightFlipperExt.ContactPoint < 0.0 then RightFlipperExt.Omega = MaxOmegaRight
      If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = MinOmegaRight
      If (RightFlipperExt.ContactPoint => 0.0) And (RightFlipperExt.ContactPoint =< 1.2) then
         RightFlipperExt.Omega = omegaCorrectionR
      End if
End Sub


Sub LeftFlipper_prehit()
   If BAM_VERSION < 233 then Exit Sub
   OnPreHitFlipperSettings(LeftFlipperExt)
      omegaCorrectionL = MaxOmegaLeft - (LeftFlipperExt.ContactPoint * ((MaxOmegaLeft - MinOmegaLeft)/1.2))
      If LeftFlipperExt.ContactPoint < 0.0 then LeftFlipperExt.Omega = MaxOmegaLeft
      If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = MinOmegaLeft
      If (LeftFlipperExt.ContactPoint => 0.0) And (LeftFlipperExt.ContactPoint =< 1.2) then
         LeftFlipperExt.Omega = omegaCorrectionL
      End if
End Sub


Sub OnPreHitFlipperSettings(FlipperExt)
   If BAM_VERSION < 233 then Exit Sub
OnPreHitFlipperSettings_bounceControl(FlipperExt)
End Sub


Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
   If BAM_VERSION < 233 then Exit Sub
   const base_elasticCoef                        = 0.90 ' very bouncy flipper rubber
   const expected_ball_speed_after_hit           = 350  ' calc elasticCoef to get desired ball speed after ball hit flipper
   const minimum_elasticCoef_to_scale_fast_balls = 0.15 ' we will add this to calculated elastiCoef, so ball after hit will have aditional 5% of speed before hit
   const reduction_for_flipper_in_motion         = 0.17 ' if flipper is not in starting point, reduce elasticCoef by 20%

   If FlipperExt.Hit Then
      Dim elasticCoef
      Dim maxElasticCoef
      Dim ballSpeed
      ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5 ' averge speed of

      maxElasticCoef = base_elasticCoef
      If FlipperExt.AngleDiff > 1 Then maxElasticCoef = maxElasticCoef - reduction_for_flipper_in_motion

      elasticCoef = base_elasticCoef
      If ballSpeed > 1 Then elasticCoef = expected_ball_speed_after_hit / ballSpeed
      elasticCoef = elasticCoef + minimum_elasticCoef_to_scale_fast_balls

      If elasticCoef > maxElasticCoef Then elasticCoef = maxElasticCoef

      FlipperExt.SetMaterial elasticCoef
   End If
End Sub

' === End of Dynamic Flipper Settings ===

And here is the xml physics code that SLAM is using (This one from Start Wars :

Code:
'=============================== PHYSICS XML ===========================

'<?xml version="1.0" encoding="utf-8"?>
'<document>
'  <!—Custom Physics for Star Wars -->
'  <physics fps="296" threaded="1"></physics>
'  <ball newtonDamping="0" mass="75" gravity="6400" damping="0.65"></ball>
'  <flipper releaseOmega="18" rotationSpeedChart="{0.0,100.0}[0.0,100.0]" newtonDamping="1" mass="20150" omega="43" moeMethod="0"
'           leftXoff="0" leftYoff="1500" leftZoff="0"
'           rightXoff="0" rightYoff="1500" rightZoff="0"></flipper>
'  <bumper impulse="90.0" impulseRandomness="0" vectorRandomness="6"></bumper>
'  <autoplunger mass="20000.0" force="60000.0"></autoplunger>
'  <diverter mass="10000.0" omega="33.0"></diverter>
'  <gate mass="0.5" gravity="3000.0" damping="1.0"></gate>
'  <kicker impulse="1000.0" vukImpulse="1400.0" impulseRandomness="2" vectorRandomness="1"></kicker>
'  <plunger mass="20000.0" force="30000.0"></plunger>
'  <slingshot impulse="650.0" impulseRandomness="15" vectorRandomness="3"></slingshot>
'  <spindisk mass="10000.0" angularDamp="0.33" linearDamp="0.25"></spindisk>
'  <spinner mass="50000.0" gravity="9800.0" angularDamp="0.5" angularAccel="5.25"
'           spinDampLoose="0.30" spinBackLoose="0.90"
'           spinDampNorm="0.40" spinBackNorm="0.65"
'           spinDampTight="0.70" spinBackTight="0.65"></spinner>
'  <emkicker mass="10000.0" omega="80.0"></emkicker>
'  <varitarget mass="500.0" damping="0.9" tension="3.0" return="15.0"></varitarget>
'  <magnet impulse="10.0" impulseRandomness="2"></magnet>
'  <nudge impulse="240.0" impulseRandomness="25.0" warningLevel="280" leftAngle="60" upAngle="0" rightAngle="320"
'         vectorRandomness="5" visualDistance="3" waitPeriod="300" maxBallVelocity="500.0"></nudge>
'  <defaultMat softnessCoef="0.03" elasticCoef="0.1" staticFriction="0.01" kineticFriction="0.02"></defaultMat>
'  <playfieldMat softnessCoef="0.02" elasticCoef="0.1" staticFriction="0.01" kineticFriction="0.02"></playfieldMat>
'  <metalMat softnessCoef="0.01" elasticCoef="0.15" staticFriction="0.02" kineticFriction="0.02"></metalMat>
'  <woodMat softnessCoef="0.03" elasticCoef="0.15" staticFriction="0.03" kineticFriction="0.02"></woodMat>
'  <plasticMat softnessCoef="0.02" elasticCoef="0.2" staticFriction="0.02" kineticFriction="0.01"></plasticMat>
'  <rubberHardMat softnessCoef="0.08" elasticCoef="0.50" staticFriction="0.04" kineticFriction="0.055"></rubberHardMat>
'  <rubberIntMat softnessCoef="0.1" elasticCoef="0.72" staticFriction="0.05" kineticFriction="0.065"></rubberIntMat>
'  <rubberSoftMat softnessCoef="0.12" elasticCoef="0.90" staticFriction="0.06" kineticFriction="0.075"></rubberSoftMat>
'  <gateMat softnessCoef="0.05" elasticCoef="0.65" staticFriction="0" kineticFriction="0"></gateMat>
'  <kickerMat softnessCoef="0.01" elasticCoef="0.05" staticFriction="0.8" kineticFriction="0.8"></kickerMat>
'  <rampMat softnessCoef="0.01" elasticCoef="0.01" staticFriction="0.01" kineticFriction="0.01"></rampMat>
'  <plungerMat softnessCoef="0.04" elasticCoef="0.55" staticFriction="0.02" kineticFriction="0.02"></plungerMat>
'  <spindiskMat softnessCoef="0.05" elasticCoef="0.5" staticFriction="1.5" kineticFriction="2"></spindiskMat>
'</document>

'=============================== PHYSICS XML ===========================

In order for BAM to use it must be pasted as a comment.
Yes just copy and paste and it will work ! Make sure your Flippers are name LeftFlipper and RightFlipper
 

Gimli

Pinball Master
Code:
Maybe it is simple but don't be too arsh on me, I am still trying to wrap my head around JS/VBS script difference like :
********************************
DIM = Var(js)
********************************
Sub PowerBump_Skirt1_hit() //end sub = function PowerBump_Skirt1_hit() {//}
********************************

Yes as long as "PowerBump_Skirt1" is hitable object (generates a hit event)
 

Gimli

Pinball Master
Ok, Which raise me the question, what is a dynamic flipper compare to a "regular" one?

Steve BAM is able to monitor almost all aspects of table physics and we can then adjust physics in code based on what is happening.

So here is a metaphor.
Lets say I am Monitoring (Stalking lol) GeorgeH
And I want him to do a dance every time the street light turns green but only if is walking at 4 miles/hour and only if he is on the left side of street.
:)

BAM lets you do crazy stuff like that.

So with Dyanmic Flippers Rav created a code call "Prehit" where BAM predicts where on the flipper the ball will make contact.
"Contact Point"

CRAZY stuff.
So we made a code where the flipper will work differently depending where on the flipper the ball will hit...

We called it Dynamic as BAM is changing flipper physics in real time base on what is happening as you play a table
We changed Flipper speed so flpper works faster when ball hits base of flipper and it works slower when ball hits tip....
 

polygame

Inserted Coin
I am in the process of removing every single "execute" code from reel it In
because it really lag a lot. I have first disabled defender to see if this was the culprit and indeed it is.

but it seem that some would be impossible to change since they would have infinite/not known number of
expansion/iteration. sometime there would be thousands of possibilities. in the example below where the variable "theMultiplier"
is incremental(1,2,3,4,5...1000...etc...) I'd have to create a fair amount of if statement. How you guys get around that?

sub passthroughOpto_hit()
PlaySound"opto"
BigWipeLightEvent()
blocker.MoveTo blocker.Tx,15, blocker.Tz,500
roundUp.Collidable=true
resetXLit()
if theMultiplier<10 then
theMultiplier=theMultiplier+1
PlayMe(9)
end if
execute "xlight"&theMultiplier&".State=BulbOn"
SpinCounting=true
targetprotector.Collidable=true
RingGuard.Collidable=true
passthroughTimer.Set true ,1000
SpinDisk.SolenoidPulse(3000)
end sub


Disabling Defender altogether fix this on my cabinet but I cannot turn it off on my development machine. so should I leave the scripts as Is or maybe found another Antivirus that doesn't scan for eval and execute?

Couldn't FP/BAM be simply excluded from defender real time protection? On stack overflow I saw a vbs thread saying that execute is not a threat if you don't let the player input a variable himself (like a text field) which make sense.
 

Isaac Sauvage

Meep!
Site Supporters
Consultant
This might be a weird post, but.. kinda funny?

So I was cruising FB a bit earlier... and in FB, there's this "recommended posts" thing. So I saw this post recommended--

Is that YOU there, Steve?

Bah. I thought the whole point of Facebook was to draw attention AWAY from your fashionista mug!
 

polygame

Inserted Coin
This might be a weird post, but.. kinda funny?

So I was cruising FB a bit earlier... and in FB, there's this "recommended posts" thing. So I saw this post recommended--

Is that YOU there, Steve?

Bah. I thought the whole point of Facebook was to draw attention AWAY from your fashionista mug!

Hey! yep it's me :) send me an request guys if you want. Paul and loafer are already in my contact.
 

Isaac Sauvage

Meep!
Site Supporters
Consultant
Hey! yep it's me :) send me an request guys if you want. Paul and loafer are already in my contact.
Oof, Loaf... i.e. Rob C... I owe him something.

Careful though, Steve-- seeing as I'm the King of the Guinea Pigs, please, always do exercise caution around my people. Thank you!
 

Isaac Sauvage

Meep!
Site Supporters
Consultant
did I say something inappropriate ?
Eh, it was moreso me getting all amazed and excited to see others in the scene, right on Facebook.

My FB avatar is "King of the Guinea Pigs," and as such, intended some light-hearted silliness, nothing more.

Please carry on. I get easily wound up sometimes. :D
 

polygame

Inserted Coin
Hey I did too! I live in vaudreuil. Are you by any chance the person who bought my mini mame machine via RC a couple of years ago?
If you swing by Montréal when C19 is over, just let me know :)
 

TerryRed

Pinball Master
Not me :)

I'm military....so I can live in different places. I lived in Chatham and Windsor until I was 37... then joined the military when Windosr got hit hard in 2010...then was posted to Petawawa...now I'm in Ottawa.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
    @ Paolo: ********* *** ******
    Top