“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

88.HSPでゲーム&ウォッチのヘルメットを作ろう その6

次は作業員と工具の当たり判定と、事務所に駆け込んだ時の処理を作る。

作業員の移動処理は、どのフレームでも受け付けている。
そのため、工具が落ちた時だけ判定すると、作業員の移動が勝って、すり抜けられてしまう。
これを防ぐ為に、今回は作業員の移動処理ごとに、工具との当たり判定を付けるようにした。

移動した位置pxと同じ場所に落ちてくる工具の管理変数toolline()で、最下段に工具がある=16になっていたら、ミスにすることにした。
ミスしたら、その工具は消さなくてはならないので、その処理も追加。管理変数toolline()の値から、-16すればいい。

そして、今回は再現になるべくこだわってみたいと思ったので、ミス時の他の処理についても似せて行くようにした。

まずは、ドアの開閉。
ミス時の作業員が表示されている短い間でも、カウンタは進んでおり、開閉する。
これを再現するには、ミス時の作業員表示をしているときも、ドアの開閉判定をしなくてはならない。
その間は工具の落下処理も止めなくてはならない。
ミス時は、missflgを1にすることで、各処理の前にmissflgの状態判定を追加した。

そして、ミスしたときは、中央にこけた作業員を数フレーム表示しなくてはならない。
この間もドアの開閉カウンタは動かし続ける。

if px>0 and px <6  {
  if (toolline(px-1)&16)=16 { ;一番下まで落下しているときにいたらミス
    ;ミス処理系
    missflg=1
    miss+
    missf=0
    startcnt=0

    ;工具を消す
    toolline(px-1)=toolline(px-1)-16
    falltools-

    ;スタート地点に戻す
    px=0
    return
  }
}

*missprocess
  missf+
  pos 467,413:celput 5
    if missf>=60 {
    missf=0:missflg=0
  }
  return

次は、事務所に駆け込んだ時の処理。
スコアを5点加算することはもちろんだけど、そのままスタート地点に戻す。
ただスタート地点に戻してしまうと、処理が速すぎて、ワープしたみたいになる。
ここでも専用のカウンタを作って、5フレームは、そのままドアの中に入ったポーズを表示するように工夫した。

;ドアに入った状態なら
if px=6 {
  if goalcnt<=5 {
    goalcnt+:goto *showplayer
  } else : goalcnt=0 :px=0
}

;右ボタンを押したときに、ドアが開いていれば得点
if px=6 {
  if doorflg=1 {
      score=score+5
  } else : px=5
}

これでひとまずゲームの形にはなった。