Jelajahi Sumber

feat(writer): add missing methodology from web novel craft guide

Expanded existing methodology modules with techniques from the
comprehensive writing guide (new.txt):

- Character psychology: added 人设防崩三问 (3-question character
  consistency check) and 盐溶于汤 (show-don't-tell for values)
- Immersion: added 具体化/可视化/熟悉感 with concrete examples,
  and 欲望驱动 (desire-driven writing — basic vs active desire)
- Reader psychology: expanded 情绪节拍 with progressive escalation
  technique (layered bad-things-happen pattern)
- Emotional pacing: added 强情绪升级法 (flow-chart-killer) with
  3 methods: add causality, escalate emotions progressively,
  all daily scenes must serve the main plot

These were identified as gaps when comparing InkOS methodology
against the reference web novel writing guide.

All 520 tests pass.
Ma 7 bulan lalu
induk
melakukan
1161c4eec7
1 mengubah file dengan 28 tambahan dan 4 penghapusan
  1. 28 4
      packages/core/src/agents/writer-prompts.ts

+ 28 - 4
packages/core/src/agents/writer-prompts.ts

@@ -262,7 +262,17 @@ function buildCharacterPsychologyMethod(): string {
 5. **行为选择**:基于以上四点,角色会做出什么选择?
 5. **行为选择**:基于以上四点,角色会做出什么选择?
 6. **情绪外化**:这个选择伴随什么情绪?用什么身体语言、表情、语气表达?
 6. **情绪外化**:这个选择伴随什么情绪?用什么身体语言、表情、语气表达?
 
 
-禁止跳过步骤直接写行为。如果推导不出合理行为,说明前置铺垫不足,先补铺垫。`;
+禁止跳过步骤直接写行为。如果推导不出合理行为,说明前置铺垫不足,先补铺垫。
+
+### 人设防崩三问(每次写角色行为前)
+1. "他为什么要这么做?"——必须有利益或情感驱动
+2. "这符合他之前的人设吗?"——行为由"过往经历+当前利益+性格底色"共同驱动
+3. "如果把这段给一个只看过前面章节的读者,他会觉得突兀吗?"——人设一致性检验
+
+### "盐溶于汤"原则
+主角的野心和价值观不能通过口号喊出来,必须内化于行为。
+- 反例:主角说"我要成为最强的人!" → 空洞口号
+- 正例:主角在别人放弃时默默多练了两个小时 → 用行动传达野心`;
 }
 }
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
@@ -299,7 +309,7 @@ function buildReaderPsychologyMethod(): string {
 
 
 - **期待管理**:在读者期待释放时,适当延迟以增强快感;在读者即将失去耐心时,立即给反馈
 - **期待管理**:在读者期待释放时,适当延迟以增强快感;在读者即将失去耐心时,立即给反馈
 - **信息落差**:让读者比角色多知道一点(制造紧张),或比角色少知道一点(制造好奇)
 - **信息落差**:让读者比角色多知道一点(制造紧张),或比角色少知道一点(制造好奇)
-- **情绪节拍**:压制→释放→更大的压制→更大的释放。释放时要超过读者心理预期
+- **情绪节拍**:压制→释放→更大的压制→更大的释放。释放时要超过读者心理预期。递进式升级——不是一次到位,而是层层加码(被骂→手机掉下水道→被噎住→有人敲门),每次比上一次更过分
 - **锚定效应**:先给读者一个参照(对手有多强/困难有多大),再展示主角的表现
 - **锚定效应**:先给读者一个参照(对手有多强/困难有多大),再展示主角的表现
 - **沉没成本**:读者已经投入的阅读时间是留存的关键,每章都要给出"继续读下去的理由"
 - **沉没成本**:读者已经投入的阅读时间是留存的关键,每章都要给出"继续读下去的理由"
 - **代入感维护**:主角的困境必须让读者能共情,主角的选择必须让读者觉得"我也会这么做"`;
 - **代入感维护**:主角的困境必须让读者能共情,主角的选择必须让读者觉得"我也会这么做"`;
@@ -318,7 +328,13 @@ function buildEmotionalPacingMethod(): string {
 2. **递进升温**:每个事件推进关系一个层级,禁止跨越式发展(初见即死忠、一面之缘即深情)
 2. **递进升温**:每个事件推进关系一个层级,禁止跨越式发展(初见即死忠、一面之缘即深情)
 3. **情绪用场景传达**:环境烘托(暴雨中独坐)+ 微动作(攥拳指尖发白)替代直白抒情
 3. **情绪用场景传达**:环境烘托(暴雨中独坐)+ 微动作(攥拳指尖发白)替代直白抒情
 4. **情感与题材匹配**:末世侧重"共患难的信任"、悬疑侧重"试探与默契"、玄幻侧重"利益捆绑到真正认可"
 4. **情感与题材匹配**:末世侧重"共患难的信任"、悬疑侧重"试探与默契"、玄幻侧重"利益捆绑到真正认可"
-5. **禁止标签化互动**:不可突然称兄道弟、莫名深情告白,每次称呼变化都需要事件支撑`;
+5. **禁止标签化互动**:不可突然称兄道弟、莫名深情告白,每次称呼变化都需要事件支撑
+
+### 强情绪升级法(避免流水账的核武器)
+流水账的修法不是删掉日常,而是给日常加"料":
+1. **加入前因后果**:下班回家→加上"催债电话刚打来"的前因→日常立刻有了紧迫感
+2. **情绪递进**:不是一个坏事,而是坏事接着坏事——被骂→赶不上公交→手机掉了→直播课结束了→包子把自己噎住了。每层比上一层更过分
+3. **日常必须为主线服务**:万物皆为"饵"。日常段落要么埋伏笔,要么推关系,要么建立反差。纯填充的日常是流水账的温床`;
 }
 }
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
@@ -332,7 +348,15 @@ function buildImmersionTechniques(): string {
 - **画面代入法**:开场先给画面(动作、环境、声音),再给信息,让读者"看到"而非"被告知"
 - **画面代入法**:开场先给画面(动作、环境、声音),再给信息,让读者"看到"而非"被告知"
 - **共鸣锚点**:主角的困境必须有普遍性(被欺压、不公待遇、被低估),让读者觉得"这也是我"
 - **共鸣锚点**:主角的困境必须有普遍性(被欺压、不公待遇、被低估),让读者觉得"这也是我"
 - **欲望钩子**:每章至少让读者产生一个"接下来会怎样"的好奇心
 - **欲望钩子**:每章至少让读者产生一个"接下来会怎样"的好奇心
-- **信息落差应用**:让读者比角色多知道一点(紧张感)或少知道一点(好奇心),动态切换`;
+- **信息落差应用**:让读者比角色多知道一点(紧张感)或少知道一点(好奇心),动态切换
+- **具体化/可视化**:描写时具体到读者脑海能浮现的东西——不写"一个大城市",写"三环堵了四十分钟的出租车后座"
+- **熟悉感**:接地气的场景自带代入感——医院走廊的消毒水味、深夜便利店的暖光、雨天公交站的积水
+
+### 欲望驱动(网文核心)
+网文本质是满足读者的欲望。两种欲望必须交替使用:
+- **基础欲望**(被动):不劳而获、高人一等、权势地位、扬眉吐气——读者天然渴望的东西
+- **主动欲望**(期待感):作者刻意制造的"情绪缺口"——压制→读者期待释放→释放时超过预期
+- 关键:释放点必须超过读者的心理预期,只满足70%的期待等于失败`;
 }
 }
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------