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
■ テスト時のチェック項目
■ 解説用データ ダウンロード
017
受け身入力の判定
格闘ゲームには、「コンボ・連続ヒット」という要素があります。
これは、攻撃を受けてやられ動作中の相手に対して
連続で攻撃を当てていくというものです。
ただ、コンボがあまりにも長続きするようだと
一方的な試合展開になってしまいゲーム的な面白みがありません。
その救済策( 脱出方法 )として用意されたのが、「受け身」というものです。
今回は、格闘ツクール上で「受け身」を表現する方法について説明します。
受け身のパターン
具体的な作成方法に入る前に、
一般的な受け身動作について確認しておきます。
空中受け身
相手の攻撃によって、体が浮いた状態。
相手の追撃を避けるために受け身を取ります。
受け身発動時は、
「一定時間無敵状態になりその場から少し移動する」
というパターンが多いです。
( キー入力で、受け身による移動方向をコントロールできる場合もあります )
ダウン受け身
相手の攻撃によって地面にダウンする直前。
相手の追撃を避けるため、受け身を取ります。
( 通常攻撃によるもの以外では、投げ技によるダウンも考えられます )
キャラがバウンドするようなダウン動作を含むゲームや
ダウン時にも当り判定があるタイプのゲームでは、
非常に重要な操作になるでしょう。
受け身発動時は、その場で猫のように着地するものや
左右( キャラの前後 )どちらかに移動しながら着地するものが考えられます。
( 左右どちらに移動するかを、キー入力でコントロールできる場合もあります )
壁受け身
相手の攻撃によって壁に激突する直前。
壁バウンド後の追撃を避けるため、壁接触時に受け身を取ります。
地面と壁という違いはありますが、
基本的なイメージは先述したダウン受け身に近いです。
投げ受け身
あまり一般的ではありませんが、
「投げられた直後、空中で受け身を取る」というパターンもあります。
相手の投げつかみを解除する「投げ抜け」ではなく、
投げによるダウンを回避する「ダウン受け身」とも違います。
何もない空中で、それまでの移動力をリセットするような動きなので
動作的には不自然かもしれませんが、
キャラが縦横無尽に素早く動くゲームなど
スピード感あるゲームに入れると面白いでしょう。
ここでは
4種類の受け身パターンについて紹介しましたが、
今回は一番出番が多いであろう「空中受け身」を例として説明を進めていきます。
( 仕組み自体は他のパターンもほぼ共通なので、参考になると思います )
受け身判定のスクリプト
受け身入力の判定は、基本的に各種やられ動作の中で行います。
ここでは「ダウン浮き」というやられ動作内に
受け身入力の判定を追加します。
ダウン浮き
相手の連続攻撃を受けて、追撃可能な空中浮きになった状態
を表現したスクリプトです。
なお、このスクリプトはヒット時に直接呼び出されるのではなく、
連続ヒットの回数を基準とした分岐によって、
通常の空中ヒットから飛ばされるようになっています。
例:
連続ヒットが4回以上だった場合、
「空中ヒット弱」の代わりに「ダウン浮き」スクリプトを実行する
「ダウン浮き」動作用のキャラグラフィックです。
※ゲーム用BMPは上記画像のリンク先にて提供しております。
以下に具体的なスクリプトの構成を載せます。
※ちなみに、赤色の部分が今回追加した部分になります。
番号 | 命令 | 設定内容 |
1 | キャンセル不可 | |
2 | やられ・ぶつかりをONに | |
3 | 着地したら「ダウン」へ | |
4 | 後方へ浮く移動力を設定 | |
5 | 例では、WAITは50程度 | |
6 | 例では、受付時間50程度 | |
7 | WAIT=0 ( 表示時間無限 ) |
基本的に「やられ動作」はキャンセルできないので、
ブロック 1 では、キャンセル条件を「不可」に設定しています。
なお、コマンド入力の分岐は
このキャンセル条件とは無関係にスクリプト移動できます。
受け身以外でも、カウンターや移動起き上がりなど
特殊な動作を入れる場合はだいたいこの方式にすると良いです。
ブロック 5 にて、コマンド入力判定の前に
画像を1枚表示していることに注意してください。
これがないと、やられ動作が全く表示されない可能性があります。
( やられ動作の画像が表示される前に、コマンド入力で別スクリプトに飛ぶことができてしまう )
ブロック 6 では、「Aボタンを押したら」を条件にして
「空中受け身」スクリプトに飛ぶコマンド入力分岐を行っています。
ここでは1種類の分岐のみを配置していますが、
複数の分岐を並べることも可能です。
例えば…
「A〜Dのボタンどれかを押したら」を条件にしたい場合は、
「Bボタンを押したら」など各ボタン用に4つの を置くことになります。
押したボタンによって空中受け身の移動方向が変わる、
といった表現もスクリプトの移動先を指定することで行えます。
(Aボタンなら前方向に飛ぶ受け身、Bなら後方向〜など)
また、レバー入力を組み合わせて
受け身の移動方向をコントロールする場合ですが、
「↑+A」や「↓+A」などを1つ1つ用意していくと
スクリプトが長くなってしまいます。
( 他のやられ動作でも分岐を用意する場合、データ的にも無駄が多いです )
この場合は、移動先である「空中受け身」スクリプト内で
さらに「レバー入力方向」による分岐を行うと良いです。
条件分岐:基本分岐にある「前方面に入力されているか?」
などを利用すると良いでしょう。
スクリプトの構成を図にすると、以下のような感じになります。
なお、移動力の加算と条件分岐をうまく並べることで
1行のスクリプトにまとめることも可能です。
着地した際に正しく動作が行われるよう、
ブロック 7 のWAIT値は大きめ( 例では無限 )に設定してあります。
アニメーションつきの落下ポーズにする場合は、
スクリプト移動命令をうまく使ってループ構造を組むと良いでしょう。
受け身動作のスクリプト
判定のスクリプトができたら、
次は分岐先となる「受け身動作」のスクリプトを用意します。
ここでは「空中受け身」という名前でスクリプトを作成しました。
以下は「受け身動作」用のグラフィックになります。
※ゲーム用BMPは上記画像のリンク先にて提供しております。
番号 | 命令 | 設定内容 |
1 | キャンセル不可 | |
2 | やられをOFFに | |
3 | 着地したら「着地」スクリプトへ | |
4 | 上方へ軽くはねる移動力を設定 | |
5 | ここのWAITがキャラの無敵時間になる | |
6 | やられをONに戻す | |
7 | WAIT=0 ( 表示時間無限 ) |
「無敵状態になって移動する」というだけの処理なので
複雑な設定は特にありません。
ブロック 1 ではキャンセル条件を設定しています。
今回の例では「受け身からの反撃」は考えていないため、
キャンセル不可としています。
受け身後の攻撃( 反撃 )を有りにする場合も
冒頭の数フレームはキャンセル不可にしておいた方が
良いかもしれません。
( このあたりはゲームバランスを考えて設定してください )
ブロック 2 では防御枠を設定しています。
今回は一時的な無敵状態を表現するので、
「やられ」の判定をOFFにしています。
( 「ぶつかり」判定をOFFにするかどうかは、お好みで )
また、ブロック6の防御枠設定で
無敵状態を解除していることに注意してください。
受け身動作のグラフィック表現
お好みでキャラの半透明化やフラッシュ、点滅効果などを
入れると( 受け身中であることが )視覚的にわかりやすいでしょう。
ただ、キャンセルで別の動作スクリプトに移行すると
色変更処理のリセットが無視されてしまうので、
あらかじめ各種基本動作の冒頭に「色変更のリセット」を
入れておくと良いでしょう。
スクリプトの作成が済んだら、
「受け身判定」スクリプトからの飛び先指定を確認しておきます。
動作を確認
実際にテストプレーを実行して、スクリプトの動作を確認します。
先述した通り、
「ダウン浮き」は相手の連続攻撃を受けた時に発生するスクリプトです。
テストをするにはやや条件が厳しいので、
一時的に設定を変えると動作確認しやすいかと思います。
( 「ヒット弱 立ち」の割当を、一時的に「ダウン浮き」に変えるなど )
また、今回は相手の攻撃を受ける必要があるので
テスト時は、相手の動作を「CPU」にすると良いです。
以下、テスト結果を見ていきます。
自キャラ( 画面左側 )が、相手キャラの攻撃を受けました。
自キャラは「ダウン浮き」状態になっています。
ここで、Aボタンを押すと…
自キャラが受け身動作を取りました。
設定どおり、キャラが受け身動作の判定を行っていることが確認できました。
MEMO
対戦ゲームとしてのバランス
「連続コンボの爽快感」は一つの面白みですが、同時に
「コンボを受け続ける」というつまらなさが存在することを
忘れてはいけません。
このあたりは、1プレーヤーの視点でいると忘れがちです。
常に反対側の立場があることを覚えておくと良いでしょう。
今回は連続コンボと受け身について述べましたが、
こういったバランス取りはゲーム全体において重要になります。
対戦バランスの良いゲームを目指すのであれば…
プレーヤーの視点から離れて、出来るだけ良い試合、接戦を
演出する対戦主催者のような視点に立つことも大切だと思います。
あまりやりすぎると理不尽な八百長になってしまいますが、
硬派な格闘ゲームと、軟派なパーティゲームの中間あたりを
イメージしておくのは対戦ゲームを作るうえで有りだと思います。
内容の割りに話が長くなりましたが、
これで「受け身入力の判定」に関する説明を終えます。
今回の内容について指摘や疑問点などあれば、
掲示板にて気軽に聞いてください。