I'm a bit confused because as far as I can tell from this code, it should only be moving when you're
not jumping. That is a problem with this code nevertheless, though, so I'll explain why it does that, in case it has something to do with your actual problem.
You have a WAIT loop in your @JUMP routine. The problem with this is that while it's waiting in @JUMP, it can't do anything else, including update enemies. In other words, this is how your code works:
Frame 0:
run main loop
run jump code
button is not pressed, so return
run enemy gen
run enemy move
run collision
wait 2 frames
Frame 2:
run main loop
run jump code
button is not pressed, so return
run enemy gen
run enemy move
run collision
wait 2 frames
Frame 4:
run main loop
run jump code
button is pressed, so run jumping loop
wait 1 frame
Frame 5:
button is pressed, so run jumping loop
wait 1 frame
Frame 6:
button is pressed, so run jumping loop
wait 1 frame
Frame 7:
button is pressed, so run jumping loop
wait 1 frame
Frame 8:
button is not pressed, so return
run enemy gen
run enemy move
run collision
wait 2 frames
Frame 10:
run main loop
run jump code
button is not pressed, so return
run enemy gen
run enemy move
run collision
wait 2 frames
Notice how as long as that button is pressed down, it does nothing but wait in that loop.
Because SmileBASIC can only do one thing at a time, you have to avoid routines that span over multiple frames like that. Something that would work is simply:
@jump
if button(0)!=16 then return
dec y,2
return
This would only update once every two frames though, but that's more consistent with the rest of your code anyway.