四元素状态挂载:概率、护甲门与时长来源

2026-09-20。回到武器实际阻塞,补齐 FREEZE / BURN / POISON / SHOCK 的共同目标挂载内核。它们占当前首要阻塞 84 项,但状态词缀创建 / 续期 / 清理尚未接入正式战斗,因此未放宽准入。

原规则

NativeElementalAttachment 对应原 562590 的 TYPE106–109 分支:

  1. 先取 0–100 整数概率,再取浮点护甲门随机值;两次调用都在存活与概率检查之前。
  2. 目标死亡、概率比较失败或 unordered 比较拒绝挂载。
  3. target+0x7A4 为无符号基础伤害基准,来源是伤害等级图的 floor;与元素通道的有符号护甲字段组合。
  4. 基准为零,或 DWORD 加法回绕后的和为零时,门限为 1。否则比较浮点随机值 × float32(0.01) 与 基准/(基准+护甲)。比例计算本身不使用回绕后的分母。
  5. 通过后再抽一次整数,读取 stat136 并经过难度抗性提升,决定是否播放 HIT 反应。反应被抗性阻止不等于元素挂载失败。
  6. 调用实际附着操作;成功后才读取效果的 CCharacter 来源与时长加成。
  7. 非角色来源不借用装备持有者;角色来源按元素专属 stat 再加通用 stat188,保留中间 float 存储与读取顺序。
类型元素通道专属时长 stat
106 FREEZEIce / 3190
107 BURNFire / 2189
108 POISONPoison / 5192
109 SHOCKElectric / 4191

5253D0 的元素接收门检查 SHIELD BUFFER(122)。后续复核 512C90 → 7AE100 确认:只扫描 PASSIVE / DYNAMIC 两张登记表的 TYPE,不检查过期位、elapsed 或剩余容量;因此已过期但尚未摘除的实例仍阻挡元素。TRANSFER 表不参与,同一次攻击已经真正移除的护盾不再阻挡。这个门不能泛化到 STUN。

原代码验证

新增 tools/build_native_elemental_attachment_oracle.py / native_elemental_attachment_oracle.c,在独立 32 位辅助进程中运行四个原挂载分支。

  • 1920 组 PC24 / PC53 / PC64 对照全部一致。
  • 覆盖零 / 高位无符号基准、负护甲、零和回绕、概率边界、NaN、目标存活、角色 / 非角色来源与附着失败。
  • 比较整数 / 浮点随机调用次数、附着次数、受击反应、来源 / stat 读取次数和最终时长位模式。
  • 原整数转无符号浮点路径保留高位修正步骤;没有以普通 double 除法取代全部 x87 运算。

明确边界:随机结果、stat、附着和反应动作是可观察宿主输入;技能种子前缀在夹具中跳过,复制时的随机数、通用接收门及后续状态词缀 tick 不属于这份对照。没有将此结果宣称为四种武器状态的实战端到端验收。

后续必须做的链路

原 566DD0 中四个类型不是直接持续扣血:它们触发或刷新命名状态词缀,随后将自身过期。重复命中通过原 affix 时长 / 子效果 elapsed 重置处理,不是任意叠层。

已经确认的子效果:

  • BURN:DAMAGE、Burning 主题、非玩家 ComboFire。
  • FREEZE:移动 / 攻击 / 施法速度修正、Frozen 主题、非玩家 ComboIce。
  • POISON:伤害 / 护甲修正、Poisoned 主题、非玩家 ComboPoison。
  • SHOCK:Electricity 主题及 PROC CHARGEDBOLT 等,因此还会依赖攻击型技能执行。

接下来要组合状态词缀实例、动态列表顺序、命名统计量、到期与保存重放,再做真实 HIT 和表现测试。不能用一个固定 DPS 或一个减速布尔替代这整条链。

验证与安全

1804 条核心断言、402 项相关 Python 回归通过;Godot C# 构建零警告 / 零错误,coresimlint 通过。日志见 build/native_elemental_attachment_*.log。参考记录位于 build/native_elemental_attachment_oracle/results.json,代码为 core_sim/NativeElementalAttachment.cs。

武器覆盖仍为 1099 / 1419,273 阻塞、47 缺定义 / 创建等级。此批没有修改武器准入开关、正式画面或默认存档。遵循 godot-master 的状态 / 表现分层,具体概率与副作用以原版为准,不加入通用模板的额外无敌帧。

main 原地工作、未提交;未 attach 原游戏。默认 warp_autosave.json SHA256 保持 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f。