ダウンの仕様・対処法

MUGENにはダウン時の仕様があります。その一つがダウン中にボタンを押すと即座に起き上がるというものです。
特にAIは内部処理でボタンを押す頻度が高いためダウン直後に起き上がることが多いです。
大多数のゲームでは起き攻めが非常に重要なので、ダウン時間が短すぎると起き攻めをする時間がほとんどないという事態になります。

ここでは、その対処法やその他の仕様について書きます。

2008/11/1相手のキャラによってはバグが発生することを確認。導入はご遠慮ください。

statedef 5110

冒頭で書いた仕様ではこのステートを即座に終了することができるというものです。しかも、この仕様はこのステート内の記述で起こっているものではなく、MUGENの内部処理で行っています。

ここではvarを使った方法をご説明します。

varといってもsysvarを使うので基本的に全キャラ使用可能です。
sysvarは(0)~(2)を使っておりますが、このうち(2)はダウン時の追い討ち食らうのステートのみでしか使っていません。そのため、このvarを使用します。

まず、common1.cns内のstatedef [5110]を探します。

; HIT_LIEDOWN
[Statedef 5110]
type    = L
movetype= H
physics = N

[State 5110, EnvShake]
type = FallEnvShake
trigger1 = Time = 0

[State 5110, 1] ;For hit up/up-diag type (from state 5081)
type = ChangeAnim
persistent = 0
trigger1 = SelfAnimExist(5110 + (anim % 10))
trigger1 = anim = [5081,5089]
value = 5110 + (anim % 10)

おそらくこのような記述が見当たると思います。そこで、間に以下の記述を入れます。

 HIT_LIEDOWN
[Statedef 5110]
type    = L
movetype= H
physics = N

;===新規追加(ダウン時間の設定)
[State 5110, EnvShake]
type = VarSet
trigger1 = Time = 0&&prevstateno!=5120
sysvar(2) = ifelse(sysvar(0)=1,20,0);←数値はダウン時間の初期値です。数値が高ければダウンしている時間が短くなります。sysvar(0)=1はダウン追い討ち後という意味です。この記述ではダウン追い討ち後は即座に5120に飛ぶことでダウン追い討ち永久防止します。必要なかったら単に sysvar(2) = 0 でOKです。

;===新規追加(一定時間後に起き上がりステートへ飛ぶ)
[state 5120]
type = ChangeState
trigger1 = sysvar(2)>=20&&time>0;←「20」はダウン時間です。お好みで。20F前後が無難なので今回はそれにしています。
value = 5120

;===新規追加(起き上がり時間用)
[State 5110, EnvShake]
type = VarAdd
trigger1 = time>=0←7/29変更
sysvar(2) = 1

[State 5110, EnvShake]
type = FallEnvShake
trigger1 = Time = 0

[State 5110, 1] ;For hit up/up-diag type (from state 5081)
type = ChangeAnim
persistent = 0
trigger1 = SelfAnimExist(5110 + (anim % 10))
trigger1 = anim = [5081,5089]
value = 5110 + (anim % 10)

次のstatedef 5120の方も変える必要があります。

ただし、この設定には一つ問題があります。それはMUGENのダウン時間短縮の仕様に合わせて動きが作られているAIはこの設定により起き攻めなどが上手く機能しない場合があることです。

また、キャラ本体にステート5110、5120の記述が入っている場合そちらの記述を優先するので、そのようなキャラに対応させたい場合はそのキャラのcnsを直接変更しなければなりません。

 

statedef 5120

ダウン時間短縮の仕様の対策法の続きです。

まずstatedef 5120を探します。

; HIT_GETUP
[Statedef 5120]
type    = L
movetype= I
physics = N

;新規追加
[state 5120]
type = ChangeState
trigger1 = sysvar(2)=[1,20]←7/29変更
value = 5110

[State 5120, 1a] ;Get up anim (normal)
type = ChangeAnim
triggerall = time = 0
trigger1 = anim != [5111,5119]
trigger2 = !SelfAnimExist(5120 + (anim % 10))
value = 5120

新規追加の部分を書き加えます。

statedef 5120にはもう一つ仕様があります。

それは起き上がり後の無敵時間の設定です。デフォルトでは打撃3F、投げに12Fとなっております。

[State 5120, 5] ;Can't be thrown right after getting up
type = NotHitBy
trigger1 = AnimTime = 0
value = , NT,ST,HT
time = 12

[State 5120, 6] ;Can't be hit right after getting up (short time)
type = NotHitBy
trigger1 = AnimTime = 0
value2 = SCA
time = 3

[State 5120, 7]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

これらの無敵時間は別のステートへ飛ばされても無敵時間が上書きされるまでは有効です。この影響で被起き攻め時発生2F以下の技を起き上がり直後に出すと完全無敵で攻撃を当てることができます。

投げはまだしも打撃に対して3Fも無敵時間が入っているゲームはほとんどないでしょう。この無敵時間を調整しましょう。

[State 5120, 5] ;Can't be thrown right after getting up
type = NotHitBy
trigger1 = AnimTime = 0
value = , NT,ST,HT
time = 6;12;変更

[State 5120, 6] ;Can't be hit right after getting up (short time)
type = NotHitBy
trigger1 = AnimTime = 0
value2 = SCA
time = 1;3;変更

[State 5120, 7]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

投げ無敵はゲームによってまちまちですが、5F以上あれば問題ないでしょう。今回のはCVS2,SFIIIのものです。

全身無敵時間を1Fだけ残す理由はMUGENの仕様上ステートから移動した瞬間は行動できないからです。もちろん飛ばした先のステートに直接書いてある行動はできますが、その他の行動はできません。(詳しくは後ほど「リバーサル」の項目で書きます。)

そのため無敵時間は設定したい値+1Fにします。この無敵時間を無くすと起き攻めにヨガフレイムを出されるだけで何もできなくなってしまいますので必ず1Fは残してください。