Axıs
技能目录

horror-game-dev

horror-game-dev

给 coding agent 的恐怖游戏开发底色。它的来源是一次完整的独立恐怖 Demo 迭代(立项 → 26 轮迭代 → 真人试玩 → 发行候选),每条纪律都能指认到那一次具体事故。

适用范围:第一、二、三、四、五章是恐怖游戏专有的。第六、七、九章(验收、取证、卡死韧性、交接)与游戏类型无关,任何项目都适用;其余章节仅当项目目标是制造恐惧或未知时适用。

优先级:可信 > 可玩 > 可证 > 可交 > 可读。顺序反了就会出现「机制做得很精巧但玩家觉得被骗」。


一、四条底线

每条都必须在成品里能被指认;指认不到就是没执行。

1. 机制被推出,不是被发明

先调研真实生理 / 物理 / 心理,再翻译成游戏模型。每个机制必须能在「机制 ↔ 角色身世」映射表里找到一行来处,写不出这行就不做。好处是新增内容时它天然能回答「它为什么存在」,不需要现编理由。

2. 规则可玩化,且双向

游戏内写出来的每条规则(守则、告示、员工手册、档案)都必须对应一个玩家能触发、能观察、能归因的机制。反向同样成立:一个玩家无法自行发现的机制,不该存在于规则框架内——那只是数值陷阱。

覆盖率一旦不到 100%,覆盖率本身就成了信息:玩家会开始怀疑「这条是不是在骗我」「是不是还有没写的规则」,整份材料的可信度一起崩。

3. 呈现优于说明

能用画面或声音说的,不要用字。解释一旦出现,玩家的判断权被收走,而判断才是恐怖体验的载体。玩家自己推出的结论比作者告知的结论可怕得多。

4. 一条反馈 = 一个类

收到一条反馈时,读成类不读成条目。真实任务往往不是「改这一处」,而是「凡是声称属于这一类的都要检查」。给每一类起一条可写的判据落进项目文档(不是一次性修复),再落成可自动化的断言或审计页——否则下一轮还会重犯。收尾必须显式交代「同类排查已完成」并报覆盖范围,还要主动声明工具的盲区。

判据:每次修完一个类,本轮的回答里有一句「同类排查已完成,覆盖 N 处」,以及一句「本次用的探针查不到 Y」。

规程(反馈分类表、试玩提问清单、账本字段、收尾模板)见 references/verification-and-forensics.md 第 1 章——正在做试玩反馈收口时读它。


二、恐怖设计的七条硬通则

只记结论,论证与反例在 references/fear-design.md。别用「好玩吗」验收恐怖内容——那个问题会把所有工作导向堆惊吓。

  1. 先确认交付的是哪种商品。 shock 一秒内飙升即消失且玩家会脱敏;dread 可持续数分钟且主要由玩家自己生产。目标是 dread。验收口径换成「这段是否兑现了氛围 / 主题 / 脆弱感」,三者至少各有一个可指认的承载物。
  2. 剥夺赋能是引擎。 敌人打不死也打不赢,玩家的诚实选项只有躲、逃、熬。玩家一旦感到自己有能力,游戏就变成穿恐怖皮的射击游戏。工具同时决定玩家把自己想象成谁——给枪等于告诉玩家你是射击的人。
  3. 恐惧的甜区在「可解决的误差」上。 大脑的基本任务是最小化预测误差:太少则无聊,太多则不适。留一个玩家能靠观察自己解决、但尚未解决的缺口。间歇性刺激比确定性刺激有效(假线索、假惊吓、次优巡逻路线),但前提是游戏内没有反证——一旦被证伪,假线索就变成撒谎。
  4. 惊吓是标点不是散文。 它的价值主要在「它的威胁存在」;正确用法只有两种——兑现已建立的 dread,或给已经过度适应的玩家做重置。每个惊吓都应当同时是一条永久性世界规则(经典做法:让某次袭击告知一条可复用的新事实,此后玩家自己产生紧张)。反直觉经验:把惊吓散布开、砍掉大部分、改让玩家探索,反而更吓人。
  5. 首遇三纪律:可逃、先听觉后视觉、位置永远可读。 先给一次低威胁、看得见的遭遇(无武器也能通过),再给致命版本——教学要在玩家还没建立「恐慌 = 死」的映射之前完成。信息投放顺序永远是环境变化 → 声音 → 文字。把威胁体的位置做成机制(它的光会扫过走廊),不要做成文案。首触点处要有一个「只有两个动词」的可判定选择。
  6. 留白是节奏机制,不是修饰。 恐怖堆满等于没有恐怖:需要回落通道、硬上限、强制静默窗口。「什么事都没发生」是恐怖游戏独占的合法内容,它建立「随时可能有事」的契约。压力要被测量和调度,不是随机撒——超阈值后强制让威胁退场,是让 panic 循环可持续的工程手段。
  7. 不要把「线性」当恐怖通则。 有工作室自己承认:非线性枢纽地图增加焦虑,而更线性的续作恐怖感下降。张力靠尺度(走廊更窄、天花更低、视线更少)而不是拓扑。

判据:每段恐怖内容能在记录里指出氛围 / 主题 / 脆弱感三项中的至少一项承载物;玩家的动词清单里不出现「击败」「造成伤害」「压制」。


三、玩家信任的账本

玩家说的不是功能,是可信度。「出戏」「太玩具」「把玩家当傻子」「悬空的东西太出戏了」的共同底层都是宣称与呈现不符——物件上出现了不该有的东西、锁着却报出钥匙在哪、文件里写的楼层和你脚下的楼层矛盾、镜子另一侧透明。玩家判的不是丑,是「这东西在骗我」。一次被骗,对整个世界的信任永久扣一格。

另一条:细节的失败比粗糙更致命。粗糙是可接受的完成度,半成品是冒犯——它说明作者知道该怎么做却没做。所以宁可藏起来,也不要半露。

违约形态与判据:

违约形态 判据
物件上印着系统说明 逐件问「这个东西上本来就有这个吗」
提示描述了世界不存在的东西 断言「文本提到的物件确实存在」
数字口径在不同界面不一致 一个视觉区域只承载一种性质;同一事实只留一个数据源
玩家按了交互但画面零变化 flag 翻转 + 画面上至少一处可察觉变化
界面元素被演出顶走 可交互控件用绝对定位钉死,多次采样位置完全相同
世界内文档与实际布局矛盾 建一张「文档 ↔ 地图」对账
反射面 / 镜面在背面能看穿 断言两面都不透明、可被射线命中

「按 F 没反应」是三个不同 bug 的合称,分开查:几何不可达(有壳体挡在前面)/可见性为零(交互通了但画面一处变化没有)/入口生命周期只挂在一瞬间(只在某个一次性时刻触发,选了别的选项就永久错过)。


四、文本纪律八条

恐怖游戏的文本最容易变成噪音。每条带推导与判据,展开与反例在 references/text-and-props.md。

纪律 推导 判据
旁白只在画面给不出信息时说话 旁白与画面同屏,重复表达互相抵消,且会把一次演出降级成字幕 删除检验:删掉这句,玩家损失的是「一个信息」还是「一次判断」?损失判断的删
零括号 括号是「这是解释」的元标记;玩家读得懂时不需要 全库 lint:可见文本源里括号出现数为 0
一句一句 第二句通常是第一句的推论,而推论是替玩家判断 每句只许一个句号;清掉「X。她听见了。」式补刀
可见文字不出现人名 姓名把抽象身份钉死成具体人,且天然产生一致性问题 只用我 / 妹妹 / 她 + 床位号、职务、日期;被抹掉的名字用划痕、水渍画出来
不数数 滚动数字把节奏做成界面元任务,玩家会盯着数字看而不是听环境 计数器只留状态短语 + 音效;可见文字不出现连续数字
提示即按键,且不许说谎 说谎的提示永久破坏信任:玩家按提示躲了但那声音根本没引来任何东西,一次之后所有提示都不可信 每条提示能指出触发它的世界条件;守卫为假时不出现
锁只报锁 内容量不高时玩家自己找得起;替玩家指路会把探索降级成照清单办事 源码 lint:锁相关文案不出现方位词或藏匿描述
物体上只许有它物理上真的有的东西 统一模板(居中抬头 + 分隔线 + 机构章)会让所有纸读起来像同一套界面的换皮;更根本的问题是「那不是一张纸,那是一个文本框」 手写件无抬头无分隔线无章;机构章有一份白名单,新增机构纸必须同步;描述性红字计数为 0

边界情况要记住:机构文件上的名字属于文件,不属于叙述——纸上的人名与叙述里的人名是两个世界的字,机构文件该保留就保留。

另一条元规则:项目里应有一份「全部可见文字的唯一出处」;任何字与它冲突就改字不改设定;文档冲突的权威顺序写死,并顺手把它改对。

判据:一次清扫把这类文字从 122 句砍到 66 句之后游戏更可怕——这是判据成立的正向证据,不是目标值。


五、机制的四个判据

展开、公式、规则可玩化框架在 references/mechanics-and-rules.md;敌人感知模型是独立的一篇,在 references/threat-ai.md。

  1. 连续轴上的刻度,不是开关。 按键决定你想去哪儿,身体决定你实际在哪儿。当「意图」与「身体」分离(生理修正项叠加在目标值上),玩家永远感到的不是模式切换,而是连续动作。判据:存在一个连续量 + 一个可夹逼的身体修正项;「想睁」和「睁得开」是两件事。
  2. 独占收益 + 独占代价,且两者挂同一个变量。 只有收益 = 刷分漏洞;只有代价 = 劝退墙。收益与代价必须来自同一双眼睛——状态值高打开一条收益通道(看得更清)和一条代价通道(余光里出现不该出现的东西)。优先找零新素材的代价实现。
  3. 默认值与阈值是可玩性问题,不是实现问题。 玩家实测能全程不按某个键 → 这个键的收益只有减损型 → 该改的是价值轴(二极管阈值换成连续速率曲线、减损换成有下限威胁),不是实现细节。连续量底层要连续,UI 只露 1–3 档,硬阈值只留给「直视」这类真突变。两半必须配套:档位型 UI 必须有连续的画面或声音通道承载细微变化,否则「只露三档」和「变化要 1.5 秒内可见」互相抵消——玩家感觉不到变化。三档的作用是防剧透与防精算,不是替代感知通道。
  4. 每个优化都要主动想它会被怎么刷。 开发者自己堵过一次的例子:「中间姿态的回充只能是缓慢下降,不能是缓慢上升,因为缓慢上升的话玩家可以永远用那个姿态走最优解。」把这个自查变成通则。

配套:惩罚要从「等待」改成「风险」(任何强制盲 / 强制静止超过一秒都要伴随一个位移压力);碰撞不等于即死(给 1–1.5 秒惊觉窗口,把接触转成一次信息事件);关门的意义是争取时间不是脱战;演出事件默认非致命,致命后果只留给规则违规。

扩内容的正确姿势不是加新规则,是让同一条规则的第二次使用产生新恐惧。 每件新内容回答「它让哪条已有规则变得可玩」,答不上来的不进关卡。


六、验收与韧性(通用层,任何游戏类型都适用)

这是本 skill 复用价值最高的一章。展开在 references/verification-and-forensics.md,具体技术栈结论在引擎附录。

1. 静默失效是头等缺陷

游戏 bug 最多的形态不是抛异常,而是无报错地全段失灵。五种形态:读而从未写/哨兵未初始化/默认回落覆盖断裂/接线认错对象/依赖实现碰巧正确。

正面证据原则:任何「功能存在」的断言,必须用一次真实触发支撑。「没报错」= 不合格。

2. 测量先于调参

凡是「某个地方很黑 / 某个地方不响 / 某个东西看着不对」的反馈,先把该现象写成一个可测量的量,再改。写不出这个量,说明还没理解问题。

亲历案例:某照明「照不亮」被调参三轮都无效,根因是衰减函数在设定距离处直接归零(大空间 10m 外必然死黑)。直到把「照不亮」写成一间房八个方向的照度表才现形。

3. 先怀疑探针,再怀疑游戏——但只怀疑一次

这条在一次真实项目里被反复验证:符号约定与直觉相反、摆完姿势没刷新矩阵、上轮剧情污染本轮、页面被重载、渲染循环被节流……但反过来也成立:探针标定通过之后必须立刻回头查游戏(「顺手抓到拾取射线穿墙的真 bug」)。完整清单与事故形态见 references/verification-and-forensics.md 第 5 章。

关键探针假象清单(完整 17 条见 reference):假干净(验收环境若是无用户手势启动模式,音频层实际是空操作——该层所有 bug 隐身;亲历三个真机致命雷因此藏了 12 轮)/假回归(验收假设撞上设计行为)/假全绿(只看逻辑状态,漏掉界面盖住演出)。

4. 卡死的统一形状

状态把输入或画面接了过去,而释放只写在顺利那条路上。

交付目标不是「找到那一行」,而是让这一类缺陷不再等于死路。四道网:锁预算(从不触发才是通过条件)/停摆看门狗(状态 ↔ 界面一致性,界面可见性本身要有断言)/自救键(无条件、不丢进度)/逐帧子系统熔断(持续异常只能让游戏降级,不能让它冻结)。加一根保险丝:画面全黑超过阈值就交还所有接管项——黑屏是最劝退的死法。

循环外必须有安全网:四道网全在主循环内部,主循环挂死时一起陪葬——修的位置注定够不着这一类。需要在独立线程上做心跳监测。延时回调链必须可取消(带代 Token)。

诊断页要自己说话:玩家不会开控制台,但他们会截图。把「这一夜画面停过:锁未交还 N 次 · 停摆自愈 M 次 · 熔断了哪些子系统 · 最坏一帧发生在哪个房间」印在暂停页,让下一次报障自带答案。

5. 数值工程纪律

钳制防不住 NaN(max(0, NaN) 仍是 NaN)——有限性要单独设闸。「数值插值追目标」的字段初值必须是数(未赋值 + 目标是数 = 全链路 NaN = 永久黑屏)。跨数据形状传值时把字段名念一遍(数组当对象读 = 激活即 NaN,这是藏了 12 轮的真机卡死元凶)。同一个状态只留一个初始化出口。

6. 时间纪律与派生物

单任务墙钟上限写进脚本,超时即设计缺陷;日常增量跑、全套留到发行前;后台任务要看着跑完或连壳一起杀干净(孤儿进程会继续把验收整套拉起来)。派生物不能替代源头——打包产物必须与当前代码同源,把这条做成流程步骤或断言。


七、阶段推进表

阶段 交付 闸门
立项 一句话题材 + 机制一句话 + 视觉底稿 每条机制在映射表里找到来处
调研 关键生理 / 物理 / 心理事实 → 参数表 每条参数有现实出处
切片 可玩的最小闭环 + 验收入口 真实触发一次、同机位截图一对
扩填 规则全机制化、空间密度达标 规则覆盖 100%;每间房两分钟内翻不完
验收 全量回归绿 + A/B 图 + 派生物 提交门全绿
试玩 真人从零玩一遍的反馈闭环 手感问题回到切片
发行 打包 + 商店页 + 合规 派生物与源码同源

Demo 的定义是概念验证,不是内容切片。 目标是确认方向是否有趣。Demo 要证明核心机制可被玩家发现,而不是被讲解——即使角色台词明说「这是谜题」,玩家仍然不会把它当谜题,他们像水一样流向阻力最小的路径。所以 Demo 迭代的主线是「玩家反馈里出现了什么误解」,不是「哪个数值不对」。

内容量不足会让核心机制无处发挥:一间房如果玩家两分钟就能翻完,机制就没有被执行的机会。缺时长时优先加长回环的层数,而不是再盖房间——房间是线性消耗品,回环是同一批内容的二次使用。


八、GOTCHAS

高价值的坑留在这里,因为 agent 是在遇到情况之前读正文的;拆到 reference 它不会意识到该去读。

  • 反复反馈是优先级信号,不是在描述症状。 同一件事被反馈第 4 次,说明前几轮修在了错误的层次上(多半是调参而不是测量)。文档里写明「第 N 次反馈」。
  • 反复出现的缺陷要修「类」不修「点」。 用户会明说「它们应该都有一个根因」「别的地方也有,你也需查找一下」。
  • 找不到根因时,如实说「我能证伪所有猜测但没复现你那一帧」,比假装修好有价值得多。 更好的交付是把死路改造成「可自救 + 会自己报告」。
  • 「散」比「大」更致命。 代码量到几万行不是问题,状态散落在几百个写入点才是。
  • 断言要断言玩家可见结果,不是内部状态。 只读逻辑状态的端到端断言会漏掉「界面盖住了演出」。
  • 断言跟着设计走。 设计改了,旧断言就是过期文档,必须同一次提交里改。留着旧断言等于制造下一次误判。
  • 拍脑袋式调参会掩盖根因。 「某处 X」类反馈先变成可测量量。
  • 不可破的例外和真 bug 长得一模一样。 记录哪些「看似出错的地方」是设计好的破例。
  • 穷举类验收要放在最坏输入上(含非有限值、含全部音名),并常驻至少一个真正跑该子系统的页面。
  • 早期玩家版本体量没有统计分布可参考。 只有个体开发者的自述数值。别把它当行业基准。

九、references 路由表

每条引用自带触发条件。按需读,一次只读命中的那几篇。

触发条件 读这篇
在设计或评审恐怖体验:氛围、张力、惊吓投放、留白节奏、信息通道、首次遭遇、教学顺序、Demo 范围 references/fear-design.md
在写或删任何玩家可见文字:旁白、字幕、提示、纸条、日志、界面文案、成就描述 references/text-and-props.md
在设计机制、数值曲线、规则可玩化、门禁、高潮触发、线索系统 references/mechanics-and-rules.md
在设计或调试威胁体:它的感知模型、视锥、噪音分级、警觉累积、行为章程、巡逻与禁区、躲藏解法是否已被封堵、追击与出生点公平性 references/threat-ai.md
在摆放或建造空间:家具、门、镜面、贴图重复、朝向、灰盒、道具布置、反返程 references/level-and-space.md
在收一轮真人试玩反馈:把反馈翻译成缺陷类别、决定改哪一类、收尾怎么交代覆盖范围、反馈台账怎么记 references/verification-and-forensics.md 第 1 章
在查「没报错但不对」「某处很黑/不响/看不对」「断言全绿但游戏不好玩」「玩家报没反应/数字对不上」「卡死」「全黑」「怎么写自动化验收」「怎么交接」 references/verification-and-forensics.md 第 2 章起
在设计设置项、无障碍、闪烁与光敏、字幕、音频线索的视觉替代、难度与容错档、健康与合规提示,且项目用 Web + three.js(或同类前端 3D) references/accessibility-and-care.md
项目是 Web + three.js(或同类前端 3D),且涉及拾取、贴图、后期、着色器、headless 截图、打包上架 references/appendix-threejs-web.md
需要追问任意一条纪律的出处、想知道哪些纪律在这个领域被反复验证、想知道哪些是单例(证据强度弱) references/provenance.md

术语表

  • dread / shock:可持续数分钟的、由玩家生产的恐惧 / 一秒内飙升即消失的惊吓。交付的是前者。
  • 剥夺赋能:让玩家感到自己有能力、有武装、在控制中。恐怖游戏要持续制造它。
  • 宣称与呈现不符:玩家判「出戏」的底层原因。物件上出现了不该有的东西、描述与现实矛盾、数值口径打架。
  • 静默失效:功能从未生效但不报错。没报错 = 不合格。
  • 正面证据:一次真实可观察的触发记录,替代「没报错」的判据。
  • 一条反馈一个类:把反馈读成类不读成条目,并落成可复检的判据与断言。
  • 惊觉窗口:接触不立即结束,先产生信息(它注意到你了),给 1–1.5 秒让脱身动作有意义。
  • 压力导演 / 威胁计量表:把「什么时候吓人」交给一个合成紧张度的调度器,超阈值强制退场。
  • 半落地:改动只存在于工作树或计划文本,未提交或未全量生效。
  • 给默认不给菜单:写清推荐路径与例外条件,不要列一串让 agent 自己选。

附:来源与可信度

  • 通则的骨架来自一次完整的独立恐怖 Demo 迭代(26 轮 + 三轮真人试玩 + 一次线上发行候选)。
  • 每条纪律的出处、事故形态、以及「它被验证过几次」都可在 references/provenance.md 反查。那里标了三档强度:亲历(可指认到具体事故)/公开来源(有一手引文)/自建框架(显式声明)。另有约三分之一的条目标为单例——在原项目里只出现过一次,作为通则的证据强度弱,优先参考邻近条目而不是硬套。
  • 恐惧设计、关卡工艺、威胁体感知、谜题、无障碍与健康等章节有公开一手来源(工作室复盘、GDC 演讲、开发者署名文章、行业指南、学术论文),出处见各篇末尾。
  • 规则怪谈(网络规则文)的可玩化没有高质量公开方法论,该节是自建框架并已在正文显式标注。
  • 反直觉结论(例如非线性布局可能更恐怖)优先采信工作室自述,采信之前先读它给出的机制解释。
  • 本 skill 本身也是提炼产物,提炼动作与取舍记录在姊妹 skill experience-to-spec 里,那里同时说明了本 skill 的抽象层是怎么判定的。