etc/知識/花解析メモ

Last-modified: 2021-03-27 (土) 11:14:42

独り善がりでいいや、もう。
永夜抄はどうした!

コードはJavascript風。

速度の単位
ドット毎フレーム
加速度の単位
ドット毎フレーム毎フレーム
陣の座標
左上隅
(-144, 0)
右上隅
(144, 0)
左下隅
(-144, 448)
右下隅
(144, 448)
方向
90°
180°
270°
[a, b]
a以上b以下の実数乱数

弾数限界

一方の陣に現れる弾幕アタック(弾ポイントの白弾、送り返し白弾&大型弾)と弾アイテムの大型弾と霊の自爆撃ち返し弾の合計の上限は175発。それ以外(カードアタック、ボスカードアタック、リリーの吐く弾、まだある?)の合計の上限は360発。
リリカ、メルラン、ルナサ、ミスティアのEXアタックは弾幕アタック扱い、小町のEXアタックはそれ以外扱い。その他のEXアタックはどちらにもカウントされていない。

合計最高175発
  • 弾ポイントの白弾
  • 送り返し白弾&大型弾
  • 弾アイテムの大型弾
  • 霊の自爆撃ち返し弾
  • リリカ、メルラン、ルナサ、ミスティアのEXアタック
  • ミスティアのカードアタック、ボスカードアタック(緑大型弾除く)
  • 及び、以上の弾が弾幕裁判に重なったことにより発射された卒塔婆弾
合計最高360発
  • カードアタック
  • ボスカードアタック
  • リリーの吐く弾
  • 小町のEXアタック
  • 及び、以上の弾が弾幕裁判に重なったことにより発射された卒塔婆弾

爆風の見た目

これは全然解析じゃない。

種類持続時間直径
妖精1092
小+12116
12124
13136
幽霊未活性848
1092
12104
12124

妖精列の出現パターン

  1. (-64, 0) -> (144, 136)
  2. (-128, 0) -> (144, 76)
  3. (-48, 0) -> (-144, 300)
  4. (-12, 0) -> (-144, 300)
  5. (-128, 448) -> (144, 372)
  6. (-144, 124) -> (144, 124)
  7. (-144, 192) -> (144, 192)
  8. (-144, 256) -> (144, 256)(下端から陣の高さ3/7)

座標適当。左右から来るので16通り。

1
2
112234
3
4
4321111234
5
212121
6
7
8
121234

弾幕アタック

擬似コード

function 自陣から送られる時 ()
{
  function 白弾ポイントによる場合 ()
  {
    種類 = 白弾;
    色 = 薄ピンク;
    switch (難易度)
      {
      case Easy:
        速度 = 0.9 + ランク * 0.04;
        break;
 
      case Normal:
        速度 = 1.1 + ランク * 0.05;
        break;
 
      case Hard:
        速度 = 1.3 + ランク * 0.08;
        break;
 
      case Lunatic:
        速度 = 1.3 + ランク * 0.11;
        break;
 
      case Extra:
        速度 = 1.6 + ランク * 0.04;
        break;
      }
    // 音鳴らない
  }
 
  function 白弾の撃ち返しによる場合 ()
  {
    種類 = 消した白弾の種類;   // 常に白弾となる
    色 = 消した白弾の色;
    速度 = 消した白弾の速度;
    送られた回数 = 消した白弾の送られた回数;
    // 音鳴る
  }
 
  function 弾アイテムによる場合 ()
  {
    種類 = 大型弾;
    色 = 薄ピンク;
    switch (難易度)
      {
      case Easy:
        速度 = 0.9 + ランク * 0.04;
        break;
 
      case Normal:
        速度 = 1.1 + ランク * 0.05;
        break;
 
      case Hard:
        速度 = 1.3 + ランク * 0.08;
        break;
        // ここまでは白弾と変わらない
 
      case Lunatic:
        速度 = 1.7 + ランク * 0.1;
        break;
 
      case Extra:
        速度 = 1.5 + ランク * 0.08;
        break;
      }
    // ちなみに送る弾数は 10 + 難易度 * 2 + ランク
    // 送った数だけ1フレームおきに音が鳴る
  }
 
  // 出現する範囲は幽霊と同じ
  x座標 = [-136, 136];          // 左右両端8ドット以外
  y座標 = [0, 128];             // 上部2/7
 
  送られた回数 = 0;
  
  switch (何によって?)
    {
    case 白弾ポイント:
      白弾ポイントによる場合 ();
      break;
 
    case 白弾撃ち返し:
      白弾撃ち返しによる場合 ();
      break;
 
    case 弾アイテム:
      弾アイテムによる場合 ();
      break;
    }
}
 
function 敵陣に出現時 ()
{
  if (送られた回数 >= 2 && 確率1/5)
    種類 = 大型弾;
 
  if (種類 == 大型弾)
    {
      // 大型弾に自機狙いはない
      方向 = 90 + [-7.5, 7.5];
    }
  else
    {
      // 白弾は色を設定し直す
      // 2/3が自機狙い
      if (確率1/3)
        {
          方向 = 90 + [-15, 15];
          色 = ピンク;
        }
      else
        {
          方向 = 自機方向 + [-90/7, 90/7]; // 90/7は約12.85
          色 = 青;
        }
    }
 
  速度 += [-0.4, 0.4];
  if (出現する陣のキャラが文)
    速度 *= 0.93;
  if (種類 == 大型弾)
    速度 += 0.3;
  // 0.8 <= 速度 <= 3.0 + ランク * 0.1 の範囲に収める
  速度上限 = 3.0 + ランク * 0.1;
  速度下限 = 0.8;
  if (速度 > 速度上限)
    速度 = 速度上限;
  if (速度 < 速度下限)
    速度 = 速度下限;
 
  ++送られた回数;
  // この処理を通らないca、ba、リリーの白弾に設定された回数は全て0だと思う。
  // 少しだけしか調べていないが。
}

ポイントによる白弾の速度

ランクENHLEx
10.941.151.381.411.64
20.981.21.461.521.68
31.021.251.541.631.72
41.061.31.621.741.76
51.11.351.71.851.8
61.141.41.781.961.84
71.181.451.862.071.88
81.221.51.942.181.92
91.261.552.022.291.96
101.31.62.12.42.0
111.341.652.182.512.04
121.381.72.262.622.08
131.421.752.342.732.12
141.461.82.422.842.16
151.51.852.52.952.2
161.541.92.583.062.24
171.581.952.663.172.28
181.622.02.743.282.32
191.662.052.823.392.36
201.72.12.93.52.4
211.742.152.983.612.44
221.782.23.063.722.48

弾アイテムによる大型弾の速度

ランクENHLEx
10.941.151.381.81.58
20.981.21.461.91.66
31.021.251.542.01.74
41.061.31.622.11.82
51.11.351.72.21.9
61.141.41.782.31.98
71.181.451.862.42.06
81.221.51.942.52.14
91.261.552.022.62.22
101.31.62.12.72.3
111.341.652.182.82.38
121.381.72.262.92.46
131.421.752.343.02.54
141.461.82.423.12.62
151.51.852.53.22.7
161.541.92.583.32.78
171.581.952.663.42.86
181.622.02.743.52.94
191.662.052.823.63.02
201.72.12.93.73.1
211.742.152.983.83.18
221.782.23.063.93.26

幽霊アタック

一方の陣に現れる幽霊の数の上限は緑黄赤合計して10匹。ただ、陣に10匹未満の幽霊がいる時に全く同じタイミングで複数の幽霊が現れようとした場合に限り、上限チェックが働かず、11匹以上出現する。

擬似コード

function 自陣から送られる時 ()
{
  if (敵陣の幽霊の数 >= 25)
    return;
 
  x座標 = [-136, 136];          // 左右両端8ドット以外
  y座標 = [0, 128];             // 上部2/7
 
  // ランクが高いと緑霊の方が速くなる
  if (種類 == 緑霊)
    加速度増分 = ランク * 1/600 + [0, 1/120];
  else
    加速度増分 = [0, 1/120];
}
 
function 敵陣に出現時 ()
{
  // ミスティアは自機狙いになる確率が他キャラの1.25倍
  if (出現する陣のキャラがミスティア
      ? 確率1/4
      : 確率1/5)
    方向 = 自機方向 + [-22.5, 22.5];
  else
    方向 = 90 + [-0.9, 0.9];
 
  速度 = 1;
  switch (種類)
    {
    case 緑霊:
      加速度 = 0.025;
      break;
 
    case 黄霊:
      加速度 = 0.03;
      break;
 
    case 赤霊:
      加速度 = 0.0366...;
      break;
    }
}
 
// 出現後の処理
if (0 <= 経過フレーム数 <= 59)
  速度 += 加速度;
 
if (経過フレーム数 == 0)
  加速度 += 加速度増分;

速度

緑霊の終速は、ランクが9以上になると黄霊を、13以上になると赤霊を確実に上回る。

種類ランク初速終速
最低最高
緑霊11.0252.59833...3.09
22.6966...3.18833...
32.7953.2866...
42.8933...3.385
52.99166...3.4833...
63.093.58166...
73.18833...3.68
83.2866...3.77833...
93.3853.8766...
103.4833...3.975
113.58166...4.0733...
123.684.17166...
133.77833...4.27
143.8766...4.36833...
153.9754.466...
164.0733...4.565
174.17166...4.6633...
184.274.76166...
194.36833...4.86
204.466...4.95833...
214.5655.0566...
224.6633...5.155
黄霊-1.032.83.29166...
赤霊-1.0366...3.23.69166...

EXアタック

発生限界

キャラENHLEx
霊夢910111213
魔理沙89101112
咲夜*11112131415
妖夢2022242628
鈴仙1516171819
チルノ2527293133
リリカ910111213
メルラン10111213-
ルナサ10なし-
ミスティア910111213
てゐ1011121314
2021222324
メディスン1011121314
幽香1011121314
小町910111213
四季映姫1011121314

これに加え、1P2Pあわせて255という上限もある。

出現範囲

灰色の部分が出現範囲。黒い点は相手自機。たぶん間違いも含んでます。

キャラ出現範囲画像
霊夢([-136, 136], [0, 128])rm_rs_ay_yu.png
鈴仙
幽香
魔理沙([-136, 136], 448)mr.png
咲夜自機座標-
妖夢相手自機座標 + ([-128, 128], [-128, 128])ym.png
チルノ(相手自機x座標 + [-32, 32], 0)cr.png
リリカ([-136, 136], [128, 328])lr.png
メルラン([-136, 136], [32, 160])ml.png
ルナサ([-136, 136], [200, 328])ln.png
ミスティア(-144 or 144, [0, 320])ms.png
てゐ([-80, 80], [0, 128])tw.png
メディスン([-120, 120], [192, 448])md.png
小町([-136, 136], [32, 176])km.png
四季映姫([-120, 120], [128, 256])ei.png

リリーの持つアイテム

左右のリリーともに一緒。

対戦が始まって最初に出てくるリリーの持つアイテムのみ全種類からランダムに選ばれる。以降のリリーの持つアイテムは、前回出現したリリーの持っていたものを除いた三種類から選ばれるが、その確率は均等に1/3になっておらず、一つが1/2、残り二つが1/4と偏っている。はず。理屈の上ではそうなりますが、ほんとか?

前回のアイテム持ってくる確率
[G][弾][EX][点]
なし*21/41/41/41/4
[G]01/21/41/4
[弾]1/401/21/4
[EX]1/41/401/2
[点]1/21/41/40

リリーが持つアイテムを決めるところのコードはこんな感じ。

アイテム = rand () % 4;
if (アイテム == 前回のアイテム)
  {
    ++アイテム;
    if (アイテム >= 4)
      アイテム = 0;
  }

アイテム・前回のアイテムの値と実際のアイテムの対応はこう。

0
[G]
1
[弾]
2
[EX]
3
[点]

前回のアイテムは、対戦を開始する時にだけ-1で初期化される。ラウンド2、ラウンド3…へと突入しても再初期化されない。

ついでに、ボスが落とすアイテムはリリーとかとは無関係にランダム。

StoryとExtraのランク

厳密には調べてないけれど、とりあえず。

ラウンド終了の度に~と書いてあるものは、STAGEを越すとリセットされる。

初期値

Easy
STAGE / 3 (少数点以下繰り上げ)
Normal
STAGE
Hard
STAGE + 2
Lunatic
STAGE + 4
Extra
18 (固定)

ラウンド終了の度に-2。マッチモードとは異なり、ラウンド終了時のランクの影響はない。

上限

Easy
STAGE / 2 + 5 (少数点以下繰り上げ)
Normal
STAGE + 9
Hard
STAGE / 2 + 14 (少数点以下繰り上げ)
Lunatic
STAGE / 2 + 16 (少数点以下繰り上げ)
Extra
22 (固定)

初期値・上限の表

STAGEEasyNormalHardLunaticExtra
初期上限初期上限初期上限初期上限初期上限
1161103156171822
221147
37312516818
4241369
585147171019
6615811
7397169181220
88171013
91091811191421

上昇速度

Easy
30秒
Normal
20秒
Hard
15秒
Lunatic
12秒
Extra
10秒

ラウンド終了の度に+10秒。Lunaticでは1ラウンド目終了時のみ+13秒。

自機の移動速度

../自機の移動速度

当たり判定

『アル花ディア~東方花映塚攻略のススメ~』(弾幕研究室)に提供していた情報。誌面に掲載されなかった画像も。

ダブルスポイラーメモ輝針城解析メモの当たり判定画像は自機座標に対する判定である点、比較する場合は注意してほしい。

矩形

自機

霊夢以外のキャラの間にも僅かながら格差がある。

種類幅x高さ参考画像備考
霊夢2.0x2.0hit-sq-self-02.0.png
てゐ

メディスン
幽香
小町
映姫
2.2x2.2hit-sq-self-02.2.png
魔理沙
咲夜
妖夢
鈴仙
チルノ
リリカ
メルラン
ルナサ
ミスティア
2.3x2.3hit-sq-self-02.3.png

種類幅x高さ参考画像備考
白弾4.0x4.0hit-sq-04.0-shiro.png
米粒弾4.0x4.0hit-sq-04.0-kome.png氷弾も同じ
鱗弾4.0x4.0hit-sq-04.0-uroko.png
札弾4.0x4.0hit-sq-04.0-fuda.png
星弾4.0x4.0hit-sq-04.0-star.png
銃弾4.0x4.0hit-sq-04.0-gun.png
銭弾4.0x4.0hit-sq-04.0-zeni.png
ナイフ弾5.0x5.0hit-sq-05.0-knife.png
音符弾5.0x5.0hit-sq-05.0-note.png
蝶弾5.0x5.0hit-sq-05.0-chou.png
楕円弾5.0x5.0hit-sq-05.0-ellipse.png
卒塔婆弾5.0x5.0hit-sq-05.0-sotoba.png
小弾6.0x6.0hit-sq-06.0-small.png
刀弾8.0x8.0hit-sq-08.0-katana.png
中弾10.0x10.0hit-sq-10.0-middle.png
アイシクルフォール6.0x32.0hit-sq-06.0x32.0-cirno.png

ショットに対する敵の当たり判定は、この1.5倍の大きさとなる。

種類幅x高さ参考画像備考
緑幽霊16.0x16.0hit-sq-16.0-ghost1-green.png hit-sq-16.0-ghost2-green.png活性・未活性ともに同じ
黄幽霊16.0x16.0hit-sq-16.0-ghost1-yellow.png hit-sq-16.0-ghost2-yellow.png見た目は緑幽霊より大きいが、当たり判定は同じ
赤幽霊16.0x16.0hit-sq-16.0-ghost1-red.png hit-sq-16.0-ghost2-red.png見た目は緑幽霊より大きいが、当たり判定は同じ
青妖精16.0x16.0hit-sq-16.0-fairy-blue.png
赤妖精18.67x18.67hit-sq-18.67-fairy-red.png
大妖精19.33x19.33hit-sq-19.33-fairy-big.png
緑妖精21.33x21.33hit-sq-21.33-fairy-green.png見た目は大>>赤>青だが、当たり判定は>大>赤>青
リリーホワイト24.0x24.0hit-sq-24.0-lily-white.pngリリーブラックも同じ
ボス32.0x21.33hit-sq-32.0x21.33-boss-eiki.png

レーザー

レーザーに対する自機の判定は、レーザーの傾きと同じだけ傾いた矩形。こんな風に:
hit-ls-sample.png

種類参考画像備考
アースライトレイ8.0hit-ls-08.0-marisa-blue-2f.png hit-ls-08.0-marisa-green-10f.png hit-ls-08.0-marisa-red-31f.png hit-ls-08.0-marisa-ex-14f.pngボスアタックの赤青レーザーのみ傾く
ラストジャッジメント(サイド)8.0hit-ls-08.0-eiki-bluered.png
ラストジャッジメント(メイン)32.0hit-ls-32.0-eiki-center.png

円形

自機

種類半径参考画像備考
霊夢2.0hit-ci-self-02.0.png
てゐ

メディスン
幽香
小町
映姫
2.2hit-ci-self-02.2.png
魔理沙
咲夜
妖夢
鈴仙
チルノ
リリカ
メルラン
ルナサ
ミスティア
2.3hit-ci-self-02.3.png

種類半径参考画像備考
天狗烈風弾12.0hit-ci-12.0-aya.png
アナザーマーダー12.0hit-ci-12.0-sakuya.png5個の円判定で構成される
兎玉13.0hit-ci-13.0-tewi.png
未断の魂14.0hit-ci-14.0-youmu.png
陰陽玉18.0hit-ci-18.0-reimu.png半径は見た目の約半分
幻想春花(小)18.0hit-ci-18.0-yuka-small.png
幻想春花(大)28.0hit-ci-28.0-yuka-big.png
メタフィジカルマインド44.0hit-ci-44.0-reisen.png4.18~44.0 dot、半径は見た目の80%

その他

種類半径参考画像備考
弾幕裁判32.0hit-ci-ex-32.0-eiki.png弾の座標と重なると卒塔婆弾が発生
スウィートポイズン64.0hit-ci-ex-64.0-medi.png自機の座標とN枚重なると移動速度0.4^N倍

*1 アナザーマーダー1本につき2消費。残量が1の時は敵陣に侵入しても透明なままで当たり判定のないアナザーマーダーが出現。
*2 最初のリリーの場合に限り