摘要

“奈拉之吻”是一种附在单位上的效果:被它影响的单位在反击后会额外受到伤害并可能被减速。实验 0304 发现,攻击方的第二击沿用了反击前的旧目标对象,把吻造成的伤害和减速“覆盖”掉了。本实验写了一个只在研究进程里生效的修复原型:在回调之后重新取得完整目标。45 组新旧配对、91 项验收全部通过。当时尚未发布;后续更新:用户授权后,这个候选已由规则版本 Core383 正式采用。

要回答的问题

只刷新目标对象,能否在所有边界(过量致死、护盾、协助反击、先制反击等)上得到正确结果,而且不影响无关路径?

方法

  • 原型只改一行:回调之后从单位列表重新取目标;不改伤害公式,也不是简单补回生命差额。它在独立子类里编译,不修改生产类、不增加公开选项;源码锚点一旦变化就拒绝运行。
  • 在 Core380、381、382 三个旧版本上各跑 15 组旧 / 候选配对,共 45 组、90 条受控历史(旧 591 次操作、候选 582 次,差异来自致死后取消的动作)。每步检查合法菜单、JSON 续算和最终回放;只定制初始布阵和属性,途中不注入法术或伤害。这不是 90 局自然对战。
  • 基本开场:战争化身 6 只、单只伤害 20;目标 6 只、每只 100 生命、攻防 0。预期值全部独立手写。

结果

场景 候选目标最终生命 说明
一 / 二 / 三 / 四级吻 150 / 100 / 80 / 80 600−120−吻伤−120;四级保留一层减速
吻过量致死 / 恰好 480 0 取消第二击,不能用旧目标“复活”
吻造成 460,剩 20 0 第二击仍发生,纸面 120、实扣 20
一级甲壳 200 首击被挡,吻扣 280,第二击扣 120
四级两层甲壳 480 首击和吻各消耗一层,第二击扣 120
没有吻 / 反击次数 0 360 无额外损失、无减速
普通目标带吻 + 协助反击 80 协助不恢复旧状态
协助者带吻 主目标 360,协助者 720 吻作用于协助者

新发现:两层甲壳时,旧实现的吻正确消耗了第二层护盾,但第二击又被同一层挡住,最终生命 600。不能因为“最终护盾为 0”就判断正确。这和凭空回血是同一个缺陷,不另算。

91 项验收:45 项完整历史与独立预期、15 项无关路径的全事件 / 状态对照一致、30 项新旧回放互相拒绝,以及“不改生产类”检查。Simulator 全量 12035 通过、65 失败、2 跳过、150 严格预期失败(310.87 秒),逐节点比较新增 91 项、新增失败 0、遗漏 0。

失败与负结果

没有新增失败;65 个普通失败为既有问题,套件并非全绿。

局限

当时这只是候选验收通过,不等于生产缺陷已修复;旧引擎继续回放旧历史。回合回蓝等规则只按项目当前约定核算,不是游戏原生认证。软件回归也不能说成对游戏原生回调的完整认证。

结论与下一步

修复思路正确且边界完整。当时按合同治理要求向用户提交方案、等待授权;之后用户授权语义变更,该修复由 Core383 正式实现,研究用的源码补丁方式随之删除,验收迁移到真实的新旧引擎上。