0_0_55A

 obake   specification   version 

0_0_55A はゲームルールの拡張用セーブデータとして一部セーブデータに追加項目。

ゲームルールの拡張とセーブデータ評価の準備は PiTEnable にまつわるもの。

コンボ判定の後にゲームボード上に隙間が出来た状態でゲームボードを回転操作できるのは、コンボ判定が有効となっている極僅かな時間のみに限られている。これが通常ゲームモード。

しかし機能実装にあたって、実際に試してみたが隙間ができてからずっと自由に回転できるようにも作れたら、ゲームルールを拡張した解釈が可能かもしれないと考えたため、PiTEnable に新しい判定条件として (PiTEnable & 3)==3 として、この場合にはコンボ判定中以外でも自由にゲームボードを回転できるようにした。

しかしバグが発生

最初に発見された時、オブジェクト数がコンボによって10以下と少なくなった時、スワップ中になぜか回転操作系が操作できてしまうバグとして記録された。

この時点で一応エラー箇所は分かったが、対処法が分からないためしばらく頭を悩ますことになった。

またこのバグが発生した場合、副作用として MvBricksPaiRFlag が True へ固定されたままとなる。コンボチャレンジのタイミング調整と関連性あるバグという事。

やがて動作テストを繰り返すことでバグの再現性は分かった。

お化けの数が少ないからではなく、回転系操作を実行した時のタイミング次第であることが判明。

単に回転系操作を実行するだけでなく、実際に落下が伴わなければ問題が発生しない、そして発生のタイミングがシビアである。 スクリーンショットで見ると移動が終わってからエラーが発生するのではなく、移動が半分に達したところでエラーが出ている。

55で発生したバグ

if ((PiTEnable & 3)==3){
    Phy_Control();
};

この条件で実行される Phy_Control(); 関数のタイミングが微妙に悪かった。

Alarm[0] が実行されるとき Aflag が True 化されるが、このタイミングで Phy_Control(); を実行するのではなく、 次のステップへ移ってから、QF_ComboChallenge 関数内で if (Phy_Start == true) の時に Phy_Control(); が実行されれば良かった。つまり Alarm[0] では Phy_Start = true; とするだけで良い。

これで一応動作は改善した。




次へ

前へ