“RUN” それは魔法の言葉

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

183.HSPでゲームを作ろう:竜巻鮫 その5

次はチェーンソーの処理。
アタックボタンを押しているときだけ、チェーンソーを表示するのはフラグ管理で問題なし。
今回は、押しっぱなしにしていると、チェーンソーがオーバーヒートして、使えなくなるようにする。

まずは、ボタンを押したら温度を上げ、離したら下げる処理を、アタックボタンの押した判定、離した判定のところに入れる。
どれくらいの加減がよいのか分からないので、とりあえず±1ずつしてみる。
温度の最大値(オーバーヒート)は、とりあえず1000にして、変数で変えられるようにしておく。

温度の上昇時には、オーバーヒートの判定処理を加える。
オーバーヒートは、状態が二段階あって、

  1. チェーンソーが点滅する状態。ボタンを離して温度が下がれば解除される
  2. 点滅状態でサメを倒すと、消えてしまい、温度が下がっても復活しない→次のサメ落下でミス確定

これらを、1つのフラグで処理することにした。

オーバーヒートフラグ → 0:通常、1:オーバーヒート状態、2:消滅状態

ここまでは、サメの落下や、キャッチの判定を作っていなかったので、細かな調整はしなかった。

そして、温度の状態を示す温度メーター。4段階に目盛りが増える。
オーバーヒート状態になったら、チェーンソー同様、点滅表示させる。
目盛りの増減は、いつもの除算の余りを使って制御。
点滅は、これまた何度も出てきたXOR(排他的論理和)を使って、0と1を繰り返し変更するフラグを作って、片方(今回は0の時)だけ、チェーンソーを表示するようにした。
こんな感じで、if文だらけの汚いソースにw

;チェーンソーを表示する
if attackflg=1 and ohflg<2 {
  if ohflg=1 and gamecnt\30=0 : sawflash=sawflash^1
  if sawflash=0 {
    pos sawx(ppos),sawy(ppos)
    gmode 2 : celput 4,ppos
  }
}

;チェーンソーの温度計表示
tmpstep=sawtmp/(maxtmp/4)+1
tmpstep=limit(tmpstep,0,4)

if sawflash=0 and tmpstep>0 and sawtmp>0 {
  pos 632,540
  gmode 2 : celput 16,tmpstep-1
}