“RUN” それは魔法の言葉

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

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

次はミスクリアの処理を作る

ミスクリアは200点と500点に達した時に、ミスがあればクリアされる。ミスしていなければ、そのままゲーム続行。

スコアが200(500)点に達するのは、工具の落下と、事務所に駆け込んだときの2パターンある。
なので、「オクトパス」のときに作った判定ロジックを流用した。
スコアを加算する前に、変数bscに待避しておき、bscと、現在のスコアを加味して判定する。

if (bsc>=195 & bsc<200 & score>=200) | (bsc>=495 & bsc<500 & score>=500) {
  if miss>0 and miss_clearflg=0 : miss_clearflg=1 : miss_clearcnt=300 : miss_flash=1 : bsc=score
}

ここまでは楽だった。問題は、ミスクリア時の演出だった。
ミスがあれば、ミスマークが点滅して、ミスがクリアされる。
単純にこれだけならよかったのだが、この間、ドアの開閉も発生するし、作業員も移動できる。
しかも、ドアが開いていると、入れるが、スコアは加算されない。そしてその場から移動できない。

これだけの演出をするために、フラグを作りまくりw
ミスクリア演出中であるフラグ、ミスマークが点滅するためのカウンタ、ミスマークが点灯しているか消灯しているかを表すフラグと、3つのフラグで強引に判定。
ただ、ミスマークを表示するサブルーチンや、移動のサブルーチンはなるべく使いまわすようにした。

*missmark ;ミスマークの表示ルーチン
  ;ミスクリア時の処理
  if miss_clearflg=1 {
    ;30フレーム単位でミスマークを点滅させる
    if (miss_clearcnt\30)=0 {
      miss_flash=miss_flash^1
    }
    miss_clearcnt-
    if miss_clearcnt<=0 : miss_clearflg=0 : miss=0
  }

  if miss_flash=1 or miss_clearflg=0 {
    repeat miss
      pos 530,178
      celput 6,cnt
    loop
  }
  return