メインルーチンのテンポを崩さずに複数の処理を並列して行うには、wait系を使わず条件分岐だけで定期的に処理させる必要があります。
簡単な例を書いたので参考にして頂けると思います。
Win32APIのSetTimer関数を使用できればもっと楽になるのですが。
#define lamp_cx 200
#define lamp_cy 50
lamp_on_buff = ginfo_newid
buffer lamp_on_buff, lamp_cx, lamp_cy
gradf 0, 0, lamp_cx, lamp_cy, 1, $FFCC55, $FFCC00
font "メイリオ", 23, 1 | 16
pos 60, 10 : color 255, 100, 0 : mes "大当たり"
lamp_off_buff = ginfo_newid
buffer lamp_off_buff, lamp_cx, lamp_cy
gradf 0, 0, lamp_cx, lamp_cy, 1, $CCAA88, $AA9966
font "メイリオ", 23, 1 | 16
pos 60, 10 : color 150, 150, 150 : mes "大当たり"
screen 0, , , , , , 220, 200
show_lamp_buff = lamp_off_buff
// メインループ
repeat
// 並列で行いたい処理
gosub *other_task
// 定期的に実行する処理
if (cnt \ 10) == 0 : gosub *change_lamp
// 描画は常に行う
redraw 0
color 255, 255, 255 : boxf
gosub *draw_lamp
gosub *draw_other
redraw 1
wait 2
loop
// 表示する画像を切り替える
*change_lamp
if show_lamp_buff == lamp_off_buff {
show_lamp_buff = lamp_on_buff
} else {
show_lamp_buff = lamp_off_buff
}
return
// 現在の画像を描画する
*draw_lamp
pos 10, 10
gcopy show_lamp_buff, 0, 0, lamp_cx, lamp_cy
return
// 別の処理の描画
*draw_other
pos 10, 80
color 255, 0, 0
mes "並列の処理:" + count
return
// 並列で行う別の処理
*other_task
count++ ;とりあえずひたすらカウント
return