元素词缀的正式数值分派与场景接线
2026-09-20。新增 NativeElementalDispatchRuntime,经 F2LootData → CoreSimBridge.BindNativeGrowth 自动配置;正常加载及读档不再依赖测试用 ElementalFrameChecks.Runtime。
本批完成的是已表示的冰冻 / 燃烧 / 中毒数值分派、STAT 装备观察者及桥接接线。仍未开放全部元素武器,未宣称粒子、受击反应、感电技能完成。
原版入口核对
本批重新通过 IDA 查询 CItem_AttachDynamicEffect = 0x513BC0,并与既有导出交叉核对:
| 入口 | 本批使用的规则 |
|---|---|
| 5253D0 | TYPE52 的 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;装备来源不伪装成持有人来执行这一分支。
燃烧施加不能只 Link
正式 TYPE52 分支现在执行:
- 两层 canApply 门,并保留短路读取顺序。
- 查询 MIMICIDLE;该状态不挂伤害,但父分配及其他通过门的 child 保留。
- 链接同一个父持有 child。
- 角色来源使用与已有 DoT 相同的原伤害 / 类型伤害 / 主人加成 / Focus 查询;装备不是 CCharacter,不能借用持有人加成。
- 对 MIN、MAX 各执行一次 setSlotAndReroll。即使倍率为 1,也不能跳过原两次调用。
- 保留原 SOAKSCALE、效果等级、父 / 子身份与实时来源。
- 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 主题记录。以下保留本分派批次的原始剩余清单;完整元素武器仍未开放。
- 元素命中反应、角色来源的仇恨 / AI 分支。
- FROZEN / BURNING / POISONED / ELECTRICITY 原主题粒子的挂点、显示及回收;现有视觉消费者仍主要支持 BLEEDING。
- TYPE81 的 Charged Bolt 技能安装、触发与移除。
- 更广的技能 / 关卡观察者、来源技能 RNG 和未表示效果分支。
- 上述完成后才能逐武器开放并做实际 HIT、表现和保存验收。
构造检查保持 1099 / 1419;273 阻塞、47 基础缺口、0 构造异常,未用撤门提高覆盖。全武器目标仍未完成。
按 godot-master 保持 CoreSim 权威状态与表现分离。main 原地,未提交;未 attach 原游戏。默认存档 SHA256 未变: 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f