№ · 6.26 玩法迭代 CH.06.26
主页 · 🎲 6.26 玩法迭代 · 剧情编辑器导出与年线任务编排技术文档

剧情编辑器导出与年线任务编排技术文档

📅 2026-06-26 · 📦 3.6 KB · 🎲 6.26 玩法迭代 · 📝 MD 文档 🏷️ 真值🏷️ Buff🏷️ 设计🏷️ 剧情🏷️ 时间🏷️ 终局

最近更新:2026-06-26 16:58:51 +08:00

作用:把剧情编辑器已经导出的故事内容,编成一条会跟着 gameTime 逐步推进的一年期任务线。

边界:不改 src/*,不新增剧情表,不新增新的终局规则表,不改存档结构。

设计目标

  • 导出的剧情内容是 source-of-truth,不再手写第二套年线内容。
  • 一年期任务线按 gameTime 推进,不按现实时间推进。
  • 同一条线既能在年内逐步展开,也能在触发终局时立即收束。
  • 如果没有触发终局,任务线在年末按既定收束方式结束。
  • 旧的剧情导出和手工剧情仍然能读,不需要为了这条线重建存档。

线的组成

| 层级 | 说明 | 例子 | | --- | --- | --- | | 导出剧情 | 剧情编辑器输出的章节、节点、分支和结局 | 角色线、支线、终局选择 | | 年线编排 | 把导出内容切成一整年里可推进的章节 | 开局、推进、压力、收束 | | 游戏时间 | 推进顺序的唯一时钟 | gameTime.daytimeOfDayyearPhase | | 终局截断 | 触发终局时,年线停止继续推进 | 交给终局复盘 / 重开 |

建议运行时状态

export interface StoryYearTaskState {
  storylineId: string;
  sourceStoryId: string;
  currentChapterId?: string;
  chapterIndex: number;
  storyYearPhase: 'opening' | 'growth' | 'pressure' | 'closing';
  progress: number;
  gameTimeAnchor: GameTimeState;
  endgameTriggered: boolean;
  endgameId?: string;
  completedAtGameTime?: GameTimeState;
  fallbackToYearEnd: boolean;
}

编排规则

  • 每次只激活当前章节和下一章节,避免一次性把整年内容全倒进事件池。
  • 章节切换由 gameTime 驱动,不能用现实时间或手动刷新代替。
  • 导出剧情里的 yearPhasetimeAffinityrequiredStoryState 优先决定章节可见性。
  • 每个节点只推进一次核心进度;重复触发只补日志,不重算整线。
  • 当某个节点触发终局种子或失败链时,先冻结当前年线,再交给终局系统收束。
  • 若全年都没有触发终局,则在年末按预设结局完成该线的年度收束。

和终局的关系

  • 终局是中断器,不是年线的替代品。
  • 终局触发后,任务线不再继续推进下一章节。
  • 终局完成后,剩余的年线章节只保留在复盘里,不再继续对当前周目生效。
  • 这条规则和失败终局、复盘、重开、时间点存档共用同一套 gameTime 与快照解释口径。

与剧情编辑器的关系

  • 剧情编辑器负责导出内容,不负责决定年线推进器怎么写。
  • 年线编排负责把导出内容变成可推进的任务线,不负责重写剧情文本。
  • 导出后的故事节点如果缺少时间条件,先补最小时间锚点,再进入年线。
  • 已有的单节点 pilot 只说明“能接上”,不等于“整年闭环已经完成”。

验收标准

  • 能说明一条导出剧情如何按 gameTime 跑满一年。
  • 能说明中途触发终局时,年线如何停下来并交给终局收束。
  • 能说明没有触发终局时,年线如何在年末正常收口。
  • 能说明这条线不需要新增终局玩法表,也不需要改存档结构。

关联文档

  • docs/design/completed/narrative/story-event-nodes-v1.md
  • docs/design/completed/gameplay/剧情与随机事件结合玩法设计.md
  • docs/design/6.26玩法/任务线失败终局运行时技术文档.md
  • docs/design/6.26玩法/终局复盘重开与时间点存档技术文档.md
  • docs/handoff/storyline-conversion-log.md