№ · 6.26 玩法迭代
CH.06.26
剧情编辑器导出与年线任务编排技术文档
最近更新:2026-06-26 16:58:51 +08:00
作用:把剧情编辑器已经导出的故事内容,编成一条会跟着
gameTime逐步推进的一年期任务线。边界:不改
src/*,不新增剧情表,不新增新的终局规则表,不改存档结构。
设计目标
- 导出的剧情内容是 source-of-truth,不再手写第二套年线内容。
- 一年期任务线按
gameTime推进,不按现实时间推进。 - 同一条线既能在年内逐步展开,也能在触发终局时立即收束。
- 如果没有触发终局,任务线在年末按既定收束方式结束。
- 旧的剧情导出和手工剧情仍然能读,不需要为了这条线重建存档。
线的组成
| 层级 | 说明 | 例子 |
| --- | --- | --- |
| 导出剧情 | 剧情编辑器输出的章节、节点、分支和结局 | 角色线、支线、终局选择 |
| 年线编排 | 把导出内容切成一整年里可推进的章节 | 开局、推进、压力、收束 |
| 游戏时间 | 推进顺序的唯一时钟 | gameTime.day、timeOfDay、yearPhase |
| 终局截断 | 触发终局时,年线停止继续推进 | 交给终局复盘 / 重开 |
建议运行时状态
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驱动,不能用现实时间或手动刷新代替。 - 导出剧情里的
yearPhase、timeAffinity、requiredStoryState优先决定章节可见性。 - 每个节点只推进一次核心进度;重复触发只补日志,不重算整线。
- 当某个节点触发终局种子或失败链时,先冻结当前年线,再交给终局系统收束。
- 若全年都没有触发终局,则在年末按预设结局完成该线的年度收束。
和终局的关系
- 终局是中断器,不是年线的替代品。
- 终局触发后,任务线不再继续推进下一章节。
- 终局完成后,剩余的年线章节只保留在复盘里,不再继续对当前周目生效。
- 这条规则和失败终局、复盘、重开、时间点存档共用同一套
gameTime与快照解释口径。
与剧情编辑器的关系
- 剧情编辑器负责导出内容,不负责决定年线推进器怎么写。
- 年线编排负责把导出内容变成可推进的任务线,不负责重写剧情文本。
- 导出后的故事节点如果缺少时间条件,先补最小时间锚点,再进入年线。
- 已有的单节点 pilot 只说明“能接上”,不等于“整年闭环已经完成”。
验收标准
- 能说明一条导出剧情如何按
gameTime跑满一年。 - 能说明中途触发终局时,年线如何停下来并交给终局收束。
- 能说明没有触发终局时,年线如何在年末正常收口。
- 能说明这条线不需要新增终局玩法表,也不需要改存档结构。
关联文档
docs/design/completed/narrative/story-event-nodes-v1.mddocs/design/completed/gameplay/剧情与随机事件结合玩法设计.mddocs/design/6.26玩法/任务线失败终局运行时技术文档.mddocs/design/6.26玩法/终局复盘重开与时间点存档技术文档.mddocs/handoff/storyline-conversion-log.md