先保住出错存档,复现哪一步变了
不要先用“重新开局就好了”结束排查。保留原存档副本,记下对应内容、规则与存档格式版本;记录玩家怎样走到保存点、存在哪里、加载后先看哪一处偏差。
| 现象 | 先对比什么 |
|---|---|
| 道具又回背包 | 保存前实际归属、加载后归属,以及载入是否再次发道具。 |
| NPC说出没见过的秘密 | 谁已看过证据、哪次事件让他知道,是否把玩家所知复制给所有人。 |
| 已领奖励再领一次 | 完成与领取状态,以及场景进入/渲染回调是否重复提交。 |
| 期限忽然归零或已结事项复活 | 保存的时间与到期状态,加载是否重新创建或提前触发事件。 |
| 老存档进入错路线 | 节点与变量含义是否在新版改变,而旧值仍按新语义读取。 |
这个问题发生在“保存后恢复并继续”。失败与重开主要决定重开回到哪里、保留什么;两者都要明确,但不是同一种操作。
当前是什么,与发生过什么要相互对应
game-build 把快照用于快速载入,事件记录用于定位与重演。当前状态告诉游戏“钥匙现在在谁那里”,历史告诉它“谁借过、何时归还、谁见过那次展示”。只存当前钥匙数量,无法还原人物记忆;只存一串事件,载入时又无条件重新发钥匙,也会改变结果。
按本项目实际需要保存会被后续读取的事实,例如位置、物件归属、已接受承诺、证据知情、任务完成、奖励领取与到期事项。不需要把每个无作用的闲聊词语都变成持久状态。
界面与对白读取恢复后的事实。生成模型可以根据已确认结果组织表达,不能把“他已经原谅你”的新句子直接写成信任状态。在线解析参与动作时,回放使用已保存的规范化候选,不重新问一次模型来决定旧动作究竟是什么。
原创完整路径:钥匙归还后再读档
原创旧馆调查例,以下是纸面验证设计,尚未实现或运行。馆员保管阅览柜钥匙;玩家可借钥匙看柜内修订目录,也可暂不查看。目录的内容只向实际打开阅读的人揭示。到期事项与随机性在此例都未采用,避免为模板凑字段。
| 步骤 | 应保存或读取的结果 |
|---|---|
| 新开局 | 钥匙在馆员手中;玩家未读目录;馆员知道钥匙可借,但不知道玩家之后会选哪条路。 |
| 借钥匙、开柜、读目录 | 馆员同意后钥匙归玩家;玩家实际开柜阅读,玩家知情更新,馆员没有在柜前看见内容。 |
| 归还钥匙 | 玩家把钥匙交回,馆员实际接收;钥匙归馆员,借阅与归还历史保留,玩家仍记得读过目录。 |
| 此时保存,再加载 | 仍是馆员持钥匙、玩家已读、馆员未见内容;加载本身不再次借出或归还。 |
| 继续询问馆员 | 他可以记得已归还,不能引用没看过的目录文字。玩家选择出示内容后,才更新馆员知情。 |
这条路径已经有当前物件、历史和两人知识的区别。如果加载后钥匙出现在玩家背包,问题不是换一句对白就能修好;如果钥匙正确但馆员忽然知道内容,要查知识恢复与分支历史。
再走相邻路线:借到钥匙但未读目录就归还,保存并加载。此时玩家和馆员都不能引用内容,钥匙同样在馆员手中。两条路线共享持物终态,却有不同阅读历史,能揭露“只按当前物件推剧情”的错误。
本例借阅没有额外金币奖励,不需要虚构一项领奖测试。项目确有奖励时,再检查读取已领取状态,重复进场、加载或按完成按钮不能再次发放。
更新后出错,别静默改写旧历史
只改一段文案,可能不影响存档;改节点编号、变量含义、行动效果或知识权限,则需要检查旧档怎样被新版读取。先声明本次改变了什么与影响哪条路径,再选择迁移或明确拒绝不兼容旧档。
例如旧版用一个“目录已查看”状态表示玩家读过,新版却把同一状态解释成馆员也读过。直接沿用旧值,会制造从未发生的展示。可把旧状态迁移为“玩家已读”;馆员是否见过要从已有可证明的历史恢复,缺少依据不能填成已见。
拒绝不兼容存档时,应保留旧档副本并说明支持的继续方式,不能先覆盖成新初态再弹一句提示。迁移方案也需要实际加载与后续操作验证;写了版本号不会自动修复语义。
修后跑原路径,再跑能区别历史的相邻路径
固定实际内容、规则和存档版本,重放原来出错的保存、加载、继续操作;对比持物、知识、承诺和已经结算的结果。项目采用随机时也固定 seed,纯确定性项目不为表格新增随机系统。
再走共用前段但选择不同的路线,观察未选事件有没有混入、NPC是否只使用自己所知。修复应针对定位的状态或读取点,不把原设计的选择删掉来取得“正常显示”。
记录这次实际运行的版本、输入、预期与观察结果。截图可证明某个界面显示过,不能独自证明状态恢复和后续操作都正确。
常见问题
读档是不是把此前事件全部再执行一遍?
看实现的恢复方式,但不能把恢复变成重复玩家结算。快照与事件记录各有用途;重演应重建同一历史,不重新发奖励、改变归属或触发已结事项。
所有更新都要让旧存档失效吗?
不用。按实际节点、规则和格式变化判断兼容性。可兼容的局部文字修改不必强迫重开;改变语义时再迁移或明确拒绝,并验证受影响路径。
用 skill 来做
用 $game-build 局部修复这个读档问题。附已批准设计、当前运行版本、出错存档、保存前状态和加载后的实际偏差。定位持物、知识、承诺、期限或奖励的写入/读取点,声明兼容性与受影响路径;保留旧存档副本,修后重放失败路径及一条相邻未选路线,不改玩法和结局来绕过错误。
查看具体方法: 快照、事件、回放与存档兼容 · 版本与固定验证路径