ねこさんとkの字さんのソースを組み合わせると、とりあえず以下のようになります。
mx=400:my=300 ; プレイヤーの座標
wx=ginfo_winx
wy=ginfo_winy
msp=4 ;プレイヤーの移動スピード
mse=1 ;敵の移動スピード
;120秒間
countermax=120*60
counter=1
repeat
;自機移動
stick key,15 ; キー入力
if key&1 : mx=limit( mx-msp, 0, wx ) ; 左移動
if key&4 : mx=limit( mx+msp, 0, wx ) ; 右移動
if key&2 : my=limit( my-msp, 0, wy ) ; 上移動
if key&8 : my=limit( my+msp, 0, wy ) ; 下移動
;敵機移動
tmse=mse
if x<mx:x+tmse ;プレイヤーを追尾
if x>mx:x-tmse
if y<my:y+tmse
if y>my:y-tmse
;描写処理
redraw 0
color 0,0,0:boxf
color 0,255,255
pos 0,0:mes "TIME:"+(counter/60)
;敵機描写
pos x,y:mes "〇"
;自機描写
pos mx,my:mes "●"
redraw 1
await 16
if countermax<=counter{
break
}
counter++ ;カウンターの値を常に増やす
loop
これに①と②を追加するわけですが…
まず①は、数学の『三平方の定理』を用いることで実現できます。
自機と敵との距離を計算し、その距離が一定未満かどうかを判定することで、接触したかどうかを判断できます。
HSPには『sqrt』という平方根を求める関数があるので、それを使ってください。
次に②ですが、どのくらいの時間が経過したかは『await』とcounter変数を用いて計算します。
awaitに指定する引数はミリ秒で、1000を指定すると一秒待機します。
1000を60で割ると16.6666…で大体16なので、『await 16』でループごとにcounterを1ずつ足していけば、counterが60になるころには一秒経過したことになります。
敵の動きが早くなるのは、開始から20~25秒、40~45秒、60~65秒…ということなので
現在のcounterを60で割って経過時間(秒)を求め、それをさらに20で割って剰余を求めれば、
その値が『0以上5未満かどうか』という判定を行えて、判定が真だったら『敵のスピードを上げる』という処理を行うことが出来ます。
こんなところでしょうか、是非実装を頑張ってみてください。