Hi Loserman76,
first of all, thank you for your EM gorgeous tables.
I looked at the codes of your tables and I see an issue with the ninuzzu's algorithm which creates the ball shadows.
That is: a sphere (the ball) shadow impinging on a plane (the table surface) creates always an ellipse, not a circle as per the current algorithm (except when the light shines exactly above the ball of course), but I agree that this is not a real issue since during the game the approximation could be well tolerated.
In your EM tables where the table surface is more clean from picture compared to the latest electronic pinballs, this issue is more evident, especially when the ball moves at the sides of the table, the shadow detaches from the ball looking as the ball was floating in the air, instead of rolling on the table surface.
Since the case of a so tilted shadow is unrealistic by itself (the light source should came from very low over the table), I suggest you to reduce the shadow inclination to one third of the current, so that the shadow remains attached to the ball and the circular footprint on the table is more approximable to a circle.
That is:
'*****************************************
' ninuzzu's BALL SHADOW
'*****************************************
Dim BallShadow
BallShadow = Array (BallShadow1,BallShadow2,BallShadow3,BallShadow4,BallShadow5)
Sub BallShadowUpdate_timer()
Dim BOT, b
BOT = GetBalls
' hide shadow of deleted balls
If UBound(BOT)<(tnob-1) Then
For b = (UBound(BOT) + 1) to (tnob-1)
BallShadow(b).visible = 0
Next
End If
' exit the Sub if no balls on the table
If UBound(BOT) = -1 Then Exit Sub
' render the shadow for each ball
For b = 0 to UBound(BOT)
If BOT(b).X < Table1.Width/2 Then
BallShadow(b).X = ((BOT(b).X) - (Ballsize/6) + ((BOT(b).X - (Table1.Width/2))/21)) + 6
' -----------------------------------------------------------------------------------------^ THIS WAS 7
Else
BallShadow(b).X = ((BOT(b).X) + (Ballsize/6) + ((BOT(b).X - (Table1.Width/2))/21)) - 6
' -----------------------------------------------------------------------------------------^ THIS WAS 7
End If
ballShadow(b).Y = BOT(b).Y + 4
' -----------------------------------^ THIS WAS 12
If BOT(b).Z > 20 Then
BallShadow(b).visible = 1
Else
BallShadow(b).visible = 0
End If
Next
End Sub
The result is much more realistic.
Have a great day.
Massimo