ちゅ るやさんで覚えるキャラ製作講座
第03回 ステートの基本 を 覚えよう



今回からは皆さんおまちかね(多分)のステートの製作に入り ます。
ということで、SFF,AIRファイルに加えCNS,CMDファイルにも手を加えていきます。
CNSファイルは技の内容を指定するための記述を書き込むファイル、
CMDファイルは技を発動するための条件を書き込むファイルです。



Fighter FactoryはMUGENの製作ツールとしてはめずらしく、
CNSボタン  からCNSの編集画面に飛ぶことが出来ます。



右側にあるステートのリストから欲しいステートをクリックするだけでステートコントローラ一の追加が行えたり、
簡単なステートであれば、左側のところに簡単なパラメーターを入力するだけで作成できます。
さらにはPalfix(キャラ等の色を変更するステートコントローラー)の値を確認するためのツールや
キャラとの相対位置を確認するためのツールなども搭載しており、
CNSエディタとして非常に優秀なものとなっております。

ですが、ステートコントローラーのパラメータが多すぎて初心者にはわかりづらくなりそうなのと、
日本語が文字化けして表示されること、そして、
皆様にステートの仕組みを理解していただきたいために、本講座ではあまり使用しません。
皆様ご自身がもうそろそろ使っても大丈夫かな?とか、ステート作るのがめんどくさいと思うようになったら
使用してみてください。




ということで、churuya.cnsを開いてみてください。

まず、ライフやパワー等等いろいろ値を設定する欄が目に付くと思います。
ここの値を変更してやることで、キャラに個性が出ます。

ここで皆様に特に注目していただきたいのはこの二つです。
head.pos         = -5,-90  ;キャラの標準の頭の座標(Bind系で適用される)
mid.pos          = -5,-60  ;キャラの標準の体中心の座標(Bind系で適用される)
書いてあるとおり、キャラの頭の位置と体の中心(普通は腰) の位置を指定するものです。  
なぜこれが大事か、ということですが、それは
たまに相手が投げなどの時に腰や頭の高さを指定してくる場合があるからです。
(頭をつかんで投げる等)
改変前のキャラと似たような背丈のキャラであれば違和感はあまりないです。
しかし極端に背が高いキャラや低いキャラなどの場合、
頭をつかむはずが胸倉をつかむことになったり
虚空をつかむことになります。
ですので、皆様もこの値を調整してやってください。
その他のパラメータに関しては
それぞれの意味横の注釈をご覧ください。



キャラの動きはステートというものに記述します。
ステートにはそれぞれ番号を割り振ることが出来ます。
番号の割り振りは以下のようになります。


200未満・・・通常動作
200番台・・・立ち通常攻撃
400番台・・・しゃがみ通常攻撃
600番台・・・ジャンプ通常攻撃
800番台・・・投げ
1000~2999・・・必殺技
3000~4999・・・超必殺技
5000番台・・・ダメージを受ける動作


200未満と5000番台以外はタダの目安です。
本当は何番でもかまいません。
ですが本講座ではこれに沿っていきます。




ステートというのは、そのキャラがどう動くか、を決定付けるためのものです。
ステートの流れは
①ステートの設定
(Statedef)

②キャラの動作

③他のステートに移動
(もしくは消滅)
基本的にはこのようになっています。
どのようなステートになるかは②で決まります。
ですので②に必要なステートコントローラは後々説明するとして。
本項では①と③について説明いたします。



①のステートの設定に ついて
[Statedef ***]
type    = S
movetype= A
physics = S
velset = 0,0
ctrl = 0
anim = 200
poweradd = 20
sprpriority = 2
juggle  = 1
***のところにステートの番号を入力してください。
Statedefから次のStatedefの直前までがそのステートになります。
主な設定項目にはこのようなものがあります。
ステートによっては設定項目が増減します。

では、それぞれの項目について説明します。

type ;ステートの状態を選択します。
S(立ち)
C(しゃがみ)
A(空中)
L(倒れ)
U(前のステートと一緒)
の5種類から選択します。

movetype ;ステートの動作の種類を選択します。
A(攻撃)
I(通常動作)
H(ダメージ)
U(前のステートと一緒)
の4種類から選択します。

physics ;ステートにかかる力の種類 を選択します。
S(stand.friction(立っている時の摩擦係数)の影響を受けます)
C(crouch.friction(しゃがんでいる時の摩擦係数)の影響を受けます)
A(yaccel(重力加速度)の影響を受けます)
N(いずれの影響も受けない)
の4種類から選択します。


velset ;ステートの移動速度を設定します。
X軸方向の速度,Y軸方向の速度
と記述します。
MUGEN の場合、Y軸方向の値は下に行けば行くほど大きくなります。
これは絶対に覚えておいてください。

ctrl; キー入力をうけつけるかどうかを設定します。
0(受け付けない)
1(受け付ける)
の2種類から選択します。

anim; このステートで表示するアニメーションの番号を決定します。
記述しない場合、前のステートのアニメーションが引き継がれます。

poweradd; このステートに入った瞬間に増えるパワーの量を決定します。
マイナスの値を記述した場合、パワーが減ります。

sprpriority; ステートの表示順を設定します。
値が大きいほど手前に表示されます。

juggle; 空中で攻撃で、どのくらいコンボがきまるかを決めるための設定です。
事前に設定したairjuggleの値からここで設定した値を引いていき、
値が0以下になるまでコンボを続けることができます。

その他にも設定するような項目はありますが、とりあえずはこれだけ覚えてください。



③の他のステートに移 動について
次にステートの終わらせ方です。
キャラ本体のステートの消滅を行うことはできないので、
他のステートに移動する方法についてせつめいします。
これにはChagestateというステートコントローラーを使用します。
Chagestateのテンプレートはこのようなかんじになります。

[State ***, ***]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
***にはステート名や状態を記入してください。
では、それぞれの項目について説明します。


type; ステートコントローラーを記入します。
今回はChangeStateですね。

trigger; ステートコントローラが発動するための条件を記入します。
triggerはtrigger1,trigger2のように番号をつけて記述します。
等号(=)の他に、不等号(>= ,<=)や否定(!=)等も使えます。
使用できる条件は多種あります。
一例を挙げますと


time; ステートが始まってからの時間。単位はフレームです。time=4で、ステートが始まってから4フレーム目という意味。
AnimTime; アニメーションの終わりから何フレーム目か、という意味です。Animtime=0で、アニメーションが終わった時という意味です。
Animelem; アニメーションの枚数を引きます。Animelem=2で2枚目の絵の時、という意味です。
Vel X; キャラのX軸方向の距離を引きます。 同様にVel Y で Y軸方向への距離を引きます。
P2Dist; 敵'(P2)との距離を引きます。Velと同様にXとYに分かれます。 P2Dist Y <=30 で、敵とのY軸上の距離が30以下のときという意味になります。
Anim; アニメーション番号を引きます。Anim = 200でアニメーション番号が200のとき、という意味です。
Stateno; ステート番号を引きます。 Stateno = 200でステートが200の時、という意味になります。

その他数え切れないほどの条件が存在します。詳しくはご自分で調べてください。

これらの条件を組み合わせます。

例①
trigger1=time=1
trigger1=P2Dist X = 10
これは、時間が1フレーム目かつ敵とのX軸上の距離が10の時 という意味になります。

例②
trigger1=time=1
trigger2=P2Dist X = 10
これは、時間が1フレーム目の時、または敵とのX軸上の距離が10の時 という意味になります。

さらに、複数の条件に跨るような条件を記入する場合、triggerallを使用します。
trigger1等がなく、triggerallのみの場合エラーが出現するので注意しましょう。

例③
triggerall=Stateno=100
trigger1=time=1
trigger2=P2Dist X = 10
これは、ステートが100かつ時間が1フレーム目の時、またはステートが100かつ敵とのX軸上の距離が10の時 という意味になります。


このトリガーというのは一種の予約みたいなもので、
たまに記述と異なるときに発動するものもあります。
たとえば攻撃時に
trigger1=time=0
と記述していると
最初に攻撃があたったときに発動してくれます。

ここまでがすべてのステートコントローラーに共通する項目
以下の項目はChangestate用の項目です。
value; 移動先のステートの番号を記入します。
value=200 でステート200に移動します。

ctrl; 次のステートがキー入力をうけつけるかどうかを設定します。
0(受け付けない)
1(受け付ける)
の2種類から選択します。



これで、ステートの基本に関係する説明を終了いたします。
次は皆様お待ちかね攻撃の基礎、通常攻撃について説明します。



参 考文献
ク リエイターズJAPAN2のBaddarkness氏によるStatedef解説
http://cjmk2.hp.infoseek.co.jp/BD/

無限中学校のCNS講座内ステイトデフの項目の説明
http://mug0.hp.infoseek.co.jp/mugen_statedef.htm

月の住処,クリエイタールーム
http://tukiken.hp.infoseek.co.jp/muge/cr/creater.html

ちょっとこ丸氏製作教材カンフーマン