元素词缀的正式数值分派与场景接线

2026-09-20。新增 NativeElementalDispatchRuntime,经 F2LootData → CoreSimBridge.BindNativeGrowth 自动配置;正常加载及读档不再依赖测试用 ElementalFrameChecks.Runtime。

本批完成的是已表示的冰冻 / 燃烧 / 中毒数值分派、STAT 装备观察者及桥接接线。仍未开放全部元素武器,未宣称粒子、受击反应、感电技能完成。

原版入口核对

本批重新通过 IDA 查询 CItem_AttachDynamicEffect = 0x513BC0,并与既有导出交叉核对:

入口本批使用的规则
5253D0TYPE52 的 damageable / IGNORES_PLAYER_DAMAGE / native alive 门;其他已支持数值类型走默认门。原 0x21 是 HIE 的 POTION,不是推测的泛用 USABLE 类型
562590再检查 canApply,按类型执行 apply;TYPE146 不作为持续数值行挂入管理器
513BC0 → 7B21E0已由同一个父词缀 / 管理器拥有的 child 直接 relink,不执行额外复制构造和 source rebind
7B1D70新行 EXCLUSIVE 才按同 NAME + TYPE 使旧行失效;旧行先保留为失效记录,稍后统一清理
514AB0数值 / 主题 / ADD STAT 类型不安装技能;TYPE81 需要真实技能安装,不能空回调
564341–56438E接收者查询对来源的敌对关系;只有 native state 为 0 / 2 才进入仇恨广播。+314 是 state,不能与 +31C alignment 混用

来源技能、药水尾部修正、跨外部池 EXCLUSIVE、LINK_NAME 连带失效仍明确拒绝。角色来源确实触发仇恨广播时仍报 elemental_character_aggro_runtime_pending;装备来源不伪装成持有人来执行这一分支。

正式 TYPE52 分支现在执行:

  1. 两层 canApply 门,并保留短路读取顺序。
  2. 查询 MIMICIDLE;该状态不挂伤害,但父分配及其他通过门的 child 保留。
  3. 链接同一个父持有 child。
  4. 角色来源使用与已有 DoT 相同的原伤害 / 类型伤害 / 主人加成 / Focus 查询;装备不是 CCharacter,不能借用持有人加成。
  5. 对 MIN、MAX 各执行一次 setSlotAndReroll。即使倍率为 1,也不能跳过原两次调用。
  6. 保留原 SOAKSCALE、效果等级、父 / 子身份与实时来源。
  7. HP、死亡奖励及清来源由统一帧后续阶段处理,不在挂载时直接扣血。

测试验证了装备 BURN 保留 MIN=25、SOAKSCALE=.33、效果等级 17;非敌对角色来源的 +100% 全伤害使 MIN=50。另用可变 MIN/MAX 检查两次重掷的值和 RNG 与原有重掷核一致,没有多做复制 / 来源重掷。

Combo 与当前装备观察者

正式 TYPE146 不再传空 STAT 处理函数:

  • ApplyActorTimedStat 仍先产生原始未钳制事件值,再执行观察者,最后钳制 / 刷新时钟。
  • 事件转入现有 F2WeaponGrowth / TriggerableExecution 的全局装备订阅顺序。
  • 使用同一条暂存 RNG,保留装备过滤、持有人过滤、触发顺序和嵌套装备 STAT 行为。
  • 父模板在 child 分派前已进入共享模板缓存;观察者加载的模板与构造返回缓存合并,不能在父构造结束时覆盖掉。
  • 装备数值变化先校验旧派生值,随后重算;正常攻击 / 进行中的武器技能值签名随整帧提交。
  • 任何观察者失败,之前挂上的 child、Combo、装备、缓存和 RNG 都回滚。

这里是 CoreSim 当前已登记的装备观察者,不代表原版技能、关卡等所有观察者已经迁移。原成长武器的 item-self watcher 不会因另一个角色的 Combo 事件而获得错误升级;该负例由真实目录数据验证。

正常桥接与快照

  • F2LootData 从原四个 EFFECT_* SKILL 标记数据创建运行时。
  • CoreSimBridge 的正常加载和恢复路径绑定服务。
  • 使用 v45 既有字段,没有为这批增加快照版本。
  • 图标 ID 106–109 是移植端四元素图标注册键;原 SKILL GUID / icon 名称仍保留。它们不是原进程内的 intern ID,也不是已完成状态图标绘制的证明。
  • child 的 UNITTHEME 来自原字段,不能用 NAME 替代;原主题 child 的 NAME 可以为空。
  • 描述与主题数据仍是只读投影,真正的主题渲染消费者另行接入。

验证证据

  • 1990 条核心断言通过,比上批新增 28 条。
  • 426 项相关 Python 回归通过。
  • Godot C# 构建零警告 / 零错误;185 个核心 C# 文件静态检查无硬错。
  • 原独立 Godot 数值 / codec 检查 34 项通过。
  • 新 ECHO PASS 实际场景探针使用正常 CoreSimBridge 和正式处理器,不安装 fake runtime:
    • 冰冻创建 5 个 child、中毒 4 个、燃烧 3 个;
    • Combo 生效、到期释放、读档重新绑定及重放一致;
    • 燃烧死亡归属真实装备持有人;
    • 现有场景死亡消费者只通知一次。
  • 探针明确注入命中后的触发器、HP 和种子;不是自然掉落元素武器的完整 HIT / 视觉验收
  • 原 ECHO PASS 回复 / DoT / 控制混排回归通过,死亡通知仍一次。
  • 没有新增“完整帧与原二进制逐指令等价”的声明。

产物:

  • build/elemental_dispatch_core.log
  • build/elemental_dispatch_regression.log
  • build/elemental_dispatch_build.log
  • build/elemental_dispatch_audit.log
  • build/elemental_dispatch_engine/result.json(源文件哈希、退出码、错误列表及存档保护)
  • build/elemental_dispatch_legacy_world.log

下一段真实缺口

后续更新:四元素主题显示、挂点保存与回收已接线,见 v46 主题记录。以下保留本分派批次的原始剩余清单;完整元素武器仍未开放。

  1. 元素命中反应、角色来源的仇恨 / AI 分支。
  2. FROZEN / BURNING / POISONED / ELECTRICITY 原主题粒子的挂点、显示及回收;现有视觉消费者仍主要支持 BLEEDING。
  3. TYPE81 的 Charged Bolt 技能安装、触发与移除。
  4. 更广的技能 / 关卡观察者、来源技能 RNG 和未表示效果分支。
  5. 上述完成后才能逐武器开放并做实际 HIT、表现和保存验收。

构造检查保持 1099 / 1419;273 阻塞、47 基础缺口、0 构造异常,未用撤门提高覆盖。全武器目标仍未完成。

按 godot-master 保持 CoreSim 权威状态与表现分离。main 原地,未提交;未 attach 原游戏。默认存档 SHA256 未变: 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f