etc/知識/輝針城解析メモ

Last-modified: 2016-03-20 (日) 15:48:09
2016/03/20
負のSCBによるスコアの負のオーバーフローを追加
弦楽「嵐のアンサンブル」・弦楽「浄瑠璃世界」の制限時間について備考を追記(また変更するかも)
2013/09/07
咲夜の高速移動速度修正

自機性能

霊夢魔理沙咲夜
移動速度高速4.5 dot/f5.0 dot/f4.5 dot/f
低速2.0 dot/f
当たり判定対円形(半径2.0 dot)(半径3.0 dot)
対矩形2.0x2.03.0x3.0
対レーザー(2.0x2.0)(3.0x3.0)

当たり判定

円形

一応内部では、円形判定に対する自機の当たり判定は、霊夢が半径2.0 dotの円・魔理沙と咲夜が半径3.0 dotの円となっているが、円形衝突判定が微妙に狂っているため実際のところは誤差が生じており、しかも対象の判定が大きくなるほど機体間の差は小さくなる。
当たり判定を厳密に示す上でその問題を解消するために、自機の当たり判定を自機の中心点と想定した上で当たり判定画像を霊夢用とそれ以外用の2種類用意した。ただし独断と偏見によって、見た目には殆ど大きさに違いのなくなる半径7.0 dot以上の弾についてはそれを省いた。

全てかすり判定あり。

種類半径当たり判定画像備考
霊夢魔理沙・咲夜
粒弾2.4h01-02.4-tsubu-r.pngh01-02.4-tsubu-ms.png6面ボス通常攻撃1など
米粒弾2.4h02-02.4-kome-r.pngh02-02.4-kome-ms.png
氷弾2.4h03-02.4-ice-r.pngh03-02.4-ice-ms.pngチルノなど
鱗弾2.4h04-02.4-uroko-r.pngh04-02.4-uroko-ms.png1面ボスなど
クナイ弾2.4h05-02.4-kunai-r.pngh05-02.4-kunai-ms.png「ホップオマイサムセブン」系列など
銃弾2.4h06-02.4-gun-r.pngh06-02.4-gun-ms.png死鼓「ランドパーカス」など
ウィルス弾2.4h07-02.4-virus-r.pngh07-02.4-virus-ms.png「進撃の小人」系列のみ?
小弾4.0h08-04.0-small-r.pngh08-04.0-small-ms.png
矢弾4.0h09-04.0-arrow-r.pngh09-04.0-arrow-ms.png逆弓「天壌夢弓」系列のみ?
音符弾4.0h10-04.0-note-r.pngh10-04.0-note-ms.png4A,4B面ボスなど
休符弾5.0h11-05.0-rest-r.pngh11-05.0-rest-ms.png
ナイフ弾6.0h12-06.0-knife-r.pngh12-06.0-knife-ms.png妖剣「輝針剣」系列など
炎弾6.0h13-06.0-fire-r.pngh13-06.0-fire-ms.png3面ボスの弾は狼符「スターリングパウンス」系列のみ小弾ではなくこれ
4.0h14-04.0-fire-r.pngh14-04.0-fire-ms.png逆符「天地有用」系列、6面ボス通常攻撃2はこの小判定ver.
楕円弾7.0h15-07.0-ellipse-ms.png飛符「フライングヘッド」系列など
中弾8.5h16-08.5-middle-ms.png
拡大ナイフ弾9.0h17-09.0-bigknife-ms.pngこの大きさは妖剣「輝針剣」系列のみ?
光弾12.0h18-12.0-light-ms.png「ホップオマイサムセブン」系列など

被ダメージ判定も大きさは違うが円形。
取りこぼしの可能性あり。

種類半径当たり判定画像備考
霊夢魔理沙・咲夜
6.0he01-06.0-head-r.pnghe01-06.0-head-ms.png2面(中)ボスのみ
怨霊8.0he03-08.0-soul-ms.png
陰陽玉8.0he04-08.0-inyan-ms.png
妖精8.0he02-08.0-fairy-ms.png
中妖精8.0he05-08.0-mfairy-ms.png
12.0he06-12.0-mfairy-ms.png1面道中全方位米粒弾ザコ
大妖精12.0he07-12.0-bfairy-ms.png
8.0he08-08.0-bfairy-ms.png5面道中回転楕円弾ザコ、Ex道中
ボス20.0he09-20.0-boss-ms.pngチルノ、2面(中)ボスのみ
24.0he10-24.0-boss-ms.png↑以外全て

小槌「お前が大きくなあれ」系列

内部では自機の当たり判定(半径)が10.8倍され、霊夢が21.6 dot・魔理沙と咲夜が32.4 dotということになっている。ここまで拡大されて10 dot以上の差がついてしまえば、でかい弾を相手にしても判定の差は一目で分かるようになる。

種類半径当たり判定画像備考
霊夢魔理沙・咲夜
クナイ弾2.4hb01-02.4-kunai-r.pnghb01-02.4-kunai-ms.png魔理沙・咲夜のときの判定は霊夢のときのボス判定とほぼ等しい
巨大ナイフ弾10.8hb02-10.8-knife-r.pnghb02-10.8-knife-ms.png
ボス24.0hb03-24.0-boss-r.pnghb03-24.0-boss-ms.png

矩形

矩形に対する自機の判定は、対象の傾きと同じ傾きの正方形。辺の長さは霊夢が2.0 dot、魔理沙・咲夜が3.0dot。
矩形の方は円形のような衝突判定処理の狂いはないが、当たり判定画像を円形判定のものと統一させたい都合上、円形判定と同じく自機の当たり判定を中心点と想定したものとした。太鼓ってでかいから見分けつかないけど。
レーザー以外の矩形判定は太鼓だけのようだ。

種類幅x高さ当たり判定画像備考
霊夢魔理沙・咲夜
太鼓32.0x40.0hr01-32.0x40.0-drum-r.pnghr01-32.0x40.0-drum-ms.png

レーザー

自機の判定は矩形のときと同じ模様。

ボス形態別詳細

初期位置や中心を表す座標の原点は画面上端中央。
ボスの移動法則はダブルスポイラーと同じ。他のシリーズまでは知らない。
制限時間は秒。移動の初速はdot/f、時間はf。

Stage場面制限時間耐久力初期位置移動範囲移動備考
中心幅x高さ初速時間
1中ボス通常攻撃1249000(0,128)(0,128)280x2561.060H,Lは耐久力7000
氷符「アルティメットブリザード」系列259100(0,144)(0,128)280x2561.060H,Lのみ
ボス通常攻撃1359800(0,128)(0,128)280x642.030
水符「テイルフィンスラップ」系列4010500(0,128)(0,128)240x642.060
ボス通常攻撃2359500そのまま(0,128)280x962.030
水符「スケールウェイブ」系列4013300(0,192)(0,192)280x560.860初速2.0時間60の移動がEN:1、H:2、L:3回
2中ボス通常攻撃12810100(0,128)(0,128)280x480.8120怨霊の耐久力200
飛符「フライングヘッド」系列3213300(0,144)不動-首の耐久力5000、破壊しても補給される
ボス通常攻撃13811000(0,128)(0,128)280x640.8120Hは移動時間80、Lは60
首符「クローズアイショット」系列389800(0,144)不動-首は破壊不可
ボス通常攻撃23811000そのまま(0,128)280x640.8120
飛頭「マルチプリケイティブヘッド」系列3813300(0,144)不動-首の耐久力は正面10000、それ以外2100
飛頭「デュラハンナイト」系列4514700(0,160)(0,128)280x641.0100首は破壊不可
3中ボス通常攻撃13011000(0,128)(0,128)280x640.460
中ボス通常攻撃2309000そのまま(0,128)280x640.460E,Nのみ
牙符「月下の犬歯」系列3413300(0,144)不動-H,Lのみ
ボス通常攻撃14010000(0,128)(0,128)280x640.460
変身「トライアングルファング」系列4011200(0,144)特殊-
ボス通常攻撃24510000(0,128)(0,128)280x960.460
咆哮「ストレンジロア」系列4014700(0,144)不動-
ボス通常攻撃34010000(0,128)(0,128)280x960.460
狼符「スターリングパウンス」系列5012600(140,96)特殊-
4A中ボス通常攻撃13013000(0,128)(0,128)280x640.460
中ボス通常攻撃2309000そのまま(0,128)280x640.460
ボス通常攻撃14013000(0,128)(0,128)280x640.4604Bより耐久力2000多い
平曲「祇園精舎の鐘の音」系列4016100(0,144)(0,128)280x641.060
ボス通常攻撃24510000(0,128)(0,128)280x640.460
怨霊「耳無し芳一」系列4016100(0,144)(0,128)280x642.060
ボス通常攻撃34514000(0,128)(0,128)280x640.4604Bより耐久力4000多い、制限時間5秒長い
楽符「邪悪な五線譜」系列5019600(0,96)(0,128)280x641.0604Bより耐久力2100多い
4B中ボス通常攻撃13013000(0,128)(0,128)280x640.460
中ボス通常攻撃2309000そのまま(0,128)280x640.460
ボス通常攻撃14011000(0,128)(0,128)280x640.4604Aより耐久力2000少ない
琴符「諸行無常の琴の音」系列4016100(0,144)(0,128)280x640.460
ボス通常攻撃24510000(0,128)(0,128)280x641.060
響符「平安の残響」系列4016100(0,144)(0,144)280x800.860
ボス通常攻撃34010000(0,128)(0,128)280x641.0604Aより耐久力4000少ない、制限時間5秒短い
箏曲「下克上送箏曲」系列5017500(140,128)特殊-4Aより耐久力2100少ない 移動:(140,128)⇔(-140,128)
5中ボス通常攻撃12511000(0,128)(0,128)280x641.060
欺符「逆針撃」系列2515400(0,160)(0,128)280x641.060
ボス通常攻撃13511000(0,128)(0,128)280x641.060
逆符「鏡の国の弾幕」系列3518200(0,144)(0,128)280x640.660
ボス通常攻撃23511000(0,128)(0,128)280x961.060
逆符「天地有用」系列3514700(0,144)(0,128)280x2560.660炎弾小判定ver.
ボス通常攻撃33510000(0,128)不動-
逆弓「天壌夢弓」系列3521000(0,144)(0,128)280x1281.060
逆転「リバースヒエラルキー」系列5018900(0,192)不動-
6中ボス通常攻撃12511000(0,128)(0,128)280x641.060
中ボス通常攻撃23513000(0,128)不動-
ボス通常攻撃13511000(0,128)(0,128)280x641.060
小弾「小人の道」系列4521000(0,144)不動-
ボス通常攻撃25030000(0,128)不動-はじめお椀付き 段階移行:与ダメ12800(42.7%) 炎弾小判定ver.
小槌「大きくなあれ」系列4519600(0,128)(0,128)280x640.660
ボス通常攻撃35018000(0,128)特殊-お椀付き 移動:(0,128)→(128,244)→(-128,244) →(0,160)→(128,244)→...
妖剣「輝針剣」系列4528000(0,144)不動-お椀付き
ボス通常攻撃45018000(0,128)(0,128)280x2561.060
小槌「お前が大きくなあれ」系列457(0,128)不動-
「進撃の小人」系列6021000(0,128)不動-
「ホップオマイサムセブン」系列12056000(0,128)不動-お椀付き 段階移行:与ダメ10500→32900 (18.75%→58.75%)
Ex中ボス通常攻撃1右5011000(64,128)(0,128)280x640.460移動タイミングは異なる 要両方撃破
〃左5011000(-64,128)(0,128)280x640.460
弦楽「嵐のアンサンブル」右4016800(32,128)不動-残2秒で終了するため制限時間は実質38秒
〃左4016800(-32,128)不動-
弦楽「浄瑠璃世界」右4021000(128,160)不動-残2秒で終了するため制限時間は実質38秒
スペプラは耐久力16800(4/5)
〃左4021000(-128,160)不動-
ボス通常攻撃15010000(0,128)(0,128)280x641.060
一鼓「暴れ宮太鼓」5014700(0,144)(0,128)280x640.660太鼓の耐久力500
ボス通常攻撃25011000(0,128)(0,128)280x641.060
二鼓「怨霊アヤノツヅミ」5021000(0,144)(0,128)280x640.660
ボス通常攻撃35011000(0,128)(0,128)280x641.060
三鼓「午前零時のスリーストライク」5016100(0,144)(0,128)280x640.660
ボス通常攻撃45011000(0,128)(0,128)280x641.060
死鼓「ランドパーカス」5024500(0,144)(0,128)280x640.660
ボス通常攻撃55011000(0,128)(0,128)280x641.060
五鼓「デンデン太鼓」5023100(0,144)(0,128)160x640.660
ボス通常攻撃65011000(0,128)(0,128)160x641.060
六鼓「オルタネイトスティッキング」5021000(0,144)特殊-移動:(56.66,224)⇔(-56.67,224)
ボス通常攻撃75010000(0,128)(0,128)280x641.060
七鼓「高速和太鼓ロケット」5024500(0,144)(0,128)160x640.660
ボス通常攻撃85010000(0,128)(0,128)160x641.060
八鼓「雷神の怒り」5024500(0,144)(0,128)160x640.660
「ブルーレディショー」7528000(0,128)不動-
「プリスティンビート」12056000(0,144)(0,128)280x640.660段階移行:与ダメ12600→25200→37800→50400 (22.5%→45%→67.5%→90%)

ランダム移動範囲一覧

(0,128)280x256 : 1面中ボス通常攻撃1など
bm01_(0,128)280x256.png
(0,128)280x64 : 1面ボス通常攻撃1など
bm02_(0,128)280x64.png
(0,128)240x64 : 水符「テイルフィンスラップ」系列のみ
bm03_(0,128)240x64.png
(0,128)280x96 : 1面ボス通常攻撃2など
bm04_(0,128)280x96.png
(0,192)280x56 : 水符「スケールウェイブ」系列のみ
bm05_(0,192)280x56.png
(0,128)280x48 : 2面中ボス通常攻撃1のみ
bm06_(0,128)280x48.png
(0,144)280x80 : 響符「平安の残響」系列のみ
bm07_(0,144)280x80.png
(0,128)280x128 : 逆弓「天壌夢弓」系列のみ
bm08_(0,128)280x128.png
(0,128)160x64 : 五鼓「デンデン太鼓」など
bm09_(0,128)160x64.png

スペルカード詳細

制限時間が↑と被ってるけど別にいいよね。
東方Project攻略Wikiの情報に感謝。

Easy

StageNo.名称制限時間SCB備考
初期値減少レート残0秒
13水符「テイルフィンスラップ」403000000960984000
7水符「スケールウェイブ」403000000960984000
211飛符「フライングヘッド」32600000024701998600
15首符「クローズアイショット」38600000020202000400
19飛頭「マルチプリケイティブヘッド」38600000020202000400
23飛頭「デュラハンナイト」45600000016701992000
329変身「トライアングルファング」40900000028602994000
33咆哮「ストレンジロア」40900000028602994000
37狼符「スターリングパウンス」50900000022302979000
4A41平曲「祇園精舎の鐘の音」401200000038103999000
45怨霊「耳無し芳一」401200000038103999000
49楽符「邪悪な五線譜」501200000029703981000
4B53琴符「諸行無常の琴の音」401200000038103999000
57響符「平安の残響」401200000038103999000
61箏曲「下克上送箏曲」501200000029703981000
565欺符「逆針撃」251500000083404992000
69逆符「鏡の国の弾幕」351500000055604992000
73逆符「天地有用」351500000055604992000
77逆弓「天壌夢弓」351500000055604992000
81逆転「リバースヒエラルキー」501500000037104983000
685小弾「小人の道」451800000050006000000
89小槌「大きくなあれ」451800000050006000000
93妖剣「輝針剣」451800000050006000000
97小槌「お前が大きくなあれ」4518000000--
101「進撃の小人」601800000036405988000
105「ホップオマイサムセブン」1201800000017405994000

Normal

StageNo.名称制限時間SCB備考
初期値減少レート残0秒
14水符「テイルフィンスラップ」40500000015901661000
8水符「スケールウェイブ」40500000015901661000
212飛符「フライングヘッド」32800000033002654000
16首符「クローズアイショット」38800000027002654000
20飛頭「マルチプリケイティブヘッド」38800000027002654000
24飛頭「デュラハンナイト」45800000022302648000
330変身「トライアングルファング」401100000035003650000
34咆哮「ストレンジロア」401100000035003650000
38狼符「スターリングパウンス」501100000027203656000
4A42平曲「祇園精舎の鐘の音」401400000044504655000
46怨霊「耳無し芳一」401400000044504655000
50楽符「邪悪な五線譜」501400000034604658000
4B54琴符「諸行無常の琴の音」401400000044504655000
58響符「平安の残響」401400000044504655000
62箏曲「下克上送箏曲」501400000034604658000
566欺符「逆針撃」251700000094505660000
70逆符「鏡の国の弾幕」351700000063005660000
74逆符「天地有用」351700000063005660000
78逆弓「天壌夢弓」351700000063005660000
82逆転「リバースヒエラルキー」501700000042005660000
686小弾「小人の道」452000000055606656000
90小槌「大きくなあれ」452000000055606656000
94妖剣「輝針剣」452000000055606656000
98小槌「お前が大きくなあれ」4520000000--
102「進撃の小人」602000000040406668000
106「ホップオマイサムセブン」1202000000019406614000

Hard

StageNo.名称制限時間SCB備考
初期値減少レート残0秒
11氷符「アルティメットブリザード」25700000038902332000
5水符「テイルフィンスラップ」40700000022302317000
9鱗符「逆鱗の荒波」40700000022302317000
213飛符「フライングヘッド」321000000041203325600
17首符「ろくろ首飛来」381000000033703327400
21飛頭「セブンズヘッド」381000000033703327400
25飛頭「デュラハンナイト」451000000027803328000
327牙符「月下の犬歯」341300000049804334800
31変身「スターファング」401300000041304327000
35咆哮「満月の遠吠え」401300000041304327000
39天狼「ハイスピードパウンス」501300000032104333000
4A43平曲「祇園精舎の鐘の音」401600000050805332000
47怨霊「平家の大怨霊」401600000050805332000
51楽符「凶悪な五線譜」501600000039505335000
4B55琴符「諸行無常の琴の音」401600000050805332000
59響符「エコーチェンバー」401600000050805332000
63箏曲「下克上レクイエム」501600000039505335000
567欺符「逆針撃」2519000000105606328000
71逆符「イビルインザミラー」351900000070406328000
75逆符「天下転覆」351900000070406328000
79逆弓「天壌夢弓の詔勅」351900000070406328000
83逆転「チェンジエアブレイブ」501900000047006310000
687小弾「小人の茨道」452200000061207312000
91小槌「もっと大きくなあれ」452200000061207312000
95妖剣「輝針剣」452200000061207312000
99小槌「お前が大きくなあれ」4522000000--
103「ウォールオブイッスン」602200000044507315000
107「七人の一寸法師」1202200000021307303000

Lunatic

StageNo.名称制限時間SCB備考
初期値減少レート残0秒
12氷符「アルティメットブリザード」25900000050003000000
6水符「テイルフィンスラップ」40900000028602994000
10鱗符「逆鱗の大荒波」40900000028602994000
214飛符「フライングヘッド」321200000049403997200
18首符「ろくろ首飛来」381200000040404000800
22飛頭「ナインズヘッド」381200000040404000800
26飛頭「デュラハンナイト」451200000033403984000
328牙符「月下の犬歯」341500000057504995000
32変身「スターファング」401500000047704983000
36咆哮「満月の遠吠え」401500000047704983000
40天狼「ハイスピードパウンス」501500000037104983000
4A44平曲「祇園精舎の鐘の音」401800000057205988000
48怨霊「平家の大怨霊」401800000057205988000
52楽符「ダブルスコア」501800000044505985000
4B56琴符「諸行無常の琴の音」401800000057205988000
60響符「エコーチェンバー」401800000057205988000
64箏曲「下克上レクイエム」501800000044505985000
568欺符「逆針撃」2521000000116706996000
72逆符「イビルインザミラー」352100000077806996000
76逆符「天下転覆」352100000077806996000
80逆弓「天壌夢弓の詔勅」352100000077806996000
84逆転「チェンジエアブレイブ」502100000051906987000
688小弾「小人の茨道」452400000066707992000
92小槌「もっと大きくなあれ」452400000066707992000
96妖剣「輝針剣」452400000066707992000
100小槌「お前が大きくなあれ」4524000000--
104「ウォールオブイッスン」602400000048507995000
108「七人の一寸法師」1202400000023207992000

Extra

StageNo.名称制限時間SCB備考
初期値減少レート残0秒
Ex109弦楽「嵐のアンサンブル」402900000092109659000残2秒で終了するため制限時間は実質38秒
110弦楽「浄瑠璃世界」402900000092109659000
111一鼓「暴れ宮太鼓」502900000071609668000
112二鼓「怨霊アヤノツヅミ」502900000071609668000
113三鼓「午前零時のスリーストライク」502900000071609668000
114死鼓「ランドパーカス」502900000071609668000
115五鼓「デンデン太鼓」502900000071609668000
116六鼓「オルタネイトスティッキング」502900000071609668000
117七鼓「高速和太鼓ロケット」502900000071609668000
118八鼓「雷神の怒り」502900000071609668000
119「ブルーレディショー」7529000000--
120「プリスティンビート」1202900000028109611000

負のSCBによるスコアの負のオーバーフロー

SCBの減少については2013年当時に調査済みであったため、大して役には立たないがSCBとスコアの計算処理に絞った解説を。ただ「負のオーバーフロー」という現象自体についてはあんまり詳しくないので説明が不充分でしょう。
以下の擬似コードは輝針城のサブルーチンの一部を抜き出したもので、厳密にはこの通りに行われるわけではない。整数除算はCのように毎回小数点以下が切り捨てられるものと見なしてください。

毎フレームのSCB減少は0041c5e5、SCBの回収は0041d4b9がそのアドレス(1.00b)。

参考
【TAS】東方輝針城 Lunatic 咲夜A 9,999,999,990

毎フレームのSCB減少

暫定SCB減少量 = (初期SCB - 初期SCB / 3) / (初期残フレーム数 - 300);
次フレームのSCB = (現在SCB - 暫定SCB減少量) - (現在SCB - 暫定SCB減少量) % 10;
  • 「暫定SCB減少量」は実際の減少量ではない。「次フレームのSCB」が負の数でない場合は暫定SCB減少量の一の位を繰り上げた値が、負の数の場合は逆に切り捨てた値が実際の減少量になる。
  • 例を挙げると、テイルフィンスラップN(暫定SCB減少量=1587)のSCBの推移は「5000000 => 4998410 => ... => 2630 => 1040 => -540 => -2120」となる。
  • 怨霊アヤノツヅミ(暫定SCB減少量=7160)などは暫定SCB減少量の一の位が0であり、この場合SCBの正負で実際の減少量が変化しないため、SCBは「29000000 => 28992840 => ... => 9160 => 2000 => -5160 => -12320」と推移する。
  • …つらつらと書いたは書いたがTAS作成にすら役に立ちそうにない蛇足情報。

SCBの回収

スコア += 現在SCB / 10;
if (スコア >= 1000000000)
  スコア = 999999999;
  • 「スコア」には表示上のスコア/10の値が格納されており、「現在SCB / 10」はそれに桁を合わせるための処理。SCBの一の位は必ず0なので切り捨ては発生しない。
  • 「スコア」は32bit符号なし整数型、「現在SCB」は32bit符号付き整数型である。スコアの負のオーバーフローが発生する例として、スコア=11000(表示上は110000)、現在SCB=-120000のとき(参考動画はこんな感じの状況)、スコアに加算される値は-120000/10=-12000。これが32bit符号なし整数型への型変換によって0xffffd120=4294955296と見なされて11000+4294955296=4294966296、これは2^32未満なのでオーバーフローせず、かつ1000000000以上なので最後にスコアへ999999999が代入され、表示上は9,999,999,990点となる。
  • SCB回収時にスコアが負のオーバーフローを起こす条件は「表示上のスコア + 現在SCB < 0」であること。「表示上のスコアより絶対値の大きい負のSCBの回収」とも言い換えられる。厳密に表現するなら「SCB回収と同フレームの撃ち込み点等を加味した内部スコア + 現在SCB / 10 < 0」か。