FOR T=0 TO LEN(MSG$)-1
LOCATE X+T,Y:?MSG$[T]
FOR I=1 TO XSLOW
WAIT
IF BUTTON(2)==#A THEN XSLOW=0
NEXT
NEXT
WAITを分解して必ず1(省略してますが)になるようにしているのがポイントです。これならばBUTTON(2)が有効になります。その上でループ中にボタンチェックを入れているのでSLOWが大きな数字の場合も反応が良くなる(はず)です。
他の部分はそのままで動くと思います。ただUSEの位置はLOADの後(3行目)の方がいいかなと思う部分や、DEF(ユーザー定義命令)なので、ローカル変数になる変数は全てVARをつけた方がいいとは思いますが、とりあえず動作上は問題ないはずです。
と言うことで、引き続き頑張ってください!
SPSTOPしちゃうと次に動かす時にSPSTARTも必要になるんで、そういう意味では上書きで止めるのが一番手っ取り早い感じなんですよね〜。
ちなみに現在のアニメーション(キャラ定義番号)で止めるんで良ければ、SPANIMしているキャラクタ定義番号が0だった場合は、
SPCHR 0 OUT C
SPCHR 0,C
と現在のキャラ定義番号を取得して再セットすることでSPANIMでのI効果を打ち消す(止める)事が出来ますよ。
上書きで止めるのはSPSTOPと違って他のアニメーション効果は継続することが出来るのがメリットですかね。