« アクションゲーム ヒットストップ « » コツのお話その4 ユーザー補助 »

2005年11月26日

 アクションゲーム キャンセルいろいろこのエントリーを含むはてなブックマーク

なんか妙に評判があるのでコツのお話第3弾

このカテゴリはAAWというゲームを元に
これからゲームを作る人とかゲームの仕組みに興味がある人に
僕の知ってることを中途半端ながら語ってみようというものです。
ちなみに今までの話はこちらから見れます。
ここで語ることはあくまで自己流なので注意。

今回はキャンセルのお話。

まずキャンセルとは何かから説明しましょう。

キャンセルとは広い意味では何かの動作中に他の動作に移ることを言います。
例えばギコが立っています。
んで、→キーを押すと歩きます。
これは立っていることをキャンセルして歩いたんです。
格闘ゲームをやっている人は「えーっ」と思うかもしれません。
普通ゲームで言うと、例えばガードを技でキャンセルしたり、技を必殺技でキャンセルしたり、というのが「キャンセル」ですよね。
でも実は立っている状態から歩くことと、技を必殺技でキャンセルすることは処理的には一緒なのです。
狭い意味では技→必殺技というような特別な切り替えだけを「キャンセル」と言う場合が多いですね。

AAWでキャンセルが使われているのは、例えば3段攻撃。
ギコを例に出しましょう。
1段目のパンチのモーションは、パンチを繰り出す→手を引っ込める という動作で成り立っています。

(もっとコマ数ありますが省略しました)
ところがこの手を引っ込める動作、あまり目にすることは無いはずです。
ギコが手を出すまでの間に攻撃ボタンがもう1度押されていると2段目フラグが立ち、ギコは手を引っ込める動作を無視していきなり2段目のモーションに入ります。
このシステムにより、2段目の攻撃を出した時、数フレームの動作が無視されます。
この数フレームの動作がキャンセルされた動作というわけですね。
3段目も同じようになります。
分かりにくいので図にまとめてみました。

この、キャンセル受け付けの時に攻撃ボタンが押されることでキャンセルが成立します。
どんなに早くキャンセル条件を成立させても、キャンセルするタイミングは同じになるよう作られています。
んー、ちょっと分かりにくいかなぁ。

こういうキャンセルをチェーンコンボとか言います。
格闘ゲームによって言い方は違いますが、開発者が用意した簡単に繋がるキャンセルのことです。

んじゃあそうじゃないキャンセルってなあに?というと例えばジャンプキャンセルです。
AAWの改良バージョンではギコがダッシュ攻撃からジャンプキャンセルができるようになっています。

こういうのをジャンプキャンセルと言います。まんまですね。
ギコのダッシュ攻撃は発生以後いつでもキャンセルできるようになっています。
キャンセルのタイミングも押した瞬間です。
ジャンプキャンセルの直後にジャンプ攻撃を出すことが出来ますから、ダッシュ攻撃で浮かした相手に追い討ちとかができるわけですね。
また、空中攻撃のほとんどは空中ジャンプや空中ダッシュでキャンセルできるように作ってあります。
だからこの場合、ダッシュ攻撃→ジャンプキャンセル→空中後ろ攻撃→空中ジャンプキャンセル→空中下攻撃 とかが繋がります。
格闘ゲームに慣れている人には簡単なんじゃないでしょうかね。

あとは特殊なキャンセルでハーフキャンセルというシステムもあります。
(名前は適当です)
この動作をするものでわかりやすいのは、しぃの空中下攻撃を空中ジャンプでキャンセルした時です。
一応キャンセルをするんですが、モーションが継続するのがわかるでしょうか?

攻撃を出したまま空中ジャンプという器用な動きをします。

ハーフキャンセルは技によるキャンセルよりも、主に着地によるキャンセルに使われています。
普通の技は着地すると着地という動作によってキャンセルされてしまいますが、それだと地上にいる背の低いキャラに攻撃を当てにくくなってしまいます。
(地上ギリギリで攻撃を出しても、判定が出る前に技が消えてしまうから)
そこで、着地しても終わりまで出る技が用意されています。

例えばギコのハリセンなんかがそれです。
地上ギリギリで出すと、ハリセンのモーションが終わってから着地のモーションをすると思います。
ですが落下自体は止めなければいけないので、処理的にはハリセンの途中でギコは着地していることになります。

他にユーザーの補助をする補助キャンセルなんてのもありますが、これはユーザー補助の話のときにしましょう。


以下、ASの実装の話です。 ワケワカメな人は読まなくていいですー。

こういうモーションの移行にはデザインパターンのStateパターンを(自己流で中途半端にw)使用しています。
自分はかなり初心者ですが。
AS2.0に興味がある人はこの言葉で検索すれば説明がわんさか出てくるでしょう。
要はギコやしぃが「状態」という変数を持っていて、そこへオブジェクトが入っている。
そのオブジェクトがキャラの動きを管理していて、それを入れ替えてやることで動作が変化する、というものです。
詳しくはソースを見て参考にしてください。

また、AS1.0時代のAAAではフレームを使ってこの処理をしていました。
ただ、フレームを使うと無限ループを起こしやすいので注意が必要です。
2.0ができて本当に楽になりましたよ。

どの技で何がキャンセルできるか、は技ごとに1つ1つ設定してあります。
これはもう一括で上手くやる方法はありませんし、一括でやると特殊なキャンセルが上手く設定できなくなるので本当に一個ずつ「何フレーム目から何フレーム目にこのボタンが押されたらこの状態にキャンセル」というASを書いてます。
ほとんどコピペなので楽なのですが、いちいちコピペするのを嫌って一括の処理を考えないほうがいいと思います。
そのほうが細かく設定できますので。

ハーフキャンセルの処理は技そのものに着地の動作とかを、またいちいち設定してあります。
Stateは変化していませんから内部処理的には技のキャンセルとは言えないかもしれませんね。



p.s.
ヒットストップといい、キャンセルといい、AAWには随分と格闘ゲームの要素が盛り込まれています。
ただこれは特に変わったことではなく、最近のアクションゲームには格闘ゲームの要素が少なからず入っています。
逆に言うと格闘ゲームにアクションゲームの要素が入っていたりとか。
要は動きを気持ちよくするシステムってゲームの種類にあまり関係ないんですよね。
僕がこういうのを研究したゲームはギルティギア、アーケードガンダムシリーズ、カービィシリーズ、スマブラシリーズあたりです。
気づいている人もいると思いますが、方向キーでいろんな攻撃が出るのはスマブラシリーズの真似ですし、空中ダッシュの挙動はギルティギアのそれです。他に着地のスキのシステムはガンダムから、アクションゲームなのに格闘要素が色濃くあるのはカービィシリーズからです。
こういうゲームの特徴は色々見て研究すると面白いと思います。