独り善がりでいいや、もう。
永夜抄はどうした!
コードはJavascript風。
- 速度の単位
- ドット毎フレーム
- 加速度の単位
- ドット毎フレーム毎フレーム
- 陣の座標
- 左上隅
- (-144, 0)
- 右上隅
- (144, 0)
- 左下隅
- (-144, 448)
- 右下隅
- (144, 448)
- 方向
- 右
- 0°
- 下
- 90°
- 左
- 180°
- 上
- 270°
- [a, b]
- a以上b以下の実数乱数
弾数限界
一方の陣に現れる弾幕アタック(弾ポイントの白弾、送り返し白弾&大型弾)と弾アイテムの大型弾と霊の自爆撃ち返し弾の合計の上限は175発。それ以外(カードアタック、ボスカードアタック、リリーの吐く弾、まだある?)の合計の上限は360発。
リリカ、メルラン、ルナサ、ミスティアのEXアタックは弾幕アタック扱い、小町のEXアタックはそれ以外扱い。その他のEXアタックはどちらにもカウントされていない。
- 合計最高175発
- 弾ポイントの白弾
- 送り返し白弾&大型弾
- 弾アイテムの大型弾
- 霊の自爆撃ち返し弾
- リリカ、メルラン、ルナサ、ミスティアのEXアタック
- ミスティアのカードアタック、ボスカードアタック(緑大型弾除く)
- 及び、以上の弾が弾幕裁判に重なったことにより発射された卒塔婆弾
- 合計最高360発
- カードアタック
- ボスカードアタック
- リリーの吐く弾
- 小町のEXアタック
- 及び、以上の弾が弾幕裁判に重なったことにより発射された卒塔婆弾
爆風の見た目
これは全然解析じゃない。
種類 | 持続時間 | 直径 | |
---|---|---|---|
妖精 | 小 | 10 | 92 |
小+ | 12 | 116 | |
中 | 12 | 124 | |
大 | 13 | 136 | |
幽霊 | 未活性 | 8 | 48 |
緑 | 10 | 92 | |
黄 | 12 | 104 | |
赤 | 12 | 124 |
妖精列の出現パターン
- (-64, 0) -> (144, 136)
- (-128, 0) -> (144, 76)
- (-48, 0) -> (-144, 300)
- (-12, 0) -> (-144, 300)
- (-128, 448) -> (144, 372)
- (-144, 124) -> (144, 124)
- (-144, 192) -> (144, 192)
- (-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だと思う。 // 少しだけしか調べていないが。 }
ポイントによる白弾の速度
ランク | E | N | H | L | Ex |
---|---|---|---|---|---|
1 | 0.94 | 1.15 | 1.38 | 1.41 | 1.64 |
2 | 0.98 | 1.2 | 1.46 | 1.52 | 1.68 |
3 | 1.02 | 1.25 | 1.54 | 1.63 | 1.72 |
4 | 1.06 | 1.3 | 1.62 | 1.74 | 1.76 |
5 | 1.1 | 1.35 | 1.7 | 1.85 | 1.8 |
6 | 1.14 | 1.4 | 1.78 | 1.96 | 1.84 |
7 | 1.18 | 1.45 | 1.86 | 2.07 | 1.88 |
8 | 1.22 | 1.5 | 1.94 | 2.18 | 1.92 |
9 | 1.26 | 1.55 | 2.02 | 2.29 | 1.96 |
10 | 1.3 | 1.6 | 2.1 | 2.4 | 2.0 |
11 | 1.34 | 1.65 | 2.18 | 2.51 | 2.04 |
12 | 1.38 | 1.7 | 2.26 | 2.62 | 2.08 |
13 | 1.42 | 1.75 | 2.34 | 2.73 | 2.12 |
14 | 1.46 | 1.8 | 2.42 | 2.84 | 2.16 |
15 | 1.5 | 1.85 | 2.5 | 2.95 | 2.2 |
16 | 1.54 | 1.9 | 2.58 | 3.06 | 2.24 |
17 | 1.58 | 1.95 | 2.66 | 3.17 | 2.28 |
18 | 1.62 | 2.0 | 2.74 | 3.28 | 2.32 |
19 | 1.66 | 2.05 | 2.82 | 3.39 | 2.36 |
20 | 1.7 | 2.1 | 2.9 | 3.5 | 2.4 |
21 | 1.74 | 2.15 | 2.98 | 3.61 | 2.44 |
22 | 1.78 | 2.2 | 3.06 | 3.72 | 2.48 |
弾アイテムによる大型弾の速度
ランク | E | N | H | L | Ex |
---|---|---|---|---|---|
1 | 0.94 | 1.15 | 1.38 | 1.8 | 1.58 |
2 | 0.98 | 1.2 | 1.46 | 1.9 | 1.66 |
3 | 1.02 | 1.25 | 1.54 | 2.0 | 1.74 |
4 | 1.06 | 1.3 | 1.62 | 2.1 | 1.82 |
5 | 1.1 | 1.35 | 1.7 | 2.2 | 1.9 |
6 | 1.14 | 1.4 | 1.78 | 2.3 | 1.98 |
7 | 1.18 | 1.45 | 1.86 | 2.4 | 2.06 |
8 | 1.22 | 1.5 | 1.94 | 2.5 | 2.14 |
9 | 1.26 | 1.55 | 2.02 | 2.6 | 2.22 |
10 | 1.3 | 1.6 | 2.1 | 2.7 | 2.3 |
11 | 1.34 | 1.65 | 2.18 | 2.8 | 2.38 |
12 | 1.38 | 1.7 | 2.26 | 2.9 | 2.46 |
13 | 1.42 | 1.75 | 2.34 | 3.0 | 2.54 |
14 | 1.46 | 1.8 | 2.42 | 3.1 | 2.62 |
15 | 1.5 | 1.85 | 2.5 | 3.2 | 2.7 |
16 | 1.54 | 1.9 | 2.58 | 3.3 | 2.78 |
17 | 1.58 | 1.95 | 2.66 | 3.4 | 2.86 |
18 | 1.62 | 2.0 | 2.74 | 3.5 | 2.94 |
19 | 1.66 | 2.05 | 2.82 | 3.6 | 3.02 |
20 | 1.7 | 2.1 | 2.9 | 3.7 | 3.1 |
21 | 1.74 | 2.15 | 2.98 | 3.8 | 3.18 |
22 | 1.78 | 2.2 | 3.06 | 3.9 | 3.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以上になると赤霊を確実に上回る。
種類 | ランク | 初速 | 終速 | |
---|---|---|---|---|
最低 | 最高 | |||
緑霊 | 1 | 1.025 | 2.59833... | 3.09 |
2 | 2.6966... | 3.18833... | ||
3 | 2.795 | 3.2866... | ||
4 | 2.8933... | 3.385 | ||
5 | 2.99166... | 3.4833... | ||
6 | 3.09 | 3.58166... | ||
7 | 3.18833... | 3.68 | ||
8 | 3.2866... | 3.77833... | ||
9 | 3.385 | 3.8766... | ||
10 | 3.4833... | 3.975 | ||
11 | 3.58166... | 4.0733... | ||
12 | 3.68 | 4.17166... | ||
13 | 3.77833... | 4.27 | ||
14 | 3.8766... | 4.36833... | ||
15 | 3.975 | 4.466... | ||
16 | 4.0733... | 4.565 | ||
17 | 4.17166... | 4.6633... | ||
18 | 4.27 | 4.76166... | ||
19 | 4.36833... | 4.86 | ||
20 | 4.466... | 4.95833... | ||
21 | 4.565 | 5.0566... | ||
22 | 4.6633... | 5.155 | ||
黄霊 | - | 1.03 | 2.8 | 3.29166... |
赤霊 | - | 1.0366... | 3.2 | 3.69166... |
EXアタック
発生限界
キャラ | E | N | H | L | Ex |
---|---|---|---|---|---|
霊夢 | 9 | 10 | 11 | 12 | 13 |
魔理沙 | 8 | 9 | 10 | 11 | 12 |
咲夜*1 | 11 | 12 | 13 | 14 | 15 |
妖夢 | 20 | 22 | 24 | 26 | 28 |
鈴仙 | 15 | 16 | 17 | 18 | 19 |
チルノ | 25 | 27 | 29 | 31 | 33 |
リリカ | 9 | 10 | 11 | 12 | 13 |
メルラン | 10 | 11 | 12 | 13 | - |
ルナサ | 10 | なし | - | ||
ミスティア | 9 | 10 | 11 | 12 | 13 |
てゐ | 10 | 11 | 12 | 13 | 14 |
文 | 20 | 21 | 22 | 23 | 24 |
メディスン | 10 | 11 | 12 | 13 | 14 |
幽香 | 10 | 11 | 12 | 13 | 14 |
小町 | 9 | 10 | 11 | 12 | 13 |
四季映姫 | 10 | 11 | 12 | 13 | 14 |
これに加え、1P2Pあわせて255という上限もある。
出現範囲
灰色の部分が出現範囲。黒い点は相手自機。たぶん間違いも含んでます。
リリーの持つアイテム
左右のリリーともに一緒。
対戦が始まって最初に出てくるリリーの持つアイテムのみ全種類からランダムに選ばれる。以降のリリーの持つアイテムは、前回出現したリリーの持っていたものを除いた三種類から選ばれるが、その確率は均等に1/3になっておらず、一つが1/2、残り二つが1/4と偏っている。はず。理屈の上ではそうなりますが、ほんとか?
前回のアイテム | 持ってくる確率 | |||
---|---|---|---|---|
[G] | [弾] | [EX] | [点] | |
なし*2 | 1/4 | 1/4 | 1/4 | 1/4 |
[G] | 0 | 1/2 | 1/4 | 1/4 |
[弾] | 1/4 | 0 | 1/2 | 1/4 |
[EX] | 1/4 | 1/4 | 0 | 1/2 |
[点] | 1/2 | 1/4 | 1/4 | 0 |
リリーが持つアイテムを決めるところのコードはこんな感じ。
アイテム = 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 (固定)
初期値・上限の表
STAGE | Easy | Normal | Hard | Lunatic | Extra | |||||
---|---|---|---|---|---|---|---|---|---|---|
初期 | 上限 | 初期 | 上限 | 初期 | 上限 | 初期 | 上限 | 初期 | 上限 | |
1 | 1 | 6 | 1 | 10 | 3 | 15 | 6 | 17 | 18 | 22 |
2 | 2 | 11 | 4 | 7 | ||||||
3 | 7 | 3 | 12 | 5 | 16 | 8 | 18 | |||
4 | 2 | 4 | 13 | 6 | 9 | |||||
5 | 8 | 5 | 14 | 7 | 17 | 10 | 19 | |||
6 | 6 | 15 | 8 | 11 | ||||||
7 | 3 | 9 | 7 | 16 | 9 | 18 | 12 | 20 | ||
8 | 8 | 17 | 10 | 13 | ||||||
9 | 10 | 9 | 18 | 11 | 19 | 14 | 21 |
上昇速度
- Easy
- 30秒
- Normal
- 20秒
- Hard
- 15秒
- Lunatic
- 12秒
- Extra
- 10秒
ラウンド終了の度に+10秒。Lunaticでは1ラウンド目終了時のみ+13秒。
自機の移動速度
当たり判定
『アル花ディア~東方花映塚攻略のススメ~』(弾幕研究室)に提供していた情報。誌面に掲載されなかった画像も。
ダブルスポイラーメモと輝針城解析メモの当たり判定画像は自機座標に対する判定である点、比較する場合は注意してほしい。
矩形
自機
霊夢以外のキャラの間にも僅かながら格差がある。
弾
種類 | 幅x高さ | 参考画像 | 備考 |
---|---|---|---|
白弾 | 4.0x4.0 | ||
米粒弾 | 4.0x4.0 | 氷弾も同じ | |
鱗弾 | 4.0x4.0 | ||
札弾 | 4.0x4.0 | ||
星弾 | 4.0x4.0 | ||
銃弾 | 4.0x4.0 | ||
銭弾 | 4.0x4.0 | ||
ナイフ弾 | 5.0x5.0 | ||
音符弾 | 5.0x5.0 | ||
蝶弾 | 5.0x5.0 | ||
楕円弾 | 5.0x5.0 | ||
卒塔婆弾 | 5.0x5.0 | ||
小弾 | 6.0x6.0 | ||
刀弾 | 8.0x8.0 | ||
中弾 | 10.0x10.0 | ||
アイシクルフォール | 6.0x32.0 |
敵
ショットに対する敵の当たり判定は、この1.5倍の大きさとなる。
レーザー
レーザーに対する自機の判定は、レーザーの傾きと同じだけ傾いた矩形。こんな風に:
円形
自機
弾
種類 | 半径 | 参考画像 | 備考 |
---|---|---|---|
天狗烈風弾 | 12.0 | ||
アナザーマーダー | 12.0 | 5個の円判定で構成される | |
兎玉 | 13.0 | ||
未断の魂 | 14.0 | ||
陰陽玉 | 18.0 | 半径は見た目の約半分 | |
幻想春花(小) | 18.0 | ||
幻想春花(大) | 28.0 | ||
メタフィジカルマインド | 44.0 | 4.18~44.0 dot、半径は見た目の80% |