2D格闘ツクール2nd 完全攻略

■ チュートリアル


■ コマンド解説


■ テクニック解説
 001 特殊なキャラクターセレクト
 002 画面レイアウト
 003 カラーセレクトの設定
 004 ヒットエフェクトの研究
 005 ヒットエフェクトの描き方
 006 スクリプト一覧のテキスト化
 007 通常立ちの設定
 008 VSで開始位置指定
 009 雛型キャラの作成
 010 INIファイルの内容
 011 変数の大小チェック
 012 当て身投げの作り方
 013 必殺技コマンドの設定
 014 アニメ作成_通常攻撃
 015 ゲームモードによる分岐
 016 変数の一覧を記録
 017 受け身入力の判定
 018 ダウン値による分岐処理
 019 飛び道具の作成
 020 ワープ技の作成
 021 ヒット硬直のコントロール
 022 ステージの地面表現
 023 ヒット数表示の固定
 024 横方向のホーミング攻撃
 025 1P/2Pの判別
 026 ライフ減少アニメ
 027 画面下部の表示内容
 028 ステータス表示の意味
 029 ガードクラッシュの表現
 030 押せないOBJ
 031 アイテムのあるゲーム
 032 復活する技の作成
 033 空ガードの作成
 034 ステージ選択付きキャラセレ
 035 ゲージMAXの表示
 036 固定ダメージを表現する
 037 ラン動作の作成
 038 投げ技によるKOの作成
 039 ボタン溜め押し技の作成
 040 中段攻撃の作り方
 041 製作に役立つツール
 042 カラーセレクトに適した画像
 043 相手によって動作変更
 044 横幅のあるキャラを表現
 045 ラウンド限定の動作
 046 影色の塗りを効率化
 047 モードを切り替えるキャラ
 048 当たり判定設定のコツ
 049 空中ジャンプを表現する
 050 キャラの向きを判別する
 051 途中でKOしない乱舞技
 052 カウンターヒットの作成
 053 OBJの動作を停止
 054 ハイジャンプの作成


■ バグ・よくあるミス


■ テスト時のチェック項目


■ 解説用データ ダウンロード


023

ヒット数表示の固定

※追記(2012年7月30日)

2D格闘ツクールには攻撃が連続ヒットした際に
そのヒット数を表示する機能があります。

非常に簡単な設定でヒット数の処理が組めて便利ですが、
その半面、表示位置を細かくコントロールすることは難しいです。

このページでは、ヒット数表示をコントロールする例として
ヒット数の表示位置固定 について説明していきたいと思います。



作成内容の確認

まずは、これから作成する内容について確認しておきます。

通常のヒット数表示 です。

攻撃がヒットした場所にヒット数の表示が発生、しばらくして消滅します。
動きとしてはヒットエフェクトの表示に近いです。
( ただし、一般的なオブジェクトとは別扱いのようでPAUSE中も関係なく一定時間経過後に表示が消える )


以下は、 今回作成するヒット数表示 のイメージです。

1P2P両方に「Hit!」の表示が有ります。
実際には 0 〜 1ヒット の表示を行うことはありませんが、
内部的には画面内の決まった位置にずっとヒット数表示が出ていると考えてください。

 ヒット数が増えてきたら表示されるヒット数も増えるし、
 コンボが途切れてヒット数がリセットされれば表示もリセットされる
 という感じで、常にヒット数の監視と表示更新を行います。

MEMO

ヒット数を常駐表示する利点
2D格闘ツクール標準のヒット数表示では、
のけぞり時間の長さに関係なくヒット数の表示時間は共通です。

一方、これから作成する表示処理では
コンボが途切れるまで表示が消えることはないため、
コンボが継続しているかどうかをヒット数表示から判断しやすいです。

特に、動作が遅いキャラのコンボを表現する際に
その違いが出やすいかと思います。
攻撃速度は遅いが、攻撃ヒット時の のけぞり時間も長い。
そんな大振りなコンボを表現するのに適している、
というとイメージしやすいかもしれません。


大まかな流れの確認

ヒット数表示を固定する方法として最初に思いつくのが
「標準のヒット表示を特定の位置までずらす」 というものです。
しかし、ヒット数が複数のパーツで構成されている関係で
この方法ではうまく表示位置を指定することができません。
( 数字が桁ごとに表示されているので、位置コントロールなどが難しい )


ではどうするのかと言うと…
自力でヒット数のカウント及び表示の処理を組みます。
このページでは、2D格闘ツクール標準のヒット数表示の仕組みをなぞるようにして
独自のヒット数表示システムを組んでいく過程を説明していきます。

なお、一度に全ての仕組みを作ろうとすると失敗しやすいので
ここでは いくつかのステップに分けて説明を進めていきます。

大まかな流れは以下の通り。
1. ヒット数表示のパーツ構成を考える

2. 変数値を画面内に表示する

3. 1〜2の処理をテストプレーで確認

4. ヒット数のカウント

5. ヒット数表示処理をテストプレーで確認

※上記一覧には、対応する箇所へのリンクを貼ってあります。

内容的には 1〜2 あたりが非常に長く、 3 以降の説明は短いです。
ただ、設定自体は 4 も長くかかる可能性が高いです。

 ヒット数カウントのルール決めをすることになるので、
 キャラの動作が多かったり、こだわるといくらでも時間がかかります。




1. ヒット数表示のパーツ構成を考える

独自のヒット数表示処理を組む前に、
2D格闘ツクール標準のヒット数表示処理について軽く確認しておきます。
( 今回は標準処理を参考にして処理を組んでいくので、ここは非常に大切です )

ヒット数表示は以下のように幾つかのパーツによって構成されています。

( 詳しくは、チュートリアル030 ヒット数の表示 を参照してください )

これから組む独自処理も同じ構成で作ります。
以下は、今回使用するヒット数表示グラフィックになります。
( 後で標準のヒット数表示と比較するため、既存のヒット数表示とは別のグラフィックを用意しました )

※ゲーム用BMPは上記画像のリンク先にて提供しております。

ヒット数の表示位置が固定の場合、キャラの位置関係によっては
表示の邪魔となるので少し小さめの画像にしてあります。

もうひとつ、非表示処理用に透明画像を用意しておきます。

※ゲーム用BMPは上記画像のリンク先にて提供しております。

なお、画像を読み込む際はエフェクトなどと同じように専用パレットモードで登録してください。
ヒット数表示というとシステム寄りな感じがしますが、
今回はキャラのスクリプト内に画像を登録するので注意してください。
( 共通パレットにすると、キャラ同様にカラー変更の対象となるので注意してください )



2. 変数値を画面内に表示する

1で説明したパーツ構成を基にして、変数の値を表示する仕組みを組みます。
なお、今回はヒット数表示のことを考えて 2桁の変数値まで表示する処理を組みます。


上図では3つのパーツを使っているので、それぞれに対応した行を作成します。
( ヒット数字部分は桁ごとに別パーツとしてカウント )

「キャラクタ」-「技」に移動してください。

ここでは、 「ヒット数文字」 「ヒット数_10の位」 「ヒット数_1の位」
という3行を用意しました。
以下、設定するスクリプトの内容です。

なお、今回の説明ではヒット数のカウント用に キャラ変数D を使っています。

スクリプト解説

「ヒット数文字」
「 Hit! 」 と表示する文字の部分になります。
番号 命令 設定内容
1 キャラ変数Dが 1以上だったら 4
2 透明画像 WAIT = 5
3 0
4 ヒット文字のグラフィック WAIT = 5、 中心軸 0, 0
7 0

※表中の「0へ」は、「スクリプト行の先頭へ戻る」という意味になります。

後の2つに比べるとシンプルです。
唯一の条件判定として、
「ヒット数のカウントが1より大きいか?」 をチェックしています。
( 日本語的には変ですが、 エディタ上では「1以上だったら」という設定になります )

 ヒット数の表示を行うのは2連続以上ヒットした時なので、
 カウントが1より大きいかどうかを見ています。
 ヒット数のカウントが 0〜1 の場合はヒット文字を表示しません。

なお、表中では触れませんでしたが
数字や文字などのグラフィックを配置する際は
「キャラクターの向きを無視」オプションをONにしておいてください。
 ヒット数表示の処理は1P/2Pの両方で行うため、そのまま配置すると
 キャラグラフィック同様に2P側で左右反転してしまいます。
これについては、以下に続くスクリプトを作成する際も同様です。


------------------------------------------------------------
「ヒット数_10の位」
番号 命令 設定内容
1 キャラ変数Dが90以下だったら 4
2 「ヒット数字9」 のグラフィック WAIT = 5、 中心軸 0, 0
3 0
4 キャラ変数Dが80以下だったら 7
5 「ヒット数字8」 のグラフィック WAIT = 5、 中心軸 0, 0
6 0
7 〜 24  …  1〜34〜6 のような処理をヒット数字の種類だけ並べる
25 キャラ変数Dが10以下だったら 28
26 「ヒット数字1」 のグラフィック WAIT = 5、 中心軸 0, 0
27 0
28 透明画像 WAIT = 5
29 0

※上記表では、繰り返し部分のスクリプト(7 〜 24ブロック)について省略しています

上の「ヒット数文字」に並べると若干長いですが、
ほとんどは似たような処理の繰り返しなのでスクリプトの難易度はそれほど高く有りません。
スクリプトを組む際は、表中で色分けした部分を1つの分岐パターン・セットとして
見ていくとわかりやすいかと思います。

また、画像の座標設定について…
上記例では全てデフォルト値である ( 0, 0) にしてありますが
ここで画像が中心軸の右下に来るよう配置しておくと、
後でヒット数表示用パーツを画面内に置く際に位置調整が楽になります。


MEMO

条件分岐の並べ方
厳しい条件から緩い条件へ、
という順番で判定している点に注意してください。
例えば、以下のような条件分岐が並んでいる場合
1. 90以上なら…
2. 80以上なら…


1がNoで2がYesの時、変数の値は 80 〜 89 の間と考えることができます。
( 90以上ではないが80以上である、という考え方 )


------------------------------------------------------------
「ヒット数_1の位」
後半部分は上記 「ヒット数_10の位」 と似たようなスクリプトになるので、
コピー&ペーストでスクリプトを複製すると効率的に作業できます。
※ただし、分岐の数値条件やスクリプト移動先などは異なるので間違えないよう注意してください。
番号 命令 設定内容
1 キャラ変数Dが2以下だったら 34
2 タスク変数Aにキャラ変数Dを代入、値が10以下なら 5
3 タスク変数Aを-10、結果が10以下だったら 5
4 3
5 タスク変数Aが9以下だったら 8
6 「ヒット数字9」 のグラフィック WAIT = 5、 中心軸 0, 0
7 0
8 タスク変数Aが8以下だったら 11
9 「ヒット数字8」 のグラフィック WAIT = 5、 中心軸 0, 0
10 0
11 〜 28  … 5〜78〜10 のような処理をヒット数字の種類だけ並べる
29 タスク変数Aが1以下だったら 32
30 「ヒット数字1」 のグラフィック WAIT = 5、 中心軸 0, 0
31 0
32 「ヒット数字0」 のグラフィック WAIT = 5、 中心軸 0, 0
33 0
34 透明画像 WAIT = 5
35 0

※「ヒット数字_10の位」スクリプト同様、一部処理を省略しています。(前後の処理から読み取るようにしてください)

少々ややこしいスクリプト構成になっていますが、順を追って説明していきます。

1ブロック目では、まず「ヒット数の表示をすべきかどうか?」の分岐を行っています。
ここでヒット数が 0 〜 1 であった場合、34ブロック目の透明画像を表示することになります。

スクリプト前半、2 〜 4ブロック目では 画像表示の条件判定に入る前に
「ヒット数の1の位を取得する」 という処理を行っています。
また、ヒット数カウント用の変数そのものを加工するわけにはいかないので
( 2ブロック目にて ) ヒット数カウントのコピーをタスク変数に持たせている点に注目してください。

3 〜 4ブロック目のループでは
「取得した変数値が10よりも小さくなるまで -10していく」
という処理を繰り返すことで、ヒット数の1の位を取得しています。

 例えば、変数の値が33の場合は以下のような動きになります。
 33 - 10 = 23、 23 > 10なので処理続行
 23 - 10 = 13、 13 > 10なので処理続行
 13 - 10 = 3、  3 < 10なので処理完了、残った値は 3


5ブロック目以降では、そうして得られた1の位を基準として
「ヒット数_10の位」と同じような条件分岐を行っています。
※条件分岐の判定に、キャラ変数Dではなくタスク変数Aを使っている点に注意。

ちなみに、ここでは99ヒットを超えるヒット数表示…
カウンターストップについては考えていません。
( 恐らく、 99を表示した後 再び90〜98の表示を繰り返す…という動きになります )
どうしても気になる場合は「ヒット数が99以上の時はずっと9を表示する」
という分岐を追加してください。

MEMO

ヒット表示の表示更新間隔
上記スクリプトでは、各行ともラウンド終了まで表示更新を繰り返すために
ループ構造を組んである、という点に注意してください。
なお、表示更新の速度はヒット表示関連の画像WAIT値によって決まります。
( 画像表示の長さがそのままループ処理の待機時間 = ウェイトとなるため )

WAIT値が長すぎる場合、
間隔の短い連続ヒットが出た際にヒット数の表示更新が遅れやすいです。
一方、WAIT値が短すぎる場合は
コンボが途切れた際、すぐにヒット数の表示が消えてしまいます。

このあたりは、テストプレーを繰り返してうまく調整してください。
 後者の問題を回避する方法としては、
 「ヒット数をリセットするタイミングを遅めにする」 というのも有りです。



------------------------------------------------------------
ヒット数表示のパーツが揃ったので、次はこれを呼び出す処理を追加します。

スクリプト一覧から「開始時」行に移動してください。

※上記例だと、現時点で既にいくつかの命令が並んでいますが特に問題はありません。
 行の先頭に処理を追加すると、既存処理と干渉しにくいです。


行の先頭にオブジェクト発生命令を追加するのですが、
その前に1P/2Pの区別を変数で取得しておいてください。
( 1P/2Pの判別について詳しくは、テクニック025 1P/2Pの判別 を参照してください )

なお、以下スクリプトでは キャラ変数F を1P/2Pの区別用に使用しています。

スクリプト解説

番号 命令 設定内容
1 開始時のグラフィック WAIT = 3
2 キャラ変数Fが1なら 7
3 「ヒット数文字」を 画面座標( 580, 150) に発生
4 「ヒット数_10の位」を 画面座標( 460, 150) に発生
5 「ヒット数_1の位」を 画面座標( 500, 150) に発生
6 10
7 「ヒット数文字」を 画面座標( 140, 150) に発生
8 「ヒット数_10の位」を 画面座標( 20, 150) に発生
9 「ヒット数_1の位」を 画面座標( 60, 150) に発生
10〜   通常の開始時スクリプト


1ブロック目では、WAIT = 3 の画像を表示しています。
これは、1P/2Pの判別・変数取得を待つための待機時間だと考えてください。

MEMO

1P/2P判別のタイミング合わせ
はっきりしたことは言えませんが、ストーリーモードでは
対戦モードよりも1P/2Pの判別にやや時間がかかるようです。

もしストーリーモードその他で判別がうまく出来ていない場合は、
判別処理を待つための待機時間を長めに変えると良いかもしれません。

 具体的には、判別用キャラ変数を使う手前で
 ある程度のWAITを持った画像呼出命令を置くと良いです。

2ブロック目では、自キャラが1Pか2Pかによってヒット数の表示位置を変えています。
ここでは、以下のようなルールに従って分岐処理を行っています。
キャラ変数が0 = 1Pである( 3〜5ブロック目を実行 )
キャラ変数が1 = 2Pである( 7〜9ブロック目を実行 )


ここで注意しておいて欲しいのが、
自分が1Pの場合は2P側に、
自分が2Pの場合は1P側にヒット数を出している点です。


話がややこしくなるので説明を後回しにしていましたが、
自キャラ側でカウント、表示するヒット数は
「自キャラが連続攻撃を当てた数」ではなく、
「自キャラが連続攻撃を受けた数」
つまり、お互いに相手側のヒット数表示を行ってあげる形になります。
( 攻撃している側よりも攻撃されている側の方がヒット数をカウントしやすいため )

 なお、ヒット数カウント用に使っているキャラ変数は
 1P側と2P側で別々の扱いとなるため、
 お互いのヒット数カウントがごちゃ混ぜになることは有りません。

各パーツを画面内に配置する
各パーツのオブジェクト発生座標については、以下の図を参考にしてください。

パーツを個別に呼び出しているため、少々わかりにくいかもしれませんが
位置調整のコツはヒット数表示関連の画像サイズを把握しておくことです。
 実際、計算だけで思ったとおりの表示内容にするのは難しいので
 テストプレーを繰り返して調整を行うことになるでしょう。

これでヒット数表示の処理を画面内に呼び出すことが出来ました。
このままヒット数のカウント処理まで組むことも出来ますが、
色々と複雑な処理を設定したので 一旦ここで 「変数の値表示」 を確認しておきます。

------------------------------------------------------------
テスト用変数処理の追加
テスト用に、変数の値を定期的に加算する処理を追加します。
( あくまでテスト用なので、ここで追加する処理は後でカットします )

「ステージフェイス」行に移動してください。

上記スクリプトを見ると、行内に画像呼出ブロックが設置されています。

 まだ画像呼出ブロックを置いていない場合は、なんらかの画像をセットしておいてください。
 手ごろな画像が無い場合は以下の画像をお使いください。
 
 ※ゲーム用BMPは上記画像のリンク先にて提供しております。

画像呼出ブロックの手前に、変数分岐命令を追加してください。

※命令追加後は、既存命令のスクリプト移動先指定などにずれがないか 調べておくことをお勧めします。

設定内容は以下の通り。

ヒット数カウント用の キャラ変数D を+1しています。


画像のWAIT値を変更
変数処理の設定が済んだら、画像呼出ブロックを選択してください。

例では、画像のWAIT値が 10 になっていますが
ここを若干長めの 30 に変えておきます。

「ステージフェイス」行はデフォルトでループ処理を行うようになっています。
行を1ループ完了するためには画像の表示終了を待つ必要があるため、
「ステージフェイス」行に置いた画像のWAIT値が
そのまま行をループする際の待機時間となります。
( 上記の設定内容だと、30フレームごとに変数値が+1されることになります )
なお、ステージフェイスに複数枚の画像を置いている場合は
うまく長さを調節して合計でWAITが 30 程度になるよう調節すると良いです。
※あくまでテスト用の設定なので、WAIT値自体はあまり気にする必要は無いです。

変数加算の設定が済んだら、テストプレーを実行してみましょう。



3. テストプレーで1〜2の処理を確認

長々と設定を行いましたが、ここでテストプレーを実行します。

1P、2Pともに今回スクリプトを編集したキャラにしておきます。
また、「プレイ方法」「戦闘から開始」を選んでください。

ゲーム開始。

開始直後、画面には何も表示されていませんが…

左右に「2Hit!」と表示されました。

どんどん数字の表示が大きくなっていきます。
なお、値が99になると それ以降は90 〜 99の表示を繰り返すようになります。
 変数自体は100以上の値に増えていくが、
 変数表示の仕組みは99までしか設定していないため。
 ( ちなみに、3桁以上の変数表示もそれほど難しくはないです )

以上の動きが確認できたらテスト成功です。
テスト用に追加した処理をカットして次のステップに進んでください。



4. ヒット数のカウント

いよいよヒット数のカウント処理に入ります。
スクリプト編集の前に、ヒット数カウントのルールを確認しておきましょう。

 自分でルールを作るので、非常に凝ったカウントルールを組むこともできますが
 今回は2D格闘ツクール標準のヒット数カウントルールに倣って処理を組みます。


2D格闘ツクールでのヒット数カウントルール
<1> 攻撃がヒットした時、カウントを+1

<2> やられ動作が完了するまでに追撃が入らない場合、
   カウントをリセット( 0にする )


MEMO

カウントリセットの条件詳細
<2>についてですが、正確には
「やられ動作が完了して、各種ニュートラルポーズを通ったら」
がカウントをリセットする条件と言えそうです。
( ニュートラルポーズ = 「通常立ち」や「しゃがみ」などの各種待機動作 )

例えば…
各種やられ動作からコマンド入力で受け身・緊急脱出を行った場合、
キャラはニュートラル動作を通っていないので
ヒット数のカウントリセットは行われません。
そのため、この状態で引き続き攻撃を受けた時、ヒット数のカウントは
さっき受けていたコンボの続きという扱いになります。


------------------------------------------------------------
カウントのルール確認が済んだら、実際に処理を組んでいきます。

<1> 攻撃がヒットした時、カウントを+1
このルールに合わせて、各種やられ動作の先頭に以下の変数分岐命令を追加します。


例では、「ヒット弱 立ち」というやられ動作の先頭に変数加算の命令を追加しました。



<2> やられ動作が完了するまでに追撃が入らない場合、カウントをリセット
各種ニュートラル動作の先頭に以下の変数分岐命令を追加します。

例では、「通常立ち」動作の先頭にスクリプトを追加しています。

その他…「この動作を通った時は必ずコンボを途切れさせる」
という動作があれば、そこにもカウントのリセットを追加してください。
 例としては、各種「ダウン動作」や「立ち上がり動作」など。
 ただし、やりすぎると「ダウンした瞬間にヒット数表示が消える」などの
 問題が発生するので気をつけてください。


ページ前半で述べた通り、やられ動作のパターン数が多いとヒット数のカウントも厄介です。
カウントに抜けがないよう念入りにチェックしてください。



5. ヒット数表示処理をテストプレーで確認

ヒット数カウントの設定が済んだら、テストプレーで処理を確認してみます。

 なお、今回は1P側/2P側それぞれの処理を確認したいので
 2Pの動作を「プレーヤーが操作」にしてスタートします。

1P側が相手に連続ヒットを当てました。

この時、画面上部を見ると1P側にヒット数が表示されています。

また、2D格闘ツクール標準のヒット数表示と比べてみても、
同じ値が表示されていることがわかります。
※ここで両者のラグが目立つ場合は、上で説明した表示更新間隔を短めに変更すると良いです。

ちなみに、今回作成したヒット数表示はオブジェクトなので
ゲームをPAUSEした際は、きっちり表示が止まります。
( 標準のヒット数表示だと、PAUSEしていても関係なしに一定時間で消滅していたことを思い出してください )


一定時間経ってから、再び連続ヒットを当てると
ヒット数のカウントがリセットされていることがわかります。
( カウントが0からスタートします )

MEMO

ヒット数カウントの比較
今回のように、2D格闘ツクール標準のカウントルールに合わせる場合は
テストプレー時にシステム標準のヒット数も表示しておくと
カウントのずれがないか確認しやすいので便利です。


続いて、今度は2P側のキャラを操作してみます。

2Pが1P側に対してコンボを成功させています。
画面上部では、2P側にコンボ数が表示されています。

以上の結果から、
独自のヒット数表示処理が正しく動作していることが確認できました。
今回は簡単な確認だけで済ませましたが、色々なコンボを行って
ヒット数のカウントに不自然な点がないか確認すると良いでしょう。



まとめ

非常に長い説明となりましたが、処理の考え方・組み方がある程度つかめたでしょうか。
違う処理内容を表現する際も「考え方」自体は応用できると思うのでうまく役立ててください。

 今回は説明のしやすさから、ヒット数表示のアニメーションを省略しましたが
 このあたりもお好みで追加すると良いでしょう。


以上で、「ヒット数表示の固定」に関する説明を終えます。
なお、今回説明した内容について 何かご不明な点、詳しく聞きたい部分があれば
掲示板 にて質問を受け付けておりますので、気軽にお尋ねください。

トップページへもどる

inserted by FC2 system