# Scene Plan

> 场景规划工具，完成场景清单（步骤8）→场景详细规划（步骤9）的完整场景设计链。当用户说"场景规划"、"规划场景"、"场景设计"、"场景清单"、"规划章节"时自动激活。可独立使用，也可在 snowflake-fiction 主流程中被调用。支持全量规划和局部重跑。

- Skill: `hestudy/scene-plan` (Agent Skill)
- Install (CLI): `npx skillmds@latest add hestudy/scene-plan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hestudy/scene-plan/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: hestudy (https://skillmd.com/u/hestudy)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/hestudy/scene-plan

---


# 场景规划 Skill

覆盖雪花写作法中场景线的完整两步链：

| 步骤 | 内容 | 输出物 |
|------|------|--------|
| 步骤8 | 场景清单（所有场景的结构化列表） | `07-场景清单.md` |
| 步骤9 | 场景详细规划（每个场景的三要素展开） | `08-场景规划/场景[##]-[名].md` |

## 使用时机

- 大纲完成后，进入正文创作前
- 修改大纲后，需要重新规划受影响的章节
- 创作中途发现某章节场景设计有问题，局部重跑
- 独立设计某几章的场景，不走完整流程

---

## 三种使用模式

### 模式A：全量规划（默认）

基于完整大纲，生成所有章节的场景清单和详细规划。

```
/scene-plan
/scene-plan --from 03-完整大纲.md
```

执行顺序：步骤8（全量清单）→ 步骤9（逐场景规划）

### 模式B：局部规划（指定章节）

只规划指定章节范围，适合修改大纲后的局部重跑。

```
/scene-plan 第3章
/scene-plan 第3章-第5章
/scene-plan 第3章 第7章 第10章
```

执行顺序：更新清单中对应行 → 重新生成指定章节的场景规划文件

### 模式C：仅生成清单（步骤8）

只生成场景清单，不展开详细规划。适合快速预览结构。

```
/scene-plan --list-only
/scene-plan 第1章-第5章 --list-only
```

---

## 详细执行流程

### 步骤8：场景清单

**目标**：将大纲中的每个章节拆解为具体场景，形成结构化清单

**执行方式**：
1. 读取完整大纲文件（`03-完整大纲.md` 或用户指定文件）
2. 如果存在人物宝典，一并读取（确保 POV 和人物信息准确）
3. 为每个章节拆解场景，遵守以下规则：
   - 每个场景必须有明确冲突，无纯过渡场景
   - 标注场景类型（主动/被动）
   - 主动-被动场景交替出现，避免连续同类型
4. 生成统计信息（总场景数、类型分布、冲突类型分布）
5. 用户确认清单后，进入步骤9

**场景拆解原则**：

| 原则 | 说明 |
|------|------|
| 冲突必须存在 | 每个场景都要有人vs人/人vs自我/人vs环境的冲突 |
| 无过渡场景 | "主角走去咖啡馆"不是场景，"主角在咖啡馆被拒绝"才是 |
| 主被动交替 | 主动场景后接被动场景，形成节奏感 |
| 冲突强度递增 | 后期场景的冲突强度要高于前期 |

### 副本结构标注

每个副本（一段完整的故事事件）由多个场景组成，场景清单中需标注每个场景在副本三段式中的位置：

| 副本阶段 | 场景功能 | 标注 |
|----------|----------|------|
| 起因 | 铺垫期待，丢饵让读者预见即将发生的事 | `[预热]` |
| 经过 | 故事主干，冲突展开，爽点逐步引爆 | `[爆发]` |
| 结果 | 收获成长，高潮延续，舒缓节奏 | `[回味]` |

检查：每个副本是否三段齐全？是否有只有"经过"没有"起因"和"结果"的副本？

### 副本核心人数控制

> 来源：番茄巅峰榜作家纸老虎（百万字群像文实战经验）。

每个副本中参与的核心角色数量需要控制，避免角色扎堆导致反应处理困难：

| 篇幅 | 主角团总人数建议 | 单副本核心人数 | 说明 |
|------|-----------------|---------------|------|
| 短篇（<30万字） | 3人最佳 | 1-2人 | 充分彰显圆形人物的成长 |
| 长篇（30-100万字） | 3-5人 | 1-3人 | 其余适当隐没淡化 |
| 超长篇（100万字+） | 5-7人 | 1-3人 | 每副本聚焦少数角色 |

**场景清单中标注**：在每个副本的场景中标注「本副本核心角色」，确保不超过3人。

### 群像角色引入的事件触发规则

> 每个角色的引入都必须通过事件触发，不能扎堆出场。

**引入原则**：
1. 从核心人物（主角）起笔，建立读者代入感
2. 其余角色通过事件逐个引入，分批次展现
3. 每个角色的引入事件必须展露其至少一个人设标签
4. 引入动机分两类：外部压力驱动（被动入局）或内部价值驱动（主动入局）

**场景清单检查**：
- [ ] 是否有多个新角色在同一场景同时出场？（应拆分为多个场景逐个引入）
- [ ] 每个角色的首次出场是否有对应的引入事件？
- [ ] 引入事件是否展露了角色的表层标签？

**引入事件设计模板**：

```
角色：[名]
引入场景：[场景名]
引入方式：[主动入局/被动入局]
引入事件：[什么事件让这个角色与主角团产生连接]
展露标签：[通过这个事件展露的人设标签]
与主角的牵扯：[为什么这个角色会留在主角团]
```

### 锁链模式编排

场景编排不要用串联模式（A副本全部结束→B副本开始），要用锁链模式——下一个副本的起因场景嵌入前一个副本的经过中：

```
副本A场景1[预热] → 副本A场景2[爆发] → 副本B场景1[预热] → 副本A场景3[回味] → 副本B场景2[爆发]...
```

这样期待感不会断，高潮过后不会因为期待感耗尽而掉追读。

### 倒推法规划

规划场景时推荐使用倒推法：
1. 先确定副本的高潮场景（爽点/结局）
2. 从高潮倒推需要哪些前置场景
3. 最后补充起因场景的铺垫和伏笔

### 时间线类型的场景编排策略

读取 `00-一句话概括.md` 中的时间线类型元数据，按对应策略编排场景。

**顺叙**：标准编排，按上述原则即可。

**圆环时间线**：三线并行编排

```
现在线 ═══╗═══════╗═══════╗═══ 闭合
过去线 ───╝───────╝       │
未来线 ───────────────────╝
```

- 三线占比建议：现在线 50-60%、过去线 20-30%、未来线 10-20%
- 场景清单扩展字段：增加「所属时间线」列（现在/过去/未来）
- 编排原则：
  - 现在线是主线，承载核心冲突
  - 过去线通过闪回揭示原因，每次闪回必须回答一个「为什么」
  - 未来线制造悬念，暗示结局走向
  - 时间线切换点必须有「锚点」（感官触发、物品关联、台词呼应）
  - 每次切换后的第一句必须明确时间线归属

**读档制**：循环+分支编排

```
存档点 → 第1次尝试 → 失败 → 回档
存档点 → 第2次尝试（新策略）→ 失败 → 回档
存档点 → 第3次尝试（突破）→ 成功 → 新存档点
```

- 场景清单扩展字段：增加「循环轮次」「已知信息」列
- 防流水账要点：
  - 每次循环必须有新发现（信息增量 > 0）
  - 重复场景递减篇幅（第1次详写 → 第2次略写 → 第3次一笔带过）
  - 情绪必须递进（好奇 → 焦虑 → 绝望 → 突破）
  - 每轮循环的失败方式不同

**纯循环**：周期重复编排

与读档制的区别：纯循环中主角不一定记得上一轮，变化是外部的或潜意识的。

- 编排原则：
  - 每个循环是一个完整的「微型三幕」
  - 循环之间通过微小变化（一个细节不同）制造递进
  - 用重复的句子/场景作为循环标记（读者的「锚」）
  - 打破循环的关键在于主角的内在转变

**多线并行**：组合编排

| 常见组合 | 说明 | 切换频率 |
|----------|------|----------|
| 主角线 + 反派线 | 双视角对抗 | 每2-3章切换 |
| 现在线 + 回忆线 | 双时间叙事 | 每章穿插 |
| A组线 + B组线 + C组线 | 群像叙事 | 每1-2章轮转 |

- 编排原则：
  - 每条线独立成立，有自己的冲突和节奏
  - 交汇点是高潮，各线在此碰撞
  - 切换时用「悬念钩」收尾，让读者期待回到这条线
  - 场景清单中标注每个场景所属的线

**输出格式**：

```markdown
## 场景清单

| # | 章节 | 场景名 | 地点 | POV | 参与人物 | 核心冲突 | 类型 | 副本阶段 | 预估字数 |
|---|------|--------|------|-----|----------|----------|------|----------|----------|
| 1 | 第1章 | 开场-梦想被否定 | 咖啡馆 | 主角 | 主、母 | 梦想被否定 | 主动 | [预热] | 800 |
| 2 | 第1章 | 独处-自我怀疑 | 出租屋 | 主角 | 主 | 自我怀疑 | 被动 | [爆发] | 600 |

### 统计
- 总场景数：X
- 主动场景：X（占X%）
- 被动场景：X（占X%）
- 预估总字数：X万字

### 冲突类型分布
- 人vs人：X个
- 人vs自我：X个
- 人vs环境：X个
```

---

### 步骤9：场景详细规划

**目标**：为每个场景展开三要素，形成写作时的详细参考

**执行方式**：
1. 读取步骤8生成的场景清单
2. 逐场景展开，根据类型选择对应模板：
   - **主动场景**：目标 → 冲突 → 挫折
   - **被动场景**：反应 → 困难 → 决定
3. 补充场景细节（开场画面、关键对话、转折点、结尾画面）
4. 绘制情绪曲线
5. 每个场景保存为独立文件

**主动场景三要素**：

```
目标（Goal）：主角在这一场景想要达成什么？
  ├── 表面目标（他说他想要什么）
  └── 深层动机（他真正想要什么）

冲突（Conflict）：什么力量阻碍他？
  ├── 人物冲突（谁在阻碍？）
  ├── 环境冲突（什么环境障碍？）
  └── 内心冲突（什么内心挣扎？）

挫折（Disaster）：结果如何？
  ├── 不能完全成功（要有代价）
  └── 开启下一个场景的钩子
```

**被动场景三要素**：

```
反应（Reaction）：主角对上一场景挫折的反应
  ├── 情绪反应（愤怒/悲伤/恐惧/困惑）
  └── 行为反应（他做了什么？）

困难（Dilemma）：内心的两难选择
  ├── 选项A（好处 vs 代价）
  └── 选项B（好处 vs 代价）

决定（Decision）：做出什么新决定？
  └── 开启下一个主动场景
```

**参考模板**：[场景规划完整模板](../snowflake-fiction/references/scene-template.md)

### 非顺叙时间线的场景规划补充

如果 `00-一句话概括.md` 中记录的时间线类型不是顺叙，步骤9的场景规划需要补充以下字段：

**通用扩展字段**（所有非顺叙时间线）：

```markdown
### 时间线信息
- **所属时间线**：[现在/过去/未来/A线/B线/第N轮循环]
- **与其他时间线的关联**：[与哪条线的哪个场景呼应]
- **信息差状态**：[读者此时知道什么/不知道什么]
- **切换锚点**：[从上一个时间线切换过来的触发物/感官/台词]
```

**读档制场景的特殊三要素**：

读档制的场景不适用标准的「目标→冲突→挫折」，改用：

```
已知信息（Know）：主角从上一轮循环中带来了什么信息？
  ├── 确认的事实（上一轮验证过的）
  └── 未验证的猜测（本轮要验证的）

新发现（Discover）：本轮循环中发现了什么新东西？
  ├── 新线索（推动解谜）
  └── 新规则（改变策略）

失败/突破（Fail/Break）：本轮结果如何？
  ├── 失败 → 新的已知信息 → 下一轮循环
  └── 突破 → 进入新阶段
```

---

## 输出管理

### 目录检测逻辑

```
1. 检查当前目录是否存在小说项目目录（含 05-完整大纲.md）
2. 如果存在 → 保存到该项目目录下
3. 如果不存在 → 询问用户大纲文件位置
4. 如果用户指定路径 → 优先使用用户指定路径
```

### 输出目录结构

```
[小说名]/
├── 07-场景清单.md              ← 步骤8输出（全量清单）
└── 08-场景规划/
    ├── 场景01-开场-梦想被否定.md  ← 步骤9输出（每场景一文件）
    ├── 场景02-独处-自我怀疑.md
    └── ...
```

### 局部重跑的文件处理

```
重跑第3章-第5章时：
1. 更新 07-场景清单.md 中对应行（保留其他行不变）
2. 删除 08-场景规划/ 中对应章节的旧文件
3. 生成新的场景规划文件
4. 输出变更摘要（哪些文件被更新/删除/新增）
```

---

## 节奏检查

生成场景清单后，自动执行节奏检查：

| 检查项 | 规则 | 警告条件 |
|--------|------|----------|
| 主被动交替 | 避免连续3个以上同类型场景 | 连续≥3个主动或被动场景 |
| 冲突强度 | 后期场景冲突强度 ≥ 前期 | 高潮前冲突强度低于中段 |
| 场景密度 | 每章2-4个场景为宜 | 单章场景数 ≥5 或 =1 |
| 无冲突场景 | 每个场景必须有冲突 | 核心冲突栏为空 |
| 副本三段式 | 每个副本需包含预热→爆发→回味 | 副本缺少起因或结果阶段 |
| 锁链衔接 | 下一副本的预热场景嵌入前一副本中 | 副本之间无交叉铺垫 |
| 副本核心人数 | 每个副本核心角色≤3人 | 单副本核心角色>3人 |
| 角色引入 | 新角色通过事件逐个引入 | 多个新角色同一场景扎堆出场 |

节奏检查结果附在清单末尾，供用户调整。

### 悬念密度检查（崩文预防）

| 检查项 | 规则 | 警告条件 |
|--------|------|----------|
| 钩子密度 | 每章至少1.75个活跃钩子 | 钩子数 <1.5 |
| 悬念交替 | 悬念1揭晓前已铺垫悬念2 | 连续5个场景无新悬念铺垫 |
| 问题线追踪 | 每章至少1条未解决问题线 | 所有问题当章解决 |

**场景规划时的悬念标注**：

在步骤9（场景详细规划）中，为每个场景标注悬念点：

```markdown
## 场景03：咖啡馆对峙

### 伏笔场景标注

在步骤9（场景详细规划）中，为每个场景标注伏笔信息：

```markdown
### 伏笔标注
- **埋设伏笔**：[本场景埋下的伏笔，标注深/浅]
  - 深伏笔：长线铺垫，引爆时爽感强（如角色秘密、主线反转）
  - 浅伏笔：短平快，当章或近章引爆（如即时打脸、小反转）
- **收束伏笔**：[本场景收束的前文伏笔]
- **主角闪光点**：[如有，标注主角的破局之策——不只是赢，而是怎么赢]
```

**悬念点**：
- 中段悬念：对方提到"你父亲的秘密"（0.5个钩子）
- 结尾悬念：对方留下神秘信封后离开（1个钩子）
- 未解决问题：信封里是什么？父亲到底隐瞒了什么？（0.5个钩子）

**本场景钩子数**：2个（合格）
```

### 换地图场景的特殊处理

换地图时，场景规划必须确保：
- 换地图的场景本身有冲突（不是纯过渡）
- 主线冲突在新地图延续
- 新地图设定通过冲突展示（不是背景说明）

```markdown
❌ 错误的换地图场景：
场景15：抵达北境
- 描写北境的雪景和城市布局
- 介绍北境的三大家族
（纯背景介绍，无冲突）

✅ 正确的换地图场景：
场景15：北境遇袭
- 主角刚进城就被杀手伏击（冲突延续）
- 通过战斗展示北境的"外来者必死"规矩（设定融入冲突）
- 结尾：杀手说"欢迎来到我的地盘"（悬念）
```

---

## 与主流程的集成

当 `snowflake-fiction` 主 skill 执行到步骤8、9时，自动调用本 skill。

主流程调用方式：
```
# 主流程内部调用（用户不感知）
scene-plan --step 8 --from 03-完整大纲.md
scene-plan --step 9 --from 05-场景清单.md
```

独立调用时，本 skill 自动检测项目上下文，读取已有大纲文件。

---

## 注意事项

1. **先确认大纲**：步骤8依赖完整大纲，大纲未定稿前不建议规划场景
2. **清单先于规划**：必须先完成步骤8的清单，再展开步骤9的详细规划
3. **局部重跑时**：只更新指定章节，不影响其他章节的已有规划
4. **场景命名**：场景名要有张力，体现核心冲突（"梦想被否定"优于"咖啡馆对话"）

