所有人都在说谎:我是怎么做出《鲸落馆》的
一头鲸死去以后,会慢慢沉入深海。
它的身体会在海底喂养一整个生态,长达几十年。
这个现象,叫做“鲸落”。
我是刘秀。
这段时间,我做了一个游戏,叫《鲸落馆》。
它是一个现代像素风的箱庭推理游戏,带一点点克苏鲁的味道。你扮演一名侦探,在一座被台风困住的孤岛上,调查一桩发生在深夜的溺亡案。通关大约需要两到四个小时。
整个游戏,建立在一句话上:
岛上的每一个人,都在对你说谎。

《鲸落馆》标题画面。可以直接在浏览器里玩:wfm.xiu.moe
起点:如果所有人都在说谎
大多数推理故事都有一个默认的结构:一群基本诚实的证人,加上一个说谎的凶手。侦探要做的,是在一堆真话里找到那句唯一的假话。
我一直觉得,这个结构可以反过来。
现实里,说谎的从来不只是凶手。人会为了面子、为了钱、为了家人、为了一段不想被提起的过去说谎。一桩命案发生的那个夜里,每个人都在做自己的事,而那些事,大多不适合在侦探面前说出口。
所以在动手之前,我先给自己定了一条规则:
每个人的谎言,都在掩盖一件“那晚做过的事”。
但只有一个人,杀了人。
这条规则一定下来,游戏的形状就出来了。
玩家要面对的不是一个谎言,而是一整张谎言织成的网。每戳破一个谎,就有一件“那晚做过的事”浮出水面:谁溜出过房间,谁动过保险柜,谁在书房门口停留过,谁在凌晨听见了什么。
这些事拼在一起,才是那一夜真实的样子。
而凶手的谎言,就藏在所有人的谎言中间。
谎言也需要形状
“所有人都在说谎”听起来很酷,但做起来,第一个问题就是:玩家凭什么知道谁在说谎?
如果靠猜,那就不是推理,是抽奖。
我的答案是:每一个谎言,都必须在某个地方和一个事实对不上。
一个人说“我一整晚都没出过门”,那书房的书桌底下就该有一只她的耳环。一个人说“我十点就睡了”,那保险柜底下就该有一枚他的袖扣。谎言有形状,证物也有形状,两者扣不上的地方,就是破绽。
所以游戏的核心操作很简单:质询,追问,出示。

质询界面。每个人的证词都会记在手帐里,被揭穿的证词会被划掉。
找到那件和证词对不上的证物,拍在对方面前,谎言就碎了。


揭穿谎言的演出。我希望每一次戳破,都有一点“啪”的手感。
整个游戏里一共有三十五个这样的谎言。每个人都不止一个:第一层谎言往往是在保护面子,揭开以后,下面还有一层在保护真正的秘密。
出示错了,会扣“理智”。理智太低的时候,世界会开始变得不太对劲。这既是惩罚,也是这个故事氛围的一部分。
为什么是箱庭
故事发生在一座叫“鲸落岛”的小岛上。岛上有一栋宅邸,一座灯塔,一间守塔人小屋,还有一个藏在地底的潮汐洞。台风过境,船回不来,电话打不通,所有人都被困在这里。
这是推理小说里最经典的“暴风雪山庄”。
我选择它,是因为我想要一个可以被完整看清的世界。
箱庭游戏最迷人的地方,是空间有限,但每个角落都有意义。你会一次又一次地回到同一个房间,只是每一次,你知道的东西都比上一次多。

宅邸大厅。那副鲸骨在序章只是一件装饰,后来会变成很多东西。
游戏里的地图,我做成了一张宅邸的剖面图。十七个地点,随着章节一点点点亮。二楼那一排客房,一开始大多只是问号。

地图。点亮的房间可以直接前往,小方块是此刻在那个房间里的人。
同一个房间,第二章回来时会多出新的东西。拿到紫外灯以后,地板上还会亮起前一晚留下的荧光脚印。
鲸落:一个意象,撑起一个世界
名字是我很早就定下来的。
鲸落是一个真实的海洋生态现象。一头鲸死后沉入深海,它的尸体会依次喂养四批不同的生物:先是游过来的清道夫,然后是啃食骨头的小生物,再然后是靠骨头里的化学物质活下去的细菌,最后,它的骨架会变成一片礁石,供新的生命栖息。
一个庞然大物的死亡,喂饱了周围所有的东西。
我读到这个现象的时候,第一反应是:这不就是一桩命案吗?
一个有钱、有名、有秘密的人死了。他的死,让每一个人都得到了什么,或者失去了什么。每个人都靠着他的死,藏住了一点自己的东西。
于是整座岛都围绕着这个意象长了出来:死者沈渊是研究鲸落的海洋生物学家;宅邸的大厅挂着一整副鲸骨;岛底下的洞穴叫“鲸喉”;二十年前,那里发生过一场潜水事故。

书房。沈渊被发现死在这张高背椅上,死因是溺水。
至于克苏鲁,我只想要“一点点”。
岛上的老人说,夜里听见海里有人唱歌,别应。潮汐洞的水会发光。每个人都在某个时刻,好像听见了什么。
但我给自己定了第二条规则:
克苏鲁只负责氛围,不负责答案。
这桩案子里的每一个谎言,都能被一件实实在在的证物戳破。凶手是人,动机是人的动机,手法是人能做到的手法。超自然的东西永远不会成为解谜的捷径。
当然,如果你在最后坚持认为凶手“不是人”,游戏也为你准备了一个结局。

潮汐洞。池水在黑暗里发着青光。
七个人,七种谎言
岛上一共七个人。死者沈渊,和六个在那一夜各自藏着事情的人。

从左到右:沈渊、沈昭、顾时雨、钟叔、林雾、韩策、许鸣。
写人物的时候,我给每个人准备了三样东西:一个公开的身份,一个不能说的秘密,和一句为了守住秘密而说的谎。
女儿、助手、守塔人、医生、古董商、旅行博主。他们每个人都有来到这座岛的理由,也都有在那一夜离开房间的理由。
我最在意的一件事,是不让任何一个人只是“嫌疑人甲”。每个人被揭穿以后,都应该让玩家更理解他一点,而不是更讨厌他一点。
有一个小细节,我自己很喜欢:游戏里有一个角色,从第一章开始,立绘上会少一样东西。
至于是谁、少了什么,就留给玩家自己去发现吧。
三万两千字的剧本
《鲸落馆》的剧本大约有三万两千字,三百多段脚本。
为了能快速写、快速改,我给剧本设计了一套很简单的格式。它读起来像话剧剧本,但游戏可以直接运行它:
1 | zhong: ……程先生? |
角色: 台词 是对白,> 开头是旁白,me: 加括号是侦探的内心。发证物、换场景、切音乐、震屏、进小游戏,也都是一行指令。

对话。每个角色说话时都有自己音高的打字声。
写剧本时我踩过一个坑:初稿里我特别爱用破折号。停顿用破折号,转折用破折号,欲言又止也用破折号。写完回头一看,满屏都是“——”,读起来又急又乱。后来我专门删了一轮,只把它留给真正需要被打断的句子。
另一个原则是:先写真相,再写谎言。
在写任何一句台词之前,我先写了一份“真相文档”:那一夜每个人在几点几分、在哪个房间、做了什么,精确到分钟。所有的证物、证词和谎言,都是从这张时间表里长出来的。
这样做的好处是,不管剧本改成什么样,真相都不会自相矛盾。
推理板:让玩家自己把真相拼出来
每一章的最后,玩家需要打开推理板,把这一章查到的东西拼起来。
有的是填空:他死于几点,死在哪里,遗体是怎么被送回书房的。有的是一张表:七个人,五个时刻,每个人在哪里。

第二章的推理板。带虚线下划线的格子是已经确定的,剩下的要玩家自己填。
我很喜欢这个设计,因为它把“我觉得我懂了”变成了“我证明我懂了”。
游戏里还有九个小游戏:拓印便签本上被撕掉的那一页,在显微镜下比对水样,逐段回放一段录音,一扇一扇地开关走廊上的门、比对门轴的吱呀声,还有主卧墙上那块要按鲸落四个阶段转动的鲸骨壁板。

鲸骨壁板。四个圆盘,四个阶段。
玩家教会我的事
第一版做完以后,我自己从头到尾完整玩了一遍。站在玩家的位置上,很多问题一下子就暴露出来了,于是又改了很多东西。
第一件:两件证物的谎言。
有些谎言,需要同时知道两件事才能戳破。一开始我只允许出示其中特定的那一件。结果我自己玩到第二章就卡住了:手里明明两件证物都有,拿另一件去出示却被判错、扣理智;下意识地去找“合并证物”的按钮,游戏里又根本没有这个功能。
后来我改成:两件都拿到以后,出示哪一件都算。只拿到一件就出示,对方会用台词提醒你还差什么,不扣理智。
第二件:提示给多少。
卡关的时候,玩家可以“思考”。我一度做过两级提示,第一级给方向,第二级直接告诉你该质询谁、出示什么。
玩下来发现,第二级太好用了。好用到一卡住就想按,推理的乐趣全没了。最后我把第二级整个删掉,“思考”只给方向,不给答案。
第三件:指认只有一次。
一开始,看到结局以后还能读档,回到指认之前换一个人再试。这让最后的指认变得毫无分量。
现在,终章的对质开始以后不能手动存档;看到任何一个结局,自动存档都会被清除。
你只有一次机会,说出那个名字。
画面:Qwen-Image 与像素化
《鲸落馆》的背景、立绘、过场图和证物图,原图都是我用 Qwen-Image 文生图生成的。
但文生图的原图并不能直接用。它太“真”了,光影和细节都是写实的;每张图的色调也各不相同;而且它不是像素画。
所以我写了一条像素化管线:
- 把原图裁切、缩小到游戏的内部分辨率 480×270;
- 用一套全游戏共享的调色板重新量化颜色,让所有画面看起来属于同一个世界;
- 人物立绘先在洋红色背景上生成,再抠掉背景,得到干净的像素边缘;
- 最后,给每个房间手工标注:哪些物体可以调查、角色站在哪里、光从哪里来、窗外有没有雨。

上排左边是 Qwen-Image 生成的原图,右边是像素化后的游戏背景;下排是同一区域的局部放大。
角色的一致性是另一个难题。有一次,我在描述里漏写了性别,结果旅行博主许鸣被生成成了一个男人。后来重新生成了好几轮,才找回我想象中那个脖子上挂着耳机、总在偷看别人的女孩。
一个音频文件都没有
这可能是《鲸落馆》里最“工程师”的一个决定:游戏里没有任何一个音频文件。
雨声、海浪、雷声、走廊里的脚步、升降梯的电机、每个人说话时的打字声,全部是用浏览器的 Web Audio 实时合成的。
这样做一开始只是为了让游戏足够小。后来它反而变成了一种能力:比如走廊上五扇门,每一扇的门轴吱呀声都不一样,而这个区别,本身就是一道谜题的答案。
还有那首“海里的歌”。它是几段很低的正弦波,慢慢地叠在一起,时起时落。我希望玩家听见它的时候,不确定那到底是风,还是别的什么。
所以,建议戴耳机玩。
技术上,尽量小
技术选型上,我的原则是尽量小,尽量自己能完全掌控。
没有用现成的游戏引擎。游戏本体是一个 480×270 的 Canvas 画面,在大屏幕上按整数倍放大,保证像素锐利;界面层用普通的网页元素叠在上面,所有尺寸都以“游戏像素”为单位计算。整个项目用 TypeScript 写,Vite 打包,字体用的是开源的 Fusion Pixel Font。
剧本、证物、证词、房间、谜题,全部是数据。我另外写了两个小工具:
- 一个校验器,检查三百多段脚本里有没有写错的角色名、不存在的证物、永远无法满足的条件;
- 一个自动通关脚本,从序章开始,按真结局的路线走完两百多步,每一次改动之后都跑一遍,确保游戏还能从头打到尾。
对于一个几乎每天都在改剧本的项目,这两个工具救了我很多次。

手机横屏。iPhone 上“添加到主屏幕”以后可以全屏玩。
最后,我给它加上了手柄支持和手机横屏适配。在手机上用浏览器打开,横过来就能玩;添加到主屏幕以后,它会像一个独立的 App 一样全屏运行。

侦探的手帐。所有证物、证词、人物关系和对话记录都在这里。
写在最后
做《鲸落馆》的过程中,我越来越觉得:一个好的谎言,和一个好的谜题,其实是同一种东西。
它要看起来合理,要经得起第一次追问;但它又必须在某个地方留下一道缝。玩家找到那道缝、把证物拍在桌上的那一刻,应该觉得:
“我早该想到的。”
如果你愿意,可以去 wfm.xiu.moe 玩一玩。电脑和手机都可以,两到四个小时,建议戴耳机,建议别看攻略。
岛上的每一个人都在说谎。
希望你能找到那个真正该被找到的人。
谨以此作,献给所有被大海带走的人。