This might not be what you’re looking for, but I was able to use this post by @sleitnick to learn how to retrieve the reflection angle at which any “thing” striking a plane based on a Raycast’s returned normal.
The one-liner I can give you to retrieve reflection in terms of a unit vector (as a direction) is this:
local reflectionDirection = (Direction - (2 * Direction:Dot(Result.Normal) * Result.Normal))
If you’re raycasting, you should be able to get the current direction in which the object is traveling (if it’s falling, the direction would be 0, -1, 0) and then calculate the force at which your ball bounces back towards that reflection’s direction, and more specifically, the X axis within that direction unit vector.
Alternatively, the .rbxl file in this post and the post by @EgoMoose itself are pretty great teachers of a lot of really cool physics-based movement techniques based on real mathematics, so those two things could also be helpers to what you’re looking for.
Again, I’m not the most well-versed in this kind of thing, it certainly isn’t my strongsuit, so I hope either what I’ve said or the resources I’ve linked could help you figure out what you’re looking for.
Good luck!