しょぼーんさんの言っているような形にするには35行目あたりで、
B2=BUTTON(2)
のようにもう一つボタンの内容を保存しておいて、39行目のSPANIMのところで、
IF B2 AND 4 THEN SPANIM〜
って感じにすればいいと思いますよ。
あと止めるときにSPSTOPを使う場合、また動かしたいときにSPSTARTもいれないといけなくなるのでキャラの動きを止める目的ならば、
SPCHR 0,SPCHR(0)
というやり方もあります。こっちの場合は、SPSTARTで再開しなくても次のSPANIMでアニメーションをさせることが出来ます。
IF BUTTON(2) THEN
だけではなにかボタンが押されたら飛ぶという事になってしまいます。なので、Aボタンを押した時、としたいのなら
IF BUTTON(2) == #A THEN
もしくは
IF BUTTON(2) AND #A THEN
として明確にAボタンが押された時という判定にしなければいけませんね。Bボタンも同様です。
しょぼーんさんも指摘されているようにボタン判定のWHITEに無駄がありますね。
例えば201〜204行目のWHILEも条件部分が無駄になってるんで、
WHILE 1
IF BUTTON(2)==#A THEN GOTO @GAME1
IF BUTTON(2)==#B THEN GOTO @TITLE
WEND
にした方がよりベストです。あとWHILEなどのループ中でボタン判定をする場合、ループの中にVSYNCをいれておくとよりベターで、さらにTHENのあとのGOTOは省略も可能です。
またWHILEの際はインデント(スペース)をいれた方がプログラムは見やすくなります。ボタン判定もIFで何度も参照する場合は一度変数に入れておいた方がいい場合が多いです。
と言うのを全て組み合わせると、上記のプログラムは、
WHILE 1
VSYNC
B=BUTTON(2)
IF B==#A THEN @GAME1
IF B==#B THEN @TITLE
WEND
になります。まあ変数に入れたぶん少し長くなってしまいますし、必ずそうしなければいけないというわけではないので参考までにという感じで…。
SPHITSPは、SP同士の当たり判定を取得するもので、SPCOLをして、当たり判定をつけます。
SP同士なら、有効な関数です。
というか、それ以外ありません。
(SPHITRCや自作関数はほぼ使わない)
ポーズは、
@PALSE
WHILE 1
B=BUTTON()
GOTOで来たなら
IF B==#R THEN GOTO @(メインループ名)
GOSUBで来たなら
IF B==#R THEN RETUEN
WEND