沢渡さんのおっしゃられている通りでawaitの待ち時間が残っていてもoncmd(onkey/onclick)でラベルジャンプしたらawaitの次の行に進んでいってしまいます。
直感的には残りの待ち時間を再waitして欲しいんですけどね。
ということで、
「waitした時の時間を記録しておき、oncmd等によってwait抜けしたとき残ってる時間はないか計算して残ってたらその分再waitする」
というモジュールを作りました。
wait / await の処理を上書きしています。
//
// mod_waiton.hsp - ver.1.2.2.bbs(必要な部分だけ抽出) by MIZUSHIKI
//
#module m_won
#defcfunc tGT@m_won
#ifndef _HSP3DISH
#uselib "winmm.dll"
#cfunc timeGetTime "timeGetTime"
return timeGetTime()
#else
getreq time24, SYSREQ_TIMER
return time24
#endif
#define global waiton(%1=100) :\
wtime@m_won = tGT@m_won() :\
while 1 :\
nokori@m_won = %1-(tGT@m_won() - wtime@m_won)/10 :\
if( nokori@m_won<=0 ){ _break } :\
wait@hsp nokori@m_won :\
wend :\
awtime@m_won = tGT@m_won()
#define global awaiton(%1=0) :\
if( awtime@m_won=0 ){ awtime@m_won = tGT@m_won() } :\
while 1 :\
nokori@m_won = %1-(tGT@m_won() - awtime@m_won) :\
if( nokori@m_won<=0 ){ _break } :\
await@hsp nokori@m_won :\
wend :\
awtime@m_won = tGT@m_won()
//標準のwait/awaitを削除し、waiton/awaitonで上書き
#undef wait
#define global wait waiton
#undef await
#define global await awaiton
#global
//
// ↑ ここまでモジュール
//
// ↓ れか さんのスクリプト
#uselib "user32.dll"
#func SetTimer "SetTimer" int,int,int,int
#func KillTimer "KillTimer" int,int
#define WM_TIMER 0x0113
#define TIMER_ID 1 ;タイマーID
oncmd gosub *OnTimer, WM_TIMER
onexit goto *OnQuit
SetTimer hwnd, TIMER_ID, 250, 0 ;タイマーセット(これをコメントアウトにするとちゃんと1秒毎に数字が増える)
repeat;無限ループ
cls
aa=aa+1
mes aa
await 1000;一秒ごとに数字を増やす
loop
*OnTimer;タイマー処理(空)
tc++ : title "TimerCount: "+tc ; ← 確認用で追記しました
return
*OnQuit;終了時にはタイマーキル
KillTimer hwnd, TIMER_ID
end
「await/waitはちゃんと待ってくれない」
http://hsp.tv/play/pforum.php?mode=pastwch&num=88056
実はここでも同様の質問があり、似たような回答をしています。
モジュールを少し変更してありますが概ね同じなので、モジュールの詳細はコチラを参照ください。