3.5 KiB
Stage 2.5.3 纠错报告
1. Critical Rate
已废止结论
0x549B934 位于防御者侧 BaseMonoCharacter.HitAndGetResult,属于 Hit/Miss 判定。任何把它解释成 Critical Rate RNG 的结论均标记为 SUPERSEDED。
新闭环
CRITICAL_RATE / EMonoStatus 11 → CharacterStatus.GetFinalStatus(11) → 整数 RNG [0,101) → chance > roll → DamageMeta.isCritical (+0x28)。
入口是攻击者覆写 BaseMonoPlayer.OnBeforeAttack @ 0x55A95EC。BaseActor.<RunAttackSequence>d__44.MoveNext @ 0x5496AB0 先构造 DamageMeta,将 isCritical 初始化为 false,再调用攻击者攻击前钩子。攻击者钩子在公共尾部以 cset gt 生成布尔值并写入 DamageMeta。
结论:VERIFIED / HIGH。
2. Gacha
Selector
GachaProduct.RewardGacha @ 0x52F22E4 使用 <RewardGacha>b__21_0 @ 0x52F4840 读取 Gacha.prob (+0x28),并调用通用选择器 0x50EDB34。
选择器先获得权重总和,将其乘以常数 10000,调用 RNG 助手 0x513C53C 取得整数随机游标,再遍历候选项:若游标仍大于当前权重则减去当前权重并继续,否则返回当前索引。
结论:VERIFIED / HIGH。
Pity counter
配置表明确给出三组 ceilCount:20、50、400。运行时计数更新助手 0x51138F0 已定位:它按抽数参数更新一个持久化 Gacha 记录的计数,并存在不同的分支处理;命中检查助手 0x510078C 会读取持久化记录并与传入的 ceil 参数比较。RewardGacha 在 0x52F3D1C 调用该检查助手,成功分支进入指定保底奖励选择。
但当前静态证据尚不能把 0x51138F0 的两个分支安全命名为“普通 increment”和“reset”,也没有看到可独立证明的 count = 0 写入。因此本包不把“何时归零、是否跨十连逐抽归零、提前出货是否归零”写成事实。
结论:PARTIAL / MEDIUM。已闭合 count update → ceil compare → guaranteed branch,未闭合精确 reset 语义。
3. Boss Gauge
关键纠正
stageinfo.csv 中 bossSpawnRule=DiceGauge, bossSpawnRuleValue=50 的 50 是每次格子结算加入 Gauge 的配置值,不是“当前 Gauge 与 50 比较”的阈值。
格子执行状态机 <ExecuteAsync>d__0.MoveNext @ 0x553EEEC 在 0x55445E8 读取配置增量,随后:
current = GetRuntimeGauge() // 0x52E4DA8
next = clamp(current + configValue, 0, 100)
SetRuntimeGauge(next) // 0x52E4E10
实时 Gauge 存储在运行时数据对象 +0x2E0。setter 写入后还会通知相关事件/UI。MoveTile 在 0x56C038C 调用 TrySpawnBossTilesByGauge @ 0x569FEC0;生成流程完成后的后续状态机在 0x52E6064–0x52E6068 对同一 setter 传入 0,形成清零证据。
NewStagePlayData.highestBossTileGauge (+0x1C) 是历史最高 Gauge 存档字段,不能替代实时字段。
结论:Gauge 更新式与实时字段为 VERIFIED / HIGH;“具体哪一个布尔资格检查代表满 Gauge”仍为 PARTIAL / MEDIUM,因为该检查被共享/间接调用封装,未恢复出可靠托管名称。
4. 对 GDD 反推的约束
- 暴击率可写为客户端判定:
critical = CRITICAL_RATE > RandomInt(0,101)。 - Gacha 可写为权重抽取,但不得擅自把
prob解释成百分比;它是相对权重,内部按 10000 精度离散化。 - Pity 可写配置阈值与已定位计数助手,不得补写未经证明的 reset 时机。
- Boss Gauge 应写成 0–100 的进度,配置 50 是单次增量;不要写成“Gauge >= 50 触发 Boss”。