Seaside Laboratory

Posts

ランダム分岐を利用した拡張エンジン判別

各拡張エンジンにはモーションをランダムに分岐させる機能がついているが、これを使って実行中のエンジンが KFX か否か判別できるのではないかと思った。

まず、ランダム分岐が内部的にどう処理されているかという話。パラメータの値 1 ~ 9 が分岐確率 10 ~ 90% に対応している点と、デフォルト値の 0 を指定したときに分岐が発生しない点を踏まえると、以下のような変換処理になっていると考えるのが自然だろう。

分岐確率 = パラメータの値 * 10;

KFM はモーション行が遷移する度にサイコロ (0 ~ 99) が振られ、その値が分岐確率未満になっていれば分岐するという仕様になっているが、おそらく他のエンジンも似たような処理だと思われる。

そして次は Flag の話。従来の Flag は言葉通り 2 進数のフラグを表す値ではあったが、機能拡張の関係で 16 進数相当に拡張されている。例えマニュアルに書かれている有効値が 1 ~ 9 だったとしても、16 進数であれば範囲外の値でも読み取られる可能性が非常に高い。

もし、"A" という値がランダム分岐に設定できた場合、分岐確率は 100% になるのでランダムではなく確定の分岐となる。ランダム分岐をサポートしているのは拡張エンジンだけなので、結果的に拡張エンジン分岐として使えるのではないか、という話。

長々と語っていてもしょうがないので、各エンジンで実験をしてみた。

エンジン 分岐
KFX しない
KFM する
KFA する
XPlus しない

残念ながら XPlus のみ、良くも悪くも真面目に処理をしているのか意図した動作とはならなかった。XPlus を除外してもいいのであれば問題なく使えるテクニックではあるが、本家 KFX が化石になりつつある現状では微妙なところ…。