CREATION-LOG · horror-game-dev
CREATION-LOG · horror-game-dev
这份 skill 从哪来、收了什么、丢了什么、以及哪些结论的可信度不足。写在这里是为了让后来者能追问每条纪律的出处,而不是只能接受它。
来源
一手素材(亲历项目):一款 web 版第一人称恐怖 Demo 的完整开发过程。
- 三份 Agent 会话导出:立项与首版期(17k 行)、主体迭代期(126k 行)、RC 试玩与润色期(35k 行)。用户输入在导出里占极小比例但密度最高,全部逐条读过。
- 项目内文档:设定集(157 行)、设计圣经(239 行)、反馈清单(195 行)、交接文档(801 行,含完整坑清单与 26 轮决策史)、商店页文案、7 份分期方案。
- 资产规模(作为背景,不进正文):7 个文件约 7300 行,无构建步骤、无依赖;程序化生成全部贴图与音频;67 页自动化验收(48 页断言 + 19 页取景);目标平台为某 HTML5 商店,完整版意向某 PC 商店。
二手素材(公开资料):见各篇末尾的来源小节。分三类——工作室自述复盘(GDC 演讲、开发者署名文章)、学术论文(预测加工与恐惧)、行业工艺文档(模块化关卡、灰盒代理件、渲染风格成因)。
提炼触发条件:同一模式在多轮迭代中反复出现。计数的几条:道具呈现纪律 4 次以上、空间可信度 4 次以上、卡死 5 次以上、AI 味与说教 4 次以上、静默失效形态 7 种、探针假象 17 种、自动化验收坑 5 类。
提炼方法
四个阶段,每阶段的产物决定下一阶段的输入。
1. 抽一手素材,不抽二手结论。 派三个读取代理各精读一个会话导出的用户输入段与项目文档,产出统一格式的三元组「用户原话 → 抽象原则 → 判据」。格式统一是必要的:六千多行散料不统一格式会在合并阶段丢信息。
2. 反向提炼:从用户的否决里拿原则。 最有信息量的不是做了什么,而是用户推翻过什么、为什么推翻。每一次改判都暴露了一个「默认看起来合理但实际是设计决策」的分歧点。据此提炼出的通则包括:默认值与阈值是可玩性问题而不是实现问题;二极管阈值会让中间姿态成为永久最优解;规则覆盖率不到 100% 时覆盖率本身变成信息;隐藏层应该是隐藏理解而不是隐藏地图。
3. 联网对标,取可迁移结构而非内容。 每个亲历结论都去找公开来源做交叉验证,结果分三类:
- 被互证:呈现优于说明(Do > Show > Tell、索引性叙事)、可逃的首遇、敌人感知输入要少而可解释、地图连通性靠断言而不是靠读代码。
- 被补强:状态模糊化与「了解系统的瞬间幻想就死了」、模块化灰盒纪律、psx 风格的真实成因清单、威胁计量表。
- 被反转:亲历阶段曾把「恐怖关卡要线性」当作通则,公开一手材料证明非线性枢纽布局增加焦虑、更线性的续作恐怖感下降。已按公开材料改写,并在正文标注为反直觉结论。
4. 分层剥离。 通用层只留「为什么成立 + 判据」,具体技术名词、数值、版本行为全部推进引擎附录。判定标准是可 grep:正文出现引擎名即为泄漏。
结构决策
为什么是六篇 reference 而不是一篇。 按「agent 在什么处境下需要它」切分,不按主题切分。处境是互斥的:设计恐怖体验 / 写文本 / 设计机制 / 造空间 / 查缺陷 / 用特定技术栈。路由表因此能给出「触发条件 → 读这篇」的一对一映射,每条引用自带触发条件。
为什么通用层要放六条 GOTCHAS 而不是全部下沉。 高价值坑必须在 agent 遇到情况之前读到。拆到 reference 的话,面对「同一个问题被反馈第 4 次」这个情境的 agent 不会意识到该去读 reference。这类条目:反复反馈是优先级信号、反复缺陷修类不修点、找不到根因时如实说、散比大致命、断言要断言玩家可见结果、断言跟着设计走、不可破的例外和真 bug 长得一样、穷举验收放在最坏输入上。
为什么参考材料要保留推导而不只保留结论。 「旁白只说画面给不出的话」是一条没人会照做的规则;「删掉这句,玩家损失的是一个信息还是一次判断」是一条能被执行的规则。全部纪律都写成「原则 / 推导依据 / 判据」三段,判据要能被写成断言或人工过一遍的检查。
为什么每篇末尾都有反例速查表。 反例与 corner case 是一级资产,不是准则的附属。反例表按四列组织(反例 / 为什么错 / 正确做法 / 编号),可以直接当 grep 清单和检查表用。
为什么正文不写具体数值。 「满充 11.9 秒」属于项目文档,不属于通则。但「变化必须在 1.5–2 秒内出现在画面上」是通则——它不依赖具体项目,且可判定。区分标准是:换一个项目还成立吗?
抽象层次的取舍
参照一个公开做法:一份 2000 token 的运维手册压成约 300 token 的 skill,任务完成度不变,知识密度提升 6–7 倍。本 skill 的压法:
| 保留 | 丢弃 |
|---|---|
| 原则 + 为什么成立 + 判据 | 具体数值与实测结果 |
| 缺陷的类别与判别条件(「看到 Y 现象 → 是这个坑 → 判据是 Z」) | 缺陷的具体行号与代码片段 |
| 用户的否决模式(它暴露的分歧点) | 被否决方案的实现细节 |
| 纪律的推导链 | 推导链里的项目专有名词 |
| 反例与 corner case | 只在特定项目出现过一次的孤例 |
一个具体的取舍例子:项目里有个洞见是「UI 层可见性状态本身要有断言,否则会漏掉『界面盖住了演出』」。它被抽象成「断言要断言玩家可见结果,不是内部状态」,放进 GOTCHAS;项目里那个具体漏洞(某类演出用逻辑状态冻结世界但不该弹出暂停面板)留在 reference 的探针假象清单里。
未解决的分歧(v1.0 保留四条;v1.1 收敛两条、保留两条)
已收敛 1. 密度阈值:档位型 UI 还是连续可见。 公开材料主张「内部连续积分、外部只露三档」,同一批材料里也有「变化须在 1.5–2 秒内可见」。v1.0 两者并列搁置;v1.1 收敛成配套关系:档位型 UI 必须有连续的画面或声音通道承载细微变化,三档的作用是防剧透与防精算,不是替代感知通道。极端形态落在 accessibility-and-care.md——当连续通道被关掉(关掉闪烁、关掉声音)时,档位必须补上,否则信息量归零。
已收敛 4. 「救命道具会杀死氛围」的适用边界。 v1.1 补了可判别的区分:「消除负面状态」是即时的(恐惧被清零,玩家立刻回到安全状态),「降低风险概率」是持续的(恐惧还在,只是下一次被发现的概率变了)。前者杀氛围,后者只是重新分配紧张度。 混淆这两者会导致把该留的东西砍掉。判据:逐件标注它改变的是状态量还是概率,两者不许写进同一列。
保留 1. 教学关的形态。 公开材料里某游戏的作者明确把「不单独做教程关」当原则;亲历项目做了教学关且证明它有效(亮段教外力、暗段教身体)。两种做法都有正证据。本 skill 只给判据不给形态:每个动作教学的环境条件必须与该动作的实际用途一致(在明亮安全处教一个只在黑暗中才用的动作,玩家会学成「按了没反应」),以及教学完成条件必须明确(否则玩家在教学区无限刷)。独立关 / 内嵌序列 / 分段亮暗留给项目选。
保留 2. 引擎迁移。 项目在卡死无解时认真考虑过迁移引擎,最终结论是不迁——病根是「散不是大」。这个决策在通用层被抽象成「散比大致命」,但没有推广成「不要在项目中期换引擎」。工程上换引擎的中后期代价远高于代码量,公开资料也提到迁移会引入一致性验证成本,但缺少可引用的成文方法。未收敛。
新增保留 3(来自 v1.1 的无障碍调研)。 平台与行业在「无障碍选项与成就/收集口径是否要一致」上没有可引的成文政策,本skill 只能给判据(关掉某系统后与之挂钩的计数口径必须同时更新)而无法给依据。未收敛。
材料缺口(明确不编造)
以下五个方向检索后确认没有高质量可引用材料,正文相应位置已标注:
- 规则怪谈 / 网络规则文的可玩化专门方法论。 该节整体标为自建框架,只把可迁移的部分(规则一致性、误导要有意设计、谜题边界、用规则反向筛选关卡)挂了通用来源。
- 人眼暗适应曲线在游戏中的建模方法。 只有黑暗资源焦虑的宏观设计讨论,没有曲线建模的可引文。正文因此只写「底层用连续速率函数、硬阈值只留给真突变」,不写任何具体生理曲线形状。
- juicebox / rimworld 级别的程序化叙事设计材料。 只有学术侧收录,无一手 dev talk。
- HTML5 恐怖 Demo 的体量统计。 只有个体开发者的自述数值(单次时长上限之类),没有分布数据。正文明确写了「早期玩家版本体量没有统计分布可参考」。
- 程序化噪声纹理用于制造恐怖感的专门论述。 psx 风格的技术清单可靠,但「程序化纹理→恐怖」这个命题没有一手来源,因此不写进 skill。
另有两条材料在正文出现但来源强度偏弱,已在对应小节标注:非线性布局与焦虑关系的结论来自工作室自述(附了机制解释);威胁计量表的三个上升条件来自开发者访谈转述。
一处刻意保留的分层例外
有三处引擎名出现在通用层的非正文位置:
- SKILL.md 的 description 里写了某 HTML5 商店与某 PC 商店的名字——因为它是发现层,匹配对象是用户说的话,用户会说平台名。
- SKILL.md 的路由表里写了 Web + three.js 的触发条件——因为它是分发层,职责就是把项目匹配到正确的附录。
references/fear-design.md的来源小节里有两条 devlog 的 URL 自带该域名。
三者都只是名词出现,不带任何引擎行为结论。通用层的正文(六章 + 十条 GOTCHAS + 术语表)经 grep 确认不含引擎名、不含版本行为、不含具体数值;附录是唯一允许出现版本行为的层。
第四处例外(v1.1 新增):provenance.md 允许出现项目专有名词。 它的职责就是记录出处,所以在正文里出现事故形态与项目名词是功能而非泄漏。但事故形态一列限一句话——索引不允许把事故细节复制成第二条通则,那会让索引膨胀成第二份正文。
版本
- 1.0(2026-10-08):首版。六篇 reference + 评测集,来自一次完整独立恐怖 Demo 的 26 轮迭代与三轮真人试玩。
- v1.1(2026-10-08):按解耦原则重构与补全。
- 补:新增
accessibility-and-care.md(无障碍与玩家健康,含光敏、字幕、音频线索的视觉替代、难度与容错档、合规提示层级;8 个方向标注为未找到高质量材料)。新增threat-ai.md(威胁体感知与行为,从机制篇拆出——触发理由是 agent 的处境不同:调机制的不需要读 110 行敌人感知模型)。 - 补:试玩反馈收口规程(11 类反馈 → 真实问题类型 → 第一动作 → 教训,加试玩提问清单、反馈进场形式、收尾模板、台账字段)。分期实施与可回退提交纪律。调研前置纪律。动作教学的判据。
- 拆:
mechanics-and-rules.md552 → 254 行。拆出后有四处结论会悬空(惩罚的位移压力、惊觉窗口的行为链、门的最后目击点、导演的静默窗口),已就地补成自足的推导 + 判据,不留指引。 - 新增溯源:
provenance.md,260 条逐条索引,五档标注(亲历 / 公开来源 / 自建框架 / 单例·降权)。约三分之一是单例,已在篇首写明降权含义。覆盖审计结论:自建框架 9 条全部集中在规则怪谈一节且正文已显式标注;零未标注的孤儿条目。 - 收敛分歧 2 条(见上),保留 2 条 + 新增 1 条。
- 诚实性修正:删掉「反复验证过至少七次」这种无法确证的计数,改为定性表述 + 指向溯源索引。
- 抽出姊妹 skill
experience-to-spec:提炼动作本身(四种提炼手法、抽象层次判定、分层剥离、结构决策、置信度纪律、先建评测)跨项目通用,不该寄生在恐怖游戏 skill 里。它同时说明了这个 skill 的抽象层是怎么判定的。
- 补:新增
- 下一版要做的:跑一轮真实评测对照(20 条触发率 + 10 个输出 case),按差值裁剪而不是按行数裁剪;补规则怪谈一节的公开来源;收敛剩下三条分歧。