001 はじめに
002 ゲーム作成
003 各種メニュー確認
004 「キャラクター」作成
005 「ステージ」作成
006 「デモ」作成
007 「テストプレー」
008 「ステージ」編集
009 「キャラクター」編集
010 パレット管理
011 アニメーション
012 「座標移動」
013 重力の設定
014 その他スクリプト
015 「リアクション」
016 ヒットエフェクト
017 スクリプトの並べ方
018 攻撃動作
019 「コマンド入力」
020 攻撃判定
021 やられ判定
022 やられ動作の設定
023 「タイトル画面」作成
024 タイトルカーソルの表示
025 「キャラクターセレクト」
026 各種インターフェイス
027 ラウンド関連の表示
028 CPUの動作指定
029 「ストーリー」の作成
030 ヒット数の表示
031 投げ技の作成
032 ゲージ消費技の作成
033 ステージの組み方
034 デモシーンの組み方
035 格闘ツクールの仕様
■ コマンド解説
001 画像呼出
002 座標移動
003 防御枠
004 攻撃枠
005 リアクション
006 サウンド
007 キャンセル条件
008 色変更
009 オブジェクト発生
010 変数による分岐
011 条件分岐:技中有効
012 条件分岐:基本分岐
013 条件分岐:ランダム分岐
014 条件分岐:コマンド入力
015 スクリプト移動: 移動
016 スクリプト移動: 呼出
017 スクリプト移動: ループ
018 座標・画像変更
019 スクリプト変更
020 スペシャルゲージチェック分岐
021 ライフゲージチェック分岐
022 ゲージ変更
023 パレットアニメ・揺らし
024 停止
025 残像
026 終了
■ テクニック解説
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 ハイジャンプの作成
■ バグ・よくあるミス
Q_A よくあるミスQ&A
001 消せない画像
002 リスト選択とキーボード操作
003 アニメプレビューで落ちる
004 起動直後に落ちる
005 OBJ発生位置がずれる
006 着地すると技終了
007 画面端でのヒットバック1
008 グラデーションが汚い
009 画面端でのヒットバック2
010 境界のアンチエイリアス問題
011 ガードされてもキャンセル可能
012 プレーヤーの読込に失敗
013 謎の残像が発生する
014 コマンドが左右反転する
015 パレット管理でよくあるミス
016 下溜め技が失敗する
017 パレットウィンドウで落ちる
018 コンボが途切れない
019 やられ中にしゃがみ可能
020 ソフトのバージョン表記
021 空中でコマンド左右反転2
022 左右押しでガード前進
023 真空投げが発生する
024 空中でコマンド左右反転3
■ テスト時のチェック項目
■ 解説用データ ダウンロード
022
左右同時押しでガード前進
格闘ツクールで作られたゲームはキーボード、
ゲーム用コントローラーの両方で操作することが出来ます。
必殺技コマンドの入力などを考えるとコントローラー操作に向いたジャンルといえますが、
残念ながら全てのプレーヤーがPCにコントローラーを用意しているとは限りません。
ある程度はキーボードでの操作を想定しておいた方が良いでしょう。
このページではキーボードでゲームを操作する場合に起きるバグ、
方向キーを左右同時押しすると相手の攻撃をガードしながら前進できる問題
についてその発生条件と対処法を説明したいと思います。
現状の確認
今回はバグを確認するため、キーボードでゲームを操作します。
ここでは1Pの操作について
左方向への入力を "F"キー に、右方向への入力を "H"キー に割り当てています。
ゲーム開始、自キャラは画面左側にいます。
"H"キー を押すとキャラは前歩きを行います。
次に "F"キー を押してみます。
今度はキャラが後歩きを行います。
今のところ、何も問題ありません。
次は "F"キー と "H"キー 両方を押してください。
操作としては左右同時押しですが、キャラは前歩きを行います。
一見問題無いように見えますが、実はゲームバランス上大きなバグがあります。
------------------------------------------------------------
左右同時押しで前歩きしているキャラが相手の攻撃を受けるとどうなるか?
飛び道具攻撃を例として実験してみました。
通常の前歩きであれば相手の攻撃を受けてしまうところですが、
同時押し入力していた場合は相手の攻撃を自動的にガードします。
※爆発エフェクトが目立ちますが、上記画像ではキャラがしっかりガードを行っています。
恐らく、後方向入力と前方向入力が同時に成立した場合に
後入力によるガード属性を持ったまま前入力による前歩きを行っているのだと思います。
ゲームコントローラーでは物理的にありえない操作なので気付きにくい部分ですが、
対戦格闘ゲームにおいてはゲームバランスに大きく関わるバグだと言えます。
対処法
対処法としては、左右同時押しした際に特定の動作へ飛ばすという方法が考えられます。
飛び先としては、後歩きやその場での立ち止まりなど
色々考えられると思いますが、ここではシンプルに
左右に首を振るペナルティ動作に移行させたいと思います。
以下は今回の処理で使用するキャラグラフィックになります。
前歩きA
後歩きA
ペナルティ動作_首を振るA
※上記画像はPNG形式となっております。
ゲーム内に読み込む際はBMP形式に変換してお使いください。
スクリプト編集
以下は今回の処理のベースとなる前歩きのスクリプトです。
番号 | 命令 | 設定内容 |
1 | キャンセル不可 | |
2 | やられ・ぶつかりをONに | |
3 | 移動X = +1.76 (その他 = 0) | |
4 | WAIT = 15 | |
5 | WAIT = 15 | |
6 | WAIT = 15 | |
7 | WAIT = 15 | |
8 | WAIT = 15 | |
9 | WAIT = 15 | |
10 | WAIT = 15 | |
11 | WAIT = 15 |
同様にして後歩きのスクリプトも用意してください。
次はペナルティ動作のスクリプトです。
番号 | 命令 | 設定内容 |
1 | 条件分岐:着地したら 4 へ | |
2 | 移動Y = +300.00 (その他=0) | |
3 | WAIT = 15 (画像は4と同じでOK) | |
4 | キャンセル不可 | |
5 | 管理番号1: やられ・ぶつかりをONに | |
6 | 管理番号2: やられをONに | |
7〜 | WAIT = 15 |
ペナルティなので動作キャンセルできないようキャンセル不可に設定しています。
また、スクリプト先頭にてキャラを一度着地させています。
言うなれば着地硬直を強引に起こしているようなもので、
ペナルディ動作が終了するまでキャラは他の動作に移行することができません。
※5〜6で防御枠を2枚配置していますが、ここは自由に設定して構いません。
------------------------------------------------------------
スクリプトの改良
上記スクリプトが準備できたらバグ対策用の処理を追加を始めましょう。
今回のバグは
左右を同時に押した時、後歩きがその性質を残したまま前歩きに入る
ということなので、「前歩き中に後入力されていたら」
を条件としてペナルティ動作へ分岐する処理を組みます。
以下は処理を追加した後のスクリプトになります。
番号 | 命令 | 設定内容 |
1 | 基本分岐:後方面に入力されていたら 「ペナルティ動作」 へ | |
2 | キャンセル不可 | |
3 | やられ・ぶつかりをONに | |
4 | 移動X = +1.76 (その他 = 0) | |
5 | WAIT = 15 | |
6 | 基本分岐:後方面に入力されていたら 「ペナルティ動作」 へ | |
7 | WAIT = 15 | |
8 | 基本分岐:後方面に入力されていたら 「ペナルティ動作」 へ | |
以下、7〜8のパターンを繰り返し |
条件分岐:基本分岐命令を使って後方向への入力をチェックしている点に注目してください。
スクリプトの飛び先には「ペナルティ動作」行を選んでおきます。
同様にして、後歩き動作にも判定処理を追加してください。
( 恐らく無くても問題ないと思いますが、念のため )
テストプレーで処理を確認
上記処理が組み終わったら、再びテストプレーを実行して動作に問題が無いか確認します。
キーボード操作だと自然に左右同時入力してしまうこともあります。
あまりペナルティの発生が厳重だとただ操作し辛いだけに
なる可能性もあるのでキーボード操作でのテストを繰り返して
程よいバランスを見つけるようにしてください。
最初の方でも述べましたが、今回の問題はキーボードで操作した場合特有のバグです。
格闘ツクールでゲームを作っているのであれば
だいたいゲーム用コントローラーを持っているでしょうし
テストプレーする際もそちらを使うことが多いと思います。
しかし、プレーヤー側の環境は様々です。
今回の件に限らず、色々と環境を変えながらテストを繰り返して
より多くの環境に対応したゲームを実現させてください。
以上、長くなりましたが左右同時押しでガード前進するバグについての説明を終えます。
なお、今回説明した内容について気になる点や疑問点などがあれば
掲示板 にて質問を受け付けておりますので気軽にお尋ねください。