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,248 +0,0 @@
1
- # Moral Dilemma (道德困境)
2
-
3
- ## 核心定义
4
-
5
- 道德困境 = 角色面临没有完美答案的两难选择,任何选择都有代价。
6
-
7
- 道德困境是小说中最能考验角色灵魂的情感节拍。它不是简单的"对与错"的选择——那只是考验勇气。真正的道德困境是"对与对"或"错与错"之间的选择:两个选项都有合理性,两个选项都有不可接受的代价。角色无论选哪一个,都必须牺牲某种自己珍视的东西。
8
-
9
- 道德困境的本质是价值观的碰撞。当"忠诚"与"正义"冲突,当"个人幸福"与"集体利益"对立,当"保护所爱之人"与"坚守原则"不可兼得——角色在这一刻做出的选择,比任何对话和动作都更深刻地定义了他是谁。
10
-
11
- **关键区分:**
12
- - **道德困境 ≠ 难题:** 难题有正确答案,只是不容易找到;道德困境没有正确答案
13
- - **道德困境 ≠ 诱惑:** 诱惑是明知错误却想去做;道德困境是两边都可能是对的
14
- - **道德困境 ≠ 风险决策:** 风险决策是成功率的计算;道德困境是价值观的取舍
15
-
16
- ---
17
-
18
- ## 核心元素
19
-
20
- ### 1. 两个选项都有合理性
21
-
22
- 道德困境的力量来自于两个选项都"说得通"。如果一个选项明显正确,那就不是困境,而是勇气测试。读者应该能理解为什么角色会考虑任何一个选项,甚至读者自己也无法轻易判断哪个更好。
23
-
24
- **具体做法:**
25
- - 为每个选项都提供充分的论据和情感支撑
26
- - 让不同角色站在不同立场上,各自的理由都令人信服
27
- - 避免用叙事语气暗示哪个选项是"正确的"——让读者自己判断
28
- - 最好的困境是:读者读完后会和朋友争论"他应该怎么选"
29
-
30
- ### 2. 选择的时间压力
31
-
32
- 没有时间压力的困境会变成哲学讨论。时间压力迫使角色在信息不完整、情绪不稳定的状态下做出决定,这才是戏剧性的来源。
33
-
34
- **具体做法:**
35
- - 设定一个明确的截止时间或不可逆的时间窗口
36
- - 让拖延本身也有代价(不选择等于默认了某个结果)
37
- - 时间压力可以是外部的(炸弹倒计时)也可以是内部的(机会稍纵即逝)
38
- - 压力越大,角色暴露的真实自我越多
39
-
40
- ### 3. 价值观的冲突
41
-
42
- 道德困境的核心是角色内心两种价值观的碰撞。这种冲突必须与角色的身份认同紧密相关——不是抽象的哲学问题,而是"我是谁"的问题。
43
-
44
- **具体做法:**
45
- - 明确角色珍视的两种价值观,然后让它们不可调和
46
- - 将困境与角色的过去联系起来:也许他曾经因为选择了A而后悔,现在又面临类似的选择
47
- - 让困境触及角色的身份核心:"如果我选了这个,我还是我吗?"
48
- - 价值观冲突的层次:个人 vs 个人、个人 vs 集体、责任 vs 自由、忠诚 vs 真相
49
-
50
- ### 4. 选择后的后果
51
-
52
- 选择不是终点,后果才是。道德困境的真正重量在选择之后才完全显现。角色必须活在自己的选择中,承受那些预见到的和没有预见到的后果。
53
-
54
- **具体做法:**
55
- - 不要在角色做出选择后立刻跳到下一个情节——给后果足够的篇幅
56
- - 展示选择的涟漪效应:对角色自身、对被影响的人、对关系的改变
57
- - 让角色在事后质疑自己的选择("如果当时选了另一个呢?")
58
- - 后果可以是延迟的——选择的真正代价可能在很久之后才显现
59
-
60
- ---
61
-
62
- ## 常见套路(应避免)
63
-
64
- - ❌ **假困境(明显有正确答案):** 表面上是两难选择,但其中一个选项明显更好、更道德、更合理。读者一眼就能看出"正确答案",所谓的困境只是角色在犹豫要不要做正确的事。这不是道德困境,这是勇气测试。如果读者不需要思考就知道角色应该怎么选,你的困境设计就失败了。
65
-
66
- - ❌ **第三选项(轻易找到两全其美的方法):** 角色面临两难选择,然后灵机一动想出了一个完美方案,既不用牺牲A也不用牺牲B。这种处理方式让之前所有的紧张铺垫都变成了浪费。真正的道德困境不应该有逃生门。如果你的角色找到了第三选项,那说明你的困境设计不够严密——要么堵死所有退路,要么一开始就不要设置这个困境。
67
-
68
- - ❌ **无后果的选择:** 角色做出了艰难的选择,但之后一切都好起来了,没有任何真正的代价。被牺牲的一方奇迹般地获救,被伤害的关系轻易修复,被放弃的价值观没有造成任何损失。这种处理方式是对读者情感投入的背叛——你让他们为角色揪心,然后告诉他们"其实没什么大不了的"。
69
-
70
- - ❌ **困境与角色无关:** 困境是外部强加的,与角色的性格、历史、价值观没有内在联系。角色只是恰好被放在了一个两难的位置上,换成任何人都一样。好的道德困境应该是"只有这个角色才会觉得这是困境"——因为它精准地击中了这个角色特有的价值观冲突。一个不在乎家庭的人不会在"事业vs家庭"中感到困境;一个没有信仰的人不会在"信仰vs理性"中挣扎。
71
-
72
- ---
73
-
74
- ## 新颖变体
75
-
76
- ### 变体1:无知的困境(不知道全部信息时做选择)
77
-
78
- 角色必须在信息不完整的情况下做出道德选择。他不知道全部真相,但等待真相的代价太高,必须现在就决定。
79
-
80
- **核心张力:** 角色事后可能发现,如果当时知道某个关键信息,他会做出完全不同的选择。这种"如果我早知道"的痛苦比选择本身更折磨人。
81
-
82
- **写法要点:**
83
- - 让读者知道角色不知道的信息(制造戏剧性反讽)
84
- - 角色基于已有信息做出了"最合理"的选择,但这个选择在全部信息下是错误的
85
- - 事后揭示真相时,不要让角色轻易原谅自己——"我当时不知道"不足以消除内疚
86
- - 这种变体特别适合探讨"好意是否能为坏结果开脱"的主题
87
-
88
- **适用场景:** 战争迷雾中的指挥官决策、医疗场景中的紧急判断、信任与怀疑的关系困境
89
-
90
- ### 变体2:递进困境(选择后面临更难的选择)
91
-
92
- 第一个困境的选择直接导致了第二个更艰难的困境,形成层层递进的道德压力。角色发现自己越陷越深,每一步都在缩小未来的选择空间。
93
-
94
- **核心张力:** 角色意识到第一个选择已经把自己推上了一条不归路。回头的代价比继续前进更大,但前方的选择一个比一个残酷。
95
-
96
- **写法要点:**
97
- - 第一个困境相对"温和",让角色(和读者)觉得"这还能接受"
98
- - 每一层递进都让代价升级:从物质到关系,从关系到原则,从原则到身份
99
- - 在某个节点让角色意识到"我是怎么走到这一步的"——这个自我认知的时刻极具冲击力
100
- - 最终的选择应该让角色面对一个他在故事开头绝对不会考虑的选项
101
-
102
- **适用场景:** 权力腐蚀的故事、卧底叙事、渐进式妥协的职场/政治故事
103
-
104
- ### 变体3:集体困境(团队意见分裂)
105
-
106
- 困境不是一个人的内心挣扎,而是一个团队的分裂。每个成员基于自己的价值观和经历支持不同的选项,团队必须在分歧中做出统一决定。
107
-
108
- **核心张力:** 无论最终选择了什么,团队中都会有人觉得被背叛。困境不仅考验道德判断,还考验团队关系的韧性。
109
-
110
- **写法要点:**
111
- - 每个持不同意见的角色都必须有充分的、基于其个人经历的理由
112
- - 不要把反对意见简化为"自私"或"愚蠢"——每个立场都应该让读者理解
113
- - 展示争论过程中关系的裂痕:谁和谁结盟、谁被孤立、谁在沉默
114
- - 决定做出后,关注"少数派"的反应——他们是服从、抗议、还是暗中行动?
115
-
116
- **适用场景:** 末日生存团队、军事小队、家庭重大决策、公司董事会
117
-
118
- ### 变体4:时间困境(不选择也是一种选择)
119
-
120
- 角色试图逃避选择,但时间本身在替他做决定。每一秒的犹豫都在改变局势,不作为的后果可能比任何主动选择都更糟糕。
121
-
122
- **核心张力:** 角色以为"不选择"可以保持清白,但逐渐意识到沉默和不作为本身就是一种道德选择,而且可能是最糟糕的那种。
123
-
124
- **写法要点:**
125
- - 清晰地展示"不选择"的后果如何随时间恶化
126
- - 让角色的犹豫有合理的心理基础——不是优柔寡断,而是真正的道德瘫痪
127
- - 设计一个"临界点"——过了这个点,某些选项就永远消失了
128
- - 当角色终于做出选择时,他必须同时承受选择的代价和犹豫的代价
129
-
130
- **适用场景:** 见义勇为的旁观者困境、举报vs沉默、政治立场的表态
131
-
132
- ---
133
-
134
- ## 情感真实性
135
-
136
- ### 如何让道德困境令读者感同身受
137
-
138
- **1. 个人化原则**
139
-
140
- 抽象的道德困境是哲学课的素材,不是小说的素材。"是否应该牺牲一个人来拯救五个人"作为思想实验很有趣,但放进小说里毫无力量——除非那"一个人"是角色的女儿,那"五个人"是他的战友。道德困境必须与角色的个人关系、个人历史、个人恐惧紧密绑定。读者不会为抽象的道德命题流泪,但会为一个父亲在女儿和职责之间的撕裂而心碎。
141
-
142
- **2. 身体化原则**
143
-
144
- 道德挣扎不只发生在头脑中,它会反映在身体上。角色在面对困境时会失眠、食欲消失、手指不自觉地颤抖、反复做同一个噩梦。不要只写"他很纠结",要写他凌晨三点坐在厨房里盯着墙壁,咖啡凉了三次都没喝。身体的反应比内心独白更有说服力。
145
-
146
- **3. 无正确答案原则**
147
-
148
- 作者自己不应该知道"正确答案"。如果你在写作时心里已经有了"角色应该选A"的判断,这种倾向会不自觉地渗透到叙事中——A选项的论据会更充分,B选项的支持者会被写得不那么讨喜。最好的道德困境是作者自己也无法决定的困境。写完之后问问不同的读者,如果他们的意见分裂,说明你的困境设计成功了。
149
-
150
- **4. 后悔的真实性**
151
-
152
- 无论角色选了什么,都应该有后悔的时刻。不是那种戏剧化的"我错了"的崩溃,而是深夜里偶尔闪过的念头:"如果当时……"这种挥之不去的、低频的后悔,比任何激烈的情感爆发都更真实。它不需要占据大量篇幅——一个段落、一个闪回、一个沉默的瞬间就够了。
153
-
154
- ---
155
-
156
- ## 示例分析
157
-
158
- ### 示例1:《苏菲的选择》(Sophie's Choice, 1979)
159
-
160
- **场景:** 纳粹军官在集中营入口处强迫苏菲在两个孩子之间选择一个活下来。如果她拒绝选择,两个都会死。
161
-
162
- **为什么有效:**
163
-
164
- - **极致的不可能性:** 这是道德困境的极端形态——没有任何伦理框架能为这个选择提供指导。功利主义说"选一个总比两个都死好",但没有任何母亲能用理性来做这个决定。困境的力量恰恰在于它超越了所有道德理论。
165
- - **时间压力的残酷:** 苏菲没有时间思考、没有时间崩溃、没有时间寻找第三选项。军官在等待,队伍在移动,她必须在几秒钟内说出一个名字。这种时间压力剥夺了一切心理防御。
166
- - **选择后的终身创伤:** 苏菲活了下来,但她的余生都被这个选择定义。她无法原谅自己,无法正常生活,最终走向毁灭。小说真正的主题不是那个选择本身,而是一个人如何在做出不可能的选择之后继续活着——或者无法继续活着。
167
- - **读者的道德参与:** 读者在阅读时会不自觉地问自己:"如果是我呢?"这个问题没有答案,但它迫使读者直面人类处境的残酷性。
168
-
169
- **技巧提炼:** 最强大的道德困境不需要复杂的设定。一个简单到残忍的选择,加上不可逆的后果,就足以创造文学史上最令人难忘的场景。关键不在于困境的复杂性,而在于它对角色灵魂的穿透力。
170
-
171
- ### 示例2:《黑暗骑士》(The Dark Knight, 2008) —— 双船困境
172
-
173
- **场景:** 小丑将炸弹分别安置在两艘渡轮上——一艘载满普通市民,一艘载满囚犯。每艘船上都有引爆另一艘船的遥控器。小丑宣布:午夜之前,如果一艘船引爆另一艘,幸存的那艘可以活;如果都不引爆,两艘都炸。
174
-
175
- **为什么有效:**
176
-
177
- - **集体困境的极致呈现(变体3):** 这不是一个人的选择,而是一群人的选择。船上的每个人都有发言权,意见的分裂撕裂了临时形成的社群。有人主张"他们是罪犯,我们是无辜的",有人坚持"我们没有权利决定别人的生死"。每个立场都有其逻辑,每个声音都代表了一种真实的人性反应。
178
- - **时间困境的叠加(变体4):** 倒计时在走,不选择意味着双方都死。沉默不是中立,而是一种选择——选择了共同毁灭。这让"不作为"的道德重量变得和"按下按钮"一样沉重。
179
- - **预期的颠覆:** 小丑赌的是人性的自私,但两艘船最终都没有引爆对方。囚犯船上一个壮汉拿过遥控器扔出窗外,市民船上的人在最后一刻放下了手。这个结果不是廉价的乐观主义——它建立在漫长的、真实的挣扎之上,读者亲眼看到了人性几乎屈服的时刻,所以最终的选择才有力量。
180
- - **对主题的服务:** 这个困境不是孤立的情节设计,而是整部电影主题的集中体现——小丑试图证明"文明只是一层薄纱",而这个场景是对这个论点的最终检验。困境的结果回答了电影的核心问题。
181
-
182
- **技巧提炼:** 将道德困境从个人层面提升到集体层面,可以展示人性的多个面向。当一群人面对同一个困境时,他们的争论本身就是一场关于人性的辩论。同时,让困境的结果服务于故事的核心主题,而不仅仅是制造紧张感。
183
-
184
- ---
185
-
186
- ## 写作提示
187
-
188
- ### 五个设计问题
189
-
190
- 在设计道德困境之前,问自己:
191
-
192
- 1. **这个困境为什么是"这个角色"的困境?** 困境必须精准地击中角色的价值观核心。一个重视家庭的角色面对"家庭vs正义"的选择才有张力;一个信仰坚定的角色面对"信仰vs现实"的冲突才有意义。如果把角色换成别人,困境的痛苦程度会降低,那说明你的设计是对的。
193
-
194
- 2. **两个选项的代价分别是什么?** 在动笔之前,清晰地列出每个选项的具体代价。不要用模糊的"会有不好的后果"——要具体到"他会失去女儿的信任"或"三个无辜的人会死"。代价越具体,困境越有重量。
195
-
196
- 3. **读者会站在哪一边?** 理想状态是读者意见分裂。如果你预测大多数读者会支持同一个选项,那你的困境可能不够平衡。试着加强"弱势选项"的论据,或者削弱"强势选项"的吸引力,直到两边势均力敌。
197
-
198
- 4. **选择之后会发生什么?** 困境的设计不能止步于"角色做出了选择"。你需要提前规划后果的展开方式:立即的后果是什么?长期的后果是什么?角色如何与自己的选择共处?后果的篇幅应该至少等于困境本身的篇幅。
199
-
200
- 5. **这个困境是否推动了角色弧线?** 道德困境应该是角色成长(或堕落)的关键转折点。选择之后的角色应该与选择之前有本质区别——也许更坚定了,也许更破碎了,也许对世界的理解发生了根本改变。如果困境只是一个情节事件而没有改变角色,它就没有发挥应有的叙事功能。
201
-
202
- ### 五项检查清单
203
-
204
- - [ ] **平衡检查:** 两个选项是否都有充分的合理性?是否存在"明显正确"的答案?
205
- - [ ] **个人化检查:** 困境是否与角色的核心价值观直接相关?换一个角色是否会降低困境的痛苦程度?
206
- - [ ] **后果检查:** 选择之后是否有真实的、不可逆的代价?是否避免了"奇迹般的解决"?
207
- - [ ] **时间检查:** 是否有足够的紧迫感迫使角色在不完美的条件下做出决定?
208
- - [ ] **主题检查:** 困境是否服务于故事的核心主题?它是否帮助回答了故事试图探讨的问题?
209
-
210
- ---
211
-
212
- ## 进阶技巧
213
-
214
- ### 技巧1:道德光谱而非二元对立(Moral Spectrum)
215
-
216
- 不要把困境简化为A或B的二选一。在两个极端之间设计一个光谱,让角色可以选择不同程度的妥协。这更接近现实中道德决策的复杂性。
217
-
218
- **具体做法:**
219
- - 在两个极端选项之间设计两到三个"中间选项",每个都有不同的代价组合
220
- - 让角色先尝试中间路线,发现中间路线的代价可能比极端选择更大(因为两边都不满意)
221
- - 最终角色被迫走向某个极端,但这个过程展示了他试图寻找平衡的努力
222
- - 这种处理方式避免了"非黑即白"的简单化,让道德探讨更有深度
223
-
224
- **效果:** 读者会意识到现实中的道德决策很少是简单的二选一,这种认知会让故事的道德探讨更具持久的思考价值。角色在光谱上的移动过程本身就是一段引人入胜的叙事。
225
-
226
- ### 技巧2:镜像困境(Mirror Dilemma)
227
-
228
- 让两个不同的角色在故事的不同阶段面对结构相似但细节不同的困境,通过他们不同的选择来揭示各自的性格深度。
229
-
230
- **具体做法:**
231
- - 设计两个结构平行的困境场景,核心矛盾相同(如"忠诚vs真相"),但具体情境不同
232
- - 让两个角色做出不同的选择,并各自承受不同的后果
233
- - 不要评判哪个选择更好——让读者自己比较和思考
234
- - 可以在故事后期让两个角色讨论各自的选择,形成一场关于价值观的对话
235
-
236
- **效果:** 镜像困境让读者从多个角度审视同一个道德问题,避免了单一视角的局限性。同时,两个角色的不同选择形成了隐性的对话,丰富了故事的主题层次。这种技巧特别适合双主角或群像叙事。
237
-
238
- ### 技巧3:回溯性困境(Retroactive Dilemma)
239
-
240
- 角色在做出选择时并不知道这是一个道德困境——他以为自己只是做了一个普通的决定。但随着后果逐渐显现,他意识到那个"普通决定"其实是一个深刻的道德选择,而他已经无法回头。
241
-
242
- **具体做法:**
243
- - 在故事前期安排一个看似无关紧要的决定(帮了一个人、说了一句话、签了一份文件)
244
- - 在故事中后期揭示这个决定的真正后果——它影响了某个人的命运、改变了某个局势
245
- - 角色面对的不是"我该怎么选",而是"我已经选了,现在怎么办"
246
- - 这种事后的道德觉醒往往比事前的两难选择更加痛苦,因为角色连"我尽力了"的安慰都没有
247
-
248
- **效果:** 回溯性困境打破了传统道德困境"先纠结后选择"的线性结构,创造了一种更接近现实的道德体验——我们生活中很多最重要的道德选择,都是事后才意识到的。这种技巧能让读者反思自己日常生活中那些"不经意的选择",产生深层的共鸣。
@@ -1,240 +0,0 @@
1
- # Temptation (诱惑)
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
- - **短期收益 vs 长期代价:** 眼前的好处清晰可见,未来的损失模糊不清
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
- ### 变体1: 善意的诱惑(诱惑本身不是坏事但时机不对)
66
-
67
- **描述:** 诱惑不是邪恶的、自私的东西,而是一件好事——爱情、安全、幸福——只是出现在了错误的时刻。角色面对的不是"好 vs 坏"的选择,而是"好 vs 好"的选择,但他只能选一个。
68
-
69
- **核心张力:** 角色不是在抵抗邪恶,而是在放弃美好。这种痛苦比抵抗邪恶更深沉,因为没有人可以怪罪,没有敌人可以愤怒。
70
-
71
- **写法要点:**
72
- - 充分展示诱惑的美好——让读者也希望角色能拥有它
73
- - 让角色真正享受了一瞬间的美好,然后不得不放手
74
- - 放弃的理由不是"这是错的",而是"现在不行"
75
- - 留下遗憾感:角色和读者都会想"如果时机对了就好了"
76
-
77
- **适用场景:** 使命与爱情的冲突、责任与自由的选择、战时的短暂温情
78
-
79
- ### 变体2: 自我诱惑(诱惑来自内心而非外部)
80
-
81
- **描述:** 没有外部的诱惑者,没有魔鬼的交易。诱惑完全来自角色自己的内心——他的疲惫、恐惧、欲望、合理化能力。角色既是被诱惑者,也是诱惑者。
82
-
83
- **核心张力:** 你无法逃离自己。外部的诱惑可以远离,但内心的声音无处可躲。
84
-
85
- **写法要点:**
86
- - 用内心独白展示角色如何一步步说服自己
87
- - 每一个"理由"都是合理的、可以理解的
88
- - 角色可能意识到自己在自我欺骗,但依然无法停止
89
- - 挣扎的对象不是外部的选择,而是"我到底是什么样的人"
90
-
91
- **适用场景:** 成瘾叙事、道德滑坡、身份认同危机、长期压力下的崩溃
92
-
93
- ### 变体3: 递进诱惑(从小诱惑逐步升级)
94
-
95
- **描述:** 不是一次性的大诱惑,而是一系列逐步升级的小诱惑。每一次小小的妥协都让下一次妥协变得更容易,直到角色回头看时才发现自己已经走了多远。这就是经典的"温水煮青蛙"。
96
-
97
- **核心张力:** 没有一个单独的时刻是"堕落"的转折点。每一步都是"小事",但累积起来就是深渊。
98
-
99
- **写法要点:**
100
- - 第一次妥协必须是真正微不足道的——读者也会觉得"这没什么大不了"
101
- - 每一次升级都有"上一次也没事"的心理铺垫
102
- - 在某个节点让角色(或读者)突然意识到已经走了多远
103
- - 回头的代价随着每一步妥协而增加
104
-
105
- **适用场景:** 腐败叙事、道德沦丧、关系中的越界、职业伦理困境
106
-
107
- ### 变体4: 诱惑者的视角(从诱惑者角度写)
108
-
109
- **描述:** 不从被诱惑者的角度写,而是从诱惑者的角度。展示诱惑者如何观察目标、寻找弱点、精心设计诱饵。这种视角让读者同时体验操控的智力快感和道德不安。
110
-
111
- **核心张力:** 读者被放在了"共谋者"的位置——你看着诱惑被精心布置,知道目标即将落入陷阱,却无法阻止。
112
-
113
- **写法要点:**
114
- - 诱惑者必须是聪明的、有洞察力的——他对目标的分析往往比目标对自己的了解更深
115
- - 展示诱惑者自己的动机——他为什么要这么做?他是否也在某种程度上被诱惑?
116
- - 让诱惑者偶尔流露出犹豫或同情,增加复杂性
117
- - 当目标开始动摇时,诱惑者的反应不是得意,而是某种复杂的情感
118
-
119
- **适用场景:** 谍战故事、商业博弈、心理操控叙事、魔鬼交易
120
-
121
- ---
122
-
123
- ## 情感真实性
124
-
125
- ### 如何让诱惑场景令人信服
126
-
127
- **1. 诱惑必须匹配角色的核心欲望**
128
-
129
- 泛泛的诱惑(金钱、权力、美色)是懒惰的写法。真正有力的诱惑直击角色最深层的需求——被认可的渴望、对安全感的追求、对失去的东西的执念。问自己:这个角色最想要什么?最害怕什么?诱惑应该同时回应这两个问题。
130
-
131
- **2. 给角色真实的理由去屈服**
132
-
133
- 不要让屈服看起来像愚蠢或软弱。给角色至少三个合理的、读者能理解的理由去接受诱惑。如果读者觉得"换成我可能也会这么做",诱惑就写对了。
134
-
135
- **3. 挣扎要有节奏**
136
-
137
- 不是一条直线从犹豫到决定。真实的挣扎是反复的——角色可能先拒绝,然后动摇,然后再次坚定,然后在新的压力下再次动摇。这种来回拉锯比单向的"犹豫→决定"更真实。
138
-
139
- **4. 选择的时刻要安静**
140
-
141
- 最终的选择往往不发生在戏剧性的高潮中,而是在一个安静的、私密的瞬间。没有观众,没有配乐,只有角色独自面对自己。这种安静反而比任何外部压力都更有力量。
142
-
143
- **5. 不要用旁白评判**
144
-
145
- 让读者自己判断角色的选择是对是错。叙述者的道德评判会破坏诱惑场景的灰色地带,把复杂的道德困境简化为说教。
146
-
147
- ---
148
-
149
- ## 示例分析
150
-
151
- ### 示例1:《指环王》——魔戒的诱惑
152
-
153
- **场景:** 贯穿整个三部曲,魔戒对每一个接触它的人都施加诱惑。但最经典的诱惑场景是弗罗多在末日火山口的最终时刻——他站在火焰之上,只需要松开手指,任务就完成了。但他说:"魔戒是我的。"然后把它戴在了手指上。
154
-
155
- **元素分析:**
156
-
157
- - **诱惑的吸引力:** 魔戒的诱惑不是简单的"给你力量"。它针对每个人的核心欲望量身定制——对甘道夫,它许诺用善意统治世界的力量;对加拉德瑞尔,它许诺取代索伦成为美丽而可怕的女王;对波罗米尔,它许诺拯救刚铎的武器;对弗罗多,它许诺结束痛苦和疲惫。每一个诱惑都是真实的、可以理解的。
158
- - **代价的隐蔽性:** 魔戒从不告诉你代价。它只展示好处,让你自己合理化。波罗米尔真心相信自己可以用魔戒做好事;弗罗多在最后一刻真心相信魔戒属于自己。腐蚀是渐进的、不知不觉的。
159
- - **内心的挣扎:** 弗罗多的挣扎贯穿整个旅程。他不是在最后一刻突然屈服的——每一天,魔戒都在变重,他的意志都在被消磨。托尔金用物理上的重量来隐喻心理上的负担,让读者能"感受到"诱惑的力量。
160
- - **选择的后果:** 弗罗多最终屈服了,但咕噜的介入意外完成了任务。这个设计的天才之处在于:它承认了诱惑的力量超越了个人意志,同时让弗罗多之前对咕噜的怜悯成为了真正的"救赎"。即使任务完成了,弗罗多也永远被改变了——他再也无法在中土找到平静。
161
-
162
- **技巧提炼:** 最好的诱惑是渐进的、个性化的。不要让诱惑一次性出现,而是让它像潮水一样一波一波地侵蚀角色的防线。
163
-
164
- ### 示例2:《绝命毒师》——Walter White 的堕落
165
-
166
- **场景:** 整部剧集本质上就是一个漫长的诱惑叙事。Walter White 从一个温和的高中化学老师,一步步变成了冷酷的毒枭 Heisenberg。没有一个单独的"堕落时刻"——每一集都是一次新的诱惑和妥协。
167
-
168
- **元素分析:**
169
-
170
- - **诱惑的吸引力:** Walter 最初的动机是无可指摘的——他得了癌症,需要钱给家人留下保障。这个起点让观众完全站在他这边。随着故事发展,诱惑从"生存需要"逐渐转变为"被认可的渴望"和"控制的快感",但每一步转变都有合理的铺垫。
171
- - **递进诱惑(变体3的完美范例):** 第一次制毒是为了救命。第一次杀人是自卫。第一次撒谎是保护家人。每一次妥协都有"不得已"的理由,但每一次妥协都让下一次变得更容易。当 Walter 开始主动选择暴力和欺骗时,观众回头看才发现——从什么时候开始,他不再是被迫的?
172
- - **自我诱惑(变体2):** Walter 最大的诱惑者是他自己。他不断为自己的行为寻找合理化的理由——"我是为了家人"、"我别无选择"、"他们逼我的"。直到最后一季,他终于对 Skyler 说出真相:"我做这些是为了我自己。我喜欢这样。我擅长这个。"这句话是整部剧最震撼的时刻之一,因为它撕掉了所有自我欺骗的面具。
173
- - **选择的后果:** Walter 的每一次选择都有不可逆的后果——Hank 的死、Jesse 的创伤、家庭的破碎、自己的孤独终局。这些后果不是突然降临的惩罚,而是长期积累的必然结果。
174
-
175
- **技巧提炼:** 递进式诱惑比一次性诱惑更可怕,也更真实。让角色的每一步妥协都"说得通",让读者在不知不觉中成为共谋者——当他们意识到自己一直在为角色的堕落找借口时,冲击力是巨大的。
176
-
177
- ---
178
-
179
- ## 写作提示
180
-
181
- ### 设计诱惑场景时问自己
182
-
183
- 1. **这个诱惑为什么对这个角色有效?** 同样的诱惑对不同的人有不同的吸引力。一个已经拥有财富的人不会被金钱诱惑,但可能被"被需要"的感觉诱惑。诱惑必须精准地击中角色的软肋。
184
-
185
- 2. **如果角色屈服了,读者会理解吗?** 不是"认同",而是"理解"。读者应该能说出"我不赞成他的选择,但我明白他为什么这么做"。如果读者觉得角色的屈服是愚蠢的,诱惑就没写好。
186
-
187
- 3. **诱惑的时机为什么是现在?** 角色在故事的这个节点特别脆弱的原因是什么?也许他刚经历了失败、失去了支持、身心俱疲。诱惑在角色最脆弱的时刻出现,才最有杀伤力。
188
-
189
- 4. **抵抗的代价是什么?** 不要只想屈服的后果,也要想抵抗的代价。如果抵抗没有任何代价,那选择就太容易了。让抵抗也是痛苦的——放弃真实的好处、承受真实的损失。
190
-
191
- 5. **这个选择如何定义角色?** 诱惑场景的本质是身份的考验——"我是什么样的人?"角色的选择(无论屈服还是抵抗)应该揭示或重新定义他的核心身份。
192
-
193
- ### 检查清单
194
-
195
- - [ ] 诱惑的吸引力是真实的、具体的,读者自己也会心动
196
- - [ ] 角色有合理的、可理解的理由去屈服
197
- - [ ] 挣扎过程有来回拉锯,不是单向的犹豫
198
- - [ ] 选择(无论屈服还是抵抗)都有真实的、不可逆的后果
199
- - [ ] 诱惑精准匹配角色的核心欲望或恐惧
200
- - [ ] 场景没有通过旁白进行道德说教
201
-
202
- ---
203
-
204
- ## 进阶技巧
205
-
206
- ### 技巧1:镜像诱惑(让两个角色面对同一个诱惑)
207
-
208
- 让两个不同的角色面对相同或相似的诱惑,但做出不同的选择。这种对比不需要作者评判谁对谁错——两个选择各自的后果会替作者说话。
209
-
210
- **具体做法:**
211
- - 两个角色的背景和性格差异决定了他们对同一诱惑的不同反应
212
- - 先写一个角色的选择和后果,再写另一个角色面对同样的诱惑
213
- - 不要让一个选择明显"正确"、另一个明显"错误"——灰色地带才有力量
214
- - 两个角色可以互相见证对方的选择,这会影响他们对自己选择的感受
215
-
216
- **效果:** 镜像对比让读者同时看到两条路的风景,理解选择的复杂性。它也避免了"正确答案"的说教感——当两个你都关心的角色做出不同选择时,你无法简单地站队。
217
-
218
- ### 技巧2:诱惑的回声(选择之后的持续影响)
219
-
220
- 诱惑场景不应该在选择做出后就结束。无论角色选择了什么,那个"没有选择的路"会像幽灵一样持续存在。
221
-
222
- **具体做法:**
223
- - 在后续场景中安排触发物——一个相似的情境、一句无心的话、一个梦境——让角色重新想起那个诱惑
224
- - 如果角色抵抗了,让他偶尔怀疑"如果当时选了另一条路会怎样"
225
- - 如果角色屈服了,让他在某些时刻清醒地意识到自己失去了什么
226
- - 让诱惑的回声影响角色后续的决策——一次诱惑的经历会改变角色面对下一次诱惑的方式
227
-
228
- **效果:** 回声让诱惑场景的影响力远超场景本身,成为角色弧线的持续驱动力。它也让故事世界更真实——在现实中,重大选择的影响不会在做出决定的那一刻就消失。
229
-
230
- ### 技巧3:读者的诱惑(让读者也希望角色屈服)
231
-
232
- 最高级的诱惑写法是让读者自己也被诱惑。读者明知角色不应该屈服,但内心深处却希望他屈服——因为诱惑许诺的东西实在太美好了,或者因为抵抗的代价实在太残酷了。
233
-
234
- **具体做法:**
235
- - 花足够的篇幅展示诱惑的美好面——不要急于揭露代价
236
- - 让角色在屈服的边缘体验到一瞬间的幸福或解脱,让读者也感受到那种释然
237
- - 让抵抗的代价是具体的、即时的、痛苦的(而不是抽象的"正确")
238
- - 在角色做出选择后,让读者带着复杂的情感继续阅读——无论角色选了什么,读者都不会完全满意
239
-
240
- **效果:** 当读者发现自己在替角色的堕落找借口时,他们会经历一次微型的道德自省。这种体验比任何说教都更有力量——它让读者理解了诱惑的真正可怕之处:不是它看起来像邪恶,而是它看起来像合理。