@cloud411716/fancy-webnovel 1.0.45 → 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.
Files changed (134) hide show
  1. package/client.js +183 -0
  2. package/cordis.patch.yml +0 -14
  3. package/index.js +21 -37
  4. package/lib/chinese-num.js +111 -0
  5. package/lib/deployed-state.js +141 -0
  6. package/lib/error-codes.js +104 -0
  7. package/lib/infra.js +569 -0
  8. package/lib/llm-wiki.js +109 -0
  9. package/lib/safe-rm.js +94 -0
  10. package/lib/scraper-utils.js +165 -0
  11. package/package.json +37 -5
  12. package/plugins/fancy-analyze/command-input.js +65 -0
  13. package/plugins/fancy-analyze/index.js +973 -0
  14. package/plugins/fancy-analyze/schema-analyze.md +379 -0
  15. package/plugins/fancy-analyze/schema-write.md +178 -0
  16. package/plugins/fancy-analyze/scripts/split_source.js +292 -0
  17. package/plugins/fancy-analyze/summary-progress.js +431 -0
  18. package/plugins/fancy-analyze/templates.js +881 -0
  19. package/plugins/fancy-bootstrap/index.js +168 -0
  20. package/plugins/fancy-bootstrap/scripts/init.js +143 -0
  21. package/plugins/fancy-bootstrap/scripts/path-utils.js +21 -0
  22. package/plugins/fancy-bootstrap/templates.js +54 -0
  23. package/plugins/fancy-import/import-core.js +1118 -0
  24. package/plugins/fancy-import/import-driver.js +581 -0
  25. package/plugins/fancy-import/index.js +730 -0
  26. package/plugins/fancy-import/prompts/01-import-prompt.md +106 -0
  27. package/plugins/fancy-import/templates.js +49 -0
  28. package/plugins/fancy-scan/index.js +319 -0
  29. package/plugins/fancy-scan/scripts/run-scan.js +520 -0
  30. package/plugins/fancy-scan/scripts/scrapers/fanqie-rank-scraper.js +794 -0
  31. package/plugins/fancy-scan/scripts/scrapers/jjwxc-rank-scraper.js +339 -0
  32. package/plugins/fancy-scan/scripts/scrapers/qimao-rank-scraper.js +611 -0
  33. package/plugins/fancy-scan/templates.js +295 -0
  34. package/plugins/fancy-story-builder/deploy-manifest.js +239 -0
  35. package/plugins/fancy-story-builder/deslop-driver.js +821 -0
  36. package/plugins/fancy-story-builder/flesh-output.js +155 -0
  37. package/plugins/fancy-story-builder/index.js +3152 -0
  38. package/plugins/fancy-story-builder/prompts/01-skeleton-prompt.md +553 -0
  39. package/plugins/fancy-story-builder/prompts/02-flesh-prompt.md +540 -0
  40. package/plugins/fancy-story-builder/prompts/03-rhythm-prompt.md +504 -0
  41. package/plugins/fancy-story-builder/prompts/04-writing-prompt.md +188 -0
  42. package/plugins/fancy-story-builder/prompts/05-deslop-prompt.md +96 -0
  43. package/plugins/fancy-story-builder/purpose-template.md +107 -0
  44. package/plugins/fancy-story-builder/references/formulas-rhythm.json +302 -0
  45. package/plugins/fancy-story-builder/references/formulas-skeleton.json +229 -0
  46. package/plugins/fancy-story-builder/references/glossary.md +585 -0
  47. package/plugins/fancy-story-builder/references/index.md +490 -0
  48. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/00-index.md +174 -0
  49. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/01-scene.md +150 -0
  50. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/02-chapter-workflow.md +99 -0
  51. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/03-opening-chapter.md +104 -0
  52. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/04-dialogue-mastery.md +274 -0
  53. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/05-genre-formulas.md +432 -0
  54. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/06-tone-ensemble.md +259 -0
  55. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/07-ledger-audit.md +222 -0
  56. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/08-diagnosis-revision.md +205 -0
  57. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/09-reading-power.md +135 -0
  58. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/10-deslop.md +129 -0
  59. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/00-index.md +98 -0
  60. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/01-upgrade-rhythm.md +300 -0
  61. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/02-arc-rhythm.md +168 -0
  62. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/03-highpoint-hooks.md +189 -0
  63. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/04-satisfaction.md +226 -0
  64. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/05-foreshadow-density.md +195 -0
  65. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/06-chapter-outline.md +226 -0
  66. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/07-audit.md +163 -0
  67. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/00-index.md +100 -0
  68. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/01-character.md +239 -0
  69. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/02-worldbuilding.md +245 -0
  70. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/03-relations.md +181 -0
  71. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/04-emotion-methods.md +286 -0
  72. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/05-audit.md +177 -0
  73. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/00-index.md +91 -0
  74. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/01-positioning.md +208 -0
  75. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/02-packaging.md +135 -0
  76. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/03-entities.md +305 -0
  77. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/04-conflict.md +328 -0
  78. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/05-quota.md +187 -0
  79. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/06-audit.md +142 -0
  80. package/plugins/fancy-story-builder/rhythm-output.js +140 -0
  81. package/plugins/fancy-story-builder/schema-setting.md +324 -0
  82. package/plugins/fancy-story-builder/scripts/ai-patterns.js +619 -0
  83. package/plugins/fancy-story-builder/scripts/check-guide-compliance.js +289 -0
  84. package/plugins/fancy-story-builder/scripts/content-quality.js +413 -0
  85. package/plugins/fancy-story-builder/scripts/deslop-validate.js +143 -0
  86. package/plugins/fancy-story-builder/scripts/error-classes.js +112 -0
  87. package/plugins/fancy-story-builder/scripts/flesh-validate.js +1189 -0
  88. package/plugins/fancy-story-builder/scripts/formula-engine.js +112 -0
  89. package/plugins/fancy-story-builder/scripts/graph-utils.js +1385 -0
  90. package/plugins/fancy-story-builder/scripts/label-coverage.js +171 -0
  91. package/plugins/fancy-story-builder/scripts/prompt-drift-check.js +441 -0
  92. package/plugins/fancy-story-builder/scripts/reading-power.js +298 -0
  93. package/plugins/fancy-story-builder/scripts/rhythm-validate.js +1216 -0
  94. package/plugins/fancy-story-builder/scripts/semantic-lint.js +377 -0
  95. package/plugins/fancy-story-builder/scripts/skeleton-quota.js +145 -0
  96. package/plugins/fancy-story-builder/scripts/skeleton-validate.js +1832 -0
  97. package/plugins/fancy-story-builder/scripts/stage-batches.js +1371 -0
  98. package/plugins/fancy-story-builder/scripts/stage-contract.js +417 -0
  99. package/plugins/fancy-story-builder/scripts/upstream-query.js +198 -0
  100. package/plugins/fancy-story-builder/scripts/writing-rules.js +167 -0
  101. package/plugins/fancy-story-builder/scripts/writing-validate.js +682 -0
  102. package/plugins/fancy-story-builder/skeleton-output.js +199 -0
  103. package/plugins/fancy-story-builder/stage-driver.js +1049 -0
  104. 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
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. package/plugins/fancy-story-builder/templates.js +1248 -0
  121. package/plugins/fancy-story-builder/wiki-references.js +204 -0
  122. package/plugins/fancy-story-builder/writing-driver.js +1061 -0
  123. package/plugins/fancy-topic/index.js +704 -0
  124. package/plugins/fancy-topic/scripts/select-topic.js +274 -0
  125. package/plugins/fancy-topic/templates.js +373 -0
  126. package/commands/bootstrap/index.js +0 -160
  127. package/commands/bootstrap/init-project.js +0 -121
  128. package/commands/scan/index.js +0 -275
  129. package/commands/scan/platforms/fanqie.js +0 -146
  130. package/commands/scan/platforms/jinjiang.js +0 -143
  131. package/commands/scan/platforms/qidian.js +0 -102
  132. package/commands/scan/platforms/qimao.js +0 -127
  133. package/commands/scan/scraper.js +0 -195
  134. package/infra.js +0 -160
@@ -0,0 +1,150 @@
1
+ # 场景写作法
2
+
3
+ > 写作阶段第 1 份。场景是正文的最小单位,不是章。
4
+ > 本文件不定义数据结构、不写验证逻辑、不写具体章节约束。
5
+
6
+ ---
7
+
8
+ ## 一、决策路由
9
+
10
+ | 你在做什么 | 用哪节 |
11
+ |---|---|
12
+ | 写一个场景 | §2 场景五要素 |
13
+ | 判断场景 vs 概述 | §3 比例 |
14
+ | 进入/退出场景 | §4 进出场 |
15
+ | 写画面感 | §5 画面感 |
16
+ | 控制视角 | §6 视角 |
17
+ | 控句长文风 | §7 句长 |
18
+ | 控描写叙述比例 | §8 比例 |
19
+ | 非对话信息传递 | §9 非对话信息 |
20
+
21
+ ---
22
+
23
+ ## 二、场景五要素
24
+
25
+ 每个场景必须回答:
26
+
27
+ 1. **地点**:在哪?有什么环境细节?
28
+ 2. **人物**:谁在场?各自想要什么?
29
+ 3. **目标**:本场景中,视角人物想要什么?
30
+ 4. **阻碍**:什么阻止他?
31
+ 5. **转折**:场景结束时,处境/关系/认知发生了什么变化?
32
+
33
+ **没有转折的场景 = 废场景**,删或合并。
34
+
35
+ ---
36
+
37
+ ## 三、场景与概述的比例
38
+
39
+ | 内容类型 | 写成场景 | 写成概述 |
40
+ |---|---|---|
41
+ | 核心冲突 | 是 | 否 |
42
+ | 关键对话 | 是 | 否 |
43
+ | 情绪转折 | 是 | 否 |
44
+ | 时间跳跃 | 否 | 是 |
45
+ | 背景交代 | 否 | 是 |
46
+ | 过渡 | 否 | 是 |
47
+ | 重复信息 | 否 | 是(一句话带过) |
48
+
49
+ 网文常见病:该写场景的地方写概述(打脸一笔带过),该概述的地方灌水成场景(走路写五百字)。
50
+
51
+ ---
52
+
53
+ ## 四、进入与退出场景
54
+
55
+ ### 4.1 进入场景
56
+
57
+ **不要从**:起床、走路、风景、天气、日常琐事切入。
58
+
59
+ **要从**:动作中途、对话中途、冲突爆发点、反常细节切入。
60
+
61
+ | 弱 | 强 |
62
+ |---|---|
63
+ | 李明早上起床,洗漱完毕,走出家门。 | 李明刚把钥匙插进锁孔,门里传来一声轻响。 |
64
+ | 宴会上人来人往,很热闹。 | "你也配坐主桌?"一只酒杯砸在他脚边。 |
65
+
66
+ ### 4.2 退出场景
67
+
68
+ 在情绪点切出,接章尾钩子。不要在场景"自然结束"后继续写。
69
+
70
+ ---
71
+
72
+ ## 五、画面感三件套
73
+
74
+ 1. **感官细节**:视/听/触/嗅/味选一两个,不堆砌
75
+ 2. **具体名词**:不写"一把武器",写"缺了口的柴刀";不写"一辆车",写"掉漆的桑塔纳"
76
+ 3. **动作动词**:不写"他很生气",写"他把茶碗墩在桌上,茶水溅出来"
77
+
78
+ **克制**:一段最多两个感官细节。堆砌 = 读者跳读。
79
+
80
+ ---
81
+
82
+ ## 六、叙述视角
83
+
84
+ | 视角 | 适用 | 禁忌 |
85
+ |---|---|---|
86
+ | 第一人称 | 知乎盐选、虐恋、悬疑 | 不能写"我"看不到的事 |
87
+ | 第三人称限知 | 大多数网文 | 同一场景不能跳视角 |
88
+ | 全知 | 群像、历史、正剧 | 不能滥用"他不知道的是" |
89
+
90
+ **配角视角功能**:信息差(读者知主角不知)、反应(衬托主角)、铺垫(反派密谋)。
91
+
92
+ ---
93
+
94
+ ## 七、文风与句长
95
+
96
+ | 段落类型 | 句长 | 配比 |
97
+ |---|---|---|
98
+ | 紧张/决断 | 短句为主 | 短句多、长句少 |
99
+ | 铺垫/沉淀 | 长句为主 | 长句多、短句少 |
100
+ | 对话 | 短句交替 | 短句为主 |
101
+ | 描写 | 长短结合 | 各半 |
102
+
103
+ 短句是提速工具,不是默认底色。通篇拆短 = 机械。
104
+
105
+ ---
106
+
107
+ ## 八、描写与叙述比例
108
+
109
+ | 场景类型 | 动作 | 对话 | 心理 | 环境 |
110
+ |---|---|---|---|---|
111
+ | 动作场景 | 多 | 中 | 少 | 少 |
112
+ | 对话场景 | 中 | 多 | 少 | 少 |
113
+ | 情绪场景 | 中 | 中 | 多 | 少 |
114
+ | 过渡场景 | 少(场景) | 少 | 少 | 多(概述) |
115
+
116
+ 不是铁律,但大模型需要默认值,防止走极端。
117
+
118
+ ---
119
+
120
+ ## 九、非对话信息传递
121
+
122
+ | 载体 | 写法 |
123
+ |---|---|
124
+ | 物件 | 一封信、一个伤疤、一件旧衣服、桌上的药瓶 |
125
+ | 环境 | 房间的整洁/凌乱、墙上的照片、窗外的天气 |
126
+ | 他人反应 | 旁人的眼神、窃窃私语、突然的沉默 |
127
+ | 动作 | 反复看表、攥紧拳头、避开视线 |
128
+
129
+ 示例:不写"他很穷",写"他把烟盒里最后一根烟掰成两半,一半放回盒里"。
130
+
131
+ ---
132
+
133
+ ## 十、与其他文件的关系
134
+
135
+ | 本文件输出 | 落到哪个文件 | 由哪个脚本验证 |
136
+ |---|---|---|
137
+ | 场景五要素 | 每章正文(`第NNN章.md`) | `writing-validate.js` 的 `CHAPTER_TITLE` / `EMPTY_PARAGRAPH` |
138
+ | 正文具体内容 | 每章正文 | `WORD_COUNT`(字数)/ `FORBIDDEN_WORD`(禁用词) |
139
+
140
+ **不输出到**:
141
+ - 场景五要素不单独建 JSON 字段,是写作时的思考框架
142
+ - 具体的场景清单由章节细纲的 `function_main` / `function_aux` 提供
143
+
144
+ ---
145
+
146
+ ## 十一、版本记录
147
+
148
+ | 版本 | 变更 |
149
+ |---|---|
150
+ | v1.0 | 从原 04-01 精简。删除检查清单(改为方法论陈述);保留场景五要素/进出场/画面感/比例/非对话信息传递;新增"与其他文件的关系"节 |
@@ -0,0 +1,99 @@
1
+ # 章节生成工作流
2
+
3
+ > 写作阶段第 2 份。从细纲到正文的固定流程。每次生成按此走,质量才稳定。
4
+ > 本文件不定义数据结构、不写验证逻辑。
5
+
6
+ ---
7
+
8
+ ## 一、决策路由
9
+
10
+ | 你在做什么 | 用哪节 |
11
+ |---|---|
12
+ | 从细纲到正文 | §2 八步流程 |
13
+ | 批量生成质量控制 | §3 批量生成 |
14
+ | 版本管理 | §4 版本管理 |
15
+
16
+ ---
17
+
18
+ ## 二、八步流程
19
+
20
+ ### 第 1 步:读细纲,确认本章功能
21
+
22
+ 从细纲读:本章推进哪条主线/支线?埋/推/收哪些伏笔?本章爽点类型?本章钩子类型?出场哪些势力?
23
+
24
+ 本章功能只能选一个主功能 + 一个辅功能:推进主线 / 埋伏笔 / 爽点兑现 / 过渡 / 人物塑造。
25
+
26
+ ### 第 2 步:确认情绪阶段
27
+
28
+ 对照时序映射:本章在弧线哪个位置?是调动段、释放段还是蓄力段?本章情绪值目标(1-10)?
29
+
30
+ ### 第 3 步:确认章首/章尾钩子
31
+
32
+ 从时序映射读本章的 `hook_head` / `hook_tail` / `hook_strength`,按类型写章首/章尾。章首前 100 字、章尾后 100 字单独标注。
33
+
34
+ ### 第 4 步:写场景清单
35
+
36
+ 本章写几个场景(通常两到四个)。每个场景写五要素:地点/人物/目标/阻碍/转折。
37
+
38
+ ### 第 5 步:写第一稿
39
+
40
+ 按场景写,不按细纲条目写。每个场景按场景写作法(见 01-scene.md)的进入/退出/画面感/比例写。
41
+
42
+ ### 第 6 步:自检
43
+
44
+ 按下面的清单自检:
45
+ - 本章是否有至少一个价值改变?
46
+ - 章首前 100 字是否有钩子?
47
+ - 章尾后 100 字是否有钩子?
48
+ - 对话是否推动剧情?
49
+ - 伏笔是否更新?
50
+ - 字数是否在基准 ±20%?
51
+
52
+ ### 第 7 步:修钩子
53
+
54
+ 章首前 100 字、章尾后 100 字单独打磨。钩子不达标,回第 3 步重选。
55
+
56
+ ### 第 8 步:更新台账
57
+
58
+ 更新章台账、人物台账、伏笔台账、时间线台账(见 07-ledger-audit.md)。
59
+
60
+ ---
61
+
62
+ ## 三、批量生成质量控制
63
+
64
+ | 批次 | 划分 | 批内检查 | 批间检查 |
65
+ |---|---|---|---|
66
+ | 小批 | 几章(一个桥段) | 钩子不重复、爽点不同质、时间连续 | 上批章尾钩子是否接住 |
67
+ | 中批 | 十几到二十章(一个单元) | 单元末盘点 | 单元钩子是否立住 |
68
+ | 大批 | 一卷 | 卷末大盘点 | 跨卷衔接检查 |
69
+
70
+ **抽检**:每批抽一两章全文精读(查场景五要素/对话/钩子),其余章做台账核对。
71
+
72
+ ---
73
+
74
+ ## 四、版本管理
75
+
76
+ - 章 v1/v2/v3,每次改标注"改了什么、为什么改、影响哪些台账"
77
+ - 分支写法(A 版反击/B 版隐忍)标记清楚,对比后合并
78
+ - 回滚时同步恢复台账
79
+
80
+ ---
81
+
82
+ ## 五、与其他文件的关系
83
+
84
+ | 本文件输出 | 落到哪个文件 | 由哪个脚本验证 |
85
+ |---|---|---|
86
+ | 每章正文 | `第NNN章.md` | `writing-validate.js` 的全部检查 |
87
+ | 台账更新 | `台账/*.json` | 无(台账由方法论保证一致性) |
88
+
89
+ **不输出到**:
90
+ - 八步流程不单独建字段,是写作时的操作顺序
91
+ - 场景清单不单独建 JSON 字段,直接写进正文
92
+
93
+ ---
94
+
95
+ ## 六、版本记录
96
+
97
+ | 版本 | 变更 |
98
+ |---|---|
99
+ | v1.0 | 从原 04-02 精简。删除检查清单(改为"自检"节的方法论陈述);保留八步流程/批量生成/版本管理;新增"与其他文件的关系"节 |
@@ -0,0 +1,104 @@
1
+ # 开篇第一章逐段写法
2
+
3
+ > 写作阶段第 3 份。第一章决定点击率。按段拆,不平均用力。
4
+ > 本文件不定义数据结构、不写验证逻辑。允许出现具体字数和章节号作为写法参考。
5
+
6
+ ---
7
+
8
+ ## 一、决策路由
9
+
10
+ | 你在做什么 | 用哪节 |
11
+ |---|---|
12
+ | 写第一章 | §2 五段式 |
13
+ | 按题材变体 | §3 题材变体 |
14
+ | 按平台调整 | §4 平台差异 |
15
+
16
+ ---
17
+
18
+ ## 二、五段式
19
+
20
+ 以基准 2000 字/章为例:
21
+
22
+ | 段 | 字数 | 功能 | 要点 |
23
+ |---|---|---|---|
24
+ | 第 1 段 | 0-200 | 钩子 + 主角处境 + 一个具体细节 | 不从起床/风景切入;第一句就有冲突或反常 |
25
+ | 第 2 段 | 200-600 | 核心冲突初现 + 主角反应(立人设) | 主角必须做出选择,选择揭示性格 |
26
+ | 第 3 段 | 600-1200 | 信息差/对手出场/金手指暗示 | 读者知道主角不知道的事,或主角知道读者不知道的事 |
27
+ | 第 4 段 | 1200-1800 | 小高潮或反转 | 主角第一次反击/金手指第一次生效/真相第一次露头 |
28
+ | 第 5 段 | 1800-2000 | 章尾钩子 + 下一章期待 | 用章尾 13 式,约 100 字 |
29
+
30
+ **平台偏离**:
31
+ - 番茄 1000 字/章:五段比例不变,字数减半
32
+ - 知乎 300 字开篇窗口:第 1 段必须 0-100 字建立冲突
33
+
34
+ ---
35
+
36
+ ## 三、题材变体
37
+
38
+ ### 3.1 复仇型
39
+
40
+ 第 1 段:当众受辱(具体、狠)。第 2 段:主角冷静反应(不哭不闹,立"不好惹"人设)。第 3 段:对手得意 + 主角暗藏底牌。第 4 段:第一次反击(小胜)。第 5 段:钩子——"这只是开始"。
41
+
42
+ ### 3.2 系统型
43
+
44
+ 第 1 段:主角最低谷(失业/离婚/濒死)。第 2 段:系统激活。第 3 段:系统面板 + 新手奖励。第 4 段:第一次用系统解决小问题。第 5 段:钩子——系统发布新任务/前妻后悔伏笔。
45
+
46
+ ### 3.3 悬疑型
47
+
48
+ 第 1 段:反常事实(尸体/失踪/怪事)。第 2 段:主角介入(为什么是他)。第 3 段:第一个疑点 + 假提示。第 4 段:小反转(以为找到了,但不是)。第 5 段:钩子——新疑点/危险逼近。
49
+
50
+ ### 3.4 言情型
51
+
52
+ 第 1 段:主角 A 的困境(被退婚/被背叛/被轻视)。第 2 段:主角 B 出场(第一印象不佳或反常)。第 3 段:两人被迫接触 + 冲突。第 4 段:一个小吸引点(B 的反差/保护/秘密)。第 5 段:钩子——关系悬念/身份悬念。
53
+
54
+ ### 3.5 无敌流/轻松型
55
+
56
+ 第 1 段:主角展现反常(明明很强却装弱/明明很惨却乐观)。第 2 段:配角误判主角(信息差)。第 3 段:对手登场嚣张。第 4 段:主角随手碾压(轻描淡写)。第 5 段:钩子——更高层对手/隐藏身份伏笔。
57
+
58
+ ---
59
+
60
+ ## 四、平台差异
61
+
62
+ | 平台 | 第一章重点 |
63
+ |---|---|
64
+ | 起点 | 世界观暗示 + 主角目标 + 金手指伏笔(黄金三章签约) |
65
+ | 番茄 | 冲突前置 + 爽点预告 + 情绪冲击(前 3 章决定推荐) |
66
+ | 晋江 | 人设质感 + 感情线暗示 + 文笔(前三章决定收藏) |
67
+ | 知乎盐选 | 前 300 字建立冲突 + 第一人称 + 反转预告(300 字定生死) |
68
+
69
+ ---
70
+
71
+ ## 五、第一章自检
72
+
73
+ 写完后自问:
74
+ - 第一句是否有冲突/反常/悬念?
75
+ - 前 200 字是否建立了主角处境?
76
+ - 主角是否做出了一个揭示性格的选择?
77
+ - 是否有信息差(读者知/主角知/反派知)?
78
+ - 第 4 段是否有小高潮或反转?
79
+ - 章尾是否有钩子?
80
+ - 是否避免了起床/走路/风景/简历式介绍?
81
+ - 是否与书名/简介承诺一致?
82
+ - 是否与人物档案的核心特质一致?
83
+
84
+ **注**:这是写作时的自问,不是脚本验证。
85
+
86
+ ---
87
+
88
+ ## 六、与其他文件的关系
89
+
90
+ | 本文件输出 | 落到哪个文件 | 由哪个脚本验证 |
91
+ |---|---|---|
92
+ | 第 1 章正文 | `第001章.md` | `writing-validate.js` 的 `CHAPTER_TITLE` / `WORD_COUNT` / `HOOK_HEAD_MISSING` / `HOOK_TAIL_MISSING` |
93
+
94
+ **不输出到**:
95
+ - 五段式不单独建 JSON 字段,是写作时的结构参考
96
+ - 平台差异不进入骨架/血肉/节奏的 JSON,是写作时的写法选择
97
+
98
+ ---
99
+
100
+ ## 七、版本记录
101
+
102
+ | 版本 | 变更 |
103
+ |---|---|
104
+ | v1.0 | 从原 04-03 精简。删除检查清单(改为"自检"节的方法论陈述);保留五段式/题材变体/平台差异;允许具体字数作为写法参考;新增"与其他文件的关系"节 |
@@ -0,0 +1,274 @@
1
+ # 对话设计
2
+
3
+ > 写作阶段第 4 份。写对话场景时加载。先看场景路由,再选模式,再查质量。
4
+ > 本文件不定义数据结构、不写验证逻辑。
5
+
6
+ ---
7
+
8
+ ## 一、决策路由
9
+
10
+ | 你的对话场景是 | 用这种模式 |
11
+ |---|---|
12
+ | 主角碾压/打脸 | §3 压制模式 |
13
+ | 主角亮底牌/反转 | §3 反转模式 |
14
+ | 关系破裂/心死 | §3 心死模式 |
15
+ | 日常互动/立人设 | 让其他人物参与冲突,不要主角独白 |
16
+ | 群众震惊/弹幕 | §7 弹幕模式 |
17
+ | 信息展示/世界观 | §6 信息展示 |
18
+ | 情绪拉扯/虐心 | §5 情绪推动 |
19
+
20
+ ### 1.1 场景类型 → 规则子集
21
+
22
+ | 场景类型 | 用哪几条规则 | 不用哪几条 |
23
+ |---|---|---|
24
+ | 单人对峙 | 权力博弈 + 潜台词 + 情绪推动 | 弹幕 |
25
+ | 多人对峙 | 权力博弈多人变体 + 议程 | 单对单的"话短=掌控"规则 |
26
+ | 群像场景 | 语言差异化 + 多人变体 | 单对单压制/心死模式 |
27
+ | 日常互动 | 语言差异化 + 日常模式 | 权力博弈/弹幕 |
28
+ | 信息展示 | 信息嵌入 + 反科普嘴 | 情绪推动 |
29
+ | 高潮兑现 | 压制/反转模式 + 弹幕四层 + 豁免篇幅上限 | 对话 40% 上限 |
30
+
31
+ ---
32
+
33
+ ## 二、对话核心规则
34
+
35
+ 每句对话必须承载以下至少一项,否则删除:
36
+
37
+ 1. **推进剧情**:透露新信息、推动事件发展
38
+ 2. **增加期待感**:暗示即将发生的事、制造悬念
39
+ 3. **展示人设**:通过语言风格传递角色性格
40
+
41
+ 且在情绪场景里,每句还要回应上一句对方的情绪状态(承接/偏转/升级/退缩)。对话是两个人的情绪在碰,不是轮流播报信息。只推进剧情、句间无情绪承接 = 机械对话。
42
+
43
+ (注:快节奏战斗、多人信息展示场景可放宽为"每轮回应情绪",不必逐句。)
44
+
45
+ ### 绝对禁止
46
+
47
+ | 禁止 | 理由 |
48
+ |---|---|
49
+ | 配角无脑夸主角 | 假 |
50
+ | 互相解释读者已知信息 | 水字数 |
51
+ | 大段说明文式对话 | 闷 |
52
+ | 所有角色说话方式一样 | 模糊 |
53
+ | 对话说服人物 | 现实中没人被几句话说服,用突发状况代替 |
54
+ | 角色当"科普嘴" | 设定/原理/前因后果不能靠角色整段讲解 |
55
+
56
+ ---
57
+
58
+ ## 三、权力博弈对话
59
+
60
+ ### 3.1 规则
61
+
62
+ 对话长度 = 权力地位。掌控者话短且冷静,被动者话多且情绪化。
63
+
64
+ ### 3.2 压制模式
65
+
66
+ 结构:对方长篇大论(三到五行)→ 主角一字回应。
67
+
68
+ ### 3.3 反转模式
69
+
70
+ 结构:对方嚣张(两到三行)→ 主角亮底牌(一行事实)→ 对方沉默。
71
+
72
+ ### 3.4 心死模式
73
+
74
+ 结构:对话越回越短,从辩解到沉默到"随意"。
75
+
76
+ ### 3.5 多人场景变体
77
+
78
+ 三人以上时:
79
+ - 掌控者可能不止一人(双主导),话短规则需分别标注
80
+ - 群像场景用"功能分配"代替"话短规则":信息提供者/情绪放大器/冲突制造者,每人一个功能
81
+ - 掌控者故意话多(伪装/拖延/设套)时,用"话多但信息密度高"替代"话短"
82
+ - 被动者沉默抵抗时,用"不说话+动作/表情"代替"话多"
83
+
84
+ ### 3.6 操作指令
85
+
86
+ - 掌控者/主角亮底牌时:对话短,不加动作描写
87
+ - 被压制方:对话长,可加动作描写(攥拳/咬唇/站起来)
88
+ - 两人对话时:短句方 = 权力上位,长句方 = 权力下位
89
+ - 心死模式可打破"话短=上位":心死者话少但不是掌控者,是"退出博弈"
90
+
91
+ ---
92
+
93
+ ## 四、潜台词与议程
94
+
95
+ ### 4.1 潜台词规则
96
+
97
+ - 角色真实动机不能浅显地写在台词里
98
+ - 现实中人说话都给自己找借口,角色也一样
99
+ - 每句对白同时设计:角色的动机(可能角色自己都没意识到)和角色的借口
100
+
101
+ (例外:谈判/审讯/辩论等"直接摊牌"场景,可直写动机,此时张力来自"摊牌后果"而非"藏"。)
102
+
103
+ ### 4.2 对话议程
104
+
105
+ - 每个角色进入对话时有自己的议程:想从这场对话中得到什么
106
+ - 两个角色的议程碰撞才是张力来源
107
+ - 双方议程一致(同立场)= 复述,失去意义
108
+
109
+ ### 4.3 语气三要素
110
+
111
+ 关系 × 场合 × 目的 = 语气
112
+
113
+ | 场合 | 特点 | 适合内容 |
114
+ |---|---|---|
115
+ | 私人(单对单) | 深入、感情流露透彻 | 内心剖白、密谋、表白 |
116
+ | 公众 | 需考虑体面,措辞收敛 | 需要冲击力时可打破(如当众翻脸) |
117
+ | 熟人(朋友/同门) | 深度介于两者之间 | 轻松互动和信息交换 |
118
+
119
+ 私密的话在公众场合说才有冲击力。对话中不能完全表达的内容,通过动作、神态、环境补充。
120
+
121
+ ---
122
+
123
+ ## 五、情绪推动对话
124
+
125
+ ### 5.1 强情绪对话
126
+
127
+ - 命令式+否定式最能激发读者情绪:"我说的还不够清楚吗?"
128
+ - 最强话术:打着为你好的幌子,句句不离关心,但句句都是嫌弃、指责、厌恶
129
+ - 直接否定比含蓄暗示更伤人
130
+
131
+ ### 5.2 情绪连续性
132
+
133
+ 角色情绪是连续的、循序渐进的。从生气到高兴:生气 → 不那么生气 → 不生气 → 高兴,每次转变需对应事件触发。不能跳步。
134
+
135
+ ### 5.3 情绪四步法
136
+
137
+ 1. 遇到事件(失衡状态)
138
+ 2. 情绪反应(外在表现:动作、表情、语言)
139
+ 3. 内心思考(即使没思考也要写出"没有思考",表达鲁莽)
140
+ 4. 采取行动(基于前三步结果回应)
141
+
142
+ ### 5.4 冲突递进五级 + 人设适配
143
+
144
+ 五级:委婉拒绝 → 友好人道 → 命令否定 → PUA 式 → 直接侮辱。
145
+
146
+ 不是所有角色都从第 1 级起步:
147
+ - 高傲型直接第 3 级
148
+ - 市井型直接第 5 级
149
+ - 智谋型全程第 1 级但每句下套
150
+ - 人设决定起步级和跳级规则,不机械线性
151
+
152
+ ---
153
+
154
+ ## 六、信息展示与弹幕
155
+
156
+ ### 6.1 信息展示
157
+
158
+ - 大量信息通过对话展示会啰嗦,部分信息转化为情节、心理描写、旁白、环境、动作
159
+ - 用角色的语气和立场包裹信息,不机械陈述设定
160
+ - 设定用到哪个带出哪点,不需讲全前因后果
161
+ - **角色不当"科普嘴"**:设定/原理不能靠角色整段讲解。拆成角色在压力下挤出的半句话 + 身体反应 + 留白
162
+
163
+ ### 6.2 信息拉扯
164
+
165
+ 上行和下行交替,情绪像拉锯不断拉升期待。
166
+
167
+ ### 6.3 弹幕模式
168
+
169
+ 三大核心作用:剧情推进(透露主角不知道的信息)、增加期待感(悬念、猜测)、情绪渲染(群众震惊传染读者)。锦上添花,不代替主线。
170
+
171
+ **四层递进**:
172
+ 1. 普通人震惊(卧槽好厉害)
173
+ 2. 专业人士分析(这个手法……)
174
+ 3. 特殊身份者反应(某大佬动容)
175
+ 4. 情感升华(某种意义上的认同/悔恨)
176
+
177
+ **密度控制**:
178
+ - 每章最多一组弹幕(四层)
179
+ - 弹幕总量不超过本章字数的百分之十几
180
+ - 连续几章不用弹幕,避免读者疲劳
181
+ - 弹幕只在关键爽点/燃点/泪点前后集中使用
182
+
183
+ ---
184
+
185
+ ## 七、人物语言差异化
186
+
187
+ 每个角色要有自己的说话方式。遮住角色名能区分是谁在说话。
188
+
189
+ | 维度 | 操作 |
190
+ |---|---|
191
+ | 口癖和惯用语 | 给每个主要角色一个标志性用词 |
192
+ | 说话节奏 | 长篇大论 vs 短句连击 |
193
+ | 信息偏好 | 技术型带专业术语,江湖人带切口 |
194
+ | 立场固定 | 某角色永远从某个角度发言(悲观派/乐观派/务实派) |
195
+ | 身份影响措辞 | 老者/少年/贵族/市井,身份不同则措辞、自称、敬谦词不同 |
196
+ | 性格影响语气 | 智谋型话里有话;鲁莽型想到什么说什么;冷静型措辞精确 |
197
+ | 进度影响态度 | 初见/熟悉/对立/亲密,关系阶段不同则语气与信息量不同 |
198
+
199
+ **与人物档案对接**:角色.json 的 `language_profile` 7 维字段,写对话时直接从这里取。未填的先补档案。
200
+
201
+ ---
202
+
203
+ ## 八、以梗填充对话
204
+
205
+ ### 8.1 梗式 vs 普通
206
+
207
+ - 普通:"兄弟别灰心,你一步步走到今天我是看着你过来的,这点挫折对于你来说算什么事儿?"
208
+ - 梗式:"兄弟别灰心,我相信你总有人头落地,落地人头,头落地上……卧槽那句话怎么说的来着?兄弟你懂我意思是吧……"
209
+
210
+ ### 8.2 声线让位(高压场景例外)
211
+
212
+ 高压/生死/悲痛/严肃 beat 里,搞笑担当与轻快配角的玩笑、口头梗、插科打诨一律收敛。声线让位于当前情绪基调,用短、冷、带情绪重量的反应替代;梗只在安全或喘息 beat 放。
213
+
214
+ **自检**:这句玩笑放进当前基调会不会让读者出戏?会就删/改。
215
+
216
+ ---
217
+
218
+ ## 九、篇幅控制与节奏
219
+
220
+ ### 9.1 篇幅
221
+
222
+ - 单次对话不超过全节(500-1000 字)的四成。**高潮兑现章豁免**,可到六到八成(打脸/揭底/对峙)
223
+ - 对话过多:读者已知信息用叙事一句话概括;能用突发状况替代的直接替换
224
+ - 对话过少:能用其他人物对话讲的东西,不要让主角旁白平铺直叙
225
+
226
+ ### 9.2 节奏
227
+
228
+ - 不删表现人物性格的语气助词来"精简"
229
+ - 对话段落间穿插动作、环境、心理调节节奏
230
+ - 紧张段落对话短促,舒缓段落可长
231
+ - 关键信息放对话开头或结尾,中间用于拉扯情绪
232
+ - 动作和表情在关键转折处使用效果最好,不需每句都配
233
+ - 连续多轮对话后需要"换气",插入环境描写或角色心理
234
+
235
+ ---
236
+
237
+ ## 十、对话自查
238
+
239
+ 写完后自问:
240
+ - 是否存在大量信息都必须用对话展示?
241
+ - 对话是否是问答式的一问一答?
242
+ - 是否习惯依赖对话推动剧情或人物变化?
243
+ - 场景类型 → 规则子集已按 §1.1 选?
244
+ - 权力博弈:掌控者话短 / 被压制方话长?多人场景用了变体?
245
+ - 潜台词与议程:每个角色有议程?真实动机不在台词中(摊牌场景例外)?
246
+ - 人物差异化:遮住角色名能区分是谁在说话?语言档案 7 维已从人物档案取?
247
+ - 弹幕:四层递进?每章不超过一组?总量不超一成多?连续几章未用?
248
+ - 对话推动剧情:每段对话结束时剧情是否往前推了一步?
249
+ - 篇幅:单次对话不超过全节四成(高潮兑现章豁免)?
250
+ - 高压场景已做声线让位?
251
+ - 没有"科普嘴"?
252
+
253
+ **注**:这是写作时的自问,不是脚本验证。
254
+
255
+ ---
256
+
257
+ ## 十一、与其他文件的关系
258
+
259
+ | 本文件输出 | 落到哪个文件 | 由哪个脚本验证 |
260
+ |---|---|---|
261
+ | 对话内容 | 每章正文 | `writing-validate.js` 的 `FORBIDDEN_WORD`(对话中的 AI 口吻会被拦) |
262
+ | 语言档案的用法 | `角色.json` 的 `characters[].language_profile` | 无(写作时读,不写回) |
263
+
264
+ **不输出到**:
265
+ - 对话的具体内容不单独建 JSON 字段,直接在正文中
266
+ - 弹幕的密度不建字段,写作时按方法论控制
267
+
268
+ ---
269
+
270
+ ## 十二、版本记录
271
+
272
+ | 版本 | 变更 |
273
+ |---|---|
274
+ | v1.0 | 从原 04-04 精简。删除检查清单(改为"自查"节的方法论陈述);保留权力博弈/潜台词/场景路由/语言差异化/弹幕;新增"与其他文件的关系"节 |