feat(agents): 剧情品类设计 skill narrative-game-design + 品类 rubric 5 条(W-GENRE 品类件①④)

照 sim-business-game-design 体例(§0 六心理引擎/§1 可达范式表/§2 结构留存/§3 文本
数值红线/§4-7 美术 UI 音效钩子/§8 设计输出配方/§9 可达性红线/§10 自检+rubric),
回答剧情品类「设计什么才好玩」,与 littlejs-game-dev(代码怎么写)配对。对齐质量
canonical:纯叙事品类按 §7 申报机制以「章节推进+结局图鉴」为替代成长轴;§9 钉死
九门可达契约(选项单击即推进/targets 三者同源/menu-play-over 场景名/结局 latch)。

§10 品类扩展 rubric 5 条(N1 选择有重量/N2 场景有画面感 L2;N3 结局图鉴钩子/N4
属性塑造可见 L3;N5 结局可炫耀 L4),条目形状 = 编号/层标/一句可判定判据/一对
正反例,与 RICHNESS_CHECKLIST 三元组同形供接线注入;纯 LLM 非阻塞、不进九门不进
脚手架(红线)。金标锚点实测落定:正例 p11a-s1 = 7/11(L2 4/6·L3 1/3·L4 2/2)、
薄反例 _template-story 骨架 = 3/11(L2 1/6·L3 0/3·L4 2/2),区分度 4 分;n=3 批次
分组观测数据一并落档供质量轨锁 §7 观测线。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
lili 2026-07-02 22:38:30 -07:00
parent 3223117d49
commit ef517bf59e

View File

@ -0,0 +1,171 @@
# skill: narrative-game-design —— 剧情互动小游戏「玩法设计」作业手册(给生成 agent 的设计阶段)
> 定位:这是 **生成 agent 设计阶段(AgentScope)造"好玩的剧情互动玩法设计"的唯一作业手册**。它回答 **"设计什么才好玩"**(故事结构/分支/属性/结局/美术/音/UI 范式),与 [`littlejs-game-dev.md`](littlejs-game-dev.md)(回答"代码怎么写")配对:**设计阶段产故事概念 → 代码生成阶段照 littlejs-game-dev 产代码**。体例与 [`sim-business-game-design.md`](sim-business-game-design.md)(经营品类)同构。
>
> **铁律(创始人 2026-06-21)**:"好玩 = 上游设计层职责",不在 runtime/插件。插件只让设计**能被 juice 出手感**;**这份 skill 负责让故事本身好玩**。
>
> **可达性边界**:产出必须落得到 A-model 轻量运行时——**LittleJS 2D 手机竖屏(390×844)、单/少场景、便宜模型可生成的多文件代码、11 注入插件能力域**。故事再好,落不到这个运行时就是空想——见 §9 红线。
>
> **上位标准**:分层质量与观测线对齐 [`docs/architecture/架构/生成引擎/游戏质量与爆火能力.md`](../../docs/architecture/架构/生成引擎/游戏质量与爆火能力.md)(四层模型 / §4 rubric 计分制 / §7 便宜档档位)。剧情是**纯叙事品类**:按其 §7 申报机制,以「**章节推进 + 结局图鉴**」为品类替代成长轴(替代理由与判定见 §2、§10)。
>
> **证据基**:范式蒸馏自近年微信/抖音「互动叙事 / 文字冒险 / 恋爱养成剧情」品类的成熟模式(训练知识,非实时榜单);范式稳定可用,具体举例供参照。
---
## 0. 为什么这一品类爆(底层动机 —— 设计要击中这些)
剧情互动小游戏的"爽"来自 6 个心理引擎,**好玩 = 同时点燃尽量多个**;无趣 = 一个都没点燃:
1. **选择自主权**:"这是**我**选的路"——每个选项都可感知地改变走向,玩家为自己的故事负责。
2. **好奇心钩子**:"选另一个会怎样?"——分支的未知面比已知面更勾人;结局图鉴的 ??? 就是钩子实体。
3. **代入感**:第二人称短句 + 具体细节(风灯、脚印、火漆)让玩家 3 句话入戏。
4. **属性养成**:勇气/机智/好感随选择累积、肉眼可见地涨——"我在变强/她更喜欢我了"。
5. **收集欲**:多结局图鉴凑齐的强迫感(已解锁 2/5,还差 3 个)。
6. **低门槛零操作压力**:读一段、点一下,通勤碎片 3 分钟一局,无手速无失败焦虑。
> **反"无趣"总纲**:剧情类的无趣几乎总是因为——选项没有重量(选啥都一样)/ 文本又长又抽象 / 单结局一本道 / 属性是死数字(不影响剧情)/ 无画面感纯文字墙。§10 是落地清单。
---
## 1. 核心玩法范式(可达子集 —— design 优先从这里选)
| 范式 | 一句话 | 我们运行时怎么落(插件) |
|---|---|---|
| **分支选择**(品类地基) | 场景文本 + 2~3 选项,不同选择通向不同节点,**任选皆推进** | core 节点图 + hud-ui 选项按钮 + session-score 计推进 |
| **属性累积** | 选择给属性 +1(勇气/机智/好感…),over 屏回顾"这一局的我" | core applyEffects + hud-ui 属性 HUD |
| **属性检定** | 关键节点按属性开门:勇气 ≥3 才出现「正面迎上」选项(差一点=重玩钩子) | core 节点图 choices 加 require 条件 + 灰选项露出"差一点" |
| **多结局图鉴** | 结局 ≥3(win/lose 都有),over 屏露出「已解锁 x/N + ???」 | save 持久结局集合 + over 屏图鉴行 |
| **线索收集** | 某些选项拾取线索,持线索解锁隐藏分支/真结局 | core stats 当布尔线索位 + 检定同机制 |
| **章节推进** | 一局 = 一章(3~6 幕);「第 N 幕」进度可见 | stepCount 计幕 + hud-ui 顶栏 |
| **好感路线** | 恋爱/伙伴线:好感度决定结局归属(A线/B线/单人线) | 属性累积 + 结局判定按属性分流 |
**组合配方(经验)**:一款轻量剧情 = **分支选择(地基)+ 1 个属性轴系(2 轴起步)+ 多结局图鉴 + 检定或线索择一**。别堆超过 2 个附加机制(便宜模型 + 单屏扛不住,也稀释代入感)。
---
## 2. 故事结构 / 进度 / 留存设计
- **微型三幕**:引子(1 节点,给目标:取信/逃生/赴约)→ 发展(2~4 层分支,给两难)→ 结局(3~5 个)。**深度 3~5 步一局**(2~4 分钟),宁短勿拖。
- **首 3 分钟(决定生死)**:① 010 秒:menu 引子 ≤3 句即点开始(零阅读门槛靠短);② 1060 秒:**第一次分支 + 属性首涨**(立刻"我在塑造这个故事");③ 13 分钟:走完首局到一个结局,**图鉴露出 ??? 的未解锁位**——"还有别的结局"是剧情类的"下一个解锁"。
- **留存钩子(纯叙事品类的成长轴替代,上位标准 §7 申报)**:剧情没有数值滚雪球,替代轴 = **章节推进(幕数可见)+ 结局图鉴(x/N 收集)**;检定"差一点"(勇气还差 1 点才开这扇门)制造定向重玩;**申报判定**:图鉴分母 ≥3 且 ??? 可见、每局 ≤4 分钟可重开,替代轴才成立。
- **重玩设计铁律**:分支要**早分**(起点就分,别第 3 步才分)——首选项不同就进不同场景,重玩第一分钟就有新内容;**汇流要省着用**(全汇流=假分支)。
- **节奏**:两难选项(都想选)与安全选项(明确好坏)交替;lose 结局也要"有味道"(死得精彩=想再来),别写成惩罚。
---
## 3. 数值与文本节奏(剧情类的 balance)
- **属性轴 2 个起步**(勇气/机智、好感/理智、侠义/内力),每选择 +1;检定门槛设在**满值 -1**(如深度 4 的局,门槛 3)——"差一点"的张力,同 sim-business 卡点原则:是诱惑不是墙。
- **文本红线(design 必须给目标值,别让 code agent 拍脑袋)**:节点正文 **≤3 短句 / ≤60 字**(手机竖屏 6 行内);选项 label **≤10 字**;结局正文 ≤4 句。超长 = 玩家跳读 = 代入感清零。
- **分支预算**:节点总数 **7~12 个**(含结局)、结局 **3~5 个**、深度 **3~5 步**——便宜模型一稿写得完、玩家一局读得完。**无回环**(任意路径有限步必达结局),汇流 ≤2 处。
- **结局配比**:win : lose ≈ 2:1;至少 1 个"藏得住"的结局(需特定路径/检定),图鉴才有收集感。
- **看广告点位(可选,自愿不打断)**:解锁结局提示(指一条没走过的路)/ 直接解锁图鉴一格。剧情类**别做复活付费**(没有失败复活语义)。
---
## 4. 美术风格范式(可达 + mmx 可产 + 程序化兜底)
| 风格 | 调性 | 配色 | 适合 |
|---|---|---|---|
| **氛围剪影**(主流首选) | 悬疑/夜色 | 深底 + 单点暖光(烛光橙/月白) | 悬疑/探险/古宅 |
| **治愈水彩** | 温暖日常 | 奶油底 + 低饱和粉绿 | 恋爱/日常/童话 |
| **国风水墨** | 雅致留白 | 宣纸底 + 墨黑 + 朱砂点 | 武侠/古风/志怪 |
| 像素夜景 | 复古 | 有限色板 | 轻怀旧(谨慎) |
- **场景 = 底色氛围 + 1~2 个剪影元素**(宅邸/灯/月),换场景换剪影——程序化就能做出"到了新地方"。
- **一致性之根**:全程共用一组"风格词"(mmx 每图都带);剧情类再加一条:**各场景同一画师同一光源调性**,否则换场景像换了游戏(见 `_template-story/assets/gen-ledger.md`)。
- **程序化兜底**:无 mmx 时,深色底 + 剪影矩形 + 亮窗点 + 羊皮纸文本卡就成立(_template-story 纯程序化即过门);**别因美术阻塞可玩性**。
---
## 5. UI 范式(hud-ui 全可达)
剧情游戏 UI 套路(都用 hud-ui 落):
- **文本卡**:羊皮纸/卡片底 + 描边,正文逐字换行(中文无空格,按字宽断行);
- **选项按钮**:纵排 2~3 个、宽 ~80% 视口、高 ≥48(手指友好);**命中区=绘制区=取证 targets 三者同源**(经 core.layoutChoices 一处算,见 §9);
- **属性 HUD**:顶部一行"勇气 2 机智 1",涨的瞬间配粒子(particles-juice);
- **幕数进度**:右上角「第 N 幕」——章节推进可见(替代成长轴的可见性);
- **结局结算屏**:结局**称号**大字(「果敢信使」)+ 结局正文卡 + 属性回顾 + **图鉴行(已解锁亮称号、未解锁 ???)** + 再读一次;
- **呼吸提示**:选项区上方"▼ 你的选择"缓缓明灭——引导视线,也让静态文本屏有活帧。
---
## 6. 音乐 / 音效范式(audio-music 可达)
- **BGM**:低速氛围循环(悬疑 bpm ~70 / 治愈 bpm ~90);可按幕切情绪(audio-music `setIntensity`)。mmx:`mmx music generate --prompt "夜色悬疑,弦乐低音,克制" --instrumental --bpm 70`
- **音效(代入感命脉,务必有)**:选项确认「嗒」(click)· 属性上涨「叮」· 检定通过号角(win)· lose 结局低音(fail)· 结局达成欢呼(win)。**每次选择必有确认音**——剧情类的"即时反馈"一半靠它(audioMusic `playSfx` 语义名自动映射,无声卡静默降级不崩)。
- 红线:**宁可程序化音效,也别没有反馈音**(无声翻页 = 无趣的隐形元凶)。
---
## 7. 首屏 / 留存视觉钩子(通用,MVP 也用)
- 首屏 3 秒抓人:标题 + **引子 ≤3 句 + 一个悬念**(「屋里似乎还有别人」),立即可点开始——**别放长背景设定墙**;
- 结局图鉴 ??? 当门面(未知结局的诱惑);
- 属性回顾的"这一局的我"(勇气 3 机智 1 = 我的人格镜像);
- lose 结局也精彩(「误入陷阱」的戏剧性 > 惩罚感)。
---
## 8. 设计阶段输出配方(生成 agent 据 brief 产出这些 → 喂代码生成)
给定一句话 brief,设计阶段应产出一份**结构化故事设计**,**逐项落到运行时**:
1. **题材与引子**(标题 + ≤3 句开场,含目标与悬念);
2. **属性轴 2 个**(轴名要贴题材:武侠=侠义/内力,恋爱=好感/理智);
3. **故事节点图**(7~12 节点含 3~5 结局:每节点 = 正文 ≤60 字 + 2~3 选项label ≤10 字 + next + effects;标死:无死链、无回环、win/lose 都有);
4. **检定/线索(择一,可选)**:哪个节点检定哪个属性、门槛多少(满值-1)、差一点时露什么;
5. **结局表**(id / 称号 / outcome / 正文 ≤4 句;至少 1 个藏得住);
6. **美术风格词**(一组,全场景共用同调性)+ 场景剪影清单(标 mmx 或程序化);
7. **音效清单**(选择确认/属性涨/结局 win/lose)+ BGM 情绪;
8. **UI 布局**(文本卡/选项区/属性 HUD/图鉴行,§5);
9. **首 3 分钟脚本**(逐步:引子→首分支→首属性涨→首结局→图鉴 ??? 露出)。
> **MVP-first 铁律(关乎 code agent 能否收敛)**:设计**聚焦可玩核心** —— 分支选择 + 1 属性轴系 + 3 结局 + 图鉴 + 基础音效,节点 ≤10 个起步。**语音演出 / 立绘系统 / 章节解锁付费 / 存档树回溯 / 打字机逐字动画 等一律标「后续·MVP 不做」**,别一稿堆满 —— 设计太满 → code agent 实现负担过重 → read-thrash 不收敛。**先出能玩的一章,再谈长篇。**
> 这份设计 = 代码生成阶段的"图纸";生成 agent 照 littlejs-game-dev 把它实现为多文件代码(剧情品类从 `game-runtime/games/_template-story/` 骨架起步,故事数据落 core.js 参数空间)。**设计阶段把"好玩"想清楚,代码阶段只管正确实现。**
---
## 9. 可达性红线(落不到运行时的设计 = 废稿,必剔除/简化)
- ❌ 长文本墙 / 全屏小说页 → 节点 ≤60 字 + 文本卡(§3 红线)。
- ❌ 语音演出 / 视频过场 / 立绘表情系统 → 程序化剪影 + 少量 mmx 静态图。
- ❌ 存档树 / 回溯任意节点 UI → 一局一路走到结局,重玩靠「再读一次」+ 图鉴钩子。
- ❌ 自由输入对话(打字回复)→ 全部预设选项(2~3 个)。
- ❌ 计时逼选 / QTE 限时选项 → 剧情类零时间压力(它的爽点是"想清楚再选");要紧张感用文案不用倒计时。
- ❌ **选项做成「先选中再确认」两步**:零-LLM 自动验收 driver 只会单击 `occupied:true` 目标、跟不动两步 → 九门 H 验不到进展 = **好游戏被误判** → ✅ **选项单击即推进**;**深度靠分支/检定/图鉴,不靠交互步数**。
- ❌ 结局后自动跳回菜单/自动重开 → **结局必须 latch**(phase 驻留 over,取证 targets 清空),「再读一次」只在玩家点按钮时触发。
- ✅ **取证契约(九门可达,钉死)**:`_forensicsView().state()``targets` 在 play 态列**当前每个选项**(中心坐标 `occupied:true`)、menu/over 态空数组;`score` = 已做选择数,随推进单调 +1;**选项命中区=绘制区=取证 targets 必须同源一处算**(_template-story 的 `core.layoutChoices` 即此;三者一旦分叉,driver 点的坐标就不再是真命中区)。场景名钉死 `menu`/`play`/`over`
- ✅ 留下的:分支选择、属性累积/检定、线索、多结局图鉴、章节推进、好感路线 —— 全在 11 插件 + 单屏 + 便宜模型可生成范围内。
---
## 10. 反"无趣"落地清单(design 自检,逐条必过)+ 品类 rubric
**通用 8 条自检**(与 [`sim-business-game-design.md`](sim-business-game-design.md) §10 同一张表,所有品类通用):①即时反馈 ②可见成长 ③下一个解锁 ④30 秒爽点 ⑤数值滚雪球 ⑥情感锚 ⑦放置回归 ⑧音反馈。剧情类的对位:①=选择确认音+粒子;②=属性 HUD 上涨 + 幕数推进;③=图鉴 ??? 与检定"差一点";⑤⑦天然弱(纯叙事无滚雪球/放置,**按上位标准 §7 申报以「章节推进+结局图鉴」为替代轴**,不硬凑)。
**剧情品类扩展 rubric(5 条,喂 LLM 丰富度验证 agent · 非阻塞)**。规范来源 = 质量模型 SoT §4:每条 0/1 + 层标(L2 内容丰富 / L3 留存结构 / L4 传播钩子),与通用底座 11 条**分母分开、独立小计**;条目形状 =(编号 / 层标 / 一句可判定判据 / 一对正反例),与 `cheap-worker/cheap_verify.py` 的 RICHNESS_CHECKLIST 三元组同形,供品类扩展评分接线时直接注入;**纯 LLM 评分,绝不写成代码校验、不进九门、不进脚手架**(创始人红线):
| # | 层 | 判据(0/1) | 正例 | 反例 |
|---|---|---|---|---|
| N1 | L2 | **选择有重量**:同一节点的不同选项通向不同后续(场景/属性/路线至少一样可感知地变),非同义改写 | 「推门而入」进大厅涨勇气,「绕到后院」进后院涨机智 | 三个选项文案不同但 next 全指同一节点、effects 全同 |
| N2 | L2 | **场景有画面感**:节点文本有具体意象(物件/光影/声音)且逐场景的视觉氛围(底色/剪影/插画)随之变化,非纯色底白字文字墙 | 「风灯在廊下摇晃」+ 大厅/后院各有剪影布景 | 全程同一张背景,文本全是抽象叙述("你继续前进") |
| N3 | L3 | **结局图鉴钩子**:结局 ≥3,over 屏展示「已解锁 x/N」且未解锁位以 ??? 露出,勾起定向重玩 | 结局图鉴 1/3:「果敢信使」 ??? ??? | 单结局;或有多结局但 over 屏不露图鉴、玩家不知道还有别的 |
| N4 | L3 | **属性塑造可见**:属性随选择累积、HUD 实时可见,且至少一处影响剧情(检定开选项/结局分流),不是死数字 | 勇气 ≥3 才出现「正面迎上」;over 屏回顾属性 | 属性只在结算屏出现一次、全程不影响任何分支 |
| N5 | L4 | **结局可炫耀**:每个结局有独立称号 + 收束正文,结算屏可截图讲清"我玩出了什么结局",不是打完就黑屏 | 「智取真相」称号 + 结局卡 + 属性回顾 | 结局只弹"游戏结束",无称号无文案 |
**金标锚点(质量模型 SoT §4 规范三:每品类 ≥1 金标正例 + ≥1 薄反例;rubric 文本或评分 prompt 变更须金标复验,单款分组小计漂移超 ±1 即回退)**——2026-07-02 首批小批(n=3 全过九门、全 1 轮)实测落定:
- 金标正例 = `p11a-s1`(「深渊回声」深海科考题材;通用 11 条 richness 基线 = **7/11:L2 4/6 · L3 1/3 · L4 2/2**,run-summary 见 `game-runtime/games/amgen-p11a-s1/evidence/run-summary.json`);
- 薄反例 = `_template-story` 骨架原样(轻起点「古宅一夜」演示故事,基线 = **3/11:L2 1/6 · L3 0/3 · L4 2/2**——刻意保持"能过门但未丰富",丰富是生成 agent 的活;正反例差 4 分,锚点区分度足够);
- 批次观测(给质量轨锁 §7 观测线回填):n=3 的 L2 组 = 4/3/3(均 56%)、L3 组 = 1/2/1、L4 组 = 2/1/2;L3 偏弱与本品类天然轴差一致(⑤⑦天然薄),替代轴申报见 §2——「下一个解锁/放置回归」两条在剧情品类长期不成立时,按 SoT §4 规范六作为品类件迭代信号读。
---
## 相关
- 代码层实现 → [`littlejs-game-dev.md`](littlejs-game-dev.md)(11 插件 API / 结构 / 资产-mmx / 工厂契约)
- 品类骨架(few-shot 过门正例)→ `game-runtime/games/_template-story/`(从它起步换故事;README 有「你写什么 vs 调什么」边界)
- 便宜模型生成 worker / 九门 → [`cheap-model-game-generation.md`](cheap-model-game-generation.md)
- 经营品类对照(体例同构)→ [`sim-business-game-design.md`](sim-business-game-design.md)
- 上位质量标准 → [`docs/architecture/架构/生成引擎/游戏质量与爆火能力.md`](../../docs/architecture/架构/生成引擎/游戏质量与爆火能力.md)(§4 rubric 计分制 / §7 档位观测线)