斑鳩 Final Chapter 長元坊への張り付き高度について

斑鳩のスコア稼ぎでは、Final Chapterで長元坊に密着解放する動きがよく見られます。この動きは長元坊を速攻してより多くの長元坊を出現させるためのものですが、一方で近づきすぎた結果長元坊に接触してミスとなったり、逆に遠すぎて密着解放が成立しなくなったりといったミスのリスクがある動きでもあります。

本稿は斑鳩Final Chapterの長元坊に対して接触死せずに密着解放が成立する高さについての調査結果となります。

各ゾーンの位置

まず前提として、長元坊の判定は出現直後だけ微妙に大きくなっています。このため、出現後の長元坊に接触死せずに張り付ける高さでも、次の長元坊の出現時に長元坊と軸を合わせていると接触死が発生したりします。(後述する接触死ゾーンで起きる現象)

これを踏まえて、自機の高さを下図のように4つのゾーンに分類します:

各ゾーンの広さと位置関係。これより下は非密着ゾーン、これより上は接触死ゾーン。

まず、一番下の非密着ゾーンです。非密着ゾーンでは長元坊との距離が離れすぎているため、長元坊への密着解放が成立しません。(一部だけ密着解放になることはあるが、12本すべて密着解放にはならない)

非密着ゾーンよりも上に行くと安全ゾーンに入ります。安全ゾーンは自機の上下移動2F分の高さがあり、この領域は長元坊への密着解放が成立し、かつ長元坊との接触死は起こらない、というある種理想的な高さとなります。

安全ゾーンよりもさらに長元坊に近づくと接触死ゾーンとなります。半接触死ゾーンは自機の上下移動1F分の高さしかなく、この領域では密着解放が成立しますが長元坊の出現直後だけ接触死のリスクがあります。すなわち、長元坊の出現する瞬間に自機と長元坊の軸が合っていると接触死が発生します。(出現してしばらく経った後ならば軸が合っても接触死はしない)

そして最後、半接触死ゾーンよりさらに上に行ってしまうと接触死ゾーンとなり、ここでは自機と長元坊の軸が合うと常に接触死が発生してしまいます。

Appendix: HUDを利用した高さ合わせ

横画面でプレイする場合、設定によっては画面左右にスコア・実績表示用のHUDが表示されます。このHUDを目印として高さ合わせすることもできます。個人的おすすめとしては、自機の左翼の下端と一番右上の実績(田鳧撃破の実績)のグラフィックを目印にして合わせるのが分かりやすいかと思われます。

左:Arcadeモード、右:Prototypeモード。設定は下に記載。

上図はSteam版で以下の環境・設定にした時の位置関係です。(UIの位置に関係しそうなものは太字で表示):

  • ディスプレイ解像度:1920x1080
  • VIDEO SETTINGS
    • SCREEN MODE: FULL
    • RESOLUTION: DESKTOP ← 解像度
    • ROTATE SCREEN: NONE ← 画面の回転
    • ROTATE HUD: SYNC
    • HUD SIZE: MIDDLE ← 文字サイズ
    • HUD LAYOUT: TYPE 6 ← レイアウト
  • ADVANCED SETTINGS
    • WALLPAPER: OFF
    • CHAIN NUMBER: ON ← chain数表示
    • ENERGY NUMBER: ON
    • STATS: ON ← 実績表示の有無
    • SHOW FPS: ON

Arcade-Normalで長元坊7機出し(118chain)を狙う場合、直前の朱鷺の撃ち返しを吸ってゲージ回収したい関係でHUDを利用した高さ合わせは難しそうですが、妥協して長元坊6機出しにする場合や他のモード(Arcade-EasyやPrototype-Normal等)なら採用の余地はあるかもしれません。

斑鳩 Arcade-Easy3面鷸のパターン

本記事では、斑鳩Arcade-Easy3面の中ボス・鷸の速攻パターンについて解説します。

前提として、鷸戦へのゲージ持ち込みは0本とします。(直前に解放で歌鶫12体を処理している想定)

パターン解説

Step 1: 黒ビットをショットで削る

Step 1では黒ビットに白ショットで攻撃。

黒ビットに逆属性ショットで撃ち込む。本体とは異なり、ビットは出現直後からダメージを受け付けているのでビットが本体から出てくる動きに合わせてショットを置いておくと少しダメージを稼げる。

ここでの黒ビットの削り具合については特に意識すべき点はなく「黒ビットが鷸の正面に来るまで撃ち込み続ける」ことだけ意識すれば十分。

Step 2: 白ビットのHPをギリギリまで削る

解放後、HPバーを見ながら白ビットのHPをギリギリまで削る。

黒ビットが鷸正面に来たら黒属性に切り替え、黒レーザーが2本重なったところを上になぞってゲージを回収。その後白ビットに黒解放して白属性に変更。その後、HPゲージを見ながら白ビットのHPをショットでなるべくギリギリまで削る。

ここでの削り方が甘いと、この後鷸の「左移動」を引いたときに失敗のリスクが上がる。(「右移動」なら、多少ここの削りが甘くても問題ない。)

白ビットへのダメージが足りずなかなかギリギリまで削れないなら、白ビットに黒解放を撃つ前に黒ショットで白ビットのHPを少し削っておくのも手。

このタイミングで白ビットを倒すのはNGですが、倒してしまった場合のリカバリー方法は本記事末尾の動画内のCase 4で軽く紹介しています。

Step 3: 黒ビットのHPを解放で削る

黒ビットに白解放。ここでの白解放には特に気にするべきポイントは無く、「とりあえず白解放を撃っておく」というくらいの認識で大丈夫です。

Step 4: 白ビットを破壊

白ビットをショット&解放で破壊。

白ビットに黒ショットで十分撃ち込んだのち、黒解放で白ビットを破壊。

かなり頑張ってダメージを与えないとこのタイミングで白ビットを倒せないので、本体へのダメージは気にせず、白ビットへの攻撃に専念。

このタイミングで白ビットを倒せなくても一応リカバリーは利きます(本記事末尾の動画のCase 3参照)が、鷸の撃破がやや遅れるのでなるべくこのタイミングで倒せるようにしましょう。

Step 5: 残りの白ビット&本体(白)を破壊

左は当たりの「右移動」パターン、右はハズレの「左移動」パターン。違いは鷸の位置。

Step 2でギリギリまで削っておいた白ビットをショットで破壊し、鷸本体(白)に黒解放でそのまま撃破。

このとき、鷸が左にいる「左移動」パターンだと白ビットにショットで撃ち込む際の位置取りが難しくなります。この場合、Step 2での白ビットの削り方が甘いと難しい位置取りでの撃ち込みを長時間要求されるので危険度が上がります。なので鷸が右に移動する「右移動」パターンを引けるように祈りましょう。(現状、筆者は鷸の移動パターンを固定する方法を知りません)

補足:Step 4で白ビットを破壊できていない場合

Step 4で白ビットを破壊できていない場合は鷸本体(白)に黒解放を撃って撃破した後、そのまま黒ショットで奥の白ビットに撃ち込むことで倒し損ねた白ビットを破壊します。

鷸の本体パーツは撃破すると判定が消えるので、撃破した本体パーツ(白)の上にショットを通して白ビットに撃ち込めます。

破壊した本体パーツ(白)の上を通して奥の白ビットに撃ち込む。

Step 6: 黒ビット&本体(黒)を破壊

黒レーザーを吸収しながら、十分ゲージが溜まったところで白解放で残りのパーツを全て破壊。少しでも撃破を早めたい場合はなるべく鷸に近づいて解放することで着弾までのタイムラグを減らすのが有効です。

撃破後、鷸が爆発とともに画面から消える際に鷸が中央に戻っていなければ十分早いと言えるでしょう。

左:鷸が中央に戻っておらず「早い」、右:鷸が中央に戻っており「遅い」


実行例

以下のパターンを収録しています:

  • Case 1: 「右移動」の当たりパターン
  • Case 2: 「左移動」のハズレパターン
  • Case 3: Step 4で白ビットの破壊に失敗した際のリカバリーパターン
  • Case 4: Step 2で白ビットを倒してしまった場合のリカバリーパターン

youtu.be

 

斑鳩3面 分裂地帯の早回し周辺の調査(Steam版)

以前の記事(下のリンク参照)では、分裂地帯の歌鶫の挙動について解説しました。

egimal.hatenablog.com

本記事では、Steam版の斑鳩における歌鶫の出現タイミングや早回しの仕様などについて調べた結果を述べていきます。

 

本ブログでの表記

本ブログでは以降、説明の簡略化のために個々の歌鶫や早回しの早さに独特の呼称を用います:

  • 歌鶫のID
      • 以下の情報を順に並べて表記します: 
        • セット数(1始まり)
        • 色(BはBlackで黒、WはWhiteで白)
        • 番号(1~6の整数を出現した順に振る)
        • 世代情報(LはLeftで左の子、RはRightで右の子。L or Rが2つ並んでいる場合は孫世代を表す。)
      • 例:2B3 → 2セット目の黒歌鶫3体目(親世代)
      • 例:1W6LR → 1セット目の白歌鶫6体目の左の子のさらに右の子(孫世代)

分裂歌鶫の世代
  • 早回しLv.
    • 分裂地帯の早回し判定は25Fごとに行われ、判定のタイミングで画面内の歌鶫が7体以下ならばそのタイミングで早回しが発生する仕様です。
      • 現在のセットで未出現(出現待ち)の歌鶫も「画面内の歌鶫」としてカウントされます。(例えば1セット目序盤で画面内に1B1・1W1だけ出ており、1B2・1W2以降が未登場の状態でも画面内に12体歌鶫が存在する扱いとなるため、早回し条件が満たされることはない。)
      • 早回し判定のあと一時的に画面内の歌鶫が7体以下になったのち、次の早回し判定時に画面内の歌鶫が8体以上に戻った場合、早回しは発生しません。(あくまでも25F間隔で発生する早回し判定時の歌鶫の数のみが影響します)
    • 早回し判定時、一定回数連続して早回し条件が満たされていなければ、画面内の歌鶫の数に関係なく早回しが発生します。これによる最遅の早回しを早回しLv.0と呼ぶこととします。
    • 早回しLv.0より早回し判定n回分(i.e. 25×n[F])早いタイミングでの早回しを早回しLv.nと呼ぶことにします。また、早回しLv.nの発生の成否を決める判定を早回しLv.nの判定と呼ぶことにします。

前提知識

  • 各セット内における歌鶫の出現間隔は25Fとなっており、その出現順は
    • 奇数セット目なら「黒白黒白…」
    • 偶数セット目なら「白黒白黒…」
  • 各セットで1~12番目に出現する歌鶫の初期位置・初速度は一定。
    • つまり、奇数セット目と偶数セット目の歌鶫の挙動は、白黒を逆転させて適当な時間だけずらせば一致する。

分裂地帯のイベント

ここでは中ボス鷸戦開始時から分裂地帯終了(ボス戦突入)までのイベントについて解説します。

t=1[F] … 鷸戦開始

本記事では、下図のように鷸のビットから初めてレーザーが見えるフレームを時刻t=1[F]と定義します。

右の状態の時刻をt=1[F]と定義する。

t=T[F] … Lv.23早回し判定&歌鶫1B1出現

このタイミングは、鷸本体の消滅するフレームの1F前です。すなわち、時刻t=T+1[F]は鷸の本体パーツとビットを全て破壊した後、鷸本体が爆風と共に消滅したフレームと定義します。

左・右の状態の時刻をそれぞれ時刻t=T[F], t=T+1[F]と定義する。

この時刻t=T[F]には以下のイベントが発生し、以後も25F間隔で同様のイベントが発生します:

  • 歌鶫1B1をスポーンさせる。
  • Lv.23早回しの判定
    • このLv.23早回し判定の時点では歌鶫が12体存在するので、早回しになることはない

t=T+1[F] … 鷸本体の爆発&消滅

上で述べたTの定義から、時刻t=T+1[F]で鷸本体が爆発&消滅します。

t=T+25m[F] … 判定が行われるフレーム (m:自然数

このフレームでは時刻t=T[F}のと同様のイベントが発生します。詳細は以下の通り:

  • 未出現の歌鶫があれば次の1体をスポーンさせる。
    • 奇数セット目であれば「黒白黒白…」の順、偶数セット目ならその逆の色でスポーン
    • 例えば1セット目ではt=T[F]で1B1がスポーン。以降、t=T+25[F]で1W1がスポーン、t=T+50[F]で1B2がスポーン、…、t=T+275[F]で1W6がスポーンという流れになる。
  • 生存している(未出現、または分裂直後の無敵時間中のものも含む)歌鶫の総数が8体以上かチェック。
    •  生存している歌鶫が7体以下(or 早回しLv.0の判定)なら早回しが発生。
      • 早回しが発生すると次セットの歌鶫12体が出現待ち状態となる。
    • 早回しが発生した場合、同時刻で次セットのLv.24早回し判定および次セットの1体目の歌鶫出現イベントも発生する。
      • 尤も、このLv.24早回し判定はt=T[F}の早回しLv.23判定と同様、未出現の歌鶫が多数存在するので早回しになることはない)
    • 早回しが発生しなかった場合、次の判定(25F後)では1つ下のレベルの早回しの判定が行われる。

t=2265[F] … 判定が行われる最後のフレーム

25F間隔の判定が発生するのはこのフレームが最後となります。つまり、t=2266以降は新たな歌鶫が発生することはありません。

例:T=1015, 早回しLv.(5, 0)

時刻t イベント
1 鷸レーザー開始
1015 1セット目の早回しLv.23判定&1B1出現
1016 鷸撃破(1セット目の早回しLv.22判定まで24F)
1040 1セット目の早回しLv.22判定&1W1出現
1065 1セット目の早回しLv.21判定&1B2出現
1415 1セット目の早回しLv.7判定
1440 1セット目の早回しLv.6判定
1465

1セット目の早回しLv.5判定クリア

&2セット目早回しLv.24判定&2W1出現

1490 2セット目の早回しLv.23判定&2B1出現
1515 2セット目の早回しLv.22判定&2W2出現
2040 2セット目の早回しLv.1判定
2065

2セット目の早回しLv.0判定(無条件)クリア

&3セット目早回しLv.24判定&3B1出現

2090 3セット目の早回しLv.23判定&3W1出現
2115 3セット目の早回しLv.22判定&3B2出現
2140 3セット目の早回しLv.21判定&3W2出現
2165 3セット目の早回しLv.20判定&3B3出現
2190 3セット目の早回しLv.19判定&3W3出現
2215 3セット目の早回しLv.18判定&3B4出現
2240 3セット目の早回しLv.17判定&3W4出現
2265 3セット目の早回しLv.16判定&3B5出現&判定発生最終フレーム

つまりこの例では3セット目の歌鶫3B5までが出現します。この例では判定発生最終フレーム(t=2265[F])と歌鶫3B5の発生フレームが一致しているので、もし早回しレベルは同じで鷸の撃破が1[F]遅れていれば歌鶫3B5は出現していなかった、ということも分かります。

おわりに

以上が分裂歌鶫の早回し・出現数に関する調査結果となります。本記事の内容は録画時のコマ落ちが原因で判定発生最終フレームなどがズレている恐れもありますので、もしズレている箇所を見かけましたらご指摘いただけますと幸いです。

斑鳩3面 分裂歌鶫の力学的挙動に関する調査

本記事では斑鳩3面の道中ラストの歌鶫地帯(通称:分裂地帯)の歌鶫の挙動について個人的に調べた結果を述べていきます。なお、本記事の内容は歌鶫の力学的な挙動のみに焦点を当てたものであり、実際のスコア稼ぎにおいて用いるパターンの解説は一切含まないことを予めご留意ください。

分裂歌鶫の基本的な挙動

  • 1セット当たり白黒6体ずつの計12体の歌鶫が出現。(以後、これを親歌鶫と呼ぶ。)

    f:id:EGImal:20220330172929p:plain

    ショットを撃たずにしばらく放置した場合。白黒6体ずつの親歌鶫が登場している。
  • 親歌鶫が破壊されたとき2体の子歌鶫が生まれ、子歌鶫も破壊されたとき2体の孫歌鶫を生む。孫歌鶫は破壊されても次の歌鶫が生まれることはない。
  • f:id:EGImal:20220330174600p:plain
    f:id:EGImal:20220330174602p:plain
    分裂地帯では歌鶫を破壊すると2体に分裂する。右図は左図の1F後。
  • 親→子→孫と分裂することにより1体の親歌鶫は1+2+4=7体に増えることになる。したがって、1セットあたり最大で白黒42(=6×7)体ずつの計84体の歌鶫が出現することになる。

分裂歌鶫の親・子・孫

x軸方向の運動

  • x軸方向の速さは一定。左右の壁でバウンドするが反発係数は1、つまり壁でバウンドしても速さは変化しない。
  • x軸方向の速さは世代のみに依存しており、親→子→孫と下の世代になるにつれて若干速くなる。同世代ならx軸方向の速さは共通。

y軸方向の運動

  • y軸方向には常に下向きに一定の重力加速度がかかる等加速度運動をしている。
  • 床に到達した歌鶫は各世代で1回まで床バウンドする。すなわち、1回目の床到達時にはバウンドし、その後の2回目の床到達時には床バウンドは発生せずにそのまま画面下に退場する。ただし分裂して下の世代になると床バウンド済フラグはリセットされる。
  • 例えば親歌鶫が床バウンド後に破壊されたとき、生まれた子歌鶫も1回まで床バウンドする。
  • 床バウンドの反発係数eは全ての分裂歌鶫で共通で、1未満の定数である。
  • 自機がミスすると画面内のすべての歌鶫が「床バウンド済」扱いとなり、その世代では床バウンドせずにそのまま画面下に退場する。(ただし退場前に破壊すればその子は床バウンドする)

詳細なデータ

詳細なパラメータについて述べる前に、単位の定義を述べておく。

  • 時間の単位はフレーム(F)とする。(60F = 1秒)
  • 位置の測定にはSteam版斑鳩を1280x720の解像度設定でプレイした時の録画を利用した。
  • 歌鶫の座標はaviutlでサイズ70・線の幅4の円を目視で重ねた際の円の座標として観測した。画面中央の座標が(0,0)であり、画面右下隅(プレイ画面外)の座標は(640, 360)。

座標の定義

上記の設定の下、各種パラメータは次のようになった。なお、特に言及しない限りパラメータは全ての分裂歌鶫(世代問わず)で共通である。

  • x軸方向の速さは親世代で2.66、子世代で3、孫世代で3.4。(単位はいずれもdot/F)
  • 重力加速度は0.0333(≒1/30) [dot/F^2]。
  • 左右の壁のx座標は±217。
  • 床の座標は360。
  • 床の反発係数は0.92。
  • 親 [resp. 子]が座標(x,y)で破壊された時、子 [resp. 孫]が座標(x±50, y)に出現し、分裂直後の初速度のy成分は-1.4 [dot/F]に設定される。(分裂後の初速度のx成分は上述の通り世代依存である。)

おわりに

上記のパラメータ設定で計算した歌鶫の位置と、実際の歌鶫の挙動をAviUtlのスクリプト制御で重ね合わせたのが下の動画です。若干の誤差はあるものの概ね再現できていると言ってよさそうです。

今後は初期位置や初速度等のパラメータを調整して位置計算の誤差を減らすとともに、歌鶫の世代ごとに色を変えるなどして分裂地帯の研究に使いやすくなるように機能を追加していきたいところです。

斑鳩 Prototype-Normal・Hard 1面中盤早回し11セットパターン解説

タイトル通り,Prototype-Normal・Prototype-Hardで1面中盤の早回し虎鶫を11セット出すパターンの解説です.ちなみに,ここの早回し11セットは1人プレイのPrototype-Normal・Hardだと理論値と思われます.(12セットはダブルプレイでしか見たことがない)

まず,こちらが今回紹介するパターンになります.

youtu.be

Prototype-Hardの場合でもPrototype-Normalと同じ動きで11セット出せるので,この記事ではPrototype-Normalの場合のみ解説します.

なお,本記事で述べられる斑鳩の仕様についてはあくまで筆者がそうだと信じているものを語っているにすぎず,誤りがあるかもしれないのでその点はご留意ください.

パターン詳細

ここからは,上の動画のパターンの詳しい解説となります.

まず,この虎斑木菟地帯前の歌鶫地帯(下図)について1つ注意点があります.それは,下図の歌鶫編隊全滅後に画面左半分にいるようにすること.この歌鶫編隊を全滅させた後,最大で3セット虎鶫編隊が出るのですが最初の編隊は歌鶫編隊全滅時に自機が画面の左半分にいるか右半分にいるかで決まります.画面左半分にいると1セット目は右から,画面右半分にいると1セット目は左から出るのですが,この後の虎斑木菟地帯の動きの関係で1セット目は右から出てほしいので,そうなるようにしておきます.(もちろん歌鶫編隊全滅後の早回し虎鶫は最大の3セット出すこと)

ここの歌鶫編隊の処理は上の動画にあるものと,それを左右反転させたものがメジャーですが,要するに上の動画のパターンで11セット出しを狙うならその前の歌鶫編隊もそれと同じパターンを使ってください,ということです.

f:id:EGImal:20220125200656p:plain

虎斑木菟地帯前の歌鶫地帯.ここの歌鶫を全滅させた後画面左側にいるようにする必要がある.

虎斑木菟地帯全体を通しては

  • 自機は常に白属性
  • ショットは常に撃ちっぱなし(より正確には,Aボタン押しっぱなし)

という点に注意してください.(ショット撃ちっぱなしについては,上の動画の入力でAボタンに相当するZキーが押しっぱなしになっていることから確認できると思います.)

ここからは,虎斑木菟地帯のより詳細な解説に入ります.

①白&黒虎斑木菟1体目の処理

f:id:EGImal:20220125194203p:plain
f:id:EGImal:20220125194221p:plain
f:id:EGImal:20220125194213p:plain
左:1回目の解放の1F前,中:2回目の解放の1F前,右:3回目の解放の1F前.
1回目の解放は全て白虎斑木菟をロックする.左図がまさに下記の「白虎斑木菟の翼と歌鶫が重なったタイミング」であることを確認されたい.2回目の解放は歌鶫が(おそらく)まだ画面内に存在しない扱いなので黒虎斑木菟をロック,3回目の解放は白歌鶫×2とそのほかの敵をロック.2回目の解放が左の黒虎斑木菟を倒す前に3回目の解放で白歌鶫×2を倒すのがポイント.

位置取りは白虎斑木菟の出現位置ど真ん中.白虎斑木菟の翼と歌鶫が重なったタイミングで力の解放を3回連続で使用する.こうするとチェインを繋ぎつつ左右の虎斑木菟とそのお供を処理できる.ちなみにこの3連続解放は目押しではなく,最速で3回撃てばいい.最速と言っても解放は先行入力を受け付けるので,テキトーに3回押せば大体OK.

まず,1回目の解放について.ここの虎斑木菟には少々特殊な仕様があり,この地帯の虎斑木菟4体は接触判定が出現する少し前からダメージを受け付けている.ダメージ受付開始~接触判定出現の間は虎斑木菟に完全に重なった状態でもミスにならず,一方的に攻撃を加えることができる.その間に力の解放を撃つことで接触判定が出る前に虎斑木菟を倒してしまう…というのが最初の解放で行っていることである.上の説明にある「白虎斑木菟の翼と歌鶫が重なったタイミング~」の下りは,虎斑木菟のダメージ受付開始タイミングをはかるための目安,という訳でした.

2回目の解放についてだが,これは実は右の白歌鶫ではなく左の黒虎斑木菟をロックする.これは,お供の歌鶫が虎斑木菟の出現後少し間を空けて出現しているからと考えられる.2回目の解放を撃った段階では歌鶫はまだ出現していない扱いであるため,画面上の唯一の敵である黒虎斑木菟をロックする,という訳である.

3回目の解放は右の白歌鶫×2を優先してロックし,そのほかの敵にも飛ぶ.2回目の解放で左の黒虎斑木菟が倒れる前に白歌鶫×2を倒すのがポイント.そこさえ気を付ければチェインは繋がる.

②右の白虎斑木菟2体目の処理

f:id:EGImal:20220125194216p:plain
f:id:EGImal:20220125194226p:plain
左図は解放発射の1F前.①で白虎斑木菟に完全に重なって解放したのとは違い,ここでは重なる必要はない.白歌鶫がロックできるようになる前に解放し,白虎斑木菟だけをロックできれば良い.右図は解放を撃った後の図.白虎斑木菟は解放で倒しきれるので,お供の白歌鶫×2をショットで倒す.

最初の白虎斑木菟と同様に乗っかって解放を撃ってもいいが,2体目の虎斑木菟は乗っかり解放の猶予(i.e. ダメージ受付開始~接触判定出現の間隔)が1体目よりも短いため乗っかるのは非推奨.このパターンでは白虎斑木菟の判定が出現してから,お供の白歌鶫×2の判定が出るまでの間に解放を撃ち,白虎斑木菟だけをロックしている.白虎斑木菟を倒したらお供の白歌鶫×2をショットで倒すのも忘れない.

③左の黒虎斑木菟2体目の処理

f:id:EGImal:20220125194229p:plain
f:id:EGImal:20220125194248p:plain
左図は解放を撃った瞬間.自機の左右から6本ずつ出ている誘導レーザーのうち,左の6本を全て直撃コースで黒虎斑木菟に当てるのがポイント.右図は黒虎斑木菟を倒した瞬間.黒歌鶫×2が残っているが,それらは画面内に残っている力の解放が勝手に倒してくれるので自分から撃ちに行く必要は基本ない.

地味に重要なポイント.この後の早回し虎鶫の出現トリガーは「虎斑木菟4体の破壊」なのでお供の歌鶫よりも虎斑木菟を優先して破壊する.やり方としては,黒虎斑木菟の判定だけが出ている状態で解放を撃ち,黒虎斑木菟に左の6本を即着弾コースで当てるのがポイント.解放が遅れてお供の歌鶫に解放を吸われたりすると11セット出すのはかなり厳しくなる.

さいごに

以上がPrototype-Normalにおける1面中盤の早回し11セット出しパターンの解説となります.ちなみにPrototype-Hardでも撃ち返しに注意するだけでこれと同じ動きで11セット出しが可能です.(Normalとの違いがあるとすれば,最後の黒虎斑木菟を倒した後に黒属性にして撃ち返しを吸収することくらい)

↓Prototype-Hardだとこんな感じ

youtu.be

 

斑鳩小ネタ集

以前の記事(下のリンク)で書きそびれた内容の羅列になります。

egimal.hatenablog.com

ボタン操作の詳細

AボタンやCボタンは押した瞬間に対応する攻撃が出ます。Aボタンを押せば押した瞬間にショットが出ますし、Cボタンを押せば押した瞬間に力の解放が出ます。

しかしBボタンを押してから属性変更が始まるまでには数Fのタイムラグがあります。これはおそらく、力の解放をA+B同時押しで行う際に完璧な同時押しでなくても解放が出るようにした結果かと思われます。

Cボタンの先行入力

Cボタン(力の解放)は先行入力を受け付けます。例えば、属性変更中にCボタンを押すと属性変更終了後に自動的に力の解放が発射されますし、力の解放中にCボタンを押しても同様に、今撃っている力の解放を撃ち終わった後に自動的にもう1回力の解放を撃ちます。この仕様のため、Cボタンを手動で連打しても常に最短のインターバルで力の解放を連打できます。

一方でBボタンは先行入力がきかないので、Bボタンを連打して属性変更を繰り返しても次の属性変更までの間隔にはバラつきが生じます。

B+C同時押し

Cの方が早い、もしくはBとCが完全に同時なら力の解放の後に属性変更。Bの次フレームでC、またはBの2F後にCでも力の解放の後に属性変更となる。Bを押してから3F後以降にCを押せば属性変更のあとに力の解放となる。

ちなみにこのB+C同時押しは、プロトタイプの鶚残98秒撃破及び5面の長元坊10体出しを狙う上ではほぼ必須級のテクニックとなる。

表示関連

HPバー

画面上部のバーは敵の残HPを表すもので、一番直近にダメージを与えた敵の残HPが表示されます。(ちなみにしばらくの間どの敵にもダメージを与えていないと表示が消えます)
このHPバーは1本あたりHP400で、HPが400を超える敵の場合はゲージが複数本用意されます。その場合、ゲージの色が変化していくので、色を見れば今何本目のゲージなのかが判断できます。

敵弾の描画優先順位

同種の敵弾の描画優先順位については、白属性と黒属性が1Fごとに入れ替わります。白が上に描画された次のフレームでは黒が上に描画される…といった形です。白と黒が入り乱れた場面で「白弾の陰になってて見えなかった黒弾に当たった(怒)」というのをなるべく防ごうという配慮かと思われます。

被弾後の敵弾

敵弾に被弾してミスになった際、自機と接触した敵弾は消えます。(復帰時の全画面弾消しとはまた別の現象)

ただし、例外としてレーザー系は消えません。

知っていれば不可解なミスが発生した際の原因特定に役に立つかも。

力の解放の二重決済仮説 in 斑鳩プロトタイプ

今回は、斑鳩プロトタイプモードでたまに起きる力の解放の変な挙動に関する話です。

斑鳩のプロトタイプモードでは残弾がある限り解放を連続で使用できます。これを利用してボス戦に残弾が多い状態で突入して解放連打でボスを速攻する、というのがプロトタイプモードの醍醐味ともいえるでしょう。しかしボス戦で解放を連発しているとたまに解放の割り当てがおかしくなることがあります。

例として、こちらの動画を見てみましょう。

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回の解放が全て着弾した後(下図右)の様子です。

f:id:EGImal:20210212154030j:plain
f:id:EGImal:20210212154659j:plain
左: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発減ったタイミングとする。
  • 解放の着弾タイミングは、解放着弾により撃ち込み点が入ったタイミングとする。

f:id:EGImal:20210216161323j:plain

ここでの定義では、右のフレームで「解放の着弾」と「解放の発射」の両方が発生したとみなす

また、白パーツのHPは800なので、解放の割当が狂わなければ4回の黒解放で白パーツが壊れるはずです。ですので4回の黒解放白パーツが壊れなかったら「割り当てが狂った」とみなします。

今回の検証では10回のプレイ(うち割り当ての狂いが発生したのが5回)を録画し、4回目の解放の発射前後5Fで解放が着弾しているかしていないかを記録しました。

結果は以下の表のようになりました。上の数字は4回目の解放の前後何Fか(例えば-3は4回目の解放の3F前)を、黄色の部分はその瞬間に解放が着弾したことを、上の数字が0の部分の「狂」の有無はそのデータで割り当ての狂いが発生したか否か(「狂」のあるデータでは狂いが発生した)を、をそれぞれ表します。この表を見ると、割り当てが狂ったプレイでは必ず4回目の解放を発射したタイミング(i.e. 上の数字が0の部分)で解放が着弾しており、逆に割り当てが狂わなかったプレイでは4回目の解放発射タイミングで解放が着弾していないのが分かります。

f:id:EGImal:20210216160356p:plain

実験結果

サンプル数が少なく、ゲームの内部を覗いたわけでもないのでこれで確定とまではいかないものの、この検証でこの仮説にある程度は信憑性が生まれたのではないでしょうか。

なお、今回の検証に使用したプレイの動画は下からご覧になれます。

youtu.be

 

対策

ある程度の妥当性が確認できたところで、この仮説が正しいと仮定した場合にどう動けばよいのかについて考察していきます。

田鳧第1形態

開幕で中央の白パーツ2つ(HP: 各600)を黒解放5回で倒す際、5回続けて撃つのではなくてまずは4回だけ撃ち、解放がすべて着弾してから5回目の解放を撃って止めを刺せば大丈夫です。これだと3回目の解放で割り当ての狂いが起こる可能性はありますが、その場合狂った結果ロックする先がもう片方の白パーツになるので問題はないです。
(ちなみに3,4回目の解放が狂うと、4回解放した後にどちらの白パーツも生きている、という事態が起こりうるのですが、その場合5回目の解放で両方とも倒せるのでパターンに支障は出ません。実際にこうなった場合の動画は、上の検証実験で使用した動画データの最後におまけとして収録してあります。)

残った黒パーツの方も、4回白解放して間を空けて5回目の解放を撃てばいいです。が、黒パーツの処理では解放を連打して割り当てが狂ってもまず問題にならない上、そもそも黒パーツの処理では第2形態に備えての残弾回復のために自然と5回目の解放前に間が空いて自然と対策できている動きになるので、特に気にする必要はありません。

この対策を実際にしている例はこちら。

youtu.be

田鳧第2形態・烏帽子鳥最終形態など

これらの箇所でも、画面上の解放の着弾を確認してから止めの解放を撃てば割り当ての狂いは起きません。ただし、当然ながら着弾を待つという行為そのものがタイムロスになるため、割り当ての狂いをケアしようとすると最速撃破は厳しくなってしまいます。なので自分は狂わないのを祈りつつ解放を連打するのがベストだと考えています。仮に狂ったところで、残った数十のHPを吸収からの解放 or 無料ショットで削りきればいいので特に支障がない、というのも理由の一つです。

一応、自機の位置取りを工夫して「ここで解放を撃てば狂わない」という位置に合わせてやれば絶対に狂いませんし、特に全て密着解放にすれば割り当ては絶対に狂いません。が、田鳧2・烏帽子鳥最終形態ではボスの判定に全然めりこめない上にボスが動くので、すべて密着解放にするというのは非常に難しいです。でも限界まで突き詰める人はこの辺も研究する必要が出てくる…のかも。

備考:解放連打しても狂わないケース

f:id:EGImal:20210216170121j:plain

解放がロックできる対象が1つしかなければ「二重決済」が起きても問題ない

仏法僧でも解放連打を使用しますが、この仮説の上では仏法僧での割り当ての狂いは起きませんし、実際自分もなった試しがありません。(カバーを両方同時に開けた場合は狂う可能性がありますが、片方だけ開けて片方の弱点を倒して…というパターンなら狂いません。)

これは、仮に解放着弾と同時に解放して予測HPが低く見積もられたとしても画面内の敵が弱点部1つしかないために解放の「全ての敵の予測HPが0の場合は、予測HPを無視して一番近い敵を狙う」という性質により結局弱点部を狙ってくれるからです。

また、予測HPが低く見積もられてもなお十分多い(解放がすべて着弾しても倒しきれないorすべて着弾してようやく倒せる)場合も、狂いは発生しません。

まとめ

これまでの内容をまとめると、

  • 力の解放が着弾した瞬間はその敵の予測HPが低く見積もられる
  • その状態でその敵に止めを刺す解放を撃つと解放が十分な本数割り当てられず、止めが刺せなくなる

というのが二重決済仮説で、検証実験の結果もこの説と矛盾しませんでした。

まあしかしこの仮説が本当に正しかったとしても田鳧1以外は現実的な解決策がないというのが現状ですが、「なんかよくわからないけど割り当てがおかしくなった!」という風な理不尽さは感じずに済むのではないでしょうか。