進捗 ゲームシステム編 #02
一時停止処理など
Abeyance ( temporary stop ) 機能を確認。
パズルゲーム中に任意のタイミングで一時停止する機能( ABEYANCE Function ) を実装中。
オバケパズルは落下中/操作中/連鎖エフェクト中のパズルドロップ以外は操作できる「アクティブ連鎖」が実装されている。
しかしこれのせいでパズルを作る側はタイミング調整が難しく、ゲームを作るための難易度がだいぶ上がる。オバケパズルはこのアクティブ連鎖以外に盤面回転とかもあるので、ゲームエンジンは結構複雑なタイミング処理になっている。
連鎖判定後にパズルドロップが消されると新しいパズルドロップが上から落ちてきて、現在積まれているパズルドロップは消されたドロップの分下へ落ちる。これが落ちものパズルの基本動作。
連鎖判定後に空いたスペースを埋めるべく落下中のパズルドロップはプレイヤーに操作させない、つまり連鎖させたパズルドロップより上に積まれているパズルドロップも操作できないようにロックをかける必要がある。
ところがアクティブ連鎖を繰り返していると、タイミング次第で操作中のパズルドロップより下の方で連鎖が発生する場合がある。この時はプレイヤーの操作を強制的に中断、悪いことにパズルドロップがスワップ中だった場合は強制的にスワップをキャンセルするスワップキャンセラーという処理もある。落下させたいのに上の方でパズルドロップの位置を入れ替えしてる場合ってのは厄介なのだ。
スワップ中断処理の手順を可視化したのが上記画像。簡単に発生させることができる。
一時停止機能
すでに処理がややこしいけれど、一時停止機能の実装について考える。
まず停止できないタイミングというものが存在する、だから一度動き出してしまったら基本的には任意のタイミングで停止できない仕様である。技術的には可能だけど動作確認にも手間がかかるため、手間を考えたら最初から一時停止できるタイミングを限定的にしたほうが簡単だし現実的。
一時停止できないタイミング
- スワップ中
- 落下処理中/コンボ判定中
- 盤面回転中
これらを調べるには以下に列挙した .ev のインスタンス変数状態を参照する。
- MvBricksPaiRFlag → 入れ替え操作が無い時は False
- CtCaptuN → 消されるドロップパネルの数 → 0 の時
- Aflag → 盤面回転操作中ではない → True
if (!MvBricksPaiRFlag)
if (CtCaptuN == 0)
if (Aflag)
ただしまだテストが不足しているので、このタイミング管理は完全では無いかもしれない。
でも一応現状だとこのタイミングで安全に一時停止できている。
判定処理
Scripts +–+ GameEngine +–+ EV_Step +–+ CheckAbeyance ユーザ定義関数を使って判定している。
0070h 以降に追加されたユーザ定義関数。
条件一致した状態の時に、ゲーム画面上の一時停止ボタンを押した場合、ABEYANCE_Flg = true;
にしてゲーム動作を一時停止できる。
プレイヤー操作以外の一時停止
ゲーム中にプレイヤーの操作で一時停止できる機能と別に、ゲーム進行に応じて一時停止できる仕組みも作りたい。
ここで 0070h から 0070i へマイナーバージョンをアップ。
次へ
前へ