投票
大犬太とCHPとCHEXA 着地硬直と着地モーションの解説(長文)
CHPとCHEXAやるよ
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


着地硬直と着地モーションの解説(長文)
2008年08月21日 (木) | 編集 |
==着地モーションと着地硬直の定義==
着地硬直とは、「▲!」で表示されるキャンセル不可の時間を指し、
着地モーションとは、空中から着地したときに発生する一連のモーションを指します。
また、モーションは、アクションの構成部分を指すものとします。

また、着地の発生フレームは、ドスンという音が発生し、
地面に薄い輪っかが表示されるフレームとします。

ゲーム上、着地判定は、各フレームの本体の移動処理が終った後に行われ、
着地していた場合、ドスンという音が発生し、地面に薄い輪っかが表示されます。
この時、着地硬直が発生するような着地の場合、さらに着地硬直マーク「▲!」が表示されます。
そして、着地した次のフレームから、着地モーションが開始されます。

ただし、一部例外的に着地硬直が発生しない着地もあります。これの仕組みは、まだよく判ってません。
(キャンセル失敗後のごく短い空中状態や、犬の特殊Jなどで発生します。)

==着地硬直マークとCPU時間のずれ==

ここでは、なぜ、硬直マークが消えた次のフレームにBREAKINが発生するのかを説明します。

それは、ゲーム上の処理順序が、「CPU時間>アクション実行>着地判定>着地硬直マーク表示>ポーズ>CPU時間」となっているため、
ポーズしたタイミングでは、着地硬直マークは次のCPU時間に適用されるマークが表示されているためです。

通常、マークの表示はポーズしたフレームの状態を表示していると思いがちですが、
実際には、マークの表示は次のフレームの状態を指しています。

これを例示すると以下のようになります。

以下、1フレーム目で着地した後、2フレームの硬直が入る場合の例です。
(実際には2フレーム硬直などホトンド発生しませんが)

1フレーム目
 CPU時間(空中のためINAIRキャンセル不可)
 移動処理
 着地の発生
 着地硬直マークが表示される
 ポーズ(マーク表示あり)
2フレーム目
 CPU時間(着地硬直のためBREAKINキャンセル不可)
 着地硬直マークが表示される。
 ポーズ(マーク表示あり)
3フレーム目
 CPU時間(着地硬直のためBREAKINキャンセル不可)
 着地硬直マークが消える
 ポーズ(マーク表示なし)
4フレーム目
 CPU時間(キャンセル可能)

この3フレーム目の処理がややこしい原因で、
「マーク表示が無いのに、なんで、キャンセル出来ないんだ!」ではなくて、
「キャンセルできないフレームが完了したので、マーク表示が消えたのだ」と考える必要があります。

理解しずらい場合、以下のように読み替えることが可能です。
「マーク表示とキャンセル不可時間は1フレーム分ずれて表示されるため、
マーク表示のあるフレーム+1フレーム分が必ずキャンセル不可となる」

==着地モーションと着地硬直==

さて本題です。
時に、ジャンプアクション後、ジャンプ硬直の最終フレームをキャンセルできたり、
或いは、ジャンプアクションが終了して、静止アクションになっているにも係らずキャンセルに失敗(BREAKIN)することがあります。
これは、着地モーション時間(アクションの構成部品)と着地硬直時間は別々に設定されているために発生します。

そして、着地モーション時間は、実行しているジャンプアクションの種類によって決まった基本アクション時間が
機体の積載率(≒機動性)によってアクション時間として変化するのに対し、
着地硬直時間は、同一機種の同一アクションであれば、機動性による影響をあまり受けません。
あまり受けないと記載しましたが、自際には硬直時間も特定の条件で変化するようです。
ここは別途調査します。

つまり、元々着地モーションが着地硬直時間より短い場合は当然として、
積載率が下がり、機動性が向上すると、着地モーション時間は短縮されるが、着地硬直時間は短縮されないため、
その差分(ジャンプアクションは終っているにキャンセル不可の時間)が、静止アクションとなって表示されます。

同様に、元々着地モーションが着地硬直時間より長い場合は当然として、
積載率が上がり、機動性が低下すると着地モーションが延長されるが、着地硬直は延長されないため、
その差分が、ジャンプアクションが終っていないのに、キャンセル可能な時間となります。

このキャンセル可能な時間が世にいう、着地硬直キャンセルの出来る時間ということです。
つまり、本当は着地硬直をキャンセルしているわけではなく、
あくまで既定の硬直時間経過後の着地モーションをキャンセル出来たに過ぎません。

まとめると、
着地モーション時間<着地硬直時間⇒キャンセル不能な静止アクションが発生。
着地モーション時間>着地硬直時間⇒キャンセル可能な着地モーションが発生。
となります。

また、一般的には
ジャンプアクションの着地モーションは、着地硬直時間より1フレーム短い機体が多く(例えばアラクネーなど)
ジャンプ射撃アクションの着地モーションは、着地硬直時間より長い機体が多いです。(例えばアラクネーなど)

結局は、キャンセル不可の属性は、着地モーションが持っているのではなく、
あくまで、機体の状態(空中か、着地硬直中か)で判断されるということで、

言い換えると、基本的にはどんなアクションについても、(ジャンプ着地後の着地モーションであっても)
機体の状態が、空中(inAir)、あるいは着地硬直中(BREAKIN)でない限り、
キャンセルは可能であると言えます。

==動作中止チップとWAITチップと、着地硬直==

ここでは、動作中止チップとWAITチップでの着地硬直の扱いを説明します。

上記チップを、実行すると、
WAITチップは、機体の状態にかかわらず、現在のアクションが終了するまで、CPUが待機し、
動作中止チップは、ジャンプ中などのキャンセル不能状態で使用すると、現在のアクションが終了までCPUが待機し、
キャンセル可能な状態で使用すると、静止アクションを実行して、即次のチップに制御が移ります。

そして、通常、「現在のアクションが終了するまで、CPUが待機」とは
「現在のアクションが終了し、静止アクションの1フレーム目が表示されるまで」待機することを指します。

ところが、上記の「現在のアクションが終了するまで、CPUが待機」には、
空中状態(INAIR)で、WAIT及び動作中止チップを実行した場合に限り、以下の2つの待機パターンが存在します。

①着地硬直時間が着地モーション(アクション)時間と同じか短い場合、現在のアクションが終了し、静止アクションの1フレーム目が表示されるまで待機します。(通常と同じ)
②着地硬直時間が着地モーション(アクション)時間より長い場合、着地硬直が解除されるフレームまで、待機します。(特殊なパターン)

これが何を意味しているかというと、
①の場合、本来キャンセルできるはずの着地モーションや、静止アクションの1フレームについても余分に待機してしまうのに対し、
②の場合、着地硬直が解除された瞬間のフレームから、CPUが再開されるため、必ず最速で行動が出来るということです。

つまり、②を狙って出せば、わずか1チップで、ジャンプ後の最速行動が非常に簡単にできるようになります。
例えば、アラクネーのジャンプ+動作中止だと、ジャンプの着地モーションは硬直時間より1フレーム短いため②となり、
同様にジャンプ射撃+動作中止だと、ジャンプの着地モーションは硬直時間より長いため①となります。

さらに実際には、このチップには2つの困った仕様があります。
1点目は、本当は現在のアクションの終了を待っているのではなく、静止アクションが出るのを待ってため、待機中に被弾などが発生すると被弾状態についても連続で待機してしまうことです。
これは、「現在のフレームが静止アクションで、且つ、次のフレームが行動(キャンセル)可能な場合に、次のフレームからCPUが再開する」という本当の仕様があるためです。

2点目は、行動中止チップにおいて、空中状態(INAIR)で一度行動中止チップを通過してしまうと、
以降のフレームで即座に着地していたとしても、次のフレーム以降は行動中止が可能かどうかのチェックは行われずに
ひたすら静止アクションが発生するまで待機してしまうということです。
これが悪さをするのは、現在のアクションがジャンプでないアクションの場合です。
通常のジャンプなどであれば、空中状態(INAIR)が発生することも、ジャンプアプションの終了するまで待機することも、想定のされる動きですが、、
例えば、酷い場合を想定すると「伏せ60フレ」チップなどでキャンセルした時に、伏せで軸足が浮いて空中状態(INAIR)となり、
そこで「行動中止」チップを踏むと、次のフレームで着地したとしても、伏せアクションの60フレームの間、CPUが停止することになります。
この間に被弾すると、困った仕様の1点目と同様のことになります。

これを踏まえた上で、利用する分には、有効な手段となりえる可能性もあります。

==非ジャンプアクションと着地硬直==(未確定記事)

2脚などで、キャンセルなどを多様すると、時々空中状態(INAIR)や着地硬直(BREAKIN)でキャンセルに失敗します。
着地するキーモーションのタイミングでキャンセルする分には、
前後のアクションの軸足に関係なく、あまり空中状態(INAIR)や着地硬直(BREAKIN)は発生しないのですが、
補間モーションなどでキャンセルを繰り返すと、よく空中状態(INAIR)や着地硬直(BREAKIN)が発生します。

着地硬直(BREAKIN)を簡単に出せる例でいうと、積載率100%の月影であれば
急速前進→STOP1→上段格闘→STOP1で、INAIR3フレームとBREAKIN6フレームが発生します。
1f 急速前進→STOP1。右足が浮いたモーション
2f 上段格闘→STOP1。軸足が右足で、両足が浮いたモーション。
3f 前進→STOP1。INAIR。両足が浮いたモーション。
4f 前進→STOP1。INAIR。両足が浮いたモーション。
5f 前進→STOP1。INAIR。軸足の左足が着地し、着地音と着地硬直マークの表示。
6f 前進→STOP1。BREAKIN。
7f 前進→STOP1。BREAKIN
8f 前進→STOP1。BREAKIN
9f 前進→STOP1。BREAKIN
10f 前進→STOP1。BREAKIN
11f 前進→STOP1。BREAKIN
12f 前進→STOP1。前進

となります。

最初にも書きましたが、着地硬直の発生ルールは正確にはわからないのですが、
非ジャンプアクションでの着地硬直は、多くの場合、キャンセルの失敗や急な下り坂などで、本体が空中に浮いてしまい、
空中状態(INAIR)が数フレーム継続した場合に発生しているようです。
あるいはZ軸の落下速度などが一定値以上などの条件かもしれませんが、詳細は今後調査してみます。

そして、この着地硬直について、非ジャンプアクションの着地については着地モーションは発生しません。
そのため、現在のアクションが通常通り継続されるているのに、なぜかキャンセルはできない時間が、着地硬直時間として消化されます。
ただし、行動中止チップなどとは異なり、着地硬直が解けた後は、再びキャンセル可能となります。
ただ、格闘などの飛び上がるアクションの場合、着地硬直中にもかかわらず、さらに飛び上がることでさらにキャンセル不可な時間が延長されます。
これは、トリンカーの上段格闘キャンセルなどで発生し、
「なんで、ここでジャンプ蹴りするかなー!」となるわけです。

ということで、着地硬直と着地モーションの解説を終ります。

スポンサーサイト


コメント
この記事へのコメント
検証と解説お疲れ様です。
モーション時間と硬直時間が別扱いというのは目鱗でした。
ジャンプしたときに早めに「静止」が表示されることがあるのはそのためだったと。

「現在のアクションが終了するまで、CPUが待機」
実際に文字通りの動作をするのは一時停止モードで実行した動作だけ。
こちらは被弾すると処理が復帰する。
WAITは「静止状態になるまで、CPUが待機」
動作中止は「自機の動作を変更可能である場合静止状態にし、nopと同様に処理を継続するが
チップを踏んだ段階で動作が変更できなかった場合、WAITと同じく静止状態になるまで待つ」
これであってるでしょうか。

WAITで待った場合でもロスがなく、かつ最後の1フレームが短縮できる可能性がある場合
動作中止は有効かもしれませんね。具体例は挙げられませんが(´Д`;)

……脚付きの動作ファンブル、果たして防止する術はあるのかどうか。気になります。
2008/08/22(金) 08:10:47 | URL | ライ #4GfVkdRg[ 編集]
ライさん、こんにちは。
ご指摘の通りです。なるほど、一時停止モードも追記するようにします。

有効活用かどうかわかりませんが、(というかみんなやっていると思いますが)
例えば、ジャンプ射撃が着地モーションキャンセルができて、ジャンプは最速WAITが可能な場合なら、
通常回避はジャンプ射撃にして、着地モーションをガードループでキャンセルし、
地雷回避は、ジャンプのみにして、WAITを使うとすると、
そこそこ省チップで、てきぱきと動くことになります。
2008/08/23(土) 02:41:38 | URL | 大犬太 #JalddpaA[ 編集]
こんばんわ。
前回のモーションの仕組みの記事と今回の記事をじっくり見て、
十分に理解したとは言えないですが、今までの機体製作での謎が解消されました。
「なるほどそうだったのかー」って感じでまさに目から鱗です。
自分のプログラムにすぐに活かせられるような簡単な内容ではないですが、
頭に置いておくに値する非常に有効な情報でした。
これだけ調査して更に、伝えにくい内容を文章でまとめるのは大変でしたでしょう。本当にお疲れ様でした。
大変勉強になりました。ありがとうございました。
2008/08/24(日) 00:00:08 | URL | 農林ピート1号 #-[ 編集]
農林ピート1号さん、こんにちは。
私にも、もう少し文才があるといいのですが、なかなか読み辛くてご迷惑おかけします。
CHPを始めたころは、自分もいろんな疑問があったのですが、
最近、キャンセル機を作ったところ、今まで多く謎に感じていた部分の理屈が、
なんとなくわかってきたので、検証できた分のみを、簡単にまとめてみました。

理論自体は理解すれば、なるほどと思うのですが、
実際それを活用したプログラムをつくるとなると、これがなかなかよい例が浮かびません^^;
そんなわけで、少しでもお役に立てれば幸いです。
2008/08/24(日) 00:56:25 | URL | 大犬太 #JalddpaA[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
大犬太氏の「着地硬直と着地モーションの解説」
2009/05/07(木) 21:50:18 | 南部方面無人機甲師団前線基地
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。