火焰纹章万缕千丝中文攻略 wiki
养成机制 / DATABASE

角色成长与升级公式

一次升级,究竟怎样决定加点?从成长率、重抽与保底,到固定累积和入队补级。

程序静态解析 + 指令回放核对日期 2026-10-28 · 随机/固定成长 70 组回放对照通过

01两种升级模式,分开理解

本作不是简单地为每项属性掷一次骰子。角色正常升级存在随机与固定两条分支;创建高等级单位时,还会走独立的自动成长流程。

随机成长

整数部分必涨,余数部分判定;不达标最多重抽三次,再按权重补足。

保底计数:上涨项数

固定成长

积累成长值,每满 100 加一点;不足保底时补给累积值较高的属性。

保底计数:上涨点数

正常升级读取内部变量「固定成長」:0 走随机分支,非 0 走固定分支。本地初始值为 0。尚未核实它与游戏菜单、难度或周目的对应关系,不能据此宣称某个难度必定使用固定成长。

以下升级公式处理 HP、力量、魔力、技巧、速度、幸运、防守、魔防、魅力 九项。视野和移动不在这段升级加点循环内。

02实际使用的成长率

gᵢ = max(0, Bᵢ + Jᵢ + Sᵢ + Rᵢ × k)
Bᵢ = 个人成长率 Pᵢ(Pᵢ ≠ 0);否则使用兵种基础成长率
符号含义使用规则
Pᵢ/Bᵢ个人值/采用的基础值个人字段为 0 时会回退到兵种基础值,不能把个人 0 直接理解为最终 0%。
Jᵢ兵种成长加算与兵种基础成长率是两个字段,不能混为一列。
Sᵢ生效技能的成长修正之和只累计通过条件检查的成长类效果。
Rᵢ × k坐骑成长修正 × 兵种倍率要求兵种、当前坐骑类别匹配;读取该坐骑对应好感阶段的数据。

这里使用的是百分点加算。个人 45、兵种 +10、技能 +20,合计为 75%,不是 45% × 1.1 × 1.2。最终负数压到 0,但不会压到 100%。

本地个人成长率样本

角色HP力量魔力技巧速度幸运防守魔防魅力保底
第三部前/起
凯伊45%45%40%45%45%40%35%35%40%2 / 0
迪托利希50%45%30%60%50%50%40%30%60%2 / 0
赛奥朵拉70%50%30%40%40%30%40%30%50%2 / 0
蕾达40%35%35%50%65%25%30%35%55%2 / 0
诺克裘拉50%45%20%40%45%35%40%20%30%2 / 0

这是个人原始成长率,不含兵种、坐骑和技能。保底来自每名角色自己的两个字段;表中五个样本恰好相同,不代表所有单位都相同。

技能修正为什么会随等级变化?

本地效果记录包括「成長の兆し」九项各 +20,以及战车兵、战象兵相关的分级成长效果。只有实际装备且满足生效条件的效果参与加算。升级入口临时使用升级前等级检查成长,因此不能直接拿升级后面板上的技能状态反推本次加点。

已读出的战车兵 LV35 效果向量为 [10, 5, 5, 5, 5, 0, 10, 0, 5],LV45 为 [10, 15, 5, 10, 5, 5, 20, 5, 10];战象兵 LV45 为 [10, 10, 0, 10, 0, 0, 10, 10, 0],顺序同上表。这里的 LV 是记录名,不把尚未核完的条件边界或叠加关系当成已确认规则。

03随机成长:判定、重抽与补足

先排除有效成长率为 0、或核心属性已达上限的项目。设剩余项目数为 N,角色阶段保底为 M,实际保底 m = min(M, N)。

qᵢ = ⌊gᵢ / 100⌋,rᵢ = gᵢ mod 100
Δᵢ = qᵢ + 𝟙[Uᵢ < rᵢ × 10,000]
Uᵢ = (随机数 & 0x7fffffff) mod 1,000,000;𝟙[条件] 成立取 1,否则取 0。

例如 45% 表示基础判定约 45% 加一点;120% 表示必加一点、约 20% 再加一点;200% 则直接加两点。余数为 0 时不消耗这一项的概率判定随机数。

  1. 做一次九项判定。统计 K = 本次 Δᵢ > 0 的属性项数。HP +2 只计为一项。
  2. 不足就整轮重抽。目标是 K ≥ max(m, 1)。最多初次判定加三次重抽,共四次;采用最后一次或提前达标的那次,不叠加前几次结果。
  3. 仍低于 m,就补足。从本轮没有上涨的合格属性中,按有效成长率的权重抽取,每次补 +1,已补项目不再参与下一次选择。
  4. 逐点应用并检查上限。即便本轮算出 +2,也不能越过核心属性上限。
保底为 0 ≠ 不重抽。它仍会尝试避开空成长;但四次都空时,可以最终不加任何点。有效成长率为 0 的项目不会被随机保底强行选中。

为什么不能直接用成长率求最终期望?

Σgᵢ / 100 只是未考虑重抽、保底与封顶的基础期望。重抽会舍弃低于目标的整轮结果,补足又改变各项分布,所以实际升级平均总点数与单项概率都会变化。精确随机数还存在取模带来的微小偏差,不能把伪随机取模严格视为连续均匀分布。

本函数从单位保存的成长种子生成局部随机序列。相同状态和种子会产生相同结果;只凭这一点,仍不能断言某种读档操作是否能改变种子。

随机成长计算器

查看每次重抽和最终保底;更换种子比较结果,低成长实验更容易看到四次判定。

本地数据样本,非存档预测。假定九项均未封顶、兵种与修正保持不变;不检查转职资格。额外修正为手动输入,不自动套用技能或坐骑。规则实验使用虚构成长率。固定演示从该角色的创建累积值出发。

计算项目HP力量魔力技巧速度幸运防守魔防魅力
个人成长率50%45%20%40%45%35%40%20%30%
有效成长率50%45%20%40%45%35%40%20%30%
第 1 次判定+1——+1——+1—+1
本次最终上涨+1——+1——+1—+1
共 +4 点4 项属性上涨0 项由保底补足判定 1 次

04固定成长:累积值不是从零开始

新建单位的初始累积值 aᵢ,₀ = (3 × 个人原始成长率 Pᵢ) mod 100
tᵢ = aᵢ + gᵢ
自然上涨 Δᵢ = ⌊tᵢ / 100⌋,剩余 aᵢ′ = tᵢ mod 100

只处理有效成长率大于 0、且尚未封顶的属性。随后计算自然上涨的总点数 L = ΣΔᵢ。如果 L < M,按累积余数从高到低,在本次还没有自然上涨的合格属性中补 +1,直到补够或候选耗尽。

获得保底的属性,累积值直接归零,不是扣掉 100 后保留负数。同余数时会先按角色序号与旧累积值生成的确定性序列打乱候选顺序,所以不能固定假设按 HP、力量等表格顺序补点。

单项算例 · 不含保底

45% 成长:从 35 开始累计

35 + 45 = 80 不涨,留 80
80 + 45 = 125 +1,留 25

如果第一次升级这项触发了保底,它会改为 +1、累积值清零,下一次从 0 算起。不能继续沿用上面这条数列。

固定成长的累积值会保存、读取。中途换兵种、变化技能、触发保底后,单靠“当前等级 × 当前成长率”无法还原角色面板。新建单位的初始公式也不能覆盖已有存档的累积值。

固定分支先检查是否封顶,再写入本次成长增量;显示核心属性时仍受上限裁剪。它与随机分支逐点检查上限的内部写入方式不同。

固定成长计算器

从创建累积值出发连续演算,查看所选次数的加点和剩余累积值。每一步都包含固定成长保底。

本地数据样本,非存档预测。假定九项均未封顶、兵种与修正保持不变;不检查转职资格。额外修正为手动输入,不自动套用技能或坐骑。规则实验使用虚构成长率。固定演示从该角色的创建累积值出发。

计算项目HP力量魔力技巧速度幸运防守魔防魅力
个人成长率50%45%20%40%45%35%40%20%30%
有效成长率50%45%20%40%45%35%40%20%30%
本次开始累积值50356020355206090
本次最终上涨+1———————+1
本次结束累积值08080608040608020
共 +2 点2 项属性上涨0 项由保底补足

05加点、核心属性与战斗面板

核心属性 = clamp(基础值 + 兵种属性加算 + 已有成长增量 + 配置修正, 0, Cᵢ)
Cᵢ = min(个人属性上限, 兵种属性上限) + 兵种属性加算

这里的基础值也存在“个人为 0 时使用兵种基础值”的回退。骑乘、下马或替代兵种会影响选用哪份兵种数据。成长增量内部使用有符号数,并限制在 −255~255;这不是角色属性统一上限 255。

装备、临时强化等后续修正会影响战斗面板,不能直接当作升级所得。转职改变基础加算或上限,也不代表之前积累的成长点被重新掷了一遍。

06入队与补级:独立的自动成长流程

高等级角色创建/补级使用的公共函数不逐次调用上面的玩家升级函数。它接收起点、补级次数、逐级兵种/坐骑配置,以及独立修正参数。

hᵢ,ℓ = max(0, trunc((gᵢ,ℓ + c) × μ))
bᵢ ← bᵢ + hᵢ,ℓ
本级自然增长 = ⌊bᵢ / 100⌋,bᵢ ← bᵢ mod 100
ℓ:虚拟等级;c:本次调用的整数修正;μ:传入的浮点倍率;trunc:向零截断。
  1. 本次自动成长的九项局部累积值从 0 开始,逐个虚拟等级计算。
  2. 按当前虚拟等级读取兵种/坐骑配置,并重新求有效成长率;列表索引用等级减一,超过列表长度使用最后一项。
  3. 按上述顺序先加修正、再乘倍率、再取整。不能先把倍率作用于总升级数。
  4. 每级自然增长总点数不足该阶段保底时,给未自然上涨、累积值较高的候选补 +1,并清零其累积值。此处没有随机分支的重抽,也没有固定分支的候选洗牌。
  5. 循环结束后把总增量写回单位;这一局部累积器不直接沿用玩家固定成长的存档累积值。

自动成长的候选筛选与玩家升级并不完全一样:不能把玩家分支“有效成长率必须大于 0、先排除封顶项”的条件直接套过来。

本地自动成长变量原始初始值
招募:成长率修正/倍率0 / 80
第三部加入:成长率修正/倍率0 / 80
第三部主角合流:成长率修正/倍率0 / 70
第三部合流后加入:倍率80

公共公式已定位,不等于所有入队面板都已还原。上表是变量的原始值,不直接等同于公式中的浮点 μ。仍需逐条闭合路线调用、变量到参数的转换、目标等级、已有存档属性和背包的继承关系。不能把所有加入角色统一写成“基础值 + 等级 × 成长率 × 80%”。

已有合并路径会取新旧成长增量的较大值;但这不能推广为所有招募都如此。携带物品取自另外的配置与背包逻辑,不由成长率公式生成。

查看诺克裘拉的入队配置证据

07核对依据与适用范围

公式来自本地 exefs/main 的 AArch64 程序与 Person.bin、Job.bin、Skill.bin、Variable.bin 等数据。页面没有使用其他作品的成长规则代替本作逻辑。

核对项程序位置/数据字段验证程度
升级分支入口0x6e0bc0,变量「固定成長」静态调用链
有效成长率0x6d5d00;Person +540,Job +354 / +376静态解析与原始数据
随机/固定成长0x8c5c60 / 0x8c5700原指令隔离回放,与网页算法对照 70 组
累积值初始化0x6d19a0静态解析
核心属性/上限0x6dd470 / 0x6dd7a0静态解析
自动成长公共计算0x6d5120静态解析;具体入队调用仍需逐条核对
查看验证方法与版本指纹

回放在 Unicorn 中执行原随机/固定函数及排序指令,替换内存分配、属性/上限读取和加点回调。70 组输入覆盖 0~200% 成长、0/2/4 保底、不同种子、累积值和上限;比较每项增量、固定余数、随机判定次数。这证明隔离函数与网页实现一致,不等于完整游戏存档回归。

本地原始 main 的 SHA-256:

ee08f64d39f80c08c733e203be6f44c44265fdd69c7c824d562ab4f5d6d7d7d6

程序地址以当前解包版本为准。其他补丁版本需重新核对。技能条件边界、难度与成长模式对应、全路线入队调用,以及战斗经验获得公式不在本页已确认结论中。

返回角色一览