いよいよ再現のキモ、GAME Bのスカイダイバーの処理を作る。
もう一度整理すると、GAME Bでは、一番右端のラインで、ヤシの木に引っかかるギミックがある。
そして、プラプラと左右に揺れて、適当なタイミングで元のラインに戻ってくる。当然キャッチできなければミスになる。
と、ここまではネットや参考文献から調べられた。
どんなロジックかをもう少し詳しく調べたかったが、YouTubeにアップされているのは、紹介レベルのものしかなかった。
仕方ないので、見たものからロジックを想像して作ることにした。
右端のラインの落下パターンは、5カ所。その4番目の位置まで進んだら、ヤシの木に引っかかるかを判定する。
引っかかるかどうかの判定は、ランダムでよさそう。引っかかる確率は調整しなくてはならないが、とりあえず、30%ぐらいから始める。
引っかかったダイバーは、右端ラインからはいったん削除するので、4番目の位置を表す 8 を引く。さらに落下総人数には数えないため、現在の落下人数から1を引く。
引っかかったら、左右にプラプラと揺れる。これは4ライン目のダイバー落下処理で行う。
そして、左側に揺れたときに、これまたランダムで元のラインの4パターン目として戻る。
戻った後は、通常の右端ラインと同じように動かす。
戻るときもランダムというのもあるが、右端ラインも、ヤシの木に引っかかっている間に、ダイバーは追加される。なので、ダイバーがいる・いないも判断しないといけない。
うん。書いてるだけでプログラム組むのが面倒だと思ったw
が、結局はそのタイミングに合わせて、論理積で空き判定してあげるだけだったのだが。
できたプログラムはこんな感じ。
〇 ヤシの木に引っ掛ける判定と処理
;3ライン目、ヤシの木に引っかかる?(GAME Bのときだけ) if gamemode=1 and diverlinecnt=2 { ;引っかかる条件 ;3ライン目の4番目のポジションになったとき、4ライン目にダイバーがおらず ;2分の1の確率で引っかかる if rnd(2)=0 and (diverline(diverlinecnt)&8)=8 and diverline(3)=0 { diverline(3)=1 ;4ライン目にダイバーを追加 diverline(diverlinecnt)=diverline(diverlinecnt)-8 ;3ライン目からダイバーを消す falldivers- ;4ライン目は総落下ダイバー数には入れないのでカウントダウン } }
〇 ヤシの木から戻る判定と処理
} else { ;4ライン目の処理 if gamemode=1 { ;GAME Bのみ処理 if diverline(diverlinecnt)=1 and caughtcnt>2 { ;ダイバーが左に揺れてるとき ;3ライン目の人が2~5番目のポジションにおらず、2分の1の確率で元のラインに戻す if (diverline(2)&30)=0 and rnd(2)=1 { diverline(2)=diverline(2)+8 ;3ライン目の4番目のポジションに戻す diverline(3)=0 ;4ライン目は空にする falldivers+ } } ;4ライン目の処理は左右に揺らす if diverline(diverlinecnt)>0 { diverline(diverlinecnt)=diverline(diverlinecnt)^3 caughtcnt+ } } }
テストプレイしてみると、3ライン目のダイバーが、ヤシの木に引っかかって、次の移動処理のタイミングで、すぐ3ライン目に戻って落下してくることが結構あった。
最低でも1往復はぶらぶらwしてもらおうと、カウンタを設けて、判定を行った。
感覚的には、うまく再現できたと思う。
これでほぼ完成。
あとは、音、バイブレーション、落下スピードの調整を行って仕上げよう。