製作状況

昨日の段階で六人すべての修正が終わったのですが、今日の段階でクリティカルな不具合が三つも見つかったので、慌ててその対策をするハメになりました。以下に不具合と対策の内容を(自戒の意味も込めて)書いておきます。

不具合1:投げで相手が固まる

相手の攻撃に対してガードポーズをとり、その後10F以内に投げステートへ移行し、相手の攻撃判定がこちらの投げとかちあった場合、状況次第で相手が固まってしまうという極めて重大な不具合。リコイルヘルパーのtriggerが甘く、本体が攻撃ステートに入っていてもReversalDefを続行していたのが原因でした。このため、本体が投げの途中に強制的にリコイルステートへ移行させられてしまい、その後の処理が行われなくなっていました。Helperのtriggerに「Root,MoveType = A」を追加して対処。これでまず相手が固まることはなくなりました。

不具合2:先行入力で技が出ない

今回のバージョンからリコイル成立中の先行入力を実装したんですが、コマンドを成立させたにもかかわらず上手く技が出ないことがありました。原因を調べたところ、commandをtriggerに取ってVarSetする場合、cmdにおいて上に記述される=優先度の高い技を下に書く必要があることが分かりました。全員のcmdの優先順位を適切なものに変更して対処。リコイル→カッターでEX佐祐理さんも大喜びです。

不具合3:MUGENが落ちる

今回発覚した打ち首獄門級のミス。リコイル硬直中にコマンドを先行入力した際、特定の条件を満たすとMUGENがスタックオーバーフローを起こして強制終了するという最悪のミスがありました。以下はそのエラーが発生する流れです。

  1. Statedef 125で適当なコマンドを成立させる(先行入力のフラグがセットされる)
  2. Time >= 20でStatedef 140へ移行。Statedef 140ではvar(18)が0以外であれば必ずStatedef 145に飛ぶようになっているので、そのままStatedef 145へ移行
  3. Statedef 145に到達。Statedef 145においてはそれぞれのStateの状態に応じて時間が経つと擬似的なコントロールフラグがセットされるが、それより以前からもガード方向への入力だけは受け付けており、入力するとStatedef 140へ戻るようになっている
  4. ここでガード方向を入力し、Statedef 140に戻る
  5. Statedef 140においてははvar(18)が0以外であれば必ずStatedef 145に飛ぶようになっているので、再びStatedef 145へ飛ぶ
  6. Statedef 145<->Statedef 140でループ発生、スタックオーバーフローでMUGENが落ちる

このエラー(Error message:State machine stuck in loop(stopped after 2500 loop))初めて見たんですが、発生条件が今ひとつ判然としません。予想としては

  1. 常に1(真)になるtriggerがある
  2. そのtriggerによってChangeStateが実行される
  3. ChangeStateで移行したStateにも、1.と同じかあるいは別の常に1(真)になるtriggerで実行されるChangeStateがある
  4. そのChangeStateで元来たStateへと戻る
  5. 移行した直後にChangeStateが実行され、また同じStateへ飛んでしまう
  6. ループから出られなくなってしまう

……といった具合になっているのではないでしょうか。ただ今回の場合、方向キーの入力という「常には1にならない」triggerを使っていたにもかかわらず発生してしまったので、恐らく1になっている時間が一定以上(この辺りは詳細不明)あるだけでスタックオーバーフローを起こして落ちてしまうのではないか、と考えています。

いずれにせよ致命的な不具合だったので、すべて対処しておきました。こういう不具合がもう無いといいんですけどねぇ( ´・ω・`)