ちゅ るやさんで覚えるキャラ製作講座
第04回  通常攻撃を作ってみよう



今回から、本格的に技の製作にとりかかりたいと思います。
まず最初に通常攻撃の製作を行います。
弱パンチとか強キックとかいったあれですね。

ですがその前に決めないといけないことが1つあります。
それは通常攻撃のボタン数。
既存の格闘ゲームを見回しても
3ボタン、4ボタン、6ボタン等いろいろあります。
初期のカンフーマンが2ボタンだったのも今となっては懐かしいです。
ボタン数によって、今後作る必殺技の数も決まってきます。

本講座で製作するちゅるやさんは3ボタンキャラとして作りたいと思います。
理由は、2ボタンよりは貧相でなく、4ボタンよりは作業は楽だからです。
ということで

xボタン・・・弱攻撃
yボタン・・・中攻撃
zボタン・・・強攻撃

このような設定ですすめていきます。



ちゅるやさん通常攻撃

これを使って下の完成予想図のように作る事が本項の目的です。
今回からは、攻撃を当てたい絵には攻撃用の当たり判定Clsn1も 付けてください。
ちゅるやさん通常攻撃完成予想図


順番に、立ち弱、立ち中、立ち強、しゃがみ弱、しゃがみ強、空中弱、空中中、空中強です。
それぞれのステートは以下のようにしておいてください。
200・・・立ち弱
210・・・立ち中
220・・・立ち強
400・・・しゃがみ弱
410・・・しゃがみ中
420・・・しゃがみ強600・・・空中弱
610・・・空中中
620・・・空中強



通常攻撃にはHitDefというステートコントローラーが必要です。
これは、自分のClsn1が相手のClsn2にあたった時に
ダメージを与えるためのステートコントローラーです。

似たようなものにReversalDefというものがあります。
こちらはこれは、自分のClsn1が相手のClsn1にあたった時に
ダメージを与えるためのステートコントローラーです。
よく、カウンターやブロッキング等に使われます。
パラメータの付け方はHitDefと同じですので、
使いたいときには応用してください。


[State 200, ヒット定義]
type = HitDef                    ;攻撃ヒット定義(Hit Definition)のステートコントローラ
trigger1 = AnimElem = 3          ;攻撃判定ボックスがあればアニメーション3番目のコマで適用されます
attr = S, NA                     ;攻撃属性: これは Standing, Normal Attack(立ち通常攻撃)
damage = 23, 0                   ;相手に与えるダメージ(ヒットした時,ガードされた時)
animtype = Light                 ;当たった時の相手のアニメの種類: Light, Medium, Hard, Back, Up, DiagUp (デフォルト:Light)
guardflag = MA                   ;相手が立ち・しゃがみ・空中どのガードが出来るかを決めます(現在はMiddleAir(全部ガードされます))
hitflag = MAF                    ;相手がどの状態の時で攻撃を当てられるかを決めます(現在はMiddleAirFall(立ち・しゃがみ・空中・やられ落下))
priority = 3, Hit                ;攻撃優先度: 0 (最低) 7 (最高) 4がデフォルト・種類はHit/Miss/Dodge (デフォルト:Hit)
pausetime = 8, 8                 ;攻撃を当てた時の自分と相手の硬直時間(自分,相手)
sparkno = 0                      ;ヒットスパーク (デフォルト:[Data]の項目で設定したモノが適用される) ★3
guard.sparkno = 40               ;ガードスパーク (デフォルト:[Data]の項目で設定したモノが適用される) ★3
sparkxy = -10, -76               ;ヒットスパークの位置(X軸,Y軸)
hitsound = 5, 0                  ;ヒットサウンド(PlaySndと同じやり方)
guardsound = 6, 0                ;ガードサウンド(PlaySndと同じやり方)
ground.type = High               ;当たった時の地上の相手のアニメの属性: High, Low, Trip (デフォルト:High)
ground.slidetime = 5             ;当たった時の地上の相手がのけぞる時間
ground.hittime  = 12             ;当たった時の地上の相手のやられ状態の時間
ground.velocity = -4,0           ;当たった時の地上の相手の初速度(X軸,Y軸)
airguard.velocity = -1.9,-.8     ;ガードされた時の空中の相手の初速度 (デフォルト:(air.xvel*1.5, air.yvel/2))
air.type = High                  ;当たった時の空中の相手のアニメの属性: High, Low, Trip (デフォルト:ground.typeと同じになる)
air.velocity = -1.4,-3           ;当たった時の空中の相手の初速度(X軸,Y軸)
air.hittime = 12                 ;当たった時の空中の相手のやられ状態の時間

; ★3:数字の前に「s」を付けると自分のairファイルからアニメを呼び出す事が出来ます。

これは、旧和訳カンフーマンからの引用ですが、
HitDefはこのようにたくさんのパラメータを使用します。
最初っから全部覚えようとしても無理がありますので
この場では主なパラメータのみ紹介いたします。
attr ;攻撃の属性を設定します。
S, NAのように記述します
1文字目は攻撃の状態でS(立ち),C(しゃがみ),A(空中)のいずれか
2文字目は攻撃の属性でN(通常),S(特殊),H(超必殺)のどれか
3文字目は攻撃の種類でA(通常攻撃),T(投げ),P(飛び道具)のどれか
を選択してください。
S, NAだと立ちの通常攻撃 
C,HPだとしゃがみの超必殺の飛び道具という意味になります。

damage ;ダメージの量を選択します。
ヒットした時のダメージ, ガードされたときのダメージ
と、記述します。
ガードされた時のダメージを0にする時は
ヒットした時のダメージだけ記述してもかまいません

pausetime ;攻撃がヒットした時の硬直時間を指定します。
guard.pausetime ; 攻撃がガードされたときの硬直時間を指定します。
自分の硬直時間,相手の硬直時間 と記述します。

sparkno ;攻撃がヒットした時のエフェクトを指定します。
guard.sparkno ;攻撃がガードされたときのエフェクトを指定します。
指定されるエフェクトはdataフォルダのfightfx.sffに入っています。
デフォルトで用意されているエフェクトの種類は
0;ヒットエフェクト(小),1;ヒットエフェクト(中),2;ヒットエフェクト(大),3;花火のようなヒットエフェクト
10;血しぶき(小),11;血しぶき(中),12;血しぶき(大),40;ガードエフェクト
また、キャラのSFFに含まれてる絵を使いたい場合、
sparkno=s6002 のように
sの後にアニメーション番号を記入してください。

hitsound ;攻撃がヒットした時の効果音を指定します。
guardsound ;攻撃がガードされたときの効果音を指定します。
dataフォルダ内のcommon.sndから音を引き出します。
ヒット音は5,0~5,4
ガード音は6,0です。
キャラのSND内の音を使いたい場合は
hitsound=s0,0
のようにsの後に音の番号を書きこんでください。

ground.velocity ;攻撃が地上でヒットした時の初速度を指定します。
guard.velocity ; 攻撃が地上でガードされたときの初速度を指定します。
air.velocity ; 攻撃が空中でヒットしたときの初速度を指定します。
airguard.velocity ; 攻撃が空中でガードされたときの初速度を指定します。
x軸方向の速度,y軸方向の速度 と記述してください。

上に記述されてなく重要な物としては

fall ;攻撃がヒットした相手が倒れるかどうかの設定を記述します。
0で倒れない、1で倒れます。

kill ;その攻撃で相手をKOできるかどうかの設定を記述します。
0でKOできない、1でKOできます。

最低でもこれだけのパラメータをいじればよりあえずいろいろな打撃が演出できます。
もちろん他のパラメータをいじればさらに多種多様になります。
他のパラメータの内容が知りたい方は、参考文献の方をご覧ください。


ということで、立ちの通常攻撃のテンプレートはこんなかんじです。
立 ち通常攻撃テンプレ

ここに、パラメータを追加、変更したり、
他のステートコントローラを追加して 演出を加えてください。

例えば、先の動画では、攻撃動作の時に音がなっています。
音を鳴らすためにPlaySndを使用します。

[State ***, 音を鳴らす]
type = PlaySnd;ステートコントローラーです。
trigger1 = Time = 5;トリガーです。
value = 0, 0;SNDファイル内の音の番号を記述してください。

また、立ち大攻撃のように攻撃動作中にキャラが動くようにするには
VelsetもしくはVeladdを使用します。

[State ***, 移動速度]
type = VelSet;ステートコントローラーです
trigger1 = AnimElem = 4;トリガーです。
x = 8;x軸方向の速度を記述してください
y = 0;y軸方向の速度を記述してください

または

[State ***, 移動速度]
type = VelAdd;ステートコントローラーです
trigger1 = AnimElem = 4;トリガーです。
x = 8;x軸方向の速度を記述してください
y = 0;y軸方向の速度を記述してください

この二つの違いは、VelSetは記述された速度にするのに対し、
VelAddは記述された速度を追加します。
例えば、X軸方向に3の速度で動いているステートに、
上記のVelSetがあれば速度はX軸方向に8となりますが、
上記のVelAddがある場合X軸方向に11となります。
~Setと~Addというステートは他にもありますが、似たような意味です。

このようなステートコントローラーを使用してステートを作って行きます。



ステートが出来たら、次はCMDにコマンドを追加して行きます。
コマンドは基本的には[Statedef -1]に追加します。
複雑なコマンドほど上のほうに追加するようにしてください。

コマンドの例はこんな感じです。
[State -1, 立ち弱]
type = ChangeState
value = 200
triggerall = command = "x"
triggerall = command != "holddown"
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = stateno = 200
trigger2 = movecontact
ステートを終了するときと同様にChangeStateを使 用します。

また新しいトリガーが登場してますので簡単に説明します。
command; どのようなコマンドが入力されたか、という意味です。コマンドの定義はCMDファイルの上のほうで行います。
ctrl; 今いるステートのctrlが1の時、と言う意味です。
statetype;ステートの状態を指定します。StatedefのTypeと同じ意味です。
movecontact; 攻撃がヒットした時、もしくはガードされた時、という意味です。
似たような物としては以下のようなものがあります。
movehit; 攻撃がヒットした時という意味です。
moveguarded; 攻撃がガードされた時という意味です。
movereversed;ReversalDefを食らった時という意味です。

このように攻撃をつくっていきます。
立ち中、立ち強も同様に作ってください。




ここからは簡単にしゃがみ攻撃と空中攻撃のテンプレートを載せます。
立ち攻撃と同様に作ってください。


しゃがみ通常攻撃テンプレ

立ち攻撃との違いは、立ちの場合SになっていたところがCになっているのと
Chagestateで移動するステートが11(しゃがみステート)になっているところです。
Changestateで移動するステートは自然に見えるステートであれば11でなくてもかまいません。



空中通常攻撃テンプレ

次に空中技のテンプレートです。
先ほどの2つと比べて見てください。
Chagestateがありませんよね?
これは
type = Aのときには、地面に接触(Pos Y=0)になると
自 動的に着地ステート(ステート52)に移行するという仕様
だからです。

これらのテンプレートを元に通常動作を完成させてください。
完成したら今回の講座は終了です。


今回からは問題と称しましてちょっとしたステートの作りかたを皆様に考えてもらいます。
問題を解くためのヒントはすべて問題が出るまでの講座に存在します。
答えをすぐ下に載せておきますので、
問題を解くのが嫌だという方は答えをご覧になってください。
また、答えは一例です。載せた答え以外にも方法がある場合がありますのでご容赦ください。






問 題1
問題1素材
格闘ゲームではたまに、同じコマンドを入力しても、敵との距離によって出る技が違う、なんてことがあります。
ちゅるやさんもそれにならってそんな技(ステート215)を追加したいと思います。

y ボタンを押したとき、敵とのx軸上の距離が近い場合ステート215が、
遠 い場合ステート210がでるようにするにはどうすればいいか答えなさい。
ど のくらいの距離がいいかは各々調整してください。


答え




問 題2
問題2素材
格闘ゲームではたまに、同じコマンドを入力しても、直前の動作によって出る技が違う、なんてこともあります。
ちゅるやさんもそれにならってそんな技(ステート230)を追加したいと思います。

前 ダッシュ(ステート100)の状態で、zボタンを押したときにステート 230が出るようにするにはどうすればいいか答えなさい。

答え







では、問題を解き終わった方から次の講座に進んでください。



参 考文献
ク リエイターズ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

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