I've only had a quick look, but....
Firstly, the sound not playing seems odd. I replaced the sound with the text "HIT" when it collides, (as I couldn't be bothered setting up a sound file for it), and it works every time. I can only think that perhaps your sound has some 'silence' at the end of the wav, meaning it is still playing even though you can't hear anything, and the 'if sound playing(1)=0' section is preventing it from playing. My suggestion; get rid of the 'if sound playing' bit and see if it works.
Secondly, the ball getting embedded problem. The ball will change direction (or apply screw in your game) if the ball is in the collision zone - even if it has just changed on the previous sync. So long as it stays in the collision zone, it will keep changing direction and applying screw endlessly.
One solution is to move the ball in the code out of the collision zone when it hits. In your case, that wouldn't be quite so easy as normal pong, because you'd need to determine which way the ball was coming from in order to know which side of the paddle to move it.
The other solution - probably a bit simpler in your case, is to give each paddle a collision flag, ie. ball_just_hit_paddle_3 = 1. Then only allow a collision if it's flag is zero. (Don't forget, each time it collides with a paddle, to make sure you reset the flags for the other three paddles to zero).
Ah hell - I'm bored... I'll show you......
Rem Project: Pfong
Rem Created: 2004-09-25 13:21:56
Rem ***** Main Source File *****
gosub init_game
do
gosub player_input
gosub ball_control
gosub draw_scene
sync
loop
init_game:
psize#=8:prot#=16
p1score#=0:p2score#=0
ballspeed#=0.1:pspeed#=0.2
sound_flag#=0
set display mode 640,480,16
`load sound "blip.wav",1
make object box 1,1,0.1,psize#:color object 1,rgb(0,0,255)
make object box 2,1,0.1,psize#:color object 2,rgb(0,0,255)
make object box 3,1,0.1,psize#:color object 3,rgb(0,255,0)
make object box 4,1,0.1,psize#:color object 4,rgb(0,255,0)
make object sphere 5,1:color object 5,rgb(255,255,255)
make object box 6,53,2,52:position object 6,0,-1.5,0:color object 6,rgb(0,0,0)
sync on:sync rate 8000:balla#=90:hide mouse
return
player_input:
rem read player keys
if keystate(16)=1 and psize#/2+p1pos#<=25 then p1pos#=p1pos#+pspeed#
if keystate(30)=1 and psize#/2-p1pos#<=25 then p1pos#=p1pos#-pspeed#
if keystate(24)=1 and psize#/2+p2pos#<=25 then p2pos#=p2pos#+pspeed#
if keystate(38)=1 and psize#/2-p2pos#<=25 then p2pos#=p2pos#-pspeed#
return
ball_control:
rem calc ball movement
rem player 1, rear racket
if ballx#<-25 and ballx#>-25.5 and abs(p1pos#-ballz#)<psize#/2 and pcf1=0
balla#=balla#*-1
gosub sound_blip
pcf1=1
pcf2=0
pcf3=0
pcf4=0
rem screw
if keystate(16)=1 and abs(p1pos#-ballz#)<psize#/2 then balla#=balla#-prot#
if keystate(30)=1 and abs(p1pos#-ballz#)<psize#/2 then balla#=balla#+prot#
endif
rem player 1, front racket
if ballx#<11 and ballx#>9 and abs(p1pos#-ballz#)<psize#/2 and pcf2=0
balla#=balla#*-1
gosub sound_blip
pcf1=0
pcf2=1
pcf3=0
pcf4=0
rem screw
if keystate(16)=1 and abs(p1pos#-ballz#)<psize#/2 then balla#=balla#+prot#
if keystate(30)=1 and abs(p1pos#-ballz#)<psize#/2 then balla#=balla#-prot#
endif
rem player 2, rear racket
if ballx#>25 and ballx#<25.5 and abs(p2pos#-ballz#)<psize#/2 and pcf3=0
balla#=balla#*-1
gosub sound_blip
pcf1=0
pcf2=0
pcf3=1
pcf4=0
rem screw
if keystate(24)=1 and abs(p2pos#-ballz#)<psize#/2 then balla#=balla#+prot#
if keystate(38)=1 and abs(p2pos#-ballz#)<psize#/2 then balla#=balla#-prot#
endif
rem player 2, front racket
if ballx#>-11 and ballx#<-9 and abs(p2pos#-ballz#)<psize#/2 and pcf4=0
balla#=balla#*-1
gosub sound_blip
pcf1=0
pcf2=0
pcf3=0
pcf4=1
rem screw
if keystate(24)=1 and abs(p2pos#-ballz#)<psize#/2 then balla#=balla#+prot#
if keystate(38)=1 and abs(p2pos#-ballz#)<psize#/2 then balla#=balla#-prot#
endif
rem ball hit upper or lower wall
if ballz#>25 or ballz#<-25 then balla#=180-balla#
rem ball is gone, goal
if ballx#>40 or ballx#<-40 then ballx#=0
return
draw_scene:
rem position ball
balla#=wrapvalue(balla#)
position object 5,ballx#,0,ballz# : yrotate object 5,balla#
ballx#=newxvalue(ballx#,balla#,ballspeed#) : ballz#=newzvalue(ballz#,balla#,ballspeed#)
rem position player and cam
position object 1,-26,0,p1pos#:position object 2,10,0,p1pos#:
position object 3,26,0,p2pos#:position object 4,-10,0,p2pos#:
position camera 0,60,0 : point camera 0,0,0
sync
return
sound_blip:
`if sound playing(1)=0 then play sound 1
text 0,0,"HIT"
sync
wait 200
return
Hope that helps.