冠位戴冠戦のダメージを実戦ログと突き合わせた記録
FGO ダメージ計算式 完全解説 に書いた式は、本当に実戦の数字と合うのか。
このページは、冠位研鑽戦〔セイバー〕Ⅶ(冠位戴冠戦セイバー・敵 HP 3,153,860)で実際に記録した 3 バトル 9 回ぶんの攻撃ダメージと、ゲーム内部データだけから組んだ計算モデルを突き合わせた記録である。
出発点は「シミュレーターの理論値が実戦の 1/3 しか出ない」という食い違いだった。
| 値 | |
|---|---|
| 実戦の宝具ダメージ | 1,371,566 |
| 当時のシミュレーターの理論値 | 431,959 |
| 比 | ×3.18 |
乱数(0.900〜1.100)でどう転んでも ×1.22 までしか説明できない。構造的な取りこぼしが必ずある。 そこから何を見落としていたかを 1 つずつ潰していった結果が以下になる。
- 数値はすべてゲーム内部データ(Atlas Academy API の実レスポンス)と、実戦の画面表示から取ったもの。
- 検証環境の編成・所持状況は「検証ビルド」として匿名で扱う。個別のアカウント情報は載せない。
- 1 回の攻撃には ±10% の乱数が乗るので、「理論値と実測値が何%違うか」ではなく「実測値を出すのに必要な乱数が 0.900〜1.100 に収まるか」で判定する。 複数の攻撃を同じビルドで同時に説明できるかを見ると、この判定はかなり厳しい制約になる。
検証対象
| 項目 | 値 |
|---|---|
| クエスト | 冠位研鑽戦〔セイバー〕Ⅶ |
| 編成制約 | グランドセイバー 1 騎必須 / 〔セイバー〕クラスのみ編成可 |
| 敵 | 空位・宮本武蔵(セイバー・属性 人・Lv100) |
| 敵 HP / ATK | 3,153,860 / 6,162 |
| クラス相性 | grandSaber → saber = ×1.00(相性の上書きなし) |
| 属性相性 | 地 → 人 = ×1.10 |
| 敵の被弾補正 | NP・スターとも補正なし(tdRate 1000 / starRate 0) |
敵は deathRate 0(即死無効)。クエスト側にイベント特効の類は存在しない。
つまりダメージを膨らませる要素は編成とクエストギミックにしかない。
発見1: 〔剣士の試練〕はサーヴァントのどこにも書かれていない
×3.18 の差の半分以上は、たった 1 つのバフだった。
冠位戴冠戦には〔剣士の試練〕という常設ギミックがある。ところがこれは、
- 敵のスキルにも入っていない
- クエストの特性(
questIndividuality/phaseIndividuality)にも入っていない - ステージの
callにも入っていない
クエストの「フィールドAI」の側から開幕に配られている。
quest.stages[0].fieldAis = [ {id: 94145400}, {id: 94145474} ]
fieldAi 94145474 timing = waveStart / probability = 100 / cond = none
→ skillId 94145426「剣士の試練」
funcType addStateShort
funcTargetType ptFull 控えを含む味方全体
functvals [100 classSaber] 〔セイバー〕にのみ付与
buff upDamageSpecial(特殊威力アップ)
svals Rate 5000 / Turn -1 / Count -1 / Value 1000
UnSubState 1 / SetPassiveFrame 1
読み方はこうなる。
| フィールド | 意味 |
|---|---|
Rate: 5000 | 付与成功率 500%。弱体耐性を貫通して必ず付く |
Value: 1000 | 効果値 +100.0% |
Turn: -1 / Count: -1 | 永続(ターンでも回数でも消えない) |
UnSubState: 1 | 強化解除不能 |
buffGroup 非0 | 重複しない(同グループは上書き) |
そして upDamageSpecial は、ダメージ式 の (18) 単独乗算に入る。
宝具威力アップ (13) と同じバケットではない。
⇒ 〔剣士の試練〕が乗った時点で、〔セイバー〕のダメージはそのまま ×2.00 になる。
これを (13) に足し込むと、他に宝具威力バフが積んである状態では 1.3 倍程度にしか効かず、実測と 3 倍以上ずれる。
同型のギミックは他クラスの冠位研鑽戦にも存在し、いずれも upDamageSpecial の Value 1000 だった。
| クエスト | ギミック | 発火 |
|---|---|---|
| 冠位研鑽戦〔セイバー〕 | 剣士の試練 | 開幕(waveStart) |
| 冠位研鑽戦〔アーチャー〕 | 弓兵の試練 + 弾幕交差(2ターン目に敵全体の状態解除) | 開幕 / 自ターン開始 |
| 冠位研鑽戦〔ランサー〕 | 槍兵の試練 + 天降る雷槍(毎ターン味方に固定ダメージ) | 開幕 / 敵ターン開始 |
フィールドAI の格納順は固定ではない(セイバーは 2 個目、アーチャー/ランサーは 1 個目)。順序を仮定して 1 個目だけ読むと落ちる。
発見2: 「ヒットごとにバフが累積する」説の否定
実戦の宝具は 9 ヒットで、表示されるダメージが 1 発ごとに増えていく。 これを見て「〔剣士の試練〕がヒットごとに累積しているのでは」という仮説が立った。が、数値がそれを許さない。
宝具「怪物の黄金剣」の分配は npDistribution = [2,4,6,8,11,13,15,17,24]。
総ダメージ 2,419,032 をヒット分配の規則(整数除算+端数は最終ヒットへ)で割ると:
| ヒット | 実測表示 | 計算値 floor(2,419,032 × h/100) | h |
|---|---|---|---|
| 1 | 48,380 | 48,380 | 2 |
| 2 | 96,761 | 96,761 | 4 |
| 3 | 145,141 | 145,141 | 6 |
| 4 | 193,522 | 193,522 | 8 |
| 5 | 266,093 | 266,093 | 11 |
| 6 | 314,474 | 314,474 | 13 |
| 7 | 362,854 | 362,854 | 15 |
| 8 | 411,235 | 411,235 | 17 |
| 9 | 580,572 | 580,572(端数寄せ) | 24 |
| 計 | 2,419,032 | 2,419,032 | 100 |
9 発すべてが 1 ダメージも違わずに一致する。
「1 発目を基準にすると 1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 12 倍」という観察は、
そのまま npDistribution の比 2:4:6:8:11:13:15:17:24 を 2 で割ったものであって、バフの累積ではない。
ヒットごとに +100% 積むなら比は 1,2,3,4,5,6,7,8,9 の等差にならなければならない。
EXTRA アタックも同じ。分配 [6,13,20,26,35] で総ダメージ 729,884 を割ると
43,793 / 94,884 / 145,976 / 189,769 / 255,462 で、表示値と完全一致した。
データ側の構造ともこれは整合する。〔剣士の試練〕を撃つフィールドAI は、撃った直後に
何もしない終端 AI へ遷移する(avals = [94145475, 0] → aiAct.type = "none")ので、
ターン経過で再発火する経路がそもそも存在しない。
⇒ 〔剣士の試練〕は (18) の +100% 固定。ヒットでもカードでもターンでも累積しない。
発見3: グランドサイン「魔力放出(剣)」の二段参照とカード色別スタック
同じ編成・同じバフで、宝具ダメージが 1,371,566 だったり 2,419,032 だったりする。 差はカードの並べ方にあった。犯人はグランドボード(グランドサイン)16 マスのうち **sq16「魔力放出(剣)」**である。
このマスの効果は、スキルが 2 段参照になっていて、素直に読むと本体にたどり着けない。
グランドサイン sq16「魔力放出(剣)」
addStateShort self / confirmCommandFunction / ckSelfIndv:[braveChain] / ExecOnce:1
↓ sval.Value = 5009001
skill 5009001 addStateShort self / attackBeforeFunction / Turn:1 / Count:-1
「攻撃時、ダメージ前に自身の全てのコマンドカードの威力をアップ」
↓ sval.Value = 5009002
skill 5009002 (4 functions・いずれも upCommandatk / Turn:1 / Count:1)
Quick威力アップ +50% ckSelfIndv:[cardQuick]
Arts威力アップ +50% ckSelfIndv:[cardArts]
Buster威力アップ +50% ckSelfIndv:[cardBuster]
EXTRA Attack威力アップ +100% ckSelfIndv:[cardExtra]
ここから読み取れる挙動が独特である。
- ブレイブチェイン成立を条件に、カード選択の確定時(
confirmCommandFunction)に 5009001 が付く。 - 5009001 は
attackBeforeFunctionかつCount: -1なので、そのターンの攻撃 1 回ごとに毎回 5009002 を撃つ。 宝具・通常カード・EXTRA はすべて「攻撃」なので、ブレイブチェイン(3枚+EXTRA)なら 4 回発火する。 - 配られる 4 つのバフは
Count: 1=その色のカードで 1 回殴ると消費される。
つまり Quick で殴れば Quick 分だけが消え、Arts/Buster/EXTRA 分は消費されずに積み上がる。
Quick 3 連(宝具Quick → Quick → Quick → EXTRA)の場合:
| 攻撃 | 配られる | 消費される | その攻撃に乗る |
|---|---|---|---|
| ① 宝具(Quick) | Q/A/B/Ex 各1 | Quick 1 | Quick +50% |
| ② Quick | Q/A/B/Ex 各1 | Quick 1 | Quick +50% |
| ③ Quick | Q/A/B/Ex 各1 | Quick 1 | Quick +50% |
| ④ EXTRA | Q/A/B/Ex 各1 | EXTRA 4 | EXTRA +100% × 4 = +400% |
実戦で「3 枚目付近と EXTRA 中に B/A/Q/EXTRA 威力アップがさらに盛られていく」という表示が見えるのは、この積み上がりそのものである。 EXTRA アタックが 729,884 という宝具に迫る数字を出したのは、この 4 スタックと、同色ブレイブによる EXTRA 倍率 3.5 の合わせ技だった。
この機構を再現するには 3 つ同時に必要だった。
- トリガ型バフを捨てない。
attackBeforeFunctionのような「バフを貼るバフ」を通常のバフ写像で解決しようとすると null になり、マスごと不発になる。 - 参照を 2 段以上たどる。 5009001 だけ取り込んで 5009002 を取りこぼすと、やはり不発。当サイトのトリガスキル辞書でも同型の欠落が 18 件見つかった。
- EXTRA アタックでも攻撃トリガを発火させ、回数制バフを「同じ色のカードでだけ」消費する。 色を見ずに全部消費すると、Quick で殴るたびに EXTRA 用のスタックまで減り、上の +400% が再現できない。
発見4: マイティチェインは宝具を含む3色でも成立する
4 戦目は「宝具(Quick) → Arts → Buster」を全部同じサーヴァントから出した。これは ブレイブチェインかつマイティチェインである。ところがシミュレーター側の判定は、
// 旧実装
const nonNP = cards.filter(c => !c.isNP);
const mightyChain = !allSameServant && !colorChain && nonNP.length === 3 && …
となっていて、2 つの条件がどちらも実戦の形と噛み合っていなかった。
| 条件 | 何を落とすか |
|---|---|
nonNP.length === 3 | 宝具を含む 3 色(宝具1枚+通常2枚 → nonNP は 2 枚)を必ず落とす |
!allSameServant | 同一サーヴァントの B/A/Q(ブレイブ かつ マイティ)を必ず落とす |
マイティが落ちると 2 つの効果が同時に消える。
- 初手ボーナス。マイティ成立時は B/A/Q それぞれの 1 枚目ボーナスを全部貰うので、
ダメージ側に Buster の
addAtk = +0.5が入る。これはカードバケット (03) の掛け算の外で加算されるため、 Arts・Buster・EXTRA すべてに効く。 - グランドサイン sq15「マイティチェイン成立時 攻撃力 +30%(1T)」。 カード選択の確定時に付くので、宝具にも乗る。
この 2 つが落ちた結果、通常カードが軒並み 15〜20% 過小になっていた。 正しい判定は「カラーチェインでなく、選んだ 3 枚のカード種別が 3 種類」であり、ブレイブとの同時成立を許す。
実戦で「カード選択時に攻撃力アップと攻撃ダメージ(前)追加効果が 2 つ同時に出た」という表示は、 sq15(マイティ)と sq16(ブレイブ)が両方発動していたことを示していた。
発見5: グランドサインの効果は「絆Lv合計」でスケールする
グランドサインの一部のマスは固定値ではなく、編成の絆Lv合計に比例して伸びる(CondParamRangeType: 2、分母 CondParamRangeMaxCount: 200)。
| sq | スキル | 最小 | 最大 |
|---|---|---|---|
| 2 | マスタースキル効果アップ | +20% | +50% |
| 6 | 毎ターンNP獲得 | +5% | +10% |
| 10 | HP回復量アップ | +20% | +50% |
| 14 | 強化解除耐性アップ | +30% | +80% |
実効値 = Value + MaxValue × min(1, 絆Lv合計 / 200)
検証ビルドの絆Lv合計は 40(進捗比 0.20)なので、マスタースキル効果アップは +26%。上限の +50% ではない。 これはマスター礼装「決戦強化」に直接効く。攻撃力・宝具威力とも +20% → +25.2% となり、 「常に上限」を仮定していた既定値(+30%)とは 2 バトル同時フィットの通り方が変わる。
同様に、グランドサインの sq1〜sq13(カード性能・EXTRA 性能)は通常クラススコア盤の解放マス数に比例する。
sq1「Quickカード性能アップ」は +20% + 30% × (親盤の解放マス数 / 62) で、満点なら +50%。
CondParamRangeType: 2 の分子が「編成サーヴァントの絆Lv合計」であることはデータから読めるが、
サポート枠を数に入れるかどうかはデータからは確定できない。
フレンドの絆Lv はゲーム側に表示が無く直接確認もできない。
実測フィットの逆算はサポートを含めた解を要求するので「含む」がもっともらしいが、証明はできていない。
当サイトのシミュレーターは絆Lv合計を数値入力できるようにして、この不確かさをユーザー側に開いてある。
発見6: グランド化の adjustAtk: 1000 は倍率ではなく実数加算
nice_grand_graph.json にはグランド化のステータス補正として adjustHp: 1000 / adjustAtk: 1000 がある。
FGO の内部値は千分率が基本なので、これを **1000‰ = ×1.00(補正なし)**と読んでいた。誤読だった。
実機のステータス欄と突き合わせると、加算でしか合わない。
13,376 サーヴァント Lv102 の素の ATK
1,280 ATKフォウ
1,000 グランド化のステータス加算 ← adjustAtk
──────
15,656 = 実機のサーヴァント素体 ATK 表示
2,400 礼装(通常枠)
1,787 礼装(3枠目)
──────
19,843 = 実機のステータス欄と 1 の位まで一致
1000‰ = ×1.00 と数値が同じだったせいで、誤読しても矛盾が表面化しなかった。 グランドサーヴァントの ATK は +1,000 の実数加算である。
グランドサーヴァントの礼装枠まわりで確定したことをまとめておく。
| 項目 | 実データ |
|---|---|
| グランド化の補正 | ATK +1,000 / HP +1,000(実数加算) |
| グランドクラスのクラス補正 | 元クラスと同じ(grandSaber = 1.00) |
| グランドクラスの相性 | 通常クラスと同一表(grandSaber → saber = 1.00) |
| EXTRA 倍率 | 同色ブレイブで EXTRA_ATTACK_RATE_GRAND = 3.5 |
| 絆礼装スロット | 装備すると GRAND_FRIENDSHIP_EQUIP_SKILL_ID 994725「冠位接続」=開幕 NP +50% が付く |
| 3 枠目 | データ上に定義は無い(クライアント側の仕様)。ただし挿した礼装の ATK はきちんと加算される |
3 枠目については、当初「バレンタイン礼装は atkMax 0 なので ATK 0 として扱えばよい」と判断していた。
実際には通常の★5礼装が挿さっており、その ATK 1,787 を落とすと必要乱数が 1.174 となって乱数域を外れる。
「効果なしの枠」と決め打ちしてはいけない。
実戦 3 バトル 9 観測の一致表
上の 6 つを全部入れて、3 バトルを 1 つのビルドで同時に説明できるかを見る。 ビルドは全戦で同一(同じ編成・同じスキル・同じ礼装)。違うのはカードの並べ方だけである。
| バトル | カード構成 | 攻撃 | 実測ダメージ | 必要乱数 | 判定 |
|---|---|---|---|---|---|
| 3 | 宝具(Q) → Q → Q → EXTRA (同色ブレイブ) | ① 宝具 | 2,419,032 | 0.924 | ✔ |
| 3 | ② Quick 2枚目 | 67,153 | 1.110 | 上限を +0.9% 超過 | |
| 3 | ③ Quick 3枚目 | 67,095 | 0.951 | ✔ | |
| 3 | ④ EXTRA(×3.5) | 729,884 | 0.988 | ✔ | |
| 4 | 宝具(Q) → A → B → EXTRA (ブレイブ+マイティ) | ① 宝具 | 2,950,117 | 1.003 | ✔ |
| 4 | ② Arts 2枚目 | 98,368 | 0.897 | 下限を −0.3% 割る | |
| 4 | ③ Buster 3枚目 | 195,339 | 0.921 | ✔ | |
| 4 | ④ EXTRA(×2.0) | 499,397 | 0.999 | ✔ | |
| 5 | チェイン不成立の単発宝具 | ① 宝具 | 2,109,618 | 1.017 | ✔ |
宝具 3 本と EXTRA 2 本はすべて乱数域 0.900〜1.100 の内側。 外れるのは通常カード 2 枚だけで、しかも逸脱幅は境界から 1% 未満である。
この一致がどれくらい厳しい制約かは、バトル3の ② と ③ を見るとわかる。
同じターン・同じ色・同じバフのカードなので、位置補正 1.12/0.96 = ×1.1667 が両者の比を固定する。
2 つとも 0.900〜1.100 に収めるには、片方が [1.050, 1.100]、もう片方が [0.900, 0.943] という
幅 5% の窓しか許されない。ATK・カードバケット・EXTRA 倍率・魔力放出のスタック段数のどれか 1 つでも
外していれば、この窓には入らない。
そして EXTRA 倍率が 3.5(同色ブレイブ)と 2.0(マイティ=3色なのでカラーチェイン不成立)で切り替わることも、この表で同時に検証されている。
単発宝具(バトル5)で切り分けたこと
バトル5 は縮退を切るために、意図的にチェインを崩して撃ったもの。 ブレイブもマイティもカラーチェインも成立しないので、グランドサイン sq15/sq16 が両方とも発火しない。 オーバーチャージも OC1 で視認確定している。
| 宝具倍率の仮定 | 理論値(乱数 1.000 固定) | 実測 2,109,618 に必要な乱数 |
|---|---|---|
| ×18.0(宝具Lv3・申告どおり) | 2,332,687 | 0.904 ✔ |
| ×16.0(宝具Lv2 相当) | 2,073,458 | 1.017 ✔ |
どちらも乱数域の内側なので、この 1 戦だけでは宝具倍率は決まらない。
当サイトのシミュレーターは内部データ準拠(宝具Lv → svals[NPLv-1].Value)のまま、つまり ×18.0 を採用している。
一方でこの単発宝具は、別の疑問を 1 つ潰した。 3・4 戦目のフィットは当初「宝具の自己 Quick バフが OC2〜3 相当」を要求しており、開幕 NP から算出される OC1 と矛盾していた。 これは上の発見6(ATK の取り違え)が原因で、ATK を実測の 19,843 に直すと OC1 のままで矛盾しない。
途中で立てて、実測に否定された仮説
検証記録として、採用しなかった仮説とその棄却理由も残しておく。同じ道を二度歩かないために。
| 仮説 | 棄却理由 |
|---|---|
| 〔剣士の試練〕がヒットごとに累積する | ヒット表示が npDistribution の按分と 1 ダメージも違わない(発見2)。フィールドAI も撃った直後に終端へ遷移する |
| 〔剣士の試練〕が 2〜4 スタックする | 3 スタック((18)=4.00)なら数値は合うが、重複させる機構がデータ上存在しない。buffGroup 非0 のパッシブ枠は上書き |
| 「宝具特攻 ×1.5」と「黒の聖杯 +80%」は両立しない | 3 戦目単独では制約が足りず、かつマイティ未実装で通常カードが過小だったための錯覚。2 戦 8 観測の同時フィットでは両方乗っているのが唯一の解になる(外すと解が消える) |
| グランドサーヴァントは ATK に ×1.00 の倍率補正がかかる | 実数加算 +1,000 だった(発見6)。実機のステータス表示は加算でしか一致しない |
| 3 枠目の礼装は効果なしなので ATK 0 として扱える | バレンタイン礼装限定の話。通常礼装を挿すと ATK は加算される |
| OC 倍化ギミックがある | 画面右上の「チャージ2倍」表示はマスター礼装のスキルクールタイム表示だった |
同時フィットで必須と確定した条件(外すと 8 観測を説明する解が消滅するもの):
- 通常クラススコア盤の Quick 性能アップが乗っていること
- 魔力放出(剣)が宝具の前にも発火すること(発火しないと EXTRA のスタックが 1 段足りない)
- 宝具特攻 ×1.5 が乗っていること
- 礼装の宝具威力アップ +80% が乗っていること
なお、実機の「状態変化詳細」に表示されるのはバトル中に付与されたものだけで、
礼装やクラススコアの効果は一覧に出ない。「表示されていない=乗っていない」の証拠にはならないという点も、
検証中に確認した表示仕様である(データ側でも、クラススコア/グランド盤の効果は ShowState: -1、
〔剣士の試練〕は ShowState: 1 と表示フラグが分かれている)。
いま残っている未確定事項
正直に書いておく。9 観測を完全に説明する解はまだ出ていない。
- Quick / Arts のカード性能が 1〜2% 足りない。 上の表で外れている 2 枚がこれ。候補は ATKフォウの端数・支援スキルの実レベル・通常クラススコア盤の実解放マス数。 盤の実解放数が判れば決まる見込み。
- 宝具倍率 ×18.0 と ×16.0 の縮退。 単発宝具でも切れなかった。切るには宝具特攻が乗らない別の敵に対して単発宝具を撃つ必要がある。
- 絆Lv合計スケールの分子にサポート枠を含むか。 フレンドの絆Lv はゲーム側に表示が無く、直接検証が不能。
再現のしかた
- 理論値との比較をするときは、バトルシミュレーター のバトル画面ヘッダにある
「乱数」トグルを
固定1.00に切り替える。乱数抽選そのものを止めて中央値を返すので、ビルド差だけを見られる。 - バトルログの「計算内訳」で、(03) カードバケット・(09) 攻防バケット・(13) 威力バケット・(18) 特殊威力・(14) 宝具特攻の 各バケットの実値がそのまま確認できる。上の表の数字はこれを読んだもの。
- クエストギミックは編成画面のクエスト情報に一覧表示され、発火すると
【クエストギミック】剣士の試練 → 特殊威力アップ+100%の形でバトルログに残る。 - ここで確定した挙動は回帰テスト(ゴールデンテスト)として固定してある。
最低限のアサーションは「(18) が 2.00 であること」「(13) に〔剣士の試練〕が混入していないこと」
「
grandSaber → saberが 1.00」「地 → 人 が 1.10」「宝具特攻が 1.50」。
関連ページ
- FGO ダメージ計算式 完全解説 — このページで使っている式そのものの解説
- スキル対応状況 — 9,643 個のスキル効果の再現状況と、対象外にしたものの理由
- バトルシミュレーター — ここで検証した計算モデルが動いているページ
- クラススコア — クラススコア盤・グランドサインの各マスの効果
- サーヴァント図鑑 / カタログ — 宝具倍率・ヒット分配・NP獲得率などの元データ