novelws 4.0.0 → 5.0.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 (357) hide show
  1. package/CHANGELOG.md +100 -623
  2. package/README.md +79 -594
  3. package/dist/cli.js +1 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +12 -99
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/upgrade.d.ts.map +1 -1
  9. package/dist/commands/upgrade.js +17 -108
  10. package/dist/commands/upgrade.js.map +1 -1
  11. package/dist/core/config.d.ts +1 -37
  12. package/dist/core/config.d.ts.map +1 -1
  13. package/dist/core/config.js +6 -45
  14. package/dist/core/config.js.map +1 -1
  15. package/dist/core/errors.d.ts +0 -31
  16. package/dist/core/errors.d.ts.map +1 -1
  17. package/dist/core/errors.js +0 -58
  18. package/dist/core/errors.js.map +1 -1
  19. package/dist/utils/diagnostics.d.ts +2 -16
  20. package/dist/utils/diagnostics.d.ts.map +1 -1
  21. package/dist/utils/diagnostics.js +5 -72
  22. package/dist/utils/diagnostics.js.map +1 -1
  23. package/dist/utils/project.d.ts +1 -1
  24. package/dist/utils/project.d.ts.map +1 -1
  25. package/dist/utils/project.js +3 -3
  26. package/dist/utils/project.js.map +1 -1
  27. package/package.json +1 -2
  28. package/templates/commands/analyze.md +65 -265
  29. package/templates/commands/expand.md +70 -0
  30. package/templates/commands/plan.md +47 -452
  31. package/templates/commands/specify.md +43 -869
  32. package/templates/commands/write.md +49 -643
  33. package/templates/dot-claude/CLAUDE.md +38 -202
  34. package/templates/resources/anti-ai.md +16 -0
  35. package/templates/resources/style-reference.md +19 -0
  36. package/templates/tracking/character-state.json +1 -76
  37. package/templates/tracking/plot-tracker.json +3 -60
  38. package/templates/tracking/relationships.json +1 -68
  39. package/templates/tracking/timeline.json +1 -47
  40. package/dist/commands/plugin.d.ts +0 -6
  41. package/dist/commands/plugin.d.ts.map +0 -1
  42. package/dist/commands/plugin.js +0 -135
  43. package/dist/commands/plugin.js.map +0 -1
  44. package/dist/plugins/identifier.d.ts +0 -13
  45. package/dist/plugins/identifier.d.ts.map +0 -1
  46. package/dist/plugins/identifier.js +0 -72
  47. package/dist/plugins/identifier.js.map +0 -1
  48. package/dist/plugins/installers/base.d.ts +0 -27
  49. package/dist/plugins/installers/base.d.ts.map +0 -1
  50. package/dist/plugins/installers/base.js +0 -30
  51. package/dist/plugins/installers/base.js.map +0 -1
  52. package/dist/plugins/installers/github.d.ts +0 -22
  53. package/dist/plugins/installers/github.d.ts.map +0 -1
  54. package/dist/plugins/installers/github.js +0 -133
  55. package/dist/plugins/installers/github.js.map +0 -1
  56. package/dist/plugins/installers/local.d.ts +0 -16
  57. package/dist/plugins/installers/local.d.ts.map +0 -1
  58. package/dist/plugins/installers/local.js +0 -69
  59. package/dist/plugins/installers/local.js.map +0 -1
  60. package/dist/plugins/installers/npm.d.ts +0 -20
  61. package/dist/plugins/installers/npm.d.ts.map +0 -1
  62. package/dist/plugins/installers/npm.js +0 -99
  63. package/dist/plugins/installers/npm.js.map +0 -1
  64. package/dist/plugins/manager.d.ts +0 -77
  65. package/dist/plugins/manager.d.ts.map +0 -1
  66. package/dist/plugins/manager.js +0 -349
  67. package/dist/plugins/manager.js.map +0 -1
  68. package/dist/plugins/registry.d.ts +0 -48
  69. package/dist/plugins/registry.d.ts.map +0 -1
  70. package/dist/plugins/registry.js +0 -111
  71. package/dist/plugins/registry.js.map +0 -1
  72. package/dist/plugins/types.d.ts +0 -66
  73. package/dist/plugins/types.d.ts.map +0 -1
  74. package/dist/plugins/types.js +0 -2
  75. package/dist/plugins/types.js.map +0 -1
  76. package/dist/plugins/validator.d.ts +0 -19
  77. package/dist/plugins/validator.d.ts.map +0 -1
  78. package/dist/plugins/validator.js +0 -164
  79. package/dist/plugins/validator.js.map +0 -1
  80. package/dist/utils/logger.d.ts +0 -13
  81. package/dist/utils/logger.d.ts.map +0 -1
  82. package/dist/utils/logger.js +0 -48
  83. package/dist/utils/logger.js.map +0 -1
  84. package/plugins/authentic-voice/README.md +0 -31
  85. package/plugins/authentic-voice/commands/authentic-voice.md +0 -73
  86. package/plugins/authentic-voice/commands/authenticity-audit.md +0 -37
  87. package/plugins/authentic-voice/config.yaml +0 -30
  88. package/plugins/authentic-voice/experts/authentic-editor.md +0 -27
  89. package/plugins/export/README.md +0 -319
  90. package/plugins/export/commands/export.md +0 -460
  91. package/plugins/export/commands/generate-cover.md +0 -256
  92. package/plugins/export/commands/metadata.md +0 -309
  93. package/plugins/export/config.yaml +0 -47
  94. package/plugins/export/experts/publishing-expert.md +0 -171
  95. package/plugins/export/templates/epub/chapter-template.html +0 -13
  96. package/plugins/export/templates/epub/cover-template.html +0 -14
  97. package/plugins/export/templates/epub/stylesheet.css +0 -200
  98. package/plugins/export/templates/pdf/ebook-style.css +0 -137
  99. package/plugins/export/templates/pdf/print-style.css +0 -179
  100. package/plugins/export/templates/platforms/jinjiang-format.md +0 -101
  101. package/plugins/export/templates/platforms/qidian-format.md +0 -108
  102. package/plugins/export/templates/platforms/tomato-format.md +0 -95
  103. package/plugins/translate/README.md +0 -265
  104. package/plugins/translate/commands/glossary.md +0 -731
  105. package/plugins/translate/commands/translate-preview.md +0 -543
  106. package/plugins/translate/commands/translate.md +0 -649
  107. package/plugins/translate/config.yaml +0 -43
  108. package/plugins/translate/experts/literary-translator.md +0 -605
  109. package/templates/commands/character.md +0 -287
  110. package/templates/commands/checklist.md +0 -744
  111. package/templates/commands/clarify.md +0 -269
  112. package/templates/commands/constitution.md +0 -269
  113. package/templates/commands/expert.md +0 -188
  114. package/templates/commands/facts.md +0 -552
  115. package/templates/commands/guide.md +0 -900
  116. package/templates/commands/help-me.md +0 -221
  117. package/templates/commands/recap.md +0 -748
  118. package/templates/commands/relations.md +0 -385
  119. package/templates/commands/revise.md +0 -450
  120. package/templates/commands/search.md +0 -531
  121. package/templates/commands/tasks.md +0 -396
  122. package/templates/commands/timeline.md +0 -309
  123. package/templates/commands/track-init.md +0 -149
  124. package/templates/commands/track.md +0 -704
  125. package/templates/commands/volume-summary.md +0 -471
  126. package/templates/knowledge/audit-config.json +0 -26
  127. package/templates/knowledge/character-profiles.md +0 -152
  128. package/templates/knowledge/character-voices.md +0 -137
  129. package/templates/knowledge/locations.md +0 -184
  130. package/templates/knowledge/world-setting.md +0 -121
  131. package/templates/resources/character-archetypes/01-hero.md +0 -233
  132. package/templates/resources/character-archetypes/02-mentor.md +0 -177
  133. package/templates/resources/character-archetypes/03-shadow.md +0 -221
  134. package/templates/resources/character-archetypes/04-ally.md +0 -178
  135. package/templates/resources/character-archetypes/05-shapeshifter.md +0 -177
  136. package/templates/resources/character-archetypes/06-trickster.md +0 -181
  137. package/templates/resources/character-archetypes/07-threshold-guardian.md +0 -177
  138. package/templates/resources/character-archetypes/08-herald.md +0 -180
  139. package/templates/resources/character-archetypes/09-father.md +0 -249
  140. package/templates/resources/character-archetypes/10-mother.md +0 -202
  141. package/templates/resources/character-archetypes/11-child.md +0 -183
  142. package/templates/resources/character-archetypes/12-sage.md +0 -202
  143. package/templates/resources/character-archetypes/README.md +0 -60
  144. package/templates/resources/character-archetypes/application-guide.md +0 -222
  145. package/templates/resources/character-archetypes/archetype-combinations.md +0 -242
  146. package/templates/resources/character-archetypes/config.yaml +0 -28
  147. package/templates/resources/character-archetypes/examples-analysis.md +0 -223
  148. package/templates/resources/config/keyword-mappings.json +0 -226
  149. package/templates/resources/config/specification-example.md +0 -146
  150. package/templates/resources/craft/character-arc.md +0 -1153
  151. package/templates/resources/craft/dialogue.md +0 -1170
  152. package/templates/resources/craft/hook-design.md +0 -345
  153. package/templates/resources/craft/pacing.md +0 -1200
  154. package/templates/resources/craft/power-system.md +0 -254
  155. package/templates/resources/craft/scene-structure.md +0 -1136
  156. package/templates/resources/craft/show-not-tell.md +0 -1012
  157. package/templates/resources/craft/story-structures.md +0 -134
  158. package/templates/resources/craft/tension-management.md +0 -168
  159. package/templates/resources/emotional-beats/01-first-meeting.md +0 -145
  160. package/templates/resources/emotional-beats/02-bonding-moment.md +0 -226
  161. package/templates/resources/emotional-beats/03-declaration.md +0 -284
  162. package/templates/resources/emotional-beats/04-triumph.md +0 -240
  163. package/templates/resources/emotional-beats/05-reunion.md +0 -396
  164. package/templates/resources/emotional-beats/06-forgiveness.md +0 -204
  165. package/templates/resources/emotional-beats/07-betrayal.md +0 -204
  166. package/templates/resources/emotional-beats/08-loss.md +0 -214
  167. package/templates/resources/emotional-beats/09-rejection.md +0 -254
  168. package/templates/resources/emotional-beats/10-failure.md +0 -244
  169. package/templates/resources/emotional-beats/11-misunderstanding.md +0 -205
  170. package/templates/resources/emotional-beats/12-farewell.md +0 -283
  171. package/templates/resources/emotional-beats/13-revelation.md +0 -242
  172. package/templates/resources/emotional-beats/14-point-of-no-return.md +0 -215
  173. package/templates/resources/emotional-beats/15-dark-night.md +0 -244
  174. package/templates/resources/emotional-beats/16-sacrifice.md +0 -246
  175. package/templates/resources/emotional-beats/17-awakening.md +0 -246
  176. package/templates/resources/emotional-beats/18-confrontation.md +0 -217
  177. package/templates/resources/emotional-beats/19-bittersweet-goodbye.md +0 -368
  178. package/templates/resources/emotional-beats/20-moral-dilemma.md +0 -248
  179. package/templates/resources/emotional-beats/21-temptation.md +0 -240
  180. package/templates/resources/emotional-beats/22-redemption.md +0 -210
  181. package/templates/resources/emotional-beats/README.md +0 -104
  182. package/templates/resources/emotional-beats/beat-sequences.md +0 -276
  183. package/templates/resources/emotional-beats/config.yaml +0 -30
  184. package/templates/resources/emotional-beats/pacing-guide.md +0 -390
  185. package/templates/resources/genres/game-lit.md +0 -174
  186. package/templates/resources/genres/historical.md +0 -1127
  187. package/templates/resources/genres/horror.md +0 -211
  188. package/templates/resources/genres/military.md +0 -209
  189. package/templates/resources/genres/mystery.md +0 -1123
  190. package/templates/resources/genres/rebirth.md +0 -177
  191. package/templates/resources/genres/revenge.md +0 -846
  192. package/templates/resources/genres/romance.md +0 -948
  193. package/templates/resources/genres/sci-fi.md +0 -156
  194. package/templates/resources/genres/sports.md +0 -216
  195. package/templates/resources/genres/thriller.md +0 -166
  196. package/templates/resources/genres/urban.md +0 -170
  197. package/templates/resources/genres/workplace.md +0 -214
  198. package/templates/resources/genres/wuxia.md +0 -143
  199. package/templates/resources/genres/xuanhuan.md +0 -234
  200. package/templates/resources/genres/youth.md +0 -219
  201. package/templates/resources/memory/personal-voice.md +0 -113
  202. package/templates/resources/references/README.md +0 -96
  203. package/templates/resources/references/china-1920s/culture.md +0 -423
  204. package/templates/resources/references/china-1920s/daily-life.md +0 -616
  205. package/templates/resources/references/china-1920s/overview.md +0 -298
  206. package/templates/resources/references/china-1920s/society.md +0 -703
  207. package/templates/resources/references/china-1920s/warlords.md +0 -427
  208. package/templates/resources/references/cultivation-world/daily-life.md +0 -108
  209. package/templates/resources/references/cultivation-world/overview.md +0 -64
  210. package/templates/resources/references/cultivation-world/power-system.md +0 -108
  211. package/templates/resources/references/cultivation-world/sects.md +0 -104
  212. package/templates/resources/references/cultivation-world/world-setting.md +0 -108
  213. package/templates/resources/references/modern-workplace/corporate.md +0 -115
  214. package/templates/resources/references/modern-workplace/daily-life.md +0 -129
  215. package/templates/resources/references/modern-workplace/overview.md +0 -73
  216. package/templates/resources/references/modern-workplace/relationships.md +0 -107
  217. package/templates/resources/references/modern-workplace/tech-industry.md +0 -131
  218. package/templates/resources/references/tang-dynasty/culture.md +0 -135
  219. package/templates/resources/references/tang-dynasty/daily-life.md +0 -139
  220. package/templates/resources/references/tang-dynasty/overview.md +0 -76
  221. package/templates/resources/references/tang-dynasty/politics.md +0 -121
  222. package/templates/resources/references/tang-dynasty/society.md +0 -126
  223. package/templates/resources/requirements/README.md +0 -240
  224. package/templates/resources/requirements/anti-ai-v3.md +0 -46
  225. package/templates/resources/requirements/anti-ai-v4-deprecated.md +0 -442
  226. package/templates/resources/requirements/anti-ai-v5-balanced.md +0 -203
  227. package/templates/resources/requirements/concretization.md +0 -90
  228. package/templates/resources/requirements/fast-paced.md +0 -552
  229. package/templates/resources/requirements/no-poison.md +0 -60
  230. package/templates/resources/requirements/romance-angst.md +0 -102
  231. package/templates/resources/requirements/romance-sweet.md +0 -63
  232. package/templates/resources/requirements/serious-literature.md +0 -45
  233. package/templates/resources/requirements/strong-emotion.md +0 -60
  234. package/templates/resources/scripts/README.md +0 -187
  235. package/templates/resources/scripts/bash/analyze-story.sh +0 -170
  236. package/templates/resources/scripts/bash/check-analyze-stage.sh +0 -108
  237. package/templates/resources/scripts/bash/check-consistency.sh +0 -463
  238. package/templates/resources/scripts/bash/check-facts.sh +0 -214
  239. package/templates/resources/scripts/bash/check-plot.sh +0 -374
  240. package/templates/resources/scripts/bash/check-timeline.sh +0 -346
  241. package/templates/resources/scripts/bash/check-world.sh +0 -395
  242. package/templates/resources/scripts/bash/check-writing-state.sh +0 -854
  243. package/templates/resources/scripts/bash/clarify-story.sh +0 -117
  244. package/templates/resources/scripts/bash/common.sh +0 -151
  245. package/templates/resources/scripts/bash/constitution.sh +0 -114
  246. package/templates/resources/scripts/bash/generate-tasks.sh +0 -65
  247. package/templates/resources/scripts/bash/init-tracking.sh +0 -183
  248. package/templates/resources/scripts/bash/manage-relations.sh +0 -174
  249. package/templates/resources/scripts/bash/migrate-tracking.sh +0 -183
  250. package/templates/resources/scripts/bash/plan-story.sh +0 -100
  251. package/templates/resources/scripts/bash/specify-story.sh +0 -93
  252. package/templates/resources/scripts/bash/tasks-story.sh +0 -96
  253. package/templates/resources/scripts/bash/test-word-count.sh +0 -182
  254. package/templates/resources/scripts/bash/tests/bench-preload-cache.sh +0 -100
  255. package/templates/resources/scripts/bash/tests/run-all-benchmarks.sh +0 -16
  256. package/templates/resources/scripts/bash/tests/test-cache-semantics.sh +0 -199
  257. package/templates/resources/scripts/bash/tests/test-cross-platform.sh +0 -35
  258. package/templates/resources/scripts/bash/tests/test-edge-cases-bash.sh +0 -60
  259. package/templates/resources/scripts/bash/tests/test-phase1-bash.sh +0 -28
  260. package/templates/resources/scripts/bash/tests/test-preload-cache.sh +0 -123
  261. package/templates/resources/scripts/bash/tests/test-regex-precompile.sh +0 -89
  262. package/templates/resources/scripts/bash/tests/test-regression-bash.sh +0 -42
  263. package/templates/resources/scripts/bash/tests/test-task6-verification.sh +0 -200
  264. package/templates/resources/scripts/bash/text-audit.sh +0 -144
  265. package/templates/resources/scripts/bash/track-progress.sh +0 -194
  266. package/templates/resources/scripts/powershell/analyze-story.ps1 +0 -174
  267. package/templates/resources/scripts/powershell/check-analyze-stage.ps1 +0 -110
  268. package/templates/resources/scripts/powershell/check-consistency.ps1 +0 -138
  269. package/templates/resources/scripts/powershell/check-facts.ps1 +0 -195
  270. package/templates/resources/scripts/powershell/check-plot.ps1 +0 -139
  271. package/templates/resources/scripts/powershell/check-timeline.ps1 +0 -112
  272. package/templates/resources/scripts/powershell/check-writing-state.ps1 +0 -486
  273. package/templates/resources/scripts/powershell/clarify-story.ps1 +0 -107
  274. package/templates/resources/scripts/powershell/common.ps1 +0 -36
  275. package/templates/resources/scripts/powershell/constitution.ps1 +0 -145
  276. package/templates/resources/scripts/powershell/generate-tasks.ps1 +0 -70
  277. package/templates/resources/scripts/powershell/init-tracking.ps1 +0 -98
  278. package/templates/resources/scripts/powershell/manage-relations.ps1 +0 -134
  279. package/templates/resources/scripts/powershell/migrate-tracking.ps1 +0 -145
  280. package/templates/resources/scripts/powershell/plan-story.ps1 +0 -99
  281. package/templates/resources/scripts/powershell/specify-story.ps1 +0 -85
  282. package/templates/resources/scripts/powershell/tests/bench-ps-cache.ps1 +0 -80
  283. package/templates/resources/scripts/powershell/tests/test-cross-platform.ps1 +0 -27
  284. package/templates/resources/scripts/powershell/tests/test-edge-cases-ps.ps1 +0 -29
  285. package/templates/resources/scripts/powershell/tests/test-phase1-ps.ps1 +0 -28
  286. package/templates/resources/scripts/powershell/tests/test-ps-cache.ps1 +0 -73
  287. package/templates/resources/scripts/powershell/tests/test-regression-ps.ps1 +0 -40
  288. package/templates/resources/scripts/powershell/text-audit.ps1 +0 -102
  289. package/templates/resources/scripts/powershell/track-progress.ps1 +0 -105
  290. package/templates/resources/styles/README.md +0 -302
  291. package/templates/resources/styles/ancient-style.md +0 -579
  292. package/templates/resources/styles/literary.md +0 -439
  293. package/templates/resources/styles/minimal.md +0 -472
  294. package/templates/resources/styles/natural-voice.md +0 -930
  295. package/templates/resources/styles/web-novel.md +0 -525
  296. package/templates/skills/analysis/character-analysis/SKILL.md +0 -71
  297. package/templates/skills/analysis/foreshadow-analysis/SKILL.md +0 -45
  298. package/templates/skills/analysis/hook-analysis/SKILL.md +0 -111
  299. package/templates/skills/analysis/logic-analysis/SKILL.md +0 -58
  300. package/templates/skills/analysis/opening-analysis/SKILL.md +0 -59
  301. package/templates/skills/analysis/pacing-analysis/SKILL.md +0 -55
  302. package/templates/skills/analysis/power-analysis/SKILL.md +0 -148
  303. package/templates/skills/analysis/reader-analysis/SKILL.md +0 -117
  304. package/templates/skills/analysis/style-analysis/SKILL.md +0 -60
  305. package/templates/skills/analysis/voice-analysis/SKILL.md +0 -42
  306. package/templates/skills/auto-tracking/SKILL.md +0 -280
  307. package/templates/skills/genre-knowledge/fantasy/SKILL.md +0 -355
  308. package/templates/skills/genre-knowledge/mystery/SKILL.md +0 -337
  309. package/templates/skills/genre-knowledge/romance/SKILL.md +0 -228
  310. package/templates/skills/genre-knowledge/sci-fi/SKILL.md +0 -65
  311. package/templates/skills/genre-knowledge/thriller/SKILL.md +0 -95
  312. package/templates/skills/planning/volume-detail/SKILL.md +0 -219
  313. package/templates/skills/quality-assurance/consistency-checker/SKILL.md +0 -412
  314. package/templates/skills/quality-assurance/continuity-tracker/SKILL.md +0 -157
  315. package/templates/skills/quality-assurance/facts-checker/SKILL.md +0 -405
  316. package/templates/skills/quality-assurance/forgotten-elements/SKILL.md +0 -147
  317. package/templates/skills/quality-assurance/getting-started/SKILL.md +0 -224
  318. package/templates/skills/quality-assurance/hook-checker/SKILL.md +0 -164
  319. package/templates/skills/quality-assurance/hook-checker/experts/hook-analyst.md +0 -33
  320. package/templates/skills/quality-assurance/long-series-continuity/SKILL.md +0 -570
  321. package/templates/skills/quality-assurance/pacing-monitor/SKILL.md +0 -143
  322. package/templates/skills/quality-assurance/pov-validator/SKILL.md +0 -135
  323. package/templates/skills/quality-assurance/pre-write-checklist/SKILL.md +0 -583
  324. package/templates/skills/quality-assurance/requirement-detector/CONFLICT_RESOLUTION.md +0 -119
  325. package/templates/skills/quality-assurance/requirement-detector/EXAMPLES.md +0 -146
  326. package/templates/skills/quality-assurance/requirement-detector/KEYWORDS.md +0 -160
  327. package/templates/skills/quality-assurance/requirement-detector/SKILL.md +0 -149
  328. package/templates/skills/quality-assurance/setting-detector/SKILL.md +0 -611
  329. package/templates/skills/quality-assurance/style-detector/CONFLICT_RESOLUTION.md +0 -126
  330. package/templates/skills/quality-assurance/style-detector/EXAMPLES.md +0 -206
  331. package/templates/skills/quality-assurance/style-detector/KEYWORDS.md +0 -207
  332. package/templates/skills/quality-assurance/style-detector/SKILL.md +0 -264
  333. package/templates/skills/quality-assurance/voice-consistency-checker/SKILL.md +0 -103
  334. package/templates/skills/quality-assurance/voice-consistency-checker/experts/voice-analyst.md +0 -21
  335. package/templates/skills/quality-assurance/workflow-guide/SKILL.md +0 -381
  336. package/templates/skills/writing-techniques/character-arc/SKILL.md +0 -267
  337. package/templates/skills/writing-techniques/dialogue-techniques/SKILL.md +0 -366
  338. package/templates/skills/writing-techniques/multi-thread-narrative/SKILL.md +0 -708
  339. package/templates/skills/writing-techniques/multi-thread-narrative/experts/thread-analyst.md +0 -226
  340. package/templates/skills/writing-techniques/pacing-control/SKILL.md +0 -480
  341. package/templates/skills/writing-techniques/reader-expectation/SKILL.md +0 -1026
  342. package/templates/skills/writing-techniques/reader-expectation/experts/expectation-analyst.md +0 -209
  343. package/templates/skills/writing-techniques/revision-polish/SKILL.md +0 -496
  344. package/templates/skills/writing-techniques/revision-polish/experts/revision-editor.md +0 -221
  345. package/templates/skills/writing-techniques/scene-structure/SKILL.md +0 -361
  346. package/templates/skills/writing-techniques/style-learning/SKILL.md +0 -436
  347. package/templates/skills/writing-techniques/writing-balance/.gitkeep +0 -0
  348. package/templates/skills/writing-techniques/writing-balance/SKILL.md +0 -460
  349. package/templates/skills/writing-techniques/writing-techniques/SKILL.md +0 -727
  350. package/templates/tracking/story-facts.json +0 -5
  351. package/templates/tracking/summary/characters-summary.json +0 -7
  352. package/templates/tracking/summary/plot-summary.json +0 -13
  353. package/templates/tracking/summary/timeline-summary.json +0 -8
  354. package/templates/tracking/summary/volume-summaries.json +0 -5
  355. package/templates/tracking/tracking-log.md +0 -110
  356. package/templates/tracking/validation-rules.json +0 -128
  357. /package/templates/resources/{memory/constitution.md → constitution.md} +0 -0
@@ -1,283 +0,0 @@
1
- # Farewell (告别)
2
-
3
- ## 核心定义
4
-
5
- 告别 = 角色之间永久或长期分离的情感时刻。告别的重量取决于关系的深度和分离的必然性。
6
-
7
- 告别是小说中最沉重的情感节拍之一,因为它迫使角色面对一个残酷的事实:有些人一旦离开,就再也不会回来。与重逢相反,告别是一个"失去"的过程——不是突然的丧失,而是眼睁睁看着某个人从自己的生命中退出,甚至是自己主动选择放手。
8
-
9
- 告别的本质不是"再见",而是"我知道这一次之后,一切都不同了"。真正有力量的告别场景,不在于角色说了什么,而在于他们没有说出口的那些话——那些被时间、骄傲、恐惧或善意压在心底的话。
10
-
11
- **关键区分:**
12
- - 告别 ≠ 分离(分离是物理距离,告别是情感仪式)
13
- - 告别 ≠ 结束(关系可能在告别后以另一种形式延续)
14
- - 告别 ≠ 放弃(告别可以是出于爱的选择)
15
- - 告别 ≠ 死亡(死亡剥夺了告别的机会,而告别是一种主动的面对)
16
-
17
- ---
18
-
19
- ## 核心元素
20
-
21
- ### 1. 分离的必然性
22
-
23
- 告别之所以沉重,是因为分离不可避免。如果角色可以轻易选择不离开,告别就失去了张力。必然性可以来自外部(战争、疾病、使命),也可以来自内部(成长、选择、自我牺牲)。
24
-
25
- **具体做法:**
26
- - 在告别场景之前,用充分的篇幅建立"为什么必须离开"的逻辑。读者需要理解并接受这个必然性,才能在告别时感到心痛而非困惑
27
- - 让角色自己也挣扎过——他们试图寻找其他出路,但最终不得不接受分离是唯一的选择
28
- - 必然性越强,告别越有力量。"我不想走但必须走"比"我想走所以走了"更能打动读者
29
-
30
- ### 2. 未说出的话
31
-
32
- 告别时最有力量的往往不是说出口的话,而是那些咽回去的话。角色可能有千言万语,但在最后一刻只能说出一句平淡的"保重"。
33
-
34
- **具体做法:**
35
- - 设计角色"想说但没说"的内容——读者应该能感受到那些未说出的话的重量
36
- - 用动作代替语言:欲言又止、握紧又松开的手、转身后才流下的眼泪
37
- - 让角色说出的话与内心想说的话形成反差:"没事,我很快就回来"(内心知道不会回来了)
38
-
39
- ### 3. 最后的记忆
40
-
41
- 告别时刻会被记忆定格。角色会不自觉地记住最后看到的画面、最后听到的声音、最后触碰的温度。这个"最后的记忆"会在后续故事中反复出现,成为情感的锚点。
42
-
43
- **具体做法:**
44
- - 选择一个具体的感官细节作为"最后的记忆"——不是笼统的"她的样子",而是"她围巾被风吹起的样子"或"他转身时后背微微弓起的弧度"
45
- - 这个细节应该在告别之后的叙事中至少回响一次,让读者感受到记忆的持久力
46
- - 最后的记忆往往是不完美的、片段的——因为告别时人的注意力是混乱的,大脑只能抓住某一个瞬间
47
-
48
- ### 4. 离开后的空缺
49
-
50
- 告别的真正重量不在告别的瞬间,而在之后。那个人离开后留下的空缺——空了的椅子、安静的房间、再也不会响起的电话——才是告别最持久的痛。
51
-
52
- **具体做法:**
53
- - 告别场景之后,用一个安静的段落展示"缺席":角色回到日常,但一切都因为某个人的离开而变得不同
54
- - 用具体的物件或习惯来体现空缺:习惯性地倒两杯茶、转头想说话却发现旁边没人、手机里最后一条消息的时间停在告别那天
55
- - 空缺不需要大段描写,一个精准的细节就足够——"她打开冰箱,里面还有他上周买的牛奶,过期了"
56
-
57
- ---
58
-
59
- ## 常见套路(应避免)
60
-
61
- - ❌ **机场/车站追人:** 角色在最后一刻冲到机场或火车站,在人群中找到即将离开的人,深情告白。这个桥段在影视剧中已经被用到透支,在小说中更显得刻意。真正的告别很少发生在公共交通枢纽的奔跑中。
62
- - ❌ **完美的告别演说:** 角色在告别时说出一段完美的、诗意的、总结整段关系的独白。现实中,告别时人的大脑往往是空白的,最想说的话反而说不出来。过于流畅的告别演说会让场景失去真实感。
63
- - ❌ **无痛告别:** 角色微笑着挥手,潇洒转身,仿佛离开毫无代价。这种处理方式回避了告别的情感核心——痛苦。即使是最坚强的人,面对真正的告别也会有裂缝。
64
- - ❌ **假告别(很快又见面):** 用告别制造煽情效果,但几章之后角色就重逢了。这种"狼来了"式的写法会消耗读者的情感信任。如果告别不是真的,就不要用告别的重量来写。
65
-
66
- ---
67
-
68
- ## 新颖变体
69
-
70
- ### 变体1:日常告别(不知道是最后一次)
71
-
72
- 最残酷的告别是那些当时不知道是告别的告别。角色像往常一样说了句"明天见",但明天再也没有来。这种变体的力量在于回溯——当角色(和读者)后来意识到那是最后一次见面时,那个平凡的瞬间突然承载了巨大的重量。
73
-
74
- **示例场景:**
75
- ```
76
- "我走了,晚上想吃什么?"
77
- "随便,你定。"
78
- 他拎起公文包,在门口换鞋。她在厨房洗碗,没有回头。
79
- "那我买点排骨回来。"
80
- "嗯。"
81
- 门关上了。
82
- 她听到电梯的声音,然后是安静。
83
-
84
- 这是她最后一次听到他的声音。
85
- 但她当时不知道。
86
- 她甚至没有回头看他一眼。
87
- ```
88
-
89
- **写作要点:** 这种变体的关键是"日常感"。场景越平凡、越琐碎,后来的冲击越大。不要在告别时埋入任何暗示——让它真的就是一个普通的早晨,一次普通的出门。残酷感来自于回溯时的对比。
90
-
91
- ### 变体2:提前告别(知道即将分离但假装正常)
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
- ### 变体3:单方面告别(一方不知道)
120
-
121
- 一个角色决定离开,但没有告诉对方。告别是单方面完成的——在对方不知情的情况下,默默地看最后一眼、做最后一件事、留下最后一样东西。
122
-
123
- **示例场景:**
124
- ```
125
- 凌晨四点,她最后一次检查行李。
126
- 他还在睡,呼吸均匀。
127
-
128
- 她站在床边看了他很久。
129
- 月光从窗帘缝隙里漏进来,落在他的眉骨上。
130
- 她伸出手,在离他额头一厘米的地方停住了。
131
- 没有碰。
132
-
133
- 她把钥匙放在玄关的鞋柜上。
134
- 冰箱里昨晚做的汤还够他喝两天。
135
- 阳台上的绿萝她浇过了。
136
-
137
- 她拉开门,回头看了一眼。
138
- 客厅很暗,只有路由器的绿灯一闪一闪。
139
- 她轻轻带上门,锁舌咔哒一声。
140
-
141
- 楼道里她站了很久。
142
- 然后拎起行李箱,走进电梯。
143
- ```
144
-
145
- **写作要点:** 单方面告别的核心是"独自承受"。离开的人必须独自消化所有的不舍,而留下的人甚至不知道发生了什么。写作时要注意离开者的视角——他们会格外注意日常细节(钥匙、汤、绿萝),因为这些是他们能为对方做的最后的事。沉默比任何台词都更有力量。
146
-
147
- ### 变体4:无言告别(什么都不说就离开)
148
-
149
- 两个人都知道这是告别,但谁都没有说出口。没有"再见",没有拥抱,没有眼泪——只有一个眼神、一个动作、或者仅仅是一段共同的沉默。然后,一个人转身走了。
150
-
151
- **示例场景:**
152
- ```
153
- 火车还有十分钟。
154
- 他们站在站台上,并肩,没有面对面。
155
-
156
- 她看着铁轨延伸到远处,消失在雾里。
157
- 他看着电子屏上的时间,一分一分地跳。
158
-
159
- 风很大。她的头发吹到了他肩上,他没有动。
160
-
161
- 广播响了。
162
- 他拎起行李。
163
- 她往旁边让了一步。
164
-
165
- 他走了两步,停下来。
166
- 没有回头。
167
- 从口袋里掏出一颗糖,放在身后的长椅上。
168
- 她看到了。
169
-
170
- 他上了车。
171
- 车门关上。
172
- 列车启动。
173
-
174
- 她坐到长椅上,拿起那颗糖。
175
- 是薄荷味的。他知道她晕车。
176
- 但这次坐车的人不是她。
177
-
178
- 她把糖攥在手心里,一直到糖纸被体温捂热。
179
- ```
180
-
181
- **写作要点:** 无言告别的力量在于"留白"。所有的情感都藏在动作和细节里——不说话不代表没有感情,恰恰相反,是因为感情太满,语言已经装不下了。关键技巧是选择一个小而具体的"替代语言"(这里是一颗糖),让它承载所有未说出的话。
182
-
183
- ---
184
-
185
- ## 情感真实性
186
-
187
- 如何让告别场景令读者信服?关键在于以下几个层面:
188
-
189
- ### 时间的扭曲
190
-
191
- 告别时,人对时间的感知会发生变化。有时觉得时间过得太快("怎么就到了"),有时觉得每一秒都被拉长(最后的拥抱仿佛持续了一个世纪)。在写作中,可以通过叙事节奏来模拟这种时间扭曲——告别前的日子写得飞快,告别的瞬间写得极慢极细。
192
-
193
- ### 身体的诚实
194
-
195
- 告别时,身体比语言更诚实。角色可以微笑着说"我没事",但他们的手在发抖、声音在变调、眼睛在回避。不要只写情绪,要写身体:喉咙发紧说不出话、胸口像压了一块石头、腿像灌了铅一样迈不动步。一个好的技巧是写告别之后的身体反应——走出对方视线后突然蹲下来,或者上了车之后才发现自己一直在咬嘴唇。
196
-
197
- ### 日常的崩塌
198
-
199
- 告别最真实的痛不在告别的瞬间,而在之后的日常。当角色发现自己仍然会习惯性地做某些事(买两份早餐、说话时转头看向空座位、听到门响以为是那个人回来了),日常的惯性与缺席的现实之间的碰撞,才是告别最持久的痛感。
200
-
201
- ### 不完美的告别
202
-
203
- 现实中几乎没有"完美的告别"。人们总是在事后才想起该说的话、该做的事。让告别场景保留这种不完美——角色说错了话、忘了想说的事、在最后一刻做了一个笨拙的动作。不完美的告别比完美的告别更让人心碎,因为它更真实。
204
-
205
- ---
206
-
207
- ## 示例分析
208
-
209
- ### 示例1:《指环王》(The Lord of the Rings) —— 灰港之别
210
-
211
- **背景:** 魔戒战争结束后,Frodo 因为承载魔戒留下的创伤无法在中土世界继续生活,决定与 Gandalf、Bilbo 以及精灵们一起从灰港 (Grey Havens) 乘船前往不死之地 (Undying Lands)。Sam、Merry 和 Pippin 前来送别。
212
-
213
- **为什么有效:**
214
- - **分离的必然性:** Frodo 的离开不是选择,而是必然。魔戒在他身上留下的伤痕无法在中土世界愈合。读者在整个《王者归来》中逐渐意识到 Frodo 已经"回不来了"——他在夏尔的生活越来越像一个局外人。这种铺垫让告别到来时,读者虽然心痛但能理解。
215
- - **未说出的话:** Frodo 对 Sam 说的最后一句话是关于《西境红皮书》——"最后几页留给你,Sam。"这句话表面上在说一本书,实际上是在说:我的故事结束了,接下来是你的故事。Tolkien 没有让 Frodo 说出"你是我最好的朋友"这样直白的话,而是用一个具体的、有象征意义的嘱托来承载所有的情感。
216
- - **最后的记忆:** Sam 最后看到的是 Frodo 站在船上微笑的样子——"他的脸上不再有阴影"。这个画面之所以动人,是因为整部故事中 Frodo 一直被痛苦和负担压着,而在告别的最后一刻,他终于轻松了。Sam 的悲伤与 Frodo 的释然形成了残酷的对比。
217
- - **离开后的空缺:** Sam 回到家,坐在火炉边,女儿爬到他膝上。他深吸一口气说:"好了,我回来了。"这个结尾的力量在于它的平静——Sam 必须回到日常生活中,但读者知道,那个和他一起走过末日火山的人,再也不会坐在对面了。
218
-
219
- **写作启示:** 最好的告别不是最悲伤的,而是最真实的。Tolkien 让告别同时承载了悲伤(分离)和释然(解脱),这种复杂的情感比单纯的悲伤更有深度。
220
-
221
- ### 示例2:《玩具总动员3》(Toy Story 3) —— Andy 与玩具们的告别
222
-
223
- **背景:** Andy 即将上大学,他把陪伴自己长大的玩具们送给了邻居小女孩 Bonnie。在 Bonnie 家门前的草坪上,Andy 一个一个地把玩具介绍给 Bonnie,最后拿起 Woody 时犹豫了很久,最终还是把 Woody 也交给了她。
224
-
225
- **为什么有效:**
226
- - **成长的必然性:** Andy 长大了,这是无法逆转的事实。他不再需要玩具,但这不意味着他不爱它们。影片用整个第三部的篇幅让观众(和 Andy 自己)接受这个事实:童年必须结束。
227
- - **仪式感:** Andy 不是把玩具扔进箱子里,而是一个一个地介绍给 Bonnie——"这是 Jessie,她是最勇敢的女牛仔","这是 Rex,他可能看起来有点吓人,但其实他是最温柔的恐龙"。这个"介绍"的过程就是告别的仪式:Andy 在回顾与每个玩具的关系,同时把这些关系"交接"给下一个人。
228
- - **犹豫的瞬间:** Andy 拿起 Woody 时的犹豫是整个场景的情感高潮。Woody 是他最重要的玩具,是童年的核心。那几秒钟的犹豫里,观众能感受到 Andy 内心的拉扯——理智告诉他应该放手,但情感让他舍不得。最终他把 Woody 递出去,这个动作的重量等同于"我愿意长大了"。
229
- - **最后的游戏:** Andy 在离开前和 Bonnie 一起玩了最后一次玩具。这不是悲伤的告别,而是一次"传承"——他把自己与玩具之间的快乐传递给了下一个孩子。告别因此有了温暖的底色,而不仅仅是失去。
230
-
231
- **写作启示:** 告别不一定是纯粹的悲伤。当告别同时包含"传承"的意味时——把珍贵的东西交给值得托付的人——它会获得一种超越悲伤的力量。读者会哭,但不是因为绝望,而是因为被那份郑重的爱打动。
232
-
233
- ---
234
-
235
- ## 写作提示
236
-
237
- ### 五个设计问题
238
-
239
- 在写告别场景之前,先回答以下问题:
240
-
241
- 1. **为什么必须告别?** 分离的原因是什么?是外部力量(战争、疾病、命运)还是内部选择(成长、牺牲、放手)?原因越不可抗拒,告别越有重量。确保读者理解并接受这个必然性。
242
- 2. **角色最想说但说不出的话是什么?** 每个角色心里都有一句"最想说的话"。想清楚这句话是什么,然后决定:让角色说出来,还是永远咽下去?两种选择都有力量,但效果完全不同。
243
- 3. **告别之后,角色的生活会怎样改变?** 告别不是终点,而是一个新阶段的起点。那个人离开后,留下的人如何继续生活?日常中的哪些细节会因为缺席而变得刺眼?
244
- 4. **这个告别是双方对等的吗?** 两个人对告别的感受是否相同?一方可能如释重负,另一方可能心如刀割。不对等的情感会创造更复杂的场景张力。
245
- 5. **读者在告别前应该积累什么情感?** 告别的效果取决于之前的铺垫。读者需要先爱上这段关系,才能在告别时感到心痛。问自己:我是否给了读者足够的理由去在乎这次告别?
246
-
247
- ### 五项检查清单
248
-
249
- 写完告别场景后,用以下清单检验:
250
-
251
- - [ ] **分离的必然性是否成立?** 读者是否理解为什么角色必须离开,还是觉得"明明可以不走"?
252
- - [ ] **告别中是否有未说出的话?** 角色是否把所有想说的都说了(太完美),还是留下了遗憾和空白?
253
- - [ ] **是否有一个具体的"最后的记忆"?** 场景中是否有一个感官细节足够鲜明,能在读者脑中留下印记?
254
- - [ ] **告别后的空缺是否被展示?** 是否有至少一个段落展示了离开后的日常变化?
255
- - [ ] **情感是否真实而非煽情?** 场景是否依赖了真实的细节和克制的表达,而不是大段的哭泣和独白?
256
-
257
- ---
258
-
259
- ## 进阶技巧
260
-
261
- ### 技巧1:延迟告别 (Delayed Farewell)
262
-
263
- 角色知道告别即将到来,但一直在回避。他们用忙碌、争吵、或者假装正常来推迟那个不得不面对的时刻。当告别最终到来时,所有被压抑的情感在一瞬间决堤。
264
-
265
- **实操方法:** 设计一个"倒计时"结构——读者知道告别的时间点(航班起飞、手术开始、学期结束),角色也知道,但双方都在回避。在倒计时的过程中,角色做一些看似无关的事情(整理房间、做一顿饭、修理一个早就该修的东西),但这些行为本身就是变相的告别。当最后一刻到来时,不需要大段的情感宣泄——一个眼神、一句"该走了"就足够了,因为所有的情感已经在之前的"回避"中积累到了极限。
266
-
267
- **效果:** 延迟制造了巨大的情感压力。读者在整个倒计时过程中都处于紧绷状态,当告别终于发生时,即使场景本身很安静,情感冲击也是巨大的。
268
-
269
- ### 技巧2:错位告别 (Misaligned Farewell)
270
-
271
- 两个角色对告别的理解不同。一方以为这是暂时的分别,另一方知道这是永别;或者一方已经做好了准备,另一方还完全没有意识到。这种信息不对称制造了独特的悲剧张力。
272
-
273
- **实操方法:** 选择一个角色作为"知情者",让他/她的每一个动作都带有双重含义——表面上是日常互动,实际上是在告别。另一个角色毫不知情,他们的天真和快乐与知情者的隐忍形成残酷的对比。关键是让读者站在知情者的视角,与他/她共同承受这个秘密的重量。当不知情的一方最终意识到真相时(可以是在告别之后很久),那个"恍然大悟"的瞬间会产生二次冲击。
274
-
275
- **效果:** 读者会回溯之前的场景,重新理解每一个细节的含义。那些当时看起来平常的举动——多做了一道菜、多说了一句话、多看了一眼——在回溯中全部变成了告别的信号。这种"回溯性心碎"是极其强大的叙事武器。
276
-
277
- ### 技巧3:替代告别 (Surrogate Farewell)
278
-
279
- 角色无法直接向对方告别(对方已经离开、昏迷、或者关系不允许),于是通过一个替代物完成告别——写一封不会寄出的信、对着对方的照片说话、去两人曾经共同的地方坐一会儿、完成对方未完成的事。
280
-
281
- **实操方法:** 选择一个与两人关系有深刻关联的替代物或替代行为。替代告别的力量在于"不在场"——正因为对方不在,角色反而能说出面对面时说不出的话。但要注意,替代告别不应该是"完美的独白",而应该是断断续续的、不完整的——角色可能说到一半就说不下去了,或者写了一封信又撕掉重写。不完整本身就是真实。
282
-
283
- **效果:** 替代告别将"缺席"本身变成了场景中最有力的存在。对方不在场,但他/她的影子无处不在——在空气中、在物件上、在角色的每一个动作里。这种"在场的缺席"比面对面的告别更能让读者感受到失去的重量。
@@ -1,242 +0,0 @@
1
- # Revelation (真相揭露)
2
-
3
- ## 核心定义
4
-
5
- 真相揭露 = 重要信息被揭晓,改变角色和读者对故事的理解。
6
-
7
- 真相揭露是叙事中最具冲击力的情感节拍之一。它不仅仅是"告诉读者一个秘密",而是在精心铺垫之后,将一个关键信息引爆,让角色和读者对之前发生的一切产生全新的理解。好的真相揭露会让读者倒吸一口凉气,然后立刻回想之前的情节,发现所有线索早已摆在眼前。差的真相揭露则让读者感到被欺骗、被愚弄,或者根本无动于衷。
8
-
9
- **关键区分:**
10
- - **情节层面的揭露:** 凶手的身份、隐藏的血缘关系、阴谋的真相
11
- - **情感层面的揭露:** 角色对自己的重新认知、关系本质的改变、信念的崩塌与重建
12
-
13
- 最好的真相揭露同时在这两个层面产生冲击。情节上的反转震撼读者的头脑,情感上的冲击震撼读者的心灵。
14
-
15
- ---
16
-
17
- ## 核心元素
18
-
19
- ### 1. 之前的铺垫(线索)
20
-
21
- 真相揭露的力量取决于之前铺垫的质量。读者在揭露之后回头审视,应该能找到所有的线索——但这些线索在第一次阅读时不应该太明显。
22
-
23
- - **线索必须是公平的:** 所有关键信息都已经呈现给读者,只是被巧妙地隐藏在其他信息中。读者回头看时应该感叹"原来如此",而不是"这根本没提过"。
24
- - **线索必须是自然的:** 每条线索在当时的语境中都有合理的存在理由,不会让读者觉得"这个细节为什么突然出现"。最好的线索是那些看似服务于其他目的的细节——一个角色的习惯、一句随口的对话、一个场景中的背景物件。
25
- - **线索的密度要适中:** 太少,揭露时读者觉得毫无根据;太多,读者提前猜到真相,揭露失去冲击力。通常三到五条分散在不同章节中的线索是比较理想的密度。
26
-
27
- ### 2. 揭露时机
28
-
29
- 时机决定了揭露的最大情感效果。太早,故事失去悬念;太迟,读者已经失去兴趣或自己猜到了。
30
-
31
- - **情感压力最大的时刻:** 当角色正面临重大抉择、处于最脆弱的状态时揭露,冲击力最大
32
- - **信任建立之后:** 当角色(或读者)刚刚对某人或某事建立了信任,此时揭露真相会产生最强烈的背叛感
33
- - **行动不可逆之后:** 角色已经做出了无法挽回的决定,然后才发现真相——这种时机制造的不是震惊,而是深沉的悲剧感
34
-
35
- ### 3. 揭露方式
36
-
37
- 真相如何被揭露,和真相本身一样重要。
38
-
39
- - **意外发现:** 角色无意中看到、听到、找到了关键证据。这种方式最自然,但需要避免过于巧合。
40
- - **被迫坦白:** 隐藏真相的人在压力下不得不说出真相。这种方式带有强烈的人际张力。
41
- - **自行推理:** 角色通过拼凑线索自己得出结论。这种方式最能展示角色的智慧,也最让读者有参与感。
42
- - **第三方揭露:** 由一个局外人或意想不到的角色揭露真相。这种方式可以带来额外的戏剧性。
43
-
44
- ### 4. 连锁反应
45
-
46
- 真相揭露不是终点,而是新阶段的起点。揭露之后,故事中的关系、目标、联盟都应该发生变化。
47
-
48
- - **关系重组:** 盟友可能变成敌人,敌人可能变成盟友
49
- - **目标重新定义:** 角色追求的东西可能不再有意义,或者出现了更重要的目标
50
- - **内心重建:** 角色需要重新审视自己的身份、信念和过去的选择
51
- - **行动转向:** 故事的走向因为这个揭露而发生根本性的改变
52
-
53
- ---
54
-
55
- ## 常见套路(应避免)
56
-
57
- - ❌ **无铺垫的反转:** 真相从天而降,之前没有任何线索暗示。读者感到的不是震惊,而是被欺骗。"原来他是间谍"——但之前没有任何可疑行为、没有任何矛盾细节、没有任何暗示。这种揭露是作者对读者的不尊重,因为它剥夺了读者"回头发现线索"的乐趣。
58
- - ❌ **反派独白揭露:** 反派在最后关头主动把所有计划和盘托出,通常是在自以为已经胜券在握的时候。这个套路之所以糟糕,不仅因为它被用了无数次,更因为它让反派显得愚蠢——没有任何聪明人会在胜利之前把底牌全部亮出。如果必须由反派揭露真相,至少让揭露本身成为反派计划的一部分,而不是单纯的炫耀。
59
- - ❌ **揭露后无影响:** 真相被揭露了,但故事继续按原来的轨道运行。角色短暂震惊后很快恢复正常,关系没有变化,目标没有调整。这种揭露是空洞的——它制造了一个情感高峰,却没有任何后续的山谷和余波。真正的揭露应该像地震一样,主震之后还有无数余震。
60
- - ❌ **为反转而反转:** 作者追求"没人猜得到"的效果,设计了一个逻辑上勉强成立但情感上毫无意义的反转。是的,没人猜到温柔的老奶奶是幕后黑手——因为这毫无道理。反转的目的不是让读者猜不到,而是让读者在得知真相后对故事产生更深的理解。如果反转只带来"哦"而不是"天哪,原来一切都说得通了",那它就是失败的。
61
-
62
- ---
63
-
64
- ## 新颖变体
65
-
66
- ### 变体1:渐进式揭露
67
-
68
- **描述:** 真相不是在一个戏剧性的时刻一次性揭露,而是像拼图一样,一块一块地呈现给角色和读者。每一块拼图都改变一点点理解,直到最后一块落位时,完整的画面才显现出来。
69
-
70
- **核心张力:** 读者在每一次部分揭露时都会重新评估自己的理解,形成一种持续的、不断深化的悬念感。
71
-
72
- **写法要点:**
73
- - 每次部分揭露都应该是一个独立的情感节拍,有自己的铺垫和冲击
74
- - 后面的揭露应该推翻或修正前面揭露建立的理解,制造"以为知道了,其实还没有"的感觉
75
- - 最终的完整揭露应该让所有碎片同时获得新的意义
76
- - 控制节奏:碎片之间的间隔不能太长(读者会忘记),也不能太短(没有消化时间)
77
-
78
- **适用场景:** 悬疑小说、家族秘密、历史真相、角色身世之谜
79
-
80
- ### 变体2:读者先知(读者比角色先知道)
81
-
82
- **描述:** 真相先被揭露给读者,但角色还蒙在鼓里。读者带着"我知道但他不知道"的焦虑,看着角色一步步走向真相——或者走向因为不知道真相而导致的灾难。
83
-
84
- **核心张力:** 这不是"真相是什么"的悬念,而是"角色什么时候会发现"以及"发现时会怎样"的悬念。希区柯克称之为"桌子下面的炸弹"——观众知道炸弹在那里,角色不知道,这比突然爆炸更令人紧张。
85
-
86
- **写法要点:**
87
- - 读者获知真相的方式要自然(通过另一个角色的视角、一封被截获的信、一个旁观者的观察)
88
- - 角色在不知情的状态下做出的每一个决定,都因为读者知道真相而充满了讽刺感和紧张感
89
- - 当角色终于发现真相时,重点不是"揭露"本身(读者已经知道了),而是角色的情感反应
90
- - 可以让角色以读者意想不到的方式回应真相,制造第二层惊喜
91
-
92
- **适用场景:** 悲剧、讽刺叙事、关系背叛、政治阴谋
93
-
94
- ### 变体3:自我揭露(角色发现关于自己的真相)
95
-
96
- **描述:** 最震撼的真相不是关于外部世界的,而是关于角色自己的。角色发现自己一直以来相信的关于自身的某个核心认知是错误的——身份、记忆、动机、甚至自己是否是"好人"。
97
-
98
- **核心张力:** 外部真相改变角色对世界的理解,自我真相改变角色对自己的理解。后者的冲击更深、更私密、更难以消化。
99
-
100
- **写法要点:**
101
- - 角色在揭露之前必须有一个清晰的自我认知,读者也接受了这个认知
102
- - 揭露应该让角色重新审视自己过去的所有行为——"原来我做那些事不是因为我以为的原因"
103
- - 自我揭露后的身份危机是最有戏剧价值的部分,不要急于让角色"接受并前进"
104
- - 角色可能会经历否认、愤怒、崩溃、最终重建的过程
105
-
106
- **适用场景:** 心理惊悚、身份叙事、成长故事、不可靠叙述者
107
-
108
- ### 变体4:不完整揭露(只揭露部分真相)
109
-
110
- **描述:** 真相被揭露了——但只是一部分。角色(和读者)以为自己终于知道了全貌,但实际上还有更深层的真相隐藏在后面。这种技巧制造了一种"洋葱式"的叙事结构,每剥开一层都有新的发现。
111
-
112
- **核心张力:** 部分真相比完全的谎言更危险,因为它让人放松警惕。角色基于不完整的真相做出决定,而这些决定可能恰恰是错误的。
113
-
114
- **写法要点:**
115
- - 部分真相必须在当时看起来是完整的、令人满意的,读者不应该觉得"肯定还有后续"
116
- - 基于部分真相做出的决定应该产生实际后果,让后续的完整揭露更加痛苦
117
- - 每一层揭露都应该比上一层更深入、更个人化
118
- - 最终的完整真相应该让之前所有的部分真相都获得新的含义
119
-
120
- **适用场景:** 多层阴谋、家族秘密、连环悬疑、长篇系列小说
121
-
122
- ---
123
-
124
- ## 情感真实性
125
-
126
- ### 如何让真相揭露感觉是"赢得的"(Earned)而非"强加的"
127
-
128
- **1. 公平游戏原则**
129
-
130
- 所有线索必须在揭露之前就已经呈现给读者。读者可以没注意到,但线索必须存在。这是作者与读者之间的契约——"我不会凭空变出真相,你回头看时会发现一切都有迹可循。"违反这个契约的揭露,无论多么戏剧性,都会让读者感到被背叛。
131
-
132
- **2. 情感逻辑原则**
133
-
134
- 真相揭露后角色的反应必须符合其性格和与真相的关系。一个理性的角色可能先沉默、分析、然后行动;一个感性的角色可能先崩溃、否认、然后慢慢接受。不要让所有角色都用同一种方式回应揭露——震惊、流泪、然后振作。真实的人面对真相的方式千差万别。
135
-
136
- **3. 代价原则**
137
-
138
- 真相的揭露应该伴随着代价。知道真相的人往往比不知道的人更痛苦。"无知是福"不是空话——让角色(和读者)感受到知道真相的重量。有些真相一旦知道就无法假装不知道,角色必须带着这个知识继续生活。
139
-
140
- **4. 涟漪原则**
141
-
142
- 真相揭露的影响应该像石头投入水中一样,产生层层扩散的涟漪。不仅直接相关的角色受到影响,周围的人、既有的关系网络、甚至故事的主题都应该因为这个揭露而产生微妙的变化。一个好的揭露会改变整个故事的"气压"。
143
-
144
- **5. 不可逆原则**
145
-
146
- 真相一旦揭露,就不能被收回。角色之间的关系、彼此的信任、对世界的理解——这些都被永久地改变了。不要试图让事情"恢复原状"。揭露之后的世界应该是一个新的世界,角色必须在这个新世界中重新找到自己的位置。
147
-
148
- ---
149
-
150
- ## 示例分析
151
-
152
- ### 示例1:《星球大战:帝国反击战》——"I am your father"
153
-
154
- **场景:** 云城对决的高潮。Luke Skywalker 与 Darth Vader 激战后被砍断右手,悬挂在深渊边缘。Vader 向他伸出手,说出了电影史上最著名的台词之一:"不,我才是你的父亲。"
155
-
156
- **为什么有效:**
157
-
158
- - **铺垫精妙:** 第一部电影中,Obi-Wan 告诉 Luke "你父亲被 Darth Vader 杀死了"——这在技术上不是谎言(Anakin Skywalker 在某种意义上确实"死了"),但它巧妙地引导了观众的理解方向。Vader 这个名字本身(源自荷兰语/德语的"父亲")就是一条隐藏在明处的线索。Luke 与 Vader 之间原力的共鸣、Yoda 和 Obi-Wan 对 Luke 身世话题的回避,都是事后才能看清的伏笔。
159
- - **时机完美:** 揭露发生在 Luke 最脆弱的时刻——身体残缺、战斗失败、无路可退。他不仅要面对物理上的绝境,还要面对精神上的崩塌:他一直以来战斗的对象,就是他的父亲。
160
- - **连锁反应深远:** 这个揭露彻底改变了 Luke 的目标。他不再只是"打败邪恶",而是面临一个更复杂的问题:"我能拯救我的父亲吗?"整个第三部电影的情感核心都建立在这个揭露之上。
161
- - **情感层面的冲击:** 这不仅是一个情节反转,更是一个关于身份的根本性问题——"如果我的父亲是最大的恶人,那我是谁?我会不会也变成他?"Luke 选择跳入深渊而非接受 Vader 的手,这个选择本身就是对揭露的最强烈回应。
162
-
163
- **技巧提炼:** 最好的揭露不仅改变过去的理解,更改变未来的走向。它把一个简单的善恶对抗变成了一个关于家庭、救赎和选择的复杂叙事。
164
-
165
- ### 示例2:《第六感》——"I see dead people"的终极真相
166
-
167
- **场景:** 影片结尾,儿童心理学家 Malcolm Crowe 终于意识到一个事实:他自己就是一个死人。影片开头被枪击的那一幕不是"受伤",而是"死亡"。他与妻子之间所有的"冷漠"不是婚姻问题,而是因为她根本看不见他。
168
-
169
- **为什么有效:**
170
-
171
- - **线索无处不在却视而不见:** 整部电影中,Malcolm 从未与妻子以外的成年人有过真正的互动。他进入餐厅时妻子已经坐在那里(不是他们一起到的)。他家的地下室门打不开(因为他妻子把它锁了,她以为那里没人)。他总是穿同一套衣服。每一条线索都在明处,但观众被叙事的框架引导着忽略了它们。这是"公平游戏原则"的教科书级示范。
172
- - **揭露方式是自我发现:** Malcolm 不是被别人告知真相的,而是自己在回顾与妻子的互动时突然领悟的。这种自我揭露(变体3)比任何外部揭露都更有冲击力,因为角色必须面对的不是别人的秘密,而是自己存在的本质。
173
- - **情感重量:** 揭露的瞬间,影片快速闪回之前的关键场景,但这一次观众用全新的眼光看待它们。妻子在沙发上哭泣不是因为婚姻不幸福,而是因为她在哀悼丈夫的死亡。这种"重新理解"带来的情感冲击远超单纯的惊讶——它是悲伤的、温柔的、令人心碎的。
174
- - **主题升华:** 这个揭露让整部电影的主题从"帮助一个能看见鬼的孩子"变成了"一个不愿离去的灵魂学会放手"。Malcolm 帮助 Cole 的过程,同时也是他自己接受死亡、完成未竟之事的过程。揭露让故事获得了双重意义。
175
-
176
- **技巧提炼:** 最高明的揭露不是隐藏信息,而是利用观众的认知偏见。所有线索都在明处,但叙事框架让观众主动忽略了它们。当真相揭露时,观众震惊的不是"作者骗了我",而是"我怎么没看出来"。
177
-
178
- ---
179
-
180
- ## 写作提示
181
-
182
- ### 五个设计问题
183
-
184
- 在写真相揭露场景之前,问自己:
185
-
186
- 1. **这个真相改变了什么?** 如果揭露之后故事可以照常进行,那这个真相不够重要。列出至少三样因为这个揭露而永久改变的东西——关系、目标、角色的自我认知。
187
-
188
- 2. **读者回头看时能找到多少线索?** 数一数你在之前的情节中埋了多少条指向这个真相的线索。如果少于三条,铺垫不够;如果读者第一次阅读时就能从线索中猜到真相,铺垫太明显。
189
-
190
- 3. **谁最受这个真相的伤害?** 真相揭露的情感力量取决于它对角色的打击程度。找到那个受伤最深的角色,从他的视角来写揭露时刻。
191
-
192
- 4. **揭露的方式是否与故事的基调一致?** 一个温情家庭故事中的揭露不应该像惊悚片一样突然;一个悬疑小说中的揭露不应该通过冗长的对话来完成。揭露的节奏和方式应该服务于整体叙事风格。
193
-
194
- 5. **揭露之后的"第二天"是什么样的?** 不要只想揭露的瞬间,想想角色在知道真相之后的日常生活。他们如何面对那个一直在骗他们的人?他们如何重新理解过去的记忆?这些"余波"往往比揭露本身更有故事价值。
195
-
196
- ### 五项检查清单
197
-
198
- - [ ] **线索检查:** 真相的所有关键线索是否已经在之前的情节中公平地呈现给读者?
199
- - [ ] **时机检查:** 揭露是否发生在情感压力最大、冲击力最强的时刻?
200
- - [ ] **反应检查:** 角色对真相的反应是否符合其性格,而非千篇一律的"震惊"?
201
- - [ ] **连锁检查:** 揭露之后,故事中的关系、目标、行动是否发生了实质性的变化?
202
- - [ ] **回溯检查:** 读者在得知真相后重新审视之前的情节,是否会获得全新的理解和满足感?
203
-
204
- ---
205
-
206
- ## 进阶技巧
207
-
208
- ### 技巧1:双重揭露(表面真相 + 深层真相)
209
-
210
- 在同一个场景中设置两层揭露。第一层是角色和读者都在期待的真相(比如凶手的身份),第二层是没人预料到的、更深层的真相(比如凶手的动机揭示了另一个角色的秘密)。
211
-
212
- **具体做法:**
213
- - 第一层揭露满足读者的悬念需求,给他们"答案"的满足感
214
- - 在读者还在消化第一层时,第二层揭露紧随其后,打破刚刚建立的新理解
215
- - 第二层揭露应该比第一层更个人化、更情感化——第一层回答"是什么",第二层回答"为什么"
216
- - 两层之间的间隔要短,不给读者喘息的时间,制造情感上的"连续冲击"
217
-
218
- **效果:** 双重揭露让读者经历两次认知重组,第二次比第一次更深刻。读者以为自己已经理解了全貌,结果发现还有更深的一层——这种"以为到顶了其实还有更高"的体验极其震撼。
219
-
220
- ### 技巧2:环境映射(用环境变化反映揭露的冲击)
221
-
222
- 在揭露发生的瞬间,用环境的变化来外化角色内心的震动。不要只写角色的内心独白,让整个世界都"回应"这个真相。
223
-
224
- **具体做法:**
225
- - 揭露前的环境是稳定的、熟悉的(温暖的房间、平静的街道、正常的日常)
226
- - 揭露的瞬间,某个环境元素发生变化——灯突然灭了、窗外开始下雨、远处传来钟声、一杯水从桌上滑落
227
- - 揭露后,角色重新审视周围的环境,发现一切都"不一样了"——同样的房间感觉陌生了,熟悉的物件突然有了新的含义
228
- - 用感官细节(声音变得遥远、光线变得刺眼、空气变得稀薄)来传达角色的心理状态
229
-
230
- **效果:** 环境映射将内在的情感冲击外化为可感知的物理变化,让读者不仅"理解"角色的震惊,更"感受到"那种世界观崩塌的体验。这比直接写"他震惊了"有力一百倍。
231
-
232
- ### 技巧3:沉默的揭露(不说出口的真相)
233
-
234
- 最有力量的揭露有时候不需要任何人说出真相。角色通过一个眼神、一个物件、一个场景就理解了一切——而读者也同时理解了。
235
-
236
- **具体做法:**
237
- - 角色走进一个房间,看到了某样东西。不需要内心独白解释这意味着什么——场景本身就是答案
238
- - 两个角色对视,一方的表情让另一方瞬间明白了一切。没有对话,只有沉默
239
- - 一个物件被发现(一封旧信、一张照片、一件不该出现在这里的衣物),角色拿起它,长久地沉默
240
- - 关键是:不要解释。让读者自己拼凑出真相。读者主动参与的揭露比被动接受的揭露更有冲击力
241
-
242
- **效果:** 沉默的揭露尊重读者的智慧,让他们成为真相的"共同发现者"而非被动的"被告知者"。当读者自己意识到真相的那一刻,他们的情感投入远超任何角色用语言说出来的效果。留白的力量在于,它让读者的想象力填补空白——而读者自己想象出的冲击,永远比作者写出来的更强烈。