長閑な島の最果て

主にMUGEN中心の内容を書き綴ってます。リンクはご自由に。

超即死 其の1

通常1つのステートに512個を超えた数のコントローラー(以下"ステコンオーバーフロー")を実行させると、エラーとみなしてMUGENが強制的に終了します。しかし、hitpausetimeを付加した状態でそのステートを実行するとエラーが発生しません。

ここでいうhitpausetimeというのはHitDefやReversalDefといったステコンを実行した際に発生させる硬直時間のことをいいます。相手はもちろんのこと自分自身にかけることもできます。
この硬直時間が発生している間は、デバッグに表示されているtimeが-1と表示され、エラー判定が行われなくなります。そして、エラーが検出されずにそのステートを実行するとどうなるのか…

まず注意したいのは、一人のプレイヤーが実行するステートコントローラーの管理メモリの最大数が512であるということ(ヘルパーもまた然り)。当然これはステコンを実行するための管理メモリであって、それ以降にもプレイヤーの管理情報はあります。
つまり512個を超えたステコンを実行するということは、そのステートを読み込んだプレイヤーの管理情報までも書き換えてしまうということを意味します。

タイトルの"超即死"といのもプレイヤーの管理情報の1つであるAlive(生死の判定)の値を書き換えるという意味で、その情報が管理されている場所がステコンの数の553~556個目(多分)に位置する場所なので比較的簡単に用意できるかと思います。…といっても普通に考えたらステートの数が512を超えることなんてまず無いと思うので、この場合"null"を使ってわざとにステコンの数を増やします。
"null"というのはそのステートを実行しないという効果があって、どのステート名にもこれを記載するだけでそのステコンは実行されなくなります。当然"null"自体も1つのステコンとして実行しているので、ステコンを実行する管理メモリの1つとしてカウントされます。

これを使えば、ステコンの数を512個以上設定することが可能です(ってかこれが無いと現状無理)。なので、凶悪キャラの記述にはやたらと"null"のステコンが多いステートがあるかと思います。記述がnull、null…と続くので通称"ヌルヌル"というふうに呼ばれているとかw

ステコンオーバーフローのもう一つの注意点として、ステコンに"ignorehitpause = 1"を記載することが挙げられます。"ignorehitpause = 1"と記載することによって、hitpausetimeを無視してステコンを実行させることができます。当然プレイヤーの内部情報を書き換えるためには、512以降のステコンを実行する必要があるのでこの記述は必須です。

これで用意にAlive値を変えられるんだから、凶悪キャラ界の技術も大したものです。