Quick theorycraft -
Have a "base" (invisible) sprite, and the ball sprite in a container. Spawn the base sprite in a random direction in a random speed, bullet movement. The ball will also spawn as part of the container. Pin this to the base sprite's position only so it will move on the "horizontal" plane with the base sprite, and set up its own random vertical bullet behavior for the "height". The sprites vertical bullet velocity will be modified every tick by a set amount downwards (gravity), and when it collides with its own base sprite flip the angle of motion back upwards again while cutting the velocity by a half or third or so. You can round the position or use a distance clamp from the base sprite to trigger a "final bounce", where the bounce action is disabled, and fade can start to kick in.
I noticed in the example the balls actually collide with the barrels with vertical discrimination too - if you want something like that, you can have a "collide-able" state for the base sprite based on the vertical position or distance from the ball sprite. If the ball is a certain distance (say, the height of the barrel or other obstacle) from the base, you can enable the state. While active, if the base sprite collides with a barrel, it can bounce off or change directions. If it is already overlapping an obstacle when the state is triggered, it can immediately run a bounce action for the ball and continue moving the same direction, representing hitting the top of the object.
Your base sprite can also be visible as a shadow or glow effect rather than invisible.