bexecでもbtnareaを使いたい

screenshot screenshot

どんだけ困ってるんだろうか、と。おせっかいながらやってみた。

define節に書く分

defsub bexec
defsub btnarea
; 以下、これだけの変数を使うので、100〜105はかぶらないように適当に変更すること。
numalias bexec_res1,100
numalias bexec_res2,101
numalias mouse_x,102
numalias mouse_y,103
numalias btnarea_y,104
numalias btnarea_flag,105
numalias bexec_interval,30 ; btimeに渡す数値。30くらいなら、秒間30フレームくらい?

game以下、*start以上

*btnarea
mov %btnarea_flag,1
getparam %btnarea_y
_btnarea %btnarea_y
return

*bexec
getparam s%bexec_res1,i%bexec_res2
if %btnarea_flag=0 _bexec $%bexec_res1,%%bexec_res2:return
*bexec_loop
btime bexec_interval
_bexec $%bexec_res1,%%bexec_res2
notif $%bexec_res1="TIMEOUT" return
getmousepos %mouse_x,%mouse_y
if %btnarea_y>0 notif %mouse_y>%btnarea_y mov %%bexec_res2,-4:return
if %btnarea_y<0 if %mouse_y>0-%btnarea_y mov %%bexec_res2,-4:return
goto *bexec_loop

解説

これは、btnareaをbexecにも対応させるスクリプトです。btnareaとbexecを上書きします。これを導入すれば、特にスクリプトを書き換えることなく、bexec中でも擬似的にbtnareaと同じことが実現できます。
※btnareaの本来の機能は損なわれません。
ただし、以下の副作用があります。
1.bexecに渡す変数が必ず二つでないといけなくなる。
2.bexecでbtimeが使えなくなる。(エラーにはならないが無効になる)