今回は、斑鳩 プロトタイプモードでたまに起きる力の解放の変な挙動に関する話です。
斑鳩 のプロトタイプモードでは残弾がある限り解放を連続で使用できます。これを利用してボス戦に残弾が多い状態で突入して解放連打でボスを速攻する、というのがプロトタイプモードの醍醐味ともいえるでしょう。しかしボス戦で解放を連発しているとたまに解放の割り当てがおかしくなることがあります。
例として、こちらの動画を見てみましょう。
0:37のあたりで、1ボスの最終形態を解放連打で倒そうとしています。1ボス最終形態 のHPは1200、黒解放 によるダメージは1本あたり20なので、黒12本解放 5回で計60本の解放を撃てば撃破できるはずです。しかし、6回の解放で計64本の解放を撃ったにもかかわらず、ボスのHPが残ってしまっています。よく見ると、最後の方の解放が何本か左のビットに吸われています。ボスが倒れなかったのはこれが原因なのでしょうが、しかし自機に一番近いボスがまだ生きているのに、それを差し置いて遠くにある左ビットに解放が飛ぶというのは非常に不可解です。
実は、このような不可解な解放の割り当ては1ボス最終形態だけで起きるものではなく、鷸の本体・田鳧第1形態・田鳧第2形態などでも確認できます。
しかし一体なぜこのような現象が起きるのでしょうか? その問いへの答えとして自分が有力視しているのが、タイトルにある「二重決済仮説 」(と自分が勝手に呼んでいるもの)です。これは端的にいうと「敵に解放が着弾すると同時に、その敵に止めの解放を撃つと解放の割り当てが狂う」という仮説です。
今回は二重決済仮説の説明およびその妥当性の検証のために行った実験の結果について書いていきます。そして最後に、今回の結果を踏まえて解放割当の狂いをケアする方法について述べます。
二重決済仮説
この節の内容は下の記事の「力の解放」の部分を前提としていますので、まだ読まれていない方は先にそちらをご覧ください。また、下の記事の末尾にある敵HPの表も適宜ご参照ください。
egimal.hatenablog.com
上の記事によると、力の解放の割り当てでは解放を余計に割り当てることが無いように「今ある解放が全て着弾したらHPがいくらになるか?」を表す量である「予測HP」を使うという話でした。そのために解放がロックしている敵の予測HPは、実HPからその解放のダメージ分だけマイナス補正がかけられます。このマイナス補正は解放が着弾して実際にダメージを与えたら当然なくなるはずなのですが、「実は解放が着弾してダメージを与えた瞬間はこのマイナス補正が切れていないのではないか?」 というのが二重決済仮説です。
実際に解放割当が狂ったケースを見てみましょう。下図は田鳧第2形態で白パーツ (HP: 800)に黒12本解放 (白パーツ に対して1本あたりダメージ20)を4回連続で撃って倒すパターンで、ちょうど4回目(トドメ)の解放を撃つ瞬間(下図左)と、4回の解放が全て着弾した後(下図右)の様子です。
左:4回目の解放の瞬間 右:4回の解放がすべて着弾した後
上図左は黒解放 3回で撃った計36本のレーザーのうち21本は既に着弾した後、1本がちょうど着弾した瞬間で、残りの14本はまだ敵に到達していない…という状況です。この時、右の白パーツの実HPは21+1=22本のレーザーが着弾した後なので
800 - 20×(21+1) = 360 、
予測HPの方はまだ着弾していないレーザーが14本なので
360 - 20×14 = 80
となるはずです。 すると4回目の黒解放 を撃つと白パーツ には4本、黒パーツ には8本の解放が割り当てられ、結果白パーツ に合計40本の解放が割り当てられるので白パーツ が無事破壊されるはずです。
ところが、実際には4回目の解放では白パーツ に3本しか解放が割り当てられておらず、その結果白パーツ のHPが20残ってしまっています。つまり4回目の解放を撃った瞬間の白パーツ の予測HPがなぜか60以下になっているのです。
ですがもし、上図左の瞬間着弾している1本の解放が、予測HPの計算時に内部ではまだ着弾していない扱いになっている と仮定するとこの予測HPの低さに説明がつきます。実際そう仮定すると予測HPは
360 - 20×(14+1 ) = 60
となり、4回目の解放で白パーツ に3本しか解放が割り当てられなかったことと矛盾しません。
つまり、
「解放が着弾してダメージを与えた瞬間はまだその解放が着弾してない扱いになっているため、解放が既に着弾してダメージを与えているのに予測HPの計算時にそのダメージがもう1回引かれる、いわば二重決済される形になってしまい、予測HPが本来あるべき値よりも低くなってしまう。その影響で解放の割当が狂ってしまう。」
というのが二重決済仮説です。
検証実験
Prototype-HARDの田鳧第2形態で白パーツ に黒解放 を4回連続で撃ち、解放の着弾タイミングと解放発射タイミング、割り当ての狂いが発生したか否かを記録して検証を行いました。
まず前提として、解放の発射・着弾タイミングを以下のように定義します。
解放の発射タイミング は、残弾が120発減ったタイミングとする。
解放の着弾タイミング は、解放着弾により撃ち込み点が入ったタイミングとする。
ここでの定義では、右のフレームで「解放の着弾」と「解放の発射」の両方が発生したとみなす
また、白パーツ のHPは800なので、解放の割当が狂わなければ4回の黒解放 で白パーツが壊れるはずです。ですので4回の黒解放 で白パーツ が壊れなかったら「割り当てが狂った 」とみなします。
今回の検証では10回のプレイ(うち割り当ての狂いが発生したのが5回)を録画し、4回目の解放の発射前後5Fで解放が着弾しているかしていないかを記録しました。
結果は以下の表のようになりました。上の数字は4回目の解放の前後何Fか(例えば-3は4回目の解放の3F前)を、黄色の部分はその瞬間に解放が着弾したことを、上の数字が0の部分の「狂」の有無はそのデータで割り当ての狂いが発生したか否か(「狂」のあるデータでは狂いが発生した)を、をそれぞれ表します。この表を見ると、割り当てが狂ったプレイでは必ず4回目の解放を発射したタイミング(i.e. 上の数字が0の部分)で解放が着弾しており、逆に割り当てが狂わなかったプレイでは4回目の解放発射タイミングで解放が着弾していないのが分かります。
実験結果
サンプル数が少なく、ゲームの内部を覗いたわけでもないのでこれで確定とまではいかないものの、この検証でこの仮説にある程度は信憑性が生まれたのではないでしょうか。
なお、今回の検証に使用したプレイの動画は下からご覧になれます。
VIDEO youtu.be
対策
ある程度の妥当性が確認できたところで、この仮説が正しいと仮定した場合にどう動けばよいのかについて考察していきます。
田鳧第1形態
開幕で中央の白パーツ2つ (HP: 各600)を黒解放 5回で倒す際、5回続けて撃つのではなくてまずは4回だけ撃ち、解放がすべて着弾してから5回目の解放を撃って止めを刺せば大丈夫です。これだと3回目の解放で割り当ての狂いが起こる可能性はありますが、その場合狂った結果ロックする先がもう片方の白パーツ になるので問題はないです。 (ちなみに3,4回目の解放が狂うと、4回解放した後にどちらの白パーツ も生きている、という事態が起こりうるのですが、その場合5回目の解放で両方とも倒せるのでパターンに支障は出ません。実際にこうなった場合の動画は、上の検証実験で使用した動画データの最後におまけとして収録してあります。)
残った黒パーツ の方も、4回白解放 して間を空けて5回目の解放を撃てばいいです。が、黒パーツ の処理では解放を連打して割り当てが狂ってもまず問題にならない上、そもそも黒パーツ の処理では第2形態に備えての残弾回復のために自然と5回目の解放前に間が空いて自然と対策できている動きになるので、特に気にする必要はありません。
この対策を実際にしている例はこちら。
VIDEO youtu.be
田鳧第2形態・烏帽子鳥最終形態など
これらの箇所でも、画面上の解放の着弾を確認してから止めの解放を撃てば割り当ての狂いは起きません。ただし、当然ながら着弾を待つという行為そのものがタイムロスになるため、割り当ての狂いをケアしようとすると最速撃破は厳しくなってしまいます。なので自分は狂わないのを祈りつつ解放を連打するのがベスト だと考えています。仮に狂ったところで、残った数十のHPを吸収からの解放 or 無料ショットで削りきればいいので特に支障がない、というのも理由の一つです。
一応、自機の位置取りを工夫して「ここで解放を撃てば狂わない」という位置に合わせてやれば絶対に狂いませんし、特に全て密着解放にすれば割り当ては絶対に狂いません。が、田鳧2・烏帽子鳥最終形態ではボスの判定に全然めりこめない上にボスが動くので、すべて密着解放にするというのは非常に難しいです。でも限界まで突き詰める人はこの辺も研究する必要が出てくる…のかも。
備考:解放連打しても狂わないケース
解放がロックできる対象が1つしかなければ「二重決済」が起きても問題ない
仏法僧でも解放連打を使用しますが、この仮説の上では仏法僧での割り当ての狂いは起きませんし、実際自分もなった試しがありません。(カバーを両方同時に開けた場合は狂う可能性がありますが、片方だけ開けて片方の弱点を倒して…というパターンなら狂いません。)
これは、仮に解放着弾と同時に解放して予測HPが低く見積もられたとしても画面内の敵が弱点部1つしかないために解放の「全ての敵の予測HPが0の場合は、予測HPを無視して一番近い敵を狙う」という性質により結局弱点部を狙ってくれるからです。
また、予測HPが低く見積もられてもなお十分多い(解放がすべて着弾しても倒しきれないorすべて着弾してようやく倒せる)場合も、狂いは発生しません。
まとめ
これまでの内容をまとめると、
力の解放が着弾した瞬間はその敵の予測HPが低く見積もられる
その状態でその敵に止めを刺す解放を撃つと解放が十分な本数割り当てられず、止めが刺せなくなる
というのが二重決済仮説で、検証実験の結果もこの説と矛盾しませんでした。
まあしかしこの仮説が本当に正しかったとしても田鳧1以外は現実的な解決策がないというのが現状ですが、「なんかよくわからないけど割り当てがおかしくなった!」という風な理不尽さは感じずに済むのではないでしょうか。