転倒の無効化など

2017.09.02 23:25|スマブラX改造 PSA参考
LA-Bitの中で、trueにすると転倒を無効化するものなどがありました。

LA-Bit[37]をtrueにするとほとんどの転倒を無効化できます。
ランダム転倒の確率をいくら上げてもステップ転倒が全く発生しません。
アシストフィギュアによる転倒率アップ効果も、全く効きません。
さらに、転倒率の高い攻撃を受けても転びません。
バナナなど転倒属性の攻撃を受けた場合は転ぶので、転倒耐性が全くいらなくなるわけではないようです。
trueにした後は、Actionを切り替えても効果が引き継がれます。


ここからは、転倒を無効化するもの以外に新しく見つけたものです。
・操作してもActionを切り替えると状態が元に戻るもの
 LA-Bit[7]... trueにすると、マナフィーの効果が効かなくなります。既に効果が出ていても、解除されません。
 LA-Bit[48]... trueにすると、カレー状態の時に弾が出なくなります。
 LA-Bit[50]... trueにすると、キノコを取ってもサイズが変わりません。既に効果が出ていても、解除されません。

・操作した後は、Actionを切り替えても効果が引き継がれるもの
 LA-Bit[33]... trueにすると、キノコを取ってもサイズが変わりません。LA-Bit[50]とは違い、既に効果が出ている場合は、時間経過による解除はされます。
 LA-Bit[35]... trueにすると復活時に、定位置に突然キャラが現れるようになり、無敵が消滅します。
 LA-Bit[46]... trueにするとバースト時にカメラが反応しなくなります。
 LA-Bit[51]... trueにするとバースト時を含め、ボイスが出なります。

LA-Bit[51]は亜空の使者の大迷宮で出てくる敵ファイターに使われています(最初からtrueの状態で現れます)
LA-Bit[35]はザコに使われているっぽいですね。
スポンサーサイト



ルーペ状態無効化

2017.08.25 21:55|スマブラX改造 PSA参考
Bit Variable Clear: LA-Bit[25] = falseで、LA-Bit[25]をfalseにするとキャラがルーペ表示されなくなります。
Bit Variable Clear: LA-Bit[26] = falseで、LA-Bit[26]をfalseにするとキャラがルーペダメージを受けなくなります。
これらの使用によりルーペ状態の無効化ができるようですね。

掴みフリーズ対策

2017.08.07 00:55|スマブラX改造 PSA参考
ボスの掴みを強行突破しようとするとフリーズするので対策してみた。
※Overrideのデータを使う場合は、Fighter.pacを読み込んで、対象Actionのイベントデータをコピーする必要があります。

ダメージも受けないようにできます。
タブーの掴みを受けた時のActionは104。SubActionはA5に指定されています。
しかし強行突破しようとするとフリーズします。
なので、SubActionはA5に強行突破するような記述をしている場合は、
強行突破(フリーズ)しないようにIf Compareで判別するか、Overrideで対象SubActionを変えましょう。
Exitに強行突破を入れると、ダメージは受けずに反撃もできます。

マスターハンド、クレイジーハンドの掴みを受けた時のActionはFA。
SubActionは-1になっていて、サブアクション側で処理は無理です。
でも強行突破もフリーズの原因になるので、
オーバーライドでAction:FA(Entry)のBody Collision: Intangible(0x2)を
Body Collision: Intangible No Flashing(0x3)にして、
ActionFA(Exit)に強行突破を入れると、ダメージは受けずに反撃もできます。

ポケモンのゴクリンに飲み込まれそうになった場合も記述次第でフリーズします。
ゴクリンののみこみを受けたときのActionは、カービィ、デデデの吸い込みを受けたときのActionと同じ102。
Sub Actionは、29→CC→-1(サブアクション側で処理不可)
SubAction29に強行突破をいれるとフリーズします。(Allow Interrupt:でもフリーズ)
強行突破(フリーズ)をしないようにIf Compareで判別するか、Overrideで対象SubActionを変えましょう。

SubActionCCには強行突破をいれてもフリーズしません。

ちなみに、とある星でチャッピーに食べられたとき、頂上で魚に食べられたときは強行突破してもフリーズしません。
(ActionはC6。記述次第では抜け出しに失敗するので注意)


次回からこれらを対策していく予定です。

掴み系(?)切りふだ対策

2017.07.24 01:25|スマブラX改造 PSA参考
CPの超反応と、条件次第で起こる謎のフリーズがいやらしいので対策してみる。
攻撃を受けたときに、特定のアクションに移行するようなので、オーバーライドによる対策も可能。

発動キャラとActionIDはこの様になっています。
・リンク、トゥーンリンク:ED
・メタナイト:EF(対応Sub Actionなし)
・アイク:F7
・ファルコン:FD
・カービィ:100


メタナイトはキャラがフリーズするバグがあるらしく、オーバーライドでないと強行突破ができません。

リンクは切りふだの途中で掴まれ状態が解除されるキャラがいて、その後のリンクの通常掴みでフリーズ、なんてことがありました。場合によってはフリーズさせないためにも対策必須になるかもしれません。

ファルコンは、攻撃を受けた後に対策しても強行突破ができないので厄介。
オーバーライドによる無効化でも、吹っ飛び耐性を付けるなどの対策が必須になりそうです。

ファルコンの攻撃を誰かが受けて、自分は受けなかった場合は動きが止まりますが、
これは時止めみたいなものではなく、キャラが停止するアクション(ActionFB)に強制的に移行するというもののようです。
Change Actionで強行突破するのも面白いかもしれません。(超広範囲なら攻撃なども届きます。ただしカメラはファルコンが占領します)


ちなみに元々吹っ飛び耐性持ちで、攻撃を受け時にアクションを即切り替えてしまうような相手(スーパーターボ系キャラの強モードなど)にリンクの切りふだが発動すると、リンクがどこかに飛んで行って自滅することがあります。

ミス記述(11/15 追記)

2016.10.25 22:05|スマブラX改造 PSA参考
最近気付いたことですが、

Set Loop: Infinite
  If: On Ground,
    Set Aerial/Onstage State: Can't drop off side of stage
    Set Air/Ground: On Ground
  Else:
    Set Aerial/Onstage State: In Air; Can leave stage vertically
    Set Air/Ground: In Air
  End If:
  Loop Rest:
Execute Loop:

このような記述をよく書いていますが、実はこれでは正常な動作をしません。

If: On Ground,
  Set Aerial/Onstage State: Can't drop off side of stage
  Set Air/Ground: On Ground
Else:
  Set Aerial/Onstage State: In Air; Can leave stage vertically
  Set Air/Ground: In Air
End If:

と動作自体は同じになってしまいます。

Set Loop: Infinite
  If: On Ground,
    Set Aerial/Onstage State: Can't drop off side of stage
    Set Air/Ground: On Ground
    Subactions 02: In Air,
  Else:
    Set Aerial/Onstage State: In Air; Can leave stage vertically
    Set Air/Ground: In Air
    Subactions 02: On Ground,
  End If:
  Loop Rest:
Execute Loop:

このように書かないと、正常に動作しないようです。
Loop Restは無限ループさせるときに処理落ちフリーズを防ぐためのものではなく、Synchronous Timerの代わりでもないのです。

日本語に変換すると、
無限ループ開始
  地上にいる場合
    地上にいてステージ端から落ちないようにする
    状態を地上にして位置を固定する
    空中に移動したら「条件を達成したら次へ」の所まで進む
  地上にいない場合
    状態を空中にして落ちるようにする
    状態を空中にして左右に動けるように、重力をかけて落ちるようにする
    地上に移動したら「条件を達成したら次へ」の所まで進む
  Ifブロック終了
  条件を達成したら次へ (この場合は無限ループの開始点に移動)
ループ終点

といったところでしょうか。
無限ループでフリーズしないのは、条件が指定されていない場合は次に進まないからだと思われます。
スーパーターボ系キャラで使っていましたが、アクションを切り替えるまでが短いため気付きませんでした...

11/15 追記:
Subactions 02 (04020100) などは、複数入れると「Or(または)」の条件として機能します。
追加条件にしたい場合はExtra Subaction Change Requirement (04030100) が使えます。

オーバーライド(Action Override)でできること

2016.09.27 21:55|スマブラX改造 PSA参考
オーバーライドの使いどころをまとめてみました。中にはオーバーライドでないとできないこともあります。

-Entryの場合-
・特定のアクション移行をしなくさせる(特定のイベントを読み込まなくする)
地上での通常攻撃を出している時に空中に移動すると通常なら中断されますが、これを中断されなくすることができます。
また、ステップ転倒などを完全に除去したりもできます。
※中断されなくすることなどは、オーバーライドなしでも攻撃をサブアクション上で固有アクションに切り替えてしまうことで実現することも一応可能です。

・すでにあるデータの中に項目を追加する
最初からEntryのオーバーライドを持っているキャラがいる理由が主にこの理由です。
アクションやサブアクションを通常とは異なるものにできるほか、アニメーション終了時に移行するアクションを変えることもできます。これはサブアクションに書き込む時と同じ効果の場合もあります。

・強制的にアクションを移行させる
サブアクションIDが分からない時や、サブアクションにイベントを書き込んでも効果がない時に使えます。
アクションIDさえわかれば、掴まれた時に、確実に掴み抜けするようにしたりできます。


-Exitの場合-
・エフェクトを消す(状態を戻す)
最初からExitのオーバーライドを持っているキャラがいる理由が主にこの理由です。
現在のアクションから別のアクションへ切り替わった時に、出したグラフィックエフェクトを確実に消すことができます。
これで、他の多数のサブアクションなどにグラフィックエフェクトを消すイベントを書きこまなくてもよくなります。
他にも、Articleを消したりキャラクターの可視状態を元に戻したりといったことを確実にできます。


もちろん、これら以外にも使うことができます。
アクションそのものを大幅に書き換えてしまうこともできますが、アクションのイベントを書き換えてもうまくいかないこともあります。その場合は別のアクションに切り替えてしまうのがいいかもしれません。

Action Preについて

2016.09.17 20:55|スマブラX改造 PSA参考
PSACompressor v0.25からAction Preを編集できるようになりました。
Overrideタブで確認できますが、これはAction Overrideとは別物です。
Action Preでは、変数の操作や、イベントを読み込むアクションを切り替えたりすることができるようです。
ただ、Change Actionなどを読み込まないので、強制掴み抜けなどはできません。
なので、強制掴み抜けにはSub ActionやOverrideを編集する必要があるようです。

また、Action PreはOverrideのEntry、Exitとは違って全員最初から存在し、数はActionの数に依存するので数の増減などは行えません。
これは基本的に編集する必要はなく、編集してできることも少ないので、確認できるようになったという程度に考えておくといいでしょう。

容量を極限まで減らす方法

2016.07.12 01:03|スマブラX改造 PSA参考
PSA Compressorをメインに使っている場合に使えるテクニック。
v0.24以降にはここに書いてあることもいくらか自動でやってくれるシステムを搭載しました。完全ではないですが。

することは単純で、サブアクション内にパラメータがあるイベントが2つ以上あって、他の場所でも使われている可能性があるもののOffsetをSub Routinesタブで開いて、Createの右のリストからSearch Same Dataを使って同じデータが使われていそうなところを探し、見つけたらサブルーチンを使うといったもの。
公式のデータでもけっこう無駄があるので、最終的にはこれだけでも容量にけっこうな差ができます。

また、同じルーチン内に同じデータがいくつもあるのであれば、Set loopを使うのがおすすめです。
同じデータかを確実に判定するには、同じファイルを保存する用と保存しない用に分けて開いて、保存しない用で使っていないサブアクションにデータを貼り付け、1つまたは2つのイベントをSub Routinesタブから検索するといいでしょう。

いろいろな場所に同じデータがある場合は、Sub RoutinesタブからDataをCreateして、Sub Routineを使うといいです。
逆にまったく使わないサブルーチンは消してしまうといいでしょう。
必用のないExternal Sub Routineも消しても問題ありません。
ただ、Concurrent Infinite Loopに使われているサブルーチンはConcurrent Infinite Loopを消さない限り消せないので注意が必要です。

1つ以下のパラメータのイベントが1つしかないデータはSub RoutineやGotoを使うと逆に容量が増えてしまうので注意です。
例えば、Slope Event 01: 0x6しかないものに対してGotoやSub Routineを使っている個所がいくつかあります。

そのほかにも無駄記述がある場合は、それ消せればけっこう違いが出るかと思われます。
例: マリオのSub Action 15(SFX)
Asynchronous Timer: frames=1.0
Synchronous Timer: frames=1.0
Sound Effect: 0x123,
     ↓
Asynchronous Timer: frames=2.0
Sound Effect: 0x123,

空Offsetの分はCompressタブにあるEmpty Data CompressとNo Event Compressでまとめて減らせます。
この量だけでもかなりの空き容量ができるのですが、無駄データの量はこれ以上になることがあります。

PSACompressorである程度自動で無駄の削除をやってくれるようなプログラムを作りましたが、完全に全自動で全部というのはほぼ無理ですね。
極限まで減らしたい場合は、ある程度は自分でやらないとだめだと思っておいてください。

全キャラのAttributesをまとめてみた(URL修正)

2016.05.28 23:32|スマブラX改造 PSA参考
まとめてみたら、全キャラ共通して同じ値になっているものや特定のキャラだけ値が違うのがわかりやすいですね。
見てみたい人のためこちらにおいておきました
※Excelなどに貼り付けて使ってください。(URLを間違えていたので修正しました)

ここから、何か新しく分かる点があるといいですね。
ちなみに手作業でまとめたのではなく、専用のアプリを作ってやりました。手作業だと作業量が膨大+ミスする可能性があるので。

LA-Bitセット状態の検証をしてみた

2016.05.28 01:25|スマブラX改造 PSA参考
PSACompressor v0.22 を使って、ザコを除く全41キャラで、LA-Bit[71]~LA-Bit[100]の初期セット状態を確認してみました。
結果は、どのキャラもLA-Bit[71]~LA-Bit[97]の初期値はFalseでした。
さらに、LA-Bit[71]~LA-Bit[80]のtrueとfalseを入れ替えてみました。
どのキャラもfalseからtrue、trueからfalseがしっかり反映されていました。
そんなわけで、LA-Bit[71]~LA-Bit[80]は安心して使えるだろうと思います。

ちなみに、LA-Bit[98]~LA-Bit[100]も初期値がFalseだったのは、マリオ、ルイージ、リュカの3キャラだけでした。(全部セット状態のキャラは4キャラいました。98と100をセットした状態のキャラが1番多かったです。)
変身できるキャラは、LA-Bit[98]~LA-Bit[100]の初期値が変身できるキャラ同士で違いはありませんでした。
また、どの変身できるキャラも、変身後はLA-Bit[71]~LA-Bit[80]のセット状態がリセットされるのも確認しました。
アイスクライマーも、ポポとナナ両者ともLA-Bit[98]~LA-Bit[100]のセット状態は同じでした。
一応、トレーニングと亜空の使者で同じように調べましたが、セット状態は全キャラ同じでした。
(ギガクッパとワリオマンは特殊キャラなので亜空の使者で調べてはいません)

あと、特殊キャラ選択用のコードは使っていませんが、おそらく違うことはないと思います。

モーション編集について

2016.05.01 00:00|スマブラX改造 PSA参考
他のキャラのモーションが欲しい時にBoneが伸びたり縮んだりしてなんか違和感、という事ありますよね。
これは1F目を選択してTransのみにチェックを入れた状態でClearを押すとだいたい解決する場合があります。
また、Cleanは基本的に押しておいた方がいいです。元のキャラにしかないBoneのデータを消してくれるので、容量をかなり節約できるからです。

そういえば、ガードモーションに入った時に、シールドの出現位置をずらせなかったりするキャラがいますね。
調べてみると、シールドの出現位置は、モーションのThrownNを編集することによってずらせるみたいです。
フレーム数も結構重要かもしれませんね(基本的に361F)。
元々ゲームウォッチのようにThrownNしか動かしていないキャラもいるので、ThrownNだけを動かしてシールドの位置は動かせるけど、シールド以外のモーションは変化なし、なんていうのもいいかもしれませんね。

BrawlBoxモデル編集ウインドウの各機能について(4/28更新)

2016.02.08 23:55|スマブラX改造 PSA参考
各機能についてのメモ。

上部の各機能
-Fileメニュー
・New Scene:現在表示されているモデルをすべて消す
・LoadModels:モデルをロードする。ファイル内に複数モデルがある場合は、すべてロードする。ドラッグ&ドロップでもOK。
-Animations
・Load:モーションをロードする
・Close:ロードしたアニメーションを閉じる
・Save:現状を上書き保存
・Save As:現状を名前を付けて保存
-Optionsメニュー
・Undo:やり直し?(動作しない)
・Redo:繰り返し?(動作しない)
-Take Screenshot:スクリーンショットを保存する
・Environment Settings: 環境設定。カメラの位置や床の色などを設定できる。
-Settings:様々な設定の変更ができる。
-All Settings:Optionsメニュー内の全ての設定をリセットしたりできる。
-Viewメニュー
-Panels:上下左右の各メニューの表示・非表示を切り替える
-Viewer
-Background:背景の色などを変更する
-Bone Control:操作するもの(Trans/Rot/Scale)を切り替える
-Floor:床の表示・非表示を切り替える
-Reset Camera:カメラの位置をリセットする
-Show Camera Coordinates:?
-Detach:モデルを別のウインドウに表示する
-Models:各モデルの表示・非表示を切り替える
-Animations:アニメーションで表示・動作するものの選択などができる
-Help:ヘルプを表示する。
-Toolメニュー:アニメーションの合成などができる
-TargetModelメニュー:モデルを隠したり消したりできる(複数モデルを表示している時に使える)
-(TargetModelの右のComboBox):モデルの選択をする
・Bone:Boneの表示・非表示を切り替える
・Polygons:モデル本体の表示・非表示を切り替える
・Vertices:Verticesの表示・非表示を切り替える
・Floor:床の表示・非表示を切り替える
・Reset Camera:カメラの位置を初期位置にリセットする
・Save Camera:カメラの初期位置を現在の場所にセットする
・Clear Camera:保存したカメラの位置を元に戻す
(ここまではBrawl Box v0.71で表示される この下はBrawl Box v0.73bで確認できる)
・Collisions:?
・Overlays:?
・Zoom Extents:指定したBoneに対してカメラをセットする
-(ClearCameraの右のComboBox):操作するもの(Trans/Rot/Scale)を切り替える

左部の各機能
Animations、Objects、Texturesボタンを押すとリストを隠せます。
・Load:モーションをロードする
・Close:ロードしたアニメーションを閉じる
・Save:現状を上書き保存
・CHR/SRT/SHP/PAT/VIS/CLR/SCN:編集するものを切り替える
・Animationsリスト:操作したいアニメーションを選択する
・Sync VIS0:?
・Objectsリスト:選択したオブジェクトの表示・非表示を切り替える
・Texturesリスト:選択したテクスチャの表示・非表示を切り替える

左部の各機能
・Bone/Keyfreams:リスト表示を切り替える
・Boneリスト:操作したいBoneを選択する
・Keyfreamsリスト:Keyfreamのリストが表示できる。Boneなどを何も選択していない状態だと、何も表示されない。

CHR/SRT/SHP/PAT/VIS/CLR/SCNについて
CHR:アニメーション
SRT:キャラの目の開きなど (BrawlBoxで触るとバグが発生する確率大)
SHP:? ファルコンやディディーに使われている
PAT:キャラの目の開きや表情など
VIS:? スネークやソニックに使われている
CLR:Darkが表示されていたりするが詳しいことは不明
SCN:?

下部の各ボタンと機能(CHR選択中の場合)
Transform Frame グループ
特徴:1つのモーションの選択中の1フレームの1つのBoneの9つ全てのパラメータに対して操作を行う
・Cut:チェックの入れたパラメータをコピーし、全てのパラメータを消す
・Copy:チェックの入れたパラメータをコピーする
・Paste:コピーしたパラメータをチェックの入れた所だけ貼り付け、入れていない場所も既存の数値を確定する

Transform All グループ
特徴:1つのモーションに対して操作を行う
・Delete:選択中のフレームを削除する
・Paste:コピーした1フレーム分のすべてのパラメータをチェックの入れた所だけ選択中のフレームに貼り付ける
・Copy:選択中のフレームのチェックしたパラメータをコピーする
・Clear:選択中のフレームのチェックしたパラメータをすべて除去する
・Clean:選択中のアニメーションの無駄と思われる部分を除去し、容量を減らす(チェックした所は関係なし)
・Insert:選択中のフレームの後ろに1フレーム新しく作る
※Cleanは場合によっては必要なものを消したり、うまく無駄を除去してくれない場合もあります。またバージョンによって機能にかなり差があるようなので、上手くいかない場合は別バージョンを試してみましょう。(現在1番いいのはBrawlBoxv0.73b。ただしBrawlvaultでダウンロード可能なもので1番いいのはBrawlBoxv0.71。最新のものは不具合あり。)
Cleanは他にも、他のキャラからモーションを持ってきたときに、そのキャラが持たないBoneのデータを消してくれます。
また、Insertを使わなくてもPlayの上にあるFrameの最大値を増やせばフレーム数は増やせます。

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

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になっていると掴み打撃などのモーションのキャンセルをして掴み打撃または投げに移行できます。

掴み系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.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になっている値を変更してもフリーズしなくする方法の所でミスをしている可能性大。)

ルーペ、花ダメージ無効化

2015.10.17 21:55|スマブラX改造 PSA参考
常時完全に、ではないですができるようです。
花ダメージを防ぐ場合はLA-Basic[24]、
ルーペダメージを防ぐ場合はLA-Basic[45]を
常にダメージにならない値にしておけば大丈夫です。(どちらの場合も20以下なら大丈夫でしょう)

記述例(ルーペダメージ無効化):
Set loop Infinite
  If Compare LA-Basic[45] > 0
    Basic Variable Set: LA-Basic[45] = 0
  End If:
  Synchronous Timer: frames = 1
Execute Loop:
発動時、ルーペ状態になりがちな技でルーペダメージを防ぎたいときに使えそうですね。
この方法ではルーペ状態そのものになることは防げませんが...

追記(2017/9/3):
ルーペ状態そのものになることは、LA-Bit[25]をfalseにすれば防げます。ほぼ画面上から完全に見えなくなるだけですが...
ルーペダメージはLA-Bit[26]をfalseにしても防げます。
花ダメージを防ぐことができるものは見つかりませんでした...

AIScriptpad Commands

2015.10.02 00:00|スマブラX改造 PSA参考
この表は未完成です。
不明な点が多いこともあり、訳がかなり雑になってます。間違っていたら指摘してくださいな。
実際に動作を確認したものはかなり少ないですが、全部確認しなくても十分なAIは作れると思います。
AIScriptpad2.0ではReferenceを見ると英語で説明文が書かれています。
あと、順番が少し雑になってるので注意。

イベント-入力関連-       解説
StickCPのスティック入力を制御する。1で前方、-1で後方 その次の数値は1で上方、-1で下方
AbsStickCPのスティック入力を制御する。1で右、-1で左 その次の数値は1で上方、-1で下方
Buttonボタン入力をする。AやBなどはそのままだが、十字キーなどは不明... "|"を使えば同時押しに
ClearStickスティックの位置を元に戻す?

使用可能な変数はverのみ。ver0からver20位まで使える。22以上は使わない方が無難らしい。

-イベント-関数関連解説
XCooedキャラのX座標を返す関数
YCooedキャラのY座標を返す関数
OPos敵が右にいるとき1、左にいるとき-1
Directionキャラが右向きのとき1、左向きのとき-1
XSpeedキャラの横方向へのスピード
YSpeedキャラの縦方向へのスピード
OXCoord敵のX座標
OYCoord敵のY座標
NumJumpsキャラのジャンプ回数
AIPDFloat1敵いる距離が遠い時?
AIPDFloat2敵のいる距離?
DistToOEdge崖の近くに敵がいるか?
LevelValueキャラのCPレベル。チュートリアルにある値と同じ?                             
ObjXCoord飛び道具のX座標?
ObjYCoord飛び道具のY座標?
OXSpeed敵の横方向へのスピード?
OYSpeed敵の縦方向へのスピード?
ObjXSpeed飛び道具の横方向へのスピード?
ObjYSpeed飛び道具の縦方向へのスピード?
EstOPassTimeX敵の予測X座標?
EstOPassTimeY敵の予測Y座標?
EstOXCoord敵の予測X座標?
EstOYCoord敵の予測Y座標?
Damageキャラがダメージを受けたか?
ODamage敵がダメージを受けたか?
ODirection敵の向き?
ONumJumps敵のジャンプ回数?
HurtboxSizeキャラの当たり判定?
OHurtboxSize敵の当たり判定?
DistBackEdge敵が崖つかまりしているか?
BBoundaryすぐ下にバーストラインがあるか?
TBoundaryすぐ上にバーストラインがあるか?
LBoundaryすぐ左にバーストラインがあるか?
RBoundaryすぐ右にバーストラインがあるか?
DistTop立てる場所までの距離?

イベント-分岐関連-      解説
ifIfブロックを立ち上げる。条件に合うとき中のものを実行する。
”&&”や"||"を使うとorやandを使わなくていいのでorやandは必要なし?
ifnotifブロックを立ち上げる。条件に合わないとき中のものを実行する。
elseIfブロックの条件に合わない時立ち上げる。elseのすぐ後にifを立ち上げる場合はelifを使う
elifIfブロックの条件に合わない時に条件をつけてIfブロックを立ち上げる
endifIfブロックを閉じる
orIfの条件が合わなかった場合もう一つ条件を加え、条件に合う場合ifの中身を実行
ornotIfの条件が合わなかった場合もう一つ条件を加え、条件に合わない場合ifの中身を実行
andIfの条件が合った場合もう一つ条件を加え、条件に合う場合ifの中身を実行
andnotIfの条件が合った場合もう一つ条件を加え、条件に合わない場合ifの中身を実行













イベント-ループ、ルーチン関連-解説
labelループなどで使うlabelをセットする
Return1フレーム後、システムをlabelから実行再開する
Finishループ、ルーチンの実行をやめる
Seekループをやめ、次のlabelから実行を再開する
Jump1フレーム待たずに即座に前回Seekされたラベルにジャンプする   
Goto次のラベルに即座にジャンプし、その後呼び出した位置に戻る

その他と?のイベント解説
Rndランダムに値を出す
Zero0
One1
SetVar値をセットする
Add値を加算
Sub値を減算
Mul値を乗算
Div値を除算
SetVecベクトル値をセットする
AddVectorベクトル値を加算
SubVectorベクトル値を減算
MulVector ベクトル値を乗算
DivVectorベクトル値を除算
Randomランダムに値を出す
SetFrameフレームをセットする
Callもう一つのモジュールを呼び出す?                                                        
Cmd20不明
SetTimeout実行の一時停止?
EdgeCheck崖へに捕まれるか?
Cmd21キャラが動いているか?
GetShieldRemainシールドを出して大丈夫か?
GetRndPointOnStageランダムに値を出す?
AtkDiceRollランダムで次の行動を決める?
Breakpoint区切り点?
Cmd2F攻撃判定と結ぶ?
Cmd30動きながら攻撃判定と結ぶ?
NumFramesフレーム数?
Func12不明
Func13不明
Func20不明
Func21不明
Func22不明
Func23不明
Func24不明

-Requirements-説明
GT比較元が比較対象より大きいときにtrueを返す
LT比較元が比較対象より小さいときにtrueを返す
GE比較元が比較対象以上のときにtrueを返す
LE比較元が比較対象以下のときにtrueを返す
XDistLEX座標が比較対象以下のときにtrueを返す?
ODistLE敵の比較元が比較対象以下のときにtrueを返す?
FrameGE経過フレームが比較対象以上のときにtrueを返す?
Idlingキャラが何もしていないときにtrueを返す
Dashingキャラがダッシュ中ならtrueを返す
InAir空中にいるときtrueを返す
CanThrow投げられるものがあるときtrueを返す
CalledAsルーチンを返せるときtrueを返す
OutOfStageステージの外にいるときtrueを返す
InAirOnSaved空中でステージの中にいるときtrueを返す?
Act1EOr1D不明
CharDistLEキャラが一定の範囲内ときtrueを返す?
DiceRollResultAtkDiceRollの結果が指定されたIDならtrueを返す?                       
Falling落下中の時trueを返す
Invincibleキャラが無敵状態の時trueを返す
Grabbing敵をつかんでいる時trueを返す?
ModeRelated不明
NormCharDistLEキャラのステートが通常のときtrueを返す
OAttacking敵が攻撃を出しているときtrueを返す
NoOneHanging何も持っていないときtrueを返す
OCol敵が攻撃していないときtrueを返す
OWiring敵が崖つかまりをしているときtrueを返す
OInAir敵が空中にいるときtrueを返す
IsCaughtキャラがつかまれているときtrueを返す
NoOpponent敵がいないときtrueを返す
IsCharOfキャラの引数が指定されたものであればtrueを返す
OIsCharOf 敵の引数が指定されたものであればtrueを返す
True常にtrueを返す
MeteoChance敵が復活したか?
ev1未使用? 不明
OInHigh敵が高い位置にいるか
ev2未使用? 不明
ev3不明
fXFar敵が遠距離にいるか
fXMiddle敵が中距離にいるか
fXClose敵が近距離にいるか
Back敵が後ろにいるか
Far遠くにいるか
SamePlaneいる位置が敵と同じ高さか
Lying地上で倒れているか
CanJumpジャンプできるか
MarioCape反転属性の攻撃を受けて向きが変わったか
FullCharge 必殺技のチャージが最大状態か
PokemonTiredポケモンがつかれた状態か
DiddyClingディディーの横必殺技で掴まれたか
Gliding滑空常態か
AccelFallキャラの落下スピードが最大か
rInAirキャラが空中にいるか
fVeryClose敵がすぐ近くにいるか
XVeryClose敵とのX座標が近い値か
JumpRecoverRangeジャンプが回復したか
ev15未使用? 不明
PeachHoverピーチが空中でホバー状態か
VeryCloseOrBack敵がすぐ近くかまたは背後にいるか
Not1_4_9_12And2敵が遠く高い位置にいるか
SnakeUpB スネークが上必殺技を使ったか
OBlown敵が吹っ飛んだか
OSFall敵がしりもち落下中か
ev1Cアイスクライマーが妥当なことをしているか?
DiddyBananaディディーがバナナを2つ出していないか


AIPDで使うもの
Attack dice roll tableではslotが使われている。0から22位まであり、それぞれのslotの中から行動をランダムで行う?
どのような条件でどこが動くかは他のアクションから来ている?

Requirementsは上のものと同じ。

RoutinesID解説
Nothing0なにもしない
Unk1010不明
Unk2020不明
Unk2121不明
Unk2222不明
Unk2323不明
Unk2424不明
Unk3030不明
Unk3131不明
Unk3232不明
Unk3333不明
WalkUp40敵のいる方に向かって歩く
Hop50ジャンプ
SHopTowards51敵のいる方にジャンプ
FHopTowards52前にジャンプ
SHopNeutral53ジャンプ
DJNeutral 54ダッシュジャンプ?
FHopAway 55後ろにジャンプ
SHopAway 56敵のいる方と逆方向にジャンプ                                         
SHopDJ57敵のいる方にダッシュジャンプ
FHopDJ58敵のいる方にダッシュジャンプ
DashUp60敵のいる方にダッシュ
RollF71前方回避
RollB72後方回避
GetBehind80避ける?
Unk10101010不明
Unk10201020不明
Unk10301030不明
Unk10401040不明
Unk10501050不明
Unk10601060不明
Unk10701070不明
Unk10711071不明
Unk10721072不明
Unk10731073不明
Unk10741074不明
Unk10751075不明
Unk10761076不明
Unk10771077不明
Unk10781078不明
Unk10801080不明
Unk10901090不明
BlockRecovery10A0敵の追撃に警戒する?
Unk10D010D0不明
InterceptCliff10F0崖つかまりを妨害する?
Unk11201120不明
Unk11301130不明
Unk11401140不明
Unk11501150不明
Unk11601160不明
Unk11701170不明
JumpOnStage2010地上ジャンプ
Unk20202020不明
Unk20302030不明
EdgeRecover2040崖つかまり?
OnGotDamaged2050ダメージを受ける?
Unk30103010不明
Unk30203020不明
Unk30303030不明
Unk30403040不明
Unk30803080不明
Unk30903090不明
Spotdodge30A0その場回避?
DodgeWhenAttacked30B0攻撃を避ける?
AirDodgeWhenAttacked30D0空中で攻撃を避ける?(空中回避?)
Reflect30E0反射?
Jab1236031弱攻撃
FTilt6032横強攻撃
DTilt6033上強攻撃
UTilt6034下強攻撃
FSmash6035横スマッシュ攻撃
USmash6036上スマッシュ攻撃
DSmash6037下スマッシュ攻撃
NSpecial6038通常必殺技
SSpecial6039横必殺技
USpecial603A上必殺技
DSpecial603B下必殺技
Grub603C掴み
Noting603Dなにもしない?
NAir6041空中ニュートラル攻撃
FAir6042空中前攻撃
BAir6043空中後ろ攻撃
UAir6044空中上攻撃
DAir6045空中下攻撃
NSpecialAir6046空中通常必殺技
SSpecialAir6047空中横必殺技
USpecialAir6048空中上必殺技
DSpecialAir6049空中下必殺技

Offsetが0になっている値を変更してもフリーズしなくする方法

2015.09.30 02:25|スマブラX改造 PSA参考
やる前に変更したいOffsetの値を確認しておくこと。
PSAは、使わないSubActionのOffset(Mainじゃなくてもいい)の値を確認するときだけ必要。
ファイルの編集には、SAは一切使わずバイナリエディタのみを使って作業をする。

1. 既存の不要なサブアクションのOffsetを、バイナリエディタで0に変更。
(複製したファイルをPSAで開いて、サブアクションのOffsetを確認しながらバイナリエディタで値を検索すればいい)
この時、消したところのOffsetを確認(メモ1)しておく。
ここの値はNo Eventを追加すれば復活したはずなので、そこまで慎重に選ぶ必要はないと思われる。
(不要なサブアクションのOffsetが見つからない場合は、TypeがPointerのイベントを追加して
そのParams Offsetを確認(メモ1)し、確認したOffsetから値を+80したOffsetに飛んで、
バイナリエディタでTypeをPointer以外に変更すればいい。)

2. そして、値を0から変更したい所に行く。
値を変更した時のOffsetの近くにある、既に値が入っているOffsetをしっかり確認(メモ2)しておく。
値を0から変更したOffsetの値はまだ使うので注意。

3. 確認(メモ1)した値から-80した数で検索。
その値を削除。
続けて確認(メモ2)した値から-80した数で検索。
値を0から変更したOffsetの値を入れる。(もちろん-80も必須)
小さい順に並んでいるので、より小さい値とより大きい値の間に入れるといい。

保存前に、編集開始前と編集開始後でデータサイズが変わっている場合は、バグるので注意。

これで、フリーズを避けることができる。
プロフィール

ICLPX

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

最新記事

最新コメント

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

この人とブロともになる

QRコード

QR