武器导弹反射运行时

原版语义

MISSILE REFLECT(效果 TYPE60)不是“受到伤害后把数值弹回去”,而是导弹接触阶段、普通命中结算之前的一次所有权和轨迹改写。

原版关键链路:

  1. 0x523CF0 扫描目标身上的 TYPE60,聚合 chanceDMGPCT
  2. 总几率不大于 0 时直接失败,不消耗 RNG。
  3. 否则执行 RandBetween(0, 100) 闭区间整数判定;仅当 roll <= chance 时成功。
  4. 返回伤害倍率 DMGPCT / 100
  5. 0x6E5740 在普通导弹命中前消费结果:原目标不受本次伤害,导弹交换发射者/目标弱引用,保存倍率,并以接触法线反射运动向量。

向量公式为:

text
v' = v - 2 * dot(v, n) * n

其中 n 是导弹到达目标时的碰撞法线。

RNG 契约

  • 无有效 TYPE60 几率:0 次 RNG advance。
  • 有效判定:一次 Fused RandBetween,消耗 2 次 MWC advance。
  • 不完整或未知的 DMGPCT 数据:fail closed,不把未知倍率当作 100%。

当前迁移实现

武器构造器只放行形状完整的被动 ALWAYS TYPE60,并保存 chanceDMGPCT 槽位。CoreSim 负责唯一的随机判定;Godot 只消费已经提交的结果,不自行重掷。

导弹宿主在普通命中前查询反射。成功时:

  • 本次接触不调用伤害结算;
  • 原目标成为新的发射者,原发射者成为新目标;
  • 后续伤害乘以已解析的 DMGPCT / 100
  • 重置飞行距离并按接触法线反射方向;
  • 返回命中进入正常玩家受击、死亡、掉落和仇恨链路。

已开放 4 把原版武器:CROSSBOW_U02CFIST_U05BLEGENDARY2_SWORD05SWORD_U03C。当前全量武器可构造数为 1171 / 1419。

尚未声称完成的边界

  • 0x548850 的 TYPE61 MISSILE REFLECT VISUAL 会生成原版反射视觉;对应 ArrowTrailReflect 材质/纹理尚未独立复原。
  • 当前 Godot 宿主覆盖已接入的非追踪直线怪物导弹,不能外推为所有导弹家族、制导方式和碰撞体均已完成。
  • TYPE201/204 的范围程序与召唤程序仍需要通用空间查询、可保存时钟和单位工厂,不能借由 TYPE60 的完成状态放行。