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 ハイジャンプの作成


■ バグ・よくあるミス


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


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


018

コンボが途切れない

2D格闘ツクールにはヒット数表示の仕組みがあります。

連続ヒットした時にそのヒット数を表示してくれるのですが、
スクリプトの組み方によっては一見コンボがつながっていないように見えても
連続ヒット扱いになってヒット数のカウンターが回ることがあります。

今回はこのコンボが途切れない問題について、その原因と対策を説明したいと思います。


発生状況別の原因と対策 -目次-
ここから先では、発生状況別に
コンボが途切れない問題の原因と対策を説明したいと思います。

1.立ち状態にてコンボが途切れない
2.空中受け身にてコンボが途切れない
3.1〜2以外の理由でコンボが途切れない
※上記一覧にはページ内リンクをセットしてあります。


1. 立ち状態にてコンボが途切れない
コンボが途切れない問題の基本形として、まずは
地上・立ち状態でのバグ・よくあるミスについて解説したいと思います。

------------------------------------------------------------
現状確認
最初に、問題の内容を確認しておきましょう。

1P側の攻撃が2Pに連続ヒットしています。

やられ動作のヒットバックによって両者の間合いに一定の距離があきます。

この時、1P側は攻撃が届かなくなるので一旦コンボは途切れます。
2P側を見ると、やられ動作が終わって通常立ちのポーズに戻っています。

少しの間を置いて再び1P側の攻撃がヒット、2P側はやられ状態になります。

画面を見ると、なぜかさっきまでのコンボの続きとしてヒット数がカウントされます。

------------------------------------------------------------
原因
まず、覚えておいて欲しいルールが1つ。
2D格闘ツクールでは、

やられ側のキャラが通常立ちやしゃがみ、空中落下など

各種待機状態になった時にヒット数のカウントがリセットされ、

コンボが途切れたという扱いになる。


説明書に書かれているわけではありませんが、
一応実験を通して確認したルールなので間違いは無いと思います。
( これについてはヒット数表示固定のページでも述べています )

上記ルールに従えば
通常立ちのモーションに入った時点でコンボは途切れるのですが、
以下のようなスクリプトを組んでいた場合はこの条件が成立しません。

やられ動作


スクリプトのラストにて、通常立ちへスクリプト移動している点に注目してください。
先ほど「通常立ち」のモーションに入れば〜 のルールについて説明しましたが、
スクリプト移動命令を経由して通常立ちに移行した場合 は異なる解釈になります。

このスクリプトだと、やられ動作本体 〜 通常立ちの動作
が一連のやられ動作として扱われます。
( 通常立ちの部分はポーズを変えたやられ動作、という扱い )

当然ながら、動作中はコンボも継続カウントされます。
なお、この条件は通常立ちの動作が1ループ完了した時点で解除されます。

------------------------------------------------------------
対策
ここでもう1つ、ルールを紹介しておきます。
キャラを各種動作から通常立ちやしゃがみなど

待機ポーズに移行させたい場合は

スクリプト移動系の命令ではなく 終了命令 を使う。

 実際に試してみるとわかりますが、スクリプト移動で通常立ちに移動した場合、
 通常立ちの動作が1ループ完了するまで移動できなくなります。

立ち状態 にて動作終了した場合は 通常立ち に。

しゃがみ状態 にて動作終了した場合は しゃがみ に。

空中状態 にて動作終了した場合は 空中落下 に。


状態に合わせて待機モーションへ移行します。


今回発生した問題を修正するには、スクリプトラストにあった
スクリプト移動命令を終了命令に変更すると良いです。

終了命令は必須ではありませんが、
無用なトラブルを避けるため置いておいた方が良いでしょう。


2.空中受身にてコンボが途切れない
別のページでも紹介した通り、2D格闘ツクールでは受け身の動作を組むことが出来ます。
ただし、スクリプトの組み方に気をつけないと
受け身動作をとったのにヒット数のカウントがリセットされない
という問題が発生します。

------------------------------------------------------------
現状の確認
1Pの攻撃が連続ヒット、2P側は空中でやられ状態になっています。

ここで2P側は空中受け身の動作をとります。

一方、1P側は次の攻撃を当てる準備をしています。

再び1P側の攻撃がヒットします。

2P側は再びやられ状態になります。
ここでヒット数の表示を見てみると、さっきのコンボが継続しているという扱いになっています。

------------------------------------------------------------
原因
今回の場合もスクリプトの組み方を見直す必要が有ります。
以下は 空中やられ 〜 空中受身 のスクリプトになります。

空中やられ

行のラスト付近にコマンド入力分岐を置いて受身の入力をチェックしています。

 受身動作の発生を早くしたい場合は、受付時間を短くしたコマンド分岐命令複数個を
 画像表示命令の間に挟むように配置すると良いです。


空中受身

空中受身用グラフィック

※上記画像はPNG形式となっています。
 ゲーム内に読み込む際はBMP形式に変換してください。


番号 命令 設定内容
1 キャンセル不可
2 自分停止 2、 相手停止 3
3 管理番号0、 ぶつかり判定のみ
4 管理番号1、 判定無し
5 移動X - .40、 重力Y .10
6 滑らかフェード 自分側、持続4、青白く光らせる
7 1枚目、WAIT=10、中心軸 -9, 0
8 滑らかフェード 自分側、持続18、初期値へ
9 1枚目、WAIT=2、中心軸 1, 0
10 移動X .67、 移動Y -6.24、 重力X -.01、 重力Y .43
11 2枚目、WAIT=4、中心軸 17, 0
12 3枚目、WAIT=4、中心軸 -10, 0
13 4枚目、WAIT=8、中心軸 4, -5
14 5枚目、WAIT=8、中心軸 7, -5
15 管理番号0、 ぶつかり判定 と やられ判定ON
16 管理番号1、 やられ判定ON
17 6枚目、WAIT=8、中心軸 5, 0
18 7枚目、WAIT=7、中心軸 2, 0
19 8枚目、WAIT=0、中心軸 -2, 0
20  

ちょっと変わった仕様ですが、ここでは
無敵時間が限られている受身動作 を例として説明します。
14番目まで無敵で、15ブロック目以降で無敵を解除している点に注目してください。

作者の側では
やられ動作を強制終了して受身動作に移行させた つもりでも、
スクリプト側の解釈では、

 やられの動作中にコマンド入力によって
 キャラのポーズを空中受身に変えた。
 ただし、やられ状態自体は継続している。


という扱いになります。

 格闘ツクールで処理を作成する際は、
 見た目上の動きと内部的な動きをきっちり区別するようにしてください。


上の方でも述べた通り、コンボを終わらせるためには
空中での待機状態、つまり空中落下にする必要があります。


------------------------------------------------------------
対策
再び空中受身のスクリプトを見てみると、
ラスト部分でWAIT = 0( 無限 )の画像を置いていることがわかります。

このままでは 着地するまで空中受身が終わらない = コンボが途切れない
ので、画像のWAITを有限の短い値に変更しておきます。


MEMO

受身のシステムとヒット数のカウント
空中での受身動作は、
その性質によっていくつかのタイプに分類することが出来ます。

ここでは、受身をとったらヒット数のカウントはリセットする という
ルールを実現するためのコツをタイプ別に分けて載せておきたいと思います。
※受身動作の仕様がはっきり決まっている場合は読み飛ばしても問題ありません。

------------------------------------------------------------
無敵時間が有限の受身
空中受身の瞬間のみ無敵で、その後の落下中は無敵ではない
というタイプ。
※今回の説明では、このタイプを例としています。

受身動作の途中で無敵状態を解除するとヒット数は継続カウントになります。
継続カウントにしたくない場合は、
受身動作を早めに終わらせて空中落下に移行してください。
( 空中落下に入った時に無敵時間が終わる、というルール )

 受身動作の途中で無敵時間を解除する、という組み方だと
 ヒット数のカウントはリセットされないので注意。

------------------------------------------------------------
着地するまで無敵の受身
空中受身をとったらキャラが着地するまでずっと無敵、というタイプ。
空中落下に入ると無敵ではなくなってしまうので、
着地する瞬間まで空中受身動作のままで行きます。
( 受身動作のWAITを無限にしておく )
この場合、空中落下を通らないのでヒット数のカウントはリセットされません。
リセットされるのは、着地して通常立ちに入った時。
妨害されること無く通常立ち動作に
移行できるよう無敵の着地などを用意すると良いです。

------------------------------------------------------------
反撃可能な受身動作
回避・脱出専用の受身ではなく、
空中状態からそのまま相手に反撃可能なタイプ。
通常の受身よりも前方面寄りに飛ぶパターンが多いです。

これも無敵時間の長さによって組み方が違ってきます。
無敵時間が有限の場合、
早めに受身動作を終わらせて空中落下状態に入るようにします。

無敵時間に制限が無い場合、受身動作のWAIT値を無限にします。
これだとやられ動作の延長上なので、キャンセルが効きません。
反撃の動作に分岐させたい場合は、別途
コマンド入力分岐命令を複数並べるようにしてください。

 画像1枚を表示するたびに分岐チェックするように組むと
 受身からの反撃がスムーズに出るようになります。
 ( これはやられから受身への分岐についても同様 )

受身のシステムをどういう仕様にするか、ゲームバランスも含めて
十分に考えてスクリプトを組むようにしてください。


3. 1〜2以外の理由でコンボが途切れない
詳しい原因は不明ですが、1〜2とは別の理由で
コンボが途切れないというパターンもあります。
例えば、次のようなパターン。

------------------------------------------------------------
現状の確認
※以下は問題発生状況を再現したイメージです。
1P側の攻撃が連続ヒット、2Pはやられ状態にあります。

この時、2P側は前方向にキー入力しています。

ここで1Pの攻撃が一時的に止み、2Pは前歩き動作に入ります。


直後、再び1P側の攻撃が当たります。

この時、ヒット数の表示を見るとさっきまでのコンボが継続している扱いになっています。

攻撃を受ける側が方向入力しているとコンボのカウントが途切れなくなる
というパターンです。
上方向入力( ジャンプ動作 )の場合も同様の結果になります。

------------------------------------------------------------
原因
はっきりし原因はわかりませんが、
通常立ちなど待機モーションに入ることでカウントがリセット
の条件を満たせていないのだと予想します。

また、この問題は必ず起こるわけではなく
何らかの条件が重なった時に発生するようです。
( 今の所、私の環境では確認できず )

------------------------------------------------------------
対策
この問題が起きた場合、完全に防ぐことは難しいかもしれませんが、
発生しにくいよう工夫することは出来ます。
ここではその方法と考え方について紹介したいと思います。

考え方
前歩きの動作中に方向キーの入力を外すと自動的に通常立ち動作に移行します。
ただし、この流れだとコンボのカウントがリセットされません。
そこで、
方向キーの入力が無ければ
実行中の移動系動作を強制的に終了して通常立ち動作へ移る

という処理を組みます。

スクリプトの組み方
ここでは2つの処理を並行して動かすことで方向キーのチェック機能を実現します。
A.方向キーの入力が有るかどうかを変数によって記録するOBJ

B.各種移動系動作にて変数の値をチェック、
 方向キーの入力が無いならすぐさま動作を終了する


順番に説明していきましょう。

A.方向キーの入力が有るかどうかを変数によって記録するOBJ
OBJはラウンド開始から終了までチェックのループを繰り返します。
チェック用のOBJ本体

番号 命令 設定内容
1 前方面への入力があるなら、6へ
2 後方面への入力があるなら、6へ
3 上方面への入力があるなら、6へ
4 下方面への入力があるなら、6へ
5 キャラ変数I = 0代入、 変数I=0なら「キー入力OBJ」へ
6 キャラ変数I = 10代入、 変数I=10なら「キー入力OBJ」へ
7 透明画像、WAIT=2

方向キーの入力がある場合、変数値 = 10
入力がない場合、変数値 = 0とします。

画像を表示する必要は無いので透明画像などを置いておくと良いでしょう。

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

画像のWAIT値を小さくしておくと、
より正確にキーの入力状態を記録することが出来ます。
( 変数をチェックする間隔が短くなるため )

開始時
ラウンド開始時からチェックスタート、としたいので
キャラの「開始時」スクリプトにてOBJ発生命令をセットします。

設定内容は上記画像の通りです。


B.各種移動系動作にて変数の値をチェック、
 方向キーの入力が無いならすぐさま動作を終了する

スクリプト先頭にて変数をチェック、値が0( 方向キーの入力無し )なら動作を省略して終了します。

ここでは、行末の終了命令に向けて処理を飛ばすことで
移動系動作の強制終了を実現しています。


苦肉の策と言った感じですが、
コンボが途切れる条件である待機ポーズへの移行が
成立しやすくなるようサポートすることで、問題の発生を抑えます。

 ここではスクリプト先頭で1回だけ変数チェックしましたが、
 画像表示に合わせて変数分岐命令を複数並べると
 より確実に待機ポーズへ移行できるかもしれません。
 ( 分岐チェックの間隔を短くする、という考え方です )


まとめ
以下に今回の話で重要な点をまとめておきたいと思います。

1.ヒット数のカウントは、通常立ちなど待機モーションに入った時にリセットされる。

2.待機モーションへ移行する際は、スクリプト移動を使ってはいけない。
 終了命令で動作を終わらせると、キャラの状態に合わせた待機モーションに移行する。

3.その他、ヒット数のカウントが途切れない場合も
 待機モーションへの移行をサポートする仕組みを組むことが一番の解決方法になる。


このページではヒット数のカウントが途切れない問題について説明しました。
わかりにくい部分ではありますが、基本的には
上記1〜2のルールさえ守っていれば問題に会うことは無いです。
また、ここでは2D格闘ツクール標準のヒット数カウントを使っていますが
自前でヒット数カウントの処理を組むことも可能です。
ちょっと変わったカウントルールを作りたい場合は試してみると良いでしょう。

 ただし、これはあくまで見せかけのヒット数に過ぎません。
 コンボ補正の計算など、内部的な処理では
 格闘ツクール標準のヒット数カウントを基準に計算されるので注意してください。



大変長々と説明しましたが、以上でコンボが途切れない問題に関する説明を終えます。
なお、今回説明した内容について気になる点や疑問点などがあれば
掲示板 にて受け付けておりますので気軽にお尋ねください。


ページ先頭へもどる

トップページへもどる

inserted by FC2 system