ジャンプ中、地面にいるとき、のようにメインループを分けるのはよくないです。
ジャンプや落下は一定速度で動くものではありません。
実際にはだんだん速くなっていきます。
だからVX,VYという変数を追加して、速さを変化させ、SY=SY+VYでスプライトを動かします。
BGGETで当たり判定をするとき、スプライトの座標を入れるだけだと
スプライトの左上の位置でしか判定してくれません。
左上、右上、左下、右下の4回判定するとうまくいきます。
また、1回判定するだけだと壁の縁を通り過ぎてしまい、めりこんでしまいます。
http://petitverse.hosiken.jp/community/petitcom/topic/?read=1274&ukey=0 で同じような話題があったので、それとおなじようにFORで1ドットずつ動かしながら判定するようにしました。
あとSPCOLは自分だけでなく相手にも使わなければいけません。
とりあえず修正したやつ→【NDWXJES3】