№ · 完成设计 CH.06.23
主页 · ✅ 完成设计 · 终局表现与存档读档设计

终局表现与存档读档设计

📅 2026-06-23 · 📦 10.4 KB · ✅ 完成设计 · 📝 MD 文档 🏷️ 时间🏷️ Buff🏷️ 设计🏷️ 终局

目标:把同福客栈的终局做成“可演出、可复盘、可回退”的完整体验,而不是一张失败提示页。玩家在终局后能够清楚看见发生了什么、为什么会败、能从哪个时间点重来,以及如何管理自定义存档。

设计原则

  1. 终局不是删档,不是报错页。
  2. 终局必须展示时间、因果和可操作入口。
  3. 读档必须保留时间语义,现实时间和游戏时间都要可见。
  4. 自定义存档必须能按时间点管理,而不是只有单一覆盖式存档。
  5. 旧存档优先兼容,不能因为新存档管理而丢进度。

当前基础

  • 当前项目已经有单一主存档,写入 key 为 tongfu_inn_save_v1
  • 现有存档已经包含 lastSaveTime,可作为现实时间来源。
  • 现有存档已经包含 gameTime,可作为游戏时间来源。
  • 现有存档已经包含 failureEndgame,可作为终局状态来源。
  • 现阶段最适合的方案是“单个 live save + 一组快照存档”的混合模式。
  • 快照索引、快照正文和导出包应分开管理,避免把浏览器索引和大体积状态混在一起。

时间字段约定

  • createdAt:现实世界创建时间,使用 Date.now()
  • updatedAt:现实世界最后修改时间,手动改名、置顶、加备注后都应更新。
  • gameTime:游戏世界时间,至少包含 dayslottimeOfDay
  • 存档卡片必须同时展示 createdAtgameTime,不能只显示一个时间轴。

终局表现方式

终局进入时,不直接切黑屏,而是进入一个分层收束页。

表现顺序

  1. 时间冻结:暂停主循环、停止新事件推进。
  2. 终局落幕:给出终局标题和触发原因。
  3. 因果展开:按预警期、加压期、抉择期、收束期展示时间线。
  4. 结果清点:列出损失、遗产、种子和当前状态。
  5. 操作入口:给出重开、读档、复盘、导出等动作。

终局页内容

  • 终局名称,例如“偷税漏税被举报”。
  • 终局类型,soft_fail / delayed_fail / hard_shutdown
  • 触发时间,现实时间 + 游戏时间。
  • 关键属性,现金、声望、治安、忠诚、机变、好感等。
  • 关键因子,最近的风险种子和失败链。
  • 终局结果,停业、封灶、罚款、离岗、查封等。
  • 可继承遗产,账本残页、回执、口碑标签、旧信物等。

页面结构

  • 顶栏:终局标题、终局类型、发生时间、周目编号。
  • 主栏:终局时间线,按预警期、加压期、抉择期、收束期展开。
  • 副栏:关键属性、关键人物、失败种子、遗产清点。
  • 底栏:查看复盘、从最近安全点重开、读取时间点存档、导出快照、新开周目。

视觉语气

  • 终局页要像“客栈收账台”或“败局回放册”,不要像系统报错弹窗。
  • 以纸张、账册、封条、官差文书、江湖帖子这些视觉隐喻为主。
  • 失败不应该只有红色警告,而要有戏文式收束感。

终局后的操作

终局页建议提供这些动作:

  1. 查看复盘。
  2. 读取时间点存档。
  3. 从最近安全点重开。
  4. 重新开局。
  5. 导出当前快照。
  6. 返回标题页。

终局重开路径

  1. 从最近安全点重开
    • 默认选择最近一次非终局、非只读、非锁定的快照。
    • 优先级建议为 checkpoint -> manual -> quick -> auto
    • 读回后继续经营,不进入终局复盘模式。
  2. 读取终局快照
    • 默认打开最近一条 endgame 快照。
    • 该路径只读查看,不直接覆盖当前经营档。
    • 可进一步选择“以此为起点重开”,生成新的手动档。
  3. 读取时间点存档
    • 打开存档浏览器,自由筛选和比较。
    • 支持按现实时间、游戏时间、类型、标签、终局标记筛选。
  4. 重新开局
    • 清空本周目经营状态,回到新周目起点。
    • 后续若有周目遗产,可在这里单独加“继承遗产”开关。

重开规则

  • 如果玩家点“从最近安全点重开”,默认加载最近一次非终局、非只读、非锁定的快照。
  • 如果玩家点“读取时间点存档”,进入存档浏览器,自选任意快照。
  • 如果玩家点“读取终局快照”,默认保留终局相关元数据,不直接清空失败信息。
  • 如果玩家点“重新开局”,进入新周目,默认不继承本周目经营状态。
  • 如果项目后续加入周目遗产,则“重新开局”可再单独提供“继承遗产”分支。

自定义存档

存档管理采用“快照”概念,而不是只有一个覆盖式主档。

存档类型

  • auto:自动存档,来源于时间推进或关键节点。
  • manual:玩家手动创建的时间点存档。
  • quick:快速存档,便于临时回退。
  • checkpoint:系统关键节点存档,例如进入终局前、重大事件前。
  • endgame:终局快照,只读或半只读,用于复盘。
  • export:导出档,便于备份或分享。

存档时间点命名

  • 手动存档应允许玩家自己写标题和备注。
  • 系统可按当前游戏时间自动生成标题,例如 第12天 · 傍晚 · 税案前
  • 同一游戏日可以有多个存档,必须依靠现实时间、备注、标签和置顶状态区分。
  • 终局快照的默认标题应包含终局标识,例如 终局快照 · tax_reported

存档元数据

每个存档卡片至少要显示:

  • 存档名。
  • 存档类型。
  • 现实时间。
  • 游戏时间。
  • 存档备注。
  • 当前版本号。
  • 失败终局标记。
  • 关键标签,例如“税案前”“擂台后”“傍晚”“夜间”。
  • 锁定、置顶和缩略图状态。

推荐元数据结构

export type SaveSlotType = 'auto' | 'manual' | 'quick' | 'checkpoint' | 'endgame' | 'export';

export interface SaveSnapshotMeta {
  slotId: string;
  title: string;
  note?: string;
  slotType: SaveSlotType;
  createdAt: number; // 现实时间,Date.now()
  updatedAt: number; // 现实时间
  gameTime: GameTimeState;
  appVersion: string;
  roadmapVersion: string;
  saveSchemaVersion: number;
  failureId?: FailureEndgameId;
  failureStage?: string;
  tags: string[];
  locked?: boolean;
  pinned?: boolean;
  thumbnailUrl?: string;
}

export interface SaveSnapshotRecord {
  meta: SaveSnapshotMeta;
  state: GameState;
}

存储建议

  • tongfu_inn_save_v1:当前主运行档。
  • tongfu_inn_save_slots_v1:存档索引。
  • tongfu_inn_save_snapshots_v1:快照内容。
  • tongfu_inn_save_export_v1:可选导出包,用于备份或跨设备迁移。

主运行档负责继续游玩,快照目录负责时间点回放和手动存档管理。

读档流程

浏览器内流程

  1. 打开存档列表。
  2. 按现实时间、游戏时间、类型、标签筛选。
  3. 点选某个快照,先看预览卡。
  4. 确认是否覆盖当前进度。
  5. 读档后恢复对应的时间、角色、资源和终局状态。

存档浏览器

  • 左侧按类型分组,右侧按时间轴排序。
  • 顶部支持搜索、标签、现实时间范围和游戏时间范围筛选。
  • 卡片上同时显示现实时间和游戏时间,不允许隐藏其中任意一个。
  • endgame 类型默认带只读提示,避免被误当成普通手动档。

读档校验

  • 旧存档缺字段时自动补默认值。
  • 不同版本存档读入时必须先归一化。
  • 如果快照来自终局,默认保留终局相关元数据。
  • 如果快照来自终局前安全点,读档后恢复可继续经营状态。

时间语义

  • 现实时间用于知道“这个档是什么时候存的”。
  • 游戏时间用于知道“这个档在故事里处于哪一刻”。
  • 两者必须同时展示,不能只留一个。
  • 如果同一现实时间内连续存了多个档,必须再依赖 slotId、备注和创建先后顺序区分。

终局快照规则

终局发生时,系统建议自动做一次只读快照:

  • 记录失败发生的现实时间。
  • 记录失败发生的游戏时间。
  • 记录失败种子、压力值、阶段和关键属性。
  • 记录本次终局可继承遗产。
  • 记录此时的现实时间、游戏时间和终局标题。

这样玩家就算没有手动存档,也能从终局节点回看或重开。

交互约定

  • 存档卡片默认显示“现实时间 + 游戏时间”双时间轴。
  • 同一游戏日可以有多个快照,但必须靠时间点和备注区分。
  • 玩家可以给手动存档写备注,例如“税案前一晚”“擂台前”“郭芙蓉离店前”。
  • 终局页上的“读取时间点存档”应优先展示最近几个安全点。
  • 只读终局快照不应被误删,最多允许归档隐藏。
  • 玩家手动建档时,建议同时提供“当前时间点名称”和“备注”两个输入。
  • 快照导出后再次导入,应保留原始现实时间、游戏时间和版本信息。

验收标准

  • 终局页能清楚展示败因、时间、结果和遗产。
  • 终局后能进入读档和重开流程。
  • 存档卡片能同时看到现实时间和游戏时间。
  • 玩家能创建和管理自定义时间点存档。
  • 旧存档继续可读,不丢进度。
  • 终局快照默认只读,但可以复制成新的手动快照继续游玩。

建议版本拆分

App v1.15.0:终局表现最小闭环

  • 终局页接管失败结果展示。
  • 加入终局时间线和遗产摘要。
  • 提供“查看复盘 / 从最近安全点重开 / 读取时间点存档”的入口。
  • 终局页要区分“查看终局”与“恢复经营”两条路径,避免玩家误触直接覆盖。

App v1.16.0:自定义时间点存档

  • 引入手动存档与快照目录。
  • 存档卡片显示现实时间与游戏时间。
  • 支持备注、标签、置顶和归档。
  • 增加按时间点命名的自动标题和时间范围筛选。

App v1.17.0:读档管理增强

  • 提供筛选、排序、重命名、导出、导入。
  • 支持终局快照与普通快照并存。
  • 把版本不一致时的读档提示做完整。
  • 增加终局快照复制为普通快照的单独动作。

与现有文档的关系

  • 终局内容库、判定矩阵和失败种子,继续以 失败终局设计文档 为准。
  • 时间体系仍以 时间体系 v1 为准。
  • 本文只补“怎么看到终局、怎么从终局回来、怎么按时间点存档”的操作层设计。