容量をなるべく増やさないようにする方法(再更新)

2015.05.20 22:00|スマブラX改造 PSA参考
@DIARY(β)で書いた記事のリメイクです。PSACompressorを使っていたり、BrawlBoxでMoveDefのデータを圧縮している場合はどうでもいい記事かもしれません。
こだわらない場合でもPSAで容量を増やすのは簡単ですが容量の減少をさせるのは難しいのに加えて限度があるので増加の阻止を行っておいた方がいいこともあります。

追記(古い順)
仕様変更?して楽に容量増加を阻止する方法を追加。楽な方法で代用の効く面倒な方法を背景と同化。
PSACompressor追加。これを使えば基本的なこと以外はいらない。一部説明を変更。

基本的なことも書きました。
!注意!これらが原因でバグる可能性があります。バックアップはこまめにとりましょう。(主に同化している項目)
BrawlBox v0.67などで編集した後の圧縮では不具合を作り出す可能性があり、バグが発生しなくてもPSA2.70などで編集できなくなることがあるため、この方法を紹介しています。
(PSACompressorを使う場合はPSAとバイナリエディタを使った容量の増加阻止方法は不要。しかもクリックひとつでサブアクション内の空ルーチンの削除はすべて終わる。BrawlBoxのような圧縮はしないので、この記事の基本的なこと以外は特にいらないかも。)

-PSAのみで可能な範囲-
↓基本的なこと (PSACompressorやBrawlBoxを使っている場合も有効)
・同じ内容はSubRoutineを使う。(パラメータ数が1以下のイベントはこれをすると逆に容量が増える。トータルの使用容量が16バイト以上(パラメーター3つ以上のコマンドなど)ないとこうする意味はない。)
・Offensive Collisionなど、パラメーター数の多いイベントをなるべく増やさない。(同じ内容が複数あるなら新しくSubRoutineを作って使ったりするといい。)
・無駄にEventを増やさない。(PSAのみを使って編集している場合は、未定でも増やす可能性がある場合は先に増やしておいて残しておいた方がいいこともある)
・使わないサブアクションの全てのイベントを消してOffsetを0にする。(1回につき数バイトだが実際にファイルサイズが減少する。なにもイベントがない場合はNo Eventを追加→RemoveでOffsetを0にすればいい。ただし、PSAでこれをやると効率が悪い。)
ちなみに、PSAでパラメータのあるEventを1つ消しただけでもファイルサイズは減らせます。

↓基本的なこと (PSAでのみ)
・なるべくOffsetを変えない。(そこまで重要ではないかも)

-PSAとバイナリエディタを使った容量の増加阻止方法-
PSAでファイルを保存したファイルに有効。1ヶ所バイナリエディタで値を変えるだけでいい。
バイナリエディタでアドレス0x64の値を確認→+7Cしたアドレスの値を小さくする(2000程度に)
たったこれだけで楽に容量増加の阻止が可能。既存のデータを変更しただけでは容量の増加が全くしなくなる。そのうえ無駄記述を消すと消した分のデータ量まで容量の増加がほとんど止まる(多少の増減はする)。ほぼPSAしか使わない場合はオススメ。
詳しいことはこの記事を参照。

PSAで使わないサブアクションのうちイベント数が0のものを消してOffsetを0にしたときはオフセットを変える前に存在する"00000000 00000000"はそのままなので、後で変更対象としてPSAがとらえるためにその部分を"FADEF00D FADEF00D"に変えるとより無駄がなくなる。(ただし面倒。ちなみにPSACompressorはこの無駄の削除も同時にワンクリックでやってくれる。)

あと、バイナリエディタを使えば新しく作成したサブルーチンの場所が分からなくなってしまったときなどにも少しの手掛かりがあれば(バイナリエディタで検索をすることで)見つけ出すことができる場合があります。オフセットをメモし忘れて画面の切り替えや保存したりした時でも安心できます。(これはおそらく他のツールでは無理)


ここからは仕様変更した場合はPSAでやっても使用容量は変わらないので以前このような方法があったという過去ログ的なものだと思えばいいでしょう。(※利用価値の少ないものなので背景と同化しています)

-PSAとバイナリエディタを応用すれば可能-

これをする際の注意点
・ファイルは同じものを2つ(PSAなどでの確認用とバイナリエディタでいじる編集用)用意しておいた方がいい。
・PSAやOpenSAで見たときのオフセットを+80(16進数)しないとデータは確認できない。
・まちがって変更してしまうとSmashAttacksで確認するときなどにバグってしまうことがある。
・プログラムオフセットから+80した値はType-Valueという形になっている。Typeに+4したオフセットにValueがある。+4せずにType変更をしてしまうとSmashAttacksで高確率でバグる。パラメーターが2つ以上ある場合は+8することで次のパラメーターに移動できる。不安ならSmashAttacksで同じ値を探していくといい。同じ値を探してもScalarやVariableだと見つからないので先に確認用の方をValueに値を変えておくとよい。
・Scalarの1は10進数で60000、16進数でEA60となっている。これを掛けたり割ったりすることでScalarの0.1や3を出せる。これを使えば確認用がOpenSAだけでもScalar値を編集可能。
・SmashAttacksですでにプログラムオフセットを変えてしまっている場合は容量はこれら方法を使わずにSmashAttacksで変更しても容量はそれ以上は増えない。

ちなみにCommand Offset(コマンドオフセット)とParams Offset(パラメータオフセット)はOpenSA基準で書いている。
PSAではCommand OffsetはアクションやサブアクションのOffsetから確認でき、Params Offsetはイベントの変更時に確認できる。(イベント名の下ににあるOffset)


・SmashAttacksやOpenSAでパラメータオフセットを確認しながらパラメーターを変更するとSmashAttacksで変更した時に変更されるパラメータオフセットが変更されず、容量が増えない。(ここで注意することが1つある。TypeをPointer以外からPointerに変える場合は面倒なことに、”Offsetが0になっている値を変更してもフリーズしなくする方法”を使う必要があるのでこの場合はよほどのことがない限り普通にPSAで編集することを推奨する。)

・PSAやOpenSAでパラメータオフセットを確認しながらパラメータを変更すると通常の場合はPSAで変更した時に変更されるパラメータオフセットが変更されず、容量が増えない。 (TypeをPointer以外からPointerに変える場合は面倒なことに、”Offsetが0になっている値を変更してもフリーズしなくする方法”を使う必要があるのでこの場合はよほどのことがない限り普通にPSAで編集することを推奨する。コマンドの下4桁が変更前と変更後を比べて変更後の方が数値が大きい場合は後に続くプログラムオフセットを変更してスペースをあけるといった特殊なやり方が必要なことが多い。開けたスペースは"FADEF00D FADEF00D"となっているため"Type-値"に変えないと必ずバグる。)

・既にある記述のサブルーチン化
サブルーチンにしたいサブアクションのOffsetの値を検索し、そのOffsetを"00XXXXX"から"00000000"に変える。
あとは、使う時にサブルーチンを使って呼び出せばいいだけ。
Main、GFX、SFX、OtherがどれもSynchronous Timerなどを使ってしまっているときにオリジナルのグラフィックなどを残しつつ追加のグラフィック表示などをループさせたいときに有用。

ここからはバイナリエディタとPSAを行き来する必要があります。(そのため少し長い)
する場合はその前にバックアップを取っておきましょう。

それと、もう一つ注意事項。改変前のキャラのファイルを初めてPSAで編集した時、最初にデータを変えた後で確認できるCommand Offset以降にある"FADEF00D FADEF00D"は編集しない方がいい。何故かというと、手間だけがかかって容量の増える量は変わらないため。
改変前のキャラのファイルがない時は、バイナリエディタでアドレス0x64にある値を+7Cしたアドレスにある数値を見ればいい。それ以降の"FADEF00D FADEF00D"はたいてい編集しても無駄。

・SubActionのMainなどのオフセットを変更せずNo Eventを追加する方法(すでにオフセットが変更されていると使えない可能性があります。)
1. まずPSAで対象の最後のコマンドオフセットを確認。
2. 確認したものに+10したオフセットを探す。
3. 発見したオフセットを変更する。(パラメータオフセットならコマンドを値を何も変更せずDoneを押してパラメータオフセットを変更できたらOK。ただし、できなかったらこの方法は使えない)変更できたら保存。(複数まとめてすることもできます)
4. バイナリエディタでSmashAttacksで3で変えたために"FADEF00D FADEF00D"となっているところを"00000000 00000000"に変えて、その前にある"00000000 00000000"を"00020000 00000000"に変える。("00000000 00000000"が連続している時も使えますが、なぜそうなっているかを確認しないとまずいかもしれません。)
これでNoEventが追加されているはずです。"FADEF00D FADEF00D"が複数ある場合はもっとNo Eventを増やせます。


・サブルーチンを新しく作成する方法
この方法は欠点が多いのであまり使わない方がいいです。
欠点1. 後でコマンドを追加しにくくなる。(PSAでオフセットを変更できないため)
欠点2. 必要ない無駄なイベントを消したときに空いたスペースで作るぐらいしかできない。
"FADEF00D FADEF00D"が2つ以上並んでいる時に作成可能。"FADEF00D FADEF00D"を"00020000 00000000"に変える。そして最後尾の"FADEF00D FADEF00D"を"00000000 00000000"に変える。
これを発見するためには編集し始めた個所から-80した値をSmashAttacksなどで確認する必要があります。


・パラメータオフセットを変更する(※TypeがPointerでないことを前提に話を進めているため注意)
"00020000 00000000"を"00020100 000XXXXX"などに変更しオフセット(XXXXX-80)に適当なパラメーターに変更する。ただし、これだけではほぼ100%フリーズする。
フリーズしなくするためには、”Offsetが0になっている値を変更してもフリーズしなくする方法”を使う必要がある。
この時、コマンドのデータではなく指定したOffsetの位置を確認しておくこと。
この値を追加することにより、フリーズさせせずに値を追加することができる。

ただ、実はこれに関してはもっと楽な方法がある。
1. PSAで普通に記述をして保存する。(既に記述をしている場合は次へ)
そして、コピーしてデータを2つにする。(PSAまたはOpenSAでの確認用とバイナリエディタでの編集用。)
(パラメータ数を1にして値を適当に入れただけでも大丈夫だが、その場合はあとで少し面倒。)

2. 次に"FADEF00D"(×パラメータ数×2)をバイナリエディタで検索。ここでデータが見つからない場合は、この方法は使えない。
見つかった場合は、そのオフセットの値を確認。

3. 次にPSAでコマンドオフセットを確認し、そのオフセットに飛ぶ。そして先ほど確認したOffsetの値から-80した値にパラメータオフセットを変更。

4. 次にPSAで変更する前のプログラムオフセットを確認。中身を全てコピーし、コピーしたらコピーした所をすべて"FADEF00D"で埋める。

5. コピーしたものを2で確認したオフセットに編集前とトータルサイズが同じデータ量になるようにペーストする。
もし”FADEF00D"が余っても気にしなくていい。

これで完了。あとは保存後にPSAで確認してもおかしい点がなければ実機でもフリーズしないはずです。
ちなみになぜこれで容量を増やすことができるのかというと、改変前のキャラのファイルを初めてPSAで編集した時、最初にデータを変えた後で確認できるCommand Offset以降にある"FADEF00D FADEF00D"は再利用ができるため、結果的に容量の増加を抑えられるということです。
ちなみにこの場合でもPSAでもう一度編集したりするとパラメータオフセットが変わってしまうので注意。値を変更することのないイベントに使いましょう。
スポンサーサイト



コメント

非公開コメント

プロフィール

ICLPX

Author:ICLPX
主にスマブラXの改造をやっています。
更新ペースはその時によってバラバラです。
質問などがあれば気軽に書き込んでください。
かなり過去に書いた記事も更新することがあります。

最新記事

最新コメント

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

この人とブロともになる

QRコード

QR