追加記述

Last-modified: 2014-08-26 (火) 18:36:48

本来は「.cmd」ファイル内には記述されていない項目だが、記述しないとその行動をさせられないもの
主に「common1.cns」に関係する、MUGENのキャラクターとして基本的な行動がこれにあたる


 

歩く

追加内容

;歩く、和訳KFMの歩く速度は並程度
[State -1, 歩く]
type = ChangeState
value = 20
triggerall = roundstate = 2
triggerall = statetype != A
trigger1 = ctrl && stateno != 20
trigger1 = random <= 100
ctrl = 1


他に何もできることが無いなら歩く、と言った感じ。「stateno != 20」は歩きから歩きへと
ループしないための記述。主に「その行動中に別の行動もできる」ステートだと、この記述が必要のようだ

 

あと「ctrl = 1」が無いと動けなくなるので注意、common1.cnsの「ダッシュ」の項目と同じ理由

 

ジャンプ

追記内容

;ジャンプする、和訳KFMのジャンプ速度&ジャンプ高度は並程度
[State -1, ジャンプ]
type = ChangeState
value = 40
triggerall = roundstate = 2
triggerall = statetype != A && ctrl
trigger1 = BackEdgeBodyDist <= 20 && p2statetype = L && p2bodydist X <= 60
trigger2 = p2statetype != A && enemynear,HitDefAttr = SC, NT,ST,HT
trigger2 = random <= 700
trigger3 = p2statetype = A && p2movetype = H
trigger3 = P2BodyDist X = [0,90]
trigger3 = enemynear,vel Y = [-1,1]
trigger3 = p2stateno != [1025,1028]
trigger3 = random <= 700
trigger4 = p2statetype != A && p2BodyDist X >= 80 && enemynear,NumProj > 0
trigger4 = random <= 100
trigger5 = p2statetype != A && p2BodyDist X >= 120 && p2movetype = A && EnemyNear,NumHelper > 0
trigger5 = random <= 50
ctrl = 1


かなり縦に長くなったので、triggerごとに色を変えて分かりやすくしてみた

 

trigger1の「端に追い詰められてるときに、運良く相手がダウンしたら、ジャンプで脱出」
trigger2の「バックステップ同様、超反応で投げを回避」はまだ分かりやすいと思う

 

trigger3はエリアル(空中コンボ)用、「カンフーアッパー」などで相手を空中に打ち上げたら
「enemynear,vel Y = [-1,1]」つまり相手が吹っ飛びの頂点ごろのときに、ジャンプで追いかけるという記述
「p2stateno != [1025,1028]」は「速いカンフー突き手」の壁バウンド吹っ飛びの時には使わない記述
必殺技でないと追撃できないので、ジャンプ攻撃=通常攻撃ではダメージを与えられない
「P2BodyDist X = [0,90]」は前ジャンプで届くだろう距離を指定してある

 

trigger4はある程度離れているとき、相手が飛び道具を出したらジャンプで回避しつつ近づくための記述
距離を指定しているのは、近すぎるとジャンプが間に合わず打ち落とされる危険があるから。確率が低めなのは
「釣られている」可能性があるから、「待ちガイル」と言えば想像もつくだろう、なので控えめに

 

trigger5はヘルパーを使用した飛び道具に対して、trigger4と同じことをするための記述
相手が一つ以上ヘルパーを出していて、かなり距離を取っていて、かつ攻撃態勢を取ったならば
飛び道具だと推定してジャンプするという曖昧なもの、なので確率もだいぶ低め

 

ちなみにこれも、歩きと同様「ctrl = 1」は必要なので注意

 

空中受け身

追記内容

;空中で受け身を取る、無いよりはあった方がいい
[State -1, 空中受け身]
Type = ChangeState
Value = 5210
triggerall = RoundState = 2
triggerAll = Vel Y > -1
triggerAll = Alive
triggerAll = StateNo = 5050
trigger1 = CanRecover
trigger1 = Random <= 700


「CanRecover」つまり受け身可能なとき、「Vel Y > -1」つまり上昇が終わったとき
受け身を取るという内容。何も設定しなくても結構受け身はとるし、受け身狩りなんてのもあるが
無いよりはあったほうが有利になる状況は多いので、記述しておいた方が良い

 

ガード

記述内容

;ガードする、硬さは大した事ないが、それも使い方次第
[State -1, ガード]
type = ChangeState
value = 120
triggerall = RoundState = 2
triggerall = ctrl && stateno != [120,155]
trigger1 = random <= 700
trigger1 = p2movetype = A || InGuardDist
trigger2 = p2movetype = A || InGuardDist || enemynear,NumProj > 0
trigger2 = P2BodyDist X >= 90 || statetype = A


「stateno != [120,155]」はガード中ではないときの意味、ガードからガードでループしないように

 

基本的に相手が攻撃態勢だったり、ガード可能範囲内だったらガードする。または相手の飛び道具が出ていて
普通に考えてガードの間に合う離れた距離だったり、ガード仕込み飛び込みの考えられる空中なら確実に
ガード体勢に移行する感じ。なおこの記述だと地上ではほぼ立ちガードになる、全くしないわけではないが
運良くしゃがみ中でないとしゃがみガードはしない。下段攻撃には無防備だが、これでも十分役に立つ

 

というのも最近のキャラクターには中段攻撃も標準搭載ずみ、容赦の無い中下段で揺さぶってくるので
完全なガードはほとんど無理、ならば開き直って立ちガードだけでも、中段攻撃はガードできると考えられる

 

また一時期のガード記述で見られた行動だが、敵の高度のある飛び道具に対してしゃがみガードして
首尾よく頭上を抜けて無傷と思いきや、通り過ぎる瞬間に立ち上がってクリーンヒット、以降もそれが続き
飛び道具で完封されるという光景。それを考えると、いっそ立ちガードで飛び道具を受けるのも一つの対処法だ

 

何より和訳KFMには(超必殺技とはいえ)無敵カウンター技や、シールドのような特殊ガードもある
それらを上手に利用すれば、この程度の記述でも十分に相手の攻撃を防ぐことが出来るだろう

 

ちなみに遠距離で確実にガード体勢に移るのは、多段全画面(主に白羅滅精)対策でもある
運よくガードできても乱数要素があると途中でガードを解いてしまい、残りを食らってしまうからだ

 

シールド反撃

追記内容

;基本的には、強カンフー突き手で反撃する
[State -1, シールド反撃・1]
type = VarSet
trigger1 = 1
var(3) = 1010

 

;ただし相手が近くの空中にいたら、弱カンフーニーで反撃
[State -1, シールド反撃・2]
type = VarSet
trigger1 = P2BodyDist X <= 58
trigger1 = p2statetype = A
var(3) = 1050

 

;また相手が近くの地上にいたら、しゃがみ弱パンチで反撃
[State -1, シールド反撃・3]
type = VarSet
trigger1 = P2BodyDist X <= 38
trigger1 = p2statetype != A
var(3) = 400

 

;シールドが成功したら、発生の早い技で反撃を試みる
[State -1, シールド反撃・4]
type = ChangeState
value = var(3)
triggerall = roundstate = 2
triggerall = p2statetype != L
triggerall = p2bodydist X = [-10,74]
trigger1 = statetype != A
trigger1 = ctrl
trigger1 = p2movetype = A
trigger1 = enemynear,vel Y >= 0
trigger1 = enemynear,time >= 10
trigger1 = random <= 700


「シールドが成功したら、発生の早い技で反撃を行わせる」ための記述、変数の使い方の例同様に
変数を使って行動を分岐させている。そのため未使用の新しい変数として、var(3)を設定し用いることに

 

変数である「var」は「var(0)~var(59)」の60個あるのだが、キャラ自体の制御などに既に使用されていて
自由に使えないものも多い。和訳KFMの場合は『変数早見表.txt』ファイルに使用済みのvarがメモされており
使用されていないものを使えば良いが、そうでないキャラの場合だと、全てのファイルをテキストエディタで
開いて確認し、使用されていないvarを特定するという作業が必要になることがある

 

肝心の使用するタイミングだが、相手のジャンプ攻撃をシールドで受けた場合、相手はそのまま落下するので
「enemynear,vel Y >= 0」で落下状態と指定、「>= 0」とゼロを含めてあるのは、相手が地上にいるとき
=上昇も落下もしていない時も、範囲に含めることができるようにするため。また「enemynear,time」は
相手がそのステートにいる時間を測定するためのもの、そこでこの「10」という値を設定したのは

 

[State 702, 時間停止];自分も相手も制限時間も一時的に止める(ポーズ)
type = Pause
trigger1 = Time = 0
time = 13 ;ポーズする時間(フレーム)
movetime = 13 ;ポーズ中に動ける時間。timeよりも多いとバグる(デフォルトは0)
IgnoreHitPause = 1

 

この記述がシールドの記述にあるから。要するに成功すれば、相手を13フレームだけその状態に止めておける
という意味だと思われるので、10フレームもその状態にとどまっているなら、シールドが成功したと推測し
カウンターを繰り出すように、ランダムを含めつつこんな感じで使わせてみている(要修正かも?)