バイナリデータの値について

2015.11.22 01:02|スマブラX改造 PSA参考
主に最初の方だけ。バイナリエディタでデータを触る必要がなければ基本的に気にしなくていいです。
※AddressとOffsetの違いは、OffsetはPSA基準で、Addressはバイナリエディタ基準です。
Addressはそのままバイナリエディタで使えます。基本的にOffsetはAddressから-0x80した値です。

Address0x0  ARC
Address0x10 ファイル名
Address0x40 不明。入っている値は常に同じ。
Address0x44 MoveDefファイル(.moveset)のサイズ。
Address0x48 不明。入っている値は常に同じ。

0x60からはMoveDefファイルに値が入っている MoveDefファイル(.moveset)を切り取った場合、-0x60した値が入る
Address0x60 MoveDefファイル(.moveset)のサイズ 0x44と同じ値が入る
Address0x64 Offset列の場所。+80したところから指定したものが値の低い順に入っていく
Address0x68 昇順データの数
Address0x6C Data Tableの数
Address0x70 External SubRoutineの数

Address0x80~0x360Attributes(Unknown 7のデータまでで唯一、PSAで触れる)
Address0x364~0x644
SSEAttributes(亜空の使者専用。PSAでは一切動かせないので、PSACompressorを使うか
Attributesの編集後にバイナリエディタでAddress0x80~0x360をコピーしてくるか
BrawlBoxで編集したデータをコピーしてきて貼り付けると楽。)
 
Address0x648~0x1764Common Action Flags

Address
0x1768~約0x2000

Unknown 7(ここからキャラによってサイズに差がある。ここのsizeはActionの数に依存。)


基本的に、BrawlBoxで見ることのできるSectionsの中の「data」のOffsetはAddress0x68の値を4倍したものにAddress0x64の値を足して+0x80したAddressにあります。
SubActionFlagsとサブアクションのアニメーション名のOffsetスタート地点から始まり、+0x24したAddressに各キャラ固有アクションのEntryとExitそれぞれの開始地点のOffsetが、+0x30したAddressにSubActionのMain、GFX、SFX、Otherそれぞれの開始地点のOffsetがあります。
ActionOverrideは+50したAddressにEntryとExitそれぞれの開始地点のOffsetがあります。
ArticleのOffsetはここの後にありますが、BrawlBoxで見ることのできる「data」には載っていません。
ここから、Int/Float型のパラメータOffset、ArticleのOffsetとつながっているようです。
ここに値を追加すればArticle追加も可能かもしれませんが、どこでパラメータ数などか設定されているのかはわかりませんね...

Address0x44にある値を+0x60した値までがMoveDefファイルとなっています。

その次に
"00080000 000XXXXX 0000FFFF 00000000
 00000000 00000000 00000000 00000000"
があります。
このXXXXXはエフェクトデータのサイズで、
このデータはアドレスが下2桁が"偶数値、0"といった具合にある程度固定されているようです。
そのため、容量の増減がありそうな編集をしても容量の増減がないことがあります。
MoveDefファイルからここまでは"00"で繋がれています。
同じファイルにあるエフェクトデータはこの後から始まります。
スポンサーサイト



弱攻撃に使われているRA-Bitなど

2015.11.20 22:09|スマブラX改造 PSA参考
このことに関して書いている記事がなかったので、調べてみました。

弱攻撃に使われているRA-Bitはこのようになっています
RA-Bit[16]=攻撃ヒット時にボタンを押しているとき、次のモーションへ移行(最後のモーションなら最初へ)
RA-Bit[17]=自動でボタンを押しているとき、次のモーションへ移行
RA-Bit[20]=ボタンを押しているとき、連続攻撃に移行(ピットは例外)
RA-Bit[22]=ボタンを押しているとき、最初のモーションを連続(ディディーは例外)

連続攻撃はRA-Bit[25]がセットされているとき、ボタンを離していると連続攻撃をやめます。

どこかで設定されているからなのか、なぜか例外キャラがあるんですよね。
オリマーもRA-Bit[16]とRA-Bit[17]がセットされているのに押しっぱなしでは最後のモーションから最初のモーションへの移行をしません。

RA-Bit[16]やBit[17]をいれなくても、ボタン連打で弱攻撃の2段目や3段目は出せるので、
既に投稿されているキャラの中には削除されているキャラもけっこういますね。
さすがに、RA-Bit[22]が入っているものを連打で再現するのは無理ですが。
ちなみに未改造キャラでRA-Bitがセットされていないのは、1段目の攻撃しかないキャラだけです。

強攻撃、スマッシュ攻撃について
強攻撃にRA-Bit[16]がセットされていれば次のモーションへ移行可能 (連打必須)
ファルコンのアイテムを使ったスマッシュ攻撃2段目はボタンを押しっぱなしでも移行します。

空中攻撃でのRA-Bit[30]は着地時に影響します。
falseになっていれば着地動作が通常時と同じになります。

掴み時のRA-Bit[16]は投げや掴み打撃に影響します。
trueになっていると掴み打撃などのモーションのキャンセルをして掴み打撃または投げに移行できます。

タグの位置が変わった

2015.11.19 23:45|スマブラX改造 PSA小ネタ
LA-BitTag
※タグの高さは操作していません。

LA-Bit[60]をtrueにするとタグが足元に表示されるようになるらしい。falseにすると元の位置に戻る。

掴み系Bに対してノーダメージで反撃

2015.11.07 22:37|スマブラX改造 PSA参考
掴み系Bに対しての反撃ができました。
アクションオーバーライド(Entry)が必要になりますが、PSACompressorを使えば簡単です。
ないキャラはちょっと面倒ですが作るしかないですね。作成方法はこちらです。
ChangeAction=40,Requirement=00などの掴み抜け時のアクションで強制的に掴みを抜けをするとフリーズする場合があるので反撃は別の方法を試した方がいいかと思われます。
動作確認済み。掴まれてすぐ掴み抜けができるので、ダメージを受けません。
スーパーターボマリオv0.94なども掴み系Bをオーバーライドで無効化しています。

オーバーライドすべきアクションは以下の通り(中にはオーバーライドなしでも掴み抜けできるものがあるかもしれない)
3D...掴まれアクション(オーバーライドすればスネークの掴みも無効化できる)
CC...ワリオのNB
CF...ファルコンの上B
D6...ディディーの横B
E6...ガノンドロフの上B
E7、E8...ガノンドロフの横B (E7は地上、E8は空中)
EE...クッパの横B
EB、107...たいていの場合はサブアクションCapturePulled系への記述により反撃できるが、これだけだとたまに掴み抜けできないことがあるらしい(ヨッシーのNBと掴み)

ちなみに、スーパーターボマリオv0.94などのキャラは3Dと107のExitをオーバーライドして掴み抜けに失敗することがないようにしています。
CPの劣化モードだと掴めるようにしていて、Entryをオーバーライドすると必用なイベント数が多いからです。

↓は必要ない可能大。
D0...サブアクションSwallowedへの記述によりオーバーライド不要。(カービィ、デデデの吸い込み)
42...投げられアクションだが、掴めないまたは即掴み抜けする仕様にしておけばいらないかも(掴み系Bは無関係)

これでほとんどの掴み攻撃に対しての反撃が可能となると思います。
また、ガノンの横Bでの道連れは、サブアクションDamageFallのところに事後反撃(この記事で紹介してるもの)でも可能です。
これもChangeAction=40を使って反撃すると、謎のフリーズが起こることがあるらしいです。
ここに書いてあるものの中にもオーバーライドではなく別の方法でも無効化できるものもあるようですが、よくわかりません...

PSAの仕様を変更する方法(12/18更新)

2015.11.05 21:50|スマブラX改造 PSA参考
PSAで編集中のファイルの容量の大幅増加を阻止するテクニック。
バイナリエディタでファイルのある1ヶ所を変更したらできた。これだけでよかったのか...
PSAでファイルを触っていることが最低条件。(していない場合、変更できない)

やり方(バイナリエディタと編集中のファイルだけで可能)
アドレス0x64の値を確認。
その値を+7Cしたアドレスに飛ぶ。するとある値を発見できる。
この値はPSAでイベントを変更したりNoEventを追加した時に最初に編集した時作られた値。このアドレス以降はPSAで編集できないように設定されている模様。
この値をPSAで確認できるSubActionのOtherのOffsetと同じような低い値に変えて保存して終了すればいい。
元の値をいちいちバイナリエディタで変えなくても使用容量が増えなくなる。
さらに既存の"FADEF00D"を自動で使ってくれる。

副作用的なものがあるようなので、念のためバックアップを取っておこう。
サブアクションの名前変更時、同じ名称のあるサブアクションの文字数を増やすとバグが発生する場合があるようだ。
これをしても"00000000 00000000"だけでおわっていてPSAではイベント数が0のものはOffset変更後"FADEF00D FADEF00D"に代わっていたりしたりはしないのでバイナリエディタがいらずではないようだ。あとはこの仕様を変更できれば...

仕様変更処理を行った後は、SubRoutineからどこの値でもAddやRemove、Pasteが使用可能になる。
この処理の後にSubRoutine選択後AddかPasteを押すとOffsetが変わってしまう確率が高いので押さないように。(RemoveではOffsetは変わらない) 特にArticleのOffsetを編集中は面倒なことになりがちなので注意。(Offsetを変える処理をした場合も同じ)
MarioPSA_SubActionFireBallMain (マリオのファイアボールのSubActionMain)

あと仕様変更処理をした後、Offset値が大きいものから小さいものに変わることがあるが、バグではないようなので気にする必要はない。値を変更した後勝手にOffset値が低いものに変わる場合もある。(通常とはまるで逆...)
前の方に"FADEF00D FADEF00D"が見つからない場合はこの様な事は起きず、Offsetはそのままになる。

ステップ転倒の完全除去?

2015.11.04 01:53|スマブラX改造 謎
オーバーライドありでやってみた結果、一応ステップ転倒耐性なしでステップ転倒が無効化できました。
サブアクションのみでできるかなと色々試したんですが無理っぽいですね...

そういえば、その時転倒倍率1万倍のコードを使って試したのですが、着地転倒なんてあったんですね...
しかもこれ、転倒に移行するアクションを消したオーバーライドを使っても耐性をつけないと無理だという。
着地転倒も歩行転倒も実機では確認できませんが、どこをどう変更すればそうなるのか...

余談ですが、主は普段はステップ転倒廃止(サイズ16)のコードを使ってます。
コード作成もバイナリエディタでやってます。メモ帳のデータをコピーして最後の"F0000000 00000000"の前にデータを入れたりするだけでいいので。


追記:LA-Bit[37]をtrueにすると、ステップ転倒は転倒倍率をいくら上げても起こさなくなります。攻撃による転倒も転倒属性の攻撃以外無効化してしまいますが、転倒全般を排除したいのならオススメです。

アクションオーバーライドの作り方

2015.11.03 22:22|スマブラX改造 PSA参考
PSACompressor v0.20 以降で、普通に作れるようになったのでもういらないかもしれないけど一応残しておきます。
この方法はアクションオーバーライドがないキャラにのみ有効です。
また、BrawlBoxでMoveDefのデータを弄っている場合はせっかくアクションオーバーライドを作成してもBrawlBoxで保存後に消されてしまうので注意してください。(BrawlBoxで圧縮しないと容量がどうしても、という場合はこちらの記事を参考にしてみてください。)

必用なものは
Smash Attacks(主が使ったのはPSA2.70)
BrawlBox(v0.67b~0.68b推奨。実際に使って編集するわけではなく確認用に必須。)
バイナリエディタ(主が使ったのはxedit)

まず、BrawlBoxを使ってMisc SectionのOffsetを確認する必要があります。(10進数になっているので使用時は16進数に直してください。)
※ここからの説明で出てくる数値は全て16進数になります。

まず、PSAでオーバーライドしたい数だけサブルーチンを作ってオーバーライド記述内容を書き込んでください。
この時1回1回アクションIDと書き込んだOffsetを確認(メモ1)するのを忘れずに。
全て記述し終えたら最後にアクションの数も確認しておきましょう。

次にもう一つサブルーチンを作り、"0007XX00"というようなイベントを作ります。
XXはオーバーライドを作った数+1。ちなみに上4桁は基本的に何でもいいです。
(+1ではなく+2以上でも可。イベントを切り離して容量を減らすなんてこともできるかも。値を確認するときは注意。)
そして編集。パラメータに順に確認した値を入れていくことになります。
重要なのは、全てのTypeをPointerにしておくこと。
最後のものの値は何でもいいので値を入れておきましょう("00000000"はダメ)。
そして、Paams Offset(パラメータを編集している時に時に表示されるOffset)を確認(メモ2)する。
さらに、Paams Offsetをオーバーライドの数だけ+8してそこからさらに+4した値も確認(メモ3)する。
EntryとExitの2つを作る場合はNoEventをもう一つ作って同じようにやっていくといいでしょう。

完了したら保存し、同じファイルをバイナリエディタで開きます。

確認したMisc SectionのOffsetを検索して見つけたら、そこから+40した値のOffsetを確認。オーバーライドが全くないキャラは"00000000 00000000"が、Entryのオーバーライドだけあるキャラは、そこから+4したOffsetが"00000000"になっているので、メモ2の値に変更します。(+40がEntry、+44がExitのオーバーライド)
さらに変更した値のアドレスを-80した値を確認(メモ4)します。

では続いてメモ1とメモ2の値を使い、アクションオーバーライドを完成させます。
まずメモ2の値を+80したアドレスに飛びます。そしてメモ1のアクションIDを書き込みます。
パラメータを1つ余分に作ったため、書き込み終えても1つ余ると思います。
この余った"00000002 ????????"は"FFFFFFFF 00000000"に変更しましょう。(オーバーライド終点の印)

この後一度保存して終了し、BrawlBoxで作ったはずのOverrideがあるか確認してもいいかもしれません。
できでない場合はどこがおかしいか確認しましょう。
確認できてもこのままでは実機でフリーズするのでOffsetが0になっている値を変更してもフリーズしなくする方法を使います。

この記事を参考にするのもアリですが今回ここまでの説明であえて余分なデータを作ったのでそれを利用しましょう。
メモ3とメモ4の値を使います。
まずはバイナリエディタでメモ3値を検索します。そして削除し、メモ4の値を追加します。
追加時に値が小さい順になっているので注意してください。小さい順になるように値を追加しないと、もしかしたら不具合が発生するかもしれません。

後でアクションを追加したくなった場合は、"0007XX00"の値を修正する必要があります。
この場合はこの処理はいらないので、"0007XX00"の最後のパラメータはValueにしておきましょう。

もし、このアクションオーバーライドに名称を付けるのであればまだやることがあります。(ここでは省略しますが)
名称を付けても付けなくても正常に動くと思われるのであまり気にする必要はないと思います。

これで実機でのフリーズが起きないはずです。もしフリーズが起きるのならどこかミスがあります。(キャラを選んで戦闘開始時にフリーズする場合はOffsetが0になっている値を変更してもフリーズしなくする方法の所でミスをしている可能性大。)
プロフィール

ICLPX

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

最新記事

最新コメント

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

この人とブロともになる

QRコード

QR