ACMD解説

「ACMD解説」の編集履歴(バックアップ)一覧に戻る

ACMD解説 - (2018/04/21 (土) 22:32:21) のソース

#contents(,fromhere=true)
----
数値は16進数または10進数で表記されている。
技スクリプトは↓。
-[[http://rubendal.github.io/Sm4sh-Calculator/scripts.html]]
-[[技解析値(DLリンク)>>http://ux.getuploader.com/ssb4_kensyou/download/16/116_latest.zip]]
----
**Hitbox読み取り(掴み、投げ以外)
普通のHitboxはパラメータが24番までしかない。
Special_Hitboxとして設定されている攻撃判定には25番以降のパラメータがある。
またExtended_Hitboxとして設定されている攻撃判定は、攻撃判定引き伸ばし(stretch)のパラメータがある。

[[スマブラまとめWIKI_攻撃判定>>http://ssbwiki.e3.valueserver.jp/wiki/index.php/%E5%88%A4%E5%AE%9A#.E6.94.BB.E6.92.83.E5.88.A4.E5.AE.9A]]も参考になる。

***Extended_Hitbox 早見表
|~No.|~進数|~名称|~効果|
|1|16|ID|IDが若い方が優先してヒット|
|2|16|Part(GID)|異なるもの同士はそれぞれ判定を持つ|
|3|16|Bone|攻撃部位|
|4|10|Damage|ダメージ|
|5|16|Angle|ベクトル。詳細は[[スマブラまとめwiki ベクトル>http://ssbwiki.e3.valueserver.jp/wiki/index.php/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB]]|
|6|16|KBG|リアクション影響値|
|7|16|FKB|リアクション固定値|
|8|16|WBKB|リアクション付加値|
|9|10|Hitbox Size|攻撃判定球の半径|
|10|10|Offset X|Boneに対する判定の位置|
|11|10|Offset Y|~|
|12|10|Offset Z|~|
|13|16|Effect|属性|
|14|10|Trip|転倒確率 (1=100%、0.5=50%)|
|15|10|Hitlag|ヒットストップ倍率|
|16|10|SDI|ずらし距離倍率|
|17|16|Clang|相殺の有無|
|18|16|Rebound|相殺モーションの有無|
|19|16|Shield Damage|シールド削り値|
|20|16|SFX Level|効果音の大きさ (0=無音,1=S,2=M,3=L)※その他のHitboxの種類によって違いがある|
|21|16|SFX Type|効果音の種類|
|22|16|Ground/Air|対地・対空判定|
|23|16|Direct/Indirect|直接・間接|
|24|16|Type|種類|
|25|16|Action|0x3fから0x1まで多種確認|
|26|16|???|0x0と0x1を確認、キャラクターの向きでOn/Off?|
|27|16|???|常に0xf|
|28|16|???|常に0x0|
|29|16|Blockability|ガード可/ガード不可 (0=不可,1=可能)|
|30|16|Reflectability|反射可/不可|
|31|16|Absorbability|吸収可/不可|
|32|16|Rehit Rate|再ヒット間隔|
|33|16|IgnoreInvuln|無敵貫通有無(0=不可,1=可能)※あたり判定のある無敵に対しての有無(例:スター状態の相手へ攻撃可能)|
|34|16|Unknown|無敵貫通2(0=不可,1=可能)※あたり判定のない無敵に対しての有無(例:切り札中の無敵)|
|35|16|Facing Restriction|対象の吹っ飛び向きを指定|
|36|16|Grippy|0x0と0x1を確認、Facing Restriction関連?|
|37|16|Team Damage|チームアタックOFF時の攻撃可/不可(0=不可,1=可能)|
|38|16|Hitlag Disable|ヒットストップの消去ON/OFF|
|39|16|NoGFX|カウンター反応有無? 水・風判定では0x1|
|40|16|Flinchless|やられ硬直の消去ON/OFF。水・風判定で0x1|
|41|10|Stretchy Z|Z方向範囲引き伸ばし|
|42|10|Stretchy Y|Y方向範囲引き伸ばし|
|43|10|Stretchy X|X方向範囲引き伸ばし|
#table_zebra(t1, #ddd, #fff, #3f6)

***ID・Part
1つの技が複数のHitboxを持っていて、相手がそれらに同時に触れた場合、IDが一番若いもののみがヒットしそれ以外は無視される。例えばマルスの剣先部分はID番号が大きいため、根元と剣先が同時に当たった場合は根元判定がヒットする。

ただし、それぞれのHitboxのPartの値が異なる場合は、同時に触れた場合でも全てのHitboxが有効になる。(ほとんどのHitboxはPart=0であり、このような技はとても少ない)

異なるPartが使われている攻撃の一つであるクッパ空Nを例にとって説明する。

この技は「右手→左手→右足・左足」と順次攻撃判定が追加されていき(途中で消去されない)、各手足が全て異なるID・Partを持つ。したがって、攻撃の持続中に右手・左手の判定に同時に触れれば、その両方がヒットする。ちなみにこのときコンボカウンターでは「12%x1ヒット」という表示になる。無論、右手→左手と時間差で触れた時は、両方が時間差でヒットする(仮に同Partなら、右手に当たった時点で以降の左手の攻撃判定は当たらなくなる)。


***Ground/Air
-0x1:地上の相手にのみヒット
-0x2:空中の相手にのみヒット
-0x3:地上・空中問わずヒット(ほとんどの攻撃)
また、この値が0x800000001,0x80000003の技はダウン中の相手に当たらないという特性がある。
-0x800000001
--ゲッコウガかげうち
--ディディーDA1段目
--メカクッパ(移動中)
--ゼロサムフリップ踏みつけ判定
--フィットレ弱3埋め判定
-0x800000003
--カービィ、デデデすいこみ


***Facing Restriction
|値|攻撃を受けたキャラの向き|使われている技|備考|h
|0|攻撃者がいる方向|ロボ下スマ、カムイ空Nなど多数|設定されていない技は0扱い|
|1|攻撃者の向きと逆|飛び道具|3との違いは不明|
|2|変わらない|トゥーンNB2炎部分&br()フィットレ下強風圧||
|3|攻撃者の向きと逆|多くの攻撃||
|4|攻撃者の向きと同じ|多くの空後||
|5|攻撃判定の中心方向|天空(剣上昇中のみ)||
|6|攻撃者の向きと同じ※|バックスラッシュ|ガードノックバックが通常と逆。&br()専用の吹っ飛びモーションがある|
|7|左向き|なし||
|8|右向き|~||
|9~|正面|~||
#table_zebra(facing, #ddd, #fff, #3f6)


***Element
|~HEX|~属性名|~該当技、キャラの例|
|0|打撃||
|1|無||
|2|斬撃||
|3|電撃||
|4|氷結|ジャッジ8、カービィNB2、ギガクッパ下スマ、PKフリーズなど|
|5|火炎||
|6|コイン|マリオ上B、ルイージ上B|
|7|反転|マント/シーツ、剣術Mii下B2、オリマーNB3、プリン上B3、ゼルダNB2|
|8|転倒|むらびと下B2、クッパ下B3、ワリオNB3遠距離|
|9|睡眠|ピーチNB2、ピーチ最後の切り札、キレイハナ、トゲピー、ダークライ|
|a|未使用||
|b|埋め弱|(薄い台には効果なし)|
|c|ふらふら|ワリオNB3近距離|
|d|未使用||
|e|花|ピーチ横B2、ワリオ下B2、ねむる、むらびと|
|f|未使用||
|10|即死|フィールドスマッシュのみ|
|11|草|X時代のフシギソウ、今作では使われていない|
|12|水|消火栓水部分、カムイ、マリオ、むらびと、ゲッコウガ|
|13|暗黒|ガノン、ギガクッパ、ルフレ、白ピクミン、ミュウツー|
|14|麻痺|ゼロサム、カムイ、ファルコン下B3、ガノン・リンクなど最後の切り札|
|15|波導|ルカリオ|
|16|埋め2|おとしあなのタネ|
|17|ダウン|X時代のスネーク下投げ、今作では使われていない|
|18|付着|クラッシュボム、射撃Mii横B2|
|19|刺突|シーク横スマ、マルキナ上スマ、カムイ槍など|
|1a|魔法|ピーチ上B、ネス空前、ロゼッタ横スマなど|
|1b|Flinchless1|フォックス上投げブラスター部分|
|1c|Flinchless2|フォックス下投げブラスター部分|
|1d|太陽|太陽礼拝|
|1e|崩れ|セビ|
|1f|かなしばり|ミュウツー下B、ミュウツー最後の切り札1%部|
|20|突き刺し|カムイ横B|
|21|即死2||
|22|未使用||
|23|不明||
|24|バレットアーツ|バレットアーツ|
|25|不明|ダックハントNB、シーク/ゼルダ/ブラピ最後の切り札|
#table_zebra(t2, #ddd, #fff, #3f6)


----
**その他のスクリプト
****Asynchronous_Timer、Synchronous_Timer
指令が有効になるフレームの記述。
Asynchronous_Timerは技の何F目に有効になるか、
Synchronous_Timerは直前の指令から何F後に有効になるかを記述する。

例:
Asynchronous_Timer(Frames=28)
Hitbox(省略)
Synchronous_Timer(Frames=1)
Remove_All_Hitboxes()

この例では28F目にHitboxが有効になり、29F目にHitboxが消える(持続は1F)。


****Set_Frame_Duration
スクリプトおよびアニメーションの進行時間をa倍する。
要するに早送りorスロー再生のコマンドである。 
発生高速化・後隙減少のアップデートや、Xのモーションを流用&調整するために使われる。

#region(close,クリックで詳細解説)
FDはFrame Duration の略。
以下では「Frame」をスクリプト上の時間としてゲーム内のフレームと区別する。

&big(){<基本仕様>}
FD効果中は、Timerが実時間の1Fにつき"1/FD"カウントずつ進んでいく。
通常はFD=1で、1FにつきTimerが1進む。

ゲームでは、Timerの小数点以下を''切り捨てた''Frameのコマンドおよびアニメーションが1F毎に読み込まれる。

FD<1の場合(早送り)、ゲーム内ではスキップされるFrameが出てくる。
スキップされたフレームがHitboxの持続中だった場合、その分持続は短くなる。
ただし新しいコマンドはそのFrameが飛ばされた場合でも読み込まれ、次のフレームから適用される。

 例1: 
  Asynchronous_Timer(Frames=3) 
  Set_Frame_Duration(Speed=0.8)
  	~省略~ 

#image(FD08.png)
この例ではFrame7, 12がスキップされている。


FDの影響が画面に現れるのは、''Set_FDが起動した次のフレームから''である。
FDはフレームが進行するときに適用されるため当然と言えばそうなのだが、
攻撃のコマンドが起動したそのフレームに発動するのとは少し勝手が違うので注意。

 例2: 
  Asynchronous_Timer(Frames=3) 
  Set_Frame_Duration(Speed=2)
  	~省略~ 
  Asynchronous_Timer(Frames=5) 
  Set_Frame_Duration(Speed=1)

#image(FD2.png)
Frame3のFD=2により、以降の''進行時間''が2倍に引き延ばされ動作が遅くなる( ''アニメーション速度は0.5倍'')。
この場合FDは3F目から4F目に移る際に初めて適用されるので、影響が見えるのは4Fからとなる。
同様にして、Frame5→6ではFDは1に戻るので、8F目からは等速のアニメーションとなる。


&big(){<仕様1>}
FDが途中で変化する場合、Timerの値はそのまま引き継ぐ。
Timerは1フレームごとにしか更新されないので、新しいFDが適用されるフレームまでは前のFDで計算する。

 例3:
  Asynchronous_Timer(Frames=1) 
  Set_Frame_Duration(Speed=0.8)
  	~省略~ 
  Asynchronous_Timer(Frames=7) 
  Set_Frame_Duration(Speed=1.2)

#image(FDchange.png)
例えば8F目のTimerは、
 1×1F + 1.25×5F + 0.8333×2F = 8.9167
と計算される。

例3ではingameの5-6Fの間に「Frame7:FD=1.2」を通過するが、5-6Fの間までは前のFD=0.8が有効であり、6F目のTimerは7.25となる。


&big(){<仕様2-1>}
''スクリプトの先頭(Frame0)に整数でないSet_FD''が設定されると、ゲーム内の''1F目はコマンドを全く読み込まなくなる。''
また、0→1F目に限り''Timerの加算も行われない''。
アニメーションはFDの数値によらずFrame1のものになる。
※Timerについては事実に沿った解釈であり、実際の内部処理は不明。

 例4:
  Set_Frame_Duration(Speed=0.8) ← Frame=0
  Asynchronous_Timer(Frames=16)
  Hitbox(省略) 
  Asynchronous_Timer(Frames=21) 
  Remove_All_Hitboxes()

#image(IkeFair.png)
アイクの空前のスクリプト。
1F目は「空白の時間」であり、2F目からTimerの加算が始まる。

また、Frame15,19がスキップされて持続が2F短くなっているのも確認できる。
スクリプト上は14-20Fの計7Fがactiveだが、FDが適用されると12-16F、持続は5Fになる。


&big(){<仕様2-2>}
''スクリプトの先頭(Frame0)に1より大きいSet_FD''が設定されると、最初のTimer更新は「''1以上になるまで(1/FD)を足し続ける''」。

 例5:
  Set_Frame_Duration(Speed=2.5) ← Frame=0

#image(FD25.png)
(1/FD)=0.4なので、Timerは「0.4  0.8  1.2  1.6 …」と増えていくはず。しかし0.4と0.8は1より小さいため飛ばされ、最初のTimerの値は1.2になる。以降は0.4ずつ加算される。

このケースではFDが整数でないので、1F目が空白の時間になっている。
FDが整数の場合は1F目からTimerが更新される。


&big(){仕様3}
FDで延長・短縮されるのはゲーム内の全体モーションFである。
技の全体Fには影響を与えない。
技の全体Fはfighter_param.binにコーディングされていて、実はアニメーションとは全く関係がない。

 例6:
  Generate_Article(ID=0x4)
  Set_Anchored_Article_Action()
  Asynchronous_Timer(Frames=12)
  Extended_Grab_Collision()
  Asynchronous_Timer(Frames=14)
  Grab_Collision()
  Asynchronous_Timer(Frames=20)
  Terminate_Grab_Collisions()
  ''Set_Frame_Duration(Speed=0.55)''
  Asynchronous_Timer(Frames=69)
  Remove_Article()
  Script_End()
リュカのその場つかみのスクリプト。
「Set_FD=0.55」の行はつかみの後隙が短くなったアップデートで追記された。
これは短くなった全体Fに合わせてアニメーションを早送りするためだけに書かれたコマンドである。
同じような変更がクッパjr.の横スマなどにも見られるが、あちらはついでに最終段の発生が早くなっていたりする。


&big(){検証方法メモ}
  Asynchronous_Timer(Frames=1) 
  Remove_All_Hitboxes()
  Hitbox(dmg=1) 
  Asynchronous_Timer(Frames=2) 
  Remove_All_Hitboxes()
  Hitbox(dmg=2) 
という風に、Frameが切り替わるたびにダメージの異なる新しいHitboxを生成し、キャプチャ&コマ送りしながら当たったコマンドをメモする。短時間で多量のダメージを与えるとフリーズするので、ダメージ設定を工夫すべし。

#endregion


****重量固定フラグ
-Unk_853CD75E(Unk=0x1)
-Set_Weight(Flag=0x1)
など。0x1に設定されていると、相手の重量を100として吹っ飛ばし力を計算する。
ベヨネッタの横B・上Bなどに登場。


****全体/部分無敵
-Body_Collision(State=0x0)
-WHOLE_HIT(Unknown=0x0)
-Set_Bone_Intangibility(Bone=0xD, Mode=0x1)
--上2つが全体無敵、下が部分無敵。
など。0x0が通常(食らい判定あり)、0x1が当たり判定あり無敵(invincible)、0x2が当たり判定なし無敵(intangible)。

****アーマー
-Set_Armor(State=0x0, Type=0x0)
State:0x0(アーマー無し)、0x1(アーマー付与)

****透明化
-Body_Visibility(State=0x0)
0x0(透明化)、0x1(通常に戻る)
パルテナの回避に使われている。

****速度指定
-Add/Set_Momentum(Horizontal=0, Vertical=0, Mode=0x1)
「Horizontal」=水平移動、「Vertical」=垂直移動、「Mode」=不明
「H, V」の数値はFLOAT。キャラクター速度が設定される。

****画面色彩
-Screen_Tint(unknown=0x0, unknown=0x0, unknown=0x0, unknown=0x0, unknown=0x0, unknown=0xFF, unknown=0x0, unknown=0xFF)
|~左から|~数値内容|~数値説明|
|1|不明||
|2|色の変化速度|16進数で入力、数値が小さいほど速くなる|
|3|赤色|0~FFまで対応 3つの色の数値を組み合わせることで他カラー対応|
|4|緑色|0~FFまで対応|
|5|青色|0~FFまで対応|
|6|エフェクト?|エフェクトが色の影響を受ける色彩量?|
|7|キャラカラー|0~7確認、キャラが色の影響を受ける色彩量|
|8|不明||
上記のスクリプトを終了する場合は、
-End_Screen_Tint(unknown=0x0, unknown=0x78)
2番目の部分、16進数(FFが上限)の数値が小さいほど速く終了する。

****キャラ色彩
-Color_Overlay(Red=0, Green=0, Blue=0, Alpha=255)
-Terminate_Overlays()
「R.G.B.A」はFLOATで入力。 「Alpha」=透明度
終了するには下のスクリプトを組む。
ルイージFB、ガノンNBなどに使用されている。

****キャラの向き変更(左右のみ)
-Reverse_Direction()
「右向き」の場合→「左向き」、「左向き」→「右向き」
これだけで指定したフレームの下に組み込めば、キャラの向きが変えられる。

****技割り込み
-Allow_Interrupt()
指定フレーム以降に、他の技などでその技をキャンセル可能になる。
※ただし、このスクリプトは指定フレーム1F前から読み込む。

この方法以外に、「Param」の「fighter~lv????」で調整することもできる。
※この方法の場合、必殺技系の割り込み指定はできない。

****Subroutine
-Subroutine(Hash=0xD720F989)
-External_Subroutine(Unknown=0xC5312E6B)
など。指定番号のスクリプトを参照する。
必殺技の空中版などに登場。

****Set_Loop
同じ動作の繰り返しを記述。
Iterationsはループ回数。
Gotoはよく分からないが、多分ループ先頭に戻る指示。

例:
Asynchronous_Timer(Frames=7)
Set_Loop(Iterations=8){
 Hitbox(省略)
 Synchronous_Timer(Frames=2)
 Remove_All_Hitboxes()
 Synchronous_Timer(Frames=1)
 Goto(Unknown=-58)
}

7F目から、「Hitbox2F有効→1F空白」という動作を8回繰り返す。
7-8F,10-11F,13-14F...といった具合。
「8」の部分を「-1」にするとそのモーションが終了するまで繰り返される。

****エフェクト切り離し
-EFFECT_DETACH_KIND(unknown=0x0000000, unknown=0xFFFFFFFF)
左側のunknownに切り離したいグラフィックIDを入力。右は不明。
通常Boneに設定したエフェクトは切り離せないが、これを入れることにより切り離しが可能。
ベヨネッタなどのスクリプトに組まれている。
※Sm4shCommand-Latestでのみ正常表示

****剣先の弧の部分のビジュアルエフェクト
-Defensive_Hitbox(ID=0x0, Bone=0x0, X=0, Y=7, Z=10)
なぜかeffect.binではなくgame.binに記述されている。

****MSCのVariableを変更
-Basic_Variable_Set(Value=0xY,Variable=0xZZZZZZZZ)
Variableに指定したIDの変数を、Valueの値に変更。
例えばカスタム技の紐づけを変える場合は、
Basic_Variable_Set(Value=0xA,Variable=0x1000004X)
A = 0:通常, 1:カスタム1、2:カスタム2
X = 8:NB, 9:横B, A:上B, B:下B

****MSCのBitを変更
-Bit_Variable_Set(Variable=0xZZZZZZZZ)
Variable,Bitの情報は[[こちら>https://docs.google.com/spreadsheets/d/1-Fv8UyW2eTCjDfRnN3ObRD9e6ig4zmlhU_IzCDWh86Q/edit#gid=1558983544]]



----
**コメント
- CPUのAIファイルを弄ってカスタム出来るツールって無いんですかね?前作や前々作ではそれが出来る状態です。ファイターのフォルダからscript→aiと進むとそのファイルが有り、それをsm4shで他のファイターのと置き換える事は出来るのですが、直接ファイルを編集出来るツールは発見出来ません。何か分かれば、ここで書いて頂けると嬉しいです。  -- 名無しさん  (2017-11-08 00:47:09)
- 今作はmsc&gt;mario.mscsb でキャラクターの行動が規定されているようです。詳しいことは私も分かりませんが↓が参考になるかもしれません。 https://www.youtube.com/watch?v=ZsVhBAKKha4 https://github.com/jam1garner/pymsc/wiki  -- DRAFIX/管理人  (2017-11-08 20:21:27)
- どうもです。Extractで取り込んだので地道に研究します(笑)  -- 名無しさん  (2017-11-09 22:47:02)
#comment()