@cloud411716/fancy-webnovel 1.0.46 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +183 -0
- package/cordis.patch.yml +0 -14
- package/index.js +21 -37
- package/lib/chinese-num.js +111 -0
- package/lib/deployed-state.js +141 -0
- package/lib/error-codes.js +104 -0
- package/lib/infra.js +569 -0
- package/lib/llm-wiki.js +109 -0
- package/lib/safe-rm.js +94 -0
- package/lib/scraper-utils.js +165 -0
- package/package.json +37 -5
- package/plugins/fancy-analyze/command-input.js +65 -0
- package/plugins/fancy-analyze/index.js +973 -0
- package/plugins/fancy-analyze/schema-analyze.md +379 -0
- package/plugins/fancy-analyze/schema-write.md +178 -0
- package/plugins/fancy-analyze/scripts/split_source.js +292 -0
- package/plugins/fancy-analyze/summary-progress.js +431 -0
- package/plugins/fancy-analyze/templates.js +881 -0
- package/plugins/fancy-bootstrap/index.js +168 -0
- package/plugins/fancy-bootstrap/scripts/init.js +143 -0
- package/plugins/fancy-bootstrap/scripts/path-utils.js +21 -0
- package/plugins/fancy-bootstrap/templates.js +54 -0
- package/plugins/fancy-import/import-core.js +1118 -0
- package/plugins/fancy-import/import-driver.js +581 -0
- package/plugins/fancy-import/index.js +730 -0
- package/plugins/fancy-import/prompts/01-import-prompt.md +106 -0
- package/plugins/fancy-import/templates.js +49 -0
- package/plugins/fancy-scan/index.js +319 -0
- package/plugins/fancy-scan/scripts/run-scan.js +520 -0
- package/plugins/fancy-scan/scripts/scrapers/fanqie-rank-scraper.js +794 -0
- package/plugins/fancy-scan/scripts/scrapers/jjwxc-rank-scraper.js +339 -0
- package/plugins/fancy-scan/scripts/scrapers/qimao-rank-scraper.js +611 -0
- package/plugins/fancy-scan/templates.js +295 -0
- package/plugins/fancy-story-builder/deploy-manifest.js +239 -0
- package/plugins/fancy-story-builder/deslop-driver.js +821 -0
- package/plugins/fancy-story-builder/flesh-output.js +155 -0
- package/plugins/fancy-story-builder/index.js +3152 -0
- package/plugins/fancy-story-builder/prompts/01-skeleton-prompt.md +553 -0
- package/plugins/fancy-story-builder/prompts/02-flesh-prompt.md +540 -0
- package/plugins/fancy-story-builder/prompts/03-rhythm-prompt.md +504 -0
- package/plugins/fancy-story-builder/prompts/04-writing-prompt.md +188 -0
- package/plugins/fancy-story-builder/prompts/05-deslop-prompt.md +96 -0
- package/plugins/fancy-story-builder/purpose-template.md +107 -0
- package/plugins/fancy-story-builder/references/formulas-rhythm.json +302 -0
- package/plugins/fancy-story-builder/references/formulas-skeleton.json +229 -0
- package/plugins/fancy-story-builder/references/glossary.md +585 -0
- package/plugins/fancy-story-builder/references/index.md +490 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/00-index.md +174 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/01-scene.md +150 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/02-chapter-workflow.md +99 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/03-opening-chapter.md +104 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/04-dialogue-mastery.md +274 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/05-genre-formulas.md +432 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/06-tone-ensemble.md +259 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/07-ledger-audit.md +222 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/08-diagnosis-revision.md +205 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/09-reading-power.md +135 -0
- package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/10-deslop.md +129 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/00-index.md +98 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/01-upgrade-rhythm.md +300 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/02-arc-rhythm.md +168 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/03-highpoint-hooks.md +189 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/04-satisfaction.md +226 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/05-foreshadow-density.md +195 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/06-chapter-outline.md +226 -0
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/07-audit.md +163 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/00-index.md +100 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/01-character.md +239 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/02-worldbuilding.md +245 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/03-relations.md +181 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/04-emotion-methods.md +286 -0
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/05-audit.md +177 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/00-index.md +91 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/01-positioning.md +208 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/02-packaging.md +135 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/03-entities.md +305 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/04-conflict.md +328 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/05-quota.md +187 -0
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/06-audit.md +142 -0
- package/plugins/fancy-story-builder/rhythm-output.js +140 -0
- package/plugins/fancy-story-builder/schema-setting.md +324 -0
- package/plugins/fancy-story-builder/scripts/ai-patterns.js +619 -0
- package/plugins/fancy-story-builder/scripts/check-guide-compliance.js +289 -0
- package/plugins/fancy-story-builder/scripts/content-quality.js +413 -0
- package/plugins/fancy-story-builder/scripts/deslop-validate.js +143 -0
- package/plugins/fancy-story-builder/scripts/error-classes.js +112 -0
- package/plugins/fancy-story-builder/scripts/flesh-validate.js +1189 -0
- package/plugins/fancy-story-builder/scripts/formula-engine.js +112 -0
- package/plugins/fancy-story-builder/scripts/graph-utils.js +1385 -0
- package/plugins/fancy-story-builder/scripts/label-coverage.js +171 -0
- package/plugins/fancy-story-builder/scripts/prompt-drift-check.js +441 -0
- package/plugins/fancy-story-builder/scripts/reading-power.js +298 -0
- package/plugins/fancy-story-builder/scripts/rhythm-validate.js +1216 -0
- package/plugins/fancy-story-builder/scripts/semantic-lint.js +377 -0
- package/plugins/fancy-story-builder/scripts/skeleton-quota.js +145 -0
- package/plugins/fancy-story-builder/scripts/skeleton-validate.js +1832 -0
- package/plugins/fancy-story-builder/scripts/stage-batches.js +1371 -0
- package/plugins/fancy-story-builder/scripts/stage-contract.js +417 -0
- package/plugins/fancy-story-builder/scripts/upstream-query.js +198 -0
- package/plugins/fancy-story-builder/scripts/writing-rules.js +167 -0
- package/plugins/fancy-story-builder/scripts/writing-validate.js +682 -0
- package/plugins/fancy-story-builder/skeleton-output.js +199 -0
- package/plugins/fancy-story-builder/stage-driver.js +1049 -0
- package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//346/227/266/345/272/217/346/230/240/345/260/204/346/250/241/346/235/277.json +204 -0
- package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//347/253/240/350/212/202/347/273/206/347/272/262/346/250/241/346/235/277.json +34 -0
- package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//347/253/240/350/212/202/350/247/204/345/210/222/346/250/241/346/235/277.json +24 -0
- package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//350/212/202/345/245/217/345/217/202/346/225/260/346/250/241/346/235/277.json +27 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//344/270/226/347/225/214/350/247/202/350/247/204/345/210/231/346/250/241/346/235/277.json +66 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/205/263/351/224/256/351/201/223/345/205/267/346/250/241/346/235/277.json +76 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/206/262/347/252/201/346/250/241/346/235/277.json +72 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/211/247/346/203/205/346/250/241/346/235/277.json +37 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/212/277/345/212/233/346/250/241/346/235/277.json +53 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/234/260/347/202/271/346/250/241/346/235/277.json +40 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//347/273/223/345/261/200/346/250/241/346/235/277.json +79 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//350/247/222/350/211/262/346/250/241/346/235/277.json +132 -0
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/205/263/347/263/273/346/250/241/346/235/277.json +133 -0
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/256/236/344/275/223/346/250/241/346/235/277.json +160 -0
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/261/202/347/272/247/346/250/241/346/235/277.json +65 -0
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//346/241/206/346/236/266/346/250/241/346/235/277.json +134 -0
- package/plugins/fancy-story-builder/templates.js +1248 -0
- package/plugins/fancy-story-builder/wiki-references.js +204 -0
- package/plugins/fancy-story-builder/writing-driver.js +1061 -0
- package/plugins/fancy-topic/index.js +704 -0
- package/plugins/fancy-topic/scripts/select-topic.js +274 -0
- package/plugins/fancy-topic/templates.js +373 -0
- package/commands/bootstrap/index.js +0 -164
- package/commands/bootstrap/init-project.js +0 -121
- package/commands/scan/index.js +0 -283
- package/commands/scan/platforms/fanqie.js +0 -146
- package/commands/scan/platforms/jinjiang.js +0 -143
- package/commands/scan/platforms/qidian.js +0 -102
- package/commands/scan/platforms/qimao.js +0 -127
- package/commands/scan/scraper.js +0 -195
- package/infra.js +0 -160
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# 高潮与钩子
|
|
2
|
+
|
|
3
|
+
> 节奏阶段第 3 份。定高潮分类、章首 7 式、章尾 13 式、钩子强度判定。
|
|
4
|
+
> 本文件不写数据结构(→ 时序映射模板.json),不写具体章数(→ formulas-rhythm.json)。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 一、决策路由
|
|
9
|
+
|
|
10
|
+
| 你在做什么 | 用哪节 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 定高潮位置 | §2 高潮分类 |
|
|
13
|
+
| 选章首钩子 | §3 章首 7 式 |
|
|
14
|
+
| 选章尾钩子 | §4 章尾 13 式 |
|
|
15
|
+
| 判定钩子强度 | §5 钩子强度 |
|
|
16
|
+
| 章节阶段与钩子 | §6 阶段 → 钩子 |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 二、高潮分类
|
|
21
|
+
|
|
22
|
+
### 2.1 两大类
|
|
23
|
+
|
|
24
|
+
**现实高潮**(社会热点):路怒症、出轨、霸凌等。不照搬,把情绪极限化。一般放在开头或上架节点。
|
|
25
|
+
|
|
26
|
+
**作品高潮**(八类):
|
|
27
|
+
|
|
28
|
+
| 类别 | 典型 |
|
|
29
|
+
|---|---|
|
|
30
|
+
| 情绪共鸣 | 热血、七情、爱恋 |
|
|
31
|
+
| 六感冲击 | 玄幻大场面、恐怖视觉 |
|
|
32
|
+
| 冲突爆发 | 争权夺势、背叛谋利 |
|
|
33
|
+
| 升级收获 | 境界突破、装备获取 |
|
|
34
|
+
| 反差震惊 | 装逼打脸、身份曝光 |
|
|
35
|
+
| 高智解密 | 悬疑推理、计谋揭秘 |
|
|
36
|
+
| 怪诞诡异 | 规则怪谈、克苏鲁 |
|
|
37
|
+
| 情感质变 | 表白、和解、决裂、重逢 |
|
|
38
|
+
|
|
39
|
+
### 2.2 高潮层级
|
|
40
|
+
|
|
41
|
+
高潮按叙事层级分三层,骨架已在 `climaxes` 实体中定:
|
|
42
|
+
- **大高潮**:卷级高潮
|
|
43
|
+
- **中高潮**:桥段级高潮(更细分)
|
|
44
|
+
- **小高潮**:单元级高潮
|
|
45
|
+
|
|
46
|
+
**具体时长由 `formulas-rhythm.json` 的 `climax_duration` 定义**,本文件不重复数字。
|
|
47
|
+
|
|
48
|
+
### 2.3 高潮定位的落点
|
|
49
|
+
|
|
50
|
+
高潮在 `时序映射.json` 的 `climax_timeline[].chapter` 中落章号。每个骨架 `climaxes[]` 实体的 id 对应一个章。
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 三、章首 7 式
|
|
55
|
+
|
|
56
|
+
| # | 名称 | 公式 | 示例 |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| 1 | 悬念对话 | 直接从意味深长的对话开始 | "你确定要这么做?/ 确定。/ 那你就别后悔。" |
|
|
59
|
+
| 2 | 闪前碎片 | 先给结果碎片,再回正常叙事 | "后来他才知道,那个电话改变了所有事。但此刻他还一无所知。" |
|
|
60
|
+
| 3 | 倒计时 | 开头就建立紧迫感 | "距离合同到期还有七十二小时。" |
|
|
61
|
+
| 4 | 神秘独白 | 第一人称诡异内心独白 | "我一直在想,那天如果我没有回头,一切会不会不一样。" |
|
|
62
|
+
| 5 | 反差场景 | 两个截然不同的场景并列 | "一边是婚礼现场,香槟塔堆得老高。另一边,医院走廊的灯在闪。" |
|
|
63
|
+
| 6 | 未完成动作 | 动作进行中被截断 | "他刚把钥匙插进锁孔,门里传来一声轻响。" |
|
|
64
|
+
| 7 | 意象预示 | 用环境意象暗示即将发生的事 | "天边烧得通红,像是什么东西在着。她抬头看了一眼,继续走。" |
|
|
65
|
+
|
|
66
|
+
### 3.1 章首策略 → 7 式标签
|
|
67
|
+
|
|
68
|
+
| 开篇策略 | 适用 7 式 |
|
|
69
|
+
|---|---|
|
|
70
|
+
| 直接冲击 | 未完成动作 / 倒计时 |
|
|
71
|
+
| 制造好奇 | 悬念对话 / 闪前碎片 / 神秘独白 |
|
|
72
|
+
| 对比冲击 | 反差场景 / 意象预示 |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 四、章尾 13 式
|
|
77
|
+
|
|
78
|
+
| # | 名称 | 公式 | 示例 |
|
|
79
|
+
|---|---|---|---|
|
|
80
|
+
| 1 | 突然揭示 | 抛出改变全局的信息 | "信上的日期,是他死后第七天。" |
|
|
81
|
+
| 2 | 紧急危机 | 下章必须回应的紧迫威胁 | "裂缝在扩大,灵石还差三块。" |
|
|
82
|
+
| 3 | 未完成动作 | 动作被新变量打断 | "他刚伸手,手腕忽然被人扣住。'别动。'身后传来一个声音。" |
|
|
83
|
+
| 4 | 身份反转 | 身份真相偏离读者预期 | "她叫林小月。但档案上写的是:林小月,已故。" |
|
|
84
|
+
| 5 | 两难抉择 | 被迫在两个坏选项中选一个 | "签了这份文件,公司保住了,但他得进去。" |
|
|
85
|
+
| 6 | 神秘物品 | 重要但含义未知的物件 | "包裹里是一把钥匙,附了张纸条:'你欠我的。'" |
|
|
86
|
+
| 7 | 倒计时 | 时间不够用 | "医生说还有三个月。那是两个月前的事了。" |
|
|
87
|
+
| 8 | 承诺/威胁 | 有人宣布了行动意图 | "今晚十二点之前,我会告诉所有人你做了什么。" |
|
|
88
|
+
| 9 | 离奇消失 | 不可能的消失 | "手铐还在,人没了。整个房间只有一个门,门没开过。" |
|
|
89
|
+
| 10 | 隐藏含义 | 表面正常,实际暗藏信息 | "他说:'你和妹妹真像。'可她是独生女。" |
|
|
90
|
+
| 11 | 意象钩子 | 反复出现的意象发生变化 | "窗台上那盆枯了一个月的茉莉,突然冒出了花苞。" |
|
|
91
|
+
| 12 | 回声钩子 | 章尾句呼应开头,关键细节变了 | 开头:"她说她永远不会原谅他。" / 结尾:"她说她永远不会原谅他。但她的手,攥得更紧了。" |
|
|
92
|
+
| 13 | 留白钩子 | 只展示反应,不揭示发生了什么 | "他看了信。脸色变了。什么也没说,把信叠好放进口袋。" |
|
|
93
|
+
|
|
94
|
+
**回声钩子结构**:章首与章尾是**同一句或近义句**,关键细节变化。不是"章首一句 + 章尾一句"拼接。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 五、钩子强度
|
|
99
|
+
|
|
100
|
+
### 5.1 三选一判定
|
|
101
|
+
|
|
102
|
+
| 强度 | 判定标准(三选一即可) |
|
|
103
|
+
|---|---|
|
|
104
|
+
| 强 | 信息颠覆度:改变全局认知;威胁紧迫度:下章必须回应;情感冲击力:角色命运级转折 |
|
|
105
|
+
| 中 | 信息推进度:局部新信息;威胁可控度:几章内回应;情感波动:关系变化 |
|
|
106
|
+
| 弱 | 信息补充:背景/日常;无紧迫威胁;情感平稳 |
|
|
107
|
+
|
|
108
|
+
### 5.2 规则
|
|
109
|
+
|
|
110
|
+
- **情绪值高**的章必须强钩子
|
|
111
|
+
- **关键节点**(如卷首/卷末/中点/大高潮章)必须强钩子
|
|
112
|
+
- **日常章**可用中/弱钩子
|
|
113
|
+
- **卷末钩子**必须是强钩子
|
|
114
|
+
|
|
115
|
+
**"情绪值高"和"关键节点"的具体阈值由 `formulas-rhythm.json` 的 `hook_strength_constraint` 定义**,本文件不重复数字。
|
|
116
|
+
|
|
117
|
+
### 5.3 连续两章不用同一种钩子
|
|
118
|
+
|
|
119
|
+
规则:连续两章的章尾钩子不同式。
|
|
120
|
+
|
|
121
|
+
例外:
|
|
122
|
+
- 大高潮连续若干章可用同一大类(如"紧急危机"连续用),但每章必须具体化不同威胁(裂缝扩大→灵石差三块→敌人破门),且标注"高潮期同类允许"
|
|
123
|
+
- 跨卷衔接章例外(上一卷末 + 下一卷首可同型)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 六、章节阶段 → 钩子选择
|
|
128
|
+
|
|
129
|
+
| 故事阶段 | 推荐章尾钩子 | 推荐章首钩子 | 强度 |
|
|
130
|
+
|---|---|---|---|
|
|
131
|
+
| 开篇章节 | 突然揭示 / 未完成动作 / 紧急危机 | 未完成动作 / 倒计时 / 悬念对话 | 必须强 |
|
|
132
|
+
| 卷首前几章 | 两难抉择 / 隐藏含义 / 意象钩子 | 悬念对话 / 闪前碎片 | 强 |
|
|
133
|
+
| 中期日常 | 悬念对话 / 隐藏含义 / 身份反转 | 悬念对话 / 神秘独白 | 中 |
|
|
134
|
+
| 高潮前 | 紧急危机 / 承诺威胁 | 倒计时 / 反差场景 | 强 |
|
|
135
|
+
| 大结局 | 突然揭示 / 留白钩子 / 回声钩子 | 闪前碎片 / 意象预示 | 强(收束感) |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 七、示例
|
|
140
|
+
|
|
141
|
+
一本都市复仇文的钩子排布(示意):
|
|
142
|
+
|
|
143
|
+
- 第 1 章章首:未完成动作("陆子仲刚推开门,就看见妹妹的遗照摆在客厅正中")
|
|
144
|
+
- 第 1 章章尾:突然揭示("警察合上笔记本:'对了,你妹妹的手机,我们在园区找到的。'")
|
|
145
|
+
- 第 2 章章首:悬念对话("'你一个人去园区?'老王把烟按灭。")
|
|
146
|
+
- 第 2 章章尾:紧急危机("手机里最后一条录音:'哥,救我。'")
|
|
147
|
+
- ...
|
|
148
|
+
|
|
149
|
+
排布原则:
|
|
150
|
+
- 章首前 100 字内兑现钩子
|
|
151
|
+
- 章尾后 100 字内兑现钩子
|
|
152
|
+
- 连续两章章尾不同式(除非高潮期)
|
|
153
|
+
- 情绪值高的章用强钩子
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 八、常见反例
|
|
158
|
+
|
|
159
|
+
| 反例 | 为什么错 | 正确做法 |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| 章首钩子与上章章尾钩子同型 | 读者感觉重复 | 换式 |
|
|
162
|
+
| 高潮章用弱钩子 | 读者跳章 | 用强钩子 |
|
|
163
|
+
| 回声钩子是两句拼接 | 不是回声 | 同一句复现 |
|
|
164
|
+
| 连续多章同类钩子 | 疲劳 | 换式(高潮期例外) |
|
|
165
|
+
| 卷末钩子不是强钩子 | 读者不追下卷 | 换强钩子 |
|
|
166
|
+
| 章尾钩子超过 100 字 | 挤占正文 | 压到 100 字内 |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 九、与其他文件的关系
|
|
171
|
+
|
|
172
|
+
| 本文件输出 | 落到哪个字段 | 参考哪个公式 | 由哪个脚本验证 |
|
|
173
|
+
|---|---|---|---|
|
|
174
|
+
| 章首/章尾钩子类型 | `hook_timeline[].hook_head` / `hook_tail` | 无 | `rhythm-validate.js` 的 `ENUM`(hook_form_head / hook_form_tail) |
|
|
175
|
+
| 钩子强度 | `hook_timeline[].hook_strength` | formulas-rhythm.json 的 `hook_strength_constraint` | `ENUM`(hook_strength) |
|
|
176
|
+
| 高潮分类 | `climax_timeline[].chapter`(对应骨架 climaxes 实体) | formulas-rhythm.json 的 `climax_duration` | `RHYTHM_REF_MISSING`(climax_id 必须存在于骨架) |
|
|
177
|
+
| 连续同类检查 | 无(设计层) | formulas-rhythm.json 的 `hook_dup_threshold` | `RHYTHM_HOOK_DUP` / `RHYTHM_HOOK_DUP_WARN` |
|
|
178
|
+
|
|
179
|
+
**不输出到**:
|
|
180
|
+
- 章首/章尾的具体文字 → 属于写作阶段
|
|
181
|
+
- 钩子的具体章数阈值 → 由 `formulas-rhythm.json` 定义
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 十、版本记录
|
|
186
|
+
|
|
187
|
+
| 版本 | 变更 |
|
|
188
|
+
|---|---|
|
|
189
|
+
| v1.0 | 从原 03-02 精简重组。删除"大高潮 14 章 / 小高潮 6 章"(移到 formulas-rhythm.json 的 climax_duration);删除检查清单;保留高潮 8 类 / 章首 7 式 / 章尾 13 式 / 钩子强度判定;新增"与其他文件的关系"节 |
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# 爽点分布与压制
|
|
2
|
+
|
|
3
|
+
> 节奏阶段第 4 份。爽点分布、压制换算、期待管理、断期待诊断。
|
|
4
|
+
> 本文件不写具体时长数字(→ formulas-rhythm.json),不写数据结构(→ 时序映射模板.json)。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 一、决策路由
|
|
9
|
+
|
|
10
|
+
| 你在做什么 | 用哪节 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 排爽点分布 | §2 爽点分布 |
|
|
13
|
+
| 算压制时长 | §3 压制换算 |
|
|
14
|
+
| 期待管理 | §4 期待管理 |
|
|
15
|
+
| 断期待诊断 | §5 断期待诊断 |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 二、爽点分布
|
|
20
|
+
|
|
21
|
+
### 2.1 爽点七类
|
|
22
|
+
|
|
23
|
+
| 类型 | 定义 |
|
|
24
|
+
|---|---|
|
|
25
|
+
| 打脸 | 对手嚣张后被碾压 |
|
|
26
|
+
| 收获 | 获得资源/装备/地位 |
|
|
27
|
+
| 身份 | 隐藏身份揭露 |
|
|
28
|
+
| 情感 | 关系质变/被偏爱 |
|
|
29
|
+
| 智力 | 计谋揭晓/解谜 |
|
|
30
|
+
| 探索 | 发现新世界/新真相 |
|
|
31
|
+
| 团战 | 集体胜利 |
|
|
32
|
+
|
|
33
|
+
### 2.2 爽点递增三维度
|
|
34
|
+
|
|
35
|
+
| 维度 | 递进 |
|
|
36
|
+
|---|---|
|
|
37
|
+
| 影响范围 | 个人 → 群体 → 社会 |
|
|
38
|
+
| 揭示深度 | 表象 → 本质 → 颠覆 |
|
|
39
|
+
| 身份落差 | 路人 → 大佬 → 全场震惊 |
|
|
40
|
+
|
|
41
|
+
### 2.3 规则
|
|
42
|
+
|
|
43
|
+
- 连续两章不用同一类型主爽点
|
|
44
|
+
- 爽点按三维度逐级递增
|
|
45
|
+
- 最终爽点层级最高
|
|
46
|
+
|
|
47
|
+
### 2.4 以强击弱 vs 爽点递增(取舍)
|
|
48
|
+
|
|
49
|
+
"以强击弱容易、效果好、多用"与"爽点递增"有张力:
|
|
50
|
+
- 以强击弱一直用,影响范围可递增(打小兵→打将领→打 Boss),但身份落差会递减
|
|
51
|
+
- 取舍:**每用几次以强击弱后,必须插一次以弱胜强或强强对决**,防止身份落差递减
|
|
52
|
+
|
|
53
|
+
### 2.5 落点
|
|
54
|
+
|
|
55
|
+
爽点在 `时序映射.json` 的 `pleasure_timeline[].chapter` 中落章号。每个骨架 `pleasures[]` 实体的 id 对应一个章。
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 三、压制换算
|
|
60
|
+
|
|
61
|
+
### 3.1 压制时长的决定因素
|
|
62
|
+
|
|
63
|
+
压制时长不是固定数字,由**篇幅 × 题材系数**决定。具体系数由 `formulas-rhythm.json` 的 `suppression_duration` 定义,本文件不重复数字。
|
|
64
|
+
|
|
65
|
+
| 弧线/公式 | 题材系数区间 | 释放触发 |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| V 形谷底 | 情感/虐心 | 谷底后立即转折 |
|
|
68
|
+
| 延迟满足压制段 | 复仇/身份揭秘 | 爆发触发点 |
|
|
69
|
+
| 桥段拉扯 | 通用 | 兑现章释放 |
|
|
70
|
+
| 爽文压制 | 世情/爽文 | 受辱后短周期内打脸 |
|
|
71
|
+
| 虐恋压制 | 虐恋 | 虐到一定深度后觉醒 |
|
|
72
|
+
|
|
73
|
+
### 3.2 题材压制红线
|
|
74
|
+
|
|
75
|
+
"连续无转折上限"和"连续压制上限"由 `formulas-rhythm.json` 的 `suppression_redline` 定义。超过红线必须插入转折/小释放。
|
|
76
|
+
|
|
77
|
+
| 题材 | 连续无转折上限 | 连续压制上限 |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| 爽文 | 短 | 短 |
|
|
80
|
+
| 情感/虐心 | 中 | 中长 |
|
|
81
|
+
| 悬疑 | 中 | 中 |
|
|
82
|
+
| 古言/复仇 | 中 | 中 |
|
|
83
|
+
| 年代/亲情 | 中 | 中长 |
|
|
84
|
+
| 正剧/文学 | 长 | 最长 |
|
|
85
|
+
|
|
86
|
+
### 3.3 压制中的安全感
|
|
87
|
+
|
|
88
|
+
**下行情节安全原则**:写情绪下行时,锅都是别人的,功都是主角的。下行中必须给读者安全感(可能的解法/潜在收获)。
|
|
89
|
+
|
|
90
|
+
**缺安全感 = 读者觉得主角活该 = 弃书**。
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 四、期待管理
|
|
95
|
+
|
|
96
|
+
### 4.1 六法则
|
|
97
|
+
|
|
98
|
+
1. **期待最大化定律**:爽点到来前那一刻是全篇张力最高位置。将满足而未满足时,读者需求最大。
|
|
99
|
+
2. **信息顺序操纵**:先植入什么信息,读者就先入为主往哪个方向想。控制信息顺序 = 控制读者预期。
|
|
100
|
+
3. **期待递增法**:在基底期待上不断添加细节,注入更具体化的需求缺口。添加的细节必须与核心梗一致。
|
|
101
|
+
4. **断期待禁止**:下一个期待立起来之前,绝不能结束当前期待。旧期待即将兑现时,新期待的种子必须已种下。
|
|
102
|
+
5. **下行情节安全原则**:下行中必须给读者安全感。
|
|
103
|
+
6. **爽点递增对比**:连续爽点逐级递增。
|
|
104
|
+
|
|
105
|
+
### 4.2 期待感 vs 目标
|
|
106
|
+
|
|
107
|
+
- **目标** = 角色要做什么(找到宝物、打败魔王)
|
|
108
|
+
- **期待感** = 读者对目标达成后会怎样的预期
|
|
109
|
+
- 有目标无期待 = 读者不在乎结果,必须把目标转化为期待
|
|
110
|
+
|
|
111
|
+
### 4.3 确定型 vs 不确定型期待
|
|
112
|
+
|
|
113
|
+
| 类型 | 适用 | 重点 |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| 确定型 | 爽文 | 读者知道主角会赢,写"怎么赢"(过程创意 > 结果悬念) |
|
|
116
|
+
| 不确定型 | 悬疑 | 读者不知道结果(结果悬念 > 过程体验) |
|
|
117
|
+
|
|
118
|
+
爽文不怕"剧透"——因为期待在过程不在结果。
|
|
119
|
+
|
|
120
|
+
### 4.4 悬念的开环与闭环
|
|
121
|
+
|
|
122
|
+
- **开环** = 制造鸿沟(提出问题/悬念)
|
|
123
|
+
- **闭环** = 弥合鸿沟(回答问题/揭晓)
|
|
124
|
+
- **嵌套开环** = 闭环一个期待的同时开启新的
|
|
125
|
+
- **规则**:闭环一个期待时,必须已有下一个开环在运行
|
|
126
|
+
|
|
127
|
+
### 4.5 感情线的鸿沟
|
|
128
|
+
|
|
129
|
+
感情线没有阻碍 = 没有期待 = 白给 = 无意义。必须设置鸿沟。
|
|
130
|
+
|
|
131
|
+
鸿沟来源:身份差距、家族反对、误会、使命冲突。
|
|
132
|
+
|
|
133
|
+
### 4.6 拉期待速度 > 断期待速度
|
|
134
|
+
|
|
135
|
+
不是可量化指标,但可操作化为:
|
|
136
|
+
- 每个单元至少一个开环在运行
|
|
137
|
+
- 闭环一个开环时,下一个开环已在上一章立好
|
|
138
|
+
- 连续几章无开环 = 期待真空期,必须处理
|
|
139
|
+
|
|
140
|
+
**真空期的具体章数阈值由 `formulas-rhythm.json` 的 `expectation_vacuum_threshold` 定义**,本文件不重复数字。
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 五、断期待诊断
|
|
145
|
+
|
|
146
|
+
### 5.1 四种根本原因
|
|
147
|
+
|
|
148
|
+
| 原因 | 读者感受 |
|
|
149
|
+
|---|---|
|
|
150
|
+
| 延迟满足过度 | "到底什么时候才能爽?" |
|
|
151
|
+
| 换地图处理不当 | "之前期待的都没了" |
|
|
152
|
+
| 核心梗重复度太高 | "又是这样,没意思了" |
|
|
153
|
+
| 爽点满足感不足 | "就这?" |
|
|
154
|
+
|
|
155
|
+
### 5.2 修复手段
|
|
156
|
+
|
|
157
|
+
| 手段 | 操作 |
|
|
158
|
+
|---|---|
|
|
159
|
+
| 反派视角转接 | 展示反派行动,制造信息差 |
|
|
160
|
+
| 突发意外 | 不按计划发展的事件强行介入 |
|
|
161
|
+
| 配角杠杆 | 用配角的危机重新制造紧迫感 |
|
|
162
|
+
| 超额收获 | 远超预期的额外奖励 |
|
|
163
|
+
| 开环嵌套 | 闭环一个期待时,同时开两个新环 |
|
|
164
|
+
|
|
165
|
+
### 5.3 期待真空期急救
|
|
166
|
+
|
|
167
|
+
连续几章无开环 = 真空期。急救:
|
|
168
|
+
1. 立即插入一个强开环(新威胁/新秘密/新目标)
|
|
169
|
+
2. 用反派视角制造信息差
|
|
170
|
+
3. 用配角危机重新制造紧迫感
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 六、示例
|
|
175
|
+
|
|
176
|
+
一本都市复仇文的爽点分布(示意):
|
|
177
|
+
|
|
178
|
+
- 第 1 卷的爽点:
|
|
179
|
+
- 第 2 章:收获(拿到妹妹的手机)——影响范围:个人
|
|
180
|
+
- 第 8 章:打脸(首次与坤沙手下正面交锋,用录音扳倒一个小头目)——影响范围:群体
|
|
181
|
+
- 第 15 章:智力(用假身份骗取园区内部信任)——揭示深度:本质
|
|
182
|
+
- 第 25 章:身份("你以为我是保安?我当了八年特种兵")——身份落差:大佬
|
|
183
|
+
- 第 30 章:情感(老王牺牲前的遗言)——情感深度:关系质变
|
|
184
|
+
|
|
185
|
+
- 压制分布:
|
|
186
|
+
- 第 1-3 章:V 形谷底(失去妹妹)
|
|
187
|
+
- 第 5-7 章:桥段拉扯(调查赌徒受阻)
|
|
188
|
+
- 第 12-14 章:延迟满足压制(逼近园区内部,被怀疑)
|
|
189
|
+
- 第 20-22 章:桥段拉扯(证人拒绝合作)
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 七、常见反例
|
|
194
|
+
|
|
195
|
+
| 反例 | 为什么错 | 正确做法 |
|
|
196
|
+
|---|---|---|
|
|
197
|
+
| 连续多章同类型爽点 | 读者疲劳 | 换类型 |
|
|
198
|
+
| 爽点层级不递增 | 读者感受不到"变好" | 按三维度递进 |
|
|
199
|
+
| 压制超过题材红线 | 读者弃书 | 插入小释放 |
|
|
200
|
+
| 压制无安全感 | 读者觉得主角活该 | 给潜在解法 |
|
|
201
|
+
| 期待真空期 | 读者流失 | 立即插入开环 |
|
|
202
|
+
| 开环没闭环 | 读者不满 | 闭环一个才开下一个 |
|
|
203
|
+
| 感情线没有鸿沟 | 白给 | 设置阻碍 |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 八、与其他文件的关系
|
|
208
|
+
|
|
209
|
+
| 本文件输出 | 落到哪个字段 | 参考哪个公式 | 由哪个脚本验证 |
|
|
210
|
+
|---|---|---|---|
|
|
211
|
+
| 爽点分布 | `pleasure_timeline[].chapter` | formulas-rhythm.json 的 `pleasure_distribution` | `RHYTHM_REF_MISSING`(pleasure_id 必须存在于骨架) |
|
|
212
|
+
| 压制段 | 不单独字段(压制通过"没有爽点/没有开环"体现) | formulas-rhythm.json 的 `suppression_duration` / `suppression_redline` | 无(设计层) |
|
|
213
|
+
| 期待开环/闭环 | `foreshadow_timeline`(伏笔就是开环)+ `conflict_timeline` 的 `info_gaps` | formulas-rhythm.json 的 `expectation_vacuum_threshold` | 无(设计层) |
|
|
214
|
+
| 感情线鸿沟 | `角色.json` 的 `relationships[].description` | 无 | 无(设计层) |
|
|
215
|
+
|
|
216
|
+
**不输出到**:
|
|
217
|
+
- 压制时长的具体数字 → 由 `formulas-rhythm.json` 决定
|
|
218
|
+
- 爽点的具体写法 → 属于写作阶段
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 九、版本记录
|
|
223
|
+
|
|
224
|
+
| 版本 | 变更 |
|
|
225
|
+
|---|---|
|
|
226
|
+
| v1.0 | 从原 03-03 精简重组。删除压制时长和红线的具体数字(移到 formulas-rhythm.json);删除检查清单;保留爽点七类/递增三维度/取舍规则/六法则/断期待诊断;新增"与其他文件的关系"节 |
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# 伏笔密度
|
|
2
|
+
|
|
3
|
+
> 节奏阶段第 5 份。伏笔密度的方法论。伏笔清单本身在骨架阶段已确定;本文件讲"怎么在节奏阶段安排密度"。
|
|
4
|
+
> 本文件不写具体公式(→ formulas-skeleton.json 的 foreshadow_elements),不写数据结构(→ 时序映射模板.json)。
|
|
5
|
+
>
|
|
6
|
+
> v1.1 变更:§3.1 和 §3.4 统一"总量由骨架决定"的表述(问题 37)。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、决策路由
|
|
11
|
+
|
|
12
|
+
| 你在做什么 | 用哪节 |
|
|
13
|
+
|---|---|
|
|
14
|
+
| 理解伏笔在节奏阶段的角色 | §2 伏笔的节奏角色 |
|
|
15
|
+
| 安排伏笔密度 | §3 密度原则 |
|
|
16
|
+
| 安排唤醒 | §4 唤醒策略 |
|
|
17
|
+
| 处理超期 | §5 超期处理 |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 二、伏笔的节奏角色
|
|
22
|
+
|
|
23
|
+
### 2.1 伏笔是"开环"的主要来源
|
|
24
|
+
|
|
25
|
+
期待感的"开环"主要来自伏笔。读者看到伏笔 → 产生疑问 → 想知道答案 → 追读。
|
|
26
|
+
|
|
27
|
+
### 2.2 伏笔的三种类型
|
|
28
|
+
|
|
29
|
+
(类型定义在 glossary 的 `foreshadow_type` 枚举)
|
|
30
|
+
|
|
31
|
+
- **小伏笔**:跨几章内的伏笔,回收窗口短
|
|
32
|
+
- **中伏笔**:跨十几章的伏笔,回收窗口中
|
|
33
|
+
- **大伏笔**:跨卷的伏笔,回收窗口长
|
|
34
|
+
|
|
35
|
+
### 2.3 伏笔的章节落点
|
|
36
|
+
|
|
37
|
+
- 埋设章:`foreshadow_timeline[].buried_chapter`
|
|
38
|
+
- 回收章:`foreshadow_timeline[].recovered_chapter`
|
|
39
|
+
- 节奏阶段的核心任务:**为每个伏笔分配合理的埋设章和回收章**
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 三、密度原则
|
|
44
|
+
|
|
45
|
+
### 3.1 总量由骨架决定(节奏阶段不重新计算)
|
|
46
|
+
|
|
47
|
+
**伏笔总数**(小 / 中 / 大各多少)**在骨架阶段已确定**:
|
|
48
|
+
- 数据位置:`框架.json` 的 `quota.foreshadow_counts`(`small` / `medium` / `large` 三个字段)
|
|
49
|
+
- 量化约束:`formulas-skeleton.json` 的 `foreshadow_elements.*` 三条公式(`small_foreshadow_count` / `medium_foreshadow_count` / `large_foreshadow_count`)
|
|
50
|
+
- 实体清单:`实体.json` 的 `foreshadows[]` 数组(每条伏笔有 `id` + `name` + `type`)
|
|
51
|
+
|
|
52
|
+
**节奏阶段不重新决定总量**,只决定"每个伏笔的埋设章和回收章"。
|
|
53
|
+
|
|
54
|
+
**为什么总量在骨架而非节奏**:
|
|
55
|
+
- 伏笔的"存在性"(有哪些伏笔、各是什么类型)属于结构层(骨架)
|
|
56
|
+
- 伏笔的"时间位置"(埋在哪章、收在哪章)属于节奏层(节奏)
|
|
57
|
+
- 如果总量在节奏阶段才定,就无法保证"血肉阶段已经为该伏笔写了回收方式"
|
|
58
|
+
|
|
59
|
+
### 3.2 分布原则
|
|
60
|
+
|
|
61
|
+
- **小伏笔**:均匀分布在全书的各个段,相邻小伏笔之间有间隔
|
|
62
|
+
- **中伏笔**:集中在卷内,每个卷有几个中伏笔
|
|
63
|
+
- **大伏笔**:跨卷,埋设在一卷,回收在另一卷
|
|
64
|
+
|
|
65
|
+
### 3.3 密度检查
|
|
66
|
+
|
|
67
|
+
节奏阶段只需确保:
|
|
68
|
+
- 每个伏笔有埋设章 < 回收章(`RHYTHM_TIMING` 检查)
|
|
69
|
+
- 大伏笔的回收必须与某卷末或全书级结局相关
|
|
70
|
+
- 伏笔的埋设章和回收章在角色出场区间内(涉及角色的伏笔)
|
|
71
|
+
|
|
72
|
+
### 3.4 具体的密度公式(属骨架阶段,节奏阶段只读不写)
|
|
73
|
+
|
|
74
|
+
**具体区间**由 `formulas-skeleton.json` 的 `foreshadow_elements` 三条公式定义(以 V 为基数):
|
|
75
|
+
- `small_foreshadow_count`:`V*3 ~ V*8`(每卷 3~8 个小伏笔)
|
|
76
|
+
- `medium_foreshadow_count`:`max(1, ceil(V/2)) ~ V*2`
|
|
77
|
+
- `large_foreshadow_count`:`max(1, ceil(V/3)) ~ max(2, ceil(V/2))`
|
|
78
|
+
|
|
79
|
+
**节奏阶段只读这三条公式的最终值**(`框架.json` 的 `quota.foreshadow_counts`),用于"分配每个伏笔的埋设章和回收章",**不重新计算总量**。
|
|
80
|
+
|
|
81
|
+
**如果节奏阶段发现某个伏笔无处可放**(比如大伏笔数超出总章数允许的间隔),说明**骨架阶段的 `quota` 选值不合理**——应回骨架阶段调整,而不是在节奏阶段硬凑。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 四、唤醒策略
|
|
86
|
+
|
|
87
|
+
### 4.1 什么是唤醒
|
|
88
|
+
|
|
89
|
+
长期伏笔(尤其大伏笔)从埋设到回收可能跨几十章甚至跨卷。读者可能已经忘记埋设点。**唤醒** = 在回收前加一次"记忆提示"(一句回顾/一个物件复现)。
|
|
90
|
+
|
|
91
|
+
### 4.2 何时需要唤醒
|
|
92
|
+
|
|
93
|
+
- **短伏笔**(回收窗口近):通常不需要唤醒
|
|
94
|
+
- **中伏笔**(回收窗口中):视情况,若间隔长需要
|
|
95
|
+
- **大伏笔**(回收窗口远):几乎都需要唤醒
|
|
96
|
+
|
|
97
|
+
### 4.3 唤醒的落点
|
|
98
|
+
|
|
99
|
+
唤醒不单独建字段。可以在:
|
|
100
|
+
- 伏笔的埋设实体(如 `关键道具.json` 的某个道具)在中间章再次出场
|
|
101
|
+
- `章节细纲.json` 的 `foreshadow_action` 标注"推进 FSxxx"
|
|
102
|
+
- 写作阶段在回收章附近插入"一句回顾"
|
|
103
|
+
|
|
104
|
+
### 4.4 唤醒的判断阈值
|
|
105
|
+
|
|
106
|
+
"是否需要唤醒"的具体间隔阈值由 `formulas-rhythm.json` 的 `foreshadow_guides.foreshadow_wakeup_threshold` 定义:
|
|
107
|
+
|
|
108
|
+
- 小伏笔:不需要唤醒
|
|
109
|
+
- 中伏笔:间隔 > 15 章需要唤醒
|
|
110
|
+
- 大伏笔:几乎都需要唤醒
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 五、超期处理
|
|
115
|
+
|
|
116
|
+
### 5.1 超期的定义
|
|
117
|
+
|
|
118
|
+
当前章节 > 伏笔的预期回收窗口上限时,伏笔**超期**。
|
|
119
|
+
|
|
120
|
+
**超期判定的具体阈值**由 `formulas-rhythm.json` 的 `foreshadow_guides.foreshadow_overdue_threshold` 定义:
|
|
121
|
+
- `chapter_gap = 20`
|
|
122
|
+
- 当前章 > 预期回收窗口上限 + 20 章 = 超期
|
|
123
|
+
|
|
124
|
+
### 5.2 超期的处理
|
|
125
|
+
|
|
126
|
+
| 处理方式 | 操作 |
|
|
127
|
+
|---|---|
|
|
128
|
+
| 立即回收 | 把回收章提前到当前章附近 |
|
|
129
|
+
| 延期 | 更新回收章(修改 `foreshadow_timeline[].recovered_chapter`) |
|
|
130
|
+
| 标 abandoned | 放弃回收,并在记录中注明原因(写作阶段台账) |
|
|
131
|
+
|
|
132
|
+
### 5.3 超期不能无限累积
|
|
133
|
+
|
|
134
|
+
超过一定数量的超期伏笔会成为"叙事债务"。必须处理。
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 六、示例
|
|
139
|
+
|
|
140
|
+
一本都市复仇文的伏笔密度(示意):
|
|
141
|
+
|
|
142
|
+
- 小伏笔(若干条):
|
|
143
|
+
- FS001 "妹妹的旧手机" 埋在早期,回收在中期
|
|
144
|
+
- FS003 "坤沙的左手无名指有伤" 埋在第一次交手,回收在最终对决
|
|
145
|
+
- 每条间隔若干章
|
|
146
|
+
|
|
147
|
+
- 中伏笔(若干条):
|
|
148
|
+
- FS010 "老王有个女儿" 埋在中期,回收在老王牺牲时
|
|
149
|
+
- FS012 "陈队桌上的文件" 埋在中期,回收在警方介入时
|
|
150
|
+
|
|
151
|
+
- 大伏笔(若干条):
|
|
152
|
+
- FS020 "园区背后的军阀" 埋在第一卷,回收在全书的最终对决
|
|
153
|
+
- FS021 "妹妹其实没死"(假象) 埋在第一卷,回收在第三卷
|
|
154
|
+
|
|
155
|
+
- 唤醒策略:
|
|
156
|
+
- FS020(大伏笔)在多个中间章通过"军阀"相关新闻提及,防止读者忘记
|
|
157
|
+
- FS021(大伏笔)通过"妹妹的照片""妹妹的遗物"多次复现
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 七、常见反例
|
|
162
|
+
|
|
163
|
+
| 反例 | 为什么错 | 正确做法 |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| 伏笔只埋不收 | 读者不满 | 每个伏笔必须有回收章 |
|
|
166
|
+
| 大伏笔不唤醒 | 读者忘记 | 中间加唤醒 |
|
|
167
|
+
| 超期伏笔不处理 | 叙事债务累积 | 立即回收/延期/放弃 |
|
|
168
|
+
| 伏笔间隔过密 | 读者疲劳 | 均匀分布 |
|
|
169
|
+
| 只埋"读者注意不到"的小伏笔 | 没形成开环 | 小伏笔也要有足够线索 |
|
|
170
|
+
| 中/大伏笔过多 | 读者记不住 | 中/大伏笔间隔大 |
|
|
171
|
+
| **节奏阶段"重新算伏笔总量"** | **违反骨架-节奏分工** | **总量读骨架的 quota,不重算** |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 八、与其他文件的关系
|
|
176
|
+
|
|
177
|
+
| 本文件输出 | 落到哪个字段 | 参考哪个公式 | 由哪个脚本验证 |
|
|
178
|
+
|---|---|---|---|
|
|
179
|
+
| 伏笔埋设/回收章 | `foreshadow_timeline[].buried_chapter` / `recovered_chapter` | formulas-skeleton.json 的 `foreshadow_elements.*`(总数量,属骨架阶段) | `RHYTHM_TIMING`(埋 < 收) |
|
|
180
|
+
| 唤醒动作 | `章节细纲.json` 的 `foreshadow_action` | formulas-rhythm.json 的 `foreshadow_guides.foreshadow_wakeup_threshold` | 无(设计层) |
|
|
181
|
+
| 超期处理 | 修改 `foreshadow_timeline[].recovered_chapter` 或台账 | formulas-rhythm.json 的 `foreshadow_guides.foreshadow_overdue_threshold` | 无(设计层) |
|
|
182
|
+
| 大伏笔回收 | `ending_timeline[].foreshadow_recovery` | 无 | `RHYTHM_LARGE_FS_NOT_RECOVERED` |
|
|
183
|
+
|
|
184
|
+
**不输出到**:
|
|
185
|
+
- 伏笔总量 → 在骨架阶段定(`框架.json.quota.foreshadow_counts`)
|
|
186
|
+
- 伏笔的具体内容 → 在血肉阶段的实体 `name` 和指导文件的方法论
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 九、版本记录
|
|
191
|
+
|
|
192
|
+
| 版本 | 变更 |
|
|
193
|
+
|---|---|
|
|
194
|
+
| v1.0 | 从原 01-07 §2 提取重组。删除伏笔密度公式(移到 formulas-skeleton.json);删除检查清单;保留密度原则/唤醒策略/超期处理的方法论;新增"与其他文件的关系"节 |
|
|
195
|
+
| v1.1 | §3.1 和 §3.4 统一"总量由骨架决定、节奏阶段只读不写"的表述(问题 37);§3.4 补充三条公式的具体引用路径;§七 常见反例补"节奏阶段重新算总量" |
|