タイトルの通りで、トランザムの時間をできる限りきれいな形で延長するコードを作りました。
以前覚醒時間延長の講座しましたが、あの時にもご指摘があった通り、あの方法では延長できない機体がいくつもありました。
そのひとつであるリボーンズガンダムの覚醒処理を今回は解析してみました。
最近リボンズ君好きなのでね
_L 0x213D3818 0x24020960
_L 0x213CFA54 0x3C030DA7
_L 0x213CFA58 0x346340DA
効果としては覚醒時間を2倍に延長するだけです。
ただし公式寄りの改変なのでCPUもちゃんと2倍です。これがいい。
1行目のコードで純粋な覚醒時間の延長を
2と3行目でゲージの見た目上の減少の仕方を延長した時間に合わせて書き換えています。
今回分かったのは、覚醒というシステムのゲージの処理と時間についてです。
時間自体は覚醒時間(秒)の60倍の数値で検索して、ヒットした値を自分の好みに書き換えることで比較的単純に伸縮できます。
これはどの機体でも似た構造でプログラムされているようです。
しかし覚醒時間を延長するだけではゲージの見た目に不具合が起こります。
これは覚醒ゲージの見た目上の減算が別の処理によって行われており、こちらも伸縮した時間に合わせて変更しないと発動時間とゲージの減算がかみ合わないためです。
そしてこの見た目上のゲージ減算処理は機体ごとに微妙に異なった処理の仕方がされているようで、パターン化しづらいのではないかという疑惑が生じました。
ともかくリボンズくんではフリーダムなんかと違い、浮動小数点数での計算はせずに見た目の減算を行っていました。
説明が難しいのでざっくりいえば、60倍した覚醒時間の残りの時間を取得して、それを小数以下で四捨五入のようなことをして、ゲージ100のうちいくつかという計算を行っていました。
実際には60倍の数値を掛け算でさらに馬鹿でかい数値にしてから、その計算結果を上位と下位の数字に分けて上位の値だけを取り出して、少数の切り捨てのようなことを行っていました。
が、はっきりいってなぜこんな回りくどい計算をしているのか謎です。機械語の七不思議。
ここで馬鹿でかい数字にする際にとある数字を即値で代入して掛けているので、2-3行目ではそれをいじって覚醒時間に合わせているというわけです。
しかしゲージの見た目上の減算処理のすべてがそれぞれの機体によって違うかというとそうではなく、
共通のゲージの見た目減算jalが存在します。
リボンズでいうと
09BCFA04 0E26DCC3 jal 0x089B730C
これです。
このjalで「a2レジスタ」に「ゲージをいくつ減らすか」を与えて実行するための
a2レジスタの値の準備の仕方にいろいろ機体ごとの違いがあるわけです。
ですから覚醒ゲージの見た目にこだわりたい方は、
このjalでサーチしてa2レジスタの値がどのように計算されているのかを追ってゲージの処理の仕方を調整すれば、
公式寄りの見た目のきれいな覚醒延長が可能になるのです。
このほうがCPUもちゃんとつかってくれるしね。
たかだか3行のコードを作って覚醒時間を2倍にするのに異常に時間がかかって(土日が溶けた)しまいましたが、
そこそこおもしろかったのでおっけーbです!