「忘忘同人小游戏」是《忘却前夜》的同人小游戏合集,首页(index.html)列出全部项目。这一页讲的是战报侦探(detective.html);同一个合集里还有已经能玩的合成大杜勒(merge.html,合成大西瓜的玩法,10 级头像从小煤球一路合到杜勒赛因)和挂机前夜(idle/index.html,四人小队自动战斗,14 个页面按功能收进 5 个分组,涵盖推图、周本 Boss、属性塔、竞技场、成就与签到;战斗页明示当前关与下一关的挂机收益,打不过的关会自动退到「有收益的最高层」继续刷,关掉自动即手动挂机;养成分等级 / 突破 / 叠位(上限 99)三档,另有造物羁绊与钥令配置;技能文本按客户端真实数据实装,角色可看官方素材完整立绘,各页用原作典藏馆 CG 做背景),以及校猫的结合(binding.html,以撒的结合的玩法,主角换成弥萨格校猫,三档难度(三层 / 五层 / 八层)、泪弹射击,捡到的造物会一件件挂到猫身上,还有一个自动攻击开关),以及弥萨格大逃杀(deathreport/index.html,钥冢里的三届阵亡档案:键入记录名复原卷宗、对名册与地图核对地点,最后交死因 / 凶器 / 加害人三份报告;还能自己写一份卷宗挂到云端,让别人来查);后来加的自走棋玩法是忘却协议(protocol.html,六边形棋盘上摆唤醒体守十二波,商店、三合一、界域与职阶羁绊,见下面「忘却协议」一节)。是鸟弟就下100层(bird.html)是后来加的动作向小游戏,讲起来话长,单独放在下面「是鸟弟就下100层」一节。

怎么玩

  1. 每道题是一份匿名的融灾战报:区域、回合数、出牌数、单回合最高伤害、伤害构成,以及队内 4 人的伤害、格挡、治疗。
  2. 队员按伤害从高到低标为 A–D 位。你要在对应位置填入唤醒体,以及(取决于难度档)命轮、密契、钥令、启灵和造物。
  3. 提交后:🟩 位置/归属正确;🟨 在队内但放错了位置或装在别人身上;⬛ 不在队内。启灵分 8 档(0启~3启、+1~+3、超限、+5~+11、+12),用 ↑/↓ 提示偏高偏低,相邻一档显示黄色。
  4. 最多提交 6 次。卡位上的「提示阵营」「提示定位」「提示等级」和队伍级的线索台都能帮你缩小范围,按条扣银芯(银芯靠答对获得,见下)。难度档越高,同一条提示越贵:进阶 ×1.25、老手 ×1.6、大师 ×2,卡上标注的就是你这一档的实价。
  5. 即使只猜唤醒体(入门档),结算时也会给出完整的命轮、密契、钥令、造物与唤醒体属性,方便学习完整配队。

难度档与难度分

忘却前夜配队规则(给圈外人)

账号与个人中心

账号登录复用 Waline 的现成服务(和 忘忘看报 用的是同一套);积分、解锁、推理记录、工坊题库与点赞存在本站自己的后端(跑在 EdgeOne 边缘函数上,代码在仓库 edge-functions/),换设备登录即可恢复。

图鉴与关键词

图鉴收录全部唤醒体(含技能、天赋、启灵、衍生卡牌与推荐配置)、命轮、密契、钥令、造物与怪物。文字里的状态与机制会显示为带图标的小标签:悬停可看说明,点击可展开详情,并一键跳转到「包含该关键词」的条目列表。顶部的「关键词」页收录了全部 100 个关键词。

中英文对照以官方中文为准:名称与术语优先取自中文维基、官方游戏文本表(Morimens-Localizations)与游戏客户端配置;关键词详情里会标注译名来源,凡未在官方文本中核实的会标为「非官方译名(站内译)」,仅供参考。

银芯、提示与解锁

失败题库

一道题用尽 6 次提交仍未答对,就会标为「失败」并移出出题池——它不会再随机出现,每日一题遇到失败题也会顺延到下一题。失败题库面板保留这些题目的答案(含完整队伍、命轮、密契、钥令、造物与回放),所以失败的题仍然可以点开当「复盘」学习,只是不能再作答。

CG 典藏馆

典藏馆收录了从中文维基整理的全部官方 CG(438 张,另有 7 张在维基上已失效),按「典藏馆 / 主线剧情 / 特遣记录 / 动态绘卷 / 场景 CG / 其他」分组。未解锁的图以模糊缩略图呈现,点击按分组价格扣银芯解锁(典藏馆 60 / 动态绘卷 55 / 特遣记录 45 / 主线剧情 40 / 场景 30 / 其他 30)。解锁状态存在本地,终身有效。

大图支持左右翻页(键盘 ← / →)与「查看维基原图」,每张图都保留了灰机 wiki 的原始文件名,方便溯源。顶部还能按标题/文件名搜索(官方 CG 文件名里带章节编号,例如「C09 012」)。

背景主题:解锁任意一张 CG 后,卡片和放大视图里都会出现「设为背景」。点一下,这张图会成为全站背景(只做 3px 柔化,看得清是哪张图;可读性交给卡片底面上的实心面板色与暗角),同时按它自己的主色重新生成整套 UI 配色(底色、面板、边框、文字、强调色、金色),卡片上还有随主题变色的细金线与斜纹。全站六个页面一起生效,存在本地,下次打开还在。构建期已经为 438 张图各算好一套配色(scripts/build_themes.py,其中 407 张是深色系、31 张是浅色系),切换是即时的。再点一次「背景使用中」即可恢复默认。

创意工坊

「工坊」让你自己出题:

回放与复盘

答对(或在失败题库里查看)之后,结果面板会给出该局的官方回放地址:

推理思路示例

数据说明

战报来自公开的融灾排行榜(第 70、71、72 期),玩家 UID 已去除。同位置的辅助型角色在数据上难以唯一确定,所以评分按字段命中率计算,不要求一次性全对。答案已做混淆封装,但纯前端站点无法真正防作弊。

技能数据来自 SKeyDB(CC BY-NC-SA 4.0,仅限非商业使用);官方中文对照来自 Morimens-Localizations 与 忘却前夜中文维基。

状态/机制图标取自 SKeyDB 的战斗图标库(Battle_Card_Buff_*、界域徽记 realm-badge-*),按官方 iconId 与词条映射,共 30 个图标覆盖 39 个常用关键词;没有官方图标的词条仍用文字字形显示。CG 与唤醒体档案(生日、身高、体重、诺斯指数、获取途径、语音)来自中文维基的角色条目与图片库。回放指向官方战报服务与忘忘看报复盘工具,本站不转存战斗数据。

合成大杜勒用的是同一套唤醒体头像与剧情角色头像(小煤球),10 张图在构建时内联成一个模块,游戏本身不额外请求图片。合成链固定 10 级,终点永远是杜勒赛因 —— 四档难度(简单 / 普通 / 困难 / 癫狂)只动三件事:投放池里大球的比例、警戒线压得多低、越线之后还能撑几秒(2.6 / 1.7 / 1.2 / 0.9 秒),谁也别想靠选简单档换个更小的终点;简单档把诺缔拉(8 级)直接移出投放池,省得新手一上手就接到一颗塞不进去的大球。实测下来,难度主要靠「大球比例」拉开而不是只靠警戒线:警戒线压掉 2% 屏高,乱投 260 颗的机器人照样不判负(球一直在被合掉,堆不上去);真正让人手忙脚乱的是手里接连来 6~8 级的球。出球用洗牌袋轮转,同一级不会连着出三颗。手里这颗不合适时按「随机」可以换成前几级的随机一颗,次数按难度递减(6 / 5 / 4 / 3 次),用完为止 —— 它救急,但不能当外挂。球与球之间是「硬分离」的:每个渲染帧在软解算之后再推一遍位置,把圆心距拉到半径和为止,被墙或瓶底顶住的一方会把推力让给对方,所以球堆挤在一起时也不会出现两块头像插进去的情况。球堆顶离警戒线不到屏幕高度的 10% 就开始橙色预警,真过线后进入倒计时(红色 + 进度条 + 滴答),期间把堆压下去就没事。

每局结束按分数换银芯,和侦探页共用同一个钱包:150 分起步(2 枚),12000 分封顶(55 枚),中间 350 / 700 / 1200 / 1800 / 2600 / 3600 / 5000 / 7000 各有一档;再乘难度倍率(简单 ×0.8、普通 ×1、困难 ×1.6、癫狂 ×2.5),所以同样是 1800 分,普通给 15 枚、癫狂给 37 枚。结算会直接告诉你差多少分可以上一档。最高分按难度分开记(本机键 zjtt:merge:best:<难度>),全难度最高分仍然写在账号档案的 mb 字段里(本机键是 zjtt:merge:best,与旧存档兼容),换设备登录后会自动接上;游戏页本身不依赖账号也能玩,同步是在游戏跑起来之后才去连的。

是鸟弟就下100层(bird.html)玩的是「是男人就下一百层」:镜头一直往下滚,平台踩上去就开始塌,走慢了会被头顶的尖刺顶住,掉太急会扎进井底那排尖刺(底刺贴着画面底部,掉得比镜头快就会被它追上),目标是下到第 100 层。主角是波吕克斯(鸟弟)——角色直接用维基上的战斗立绘:站着播待机呼吸,左右移动和腾空时播攻击动图(原来那两张 Q 版小人是单帧静图,跑起来像根木棍,所以换掉了),头像进 HUD,技能演出直接用维基上的战斗 / 行动动图:待机、打击、技能 1、技能 2、防御、狂气爆发、觉醒共 7 段,对应「掠影斩(突进撞碎沿路怪物)」「碎星坠(清掉视野里的怪物,顺手把尖刺台拍平)」「圣翼护(回血 26 加六秒减伤)」「狂气爆发(四秒清场,平台不塌)」和一个踩敌人时的打击小演出。这 7 段动图原本是 9 个 1~7MB 的 gif、加起来 38MB,各自请求一次的话,在本站「每个请求固定 1~2 秒」的边缘上开局就能卡半分钟;scripts/build_bird_art.py 把它们抽帧、缩到 220px 高、拼成一张 849KB 的雪碧图(134 帧),构建脚本再内联成 data URI,所以整个游戏页仍然只有一个脚本请求。

难度曲线不是一条直线:每十层一段,段首是喘息层(平台宽 45%、不刷怪、必掉一件恢复品),段尾两层是关卡层(平台窄 14%、普通台有一半概率换成脆台、必定刷一只怪)。层数难度本身也做了非线性处理(t 开 1.3 次方):前 25 层只是热身段、中间四十层是主菜、最后 35 层才开始真的压人 —— 线性递增的话前十层就已经窄到站不住,新手活不过第一个十层。尖刺台另有连段上限:连着两层各有两块以上尖刺台之后,第三层不再添刺,否则会生成「三整层全是刺、没有一个落脚点」的无解排列。层距 100px,镜头下滚速度从 68px/s 涨到 100px/s。血条 100 点(简单档 120 / 癫狂 90),狂气靠下潜(每层 +3)和击破怪物(+7)攒,四个技能各有消耗与冷却。层数只认镜头推进到的深度——你比镜头蹿得快的那几层不算分,还会扎在井底尖刺上,所以一路按 ↓ 往下蹿是纯粹的亏本买卖。分数按到达的层数累加:每层 10 分,每过十层再加 5×层数档,击破怪物按种类给 25 / 30 / 40 / 45 / 50 分,满 100 层直接结算。

四档难度(简单 / 普通 / 困难 / 癫狂)只动环境参数,不动操作手感 —— 跑速、跳跃、终端下坠速度四档一模一样,难在你面对的是什么样的塔,而不是人物变笨:滚速 ×0.70 / ×1.00 / ×1.26 / ×1.52,平台宽度 ×1.20 / ×1.00 / ×0.87 / ×0.76,尖刺台权重 ×0.45 / ×1 / ×1.50 / ×1.90,怪物密度 ×0.5 / ×1 / ×1.45 / ×1.90,受伤 ×0.70 / ×1 / ×1.25 / ×1.50,掉落率 ×1.40 / ×1 / ×0.85 / ×0.72,血上限 120 / 100 / 100 / 90;计分反过来 ×0.80 / ×1 / ×1.40 / ×1.85,难档的分本来就该更值钱。四档各建 30 座塔取平均(每座 100 层):平台均宽 84 → 70 → 61 → 54px,尖刺台占比 2.5% → 5.8% → 8.3% → 10.0%,怪物从 28 → 38 → 44 → 52 只,掉落物从 45 → 37 → 33 → 30 件,蹦床每座塔稳定 12~13 块,镜头初速 48 → 68 → 86 → 103px/s。段首的喘息层均宽 128 → 107 → 93 → 81px、段尾的关卡层 73 → 61 → 54 → 47px——同一段里从「能站住」到「必须踩准」的落差一目了然。纪录按难度分开记(zjtt:bird:bestLv:<难度> / zjtt:bird:best:<难度>),账号档案的 bb / bs 写的是普通及以上三档的最大值(本机键 zjtt:bird:bestLv / zjtt:bird:best,与旧存档兼容);简单档是练习档,只记在本机、不上云,否则一局 100 层就把云端纪录顶死了。

井里的五种怪物全部是《忘却前夜》原作的,名字、图鉴描述、立绘都照搬 data/dictionary.json 的 monster 表:融蚀鼠王(第 5 层起,「沾满融蚀的尾巴将它们粘合在一起,痛苦却无法分离」,在台面上左右爬,能从上方踩死)、提灯(第 14 层起,「提灯教会象征物的具象化」,浮在半空按正弦上下飘、横着巡满整个视野,落点算不准)、吟诵者(第 30 层起,「永恒之国的虔信者」,只要你在它下方就每隔两秒打出一颗音弹)、自爆脓疱(第 38 层起,「眼球状的黑色脓泡怪物,总感觉要爆裂开来」,踩不破,靠近就开始鼓胀、0.45 秒后炸开,跳开才算躲过 —— 躲开了给分,硬顶着挨炸不给)、融蚀野犬(第 62 层起,「它的攻击迅猛而连续」,行为和鼠王一样但快一倍)。五张立绘是 scripts/build_bird_mobs.py 从 assets/monster/ 里裁掉透明边、缩到 86~94px 高、横向拼成一张 465×102、19KB 的雪碧图,构建时和角色动图一起内联,游戏页仍然只有一个脚本请求。每种怪物第一次出场时,顶部的提示条会报一次名字和它的脾气 —— 玩家是在挨打的那一刻才真的记住「这玩意儿不能踩」。七种掉落物:血羽(+20 血)、大血羽(+45 血,越深越常见,外面套一圈脉动光环)、狂气晶(+18 狂气)、护盾(3.2 秒无敌)、羽落(4.2 秒内重力只有四成、终端速度砍半,用来从高台安全落到下一层窄台)、星屑(+150 分,再乘难度倍率)、净化(清掉视野里所有怪物,另送 20 狂气)。踩死怪物有 35% 概率掉狂气晶 / 星屑 / 羽落其中之一。蹦床跳板是这次新加的第八种平台:台面上一排青色弹簧圈加一个朝上的箭头,踩上去以 1120px/s 弹起,约合四层高。它换的不是「白送你四层」—— 镜头只往下滚、上面永远有顶刺压着,所以它换的是一次把「掉太快」拉回来的机会:当你一路猛掉、快扎到井底尖刺时,踩一块蹦床就能把超前的距离抵掉,代价是可能被顶刺扎一下。主路径平台有 9% 概率是蹦床,侧边平台按权重另算(6% 起,越深越多)。

界面按「一眼看懂」重排过:血条做成一条 26px 的粗条,左边挂波吕克斯的头像(血掉到三成以下头像框会红着跳),低于三成时画面四周泛红;狂气条压在技能盘正上方、宽度和技能盘对齐 —— 狂气就是技能的钱,放在一块才不用来回看;条上还有四道刻度,正好是四个技能的消耗线。四个技能按钮不再只写一个字,而是「名字 + 消耗」,冷却时压一层扇形遮罩并显示剩余秒数,够不够狂气看边框颜色(亮边=能放,暗掉+红字=钱不够)。放技能时画面顶部会挂一条「技能名 + 这一下到底干了什么」(比如「碎星坠 / 击破 3 只 · 拍平 1 块尖刺台」),血条下面那排状态条则实时显示减伤 / 护盾 / 羽落 / 清场还剩几秒。技能本身的视觉也分开了:圣翼护是绿色实心罩,护盾道具是青色虚线环,狂气爆发期间画面泛紫并带倒计时。开始卡和暂停卡里都有「玩法速查」,把四个技能、五种怪物、七种掉落物和难度差异一次写清。

本机存档:最高层数与最高分按难度分开存(zjtt:bird:bestLv:<难度> / zjtt:bird:best:<难度>),当前选的难度存在 zjtt:bird:diff;和合成大杜勒一样,不登录也能玩。

校猫的结合(binding.html)是以撒的结合的玩法:房间地牢、泪弹射击、三档难度——简单打到三层、困难五层、癫狂八层,地形是同一栋楼(晚自习走廊 / 解剖教室 / 蜡像馆 / 天台与梦 / 锅炉房 / 大礼堂 / 长明礼拜堂 / 融蚀深渊),只是敢走多深不一样:三档的终点各是一个不同的首领(三层是查泰德夫人、五层是扳手杰克逊、八层才是万物寂灭),结局也各写了一段。每层末尾坐着一个首领,一共 8 个首领。数值也跟着档位走:简单多两颗心、怪血量 ×0.78、伤害 ×0.6、掉落 ×1.25;癫狂反过来,怪血量 ×1.3、伤害 ×1.4、掉落 ×0.85,分数 ×1.6。怪物全部是游戏自带的:一层的提灯教众 / 融蚀野犬 / 协作型融蚀体,二层的手术医生 / 蜡像绅士 / 双生脓疱,三层的蜡像绅士 / 手术医生 / 双生脓疱 / 「永恒助祭」,四层(精英)的奔袭之足 / 「永恒助祭」/ 维度猎手,五层的奔袭之足 / 维度猎手 / 手术医生 / 双生脓疱,六层的蜡像绅士 / 「永恒助祭」/ 维度猎手 / 奔袭之足,七层的「永恒助祭」/ 奔袭之足 / 维度猎手 / 双生脓疱,八层的奔袭之足 / 维度猎手 / 「永恒助祭」/ 双生脓疱;首领是「守灯人」「劳伦斯先生」「查泰德夫人」「以眼还眼」扳手杰克逊「大魔术师霍迪妮」「审判」的使徒「万物寂灭」,全都能在 data/boot.json 的 dict.monster 里逐条查到(唯一的例外是米酒:图鉴里没有这只怪物,Q 版头像照着 B 站头像画,见 assets/monster/Portrait_Small_Monster_mijiu.webp;他不属于任何一层,只站在图纸间里验收,血按层数涨,招式是召唤 / 散射 / 环射,打死给一件造物)——名字、英文名、图鉴描述照原样,立绘就是图鉴那张 Portrait_Small_Monster_*(160×160,构建时内联),只有数值和 AI 是地牢需要的(原作是回合制,首领招式有环射 / 散射 / 召唤 / 蓄力冲 / 螺旋 / 落弹六种,按 atks 表循环,血量掉到 45% 以下进第二形态、出招更密)。房间有七种:战斗、宝箱、商店、祭坛(东西白拿,代价是半颗心,血不够就碰不动)、挑战(这一层的精英挤在一间,清完一次给两件造物)、图纸间(二层起每层一间,米酒在里头验收这一层;门是通的,不想打就绕过去,打赢给一件造物)、首领。残血有明确标识:小怪血量掉到 35% 以下时头顶挂红条、血条外圈发亮、身后一团红色心跳光;首领血条掉到 30% 以下整条变红并显示百分比(拾取卡片弹出时血条会自己抬上去,不被挡住);猫自己只剩三分之一血时,画面四边泛红随心跳起伏、HUD 上那几颗心开始跳、耳朵里能听见「咚·咚」。主角是弥萨格校猫——就叫弥萨格校猫,官方只给了两张 96×96 的方图(story-小煤球.webp 与 story-小煤球二世.webp,文件名是素材原名),既没有动作帧,也不带透明通道,所以猫不是画出来的,是算出来的:逐像素读原图亮度,先按亮度做一次抠图(smooth(0.24, 0.46, L))把方形暗底切掉、留下猫头,再把亮度重映射到「暗 / 中 / 高光」三段调色板 —— 换一组三个颜色,同一张图就变成另一种毛色;躯干、耳朵、尾巴、影子、胡须和一双发光竖瞳是程序化补上去的,所以无论选哪种毛色它都还站得住、一眼是猫。毛色 9 种、瞳色 6 种、造型 7 种,共 378 种组合,每种合成一次后缓存在离屏 canvas 里,每帧只画一次位图。造型不只是换一张脸:BUILDS 里六个基础模型各是一套骨架参数——躯干的宽窄高矮与「上窄下宽」的收分、前爪的大小与间距、五种耳朵(尖 / 圆 / 缺角 / 折耳 / 耳尖一撮毛)、五种尾巴(上卷 / 短竖 / 下垂 / 蓬松 / 只剩一个球)、毛边强度、眼睛缩放、呼吸幅度。幼猫把身子整体缩小而头不动,于是头显得大;老校猫瘦长、一只耳朵缺了角、胡须垂到地上;胖校猫横着长、底盘压低;长毛沿轮廓蓬出一圈不规则的边;折耳的耳朵塌在头顶,尾巴只剩一个球。所有挂件仍用同一套素材坐标(0..96 是头像那张方图,地面在 104),所以换模型不会让帽子和项圈跑位。

造物是画上去的,不是贴图标:34 件造物、8 枚密契、10 张钥令,每件造物对应一个绘制函数(披风、纸伞、光环、眼镜、单片镜、提灯、项圈铃、尾环、礼帽、面纱、挎包、肩上的乌鸦、嘴里的烟斗、前爪的戒指、飘着的风铃……),在「素材空间」里按猫的身位分成「身后」与「身前」两层排序绘制,捡到一件身上就多一样东西,捡满一局会看到猫被挂成一棵圣诞树。10 张钥令是十个不同的办法:瞬移、环爆、分身、减速、3 秒免伤、贯穿重弹、全房中毒、连锁雷光、白拿一件造物、回两颗心——开局优先发还没见过的,前十局一局一个。首领不做小怪化处理:真实立绘封在一个会转刻痕的圆框里,压在房间上方。全部 73 张图(34 件造物 + 8 密契 + 10 钥令 + 9 种怪物 + 9 个首领 + 2 张猫 + 银芯)在构建时内联进 js/binding-art.js(约 418KB),所以这一页同样只有「页面 + 一个脚本」两个请求。键鼠(WASD 走、鼠标瞄准)与双摇杆触屏都能玩,另外有一个自动攻击开关(右下角那颗「自动」,键盘 F):开着的时候猫自己锁最近的敌人并持续开火,玩家只管走位,手机上一只手就能玩;状态存在本机、下次打开还是上次选的。解锁进度存在 zjtt:binding。

剧情与世界设定:这一页现在有一条完整的线——开场、每层下来的过渡、八个首领出手前各一段、打完前七层各一段、通关一段,共 25 场、148 句,打字机逐字推进(h / 空格翻页、Esc 跳过)。世界条目与造物档案的原文取自官方剧情与收藏馆(1248 段组 / 50457 条 AVG 台词 / 1174 条收藏馆条目 / 77 位唤醒体档案),例如「银芯」用的就是收藏馆原句「生命被融蚀侵蚀后,极小的概率会析出一种类银物质」;校猫掉进地下、最深处走到融蚀深渊再从天台爬出来的那一夜(简单 / 困难两档在中途就回头了,各有各的收尾),则是我按原作已经给出的规则新写的同人部分(怪物与首领不是,见上一段),设定集里能分得清哪些是原作、哪些是这一夜发生的事。设定集(标题页或暂停菜单里打开)收 23 条世界观与 52 件藏品档案,解锁条件复用关卡进度,开局就能读最基础的 4 条。「小煤球」那条世界条目不删:原作里它本来就是个名号(谁在校门口待得最久谁就是,前两代还是海獭),这一代的校猫只是不答应这个称呼而已。十个场景(走廊 / 解剖教室 / 蜡像馆 / 天台 / 锅炉房 / 大礼堂 / 礼拜堂 / 融蚀深渊 / 天亮 / 标题校舍)全是 canvas 现场画的,BGM 与音效是 WebAudio 现场合成的,八层楼各一套和声走向(走廊 A 小调、教室 D 小调、蜡像馆三拍子圆舞曲、天台最稀疏、锅炉房走机械方波、礼堂是三拍子但更快、礼拜堂只走和弦、深渊只有低频长音)——加一张背景图、一段音频都意味着多一次 1~2 秒的边缘往返,所以这一页到现在还是「页面 + 一个脚本」两个请求。

唤醒体幸存者(survivors.html)是吸血鬼幸存者的玩法:只带出生技进场,其余武器靠升级三选一捡。技能池是 62 名唤醒体的 Skill1 / Skill2 全部 124 条,按「弹道 / 近身爆发 / 环绕 / 召唤 / 传导 / 治疗 / 护盾 …」自动归到 12 种原型,同一原型共用一套开火逻辑,伤害、冷却、段数、范围则按各自的原文数值缩放——所以同是「单发弹道」,校猫的一发和杜勒赛因的一发手感并不一样。掉落池是造物(可叠 3 层)与命轮(3 分钟后才开槽),造物与命轮的词条直接读 data/boot.json 里的原作数据。美术素材全部来自仓库自带资源:62 张唤醒体头像、18 只小怪、42 件造物、18 枚命轮、9 个契物在构建时拼成一张 960×2280 的图集并内联进 js/sv/gen.js,整局游戏零图片请求。一局 15 分钟,每 70 秒一只精英,3 / 6 / 9 分钟各刷一个首领,结束按分数换银芯。

忘却协议(protocol.html)是自走棋的玩法,战场做成六边形:棋盘 6 列 × 5 行、前 4 列归你摆,后 2 列连同画面外那条缝是影怪的来路。商店每波免费换一批,货架只摆 1★(抽卡只看费用,不看星级),同一名唤醒体凑三个合成 2 星、再凑三个合成 3 星 —— 3★ 之后星级没有上限(3★ 起每星再 ×1.8,4★ ×6.12、5★ ×11.0),升星送命轮 / 造物;备战席开局 8 格,能花金币扩到 14 格,专门用来堆同名材料;上场人数上限就是人口等级(2~8 级,每级 5 金),等级越高商店里高费唤醒体越常见。场上唤醒体按界域(血肉 / 深海 / 混沌 / 超维)与职阶(伤害 / 防御 / 辅助)各算一遍人数,凑够 2 / 3 / 4(或 2 / 4 / 6)就开一档;狂气条满了自动放大招,大招分单体爆发、范围、治疗、护盾、加速、眩晕六种。影怪从右侧按通道走进来,撞到人就对砍,走到底就扣协议核心的血,十二波守住算通关,每局按得分换银芯(与其它项目同一个 zjtt:credits 钱包)。开局还可以选无尽关:前十二波一样,之后进入「回响」——每十二波一轮,敌人数量一轮比一轮多(第 1 轮 +2、之后每轮 +3,最多 +22 只)、出场间隔一轮比一轮紧,生命与攻击在原来的线性之上再乘复利,赏金也跟着波数涨。没有波数上限,只有核心归零才结束;首页榜单只按无尽关的最深波次排。

单位卡里的每个数字都带了词条:属性名(生命 / 攻击 / 攻速 / 护甲 / 射程 / 暴击)和「机制」小标签(中毒、溅射、反弹、穿透、击杀叠加……)都是按钮,点一下就地展开,写清三件事:这一条怎么算(公式与口径跟代码一致)、什么时候有用、谁会提供(哪件命轮、哪个组织、第几档)。点「完整说明」会打开右侧的详情面板,底栏「图鉴详情」里按属性 / 机制 / 规则三类列出全部 33 条,从角色资料也能一路点过去:属性 → 词条、羁绊 → 词条。羁绊详情还会写明「生效范围」和「再上几个人到下一档」。

现在能上场的唤醒体是全部 62 名:数据没有手写 62 条,而是 scripts/gen_protocol_units.py 从 data/survivors-data.json 派生的 —— 名字、界域、职阶取自同一套档案(两个小游戏对同一个角色的判断不会打架),费用按稀有度与哈希排名分配,大招直接拿角色第一把武器的名字与描述,类型按武器的 proto 映射到单体 / 范围 / 治疗 / 护盾 / 加速 / 眩晕六种。手调过的那十几条会被脚本保留,加 --fresh 才整体重算。立绘仍是一张内联图集(scripts/build_protocol_art.py 抽帧、按全帧 alpha 并集裁剪、流式拼图),62 人 × 待机 / 打击各 6 帧 + 头像 + 15 种怪物,1539KB,页面还是「HTML + 一个脚本」两个请求。

命轮与造物作为装备进场:切商店的第二个页签买,进了装备栏后点一件再点棋盘上的立绘就装上,每个唤醒体各带一件命轮(纯数值:攻 / 血 / 攻速 / 暴击 / 吸血 / 减伤 / 射程)与一件造物(带机制:追加真伤、反伤、追击、击杀叠攻、每 8 秒回血、大招联动……)。名字都取自原作的命轮与造物,效果是这套玩法自己的。装备还能反过来喂经济:合成 2 星送一件随机命轮 + 1 金,3 星送一件随机造物 + 2 金与一个独立额外商店(原商店保留,随时可返回),升级人口返 1 金且不刷新商店 —— 池子扩到 62 人之后三合一变慢,这几条奖励是让「攒同名」仍然值得的主要动力(另外商店抽人对已拥有的角色加了权重,纯均匀抽几乎凑不齐三个同名)。

地形每局不一样(同一个种子能复现,无头回归才有意义):可部署区里随机撒 2 块高台(射程 +0.6 格、攻速 +10%)、1 块祭坛(狂气获取 +70%)、2 块裂隙(攻击 +18%,但受到伤害 +12%)和 3 块岩壁(不能部署,那一格没有防线)。数值在 restat() 里跟羁绊、装备一起结算,所以挪位置会立刻重算。敌人的强度是拿无头机器人扫出来的:62 人 + 装备 + 地形之后整体要抬一档,defs.js 里的 ENEMY_TUNE 就是那组数,改完必须重扫(pf_sweep.mjs 跑 6 局,目标是大部局能通但后期真的会漏怪)。

影怪按格子走:每一只都从右侧通道格进入,沿六边形格子间 BFS 出来的最短路径一格一格往前挪;正前方那一格站着人就被挡住开打,走完最后一格再往左出棋盘去戳核心。岩壁那一格它们绕开(寻路直接不通过),裂隙与高台会把它们拖慢 —— 地形因此不只是给玩家看的装饰,也能当减速带用。路线在备战期就画在棋盘上:右侧紫格是这一波的入口,格上标着头像和数量,淡紫虚线是它们要走的路;左侧面板再按通道列一遍「什么怪、几只」,开战前就知道该先堵哪条。出兵计划(种类 / 通道 / 时间)在备战期算好存进 G.plan,开战照单出兵,所以界面上看到的就是真的会来的。第八波与第十一波会各混进一只米酒:影怪表里唯一一个不在官方怪物图鉴里的(头像是照着 B 站头像画的,见 assets/protocol/mijiu.webp),血不比大裙摆厚,攻击却高一档,走得不快 —— 所以他不会一闪而过,而是一直站在你前排的脸上。

界面按屏宽分两套:宽屏在左侧立一块信息面板(波次与波名、核心血条、金币与利息档位、人口、下一波来敌、羁绊)—— 羁绊涨到 20 条(4 界域 + 3 职阶 + 7 组织 + 6 流派)之后那块放不下了,按四类分组列、超出屏幕高度自己滚,上界由 --botH 按底栏实际高度算(bandRect() 每 20 帧写一次),没滚到底时底部盖一层渐隐 —— 之前写死 bottom:8px,最后一个「流派」组会被底栏切掉半截;棋盘居中到剩下的区域,单位卡挪到右边的空白里 —— 左上角一行小胶囊在 1440 宽的屏上确实太不显眼;窄屏仍用顶栏那一条,核心与人口都在里面。底栏分成「备战席」和「商店」两块,各自有底色和左侧竖标签 —— 两块靠冷暖对立分开:备战席是冷青的 45° 斜纹、往里凹(收纳格),商店是金色的正交网格、往外浮(货架),四角各有一对 L 形角标、顶边压一条同色亮线,扫一眼就知道自己在看哪块,深色底上也不至于糊成一条;商店左边缘挂一只金币池(数字 + 利息档位,加减时飘一下 +n),每张卡底边一条金色价签写费用,右上角三个点表示「已有几个同名的一星」,买第三个就升星,快凑齐时整张卡会亮;备战席的人把星级挪到右上角并放大,边框按界域上色。界域用的是原作官方徽记(assets/realm/*.webp 94×94 的原图,scripts/build_protocol_realm.py 裁掉外圈灰雾、缩到 44px,四张共约 9KB,构建时一起 base64 内联),职阶 / 组织 / 流派用内联 SVG,商店卡、备战席、信息卡、羁绊条共用一套,不额外请求图片。声音同样是现场合成的:38 种音效(选中 / 取消 / 换位、买卖、刷新、升人口、升星、普攻 / 暴击 / 击杀 / 受伤 / 中毒 / 护盾吸收、开波 / 清波 / 漏怪 / 胜负,以及六种大招各自的音色)与 7 段 BGM(备战 62bpm / 前六波 96bpm / 第七波起 112bpm 加十六分琶音 / 首领 84bpm 三全音 / 末波 / 结算胜·负),每段都带一层主旋律,跟着进度换而不是全程一个节奏,一个音频文件都不下载。

战场画面是一块非对称的板子:左边是协议核心,右边多留一条紫色雾气的通道把影怪的来路也框进去(不然怪会飘在板子外面,像画漏了),每行末端有箭头标出推进方向。核心做成双圈六边形 + 二十格环内刻度,掉一格血当场看得见;核心下方压着血量的数字,省掉了一圈重复的标签。战斗动画全部走逻辑层的时间量:待机是呼吸式的轻微起伏,出手时切打击帧并前冲、身体前倾,被打是一格后退 + 闪白,大招就绪脚下有金环,放大招和首领倒下会轻微震屏,伤害飘字之外还补了火花粒子与眩晕星星;波次开始、放大招各有一次横幅(同一个大招用序号去重,不会连刷)。左侧单位卡会列出当前两个装备槽,点一下卸下;装备过的唤醒体在棋盘脚下有两点小徽记,备战席是右上角一颗紫点。

战斗判定踩过一个值得记的坑:一开始「怪被谁挡住」和「谁能打到怪」用的是两套半径,怪能停在 116px 处被判定为挡住,而近战射程只有 108px —— 两边都打不着,波次永远清不掉,机器人跑起来就是第 7 波卡死。现在两边统一按「脚下往上 20 的命中点」算距离,阻挡半径 0.95 格严格小于最小射程 1.15 格,另外加了一条 90 秒兜底:一波打太久就把残兵直接清掉推进,宁可少打一会儿也不卡死。平衡是用内置机器人量出来的 —— 它会自己摆位、三合一大招、买装备装上、按人口升级,开 ?_test=1 后几秒跑完一局。标准档(ENEMY_TUNE 抬过一档)跑 8 局 7 胜、总时长约 6 分钟、每波 22~41 秒,掉血几乎全集中在第十二波(平均 4.6 点):前十一波是攒阵容的,末波才是真坎。商店抽人对已拥有的角色按 1 + 3.2 × 已有数 加权,不然 62 人的池子里三合一会慢到整局只合出两三个;加权之后一局能合六次左右,升星奖励才真的拿得到。癫狂档敌人生命 ×1.5、攻击 ×2.1,通常在第十波之后开始漏水。

弥萨格王权(reign.html)借的是《王权(Reigns)》的骨:一张卡上站着一个唤醒体,走到你桌前提一个要求,你只能准或不准,两条路都在动账。你没有兵力、教权、民心那四项,而是记忆 / 理智 / 银芯 / 羁绊——世界靠被记得立住,所以记忆见底你就成了档案上一个空号;理智见底你成了黑池的门;银芯见底屏障熄灯,黑潮漫过围墙;羁绊见底则再没有唤醒体应你的银钥匙。这四项各自还有另一头:记忆涨满,学校就凝固在最好的那一年;理智涨满,你把所有人看成可以关掉的数据;银芯涨满,审查会带着契约来把学校连名字一起买走;羁绊涨满,他们替你挡下一切,你活着,他们没了。三十条结局里八条是这么来的;两条是「两样一起坏掉」——银芯满而羁绊空(空壳)、记忆与理智同时见底(黄昏);十二条属于「撑满任期」,同一个「撑完了」在账面上能分出退潮的人、空转的一任、承包商、全校的守密人、笑着卸任、完美均衡这些走法,其中四项都不低于 62、黑潮不高于 38 才拿得到金色的「守灯人」;剩下七条是恶搞的,藏在特定的卡里,选项上不写,点了才知道。

卡池 310 张,说话的是 62 名唤醒体 + 12 位 B 站主播 + 一只校猫 + 一位关卡设计,另加二十个校务事件(审查会来函、屏障维护报告、凌晨三点的钟楼、逾期七十年未还的书、自己往外走的天台围栏……)。十二位主播是从别的世界被叫来的:萨摩不耶给你打拍子、魔龙_D 说你配错了人、立誓0氪算出一个难看的省钱方案、路过的耄耋拄着拐杖在走廊上遛弯、白云出岫只想把每件事都压进一个回合、半醒的鱼把「从 0 到融灾 425」拆成七步,顺手把你的密契也洗了、伤春客一个人养了一架子捕鸟蛛,说五个位置里就这一套最好用。这一版又给七十三张老面孔各补了一件小事——图鲁要听睡前故事、奥吉尔想要一匹马、奥尔拉只是想让有人念一次他的名字、卡拉布可以替你收走一样你说不清的东西。每个人的口吻都照原作台词往下写:24 的断句和「她们」、阿格里帕要二十个学生去练成能站在黑潮里的东西、达芙黛尔说能把黑潮推回十里但代价是一个名字、诺缔拉请你把她的名字写在纸条上、艾瑞卡问「我是被记得的,还是被存储的」。最后那张卡上坐着的那个人不在这份名单里:米酒,《忘却前夜》脑缸组的战斗设计师,萨摩不耶的朋友。他不说「我想要什么」,只说「这一关怎么摆」——把宿舍区三条走廊并成一条必经之路、把期末难度上调一档(不是加数值,是换机制)、给萨摩的节拍器做一条得踩在拍子上才过得去的走廊。有两条连环:让 24 的「她」出来两天后,会有人站在你门口问昨晚是不是自己做的;跟达芙黛尔成交三天后,桌上会多一张金额空着的账单。台词长度中位 26 字,一句一口气能读完——卡牌游戏最怕玩家开始略读。

四项都做了一件事:越靠近两端越难推(72 以上再加分、28 以下再扣分最多打六折)。没有这条,随便点也能在六十天里把某一项一路推到底,实测随机策略有三成是记忆直接顶满收场,玩家会以为是自己不会玩。黑潮是第五项、也是唯一没有软上限的一项:它每天自己涨、某些决定推得更快,每五分之一任期来一次躲不掉的潮汐(屏障外脚步声、宿舍区集体梦话、审查会封校门、黑池进水、黑潮拍墙),扛过去会退潮一段,涨满则当场终局。另外每天有两笔固定开销,写在源码注释里:记忆 -0.18(世界本来就在忘记)、银芯 -0.1(水电工资)。三档难度只动三样:任期 30 / 60 / 90 天、起始 52 / 46 / 46、黑潮系数 1 / 1 / 1.15(每张卡统一放大 1.1 倍)——长任期的压力来自「黑潮从不等你」,九十天里要扛五次潮汐。平衡是跑出来的:三档各 2000 局随机策略,撑完任期分别是 83% / 47% / 24%;长任期里近一半的死因是黑潮,这是刻意的——只算四项的人会被水淹。卡池从 221 张扩到 307 张之后重扫过一遍,旧的 58/50/50 与 1.1-1.2 的放大倍数会让标准档掉到三成,所以按新卡池重新标定了。

这一版把「算账」摆到明面上:两个按钮下面直接写着这一下会动哪几笔账(记忆+7 · 银芯−4),数字走的是和结算同一个 previewFx(),所以软上限打的折在点之前就看得见——不然玩家会以为这游戏在骗人。四项属性上面多了一行潮汐倒计时(第几次、还有几天、剩两天变红),潮汐是这一局唯一写死的截止日,藏在规则里没人算得清。第三件是人物册:76 个人按界域分组,标了性别与身份,见过才亮,跨任期累计。性别一律照站内 data/dictionary.json 的 sex 字段,不照译名猜——阿格里帕、血链·希洛、詹金、奥尔拉都是「她」,皮克曼、杜勒赛因、波吕克斯是「他」,十二位主播也全是「他」。旧稿里阿格里帕和希洛的卡写成了「他」,这次逐条改过了。

卡面不是整张立绘:assets/card/*.webp 是 240×600 的全身图,一张二三十 KB,二十几张直接内联就是 1MB 进首屏。scripts/build_reign_faces.py 统一裁顶部 240×330(头到胸口)、缩成 176×242、q76 压成一份 766KB 的 data URI 表(76 张:62 张裁自立绘,12 位主播用他们本人的 B 站头像、垫一层自身的模糊放大版,校猫那张 96×96 的 Q 版头与米酒挂机版那只 128×128 的 Q 版头同样处理),构建时拼进 js/reign/art.js——整局仍然只有「页面 + 一个脚本」两个请求。存档走 zjtt:reign:save(中途退出,下次从标题页继续,存档里连「轮到哪张卡」都记着,重进不会换人)、zjtt:reign:best(当过几任、最长撑到第几天)、zjtt:reign:endings(结局图鉴)。个人中心会读后两个。

弥萨格轮盘(roulette.html)是恶魔轮盘(Buckshot Roulette)那一套:桌上只有一把枪,枪膛里混着实弹与空壳,数量公开、顺序不知道;对着自己开枪,是空壳就保住回合接着打,对着对面开枪,响没响都交回合。道具在自己回合里随便用、不消耗行动,所以一回合可以「窥镜看清 → 装锯 → 铐住 → 开枪」连成一串。赛制两种:三局两胜(3 实 3 空各摸 2 件 → 4/4/3 → 5/5/4)与五局三胜(3/3/2、3/3/2、4/4/3、4/4/3、5/5/4),先手逐局轮换(s.turn = (n-1) % 2,同一个种子先手顺序也是固定的),一膛打完按同样的数量重装重洗;好友房的赛制写在房主的 open 消息里,客人跟着走。出战者是站里全部 74 位——62 名唤醒体加 12 位 B 站主播,每人一条理智上限(4~7)、两件随身道具、一条被动,14 种被动分四界域各有一套名字(同一个「回声」在混沌叫回声、在深海叫别的),原班十人的数值与文案原样保留。名单不是手写的:scripts/gen_roulette_chars.py 从 idle/src/core/creators.js 与站内档案生成,随身道具按「职阶一件 + 界域一件」并且按同职阶内序号轮换(70 种组合),不然固定搭某一件会让整批人一起垫底。头像走 assets/roulette/faces/ 的 64×64 缩略图(74 张共 111KB,由 scripts/build_roulette_faces.py 从立绘裁出来),构建时拼成 data URI 进 js/roulette/gen.js(179KB,页面仍是「HTML + 一个脚本」两个请求);首页那一格封面图标换成了莱克(a-15604)的头像。

轮盘这一版的重点是「跟人机打也算数」。段位和「唤醒王:决斗链接」共用一张表(js/duel/tiers.js 的十三段:见习守密人 → 铜钥级 → … → 弥萨格校猫),只算人机对战——同屏双人、好友房是跟人打的,不涨分也不算胜率。赢一局给 70 / 95 / 120(按三档难度)+ 段位档 ×10 + 连胜 ×8(最多算 5 连),五局三胜是长盘,同样胜负 ×1.4;输也 +12,掉不下来。分数只增不减,因为云端档案是逐项取大合并的,允许掉分两台设备会互相拉回去。水平差距靠另外两处体现:段位越高,人机至少被抬到「普通 / 认真」(floorFor),而且挑的对手只从实测胜率靠前的那批里选(foePool 用 data/roulette-power.json 的分位,金印级起只留前 55%、界域传说起只留前 28%)。平衡是跑出来的:先用 scripts/roulette-power.mjs 跑四万场随机配对量出每个人的胜率分位(37.8%~58.9%),再逐人做坐标下降(每人各测理智 −1 / 不动 / +1,同种子、随机对手、随机先后手,取最接近 50% 的那一档),现在 scripts/roulette-sim.mjs 让 73 人全配对打 31536 场:平均 50.0%、标准差 4.9pp、区间 39.7%~61.3%,并逐场校验理智 / 护盾 / 槽位 / uid / 知情数组 / 回合 / 赛制等不变量。(人机的取舍里有 Math.random,同一份数据重跑会飘 ±0.7pp,所以别拿单次数字下结论。)好友房沿用唤醒王:决斗链接那套 ntfy 中继(主题前缀换成 mrr1-),房主只发种子与赛制、两边各重放同一串动作——引擎是纯确定性的(所有随机都从种子推进,Math.random 只出现在界面和人机里),体检每局抽一半做重放比对,状态指纹零偏差。音效(枪响、空枪、回血、胜负)是 WebAudio 现场合成的,不下载任何音频。

所有进度(银芯、解锁的 CG、失败题库、自建题目、偏好唤醒体、答题记录、语言与背景主题)默认存在浏览器 localStorage 的 zjtt: 前缀下;登录后会打包成账号档案同步到云端,换设备登录即可恢复,退出登录则回到只用本机数据。上传到云题库的题目是公开的,请不要把不想公开的内容放进去。

题库共 4101 道:data/puzzles.json(1000 道核心题,每日一题只从这里出,保证扩充题库异步加载时题目不跳变)、data/puzzles-extra.json(1000 道扩充题)与 data/puzzles-more.json(2101 道追加题),后两份按顺序在后台加载、边到边用。难度分统一重算后按分位切成 4 档(1 档 1149 / 2 档 1148 / 3 档 1066 / 4 档 738),分档依据是「同签名题数」分布与伤害构成熵等公开信息,构建脚本 scripts/finalize_puzzles.py 会一并做结构审计:队伍 4 人唯一、命轮 1–2 件、密契齐全、钥令有效、造物 ≤18、UUID 完整、分桶号 4 个、公开线索 4 条;当前全部 4101 道通过,且没有任何两道题的公开线索完全重复。

数据由 qdby_chinese 生成,脚本见 scripts/build_data.py、scripts/build_puzzles_more.py、scripts/enhance_data.py、scripts/build_official_terms.py、scripts/score_difficulty.py、scripts/finalize_puzzles.py、scripts/enrich_clues.py(把线索用的隐藏数据封进答案)与 scripts/build_card_types.py(卡牌类型表,取自官方回放的 Skill 表)。

寻找伪人:Morimens(fake.html)把《寻找伪人》那一套搬进弥萨格,做成了昼夜轮转的生存推理。四档难度:入门 7 夜、标准 10 夜、硬核 14 夜、噩梦 18 夜;每晚敲门次数不固定(2~6 下,越往后越密)。夜里你守在门后,每一下敲门做一次「开不开门」;白天你面对屋里已经住下的人——先来的两位住户,加上你放进来的人。放错人进来不会当场扣理智,它会在这个夜里杀掉屋里的一个活人,天亮只报「少了谁」,不报「谁动的手」。白天每个住户能聊两个话题(把登记号再报一遍、核一条档案、怎么称呼自己、看它的眼睛、身上带着什么、这里有谁不对劲、你从哪儿来),也可以掏枪——打死了才看得清是人是伪人,但错杀一个要掉理智。屋里每死一个人掉理智,归零就结束。判据不止档案:伪人身上有且只有一处不对,可能印在登记卡上(界域 / 职介 / 登记号)、藏在答话里(生日 / 身高 / 别名 / 星座),也可能在自称、瞳色、随身的东西、身上的动物、和它复述的那句口头禅里;凑近看时窗口会切到它的头像特写,破绽就写在脸上。前两类档案里就有真值随时可对;后五类档案上没有,只能靠图鉴——图鉴记的是「你核实过的真值」,只有它说的确实是真话时才会点亮,所以第一周目几乎只能靠档案和那点直觉,多跑几个周目眼力才够。每局还带着固定剧情(某些夜里有专属演出)和三条固定任务(拦下几个伪人、别误杀、凑齐某个界域的住户之类)。十七个结局:取决于你活到第几天、和谁一起撑到天亮、有没有攒满图鉴、是否全程零误杀。按难度乘区 × 活过天数结算银芯(全站共用的货币),登录后成绩进云端排行榜。

74 个角色全部上场:62 名唤醒体,门外站的是原作 320px 待机立绘(assets/bazaar/idle/ 那一套,缩到 130px 再像素化),档案夹里是官方 240×600 全身立绘(assets/card/);12 位 B 站主播没有战斗立绘,画面里就是「B 站头像 + 一个现画的火柴人」——这不是偷懒,是设定:伪人抄他们的时候,也只能抄到一个头像。四张图集(战斗立绘 97KB / 立绘 230KB / 胸像 35KB / 主播头像 16KB,一共 380KB,见 scripts/build_fake_art.py)在构建时内联进 js/fake/gen.js(1562KB),整页仍然只有「HTML + 一个脚本」两个请求;档案数据由 scripts/build_fake_data.py 从灰机 wiki 的唤醒体表、protocol-units.json 与 survivors-extra.json 拼出来,主播的直播间标题照抄 B 站,没有一个字段是编的;每人的「底细」(自称 / 瞳色 / 随身物 / 动物 / 口头禅)由 scripts/build_fake_traits.py 按界域固定分配——瞳色试过从立绘里统计,73 张只有一半猜得对,紫眼睛会被算成蓝、半张脸被头发盖住的直接算不出,而界域配色本来就照着立绘定,按界域分配反而更准。存档走 zjtt:fake:save(中途退出能接着值夜)、zjtt:fake:codex(73 人图鉴与逐项核实的底细)、zjtt:fake:best(最高分与结局)。画面是 canvas 现画的 480×270:夜里是门、窗、铁栅、吊灯、桌上的登记簿与左轮,白天镜头转过来,是沙发、茶几、数了一半的子弹,和靠背上一个一个人头——屋里还剩几个人,画面里就直接告诉你了。敲门、翻纸、枪响、电流声全部 WebAudio 现场合成。平衡用 scripts/fake-sim.mjs 跑:第一周目 200 局(图鉴每局清零)是完美 36.5% / 主播 17% / 门房 11% / 值夜到天亮 9.5% / 楼层已空 10% / 理智归零 14%,平均每晚死 4.1 个人;同一玩家攒满图鉴之后再跑 200 局是档案室 72% / 主播 14.5% / 门房 8%,夜里死人降到 1.44——「多周目收集信息」到底值多少,数字在这儿。