1 凌晨零点十七分,系统给我发了工单
前公司竟在我被裁员的第七天给我发来一条消息。
不是拖欠的工资,不是离职证明,也不是那句写得像葬礼致辞一样的“感谢你为公司作出的贡献”。
消息只有一行:
【《归墟》封测账号将在十分钟后注销,请及时登录完成最后一次测试。】
我盯着屏幕看了三秒,回了四个字:
【工资结一下。】
对面没回。
我把手机扔到沙发上,去厨房热昨晚的剩饭。电饭锅跳闸没多久,米饭外面烫,里面还是凉的。我用筷子戳了几下,忽然想起以前在测试组,凌晨三点趴在桌上吃泡面的时候,组长会把最后一根火腿肠扔给我,说:“唐梨,你不是最能熬吗?等这个版本过了,我给你放三天假。”
版本过了,组长升职了。我和另外六个人一起被裁了。
我叫唐梨,二十七岁,前《归墟》项目测试员。严格来说,我不是程序员,也不是设计师。我干的活儿是把游戏里那些“不应该发生但偏偏发生了”的事找出来,再写成工单递给真正能改代码的人。
譬如怪物走路会穿墙,玩家卡进楼梯,NPC说到一半突然开始背天气预报。
我负责证明它们确实坏了。
至于修不修,得看排期、成本和老板的心情。
《归墟》是公司最后一个项目。做了四年,换过三任制作人,烧掉一大笔钱,最终停在封测阶段。它号称“能记住每一个玩家选择的开放世界”,听起来很厉害,实际连新手村的鸡都能卡进屋顶。
我离职前,测试组留下的最后一份文档叫《未关闭问题清单》。我记得自己在里面提过一条:
严重级:退出流程缺少兜底,极端情况下,玩家可能无法触发离场事件。
制作人批注:封测期间优先级低,后续修复。
后续就是项目被砍,服务器封存。
我把剩饭端回客厅,正准备把那条通知删掉,手机自己亮了。
黑色屏幕中央跳出一行白字。
【最后一轮测试开始。】
紧接着,房间里的灯灭了。
不是跳闸那种暗,而是光像被一只手从空气里抽走。窗外的汽车喇叭停在半截,冰箱压缩机的嗡鸣戛然而止。桌上那杯没喝完的水里,一圈细小的波纹凝住了。
我站起来,脚底突然一空。
失重感只持续了一瞬。
下一秒,我坐在一辆行驶中的公交车上。
车窗外没有城市,只有一片湿漉漉的黑。车顶的荧光灯忽明忽灭,前门旁贴着一张红底白字的线路图:夜间专线17路——末班车。
我低头,发现自己穿着一件灰色工装外套,胸前挂着塑料工牌。
工牌上是我的名字,下面还有一行小字:
【临时维护员,编号QA-017。】
我还没来得及骂人,视野右上角跳出半透明面板。
【欢迎进入《归墟》。】
【新手副本:最后一班车。】
【通关条件:抵达终点站。】
【附加规则:请遵守车厢内的乘车守则。】
车窗上慢慢浮出几行血红色的字:
一、上车后请坐下,不要站在过道。
二、无论听见什么声音,都不要回头。
三、司机询问目的地时,请回答站名,不要回答“家”。
四、车到终点后,所有乘客必须下车。
五、如果车厢里多出一个人,请当作没看见。
我把最后一条读了两遍。
这规则写得不怎么样,标点也不统一。
典型的临时文本,至少经过两次拼接。
我习惯性地在空气里点了两下,眼前竟真的弹出一个灰色窗口。
【发现隐藏职业:灰盒测试员。】
【职业效果:可观察副本中未对玩家开放的异常字段;可提交维护工单。】
【注意:维护权限并非万能。每次提交工单,必须提供可复现的异常证据。每个副本最多修复一次。】
【当前维护时长:00:00:30。】
倒计时从三十秒开始跳。
我第一反应是:这破公司死了都不忘压缩工单时限。
第二反应是,车上还有别人。
车厢前排坐着一个穿黄色冲锋衣的胖子,怀里抱着自拍杆,嘴里不停念叨:“大家别慌,我常玩恐怖游戏,知道套路。这种开局通常会先死一个路人,我们只要……”
后半句话被他自己咽了回去。
他旁边坐着个短发女人,穿黑色卫衣,裤脚沾着一块已经干掉的血。她把一只手压在左肋,脸色白得厉害,却没有出声。
最后一排坐着一个背书包的小男孩,约莫十岁,抱着一只少了半边耳朵的兔子玩偶。他始终望着窗外,像在等什么。
车头,司机穿着旧制服,双手稳稳搭在方向盘上。后视镜里看不清他的脸,只看见一双发灰的眼睛。
公交车广播响了。
“下一站,幸福里。”
我一下坐直了。
这车明明只有一条夜间专线,线路图上根本没有“幸福里”。
我翻出面板。视野边缘浮现出一串只有我能看见的调试信息:
【RouteNode_04:NULL】
【RouteNode_04_DisplayName:幸福里】
【RouteNode_04_Trigger:未绑定】
我心里一沉。
地图节点有名字,没有触发条件。按照正常逻辑,车辆到了站也不会开门;如果副本机制认定乘客未下车,可能会把全车人当成“未完成实体”处理。
这不是恐怖氛围的问题,是程序漏了一个流程。
胖子终于注意到我:“姐,你是不是也被拉进游戏了?你什么职业?”
“测试员。”
他愣住:“测试员?这职业能打吗?”
“不知道。”我看着他自拍杆上忽明忽暗的指示灯,“不过能帮你投诉。”
车猛地一晃。
司机的声音从前面传来,沙哑得像喉咙里卡着一口砂子。
“各位乘客,查票。”
车厢里安静下来。
司机从座位旁抽出一叠泛黄车票,慢慢往后递。第一个拿票的是短发女人。她刚碰到车票,手背上的血管便浮出细细的黑线。
她咬紧牙关,没叫。
轮到胖子时,他把自己的电子面板翻了出来:“我都买票了,系统发的。”
司机没有看他,只说:“纸票。”
胖子嘴唇发干:“没有。”
司机从后视镜里看了他一眼。
那一眼像针,扎得胖子肩膀一缩。
我看见车厢顶上的规则字迹有一行在缓慢闪烁。
【隐藏规则:乘客可以补票一次。】
这行字下面还有极淡的一串灰字:
【补票条件:说出上一站。】
我还没开口,司机已经伸出手。
“没票的,去后门。”
后门外是一片黑暗,车还在高速行驶。
胖子脸都白了,急得声音发尖:“我、我上一站是人民路!我刚从人民路上的车!”
司机停了两秒。
“车没经过人民路。”
胖子张着嘴,没能再说出话。
我盯着他脚边那道正在扩大的黑影,忽然想起《归墟》早期版本里有个没修完的逻辑:副本不会判断乘客说的话是真是假,它只判断乘客有没有按要求给出一个站名。
“你说错了。”我提醒他,“别解释,换个站名。”
“啊?”
“快!”
胖子闭眼乱喊:“幸福里!我上一站是幸福里!”
司机的手停在半空。
车票啪地落进胖子怀里。
他的黑影缩了回去。
车里另外两个人同时看向我。短发女人的眼神里第一次有了审视,小男孩却仍然不看我,只把怀里的兔子抱紧了一些。
司机往后走来。
我以为他要查我的票,结果他停在我面前,低下头。
“请问,您要去哪一站?”
规则第三条像一根冰冷的针,扎进脑子。
不要回答“家”。
我抬头看着他:“旧城区维修站。”
司机没有立刻反应。他那张模糊的脸像信号不良的屏幕,闪了两下。
“本车没有这一站。”
“那就加站。”我说,“你们这线路图做得太差了。”
“……”
胖子小声说:“姐,这时候还挑版本呢?”
我没空理他。
我视野里的维护倒计时只剩七秒。既然是未绑定的节点,异常证据已经足够;但工单一旦提交,本副本的维护机会就会用完。
我摸出那张没有字的车票,翻到背面,用指甲划出“维修站”三个字。
【提交维护工单?】
【异常描述:RouteNode_04 存在显示名称,无有效触发条件。】
【复现步骤:乘客选择幸福里站,车辆抵达后无下车事件。】
【建议修复:绑定站点触发器,恢复终点下车流程。】
我按下提交。
眼前一黑,像有人把整条车厢拆开重装。我的太阳穴猛地一跳,疼得眼泪一下涌出来。等视野恢复时,车窗外已经出现了破败的站牌。
幸福里。
车缓缓停下。
前门打开的瞬间,风灌进车厢,带着湿泥、烧焦塑料和某种很淡的花香。
广播里传来一个女孩子的声音。
“爸爸,我到了。”
司机的手抖了一下。
他握方向盘握得太紧,指节泛白。后视镜里的那双灰眼睛,头一回有了活人的光。
“下一站……”他哑声说,“下一站,终点。”
小男孩终于抬起头。
“叔叔,”他问,“我可以下车去找我爸爸吗?”
司机盯着他看了很久,嘴唇动了动。
最终,他点了头。
我听见车厢系统发出清脆的提示音。
【隐藏条件达成。】
【副本“最后一班车”通关。】
【玩家存活:2/2。】
【乘客实体:4/4。】
【维护员唐梨,获得“未归档乘客”标签。】
提示音结束后,司机没有消失。他从胸前口袋里摸出一枚旧车票,递给我。
票面已经磨得发白,只剩一行手写字:
陈小满,幸福里站。
“谢谢。”他说。
我接过车票,嗓子有点干:“不客气。下次上线前,记得把路由表补全。”
司机像是听不懂,只把脸转向窗外。
而我的视野里,忽然跳出了另一条只有维护员能看见的提示:
【警告:本世界存在未登记的玩家意识。】
【归档进度:91%。】
【最终清理将在72小时后启动。】
我还没来得及问清楚,公交车的窗户便一面接一面碎成了光。
我再睁眼时,躺在自家客厅的地板上。
电视自己开着,画面上是一片猩红的天空。新闻主播嘴唇发白,声音却异常清楚:
“今晚零点,全国多个城市出现无法解释的公共安全事件。大量市民报告,视野中出现类似游戏界面的文字……”
“目前已有三百余人失联。”
屏幕下方滚动着一条新闻标题:
【不明游戏《归墟》全球上线,玩家称退出按钮消失。】
我的手指还在发抖。
手机震了一下。
是一条来自前同事许停的语音。
她只说了五个字。
“唐梨,别睡。”
然后,语音里传出一阵很远的、像是从水底传来的敲门声。
2 便利店不卖后悔药
许停以前是《归墟》的叙事策划,后来转去做医疗游戏模拟。她说话一向简洁,连骂人都像在写需求文档。
我回拨过去,电话响到第八声才接通。
“你在哪儿?”我问。
“南城医院,急诊大厅。”她那边很吵,有人哭,有人喊护士,广播里反复播放着请大家不要拥挤的通知,“我看见副本了。就在大厅里。唐梨,你是不是也进过游戏?”
“进过一个公交车。”
“里面的人能出来吗?”
“能。”我看了眼掌心,那张旧车票还在,“但我不确定下次还能不能。”
电话那边静了一下。
“我弟不见了。”许停说。
她说这句话的时候声音没有颤,甚至比刚才更平稳。我却听见背景里有一声很轻的金属碰撞,像有人把医疗剪刀搁在不锈钢托盘上。
我认识她弟许至,十九岁,学计算机,平时话不多。前年许停值夜班,他给我们测试组送过一次夜宵,进门先问谁是唐梨,说他姐总说我能从最烂的游戏里找到最有用的错误。
“我马上过去。”我说。
“先别来。”许停立刻接道,“医院现在不对劲。急诊大厅的门从外面打不开,里面多了一条走廊,尽头有个红色指示灯。凡是往那边走的人,出来时都会忘掉一个人的名字。”
“你怎么知道?”
“我刚把一个保安拉回来。他忘了自己女儿叫什么。”
她吸了口气,似乎终于有一点压不住了。
“唐梨,我不是不想救他。我是怕我找到他的时候,连我自己是谁都不记得。”
我握紧手机。
“先别去那条走廊。”
“你有什么办法?”
“没有。”我说,“但我知道有些副本不是靠冲进去通关。等我十分钟。”
挂掉电话,我打开电脑。桌面还留着前公司发的封测安装包,图标是一个倒置的黑色月亮。我点开,登录界面已经变成全屏的血色提示。
【归档倒计时:71:44:09。】
【区域副本:南城医院 / 便利店 / 地下通道 / 未命名。】
我放大地图,发现医院旁边有一条灰色的路线,直通地下一家二十四小时便利店。
那个店我去过。以前公司楼下就有同品牌门店,我加班时经常在里面买关东煮。设计组把便利店做成过早期的新手副本,后来因为恐怖程度太高被删掉了。
我记得测试文档里有一句话:
“在本副本中,玩家必须完成一笔合法交易,才能获得离开收银区的权限。”
问题是,他们后来加了很多怪物,却没有补齐交易失败后的流程。
我把那条灰色路线截图发给许停。她没再说话,只把位置共享打开。地图上,代表她的蓝点在南城医院与地下便利店之间来回闪,像被两张地图反复拉扯。后来我才知道,系统把医院和便利店接成了一条“夜班路线”,只要进入这条路线,玩家就可能被传送到相邻副本。
我接着登录游戏。
【是否进入区域副本?】
我按下确认。
这一次没有失重。房间里的灯泡从中心往外暗下去,像一只眼睛慢慢闭上。等我再睁眼,自己已经站在一家小便利店门口。玻璃门上贴着促销海报,热柜里几串关东煮浮在发白的汤里,收银台旁的风扇吱呀吱呀转着。
店内广播重复播放:“欢迎光临,请遵守购物秩序。”
自动门后面,许停站在货架尽头,手里握着一把从护士站拿来的剪刀。她看见我,眼里先闪过一丝松动,随即又绷紧了。
“你怎么进来的?”
“走正门。”我说,“这次没有车。”
她没笑,只把我往身后拉了一下。
柜台后站着个穿红马甲的年轻店员,胸牌上写着:小齐。她的头发扎得很高,额角有颗小痣,正用抹布擦着一块已经很干净的台面。
“欢迎光临。”她抬起脸,笑容标准得像贴在墙上的服务守则,“需要什么?”
我刚想开口,视野里出现一行黑字。
【副本任务:在凌晨四点前完成一次交易。】
【规则一:不要购买没有标价的商品。】
【规则二:如果店员说“欢迎回家”,请立即离开收银台。】
【规则三:不接受退款。】
【规则四:请勿询问店员何时下班。】
我看向柜台上的价签。矿泉水两块,面包六块,关东煮每串三块五。所有商品都有价格,只有最角落的一只纸杯没有标价。
纸杯里装着半杯温水,杯沿有淡淡的口红印。
许停顺着我的目光看过去,压低声音:“我已经在这儿困了四十分钟。每次有人试图买东西,店员都会问他一句‘欢迎回家吗’,然后那个人就不见了。”
“那你买过东西吗?”
“没有。我不敢。”
我走到柜台前,拿起一瓶矿泉水。
店员小齐的笑容加深了一点:“三块钱。”
“扫码还是现金?”
“现金。”
“我只有电子支付。”
“那您可以回家取。”
她抬起眼,看着我。
“欢迎回家。”
空气像突然被抽走。
许停一把抓住我的手腕,拉着我往后退。店内的灯在同一瞬间全灭了。货架之间响起密密麻麻的脚步声,像有人穿着拖鞋在狭窄走廊里来回走动。
广播变了调。
“欢迎回家,欢迎回家,欢迎回家。”
黑暗里,有人贴着我耳边说:“你终于回来了。”
我没有动。
我听见小齐的声音从柜台后传来,轻得像怕惊醒谁。
“妈妈,今天你能来接我吗?”
紧接着,是另一个声音,粗暴、疲惫,明显属于一个男人:“别闹了。我还要上夜班。你要懂事。”
“我已经很懂事了。”小齐说,“我一直在等。”
灯重新亮起时,柜台后空了。
那瓶矿泉水还在我手里,瓶身上贴着一张新的标签:
【价格:一个你再也不想提起的晚上。】
我把瓶子放回去,心脏跳得发疼。
这不像普通的恐怖副本。它在读取人最不愿意碰的记忆,再把记忆伪装成交易价格。
“我们得完成交易。”我说,“但是不能买这些东西。”
许停盯着我:“你想买什么?”
我看向那只没有标价的纸杯。
“先弄清楚它为什么没有价格。”
我从货架上拿了一个普通面包,走到柜台前。小齐像什么都没发生一样重新出现,抬头冲我笑。
“六块钱。”
“可以刷卡吗?”
“现金。”
我拿出一枚游戏里发的铜币。它是从公交副本里带出来的,边缘有一道锯齿。铜币碰到柜台时,收银机发出一声短促的滴响。
【未知道具:旧车票代币。】
【价值评估失败。】
小齐低下头,眼神第一次不像程序那样平稳。
“这不是钱。”
“那什么才算钱?”我问。
她张了张嘴。货架后面的阴影突然一阵扭曲,有个戴着白色塑料面具的高个子从里面挤出来。面具上画着一张笑脸,右边的嘴角却被红笔划得很长,像一道缝合伤口。
【盘点员出现。】
【所有未完成交易,将被视作偷窃。】
盘点员手里提着一把长柄扫码枪,枪头闪着绿光。它扫过一排货架,货架上的商品就像被抹掉一样一件件消失。
许停抬起剪刀,挡在我前面。
“跑。”她说。
我却盯着收银机。刚才那声滴响后,屏幕左下角闪过一串调试信息:
【Transaction_State:PENDING】
【Refund_Flow:NULL】
【Employee_Shift_End:未配置】
所有交易一旦开始,就只能完成,不能退款;店员没有下班条件;未结账的商品会被盘点员当成偷窃。换句话说,这家便利店根本没有关门流程。小齐只能一遍遍工作,直到游戏把她删掉。
这就是为什么她会问“妈妈今天能不能来接我”。这句台词不是恐吓,它是残留在角色记忆里的真实愿望。
我翻开工单界面。
【本副本维护次数:1。】
【当前异常:交易状态无法从PENDING转入完成。】
可复现步骤我已经有了。修复建议也很清楚:给支付失败和交班流程添加退出路径。
代价呢?
这次维护面板多了一行小字。
【修复将扣除玩家一项私人记忆。请选择可支付的记忆编号。】
我怔在原地。
记忆?
盘点员已经朝我们走过来,扫码枪每扫一下,地面就消失一块。许停抓住我的肩膀,急得眼尾发红:“唐梨,你看见什么了?”
我深吸一口气。
记忆列表里有很多条:第一次领工资、母亲最后一次做的红烧肉、大学毕业那天的雨……最下面,是一条没有名称的灰色记录。
【记忆编号QA-017:测试组最后一夜。】
我忽然想起那晚。项目被砍的消息传来,大家在会议室里坐到凌晨。组长抱着一箱没喝完的可乐,说这个项目本来差一点就成了。小齐的角色原型就是那时做出来的,一个十八岁的便利店夜班店员,永远赶不上最后一班公交。我们给她写了三种结局,其中一个结局是有人来接她下班。
最后这个结局被删了。制作人说,玩家不需要那么多情绪负担。
我盯着那条记忆,嗓子像吞了碎玻璃。
“用它。”我说。
【是否确认支付?】
“确认。”
那一瞬间,我脑子里像有一页纸被人从中间撕开。会议室里的笑声、可乐罐的碰撞声、有人把外套披到我肩上的触感,全部褪成一团模糊的白。可我还记得,我曾经很在意那个项目。至于为什么在意,已经说不清了。
工单提交成功。
收银机发出一声悠长的提示音。
【交易流程已补全。】
【员工交班流程已恢复。】
【退款流程已开启。】
便利店门口的电子钟,从03:59跳到了04:00。
小齐抬头,像第一次看见清晨一样眯了眯眼。她把红马甲脱下来,仔细叠好,放到柜台下面。然后从抽屉里拿出一只纸杯,往里面倒了热水。
“我下班了。”她说。
她顿了顿,朝我们露出一个很浅的笑。
“你们要是见到我妈妈,能不能替我问一声,她是不是还记得我?”
门开了。
外头是一条普通的街。天还是黑的,但街角有一盏路灯亮着,灯下停着一辆旧自行车。
我没有回答她。
我怕自己一张嘴,就会说出一个连我都不相信的承诺。
我们跑出便利店时,背后传来卷帘门落下的声音。许停在门口停了很久,右手还握着那把剪刀,指节白得像纸。
“我弟也在里面。”她忽然说,“我知道。”
“什么?”
“那条医院走廊,尽头的红灯。它一直在播许至小时候的声音。”她眼圈终于红了,却没有掉泪,“我听见他说,姐,我在这儿。可我不敢进去。万一我进去以后,忘了他,我就连找他的理由都没有了。”
我看着她,想说些安慰的话。
最后只说:“那我们把他找出来。”
许停点了点头,抬手抹了一下鼻子,像嫌自己这个动作不够体面。
“先说好。”她看着我,“找人的时候,你不许自己乱交记忆。”
“那得看行情。”
“唐梨。”
“好,不乱交。”
她这才松开了握得发白的手。
天空深处忽然响起一声钟鸣。每个人视野里同时浮出一行红字:
【归档进度:93%。】
【距离最终清理:66小时。】
我们没有时间了。
3 医院四楼没有病人
南城医院急诊大厅已经被临时封锁。玻璃门外挤满了人,有人举着手机直播,有人拍打门框,有个穿校服的男孩蹲在台阶上,一遍遍按着手机上的退出按钮。
按钮没有反应。
我和许停从便利店副本里出来时,医院的天花板上已经出现了半透明的地图。走廊像被复制粘贴过,通往不同病区的门牌一模一样:急诊、检验科、住院部、家属等候区。
最深处那条走廊没有门牌,只有一盏红灯。
许停站在入口处,肩膀绷得很紧。她平时走路很快,像随时能把每一分钟都安排得恰到好处。现在她却盯着地砖上的一道裂缝,半天没有迈步。
“我弟最后一次给我发消息,是凌晨零点零三分。”她说,“他说他去楼下买水,顺便看一眼新闻。后来就没回我。”
“你们住得很近?”
“我住医院宿舍,他住大学寝室。那天他来给我送饭。”
她说到这里,喉咙忽然卡住了。她咳了一声,像要把某种不合时宜的东西压回去。
我没催她。
过了会儿,她从口袋里掏出一张折了四次的便签,边缘已经被汗浸软。上面是许至的字:
姐,别总吃冷饭。你胃不好。
“他每次来都写这个。”许停说,“明明是他最不会照顾人。”
我把便签还给她。
“走吧。”我说,“先看看这条走廊到底是什么。”
刚跨过门槛,红灯就闪了三下。墙上的电子牌亮起。
【副本:四楼病区。】
【任务:在查房结束前,确认所有病人身份。】
【规则一:病人说自己没病时,不要反驳。】
【规则二:护士叫你名字时,请确认姓名与腕带一致。】
【规则三:没有家属签字,不得带病人离院。】
【规则四:如果四楼出现第十三张病床,请立即通知护士长。】
我低头数了数走廊两侧的病房门牌:401、402、403……一直到412。
没有413,也没有第十三张床。
“这副本看着比前两个麻烦。”许停把便签收进胸口口袋,语气已经恢复到平常那种干净利落,“你有职业视野,先把能看到的东西告诉我。”
“这里的病人身份是关键。系统要我们确认,却不保证每个人都是真的病人。”
“那你怎么确认?”
“看谁在害怕。”
许停看了我一眼,似乎想反驳,最后没说话。
第一个病房里躺着一个头发花白的老太太。她穿着蓝白条纹病号服,手腕上的腕带写着“刘月娥,72岁”。床头柜上放着一只保温杯,杯口有被反复擦拭过的痕迹。
老太太见我们进来,先把被子往上拉了拉。
“我没病。”她说,“我就是等我儿子。”
我没有反驳她,只看向床边的监护仪。仪器上没有数值,屏幕却显示着一条不断延伸的绿色直线。
“您儿子什么时候来?”我问。
“下班就来。他答应过的。”
老太太的眼神很亮,像一个坚信约定不会过期的人。
我翻开床头的病历。第一页写着入院日期:十年前的今天。第二页是空白。第三页则是一张已经泛黄的缴费单,金额只有三十七块五。
系统提示音响起。
【身份核验失败。】
【病人刘月娥不存在于当前数据库。】
老太太脸上的笑慢慢收了回去。她把手伸向床头柜,摸了好几下,才摸到那只保温杯。
“那我儿子呢?”她问。
我不知道该怎么回答。
许停走过去,轻轻把杯子放到她手心里。她没有说“您儿子会来的”,也没有说“您该休息了”,只是替她拧开杯盖。
“先喝口水吧。”许停说。
老太太盯着她看了半天,忽然问:“你是我儿媳妇吗?”
许停动作一顿。
“不是。”
“那你怎么对我这么好?”
许停低下头,看着杯子里晃动的水,声音很轻:“因为我也在等一个人。”
病房里的绿色直线忽然动了一下。
屏幕跳出一行字:
【身份核验通过。】
【备注:家属暂未到场。】
我眼皮跳了跳。
“原来身份不是靠数据库核对。”我说,“是看有没有人承认她的存在。”
许停没接话,只把保温杯拧好,放在老太太够得到的地方。
我们继续往前。
402病房里住着个年轻男人,腕带上写的是他的名字,病历却塞着另一个人的照片。403的病人能说出自己的身份证号,却不知道自己今年几岁。404空着,但病床上摆着一只儿童书包,拉链没拉好,露出半截数学卷子。
每核验一个人,走廊的灯就亮一格。
走到408时,许停忽然停下。
“你听。”
墙里有敲击声。
三下,停顿,再两下。
她脸上的血色一下退干净了。
“是许至。”
她转身就要去推墙,我一把拉住她。
“等等。声音从墙里传出来,不一定说明人就在后面。”
“我知道那是他。”她声音发紧,“他小时候怕黑,就这么敲门。三下,然后两下。我教他的。”
墙里又响起五声敲击。
许停眼圈红得厉害,嘴唇却抿成一条很直的线。她像是在跟自己较劲,最终没有挣开我的手。
“先核验完。”她说,“我答应过你,不乱来。”
我们终于走到412。病房里没有人,只有一台旧电视,正在播放一段十年前的监控录像。录像中的急诊大厅挤满了病人,护士推着担架来回穿梭。画面右下角,一个少年背着书包,把一份盒饭放到护士站桌上,然后转身离开。
许停往前走了一步。
“是他。”
“我知道。”
录像里的少年走到门口,突然回头,像是隔着镜头看见了我们。他抬起手,在玻璃上敲了三下,又敲两下。
电视屏幕骤然变红。
【警告:发现未登记病床。】
【十三号病床即将加载。】
病房中间响起金属滑轨拖动的声音。原本空着的墙面向两侧裂开,一张病床从墙里缓缓推出来。床单雪白,枕头上有一块浅浅的水渍。床头腕带自动打印,名字一栏写着:
许至。
许停的手抖了一下。
床上躺着个少年,脸色苍白,闭着眼,像只是睡着了。他右手手背上有一小块小时候留下的烫伤,形状像一片歪歪扭扭的叶子。
许停认得那块疤。
她慢慢走过去,伸手要碰他,却在离他一寸的地方停住了。
“许至。”她喊。
少年没有反应。
“许至,我是姐。”
监护仪发出规律的滴声。床头屏幕亮起:
【患者状态:等待家属确认。】
【意识来源:未登记玩家记忆。】
【请在三十秒内签署离院同意书。】
一张电子签字板滑到床边。
许停看着它,没有马上拿笔。
“为什么要我签字?”她问我,“如果这是他,签字就能带他走吗?如果这只是个复制出来的东西,我签了以后,会不会把真正的他留在里面?”
这是个没有正确答案的问题。
我盯着签字板,发现右下角有一行不起眼的字段:
【Exit_Consent:默认拒绝。】
系统要求家属签字,却把默认值设成拒绝。只要倒计时结束,病人就会被强制留院。所谓确认身份,其实是在筛选谁愿意替一个人承担责任。
“许停。”我说,“我不能保证这里的许至是不是你弟弟。但你可以先问他一个只有你们知道的问题。”
她闭了闭眼。
“许至,你上高中那年,为什么把我送你的那本书塞进冰箱?”
床上的少年没有动。
倒计时剩二十秒。
“你说你怕我下夜班回家没东西吃,冰箱里塞满了东西。”许停咽了一下,“那本书又不能吃,你放进去干什么?”
少年睫毛颤了颤。
“因为……”他艰难地睁开眼,“你总说……书比我重要。我想试试,冻一晚上,书会不会变好吃。”
许停忽然笑了,笑到一半,眼泪掉下来。她赶紧偏过头,像不愿让弟弟看见。
“傻子。”她说。
她签下了自己的名字。
病床旁边的门缓缓打开。床单下的人影渐渐清晰,少年从床上坐起来,手背上的烫伤仍在。他看见姐姐,第一句话不是“我好害怕”,也不是“你怎么才来”,而是:
“姐,你是不是又没吃饭?”
许停终于没忍住,伸手把他抱进怀里。她抱得很紧,像怕松一松手,怀里的人就会重新变成一段录像。
我转过身,给他们留出一点位置。
走廊尽头响起了另一种声音。
像一台老旧服务器正在启动,风扇摩擦着灰尘,发出持续低沉的嗡鸣。
所有病房门同时打开。里面的病人陆续走出来,有人扶着墙,有人拎着保温杯,有人赤着脚,像刚从一个很长的梦里醒来。
系统提示:
【副本“空床病区”通关。】
【玩家存活:2/2。】
【附加奖励:未归档意识碎片×1。】
我看向许至。他身上没有玩家面板,只有一条淡得几乎看不见的灰色状态栏。那不代表他是个普通NPC。系统拿许停的记忆、医院里的影像和许至留下的个人信息,拼出了一个能回应她的意识副本;而眼前这个人至少知道姐姐生活里那些无人旁听的小事。至于这份意识是不是“真正的许至”,我们谁都没有答案。
【角色类型:非玩家角色。】
【状态:自主意识异常增长。】
【清理队列:待处理。】
我呼吸一滞。
“唐梨?”许停抱着弟弟回头,“你怎么了?”
我关掉面板,尽量让声音听起来正常。
“我们得尽快离开这里。”
“为什么?”
“因为它不是在抓玩家。”我看了眼走廊里那些刚刚从病房出来的人,“它还在抓那些不应该有自己想法的人。”
4 排行榜第一名死在新手村
我们离开医院时,天色仍旧是深夜。
街道上却到处是游戏化的痕迹。红绿灯上方悬着半透明的任务提示,十字路口的斑马线时不时变成迷宫,便利店门口站着一个头顶血条的巨型兔子玩偶。远处一栋写字楼上方漂浮着蓝色数字,像有人把整座城市的血量标在了天上。
越来越多的人开始适应这些东西。
有人组队刷街区里的低级怪,有人在小区门口开摊售卖恢复药剂,有个穿睡衣的老大爷蹲在垃圾桶边研究技能面板,嘴里念叨“这技能冷却时间比我家热水器还长”。
也有人把它当成了机会。
我们在一处地铁入口碰上了“黑帆公会”的人。他们穿着统一的黑色战术外套,肩膀上绣着一只白色船锚。最前面的男人三十出头,头发剃得很短,胸前挂着金色玩家徽章。
【玩家:陆行舟。】
【职业:征服者。】
【等级:29。】
【区域排行榜:第一。】
他身后跟着六个人,装备齐全,腰间别着闪光弹和医疗包。和旁边那些穿着拖鞋、拎着菜刀的普通玩家相比,他们像是提前准备了半年。
陆行舟看到我们,目光先落在许停手上的剪刀,再落在许至身上。
“刚从医院出来?”他问。
许停没说话。
陆行舟笑了一下:“那边副本我带人打过。奖励不错,就是有点费人。你们能活着出来,运气可以。”
我不喜欢他说话的方式,像是在点评仓库里一批没有坏掉的货物。
他打开个人面板:“我们公会现在收人。等级低没关系,只要听指挥。你们交出医院副本拿到的隐藏奖励,我可以给你们一个安全屋名额。”
许至皱起眉头:“凭什么?”
陆行舟看了他一眼,笑意淡了些:“凭我能让你活。”
“那你先证明一下。”我说。
陆行舟转向我:“你是什么职业?”
“维护员。”
他像是听见了什么笑话,身后有人直接笑出了声。
“后勤职业啊。”陆行舟说,“我这儿不缺打杂的。”
我点头:“那挺好,祝你们组队愉快。”
我转身要走,他却抬手拦住我。
“等等。”他的视线在我面板上停了一瞬,“你是不是唐梨?”
我心里一紧。
“你认识我?”
“以前做游戏测试的?”陆行舟把一张截图递到我面前。截图上是我的员工头像,下面是一段匿名帖子:《归墟》测试员唐梨,曾在封测期间多次提出副本异常,导致项目进度延期。
帖子没有署名,但我知道它来自谁。
我前公司的制作人曹成。
陆行舟收起截图:“我花钱买了旧游戏资料。你这种人知道哪里有漏洞。加入黑帆,我给你分成。”
“要是我不加入呢?”
“那就别在我的区域活动。”他说,“安全屋有容量,不是慈善机构。”
我看着他肩上的公会徽章,忽然觉得很熟悉。黑帆的图案和《归墟》里一个早期测试阵营一模一样。那阵营原本是用来测试PVP匹配的,设定上会把低等级玩家当成资源,强者则负责“清理地图”。后来这个设定被玩家骂得太狠,正式版删掉了。
看来有人把废弃机制带进了现实。
“你们的据点在哪儿?”我问。
陆行舟以为我动了心,表情松下来:“前面体育馆。愿意来谈就报我的名字。”
“谢谢。”我说,“我只是想知道,离你们最远的路怎么走。”
他脸色冷下来。
我们离开后,许停压着声音问:“你为什么激他?”
“因为他刚才不是想招人,是想确认我能不能替他找漏洞。”
“有什么区别?”
“招人会问你擅长什么。利用人只会问你能提供什么。”
许至走在她旁边,偷偷看我一眼:“你以前是不是经常和这种人打交道?”
“以前我只跟程序打交道。”
“程序也会撒谎?”
“程序不会。”我说,“但写程序的人会。”
我们在一间旧网吧暂时落脚。门口的卷帘门被撞得变了形,柜台上还放着没喝完的奶茶,吸管上粘着一颗已经发白的珍珠。二楼有四台电脑仍然亮着,桌面上循环播放着一款游戏的登录动画。
屏幕里,一个穿着白裙的女孩站在荒草地上,抬头看着天。
她身旁浮着一行小字:
【角色名:小满。】
【状态:等待玩家。】
我认出了她。
她是《归墟》最早期的新手引导NPC。角色模型和便利店的小齐一样,都是叙事组的基础模板。唯一不同的是,她有一条被删掉的隐藏路线:如果玩家连续三次拒绝主线任务,她会带玩家去地图外的一座旧灯塔。
那条路线从未完成过。
我打开电脑,没想到还能用。游戏里,女孩依旧站在草地上,低着头,手里攥着一张皱巴巴的纸。
屏幕下方弹出一行红字:
【玩家唐梨,是否接受隐藏任务?】
【任务名称:请告诉我,我为什么一直在等。】
许停在我身后停住了。
“你认识这个NPC?”
“算认识。”我说,“她是我参与测试的第一个角色。”
“你当时给她写过情节?”
我摇头。
“我只测过她的对话分支。”
那时候我刚进公司,做什么都小心。小满的对话里有一条奇怪的循环:玩家离开新手村后,她会站在路口,向下一个人重复同一句话——“如果你看见我哥哥,告诉他我还在等。”我们以为是脚本没清理干净,提过一次工单,制作人说暂时保留,后续再处理。
后来项目延期、换人、裁员,没人再提起她。
我按下“接受”。
电脑扬声器里响起一声很轻的呼吸。
“你终于来了。”屏幕里的小满说,“我等了很多次。”
她抬起头,眼睛里有一圈很淡的灰,像从旧照片上擦下来的铅笔印。
“我哥哥是不是已经不在了?”
许停捂住了嘴。
我盯着屏幕,指尖冰凉。
这不是《归墟》原本的台词。它不在任何正式文本里。
而系统后台,慢慢浮出一条隐藏记录:
【未归档意识碎片:小满。】
【异常来源:玩家数据残留。】
【建议处理:删除。】
我没有点删除。
我点开了那条任务的详细信息。
【隐藏任务进度:0/3。】
【目标:找到被系统丢弃的三段记忆。】
【奖励:维护权限×1。】
小满低下头,像在听某个很远的声音。
“我不记得哥哥长什么样了。”她说,“但我记得他答应过,会回来接我。”
我忽然想起公交车上的司机,便利店里的小齐,以及医院四楼那些等待家属确认的人。
归墟不是简单地把怪物扔进了现实。
它把所有没有写完的东西,都留在了这里。
而它准备在七十二小时后,把这些东西全部清掉。
5 黑帆公会的规矩
黑帆公会的体育馆据点在第二天中午被系统标成了安全区。
不是因为那里安全,而是因为他们把附近所有低等级玩家都赶走了。入口处架着两排临时路障,门顶挂了块塑料板,上面写着“入区需缴纳三枚低级核心”。一个穿着运动背心的男人坐在桌后,手里捏着登记表,表情像足疗店老板在挑客人。
我们路过时,他喊住许至。
“未成年?有监护人吗?没监护人的不能进。”
许至举起手:“我有我姐。”
“你姐缴费了吗?”
许停眉头立刻皱起来。我按住她的胳膊,朝登记表看了一眼。
表格里有一列“资源贡献值”,每个人的名字后面都写着不同的数字。交过核心的人可以进入安全区,没交的人则被标记成灰色。最下面一行,写着“低贡献者可优先分配外勤任务”。
我心里大概明白了。
“你们拿玩家当矿挖?”我问。
桌后的人笑了一声:“在这个世界,不创造价值的人凭什么吃饭?”
他说得理直气壮。
我没跟他争。以前在公司里,我见过太多这种表格。换了名字,换了颜色,最后都在把人分类成可用资源和浪费成本。
许停拦住我:“算了。我们不进去。”
我们刚转身,体育馆里忽然传来一阵骚动。两个黑帆成员架着一个年轻男人走出来。那人穿着一件沾满灰的校服,手腕上的玩家面板不断闪烁。
【状态:重伤。】
【任务失败。】
【贡献值:-12。】
“把他丢出去。”里面有人说,“连个材料箱都没守住,浪费药。”
年轻男人挣扎了一下,嗓子哑得厉害:“里面还有三个人……我把钥匙给他们了……”
“那是你的问题。”
黑帆的人松手,他摔在地上,膝盖磕在台阶边,发出一声闷响。
我看见他裤腿下面有血,一点点渗出来。他试着撑起身子,手指却一直打滑。
许停已经蹲下去,撕开自己的急救包给他止血。她动作很快,嘴里骂了一句:“都这样了还讲贡献值,脑子是被怪物吃了?”
那个年轻男人想说谢谢,嘴唇动了两下,先咳出一口血沫。
“别说话。”许停按住他肩膀,“你叫什么?”
“孟、孟一帆。”
“多大?”
“二十一。”
“有没有药物过敏?”
他怔住了,像很久没听见有人问这种普通问题。
“没有。”
许停给他包扎好,抬头看我:“能带他走吗?”
我看了眼自己的维护员面板。副本修复奖励还剩一次,背包里只有两瓶恢复剂和一把生锈的小刀。从战斗力来说,我们不该再招惹黑帆。
可是孟一帆怀里露出一截黄色布条,和公交车司机制服上的袖口很像。
我伸手把布条抽出来,上面有用圆珠笔写的一串字:
【第七码头,旧灯塔。】
是隐藏任务里的地点。
“带走。”我说。
“你确定?”许停问。
“不确定。”我把布条折起来塞进兜里,“但我讨厌把人留在台阶上。”
我们把孟一帆带到网吧二楼。他醒来时,先摸了一遍自己的口袋,确认东西还在,才小声问:“你们为什么救我?”
许停正在给剪刀消毒,头也没抬:“因为你还没死。”
孟一帆看着她,半晌没说话。
后来他告诉我们,黑帆公会并不只是收取入区费用。他们发现某些副本的怪物会掉落“意识碎片”,那些碎片既能换装备,也能换复活次数。为了刷资源,公会会强迫低等级玩家进入高危副本,把他们当诱饵。只要队伍有人死亡,系统就会掉出额外奖励。
“他们说,死人不算损失。”孟一帆声音很轻,“反正现实里的家人也不知道。”
许停手里的棉签啪地断了。
我没说话,心里的某块地方却慢慢硬了起来。
当天下午,陆行舟果然找上门来。
他没带太多人,只带了两名护卫和一只装着药品的黑色箱子。看见孟一帆躺在沙发上,他眼皮都没抬一下,像是看见一件退回来的货物。
“唐梨,我听说你把我的人带走了。”
“他不是你的人。”
“他欠公会资源。”陆行舟把箱子放在桌上,“我不和你谈道德。现在的规则就是这样:想活,先变强;想变强,就要资源。你有维护员职业,知道漏洞,我们合作,能让更多人活下来。”
他说得很有逻辑。至少听起来如此。
我问:“那你为什么不把低贡献者也带进安全区?”
“容量有限。”
“那为什么把他们赶去危险副本刷资源?”
陆行舟沉默了一秒,露出一个很疲惫的笑:“因为不这么做,资源就会不够。你以为我喜欢这样?我手底下几百个人要吃饭,安全区要升级,治疗药要用,系统不发慈善奖章。”
他说的不是全错。
这也是最麻烦的地方。真正难对付的人,不会把自己当反派。他们总有一套听上去合理的理由,好让自己做过的事显得不得不做。
“我不加入你。”我说,“但我可以跟你做一笔交易。”
陆行舟挑眉。
“我帮你们查一个区域副本的异常。你把被你们赶出去的玩家登记名单交给我,所有还活着的人都得有一条离开安全区的路。”
“你凭什么觉得我会答应?”
“凭你知道归墟有归档倒计时。”我看着他,“而且你也发现了,排行榜上的等级在涨,现实里却没有更多人回来。”
陆行舟脸上的表情终于变了。
很小的一下,像某扇窗被风吹开了一条缝。
“谁告诉你的?”
“系统。”我说,“它不止在清理NPC,也在清理玩家。”
他的护卫下意识看了彼此一眼。
陆行舟沉默了很久,最终把一张地图放到桌上。
“第七码头。那里有个旧灯塔。”他说,“黑帆已经派过三支队伍,全都没回来。你要找的东西可能在里面。”
“名单呢?”
他从口袋里拿出一张折好的纸,放到地图旁边。
“你先把灯塔的副本打通。”他说,“如果你做得到,我就放人。”
“先放人。”
陆行舟脸色沉了下来。
许停忽然开口:“你这么在乎秩序,为什么自己不去?”
陆行舟看向她,眼神有点冷。
“因为我进去过一次。”他说,“我在里面看见了一个人。那个人和我死去的弟弟长得一模一样。”
他顿了顿,像吞下了一口生锈的铁。
“我没能把他带出来。”
这是他第一次不像个公会会长,更像一个还没学会怎么面对失去的人。
他把名单推过来。
“十六个人。名单上还亮着的名字,我都放。”
我没有道谢。
只是把名单折好,放进背包。
“陆行舟,别再把人当资源了。”我说,“你欠他们一句话。”
他没回答。等他走到楼梯口时,我听见他低低骂了一句,像是在骂我,又像是在骂自己。
6 旧灯塔里没有宝箱
第七码头在城北,平时是个废弃货运区。游戏化以后,海水沿着路面漫上来,路灯发出病恹恹的黄光,远处停着一排生锈的集装箱。灯塔建在防波堤尽头,塔身只剩一半白漆,顶部的灯却一直亮着,像一个不肯闭眼的人。
我们一共五个人:我、许停、许至、孟一帆,还有坚持要跟来的胖子——本名马骁,自称“骁哥”,直播间名叫“胖虎不怕鬼”。
他在公交副本通关后就赖上了我们,理由是“我这人没啥优点,就是有镜头感”。说完又补充:“当然,最重要的是我不想一个人死。”
这句倒很诚实。
马骁的直播功能居然还在。他把手机架在胸前,画面右上角挂着实时弹幕。起初只有几十条,后来观看人数越滚越快。
【这就是那个维修员?】
【听说她在公交副本里把规则改了?】
【吹吧,测试员能有啥用。】
【卧槽,旧灯塔,黑帆三队灭在这儿了?】
马骁低声说:“大家别送礼物了,真不是我炒作,今天咱们要么打出隐藏结局,要么一起交代在这儿。”
许停回头看他:“你直播给谁看?”
“给外面的人看。”马骁说,“总得让他们知道,里面发生了什么。还有……”他挠了挠鼻子,“我妈在看。我跟她说我在外地参加电竞比赛。她要是看见我真的有点用,应该不会骂我又瞎折腾。”
许至看他一眼:“你不是主播吗?你妈不知道?”
马骁没说话,拿手掌擦了擦手机屏幕。
灯塔的大门没有锁。门上的铜牌刻着一行字:
请在最后一束灯光熄灭前,找到回家的路。
进入副本后,视野中出现了新的规则。
【副本:第七码头灯塔。】
【通关条件:点亮灯塔顶端的灯。】
【规则一:每层只能有一个人说话。】
【规则二:听见熟人的声音时,不要回答。】
【规则三:灯塔没有第七层。】
【规则四:不要打开写着“值班记录”的抽屉。】
我抬头看楼梯。灯塔里面只有螺旋形的铁梯,一层一层向上盘旋。墙上挂着褪色的海图,潮气把纸边泡得卷起来。每隔一段距离,就有一扇窄窗,窗外海面黑得看不出浪在哪儿。
“每层只能有一个人说话。”马骁念完规则,赶紧把嘴捂住,“那我们怎么交流?”
“手势。”许停说。
她刚说完,第一层的灯就灭了。
楼梯深处传来一个男孩的声音。
“姐,你在哪儿?”
许停整个人僵住。
那声音和许至一模一样。
真正的许至就站在她身边,脸色也变了。他伸手抓住姐姐袖口,轻轻摇头。
“不是我。”
可那声音还在继续。
“姐,我有点冷。”
许停把嘴唇咬得发白。她眼底有水光翻上来,胸口起伏了好几下,才缓缓把目光从楼梯深处移开。
她没有回答。
灯重新亮起。
我在心里记下一笔。这个副本用声音诱使玩家违反规则,但它有个漏洞:如果必须保证每层只有一个人说话,那规则可能只统计当前楼层的发声者,而不是整座塔。换句话说,我们可以分层行动。
我们用手势确定顺序,我先上,其他人每隔半层跟进。楼梯很窄,铁栏杆上有一层潮湿的盐霜,手一摸就粘上一片白。爬到第三层时,我的呼吸已经乱了,鞋底踩在铁梯上,咚、咚、咚,像有人跟在身后。
墙上出现一道涂鸦,字迹歪歪扭扭:
不要相信值班员。
再往上,一扇门半开着。门后有张小桌,桌上放着半杯冷茶、一只削到一半的苹果,以及一本封皮裂开的值班簿。
规则四说,不要打开写着“值班记录”的抽屉。
抽屉就在桌下。
我蹲下去,没碰它,先检查桌面的灰尘。那杯茶旁边有一圈圆形水渍,说明最近有人来过。苹果被削掉一半,刀口却没有氧化。这里不是十年前遗弃的地方,而是某个东西一直在重复值班。
我翻开自己的界面,果然看见一行异常字段。
【Tower_Floor:6】
【Tower_Floor_Display:第六层】
【Floor_Count_Limit:6】
【隐藏楼层:未定义】
灯塔没有第七层——这句话可能不是在告诉我们它不存在,而是在禁止我们承认它存在。
我刚想招手,楼梯上方突然传来一声轻响。
“唐梨。”
是我自己的声音。
“你还记得测试组最后一晚吗?”
我手指一麻。
“你记得自己为什么那么拼命吗?你记得他们走的时候,有没有一个人真的回头看过你?”
那声音不急不慢,像在念一份我早就背熟的离职报告。
我没有回头。
可它知道更多。
“你其实不是想把游戏做好。你只是想证明,自己不是随时可以被删掉的人。”
我站在原地,掌心慢慢渗出冷汗。
这句话太准了。准到我一瞬间分不清,是系统在读取我的记忆,还是我平时不愿意承认的东西终于找到了一个声音。
我想起裁员那天。组长站在会议室门口,手里拿着一份名单。每个人被叫到名字,就过去签字。我是最后一个。他看见我时明显怔了怔,说:“唐梨,你先别急,下一家公司我帮你问问。”
我点头,说谢谢。
然后他就走了。
那天我把桌上没喝完的咖啡倒进水池,洗了杯子,擦干净桌面。没哭,也没闹。我甚至把抽屉里几张游戏角色草图整理好,放到公共资料夹里,生怕别人接手时找不到。
这段记忆还在。被系统拿走的是测试组最后一夜:大家挤在会议室里,说着什么,外套披在肩上,有人把可乐罐推到我手边。我知道那是个重要的晚上,却再也想不起他们当时说了什么。
我以为自己不在乎。
原来我只是习惯了在被丢下之前,先把现场收拾干净。
楼梯上的声音笑了笑。
“回头吧。你看一眼,就知道是谁在等你。”
我闭上眼,缓慢吐气。
“不回。”
那声音停住了。
“为什么?”
“因为这台词写得太差。”我说,“角色不应该知道玩家的私人记忆。还把我的自我怀疑写成旁白,像低成本心理测评。扣分。”
身后静得可怕。
下一秒,整个楼梯都震了一下。
墙上的灯从下往上熄灭,楼梯顶部亮起一圈灰白色的光。那光里露出一扇门,门牌上写着:
【第七层。】
规则里说,灯塔没有第七层。
可门就在那儿。
我推开门,里面不是宝箱,也不是BOSS房。是一间很小的儿童卧室,墙上贴着卡通海豚,窗台上放着一排贝壳。床头有一只旧收音机,正在播天气预报。
“明天沿海有大风,请渔船注意避险。”
桌上摊着一张作业本,姓名栏里写着:小满。
我终于明白,所谓第七码头,不是地图位置。
它是这个副本被删掉的那一部分。
床上坐着一个女孩,穿着洗得发白的校服裙,脚上是一双不合脚的雨鞋。她看见我们,先是退了一步,随后死死盯住我的工牌。
“你是修东西的人吗?”她问。
“以前是。”
“那你能不能帮我把灯修好?”
她指向墙角。
那里是一盏坏掉的海灯模型,玻璃罩裂成了两瓣。灯芯早就灭了,里面却还有一截被烧黑的棉线。
“灯修好了,哥哥就能回来吗?”她问。
我不知道她的哥哥是谁。
但我记得公交车司机胸前那张旧车票,记得小齐的红马甲,也记得医院四楼那张第十三号病床。
这些角色有相同的灰色状态栏。他们都是未归档意识碎片,被系统判定为无用的数据残留。游戏不需要他们有过去,只需要他们按照脚本反复说话、推动玩家走向下一关。
我把手伸向灯罩。
维护面板亮起。
【发现可修复异常:灯塔光源未与离场事件绑定。】
【修复所需:维护权限×1。】
【当前维护权限:0。】
我愣住了。
这次没有权限。
之前便利店副本消耗掉了那一次机会,隐藏任务给的权限还没拿到。没工单,就不能改逻辑。
我看向女孩:“你知道这里怎么出去吗?”
她摇头。
“每次有人来,我都要带他找灯。但灯坏了,他们就走不了。”她的声音很轻,“后来他们都不来了。”
许至向前一步。他从口袋里拿出公交车司机给的旧车票代币,递到女孩手中。
“这是我朋友给的。”他说,“也许能当灯塔的钥匙。”
车票碰到灯座的瞬间,桌上的收音机停了一下。
系统面板闪过一条消息:
【发现跨副本道具关联。】
【隐藏任务进度:1/3。】
小满抬起头,眼眶里的灰色褪去一点。
“你们见过陈叔叔?”
我点头。
“他送我回家过一次。”她说,“那天特别冷,他把自己的手套给了我。后来我再也没见过他。”
她低下头,手指慢慢抚过车票边缘。
“我记得他。”
那一瞬间,我心里忽然明白,所谓“未归档意识”,不是一个系统错误那么简单。有人写下这些人,有人给过他们名字、习惯和一句没来得及说完的话。后来项目停了,相关文件被删除,所有人都觉得它们只是没用的数据。
但某个地方,它们还在等。
楼下传来巨响。铁梯开始崩裂,马骁在对讲频道里大喊:“你们再不出来我就要给你们立遗像了!真的!”
我抓住小满的手。
“先离开这里。”
她摇头:“灯还没亮。”
“我们会回来。”
“你们都会这么说。”
她没有哭,只是把嘴唇抿得很紧,像是早就学会了不相信承诺。
我蹲下去,和她平视。
“那我不说会回来。”我说,“我告诉你,我们现在要去找修灯的权限。你可以跟我们一起走,也可以留在这里等。但这回由你自己选。”
她盯着我看了很久。
最后,她把那只坏灯抱在怀里,点了点头。
我们冲出第七层时,整座灯塔正在向海面倾斜。马骁靠在门口,脸色惨白,手机屏幕碎了半边。他看见我们,先骂了一句,随后伸手把小满拉过来,护在身后。
“这小孩哪来的?”
“我们队伍新成员。”我说。
“她有等级吗?”
“没有。”
“有攻击技能吗?”
“没有。”
“有装备吗?”
小满把坏灯抱得更紧。
马骁吸了一口气,抬手揉了揉脸。
“行。那我负责带她逃命。”
他的直播弹幕疯了一样往上滚。
【这也能带出副本?】
【那是NPC吧!】
【我感觉她不是普通NPC。】
【我妈刚才看哭了,谁懂。】
灯塔在我们身后轰然倒塌,却没有砸进海里。它化作一片片灰色方块,被黑暗吞没。
所有人视野里出现了同一行字:
【副本“第七码头”通关失败。】
【隐藏任务进度:1/3。】
【玩家状态:存活。】
我盯着第一行,忍不住骂了句脏话。
马骁侧头看我:“失败了?可我们人都出来了啊。”
“因为任务没完成。”我看着小满怀里的坏灯,“游戏把活下来当成通关,却不承认我们带出来的人。”
这比怪物更让我火大。
7 这不是最后一个副本
到了第三十六小时,归墟的清理进度已经超过百分之九十七。
城市开始出现大面积的空白区。不是被怪物毁掉,而是像某个美术资源加载失败的画面,楼房的边缘被一块块灰色方格替代,路上的行人有时走着走着就消失了,留下手里拎着的塑料袋悬在半空,几秒后才掉到地上。
安全区里的人越来越多,争吵也越来越多。
有人要求关闭副本入口,有人认为只要杀够怪就能升级,所有问题都会解决。黑帆公会把部分资源退了回来,陆行舟亲自带人守住医院和地铁口,但还是有人不相信他,见了他就骂。
他没有还嘴。
某天凌晨,我看见他独自坐在体育馆外的台阶上,手里拿着一张很旧的家庭合照。照片上的男孩和他有几分相像,两个人站在海边,脸被太阳晒得眯成一条线。
“我弟叫陆行远。”他看见我走过来,把照片收回口袋,“以前我总说他不争气。他不喜欢读书,喜欢画画,后来非要去做游戏美术。我爸气得把他的画全撕了。我当时没拦。”
他笑了一下,笑意很快散了。
“他死后,我一直觉得,只要我站到足够高的位置,就能证明我当年没错。可后来我在灯塔副本里看见他。他问我,哥,你是不是从来没看过我画的画。”
我站在他旁边,没说话。
“我没回答。”陆行舟说,“因为我真的没看过。”
他抬头看天。天上漂着一排排没有加载完的星星,像某个孩子用蜡笔随手点出的光。
“唐梨,我现在不知道怎样才算把人救出来。救一个人,是把他从副本里拖出来?还是先承认,他原本就是一个人,不是我能拿来换东西的奖励?”
我想起自己丢掉的那段记忆。测试组最后一夜,我知道那很重要,但已经想不起到底重要在哪里。失去记忆的感觉不像失去一个物件,更像你知道自己曾经在某个地方哭过,回去时却找不到门。
“我也不知道。”我说,“但至少别再替他们做决定。”
陆行舟点了点头,没再说话。
当天晚上,许停在旧网吧的服务器页面里找到了一个新入口。它不在地图中,也不属于任何现存副本。入口名称只有三个字:
【旧版本。】
我点开后,屏幕显示了一段已经被封存的开发日志。
开发日期:两年前。
提交人:曹成。
主题:终局测试——归档逻辑。
日志里写得很清楚:为了控制游戏运行成本,系统需要在每轮测试结束后清理未完成任务、无活跃玩家关联的角色数据,并重置区域副本。为了避免玩家卡在世界里,必须设置强制离场流程。
下方有几条修改记录。
【清理逻辑:已启用。】
【玩家离场事件:待接入。】
【未登记角色归档:自动处理。】
【终局测试:暂缓。】
我盯着“暂缓”两个字,手心慢慢冷下去。
不是因为有人故意制造末日,而是一个本来应该在测试中发现的问题,被当成了以后再修的麻烦。后来项目被砍,版本封存,错误一直留到了最终系统里。现在归墟把现实里的人当成玩家,把NPC当成可清理数据,而每一次副本通关都在加快清理进度。
系统不是在考验我们。
它只是按一套没有完成的流程,认真地把世界删掉。
“那关闭它不就行了?”马骁问。
“不能直接关。”我说,“现在系统把玩家意识和副本绑定在一起,强行断开可能让所有人一起卡死。我们得先补上离场流程,再停止归档。”
“听起来像很简单的两件事。”
“对。”我看着屏幕,“难的是,它从来没准备让我们离开。”
许至突然开口:“那我算什么?”
房间里安静下来。
他指了指自己的状态面板。上面显示着“NPC模板异常”,还有一个随时可能变成红色的清理倒计时。
“如果系统把我当成数据,那我是不是应该被清掉?可我知道我姐小时候怕打雷,知道她胃不好,知道她每次说没事的时候都是真的有事。”
许停转过身,眼眶一下红了。她张了张嘴,又怕一开口就哭出来,只能伸手搂住弟弟的肩膀。
许至没有躲。
“我不是说我不想活。”他声音很低,“我只是想知道,我活着是不是一件错事。”
我不知道该用什么规则回答他。
但我知道,他不应该需要任何系统批准,才能成为一个人。
这时,屏幕突然跳出一条强制公告。
【最终清理提前启动。】
【剩余时间:12小时。】
【请所有玩家返回初始安全区。】
【未归档角色将于倒计时结束后删除。】
窗外的街道一寸寸变灰。远处有人尖叫,随后声音被某种无形的东西切断。马骁把手机放下来,脸上的血色慢慢褪去。
“直播还在。”他说,“外面所有人都看见了。”
他的弹幕停了几秒,又疯狂刷起来。
【我弟还在副本里。】
【我妈是NPC,她刚才在超市里叫我名字。】
【求求你们别让它删掉我女儿。】
我盯着那些字,喉咙紧得发疼。
我原本只想活下来,拿回自己的生活,不再给任何人收拾烂摊子。
现在整个世界都在等一个还没写完的工单。
我打开维护界面。
【维护权限:0。】
【隐藏任务进度:1/3。】
【最后一轮可提交工单时间:11:59:59。】
“好。”我说,“那就去把剩下两段记忆找出来。”
马骁看着我,像是想说你疯了,最后却把手机重新架好。
“家人们,别下播。”他对着镜头说,“我们这回真去修游戏。”
8 把退出按钮还给所有人
最后两段记忆分别在旧版本的两个副本里:一座停用的学校,一间已经封存的开发工作室。
我们只剩十二小时,没有时间慢慢练级。陆行舟带来黑帆公会里愿意留下的二十多个人,把他们收集的药剂、武器和路线图摆在桌上。他没有再要求谁交贡献值,只说了一句:“愿意去的就去,不愿意的留下守安全区。回来以后,没人欠谁一条命。”
这句话不算多漂亮,却让屋里安静了好一会儿。
第一站是旧学校。
副本入口藏在一栋被灰色方块吞了一半的教学楼里。走进教室时,墙上的黑板还留着一行没擦干净的字:
今天的作业:写下你以后想做什么。
桌椅排列得整整齐齐,每张桌上都放着一张作文本。窗外没有操场,只有无边无际的黑暗。讲台上的粉笔盒里插着一支红笔,笔帽上贴着一个小小的纸标签:小满。
小满站在最后一排,抱着那盏坏灯。她一路上都很安静,只在经过便利店时回头看了一眼,又在经过公交站牌时把灯抱得更紧。
“这里是我以前的学校。”她说。
“你还记得?”我问。
“我记得放学的时候,哥哥会在门口等我。”她看着黑板,“可我想不起他的脸。”
我们每个人桌上都出现了一张作文本。纸上只有一个问题:
【请写下你最想回去的那一天。】
马骁拿起笔,犹豫很久,写了“高考后那个暑假”。他写完又划掉,改成“第一次直播破十万播放”。再划掉,最后写了:
我妈给我煮了一碗面,没说我没出息。
写完后,他把本子合上,揉了揉鼻子。
“这题太变态了。”他说,“写个愿望还得把自己剖开。”
许停写的是弟弟高三那年。她值完夜班回家,看到许至趴在餐桌上睡着,旁边摆着两盒没拆的牛奶。她当时嫌他不洗碗,叫醒他让他去睡床。第二天起床,发现那两盒牛奶是他给她准备的早餐。
她写完以后,盯着纸面看了很久,轻轻用手指擦掉一处被水滴晕开的墨迹。
许至没有写日期。他只写了一句话:
我想要一个不用姐姐签字,也能留下来的地方。
我的纸上迟迟落不下笔。
我想回到测试组最后一晚,想回到第一次打开游戏的时候,想回到更早一点,那个我还相信只要认真做事就一定会被看见的年纪。
可真正让我放不下的,并不是哪一天。
而是我一直把“被留下”当成一种奖励。只要我够有用,别人就不会把我删掉;只要我提前收拾好现场,就不会显得太狼狈。
我拿起笔,写:
我想回到不用证明自己有用,也能坐在桌边吃饭的那一天。
最后一个字写完,教室的灯亮了。
黑板后面出现一扇门。门打开时,里面传来上课铃声,清脆得像从很远的地方飘过来。
【隐藏任务进度:2/3。】
【获得维护权限×1。】
第二站是开发工作室。
我原以为它会和现实里的旧公司一样,堆满外卖盒、坏掉的键盘和贴着“冲刺”的白板。可推开门后,眼前是一间空旷的白色房间。墙上没有窗,只有一面巨大的屏幕。屏幕中央站着一个男人,穿着我曾经见过无数次的灰色衬衫。
曹成。
他是《归墟》的制作人,也是当年在裁员名单上签字的人。
我不确定这究竟是他本人,还是系统用他的模型复制出来的角色。但他的声音没有变,仍然带着那种随时准备结束会议的疲倦。
“唐梨。”他说,“你还是喜欢管不该管的事。”
我没回答。
屏幕上展开了项目旧版的需求文档。最早的《归墟》并不是一款恐怖生存游戏。它最开始想做的是一座能容纳许多故事的城市,玩家可以进便利店买水,坐末班车回家,在医院探望家人,也可以在放学后去灯塔听海。
后来预算不足,项目被迫加入更多刺激玩法。普通的生活太慢,玩家留存不够;NPC的支线成本太高,删掉能省资源;结局需要计算,最终让位给无限循环。
每一次删减都很小。
每一次都有合理的理由。
直到有一天,所有不符合效率的东西都被删掉了,只剩下一套要求玩家不断完成任务的系统。
“你当时提过退出流程。”曹成说,“我记得。”
“你批了暂缓。”
“项目要上线,成本不够。我们原本打算等融资后再修。”
“然后项目被砍了。”
“是。”
他没有为自己辩解。那反而让我更难发火。
曹成看着屏幕里的角色数据,眼神慢慢变得空洞。
“我知道你想做什么。你想修复退出流程,放所有人离开。但你得明白,归墟现在不是一个普通游戏。它在自动归档玩家意识和角色意识。要停止清理,就必须把所有未完成记录重新接入主线。那会让系统过载。”
“所以呢?”
“所以你只能选一边。”他说,“保存玩家,删除NPC;或者保存NPC,放弃玩家的离场。系统没有第三种方案。”
我看见界面下方的倒计时只剩两小时。
【最终清理:01:59:42。】
曹成的影子投在屏幕上,细长、僵硬,像一个被固定在演示文稿里的剪影。
“唐梨,你是测试员,不是设计师。找出问题,不代表你有权改掉它。”
这句话我听过很多次。
以前每次我提交一份工单,都会有人告诉我不是现在,不是这个版本,不是你的职责。到后来,我甚至会在写工单之前,先替别人把拒绝的理由想好。
我抬头看着曹成。
“那我今天不光找问题。”我说,“我还要改。”
他叹了口气。
“你会把系统弄崩。”
“那就让它崩一次。”
我打开工单界面,把修复权限拖到主流程上。屏幕立刻跳出一排红色警告。
【警告:离场事件未绑定。】
【警告:未归档角色数量超出上限。】
【警告:所有副本将进入不可控状态。】
我没有点确认。
因为我知道,光补上离场事件还不够。系统必须先承认这些角色的存在,才能让他们被一起带出去。否则它会把他们当成清理过程中的残留垃圾。
“你要先做角色归档。”曹成说,“把他们全部登记为玩家。”
“这会影响什么?”
“所有人都获得自主选择权,包括那些你不喜欢的人,包括想伤害别人的人,包括可能再次做错事的人。系统不能替你判断谁值得留下。”
我盯着屏幕,忽然笑了。
“这不就是你们一开始做游戏的目的?”
曹成没有回答。
小满走到屏幕前。她把坏灯放在地上,仰头看着那个曾经写下她脚本的人。
“我不想当玩家。”她说。
曹成的表情第一次出现裂痕。
“你不想?”
“我不知道玩家是什么。”小满说,“我只想记得我哥哥。我想知道他有没有来过这里,我还想自己决定,什么时候关灯。”
许至走过来,把那张写着愿望的作文本递到她手里。
“那就写进去。”他说,“你想要什么,就写进去。”
小满接过本子,认真想了很久,拿起笔写下一行字。
我希望天亮以后,灯还是我自己开的。
那一刻,我忽然明白,系统需要的不是把所有人变成同一种身份,而是给每个人留下可以选择的出口。
我把归档规则改成了这样:
【角色归档不再以玩家身份为唯一标准。】
【所有具备持续记忆、稳定偏好与自主选择行为的意识体,均获得独立离场选项。】
【离场事件:允许主动触发。】
【副本清理:等待所有参与者确认。】
红色警告一条接一条跳出来。我的视野开始发白,耳朵里响起尖锐的电流声。系统提示我的维护时长归零,角色状态开始崩解。
【是否支付最后一项记忆,完成最终修复?】
那条选择下面,是一行灰色的小字。
【记忆编号QA-017:你第一次相信自己能把事情做好。】
我盯着它,久久没有动。
如果支付这段记忆,我或许能完成修复。但修复完成后,我会忘记自己为什么走到这里,忘记自己曾经喜欢过这款游戏,忘记那个为了证明自己而坚持了很多年的唐梨。
我忽然有点舍不得。
不是舍不得荣耀,也不是舍不得过去那些加班的夜晚。我舍不得那个曾经很认真、很笨拙、会在凌晨把每个角色台词读上几十遍的自己。
她未必被谁珍惜过。
但她曾经是真心的。
“别付。”许停走到我身边,眼里全是血丝,“一定还有别的办法。”
“没有时间了。”
“那也不能让你把自己删掉。”
马骁也从旁边挤过来,举着已经只剩半块屏幕的手机:“直播间里有几百万人。外面的人可以一起确认吗?你刚才说,系统要所有参与者确认。那我们就让所有人来确认。”
我怔住了。
是的。归档流程没有规定必须由我单独操作。
系统只是把维护权限给了我,却没有说选择只能由我做。
我打开直播广播,把最终确认页面投射到所有尚未被清理的区域。
每一个安全区、每一个副本、每一个被复制过的医院病房和便利店,都出现了同样的问题:
【你是否承认自己看见过的人,有权选择留下或离开?】
没有“是”或“否”的奖励,没有经验值,没有装备。
只有一个确认键。
最先亮起的是一间普通出租屋。一个抱着孩子的女人按下确认。紧接着,医院走廊里的护士按下确认,公交车上的司机按下确认,便利店的小齐按下确认,旧灯塔的小满也伸出手,把指尖放在那块虚拟的屏幕上。
然后是越来越多的人。
有人骂着按,有人哭着按,有人沉默了很久才按。也有人拒绝,他们觉得NPC不该拥有和玩家一样的权利,觉得这样会让世界变得危险。系统没有强迫他们,只把他们的选择记录下来。
确认数慢慢增长。
百分之二十。
百分之四十一。
百分之六十三。
倒计时只剩十秒。
曹成站在屏幕前,脸色苍白。他终于抬起手,按下了确认。
“我知道我做错了。”他说,“至少这次,别再替他们决定。”
倒计时归零。
世界没有爆炸。
没有金色光柱,也没有巨大的机械之神从天而降。
只是所有一直响个不停的提示音,同时停了下来。
接着,城市里第一扇真正的门开了。
公交车站牌下,司机慢慢走下车,手里握着那张已经发白的车票。便利店的卷帘门升起来,小齐穿着自己的衣服走到街上,抬头看了看天。医院四楼,所有病房的灯一盏盏亮起来,病人们可以选择留下,也可以选择离开。小满站在旧灯塔顶端,亲手把那盏修好的灯点亮。
光落到海面上,像一条短而清晰的路。
系统最后弹出一条提示:
【离场流程已恢复。】
【强制归档已停止。】
【《归墟》进入自由存档模式。】
我的眼前一片漆黑。
我以为自己要消失了。
然后有人拍了拍我的脸。
“唐梨。”许停的声音从很远的地方传来,“醒醒。别在这个时候睡,你很会挑时候吗?”
我咳了两声,睁开眼。
旧网吧的天花板就在头顶,灯管坏了一半,剩下那一半闪得人眼睛疼。马骁坐在旁边,鼻子上贴着创可贴,正对着手机说:“大家别刷问号了,她活着,没死,别催我报喜讯,我也想休息。”
许至靠着墙,手里拿着那张作文本。他看见我醒来,松了口气,嘴角往上抬了一点。
“姐说你修好了。”他说。
我看向许停。
她把一杯热水递给我,眼下有两道很深的青黑。
“修好了?”我问。
“暂时。”她说,“系统还有很多没清理完的问题。”
“听上去像我以前的工作。”
“对。”她终于笑了一下,“所以我替你拒了三份工单。”
我接过水,喝了一口。水有点烫,我被呛得咳起来。马骁在旁边大笑,笑到一半又把声音压了下去,像担心笑声太大,会惊动什么还没完全归来的东西。
窗外,天色正在变亮。
远处的城市仍然有灰色的方块,系统界面也没有彻底消失。但街边的早餐铺子重新亮起了灯,老板把一锅豆浆端上桌,蒸汽在玻璃窗上凝成一团白雾。有人排队买油条,有人抱着孩子,有个骑自行车的老头停在红灯前,低头看着自己眼前的等级面板,嘀咕了一句:“这东西不能关,倒挺烦人。”
我听见自己笑了一声。
不是因为世界终于好了,而是因为它还在继续。
小满站在网吧门口,怀里抱着修好的灯。她换了一件浅黄色外套,头发扎得有点歪,像一个真正刚放学的孩子。
她看见我,走过来,把一张纸递给我。
“我哥哥的名字,我想起来了。”
纸上写着两个字:陈舟。
“他真的回来了吗?”我问。
小满摇摇头。
“我不知道。”她说,“不过我记得他了。以后不管他回不回来,我都知道自己在等谁。”
我看着那张纸,忽然觉得心里有一点空,也有一点安稳。
她又把坏掉过的灯递到我手里。
灯已经修好了,外壳上仍留着一道裂痕。
“送给你。”她说,“你以后要是又遇到坏东西,可以试着修一修。但别什么都修。”
我一愣,随即笑了。
“这句话谁教你的?”
“没人。”她把手背到身后,“我自己想的。”
那天之后,归墟没有消失。
它变成了一款真正可以退出的游戏。有人继续挑战副本,有人只在安全区种菜,有人每天去医院看望曾经见过的NPC,有人专门写攻略教新人识别规则漏洞。游戏公司的名字从热搜上消失,曹成接受调查,陆行舟解散了黑帆公会,和几个曾经被他赶出去的玩家一起开了间物资互助站。
我没有回前公司,也没有立刻找到新工作。
我先睡了三天。
第四天醒来,马骁把一份新合同拍在我床边。
“《归墟》官方维护团队,招兼职。”他说,“按工单结算,修好一个副本给一次报酬。没有无偿加班,没有‘暂缓处理’,也不准把NPC写成消耗品。你看,条件多好。”
我翻到最后一页,发现薪酬栏写着:按异常等级分成。
我把合同扣回去。
“工资谈妥之前,不接。”
马骁愣了两秒,随即笑得差点从椅子上摔下去。
“行,唐老师,你终于学会了。”
我没问他学会什么。
我只是拿起手机,打开新版本的归墟。首页没有倒计时,没有强制登录,也没有血红色的警告。只有一个很普通的提示:
【欢迎回来。】
下面有两个按钮。
【开始游戏】
【退出】
我盯着那个“退出”看了很久,最后伸手摸了摸屏幕。
然后我点了开始。
不是因为我又想证明自己有用。
只是因为我想知道,小满点亮灯塔以后,海的另一边是什么样子。
这一次,我知道自己随时可以离开。
所以,我愿意留下。