溯源索引:每条纪律追问回哪一次事故
溯源索引:每条纪律追问回哪一次事故
本篇不教任何新东西,只做一件事:把 SKILL.md 与 8 篇 reference 里的每一条纪律,钉回它被写下来的那一次具体事故。
怎么用:拿到一条抽象(「压光要给硬上限」「断言跟着设计走」),在本篇里找到它的行,读「事故形态」一列——那是你应该预期在成品里看到的坏现象。如果一行事故都举不出来,这条抽象就还没被验证过,只是听起来合理。
四档标注:
- 亲历——可指认到具体事故或某次反馈原文(
HANDOVER.md坑清单 /FEEDBACK.md各轮结论 /BIBLE.md成文规则 / 三份会话导出的用户输入段)。 - 公开来源——有一手引文,出处见对应篇的来源小节;此处只写来源名称。
- 自建框架——无一手材料,推导自建。这类在正文已显式标注(主要是
mechanics-and-rules.md第 10 章规则怪谈可玩化)。 - 单例——不是第四档来源,是强度标记:只出现过一次的事故。作为通则的证据强度弱,使用时优先参考同篇邻近条目,不要硬套成通则。单例不删:删掉会让覆盖出现空洞,读者看不出这里本来就没有证据。
「反复次数」的记法:指该模式在三个会话导出与项目文档里被反馈或发生的次数。能确证的写精确数(如「崩过 5 次」),不能确证的写 ≥N。宁可粗略也不要假精确。
索引本身也可能滞后于正文。 若两者冲突——编号错位、条目名对不上、正文多了一条没进索引——以正文为准,并顺手回来修这张表。
- SKILL.md 六章原则 + GOTCHAS + 术语表 → §1
- 恐惧设计 → §2
- 文本与道具 → §3
- 机制与规则 → §4
- 威胁体 AI → §5
- 空间与关卡 → §6
- 验收与取证 → §7
- 无障碍与健康 → §8
- three.js 引擎附录 → §9
- 高强度清单与覆盖审计 → §10
1 SKILL.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| 一.1 机制被推出不是被发明 | 每条机制在「机制 ↔ 角色身世」表里有一行来处,写不出就不做 | 看到策划案里出现一条「加个 XX 机制」,问不出它对应谁的哪段经历 | 亲历 | 1(单例·降权) |
| 一.2 规则可玩化且双向 | 每条规则文本对应一个可触发可观察的机制;玩家无法发现的机制不许留在规则框架内 | 看到守则 8/8 覆盖率不是 100%,或者覆盖了却有一条机制压根不进流程 | 亲历 | ≥3(第九轮四条要求 + 第八轮覆盖度更正 + 第六轮守则挂钩) |
| 一.3 呈现优于说明 | 能用画面或声音表达的不写字;删掉这句玩家损失的是判断还是信息 | 看到旁白在复述眼前陈设、复述音效、进门报房名 | 亲历 + 公开来源 | ≥2(13 轮留白成文 + 20 轮末 122→66) |
| 一.4 一条反馈 = 一个类 | 收尾必须报「同类排查已完成,覆盖 N 处」加一句「本次探针查不到 Y」 | 看到修完一处 bug 的回答里没有覆盖范围,也没有盲区声明 | 亲历 | ≥3(第九轮·补、第九轮·补·同根因、第二十轮「举一反三收尾」) |
| 二.1 先确认交付哪种商品 | 验收口径换成氛围 / 主题 / 脆弱感三项各有承载物,不用「好玩吗」 | 看到有人用「好玩吗」验收恐怖内容,或一段内容三项都指不出承载物 | 公开来源 | 1(单例·降权,项目内无对应事故) |
| 二.2 剥夺赋能是引擎 | 玩家动词清单里不出现「击败」「造成伤害」「压制」 | 看到玩家手里有能赢的武器,或设计上给了一条纯收益的输出手段 | 公开来源 + 亲历 | ≥2(第四轮删装睡、手电翻成「她找你的天线」) |
| 二.3 甜区在可解决的误差上 | 留一个玩家能靠观察解决、尚未解决的缺口;游戏内不许有反证 | 看到假线索被玩家当场证伪,或缺口的解决路径被写进提示里 | 公开来源 | 1(单例·降权) |
| 二.4 惊吓是标点不是散文 | 每个惊吓同时是一条永久性世界规则;散布开、砍掉大部分 | 看到一段惊吓播完就失效,撤掉它之后世界没有任何变化 | 公开来源 | 1(单例·降权,项目内惊吓预算本身未被反馈挑战) |
| 二.5 首遇三纪律 | 可逃、先听觉后视觉、位置永远可读;首触点只有两个动词的可判定选择 | 看到玩家第一次见威胁体就被追着跑,或靠 HUD 箭头指路 | 亲历 + 公开来源 | ≥2(第九轮「我都没看见敌人在哪就要被提示引导」+ 宿舍门缝那道光) |
| 二.6 留白是节奏机制 | 有回落通道、硬上限、强制静默窗口;超阈值后强制让威胁退场 | 看到一段高压内容之后直接接下一段,没有降档通道 | 公开来源 | 1(单例·降权) |
| 二.7 不要把线性当恐怖通则 | 张力靠尺度(更窄的走廊、更低的天花、更少的视线),不靠拓扑 | 看到用「非线性能更恐怖」当默认设计结论,且说不出机制解释 | 公开来源 | 1(单例·降权,反直觉结论来自工作室自述) |
| 三.1 宣称与呈现不符是「出戏」的底层 | 物件上出现不该有的东西 / 锁着却报钥匙在哪 / 文档与实际楼层矛盾 / 镜子能看穿 | 看到玩家截图里镜面另一侧透明,或值班表写的楼层与玩家脚下不是一层 | 亲历 | ≥4(RC 值班表楼层、镜面、画外黑框、接待台朝向) |
| 三.2 细节失败比粗糙更致命 | 宁可藏起来,不要半露 | 看到一张画里有一半积灰一半没有,或一个柜子半开着露出发黑的板 | 亲历 + 公开来源 | ≥3(衣柜黑面片、棉袄嵌进柜板、画背面套着纸) |
| 三.3 数字口径只留一个数据源 | 一个视觉区域只承载一种性质;同一事实只留一处来源 | 看到 HUD 12/19、菜单 16/19、暂停页另一组数同时在屏幕上 | 亲历 | ≥3(12/19 vs 16/19、14/19 vs 15/份、蜡笔画 4/4 与列表 5 张) |
| 三.4 「按 F 没反应」是三个 bug 的合称 | 分开查几何不可达 / 可见性为零 / 入口生命周期只挂在一瞬间 | 看到报障写「按 F 没反应」就去查按键绑定 | 亲历 | ≥3(布鞋 flag 翻了画面零变化、琴面差 1.5mm、衣柜腔体不可达) |
| 四.1 旁白只在画面给不出信息时说话 | 删除检验:损失判断的删,损失信息的留 | 看到旁白里出现「×1.8」「半径 13m」或守则编号 | 亲历 + 公开来源 | ≥3(12 条去系统味、13 轮重写、20 轮 122→66) |
| 四.2 零括号 | 可见文本源里括号数为 0 | 看到 (……别抬头。)、(记住了这个房间。) 这类括号 |
亲历 | ≥2(第十六轮全库去括号 + 第二十轮文字终查清舞台指令) |
| 四.3 一句一句 | 每句只许一个句号;清掉推论式补刀 | 看到「她停下了。她听见了我。」这种第二句补刀 | 亲历 | ≥2(第十七轮一句话化 + 第二十轮「有人在数数」) |
| 四.4 可见文字不出现人名 | 只用我 / 妹妹 / 她 + 床位号、职务、日期;被抹掉的名字用划痕画出来 | 看到「林小满(女,5岁)」出现在机构文件或粉笔字里 | 亲历 | ≥2(第十六轮 + 第十九轮全文字去姓名含机构文件) |
| 四.5 不数数 | 可见文字不出现连续数字;拍子交给声音与画面 | 看到「一,二,三……」或滚动到 21、22 的计数器在屏幕上 | 亲历 | 1(单例·降权,第十六轮一次性落地) |
| 四.6 提示即按键且不许说谎 | 每条提示能指出触发它的世界条件;守卫为假时不出现 | 看到门还锁着、文案却说「钥匙挂在门后面 得先摸到挂钩」 | 亲历 | ≥2(弹琴提示改为仅 mother.active + 锁着的宿舍门谎报挂钩) |
| 四.7 锁只报锁 | 锁相关文案不出现方位词或藏匿描述 | 看到「钥匙在宿舍门后面」这类指路文案 | 亲历 | 1(单例·降权,2026-10-07 用户裁定,三处一次性删净) |
| 四.8 物体上只许有它物理上真有的东西 | 手写件无抬头无红线无章;机构章白名单同步 | 看到私信和日记上盖着机构红章,或每张纸都是居中抬头 + 分隔线 + 红章 | 亲历 | ≥3(第六轮模板化被推翻、第七轮六字段模型、第二十一轮整页图) |
| 四.9 文字唯一出处与权威顺序 | 文档冲突的权威顺序写死,并顺手把它改对 | 看到同一句话在 BIBLE / DESIGN / HANDOVER 里三个版本 | 亲历 | ≥2(code > HANDOVER > DESIGN 写入附录 B + sync.html 四份文档对账) |
| 五.1 连续轴上的刻度不是开关 | 存在一个连续量 + 一个可夹逼的身体修正项 | 看到三个状态各自写一套规则,切换像模式切换而不像眼睑在动 | 亲历 | ≥2(第六轮三态定稿 + 第九轮键位反转) |
| 五.2 独占收益 + 独占代价挂同一个变量 | 收益与代价来自同一双眼睛;优先找零新素材的代价实现 | 看到某个机制有收益通道却没有对应代价通道,或代价要新素材才能实现 | 亲历 | ≥2(失焦 + 余光剪影配对 + 第十一轮「她不是被光吓到的」) |
| 五.3 默认值与阈值是可玩性问题 | 玩家实测能全程不按某个键 → 改价值轴不改实现 | 看到玩家实测全程不按 Q/E,于是该键的收益只剩减损型 | 亲历 | 1(单例·降权,第二十二轮单次重构) |
| 五.4 每个优化都要想它会被怎么刷 | 把自查写成通则:每个收益旁边写「它会被怎么刷」 | 看到「中间姿态回充是缓慢下降还是上升」这种问题没人问过 | 亲历 | 1(单例·降权,开发者自述的具体堵法被抽象成通则) |
| 五.5 惩罚从等待改成风险 | 任何强制盲 / 强制静止超过 1 秒都要伴随一个位移压力 | 看到罚站三秒期间她不会过来,玩家站着等就行 | 亲历 | ≥2(第十一轮「数三十没有牙齿」+ 第二十二轮光压) |
| 五.6 碰撞不等于即死 | 给 1–1.5 秒惊觉窗口,把接触转成一次信息事件 | 看到撞到她立刻死亡,逃跑窗口不存在 | 亲历 | 1(单例·降权,第十三轮追逃重做) |
| 五.7 关门的意义是争取时间 | 关门买时间,不是脱战 | 看到玩家关门后威胁体判定为「离场」直接消失 | 公开来源 + 亲历 | 1(单例·降权) |
| 五.8 演出事件默认非致命 | 致命后果只留给规则违规 | 看到一次演出事件把玩家直接判死 | 亲历 | 1(单例·降权,走镜半程被抓改掉死亡黑场) |
| 五.9 扩内容不是加规则是二次使用 | 每件新内容回答「它让哪条已有规则变得可玩」 | 看到一件只会被看一眼的道具被加进关卡 | 亲历 | ≥2(第六轮守则挂钩 + 第七轮线索串行) |
| 六.1 静默失效是头等缺陷 | 任何「功能存在」的断言必须用一次真实触发支撑;「没报错」= 不合格 | 看到一条断言只检查函数被调用,没有检查它真的产生了可观察结果 | 亲历 | ≥5(十六张纸静默回落、墙面全是走廊灰、眼睑声没响过、线索条不刷新) |
| 六.2 测量先于调参 | 「某处很黑 / 不响 / 看着不对」先写成一个可测量的量再改 | 看到同一处「照不亮」被调了三轮参数都无效 | 亲历 | ≥3(手电衰减悬崖、区域割裂、emissive 抖出青色点阵) |
| 六.3 先怀疑探针,再怀疑游戏——只怀疑一次 | 探针标定通过后必须立刻回头查游戏 | 看到量到「机制失效」就改游戏阈值,而没先验证探针坐标系 | 亲历 | ≥7(FEEDBACK 明确记录多次:俯仰符号、门限标定、rAF 虚拟时间、延时旁白守卫) |
| 六.4 卡死的统一形状 | 状态把输入或画面接过去,释放只写在顺利那条路上 | 看到 onCaught 清了 G.cut 却留着 cutLock,死亡期间键盘锁死 |
亲历 | ≥4(第九轮、第九轮·补、第十二轮、RC 结局链定时器) |
| 六.5 四道网 + 黑屏保险丝 | 锁预算 / 停摆看门狗 / 自救键 / 逐帧熔断;全黑超阈值交还接管项 | 看到持续异常只让画面冻结,没有降级路径 | 亲历 | ≥3(第十二轮熔断器 + 渲染层末路重载 + 诊断页点名) |
| 六.6 循环外必须有安全网 | 四道网全在主循环内部,主循环挂死时一起陪葬 | 看到四道安全网没有任何一个跑在独立线程上 | 亲历 | 1(单例·降权,第十二轮推导结论) |
| 六.7 诊断页要自己说话 | 暂停页印「锁未交还 N 次 · 停摆自愈 M 次 · 最坏一帧在哪个房间」 | 看到玩家报障只有一句「卡死了」,没有任何计数 | 亲历 | 1(单例·降权,第九轮·补落地) |
| 六.8 钳制防不住 NaN | 有限性单独设闸;max(0, NaN) 仍是 NaN |
看到代码里有 clamp() 就认为 NaN 已经防住 |
亲历 | ≥3(lampMult 未初始化终局黑屏、A.setPad 每帧 non-finite、m.activate 数组当对象读) |
| 六.9 数值插值字段初值必须是数 | 未赋值 + 目标是数 = 全链路 NaN = 永久黑屏 | 看到 level.lampMult 没有初值就参与 undefined + (0.13 - undefined) |
亲历 | ≥4(lampMult、wakeT、lidSndCd、G.dzT) |
| 六.10 跨形状传值要念字段名 | 数组当对象读 = 激活即 NaN | 看到 best = c 之后按 best.x 读 |
亲历 | ≥3(m.activate、tex.js 挂错对象、cutscene 相机写入路径) |
| 六.11 时间纪律与派生物 | 单任务墙钟上限写进脚本;派生物必须与当前代码同源 | 看到后台任务被孤儿 shell 复活,继续逐页拉 chrome | 亲历 | ≥2(第二十轮·下时限纪律 + 派生物对账页) |
| 七.1 Demo 是概念验证不是内容切片 | 证明核心机制可被发现,不是被讲解 | 看到 Demo 主线是调数值,而玩家反馈里全是误解 | 公开来源 + 亲历 | ≥2(第七轮线索全给用户 + 14 轮 reachprobe) |
| 七.2 内容量不足让机制无处发挥 | 一间房两分钟翻完 → 机制没有执行机会;缺时长先加长回环 | 看到房间数量在涨,而每间房的探索密度在掉 | 亲历 | ≥2(第九轮宿舍 3→12 件 + HANDOVER §4.2 探索密度) |
| 八.1 反复反馈是优先级信号 | 同一件事被反馈第 4 次说明前几轮修在了错误层次 | 看到同一个「照不亮」反馈第三次而改动还只是参数 | 亲历 | ≥3(手电致黑两轮、第九轮四张截图、第二十六轮地面割裂) |
| 八.2 修类不修点 | 用户明说「它们应该都有一个根因」 | 看到只修了被报的那一处,没查同族 | 亲历 | ≥3(第九轮·补、第十二轮、第 20 轮·下) |
| 八.3 找不到根因就如实说 | 「我能证伪所有猜测但没复现你那一帧」比假装修好有价值 | 看到 Agent 宣称修好了但拿不出一次真实触发记录 | 亲历 | ≥2(第九轮·补交付四道网 + 第十二轮写间谍抓栈) |
| 八.4 「散」比「大」更致命 | 状态写入点收敛,而不是控制代码量 | 看到同一状态在几百个地方各写各的初始化 | 亲历 | ≥2(api.checkpoints 整字面量 + 每帧状态初始化铁律) |
| 八.5 断言要断言玩家可见结果 | 只读逻辑状态的端到端断言会漏掉「界面盖住了演出」 | 看到 e2e 全绿,而暂停菜单正盖在数台阶演出上 | 亲历 | ≥2(第九轮看门狗回归 + 第十一轮 stairs.html) |
| 八.6 断言跟着设计走 | 设计改了旧断言就是过期文档,必须同一次提交改 | 看到 lid 挡光曲线搬到亮处后还在用旧的非光压前提断言 |
亲历 | ≥3(lid 曲线、quests.html 硬编码旧文案、endcard 达成结局徽章) |
| 八.7 拍脑袋式调参会掩盖根因 | 「某处 X」类反馈先变成可测量量 | 看到「手电照不亮」被归为参数不够亮 | 亲历 | ≥3(手电、区域割裂、发光体) |
| 八.8 不可破的例外和真 bug 长得一样 | 记录哪些「看似出错的地方」是设计好的破例 | 看到疑似 bug 清单里没有一条判定结论 | 自建框架(机制 §10.5 反向筛选) | 1(单例·降权) |
| 八.9 穷举类验收放在最坏输入上 | 含非有限值、含全部音名;常驻至少一个真跑该子系统的页面 | 看到全部 harness 跑完 A.ok 恒为 false,音频层 bug 全隐身 |
亲历 | ≥2(SHOT 模式藏 12 轮 + 音频穷举页只此两页真开音频) |
| 八.10 早期玩家版本体量无统计分布 | 只有个体开发者的自述数值,别当行业基准 | 看到某处时长数字被当成行业参考 | 公开来源 + 亲历 | 1(单例·降权) |
| 术语.dread/shock | 交付的是可持续数分钟、由玩家生产的那一种 | 看到验收表里只有「吓人吗」一栏 | 公开来源 | 1(单例·降权) |
| 术语.剥夺赋能 | 持续制造玩家感到自己有能力的状态 | 看到玩家全程握着能反击的手段且设计认为这是好事 | 公开来源 | ≥2 |
| 术语.宣称与呈现不符 | 玩家判「出戏」的底层原因 | 看到玩家说「这里很出戏」而没人往下追问哪一处宣称与呈现不符 | 亲历 | ≥4 |
| 术语.静默失效 | 没报错 = 不合格 | 看到一条只有「不抛异常」的验证 | 亲历 | ≥5 |
| 术语.正面证据 | 一次真实可观察的触发记录替代「没报错」 | 看到交付说明里写「已修复,未复现错误」 | 亲历 | ≥2 |
| 术语.一条反馈一个类 | 落成可复检的判据与断言 | 看到修完 bug 没往项目文档里加判据 | 亲历 | ≥3 |
| 术语.惊觉窗口 | 接触不立即结束,先产生信息,给 1–1.5 秒 | 看到撞到她直接判死 | 亲历 | 1(单例·降权) |
| 术语.压力导演 / 威胁计量表 | 合成紧张度调度,超阈值强制退场 | 看到「什么时候吓人」由事件表随机触发 | 公开来源 + 亲历 | ≥2(§3.8 压力导演 + 观察间久留压力) |
| 术语.半落地 | 改动只存在于工作树或计划文本 | 看到计划文档写了但断言页里没有对应检查 | 亲历 | ≥2(第十五轮接手另一 agent 的半成品) |
| 术语.给默认不给菜单 | 写清推荐路径与例外条件 | 看到待办里写着「不要用 mock 掉要测的东西」但没有给替代路径 | 亲历 | 1(单例·降权) |
2 fear-design.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0 先确认交付的是哪种商品 | 验收口径换成氛围 / 主题 / 脆弱感三项各有承载物 | 看到一段恐怖内容被「好玩吗」判过 | 公开来源 | 1(单例·降权) |
| §1 剥夺赋能是引擎 | 玩家的动词清单里不出现输出类动词 | 看到设计里有一条「玩家可以打退她」 | 公开来源 + 亲历 | ≥2(第四轮删装睡、手电翻面) |
| §2 工具决定玩家对自己的想象 | 给一件工具 = 告诉玩家你是哪种人 | 看到手电被写成纯照明道具,而它的收益与代价没有配对 | 亲历 + 公开来源 | ≥2(「她不是被光吓到的」+ 余光剪影零新素材配对) |
| §3 题材是最怕失去什么 | 每个恐怖来源能指回角色最怕失去的那件事 | 看到威胁设计来自通用怪物库,与人物无关 | 亲历 | 1(单例·降权,BIBLE §一 林晚档案) |
| §4 停在不确定性的甜区 | 留一个玩家能靠观察解决、尚未解决的缺口 | 看到假线索被游戏内证据当场推翻 | 公开来源 | 1(单例·降权) |
| §5 jump scare 是标点不是散文 | 每个惊吓同时是一条永久性世界规则 | 看到一段惊吓撤掉后世界毫无变化 | 公开来源 | 1(单例·降权) |
| §6 不要线性 | 张力靠尺度不靠拓扑;非线性的结论要附机制解释 | 看到有人把「非线性更恐怖」当默认结论 | 公开来源 | 1(单例·降权) |
| §7 留白是节奏机制 | 有回落通道、硬上限、强制静默窗口 | 看到高压段后面直接接下一段高压 | 公开来源 + 亲历 | ≥2(13 轮留白成文 + 压力导演退场机制) |
| §8 威胁计量表 | 合成紧张度调度器,超阈值强制让威胁退场 | 看到惊吓投放由事件表随机决定 | 公开来源 + 亲历 | ≥2(§3.8 压力导演 + 观察间 >14s / >26s 两档) |
| §9 信息的灰色地带 | 允许系统有意不给全貌,但不许给假信息 | 看到提示描述了世界不存在的东西 | 亲历 | ≥2(弹琴提示仅 mother.active + 锁门谎报) |
| §10 保持系统部分不可知 | 内部状态模糊化,且恢复手段要付代价 | 看到所有系统数值都在 HUD 上明码标着 | 公开来源 | 1(单例·降权,Amnesia 理智条是公开案例) |
| §11 救命道具会杀死氛围 | 每一个纯收益的保命手段都要过这条 | 看到玩家背包里有一个「无敌/脱身」道具 | 公开来源 + 亲历 | ≥2(钥匙被设计成信息锁而非万能钥匙) |
| §12 资源紧缺余量优先于加敌人 | 缺紧张时先调余量,不是先加敌人数量 | 看到关卡变难的方式是「再放一只」 | 公开来源 | 1(单例·降权) |
| §13 首次遭遇的纪律 | 可逃、先听觉后视觉、位置永远可读;首触点只有两个动词 | 看到玩家第一次见威胁体就被必死 | 亲历 + 公开来源 | ≥2(第九轮四条要求 + 宿舍门那课) |
| §14 没被看到的事件等于不存在 | 播报类事件需要视线条件,否则等于凭空出现 | 看到一段只为玩家看不见处设计的演出 | 亲历 | 1(单例·降权) |
| §15 给玩家甩掉威胁的地方 | 地图上存在可以真正脱离追击的位置 | 看到追击一旦开始就只能跑到底 | 亲历 | 1(单例·降权,追击丢失视线改走向最后目击点) |
| §16 反面:强制凑近 | 走廊转角强制逼近玩家视野的做法是反教材 | 看到设计里有「必须走过去才能触发」的门 | 公开来源(P.T. 案例) | 1(单例·降权,项目内未犯) |
| §17 可复用的走廊循环三要件 | 走廊要有结构化信息源、壁龛分配、可重复变奏 | 看到一段走廊每次走内容完全一样 | 亲历 + 公开来源 | 1(单例·降权) |
| §18 Demo 的正确定义 | Demo 是概念验证,证明机制可被发现 | 看到 Demo 迭代主线是「哪个数值不对」 | 公开来源 + 亲历 | ≥2 |
| §判据速查 | 每段恐怖内容指出三项承载物中的至少一项 | 看到一段内容三项都指不出 | 公开来源 + 亲历 | ≥2 |
3 text-and-props.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0 元规则:文字唯一出处与权威顺序 | 项目里有一份「全部可见文字的唯一出处」;冲突时改字不改设定 | 看到一句台词在三个文件里三个版本 | 亲历 | ≥2(BIBLE 写成唯一出处 + sync.html 四文档对账) |
| §1 旁白只在画面给不出信息时说话 | 删除检验:损失判断的删 | 看到旁白复述眼前陈设或复述音效 | 亲历 + 公开来源 | ≥3(12 条去系统味、13 轮重写、20 轮 122→66) |
| §2 零括号 | 可见文本源里括号数为 0 | 看到 (……别抬头。) |
亲历 | ≥2(第十六轮 + 第二十轮终查) |
| §3 零标点,一句一句 | 每句只许一个句号 | 看到「我闭上眼。一,二,三……」 | 亲历 | ≥2(第十七轮 + 第十九轮) |
| §4 可见文字不出现人名 | 名字被抹掉要用划痕、水渍画出来 | 看到床位卡上写着「(名字被划掉)」 | 亲历 | ≥2(第十六轮 + 第十九轮含机构文件) |
| §5 不数数 | 计数器只留状态短语 + 音效 | 看到屏幕上滚动 21、22 | 亲历 | 1(单例·降权,第十六轮一次性落地) |
| §6 提示即按键且不许与事实不符 | 每条提示能指出触发它的世界条件 | 看到守卫为假时提示仍然出现 | 亲历 | ≥2 |
| §7 锁只报锁 | 锁相关文案不出现方位词 | 看到「钥匙挂在门后面」 | 亲历 | 1(单例·降权) |
| §8 物体上只许有它物理上真有的东西 | 手写件无抬头无红线无章;机构章白名单同步 | 看到私信上盖着红星院红章 | 亲历 | ≥3(第六轮被推翻、第七轮重构、第二十一轮整页图) |
| §8.1 一旦定成原则就要普查同族 | 新增机构纸同步红章白名单;同类一并清掉 | 看到画上面还叠着一张纸、墙上字又被誊抄成一张纸 | 亲历 | ≥2(第七轮墙就是墙、画就是画) |
| §9 说谎禁令 | 文本不许描述已经不存在的东西 | 看到门文案还在报一个早已拆掉的挂钩 | 亲历 | 1(单例·降权,RC 终轮同步改文案) |
| §10 非信息类物品必须有交互上限或条件 | 新加可反复触发的功能物先回答「玩家第 N 次按 F 会发生什么」 | 看到琴可以无限弹,且每次都给收益 | 亲历 | ≥2(琴两回 / 八音盒一回) |
| §11 数字即伏笔,出处铁律 | 每个出现在可见文字里的数字要有出处 | 看到值班表楼层与玩家脚下矛盾 | 亲历 | 1(单例·降权) |
| §12 道具即世界:出处四问 | 每件道具回答它为什么在这里 | 看到一件道具只是「填空用的」 | 亲历 + 公开来源 | ≥2(第七轮道具原则 + 第 21 轮整页图) |
| §13 纸面即画面 | 关键纸整页画出来;描述性红字清零 | 看到「站在床上睡」「湿脚印一直延伸」这类平铺的不可能事实 | 亲历 | ≥2(第 21 轮八张关键纸 + RC 残页重写) |
| §14 留白总纲 | 台词之外的一切文字都不解释 | 看到旁白出现「原来 / 所以 / 这就是 / 代价是」 | 亲历 | ≥2(13 轮留白成文 + 20 轮 122→66) |
4 mechanics-and-rules.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0 地基:玩家说不可信 | 玩家吐槽机制时说的是可信度不是不好玩 | 看到「不好玩」被当成手感问题处理 | 亲历 | ≥2 |
| §1 准入闸:机制是推出来的 | 每个机制在映射表里找到来处 | 看到一条机制答不出「它对应谁的哪段经历」 | 亲历 | 1(单例·降权) |
| §2 连续状态:一根轴上的三个刻度 | 按键决定你想去哪儿,身体决定你实际在哪儿 | 看到三个状态各写一套规则,切换像模式切换 | 亲历 | ≥2(第六轮 + 第九轮反转) |
| §3 连续量,不要二极管 | 底层连续,UI 只露 1–3 档,硬阈值只留给真突变 | 看到二极管阈值让某个键的收益全程为负 | 亲历 | ≥2(第十五轮 C 期曲线 + 第二十二轮重构) |
| §4 独占收益与独占代价挂同一个变量 | 代价优先找零新素材的实现 | 看到收益通道和代价通道来自两个不相干的变量 | 亲历 | ≥2 |
| §5 惩罚从等待改成风险 | 强制静止超 1 秒要伴随位移压力 | 看到罚站期间威胁体不会过来 | 亲历 | ≥2(第十一轮数三十 + 第二十二轮) |
| §6 碰撞不等于即死:惊觉窗口 | 1–1.5 秒内先产生信息 | 看到撞到即判死 | 亲历 | 1(单例·降权) |
| §7 门的双重角色 | 关门买时间,不是脱战 | 看到关门即离场 | 亲历 + 公开来源 | 1(单例·降权) |
| §8 演出事件默认非致命 | 致命后果只留给规则违规 | 看到一次演出直接判死 | 亲历 | 1(单例·降权,走镜半程被抓) |
| §9 压力导演 | 超阈值强制退场 | 看到「什么时候吓人」是随机的 | 公开来源 + 亲历 | ≥2 |
| §10 规则怪谈的可玩化 | 该章已在正文标注为自建框架 | 看到有人引用这一章当成有公开方法论支撑 | 自建框架 | — |
| §10.1 守则 ↔ 机制 100% 覆盖且双向 | 覆盖率不到 100% 时覆盖率本身成了信息 | 看到守则 8/8 里有一条机制玩家无法自行发现 | 亲历 | ≥3(第八轮更正 + 第九轮 + 第六轮挂钩) |
| §10.2 规则可破除但不可僵死 | 规则必须留破口,僵死的规则玩家会放弃推理 | 看到一条规则无论怎么做结果都一样 | 自建框架 | — |
| §10.3 误导必须是有意设计的 | 遗留的误导要被识别出来并改掉 | 看到一处误导没人认领来源 | 自建框架 | — |
| §10.4 谜题要有清晰边界 | 玩家能回答规则从哪开始、在哪结束 | 看到谜题的合法操作集合没有书面记录 | 自建框架 | — |
| §10.5 用规则反向筛选关卡 | 疑似 bug 清单每条都有判定结论与理由 | 看到可疑现象清单里有条目没结论 | 自建框架 | 1(单例·降权) |
| §10.6 反向设计:先有答案 | 每个谜题有一行答案 + 一行排除理由 | 看到关卡先搭好再找解法 | 自建框架 | — |
| §10.7 恐怖向谜题检查表 | 可在合理时间内解开——这是清单里最贵的一条 | 看到玩家在某个谜题前卡死 | 自建框架 | — |
| §10.8 新内容让同一条规则第二次生效 | 新增内容额外满足「按键数不变、状态机分支数不变」 | 看到一件只会被看一眼的道具进了关卡 | 亲历 | ≥2(第六轮 + 第七轮) |
| §10.9 规则的信息投递用倒金字塔 | 最重要的一条最先给,且让玩家亲身经历 | 看到先解释规则再让玩家体验 | 自建框架 | — |
| §11 信息锁优于钥匙锁 | 解法要求玩家推出结论并做出身体动作 | 看到门禁压缩成「拿 A 开 B」 | 亲历 | 1(单例·降权,隐藏结局前置只卡剧情理解) |
| §11.1 隐藏层是隐藏理解 | 「没有门」必须是寻路断言出来的,不是注释 | 看到「此处无门」只写在注释里 | 亲历 | 1(单例·降权,nursery 页寻路全返 null) |
| §12 高潮必须由玩家动作触发 | 凝视不动作不触发;全程无一行提示教玩家 | 看到结局由纯计时凝视触发 | 亲历 | ≥2(凝视 3.4s 自动触发删除 + 闭眼数三十动作化) |
| §13 线索串行、只报过去 | 未来的节点一条都不许出现在屏幕上 | 看到暂停页直接给出全部线索 | 亲历 | 1(单例·降权,第七轮用户原话「你的线索怎么能直接全给用户的」) |
5 threat-ai.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §1 章程即地基 | 每条章程对应一个 AI 分支 + 一个玩家可利用的漏洞 | 看到一个 AI 分支说不出它属于哪条章程 | 公开来源 + 亲历 | ≥2 |
| §1.1 致盲必须是共有属性不是职业缺陷 | 写成「它也是人所以怕光」,不写成「这只怪物怕光」 | 看到「怕光」被写成该怪物的专属设定 | 公开来源 | 1(单例·降权) |
| §2 不去的地方是可玩安全区 | 禁区由寻路不可达断言证明;里面有只属于玩家的收益 | 看到禁区的安全性只写在设计文档里 | 公开来源 + 亲历 | ≥2(第十轮 nursery 寻路断言 + 观察间没有门) |
| §3 感知输入要少而可解释 | 三条输入,击杀需 ≥2 个传感器同时满足 | 看到威胁体靠第五条输入找玩家 | 公开来源 + 亲历 | ≥2(第四轮删装睡 + 删 player.hidden 死引用) |
| §4 它看得见「你这个人」 | 视觉只到轮廓为止,看不见面部细节 | 看到她的视觉输入里塞了眼睑开合 | 亲历 + 公开来源 | 1(单例·降权,第四轮一次定案) |
| §5 现实的「不被注意到」条件 | 每个隐蔽条件都能说出现实理由 | 看到「站暗处就不被发现」而没有任何物理理由 | 亲历 | 1(单例·降权,第四轮把装睡换成四个现实条件) |
| §6 每个传感器读数都有衰减率 | 读数不永久累积,警觉有回落 | 看到玩家躲过一次之后警觉永久留在高位 | 公开来源 | 1(单例·降权) |
| §7 不确定度用概率累加表达 | 多个弱证据累加而不是单一强判定 | 看到「只要在同一直线上就 100% 发现」 | 公开来源 | 1(单例·降权) |
| §8 封堵最优解合法但要付代价 | 复用即代价;绝不因玩家死亡解锁感知能力 | 看到玩家反复用同一个死角且没有阻力 | 公开来源 | 1(单例·降权) |
| §9 没有反应迟钝的无脑最优解 | 每条反制手段旁边写着副作用 | 看到一条反制手段没有副作用 | 公开来源 + 亲历 | ≥2(光照加速察觉 + 手电既逼退又暴露) |
| §10 位置永远可读 | 侧向摆动沿朝向垂直向量,不沿固定全局方向 | 看到她在 x=45 巡逻,光束却瞄着地图西端 | 亲历 | ≥2(第四轮回归 + 第十一轮抓到 + round2.html 几何断言) |
| §11 状态结束后速度必须回落 | 追击结束回落到巡逻基准 | 看到玩家逃脱一次之后关卡永久变难 | 公开来源 + 亲历 | 1(单例·降权) |
| §11.1 时间常量由时钟驱动 | 不能逐帧累加,否则随帧率漂移 | 看到同一时间窗口在两种帧率下测得不同 | 公开来源 + 亲历 | 1(单例·降权) |
| §12 公平性 | 终局出生点取离玩家最远的巡逻节点 | 看到固定贴脸重生点 | 公开来源 | 1(单例·降权) |
6 level-and-space.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0 地基:玩家判的是骗我 | 不要在「摆物件」层优化,要在收口处建立约束 | 看到逐件手工调悬空/灰度的清单 | 亲历 | ≥4(13 轮悬空扫尾 + 17 轮 + 14 轮 + 20 轮) |
| §1 可信度五件套挂进收口 | 约束挂在必经函数里,不挂在逐件清单上 | 看到新家具需要额外操作才有接触阴影 | 亲历 | ≥3 |
| §1.1 接触阴影 = 防悬空的设计模式 | 挂在家具注册的唯一入口函数上 | 看到钢琴无腿、灯笼无托架浮在墙外 | 亲历 | ≥3(第十四轮扫尾 + 第十三轮 + 悬空截图批次) |
| §1.2 会打开的家具必须有真腔体 | 五块板围出真实空腔,禁止实心箱 + 黑面片 | 看到拉开柜门里面是一块黑板 | 亲历 | ≥3(RC 终轮衣柜 + 第十三轮货架 + 实体不穿透) |
| §1.3 一类表面一张画布 + 按世界位置取偏移 | 两条缺一不可;repeat 不许写死常数 |
看到地面在每一个门口都跳一次格线 | 亲历 | ≥3(第二十六轮地面割裂 + 第二十一轮墙面并 + 天花 repeat 旧账) |
| §1.4 命中挡板一律不可见 | 挡板设 visible=false;要淡入淡出的保持可见 |
看到水池沿那幅画外面糊出一圈黑框 | 亲历 | 1(单例·降权,第二十六轮) |
| §1.5 装饰件一律不参与射线 | 纯装饰 mesh 标 noRay |
看到灯罩挡住桌面交互 | 亲历 | ≥2(第十四轮 + 第十轮 mirrorSil) |
| §2.1 proxy 件 | 尺寸与轴心与最终件完全一致 | 看到美术 pass 变成了重建而不是换 mesh | 公开来源 + 亲历 | 1(单例·降权) |
| §2.2 建模前定死三件事 | 模数 / 轴心约定 / 贴图密度 | 看到每件模型中心轴心,拼起来角落有缝 | 公开来源 | 1(单例·降权) |
| §2.3 模数从玩法反推 | 最小门洞 / 走廊 / 层高都能从玩法数值推导 | 看到走廊宽度先按好看定下再和玩法谈判 | 公开来源 | 1(单例·降权) |
| §2.4 先画连接矩阵 | 每一格都有结论 | 看到建了 20 个件才发现 kit 转不了弯 | 公开来源 | 1(单例·降权) |
| §2.5 先做基础件不要先做变体 | 基础件要压力测试:卡人 / 多层 / 间隙 | 看到变体先做完才回头验基础件 | 公开来源 | 1(单例·降权) |
| §2.6 误差累积 | 所有模块同一套导入设置 + 尺寸回归断言 | 看到二十件接起来走廊对不齐 | 公开来源 | 1(单例·降权) |
| §2.7 trim sheet 是小团队的关键杠杆 | 材质实例数压到很低;模块做双向 | 看到贴图集按件各画一张 | 公开来源 | 1(单例·降权) |
| §2.8 信任块的注意力预算 | 先投建筑,把注意力从少的小道具上引开 | 看到全部精度都花在小道具上,没有一处值得相信 | 公开来源 | 1(单例·降权) |
| §3 道具可信度先答因果 | 逐条答「怎么塌的 / 有没有水流过」再摆物体 | 看到道具被撒上去而不是被推导出来 | 公开来源 + 亲历 | ≥2(第七轮道具原则 + 第 21 轮整页图) |
| §3.1 互证:讲一个故事不叠层 | 进入一个空间讲一个故事,并给玩家休息 | 看到商店被堆满商品而目标是展示匮乏 | 公开来源 | 1(单例·降权) |
| §3.2 灯光当注意力遮罩 | 在热点上压阴影把注意力引回该看的地方 | 看到最抢眼的东西恰好不是叙事焦点 | 公开来源 | 1(单例·降权) |
| §3.3 引导用「看上去就不通」的物理阻挡 | 不存在靠 HUD 箭头承担的引导 | 看到玩家需要箭头才知道往哪走 | 公开来源 + 亲历 | ≥2(第九轮门缝光 + 会扫的灯替掉箭头) |
| §4 门的工艺清单 | 六条:贯通墙厚带碰撞 / 贴扫掠侧 / 填满洞口 / 碰撞跟门板 / 转置正确 / 显式声明扫进哪侧 | 看到玩家在离门板一米处撞隐形墙,或门开进墙里 | 亲历 | ≥5(初版门方向错 + 第十九轮贴合 + 第二十轮重建 + 洗浴间隔间 + 洗手台堵门洞) |
| §5 朝向与朝向缺失 | 板子必须给朝向,不许靠默认值 | 看到接待台上的登记簿侧着放,谁也不面向 | 亲历 | ≥3(board 无 ry + desk 转 90° 碰撞失真 + 货架转 π) |
| §6 反射面 | 反射面里的东西必须放在反射面之前一侧 | 看到剪影在自己的镜子背后,逻辑却全对 | 亲历 | 1(单例·降权,第十轮) |
| §7 尺度与比例只能靠截图 | 靠推理看不出来,靠截图 | 看到「感觉比例不对」但没人出图 | 亲历 + 公开来源 | ≥3(像素级亮度实测、截图目检批次) |
| §8 只在近处成立的东西要在真实触发点目检 | shot rig 必须有一个机位站在真实触发点上 | 看到 3.3m 外的截图里读不出剪影,而真实触发点是 1.4m | 亲历 | 1(单例·降权,第十轮) |
| §9 风格化低多边形是一组耦合约束 | 面数 / 贴图 / 光照是一组一起动的参数 | 看到减面数之后阴影一起坏掉 | 公开来源 + 亲历 | 1(单例·降权) |
| §10 反 backtracking | 回到旧区域必须有新变化,否则玩家不会回去 | 看到玩家回旧房间只是为了确认没漏东西 | 公开来源 + 亲历 | ≥2(宿舍重做 + 线索串行) |
7 verification-and-forensics.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0.1 把玩家的话翻译成缺陷类别 | 反馈读成类不读成条目 | 看到把「这里很出戏」直接当成一处修补 | 亲历 | ≥3 |
| §0.2 「按 F 没反应」拆成三个 bug | 几何不可达 / 可见性为零 / 入口生命周期只挂一瞬间 | 看到第一案就去查输入绑定 | 亲历 | ≥3 |
| §0.3 承认「全绿」不等于「能玩」 | 只读逻辑状态的断言会漏掉界面盖住演出 | 看到 e2e 全绿而画面不对 | 亲历 | ≥3 |
| §0.4 先怀疑探针,只怀疑一次 | 量到「机制失效」之前先验坐标系与状态假设 | 看到直接改游戏阈值 | 亲历 | ≥7 |
| §1.1 反馈形态 → 真实问题类型 → 第一动作 | 每一类反馈有固定的第一动作 | 看到每次反馈都从「读一遍全部代码」开始 | 亲历 | ≥2 |
| §1.2 一轮试玩该采集什么 | 采集清单要固定,问题要问开放式的 | 看到试玩只问了「好玩吗」 | 亲历 + 公开来源 | ≥2 |
| §1.3 反馈进场的形式 | 反馈可能是一张截图而不是一句话 | 看到用户只发图而没人先拉图看 | 亲历 | ≥3(第九轮四张截图 + 第二十轮四图 + RC 逐条实机回报) |
| §1.4 收尾纪律 | 报覆盖范围 + 声明盲区 | 看到收尾只写「已修复」 | 亲历 | ≥3 |
| §1.6 反面做法 | 不做一次性修复 | 看到 bug 只改了代码没加判据 | 亲历 | ≥3 |
| §1.7 一轮收尾的固定模板 | 模板化收尾,避免漏项 | 看到收尾结构每次都不一样 | 亲历 | 1(单例·降权) |
| §2 静默失效五形态 | 读而未写 / 哨兵未初始化 / 默认回落覆盖断裂 / 接线认错对象 / 依赖实现碰巧正确 | 看到一条「已实现」的机制实际从未触发过 | 亲历 | ≥5 |
| §2.6 正面证据原则 | 任何「功能存在」的断言必须由一次真实触发支撑 | 看到「没报错」被当成合格判据 | 亲历 | ≥5 |
| §3.1 把现象写成可测量的量 | 写不出这个量说明还没理解问题 | 看到「照不亮」被直接改成参数 | 亲历 | ≥3 |
| §3.2 亲历:手电「照不亮」 | 写成八个方向的照度表才现形(衰减在设定距离直接归零) | 看到 10m 外必然死黑而没人量过 | 亲历 | ≥3(连续三轮反馈) |
| §4.1 判决实验 | 构造只差一个变量的 A/B/C,不猜因果 | 看到改一个参数看现象变没变就下结论 | 亲历 | ≥2(torch.html 加第三格) |
| §4.2 同机位 A/B | 两侧同机位,避免构图差异干扰 | 看到两张不同机位的图被拿来对比 | 亲历 | ≥3 |
| §4.3 像素级断言优于存在性断言 | 比底色梯度、钉孔暗点,而不是比「没报错」 | 看到断言只检查对象存在 | 亲历 | ≥2(quests.html 三种纸 + walls.html 底色聚类) |
| §4.4 枚举与聚类 | 枚举全部实例并按可观察量聚类 | 看到抽样三件就下结论 | 亲历 | ≥2 |
| §4.5 写入间谍抓栈 | 对可疑字段装 Object.defineProperty 抓写入栈 |
看到 NaN 出现后只能从头猜 | 亲历 | 1(单例·降权,第十二轮 nanspy) |
| §4.6 先热身再测泄漏 | renderer.info 首次登记会跳 |
看到「八音盒 +154 几何体」被判成泄漏 | 亲历 | 1(单例·降权) |
| §4.7 量到机制失效之前先怀疑探针 | 与 §0.4 同一纪律的取证侧表述 | 看到阈值被按探针读数反调 | 亲历 | ≥7 |
| §5 探针假象清单 | 假干净 / 假回归 / 假全绿等 17 条 | 看到验收环境是 SHOT 模式却拿它判音频 | 亲历 | ≥2(音频层藏 12 轮 + 暂停菜单盖演出) |
| §6.1 每页写机器可读结果 | 结果写进 DOM 再抓,不靠看图 | 看到验收结果靠人眼看截图 | 亲历 | ≥3 |
| §6.2 把「通过」当提交门 | 不通过不提交 | 看到带着 FAIL 提交 | 亲历 | ≥2 |
| §6.3 未证实的改动不提交 | 先跑测试再提交 | 看到接手半成品直接提交 | 亲历 | 1(单例·降权,第十五轮) |
| §6.5 临时探针 → 实证 → 修 → 转正常驻回归页 | 探针的归宿是变成常驻页 | 看到取证脚本用完就丢 | 亲历 | ≥2(stairs.html / walls.html / dorm.html) |
| §6.6 断言跟着设计走 | 旧断言 = 过期文档 | 看到设计改了旧断言还在门里 | 亲历 | ≥3 |
| §6.7 文档与实现里的硬编码数字对账 | 逐条对,不抽查 | 看到新增结局忘了改文档里的「达成结局 N / 4」 | 亲历 | ≥2(sync.html / endcard.html) |
| §6.8 派生产物与源码逐条对账 | 打包产物必须与当前代码同源 | 看到发布用的包比源码旧 | 亲历 | ≥2 |
| §6.10 时间纪律 | 逐页虚拟预算 + 真实超时随预算放大 | 看到单页跑满 480s 还被当成正常 | 亲历 | ≥2 |
| §6.12 不要在验收里 mock 掉要测的东西 | 桩掉 Post.render 会让 DOM 断言永远读到旧值 |
看到验收桩掉了要测的那一层 | 亲历 | 1(单例·降权,RC 终轮) |
| §7.1 卡死的统一形状 | 状态接过去,释放只写在顺利路径 | 看到 cutLock 只在顺利路径上清 |
亲历 | ≥4 |
| §7.2 四道网 | 锁预算 / 停摆看门狗 / 自救键 / 逐帧熔断 | 看到熔断器让画面冻结而不是降级 | 亲历 | ≥3 |
| §7.5 循环外必须有安全网 | 独立线程做心跳监测 | 看到四道网全在主循环内 | 亲历 | 1(单例·降权) |
| §7.6 时序回调必须可取消 | 带代 Token | 看到回检查点后旧结局链把上一张卡漏进新卡 | 亲历 | ≥2(RC 第 24 轮 + 结局链代币) |
| §7.7 诊断页要自己说话 | 打印锁未交还次数 / 自愈次数 / 最坏一帧房间 | 看到报障只有一句「卡死了」 | 亲历 | 1(单例·降权) |
| §8 数值工程纪律 | NaN 闸 / 初值 / 跨形状念字段 / 单一初始化出口 | 看到 Math.max(0, NaN) 当成防护 |
亲历 | ≥4 |
| §9 真人才能给的东西 | 划清边界,不自己代答 | 看到用自动断言替代真人试玩结论 | 亲历 | ≥2 |
| §10 交接文档该长什么样 | 首句定调 / 权威性分层 / 阅读顺序 / 数字带来源 / 决策史当资产 / 坑清单按类分组 | 看到坑清单没有判别条件 | 亲历 | ≥2 |
8 accessibility-and-care.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| §0.1 无障碍是连续滑杆不是开关 | 任何选项若只有关/开两态且不能中途改变,先判不合格 | 看到「无障碍模式」是一个总开关 | 公开来源(XAG 108) | 1(单例·降权,项目内未犯) |
| §0.2 不做「无障碍版恐怖游戏」 | 评审把「关掉惊吓」当默认解法即判不合格 | 看到低闪烁模式直接删掉频闪与巨响 | 公开来源(EA / Dead Space) + 亲历 | ≥2(低闪烁模式降级而非移除) |
| §0.3 警示画面不能替代闪烁管理 | XAG 118:多数玩家首次发作前不知道自己光敏 | 看到只有开场 splash 警示就结案 | 公开来源(XAG 118 / GMAG) | 1(单例·降权) |
| §1.1 闪烁的定义与阈值 | 写清出处与适用边界 | 看到自定义阈值不说出处 | 公开来源(GMAG / WCAG) | 1(单例·降权) |
| §1.3 命名禁令 | 禁止「epilepsy safe mode」类命名 | 看到设置项叫「无癫痫模式」 | 公开来源(GMAG 原文) | 1(单例·降权;项目内作「低闪烁模式」未犯) |
| §2 GMAG 分类骨架 | 四类障碍 × 三层实施级 | 看到无障碍工作没有按受益人数 × 差异 × 成本排序 | 公开来源(GMAG Why and how) | 1(单例·降权) |
| §2 平台披露机制 | Steam 有 Accessibility Feature Wizard,但它是自愿披露 | 看到把标签缺失说成「游戏没有该功能」 | 公开来源(Steamworks 文档 / itch 平台现状) | 1(单例·降权) |
| §3 听觉信息与视觉替代 | 每个关键物件/事件的声音彼此可区分 | 看到两个关键事件共用同一段提示音 | 公开来源(GMAG Basic) | 1(单例·降权) |
| §4 字幕与音频线索的文字化 | 字幕按目标年龄语速裁剪 | 看到字幕语速按成人读速设定 | 公开来源(GMAG Advanced) | 1(单例·降权) |
| §5.1 难度 = 玩家能力 | 提供多档难度且中途可改不丢进度 | 看到难度只在开头选一次 | 公开来源(XAG 108) | 1(单例·降权) |
| §5.3 关掉某系统后口径要一致 | 关掉/调低系统后挂钩的成就与统计不能前后不一致 | 看到关掉某系统后成就文案还在说它 | 亲历 + 公开来源 | ≥2(收集三处口径同源 + 断点续存落盘) |
| §6 镜头运动与感官负荷 | 避免突然未预期的移动;提供关闭背景运动 | 看到镜头强制晃动且不可关 | 公开来源(GMAG Advanced) | 1(单例·降权) |
| §7 健康与合规提示的呈现层级 | 提示下沉到设置页与商店页,不堆在主菜单 | 看到主菜单页脚堆着耳机 / 闪烁 / 键鼠两行 | 亲历 | 1(单例·降权,第二十六轮改成一行免责声明) |
| §8 恐怖游戏无障碍的特殊矛盾 | 用替代通道保留恐怖感,不是移除 | 看到为了合规把核心手法直接删掉 | 公开来源 | ≥2 |
| §8.3 健康保护而非只有无障碍 | 提供保护而非只提供便利 | 看到只在设置深处提到风险 | 公开来源 + 亲历 | ≥2(opt-note + itch 玩家须知) |
| §附 未找到高质量材料的清单 | 未找到即标注,不编造 | 看到引用了查不到的 itch 官方规范 | 公开来源(itch 平台现状观察) | 1(单例·降权) |
9 appendix-threejs-web.md
| 条目 | 判据要点 | 事故形态(看到就要停) | 源自 | 反复次数 |
|---|---|---|---|---|
| A.1 暂时性死区(TDZ) | 关卡构建前半段调用的东西必须是函数声明 | 看到启动即黑屏,被提交门当场拦下 | 亲历 | ≥5(paperMat、renderSaveLine、hidden、PAPER_KIND、办公桌灯) |
A.2 拾取射线不检查 visible |
隐藏的装饰 mesh 会挡掉后面真正的交互物 | 看到盥洗镜常年点不中 | 亲历 | ≥2(第十轮 mirrorSil + 灯罩挡桌面) |
A.3 隐形挡板必须 visible=false |
不能只靠 opacity:0;要淡入淡出的保持可见 |
看到画外面糊出一圈黑框 | 亲历 | 1(单例·降权,第二十六轮) |
A.4 灯不要挂在会被 visible 切的组里 |
用 intensity=0 表达「不在场」 |
看到灯进出场景导致全材质重编译、肉眼卡顿 | 亲历 | ≥2(第九轮 + 第十二轮排查) |
A.5 着色器字面量必须递增、mix() 参数顺序要对 |
字面量倒置是未定义行为,恰好在某个驱动下看着对 | 看到屏幕中线那条线——smoothstep 倒置 + mix() 反了叠出来 |
亲历 | ≥3(本作已三次栽在这) |
A.6 emissive 太亮掉进后期抖动带 |
一块规则的青色圆点阵,一眼假 | 看到落地镜在截图里变成 LED 板 | 亲历 | 1(单例·降权) |
| A.7 程序化贴图一类表面一张画布 | 每片按世界位置取 offset;repeat 不许写死 |
看到地面在门口割裂 | 亲历 | ≥3(第二十一轮墙面 + 第二十六轮地面 + 天花旧账) |
A.8 drawImage(canvas) 读回永远是黑的 |
亮度/像素只能靠截图或 readPixels |
看到用 canvas 读回判亮度,全是 0 | 公开来源 + 亲历 | 1(单例·降权) |
| A.9 改着色器前先证明它编译成功 | programs.length + getError()===0 |
看到 GLSL 语法错让整个后期静默失效 | 亲历 | ≥2 |
| B.1 每帧状态必须初始化 | 新加每帧判定字段一律写进状态字面量并给初值 | 看到 wakeT 没初始化,开局到第一次死亡之前 Q/E 永远睁不开眼 |
亲历 | ≥4 |
| B.2 同一状态多个初始化点会各写各的 | 同一个状态只留一个初始化出口 | 看到 api.checkpoints.x = ... 被后面的字面量覆盖 |
亲历 | ≥2 |
| B.3 接管状态要有持有预算 | 不能只在顺利路径释放;看门狗从不触发才是通过条件 | 看到 onCaught 只清 G.cut 留着 cutLock,死亡期间键盘锁死 |
亲历 | ≥2 |
| B.4 「看门狗全绿」不等于「没有停摆」 | UI 层可见性状态也要有断言 | 看到 e2e 全绿,而暂停菜单盖在数台阶演出上 | 亲历 | ≥2(第九轮回归 + 第十一轮 stairs.html) |
| B.5 共享 DOM 的状态机逐字段重置 | 重入时所有字段都要清 | 看到「清空」只删了 localStorage,本局计数还记着 | 亲历 | ≥2(清空四样 + 结局播放器四层重置) |
| B.6 结局链的定时器必须带代币 | 每次触发掐断上一条链 | 看到回检查点后旧链把上一张卡的营销层漏进新卡 | 亲历 | ≥2(第 24 轮 + RC rc6) |
| C.1 记住 yaw 符号约定 | 朝西=π/2、朝东=-π/2、朝南=π、朝北=0 | 看到探针按直觉写 π,摆出反向姿势 | 亲历 | ≥2 |
| C.2 「她在看我吗」一律用点积 | 指向目标的向量与 forward 直接点积,别随手取负 | 看到背对镜子才累计凝视,人眼盯着看时剪影一动不动 | 亲历 | 1(单例·降权,第十轮) |
| C.3 反射面里的东西放在反射面之前一侧 | 落点按「镜头在哪一侧」算 | 看到剪影在 NX2-0.05 而镜面在 NX2,永远看不见 |
亲历 | 1(单例·降权) |
| C.4 「藏在柜子里」必须真的留出腔体 | 同 A / level §1.2 | 看到拉开柜门只有一块黑面片 | 亲历 | ≥3(第十三轮货架 + RC 终轮衣柜) |
| C.5 把灯挂到场景根后旧行语义全翻转 | 修复后语义必须重推一遍 | 看到她在 x=45 巡逻,光束瞄着地图西端 x≈0 | 亲历 | ≥2(第四轮 + 第十一轮) |
| C.6 搜索循环的哨兵初值以空值起步 | let ch='v' + !ch 恒假短路 |
看到十间房的墙全是走廊灰,逻辑「看起来全对」 | 亲历 | 1(单例·降权,第十一轮) |
| C.7 加房间要改三处 | RAW_MAP / isFloorCh / 两处遍历字符集 |
看到房间存在但没有地板、走不进去 | 亲历 | 1(单例·降权) |
| C.8 网格旋转 π 不换轴 | 判转向用 sin 值的绝对值与 0.5 比较 | 看到五排货架碰撞全部转置,能从两头穿进去 | 亲历 | 1(单例·降权,第二十轮) |
C.9 门的 alongX 语义与几何相反 |
「通道沿某轴穿过这扇门」意味着门板横跨该轴 | 看到一扇门开进墙里、一扇开进房间 | 亲历 | ≥2(初版 + 第二十轮洗浴间隔间) |
| C.10 墙体合并必须在门洞格不砌墙的前提下做 | 合并逻辑要考虑门洞 | 看到门洞被墙填死 | 亲历 | 1(单例·降权,初版「门格砌墙」致命缺陷) |
| C.11 纸片要有独立命中体 | 与它穿过的表面相交会糊出暗边 | 看到水池沿半埋的挡板把画框出黑边 | 亲历 | ≥2 |
| D.1 逐帧断言先打渲染帧回调 shim | 并确认它真在出帧 | 看到 uniform / 眼睑这类每帧量停在初始值 | 亲历 | ≥3(FEEDBACK 记了三处同源误判) |
| D.2 单帧计数与绘制计数分开测 | drawN 跟不上 frameN = 有帧抛异常把渲染吃掉 | 看到帧数在涨而绘制数不涨 | 亲历 | ≥2 |
| D.3 改完代码要换缓存旁路参数 | file:// 与 iframe 会被缓存骗 | 看到截图是改之前的 | 亲历 | ≥2(doorshot.html MODE 与 cb 参数) |
| D.4 headless Chrome 路径与预算 | 要 Windows 形路径;别把路径塞进变量再 "$CH" 展开 |
看到整批 NORESULT 或「截图没生成」而不报错 | 亲历 | ≥2 |
| E.1 zip 条目必须用正斜杠 | — | 看到 itch 上路径全 404 | 亲历 | 1(单例·降权) |
| E.2 改完代码必须重跑打包脚本 | — | 看到发布用的包比源码旧 | 亲历 | ≥2 |
| E.3 HTML5 iframe 里没有平台级退出/重开 | 结局必须自带三层出口 | 看到结局卡没有出口,玩家只能刷新 | 亲历 | ≥2 |
| E.4 剧情与营销不许同屏 | 营销层在结局之后分层出现 | 看到「达成结局 N / 4」和剧情句挤在一起 | 亲历 | ≥2(第 24 轮删宣发行 + 第 20 轮分层) |
| E.5 视口 960×540 进验收页当硬约束 | 实测内容高度进预算 | 看到首行在屏上方外、按钮在屏下方外 | 亲历 | 1(单例·降权,结局卡 691px) |
| E.6 结局按钮三层出口 | 出口 position:absolute 钉死,多次采样位置完全相同 |
看到逐行淡入的字把出口按钮顶走 | 亲历 | 1(单例·降权,RC 终轮) |
| E.7 合规文案下沉 | 剧情页不放免责声明 | 看到结局卡底部挂着空的宣发行壳 | 亲历 | ≥2 |
| E.8 清空类操作要列全字段清单 | 存储 + 运行态 + 展示态一起清 | 看到「清空」之后 HUD 计数还记着 | 亲历 | ≥2 |
| E.9 跨局持久化按「永久资产」设计 | 读到即落盘;同一事实只留一个动词 | 看到菜单 14/19、暂停页 15 份、「还缺 4」与「还缺 5」同时成立 | 亲历 | ≥3 |
10 高强度条目与覆盖审计
高强度条目(亲历且反复 ≥3)
按反复次数降序。这十几条是这个领域最高频的真实问题,优先按它们做检查;其余条目的存在不意味着它不重要,只意味着它在这个项目里没有同等多的样本。
| # | 条目 | 反复 |
|---|---|---|
| 1 | 先怀疑探针,再怀疑游戏——只怀疑一次(SKILL 六.3 / 验证 §0.4、§4.7) | ≥7 |
| 2 | 朝向与几何语义:门 / 货架 / 桌 / 板 / 挡板(空间 §4、§5 / 附录 C.9、C.8、C.1、A.3) | ≥5 |
| 3 | TDZ:前半段调用的东西必须是函数声明(附录 A.1) | ≥5 |
| 4 | 静默失效与正面证据(SKILL 六.1 / 验证 §2、§2.6) | ≥5 |
| 5 | 卡死统一形状:释放只写在顺利路径(SKILL 六.4 / 验证 §7.1) | ≥4 |
| 6 | 数值字段初值必须是数(SKILL 六.9 / 附录 B.1) | ≥4 |
| 7 | NaN 不受钳制保护(SKILL 六.8 / 验证 §8) | ≥3 |
| 8 | 「按 F 没反应」拆成三个不同 bug(SKILL 三.4 / 验证 §0.2) | ≥3 |
| 9 | 真腔体:实心箱 + 黑面片假装内部(空间 §1.2 / 附录 C.4) | ≥3 |
| 10 | 悬空 / 接触阴影挂进收口(空间 §1.1 / 空间 §0) | ≥3 |
| 11 | 规则 ↔ 机制双向覆盖(SKILL 一.2 / 机制 §10.1) | ≥3 |
| 12 | 一类表面一张画布 + 按世界位置取偏移(空间 §1.3 / 附录 A.7) | ≥3 |
| 13 | 断言跟着设计走(SKILL 八.6 / 验证 §6.6) | ≥3 |
| 14 | 测量先于调参(SKILL 六.2 / 验证 §3) | ≥3 |
| 15 | 物体上只许有它物理上真有的东西(SKILL 四.8 / 文本 §8) | ≥3 |
| 16 | 数字口径只留一个数据源(SKILL 三.3 / 附录 E.9) | ≥3 |
| 17 | 逐帧断言先打渲染帧回调 shim(附录 D.1) | ≥3 |
| 18 | 旁白只在画面给不出信息时说话(SKILL 四.1 / 文本 §1) | ≥3 |
| 19 | 关门买时间不是脱战 / 门的朝向与碰撞(空间 §4) | ≥3 |
覆盖审计
计数规则:一行只归一档,按「源自」列的首要标注计(「亲历 + 公开来源」这类双标注计入亲历,因为它的论证基础是本项目的事故)。
| 篇 | 条目数 | 亲历 | 公开来源 | 自建框架 | 其中单例·降权 |
|---|---|---|---|---|---|
| SKILL.md(六章 + GOTCHAS + 术语) | 66 | 53 | 12 | 1 | 20 |
| fear-design.md | 20 | 7 | 13 | 0 | 11 |
| text-and-props.md | 16 | 16 | 0 | 0 | 4 |
| mechanics-and-rules.md | 24 | 15 | 1 | 8 | 8 |
| threat-ai.md | 14 | 3 | 11 | 0 | 9 |
| level-and-space.md | 26 | 12 | 14 | 0 | 14 |
| verification-and-forensics.md | 39 | 39 | 0 | 0 | 7 |
| accessibility-and-care.md | 16 | 2 | 14 | 0 | 12 |
| appendix-threejs-web.md | 39 | 38 | 1 | 0 | 11 |
| 合计 | 260 | 185 | 66 | 9 | 96 |
说明:
- 公开来源集中在两篇。
accessibility-and-care.md几乎整篇是标准与平台文档(GMAG / XAG / Steamworks / itch),项目内只有低闪烁模式、健康提示下沉、收集口径一致三条亲历。fear-design.md反过来,绝大部分结论来自工作室复盘与论文,项目内只提供了首遇纪律与走廊循环两种实现形态。这两篇的证据强度性质完全不同:前者是「照标准执行」,后者是「照他人结论推断」。 - 自建框架全部集中在
mechanics-and-rules.md第 10 章,共 9 条已标「自建框架」,另有该章首条§10本身即框架声明;已在正文显式标注「自建框架」并在SKILL.md附:来源与可信度 里写明「规则怪谈的可玩化没有高质量公开方法论」。使用这一章时按推导读,不要按「行业共识」引用。 - 单例率 37%(96/260)。主要集中在
level-and-space.md第 2 章灰盒纪律(7 条全部单例——项目用的是逐件建模,没有灰盒 kit 实践)与accessibility-and-care.md(该篇的纪律是标准驱动的,不需要事故来证明)。这两处的单例不代表纪律弱,只代表它们是「照标准做」而不是「踩过坑才写」。
孤儿条目检查(存在但找不到对应事故):
mechanics-and-rules.md§10.2、§10.3、§10.4、§10.6、§10.7、§10.9 共 6 条属自建框架,无一手事故可指认——已在正文标注,不是隐藏的孤儿。SKILL.md二.1、二.3、二.4、二.6、二.7 共 5 条亲历档但项目内无对应事故,它们实际支撑来自公开来源;标为「单例·降权」是因为在本项目里只发生过一次或零次。其中二.4(惊吓是标点)与二.7(不要线性)在项目内零次——本作走的是 26 轮里惊吓密度不高、空间线性推进的路线。- 其余条目全部可指认到
HANDOVER.md坑清单、FEEDBACK.md各轮结论、BIBLE.md成文规则,或三份会话导出的用户输入段。无未标注的孤儿条目。
反过来说,一处覆盖不足值得记下来:项目内没有任何一次「情节叙事本身出戏」的反馈——三次记录了「玩家像水一样流向阻力最小的路径」,但那是 Demo 定位问题,不是叙事问题。所以 SKILL.md 里关于叙事与线索投放的纪律(机制 §13、fear-design §17)证据最薄,属于从别处借来的结论,不是这个项目教出来的。