「忘忘同人小游戏」是《忘却前夜》的同人小游戏合集,首页(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层」一节。
怎么玩
- 每道题是一份匿名的融灾战报:区域、回合数、出牌数、单回合最高伤害、伤害构成,以及队内 4 人的伤害、格挡、治疗。
- 队员按伤害从高到低标为 A–D 位。你要在对应位置填入唤醒体,以及(取决于难度档)命轮、密契、钥令、启灵和造物。
- 提交后:🟩 位置/归属正确;🟨 在队内但放错了位置或装在别人身上;⬛ 不在队内。启灵分 8 档(0启~3启、+1~+3、超限、+5~+11、+12),用 ↑/↓ 提示偏高偏低,相邻一档显示黄色。
- 最多提交 6 次。卡位上的「提示阵营」「提示定位」「提示等级」和队伍级的线索台都能帮你缩小范围,按条扣银芯(银芯靠答对获得,见下)。难度档越高,同一条提示越贵:进阶 ×1.25、老手 ×1.6、大师 ×2,卡上标注的就是你这一档的实价。
- 即使只猜唤醒体(入门档),结算时也会给出完整的命轮、密契、钥令、造物与唤醒体属性,方便学习完整配队。
难度档与难度分
- 入门:只猜 4 名唤醒体;进阶:+ 命轮(每人 2 件);老手:+ 密契套装、钥令;大师:+ 启灵、造物(固有造物已经给出,只需补其余)。
- 难度提醒:目前除「入门」外的三档偏高,不推荐一上来就玩(页顶有置顶公告)。为此每档都加了一组免费开局线索,开局就在线索台上摊着、不用花银芯:进阶 3 条命轮;老手 4 条命轮 + 2 条密契;大师 4 条命轮 + 2 条密契 + 3 条造物线索 + 潜能(灵塑)汇总 1 条。赠送的线索卡上标「赠送」,答完这一题为止一直有效。
- 每道题另有一个 难度分(0–100),只由公开信息决定,三项加权: 信息排除度(把回合数/出牌数/能量/单回合最高伤害/死扛/剩余生命做粗分桶后,题库里同桶的题越多,越难靠排除法锁定); 伤害集中度(队内伤害越集中在一两人身上,越容易判断主 C,越简单); 数值常见度(回合数、出牌数是否为常见的整数,越“整”越好记)。
- 题目按难度分从低到高切成 4 档,所以档位是循序渐进的。
忘却前夜配队规则(给圈外人)
- 界域(阵营):每个唤醒体属于四大界域之一——混沌、血肉、深海、超维。
- 组队:除「混沌」外,唤醒体只能与「自身界域 + 混沌」组队;「混沌」可与任意界域组队。
- 队伍构成:4 名唤醒体 + 1 名守密人(你,携带钥令技能)。
- 养成:每个唤醒体有 2 个命轮(武器)、1 套密契(3/6 件套效果)、指令卡(打击/防御/技能)、天赋(疯狂预兆、灵塑适性等)与潜能进阶(灵塑)。
- 狂气 vs 算力:狂气是大招能量条,集满触发「狂气爆发」——消耗的是狂气,不是算力;算力是每回合打出指令卡所消耗的资源。
- 狂气等级指「疯狂预兆」天赋的等级(开局获得狂气);灵塑等级指「灵塑适性」天赋 / 潜能进阶的等级。
- 造物:探索过程中获得的道具/遗物。
- 伤害来源:战报里的守密人伤害(你的钥令)、触腕、反击、力量、侵蚀/中毒,能帮你锁定队伍构筑。
- 钥令开启次数:这一局守密人放了几次钥令,从官方回放本体里数出来的(榜单摘要没有这一项)。0 次也是有效值——说明整场没开钥令;只有回放里确实取不到时才不显示。
- 侵蚀伤害(累计):回放里逐状态统计中,名字含「侵蚀」的状态(卡斯托尔侵蚀、卡拉布延迟侵蚀等)整场打出的伤害合计,同样来自回放本体。它和上面的中毒峰值不是一回事:中毒是层数峰值,侵蚀是累计伤害;队里没有侵蚀系角色时这项是 0,卡片上就不显示。
账号与个人中心
账号登录复用 Waline 的现成服务(和 忘忘看报 用的是同一套);积分、解锁、推理记录、工坊题库与点赞存在本站自己的后端(跑在 EdgeOne 边缘函数上,代码在仓库 edge-functions/),换设备登录即可恢复。
- 只有两种状态:游客(不登录,进度读本机
localStorage)和账号(登录后进度跟账号走)。没有「本地昵称」这类中间态——想留名字就注册,不想注册就用游客。 - 注册 / 登录:首页(「忘忘同人小游戏」入口)右上角、游戏内右上角头像,或「个人中心」页面,三种入口都行——账号只有一个,在首页登录完,进任何项目都已经是登录状态。用户名 2–20 个字符(中文可以),密码至少 6 位;用户名在后台会映射成
用户名@zjtt.local的邮箱形式,所以不需要你填邮箱。 - 用户名唯一、不能重名:注册时若这个名字已被占用,服务端会直接拒绝(
USER_EXIST),不会建号、也不会动到别人的存档,界面会提示「已经有人用了」并把你带到「登录」。判重前会先归一化:全角转半角、去掉零宽字符、忽略大小写,所以「Alice」「alice 」「alice」算同一个名字,不会出现两个看起来一样的账号。字符只允许中文、字母、数字和 _ - ·。 - 昵称和登录名是两件事:昵称(个人中心可改)只影响显示,可以和人重复,不参与任何存档的键;账号档案按登录身份区分,工坊题目按用户 id 归属,所以重名不会串数据。站内赠礼(
data/grants.json)按登录名匹配,改名不会影响领取。 - 个人中心 = 账号数据中枢:昵称与头像、偏好唤醒体、推理记录、工坊战报、典藏进度、银芯与失败题库,全都在这一页,也全都会随账号同步。右上角有「上次同步」时间和「立即同步」按钮。
- 每一局都落库:每日一题、随机一题、自建题、工坊导入的回放,结算后都会写一条记录(时间、题目、模式、档位、胜负、评级、分数、回放链接),同一道题只计一次;最多保留最近 300 条。
- 偏好唤醒体:在个人中心选好之后会存进账号,作为你自己的喜好收藏。不会用来筛题——那样难度会掉得太多,所以推理页不提供这个开关。
- 头像:直接用 Waline 的 Q 版头像集(共 184 张):人物头像 79、剧情角色 5、特殊 21、Q 版 / 方块 / 幕间 / 邮票四种风格共 76、圣诞 3。选择器按分组切换,也能贴自己的图片直链(≤250 字符,例如 QQ 头像)。头像存在账号里,换设备登录也在。
- 云端档案怎么存:把「银芯 / 解锁 CG / 失败题库 / 统计 / 偏好 / 工坊题 / 推理记录 / 背景主题」打成一个文档,存到本站后端的
accounts表(一位用户一条,按登录身份区分)。写入时带版本号:别的设备先改过就先合并再写,不会互相覆盖。以前存在 Waline 评论里的老档案会在第一次连上新后端时自动搬过来。 - 合并规则:换设备登录时,银芯取两边较大值,解锁 CG 与失败题库取并集,统计逐项取大,推理记录与工坊题按 id 去重取新——所以两台设备交替玩也不会互相覆盖。退出登录只清本机的同步凭据,云端档案保留。
图鉴与关键词
图鉴收录全部唤醒体(含技能、天赋、启灵、衍生卡牌与推荐配置)、命轮、密契、钥令、造物与怪物。文字里的状态与机制会显示为带图标的小标签:悬停可看说明,点击可展开详情,并一键跳转到「包含该关键词」的条目列表。顶部的「关键词」页收录了全部 100 个关键词。
中英文对照以官方中文为准:名称与术语优先取自中文维基、官方游戏文本表(Morimens-Localizations)与游戏客户端配置;关键词详情里会标注译名来源,凡未在官方文本中核实的会标为「非官方译名(站内译)」,仅供参考。
银芯、提示与解锁
- 获取:答对一道题按难度给分,公式为
8 + 难度分 × 1.2(难度分 0–100,所以一题大约 8–128 分,答对后四舍五入)。银芯存在浏览器本地(zjtt:credits),换设备/清缓存会归零。 - 花在哪:① 买提示(6 银芯起,越高难度档越贵);② 解锁典藏馆的 CG。
- 卡位提示:队伍卡上每个位置有三条,各 6 银芯——「提示阵营」(四大界域)、「提示定位」(伤害 / 防御 / 辅助)、「提示等级」。买过的那条会变成金色小标签。
- 线索台:报告下面一组可解锁线索,全部按这一题的真实数据生成,没有数据的条目不会出现。分四层:队伍线索——钥令阵营(6)、内在灵格(6,四位的灵格等级;等级在卡位提示里买)、灵塑等级(8,仅大师档)、养成(7,指令卡总等级;旧战报没有疯狂预兆时就只给指令卡)、命轮强化(6,整队最高强化到几、有几件 ≥+12)、助战(4)、单回合极值/守密人(5);造物线索(8)——按功能报件数:输出(伤害 / 力量 / 暴击)、抽牌、狂气、算力与消耗、防御续航、金色(SSR)件数、含基础伤害加成、含治疗 / 回复,买了就知道本局造物里各有几件带这类效果(个别造物没有稀有度记录时会明写「另有 n 件稀有度未知」,不糊弄);牌组(3–5)——牌组张数、症状卡、衍生卡、命轮附加卡(命轮往牌组里塞的那几张),按件数给;命轮与密契——每次解锁一件,命轮 6 / 8 / 10 / 12 / 14 / 16 / 18 / 20、密契 5 / 7 / 9 / 11,越往后越贵。上面的价格都是入门档,实际按难度档乘系数(进阶 ×1.25、老手 ×1.6、大师 ×2)。买一次这一题内一直有效,换题重新计。自建题还会多一层作者线索:由出题人自己写、自己定价,不乘档位系数。
- 造物:融灾里每局开局都带两件固有造物——第一个造物和那一期的戒指(深海 / 血肉 / 混沌 / 超维),它们会直接列在题面上,不用你填;你只需要补齐其余造物。造物的功能(抽牌、伤害、狂气……)可以去线索台按类购买。
- 每日签到:推理页和个人中心都有「每日签到」,每天一次 +10 银芯,连续签天数会累加;签到日期与连续天数也跟着账号同步,所以换设备当天也不能重复签。
- 赠礼:站内的一次性银芯赠礼写在
data/grants.json里(按用户名匹配),符合条件的账号登录后自动到账,领过的记录会记进档案,发第二遍不会重复加。
失败题库
一道题用尽 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 张是浅色系),切换是即时的。再点一次「背景使用中」即可恢复默认。
创意工坊
「工坊」让你自己出题:
- 导入回放(三种方式):
- 回放码:把
battleUuid粘进去点「按回放码载入」,直接给出完整队伍 —— 4 名唤醒体(等级 / 灵塑 / 内在灵格)、每人 2 件命轮、密契、钥令、8 个造物,全部来自题库答案。 - 回放文件:把官方回放(
BattleReplay_*.json)下载下来用「选回放 JSON 文件」读入。文件其实是 LZ4 帧 + MessagePack(不是 JSON),解码器沿用 qdby_chinese 的回放复盘实现,在浏览器本地展开,不会上传。解析出的命轮(每人 2 件,来自战斗里挂载的「状态@武器」)、造物、钥令、等级与灵塑都准确;密契只有在本局触发过才会留下痕迹,所以若这条回放在题库里,会自动回查题库把密契补全,否则需要手选。 - 粘贴摘要:战报摘要 JSON 直接粘进文本框也行。
- 回放码:把
- 手动出题:4 个位置各选唤醒体 / 2 件命轮 / 密契,再配等级·灵塑、钥令、造物与回合数等元数据。选唤醒体时按配队规则实时过滤:队里已经有一种非混沌界域,就只剩同界域和混沌可选,冲突项标灰并写明「与队内 X 冲突」,不会让你编出不存在的队伍。造物按集合录入,顺序无所谓,判分只比「有没有这几件」。
- 自定义线索:除了系统按数据算出来的那些,你还能自己写最多 12 条线索 —— 标题、内容、价格(1–40 银芯)都自己定。玩家在题目的线索台最下面「作者线索」里按你的定价买,不受难度加价影响;写进分享码后,好友和云题库取回的题目都会带着。
- 点赞:别人打开你分享的题目,题面上方会有一个赞按钮。每被一个人点赞,你(作者)拿 1 银芯;每个人每天最多点 10 次,自己出的题不能自赞。赞数与每日额度都由后端记(同一题同一个人只能赞一次,额度按账号算,清浏览器缓存也刷不出来),进「我的题目」或「个人中心」时自动结算,1 个新赞换 1 银芯,换设备也不会重复领。
- 分享:生成
ZJ2-…题目代码,好友打开detective.html?p=ZJ2-…就能直接挑战;也可以选择上传到云题库再用代码取回。 - 自建题池:保存的题进入「我的题目」,会混入你的随机/每日题目池,答对同样给银芯。
回放与复盘
答对(或在失败题库里查看)之后,结果面板会给出该局的官方回放地址:
- 官方回放:
https://z1g-warreport.qookkagames.com/publish/BattleReplay_<uuid>.json,可直接下载原始 JSON。 - 忘忘看报复盘:一键把 uuid 送到 morimens-tools 回放复盘,看逐回合的伤害、格挡、治疗与手牌曲线。
- 复制 uuid:方便贴到别处或自己存档。1000 道题全部匹配到了唯一战报(联合键
赛季+档位+分数+回合+出牌+单回合最高),没有歧义。
推理思路示例
- 伤害占比 85% 以上、单回合最高伤害极高的 A 位,基本是主 C。
- 格挡很高、几乎没有伤害的位置,多半是防御型;有治疗数字的位置,说明带了治疗手段。
- 战报的伤害构成(触腕、反击、力量、侵蚀)是强线索:比如触腕伤害高说明队伍有深海/触腕体系,力量高说明有叠力量的角色。
- 养成线索(指令卡总等级、狂气等级、灵塑)也能缩小范围:主 C 的指令卡通常等级最高。
- Boss 的阵营、回合数和出牌数,能帮你判断是快攻还是慢热体系。去「图鉴」查各角色、命轮、密契的效果与本期使用率,就是你的推理工具书。
数据说明
战报来自公开的融灾排行榜(第 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——「多周目收集信息」到底值多少,数字在这儿。
“Wangwang Fan Mini-games” is a collection of Morimens fan mini-games. The home page (index.html) lists every project. This page covers Report Detective (detective.html); the collection also has Merge Doresain (merge.html, a Suika-style merge game that runs from Little Soot up to Doresain) and School Cat Binding (binding.html, an Isaac-style dungeon crawl starring the same school cat). A hex-grid auto-battler, Forget Protocol (protocol.html), joined later. One more project is still in development.
How to play
- Each puzzle is an anonymised Disaster raid report: zone, rounds, cards played, highest single-round damage, damage breakdown, plus each of the 4 members' damage / block / healing.
- Members are labelled A–D by damage, highest first. Fill each slot with an Awakener and — depending on the level — Wheels, Covenants, a Keeper skill, Potency and Creations.
- After submitting: 🟩 right place/owner; 🟨 in the team but wrong slot or attached to someone else; ⬛ not in the team. Potency uses ↑/↓, and shows yellow within 2.
- Six submissions max. Per-slot hints (realm / role / level) and the team-level clue desk narrow things down, each priced in Silver Core (earned by solving, see below).
- Even at the beginner level (Awakeners only), the result reveals the full Wheels, Covenants, Keeper skill, Creations and Awakener stats, so you learn complete team building.
Levels and difficulty score
- Beginner: 4 Awakeners. Advanced: + Wheels (2 each). Veteran: + Covenants and Keeper skill. Master: + Potency and all Creations.
- Every puzzle also has a difficulty score (0–100) derived only from public clues, weighted from three parts: clue exclusion (coarse buckets of rounds / cards / energy / max hit / death-resist / HP left — the more puzzles share the same bucket, the harder it is to narrow down); damage concentration (the more a team's damage is concentrated on one or two members, the easier the carry is to spot); number familiarity (whether rounds and card counts are common round numbers).
- Puzzles are sorted by that score into four tiers, so the ladder is gradual.
Team-building rules (for newcomers)
- Realms: every Awakener belongs to one of Chaos, Caro, Aequor or Ultra.
- Mixing: apart from Chaos, an Awakener can only team with its own realm plus Chaos; Chaos can team with any realm.
- Team: 4 Awakeners + 1 Keeper (you, carrying a Keeper skill).
- Progression: 2 Wheels (weapons), one Covenant set (3/6-piece effects), command cards (Strike / Defense / Skill), talents (Madness Omen, Soulforge Aptitude…) and Potency.
- Aliemus vs Arithmetica: Aliemus is the ultimate gauge — Exalt consumes Aliemus, not Arithmetica; Arithmetica is what you spend to play command cards.
- Madness level is the level of the Madness Omen talent (grants Aliemus at the start); Potency level is Soulforge Aptitude / Potency progression.
- Creations: items/relics picked up during a run.
- Damage sources: Keeper damage (your skill), Tentacle, Counter, Strength and Poison/Erosion in the report are strong clues about the build.
Account and profile
Accounts still sign in through an existing Waline service (the same one behind qdby_chinese); Silver Core, unlocks, solve history, workshop puzzles and likes live in the site's own backend (Edge Functions on EdgeOne, see edge-functions/), so they follow you across devices.
- Two states only: guest (not signed in, progress read from this browser's
localStorage) or account (signed in, progress follows the account). There is no in-between “local nickname” — register if you want a name, stay a guest if you don't. - Register / sign in: the avatar in the top-right, or the Profile page. Usernames are 2–20 characters (Chinese is fine), passwords at least 6; the username is mapped to
name@zjtt.localinternally, so no email is required. - Profile = the account's data hub: display name and avatar, preferred Awakeners, solve history, workshop reports, gallery progress, Silver Core and the failed bank all live here — and all of it syncs with the account. “Last synced” and a “Sync now” button sit in the header.
- Every run is stored: daily, random, custom and workshop-imported puzzles each write one record after grading (time, puzzle, mode, level, win/loss, rating, score, replay link). A puzzle only counts once; the latest 300 are kept.
- Preferred Awakeners: pick them on the Profile page and the puzzle screen grows a “preferred Awakeners only” switch. When on, only puzzles containing those Awakeners are drawn — members are hashed into buckets first, then each candidate is decrypted to confirm, so the whole library is never decrypted per draw.
- Avatars: the Waline chibi pack, 184 images — 79 character portraits, 5 story NPCs, 21 specials, 76 across chibi / block / interlude / stamp styles, 3 Christmas; the picker groups them by family, and you can still paste your own image URL (≤250 chars). Avatars live on the account, so they follow you across devices.
- How the cloud document works: Silver Core / unlocked CG / failed bank / stats / preferences / workshop puzzles / solve history / backdrop theme are packed into one document stored in the backend's
accountstable (one row per signed-in user). Writes carry a version number: if another device saved first, the two sides are merged before writing, so neither is lost. Old documents kept in Waline comments are migrated automatically the first time you connect to the new backend. - Merge rules: when you sign in elsewhere, Silver Core takes the larger value, unlocked CG and the failed bank are unioned, stats take the per-key maximum, and history / workshop puzzles are de-duplicated by id keeping the newest — so alternating between two devices never clobbers the other. Signing out only clears local sync credentials; the cloud document stays.
Codex and keywords
The codex lists every Awakener (with skills, talents, enlightenments, derived cards and recommended builds), Wheel, Covenant, Keeper skill, Creation and monster. States and mechanics in the text appear as icon chips: hover for a summary, click for details and a jump to every entry that uses them. The Keywords tab covers all 100 terms.
Chinese names follow official Chinese text wherever it exists — the Chinese wiki, the official game text sheet (Morimens-Localizations) and the game client config. Keyword details show the provenance of each translation; anything not confirmed in official text is marked “Unofficial (site rendering)” and is for reference only.
Credits, hints and unlocks
- Earning: solving a puzzle pays out by difficulty,
8 + difficulty score × 1.2(difficulty 0–100, so roughly 8–128 Silver Core, rounded). Silver Core lives in local storage (zjtt:credits) — clearing site data or switching devices resets them. - Spending: (1) hints at 6 Silver Core each; (2) unlocking gallery CGs.
- Slot hints sit on each team card, three per slot at 6 Silver Core each — realm (one of the four), role (damage / defense / support) and level. A bought hint turns into a gold chip.
- Clue desk: the group of unlockable clues under the report. Every entry is computed from this puzzle's real data; entries without data simply do not appear. Four layers — team clues: key realm (6), Gnostic Potential (6, all four slots; level is bought on the slot card), potency (8, Master tier only), build (7 — command-card total level; older logs without Madness omen cover cards only), Wheel upgrades (6 — best upgrade in the team and how many are at +12 or above), assist (4), single-turn peak / Keeper (5); relic clues (4–5) — by function, as a count: damage (damage / strength / crit), card draw, Aliemus, Arithmetica & exhaust, block & healing; deck clues (3–5) — deck size, symptom cards, derived cards and cards added by Wheels, again as counts; Wheels and Covenants — one entry per purchase, Wheels 6 / 8 / 10 / 12 / 14 / 16 / 18 / 20 and Covenants 5 / 7 / 9 / 11, pricier further along. Those are entry-tier prices; your tier multiplies them (Adept ×1.25, Veteran ×1.6, Master ×2). Bought once, it stays open for that puzzle only. Workshop puzzles add one more group, Author clues — written and priced by the author, with no tier multiplier.
- Relics: every Roguelike run starts with two innate relics — the first relic and that season's Ring (Aequor / Caro / Chaos / Ultra). Both are listed on the puzzle itself and never need filling in; you only add the rest. Relic functions (card draw, damage, Aliemus and so on) can be bought by category from the clue desk.
- Daily check-in: the puzzle page and the Profile page both offer a check-in — once a day for +10 Silver Core, with a streak that keeps counting. The date and streak sync with your account, so a second device cannot claim it twice on the same day.
- Gifts: one-off Silver Core gifts live in
data/grants.json(matched by username); eligible accounts receive them automatically on sign-in, and claimed ids are recorded in the account document so nothing is paid twice.
Failed bank
Burn all six submissions without solving and the puzzle is marked failed and removed from the draw pool — it will not come up randomly again, and the daily puzzle skips past failed ones. The failed bank panel keeps those answers (full team, Wheels, Covenants, Keeper skill, Creations and replay), so a failure still works as a review — you just cannot answer it again.
CG gallery
The gallery holds every official CG collected from the Chinese wiki — 438 images (7 more are dead links on the wiki), grouped into Hall / Main story / Dispatch records / Dynamic scrolls / Scene CGs / Other. Locked images show as a blurred thumbnail; clicking spends Silver Core to unlock (Hall 60 / Dynamic 55 / Dispatch 45 / Story 40 / Scene 30 / Other 30). Unlocks are stored locally and are permanent.
The viewer supports arrow-key paging and a “view original on the wiki” link — every item keeps its original wiki filename for provenance. A search box filters by title or filename (official CG filenames carry the chapter number, e.g. “C09 012”).
Backdrop themes: once a CG is unlocked, both the card and the viewer offer “Use as backdrop”. That CG becomes the site background (only a 3px soften, so you can still tell which art it is; readability comes from solid panel colours and a vignette), and its own dominant colours are turned into a full UI palette — surface, panel, borders, text, accent and gold — across all six pages, remembered locally. All 438 palettes are precomputed at build time (scripts/build_themes.py; 407 dark, 31 light), so switching is instant. Click “In use” again to go back to the default look.
Workshop
The workshop lets you author your own puzzles:
- Import a replay (three ways):
- Replay code: paste the
battleUuidand hit “Load by replay code” — you get the complete team: four awakeners (level / potency / Gnostic Potential), two Wheels each, Covenants, the Keeper skill and all eight Creations, straight from the puzzle-bank answer. - Replay file: download the official replay (
BattleReplay_*.json) and open it with “Pick replay JSON”. The file is actually LZ4 frame + MessagePack, not JSON — the decoder is the one from qdby_chinese's replay review, running locally; nothing is uploaded. Wheels (two per awakener, read from the mounted “状态@武器” states), Creations, the Keeper skill, level and potency all come out exact; Covenants only leave a trace when they triggered, so if the replay is in the bank the Covenants are filled in from the answer, otherwise pick them by hand. - Paste a summary: report-summary JSON in the text box works too.
- Replay code: paste the
- Manual authoring: 4 slots × (Awakener, 2 Wheels, Covenant), plus level/potency, Keeper skill, Creations and rounds.
- Custom clues: besides the clues computed from the data, you can write up to 12 of your own — title, text and price (1–40 Silver Core) all yours to set. Players buy them from the Author clues group at the bottom of the clue desk at your price, with no tier markup; they travel inside the share code and come back from the cloud bank too.
- Likes: when someone opens a puzzle you shared, a Like button sits above the report. Every like pays the author 1 Silver Core; each person gets 10 likes per day, and you cannot like your own puzzle. Counts and the daily quota are tracked by the backend (one like per person per puzzle, quota bound to the account, so clearing browser storage does not reset it), and settle automatically when you open “My puzzles” or your profile — 1 new like = 1 Silver Core, without double-paying across devices.
- Sharing: produces a
ZJ2-…code — friends opendetective.html?p=ZJ2-…and play immediately. Uploading to the cloud bank and loading it back by code is also supported. - Your pool: saved puzzles go under “My puzzles” and join your random/daily pool, paying Silver Core like any other.
Replays and review
After a solve (or from the failed bank) the result panel offers the official replay for that run:
- Official replay:
https://z1g-warreport.qookkagames.com/publish/BattleReplay_<uuid>.json— the raw JSON. - Wangwang review: sends the uuid to the morimens-tools replay review for per-round damage, block, healing and hand curves.
- Copy uuid: for posting or archiving. All 1000 puzzles match exactly one report (joint key: season + rank + score + rounds + cards + max hit) with zero ambiguity.
Example reasoning
- An A slot with 85%+ of team damage and a huge max hit is almost certainly the carry.
- A slot with high block and almost no damage is likely a defensive Awakener; healing numbers mean a healing source.
- The damage breakdown is a strong clue: high Tentacle damage implies an Aequor/tentacle build, high Strength implies a STR-stacking unit.
- Progression clues (total command-card level, madness level, potency) narrow it down too — the carry usually has the highest card levels.
- Boss realm, rounds and card counts hint at fast or slow builds. Use the codex for effects and pick rates — it is your detective's handbook.
Data notes
Reports come from the public Disaster leaderboards (seasons 71 and 72); player UIDs are removed. Support-type slots are hard to pin down uniquely, so scoring is per-field accuracy rather than all-or-nothing. Answers are obfuscated, but a pure static site cannot truly prevent cheating.
Skill data from SKeyDB (CC BY-NC-SA 4.0, non-commercial). Official Chinese from Morimens-Localizations and the Chinese wiki.
Data generated from qdby_chinese; see 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 (seals the hidden clue data into each answer) and scripts/build_card_types.py (card-type table mined from the official replays' Skill records).
Status/mechanic icons come from SKeyDB's battle icon set (Battle_Card_Buff_*, realm badges realm-badge-*), mapped by official iconId: 30 icons cover 39 common keywords; terms without official art fall back to a text glyph. CGs and Awakener profiles (birthday, height, weight, Nos index, acquisition, voice lines) come from the Chinese wiki. Replays point at the official report service and the Wangwang review tool — no battle data is mirrored here.
All progress (Silver Core, unlocked CGs, failed bank, authored puzzles, preferred Awakeners, answer history, language, backdrop theme) is kept in localStorage under the zjtt: prefix by default; once signed in it is packed into an account document and synced to the cloud, so another device restores it on sign-in, and signing out returns to local-only. Puzzles uploaded to the cloud bank are public — do not put anything private there.
School Cat Binding (binding.html) is a Binding-of-Isaac-style room dungeon with tear shots, three difficulty tiers and eight underground floors between them: Easy stops at floor three, Hard at five, Madness goes all the way to eight (late-study corridor, anatomy room, wax museum, rooftop dream, boiler room, grand auditorium, chapel of everlasting light, erosion abyss). Each tier ends on a different boss and a differently written ending; stats scale with the tier too (Easy: two extra hearts, enemy HP ×0.78, damage ×0.6, drops ×1.25; Madness: enemy HP ×1.3, damage ×1.4, drops ×0.85, score ×1.6). Each floor ends with a boss, eight bosses in all (plus Mijiu, the one enemy that is not in the official codex: a hand-drawn Q-version portrait who stands in the blueprint room and scales with the floor), and rooms come in seven kinds including an altar (pay half a heart), a challenge room (elites, two creations as reward) and a blueprint room (from floor two on, Mijiu checks how you walk; the door is open, so you can simply skip it). The hero is the Misag school cat — just the school cat; the game only ships two 96×96 square images (story-小煤球.webp and story-小煤球二世.webp, those are the original asset filenames) — no animation frames and no alpha channel, so the cat is computed, not drawn. Each pixel's luminance is used first as a matte (smooth(0.24, 0.46, L)) to strip the dark square backdrop and keep just the head, then remapped onto a three-stop palette (shadow / mid / highlight): swap those three colours and the same image becomes another fur. Body, ears, tail, shadow, whiskers and a pair of glowing slit pupils are added procedurally, so it still stands and reads as a cat in any fur. 9 furs × 6 eye colours × 7 forms = 378 combinations, each baked once into an offscreen canvas and blitted per frame. A form is not just a different face: six BUILDS each carry a skeleton — torso width, height and taper, paw size and spacing, five ear shapes (pointed / round / notched / folded / tufted), five tails (curled up / short and raised / long and drooping / plumed / reduced to a ball), fluff amount, eye scale and breathing rate. The kitten shrinks the body and leaves the head alone, so the head reads big; the elder is lean, has a bitten-off ear and whiskers that reach the floor; the chonk is wide and sits low; the longhair puffs an irregular outline; the fold has its ears lying on top of its head and a tail that is only a ball. Every attachment still uses the same texture coordinates (0..96 is the square head image, the floor is at 104), so changing form never moves a hat or a collar. Creations are drawn, not icon-pasted: 34 creations, 8 covenants and 10 Keeper skills each own a draw function (cape, paper umbrella, halo, spectacles, monocle, lantern, collar bell, tail ring, top hat, veil, satchel, a crow on the head, a pipe, a paw ring, a hanging wind chime …), layered behind and in front of the cat, so every pickup visibly hangs something new on it. There is also an auto-attack toggle (bottom-right, or F): the cat locks the nearest enemy and keeps firing, so on a phone one thumb is enough, and the setting is remembered. Bosses keep their real portraits, sealed inside a slowly rotating scratched ring above the room. All 73 images are inlined at build time into js/binding-art.js (about 418KB), so the page is still just two requests. Keyboard + mouse and a twin-stick touch layout both work; unlocks live in zjtt:binding.
Story and world: the page now carries a full line — an opening, a transition down each floor, one scene before each of the eight bosses, a scene after each of the first seven, and an ending: 25 scenes, 148 lines, typed out character by character (h / Space to advance, Esc to skip). World entries and relic archive lines are taken from the official story and collection text (1248 segment groups / 50457 AVG lines / 1174 collection entries / 77 Awakener files); “silver core”, for instance, keeps the original sentence — after life is eroded, a very small chance remains that a silver-like substance precipitates out. The school cat falling into the underground and going all the way down to the erosion abyss before climbing out (Easy and Hard turn back partway, each with its own ending), and the eight bosses (the lamplighter, Mister Lawrence, Lady Chatterley, an eye for an eye, Wrench Jackson, the great magician Houdini, the apostle of judgment, the void that claims all) are fan-written, built only from rules the original already states, and the codex keeps the two apart. The codex (title screen or pause menu) holds 23 world entries and 52 relic files, unlocked by progress; the four most basic entries are readable from the start. All ten scenes (corridor, dissection room, wax museum, rooftop, boiler room, auditorium, chapel, erosion abyss, daybreak, title campus) are drawn live on canvas, and every sound and BGM loop is synthesised with WebAudio. One background image or one audio file would each add a 1–2 second round trip at the edge, so the page is still two requests: the document and one script.
The puzzle set holds 4101 entries: data/puzzles.json (1000 core puzzles — the daily puzzle is drawn only from these, so it never jumps while the extra files load asynchronously), data/puzzles-extra.json (1000 extra) and data/puzzles-more.json (2101 more), the last two loading in the background and used as they arrive. Difficulty is recomputed across all three and split into four tiers by percentile (tier 1: 1149 / 2: 1148 / 3: 1066 / 4: 738), based on public-only signals such as how many puzzles share the same clue signature and the entropy of the damage breakdown. scripts/finalize_puzzles.py also audits every entry (4 unique members, 1–2 Wheels each, Covenants present, valid Keeper skill, ≤18 Creations, intact UUID, 4 bucket ids, 4 public clues); all 4101 pass, and no two puzzles share an identical public clue set.
No, I’m Not a Human: Morimens (fake.html) is a pixel-horror doorman game built on a day/night cycle. At night three people knock and you only decide whether to open the door; by day you sit with whoever is already inside. Letting an impostor in costs you nothing at the door — it kills one living person in the house that same night, and morning only tells you who is missing. Each resident gives you two topics a day, and you may also use the revolver: a body tells you what it was, but shooting a human costs 25 sanity. Every impostor carries exactly one flaw. It may be printed on the card (realm / role / registry number), hidden in an answer (birthday / height / nickname / star sign), or buried in how it refers to itself, its eye colour, what it carries, the animal with it, or the catchphrase it repeats. The first two can be checked against the archive in your hand; the last five only against the compendium, and the compendium records only what you have actually verified — so the first run is played on paper, and later runs on eyesight. All 73 characters appear: the 62 Awakeners stand behind the window as their official battle art and sit in the file as their full-body art, while the 11 Bilibili streamers have no battle art at all and are drawn as a profile picture on a stick figure. Eleven endings — four of them depend on who is still breathing next to you at dawn (a streamer survivor gets you one, and “24” gets you another). Progress, the compendium and the best score are stored locally.