沈砚的角色在登录界面停留了足足十二秒。 那不是他熟悉的账号。测试号"观测者07"静静地悬浮在屏幕正中央,角色的建模粗糙得近乎可笑——灰白的板甲上连最基本的纹理贴图都没加载完整,头盔下面的面部是一张系统默认生成的脸,没有任何表情。与其说这是一个玩家角色,不如说这更像一段待调试的代码,被临时塞进了一具空壳里。 他点下了"进入游戏"。 加载条走得很慢,慢到他能听见自己办公椅的滑轮在瓷砖地面上滑出的一道轻微锐响。方睿在他旁边的工位上抻了个懒腰,敲击键盘的声音从左侧传来:"你这台测试机的客户端版本比我那个落后了两个小补丁,加载慢正常,忍着点。" 沈砚没说话。他的目光锁定在屏幕上那个进度条上。百分之六十七。百分之七十一。百分之七十九。 屏幕黑了一瞬。 然后"神陨之墟"的入口出现在他面前。 和他在设计文档里看到的截然不同。坐标上的数据是一回事,当它真正以玩家的视角呈现在视网膜上时,那种压迫感完全是另一个量级。焦黑色的废墟从脚下一直延伸到视野的尽头,地面碎裂成无数不规则的板块,缝隙间渗出暗红色的光,像是有什么东西在地底缓慢地搏动着。天空是破碎的暗紫色,云层被撕成一条一条的,露出的缝隙里是更深的虚空,偶尔有金色的粒子从那些缝隙里飘落下来,闪着微弱的、将熄未熄的光。 那是神明的残骸。 沈砚控制角色往前走了两步。靴子踩在焦土上发出沉闷的"嘎吱"声,每一步都在地面上留下一个浅坑。他下意识地低头看了一眼脚下,角色的视角跟着下移,他看到那些暗红色的光从裂缝里涌出来,像一层稀薄的血雾,贴着他的护甲往上攀了大概半寸,然后消散了。 "环境特效的粒子密度比设计标准高了百分之四十。"他的声音很轻,像是在自言自语。 方睿凑过来看了一眼屏幕:"你说什么?" "金色粒子。"沈砚抬了抬下巴示意那个方向,"我的文档里写的参数是每立方米四十五到五十个,现在目测至少有七十个。这会影响玩家的视觉聚焦,高密度的漂浮物会分散注意力,在BOSS战中等于变相增加了认知负荷。" 方睿愣了一下,然后笑了一声:"你管这个叫认知负荷?玩家管这个叫闪瞎了狗眼。贴吧上有人截了图,放大之后数了数,说这一关的粒子特效比前面所有副本加起来还多三倍。你猜楼下怎么回他的?有人说'策划怕不是在做烟花大赏',还有人说'这哪是神的残骸,这是电脑显卡的残骸'。" 沈砚没有回应。他的角色已经往前走了更远,进入废墟的更深处。周围的断壁残垣开始出现一些熟悉的轮廓——那些残缺的雕像、碎裂的拱门、半埋在碎石里的巨大石柱,每一处都在他的设计稿上出现过。但看起来又不太一样。他记得自己设计那个拱门的时候,门框上的浮雕应该是完整的六翼天使,但现在屏幕上那个拱门的左半边整个塌了,只剩下半张天使的脸,一只眼睛空洞地朝着虚空。 "这边的场景美术改动过。"他说。 "你确定不是你记错了?"方睿斜靠在工位隔板上,"三十多个副本,你能把每个细节都记清楚?" 沈砚沉默了片刻。然后他说:"那个拱门是我画的。" 方睿不说话了。 角色继续深入。地面开始出现明显的坡度,焦黑的废墟逐渐向上隆起,形成一个巨大的、半圆形的台地。台地的边缘散落着更多的金色粒子,那些粒子比之前的更大,飘落的速度也更慢,有些甚至在空中悬停了半秒才继续下落。沈砚注意到角色经过那些粒子的时候,屏幕的边缘会泛起一圈极淡的波纹,就像石头投入水面之后扩散的涟漪。只有半秒钟。很快就消失了。 "视觉残留的叠加效应。"他在心里默念。这在设计上不是BUG,是一种刻意营造的氛围手段,但问题在于——他翻了翻脑中的记忆,确认自己在设计文档里没有写过这个效果。这是别人加上去的。 他让角色停在了台地正中央。 几乎是同时,地面开始震动。 沈砚的耳机里传来一阵低沉的嗡鸣,音调的频率压得很低,低到他胸腔的骨骼都跟着微微共振。焦黑色的地面裂开更多缝隙,暗红色的光从那些缝隙里涌出来,比之前浓烈了数倍。碎石被震得弹起来又落回去,细小的沙尘弥漫在空气里。然后那些金色的粒子骤然加速下落,像一场金色的暴雨倾泻在这个台地上。 "守门人·法尔斯"从地底升起。 沈砚下意识地屏住了呼吸。 那具身躯太大了。大到角色的整个屏幕几乎都被它填满。由碎裂的神像拼接而成的巨型人形,左臂是一只残缺的鹰翼,右臂是一只握紧的拳头,拳头的表面覆盖着密密麻麻的、不同材质的碎片——大理石的、青铜的、黑曜石的,每一片上都刻着不同的神纹。它的面部是一张被拼凑起来的、四分五裂的脸,额头是一截断裂的冠冕,左眼的位置是一颗空洞的、旋转着的黑色球体,右眼紧闭着,缝隙里渗出一道金色的光。 它的胸口有一个巨大的裂口,裂口的边缘参差不齐,能看到内部有暗红色的光芒在脉动,一下一下的,像心跳。 沈砚终于明白了玩家们为什么叫他"缝合怪"。 法尔斯抬起左臂的那只鹰翼,翼尖指向天空。金色的粒子瞬间聚拢,在翼尖上方凝聚成一根巨大的光矛,然后它猛地向前一挥—— 光矛砸下来的那一刻,沈砚按下了闪避键。 角色向右侧翻滚,靴子在焦土上擦出一溜火星,闪避动作的帧数比他预期的慢了零点三秒。光矛落在他刚刚站立的位置,地面炸裂开来,碎石四溅,一道金色的冲击波向四周扩散,推着他的角色又往后退了两步。 "攻击前摇是一点二秒。"他盯着屏幕上的战斗日志,"但我刚才从看到动作到完成闪避用了零点九秒,也就是说反应窗口只有零点三秒。这不是正常玩家的操作范围。" 方睿在后面说:"这就对了。玩家群里管这个叫'预判闪避',意思就是你不能等他挥出来再躲,你得在他抬手之前就猜到他要往哪儿打。所以他们都练了一百多遍起手动作的识别,背板背得比高考还熟。" 沈砚没有搭话。法尔斯的第二次攻击已经来了。这次是那只握紧的右拳,猛地砸向地面,拳头上那些不同材质的神纹同时亮起,每亮起一道,地面上就会有一块区域塌陷下去。连续五道塌陷,把整个台地切割成不规则的几何形状。 角色的站位正好在第三道塌陷的边缘。沈砚控制角色往前疾跑,一步,两步,第三步踩到了一块松动的碎石,角色的重心晃了一下,前冲的动作有一个微小的卡顿。就是这一下。第四道塌陷从他脚下经过,地面消失,角色坠落。 屏幕灰白。 "灭团倒计时二十一秒。"方睿的声音从旁边传过来,带着一种"早就知道会这样"的平静,"可以啊,撑了二十一秒。那个谁,那个公会叫什么来着,首杀队第一次打的时候九秒就没了。" 沈砚盯着灰白色的屏幕。角色的尸体倒在废墟里,半边身子埋在碎石下面,头盔掉了,那颗系统默认生成的脸朝上仰着,空洞的眼睛对着暗紫色的天空。金色粒子继续从裂缝里飘落,落在尸体的护甲上,然后透过去了,像是落在不存在的东西上面。 他退出了游戏。 桌面恢复平静,游戏客户端的窗口关掉之后,屏幕上映出他自己的脸——不算年轻了,眼底下有淡淡的青色,额前的头发有些长了,半搭在眉骨上方。他盯着自己的倒影看了三秒钟,然后伸手把键盘往旁边推了推,空出桌面上的一块区域。 从抽屉里拿出一本笔记本。 那本本子很旧了。深棕色的仿皮封面,边角已经被磨得发白,翻开的书脊处有几道深深的折痕。这是他入职第三年的时候开始用的,里面记满了各种副本的设计思路、机制推演、数值演算。前面三百多页写得密密麻麻,蓝色的钢笔字有时候工整有时候潦草,中间夹杂着用铅笔画的各种示意图和流程图。但后面的一百页是空的。 他翻到最新的一页。 那一页上面写着上一次的攻略记录——日期是六天前,他用蓝笔记录了自己在测试环境中对"守门人·法尔斯"第一阶段机制的观察。字迹还算工整,每个时间节点都标注得很清楚:落石前的预警动画持续时长一点四秒,落石的实际落点判定在动画结束后零点七秒触发,落石覆盖范围呈不规则的椭圆形,长轴约十二米,短轴约八米。一切都中规中矩,和他的设计文档完全吻合。 但这只是测试环境。 刚才他以"观测者07"进入的,是正式上线后的公测服务器。那个环境的版本号比他用的测试机新了两个补丁,而那两个补丁的更新日志里,关于"神陨之墟"的条目只有一行:"优化副本视觉表现及性能。" 很模糊的一句话。模糊到几乎等于什么都没说。 沈砚拿起桌上的圆珠笔,不是蓝的,是红色。他把笔帽拔下来,笔尖抵在纸面上,犹豫了大概两秒钟,然后在那段记录的下方画了一条横线,横线下面写了新的数据: "实际落石判定触发时间:动画结束后一点二秒。与文档偏差零点五秒。" 他把那个"零点五"圈了起来。红笔的墨迹在纸面上晕开一点点,他盯着那个圆圈看了一会儿,又写了一句: "触发机制疑似存在独立判定逻辑,与标准AI行为树不符。" 他的笔尖顿住了。 窗外是傍晚的佛山,天色开始暗下来,从窗户望出去能看到远处几栋写字楼的灯光一栋接一栋地亮起来。办公室里的灯是声控的,安静了太久就会自动熄灭几盏,他头顶的那盏已经灭了,只留下方睿那边的一盏还亮着,暖黄色的光照过来,他的笔记本有一半浸在光里,有一半浸在阴影里。 他的笔尖又动了。 "——但这不是卡顿。延迟的曲线过于平滑,零点五秒的误差在每一轮落石中都精确复现,没有随机浮动。更像是有人在底层代码里单独写了一条规则:让落石在标准触发时间后再延迟零点五秒生效。" 方睿的椅子转了过来:"你在写什么?" "攻略笔记。"沈砚说。 "攻略?"方睿站起来走到他旁边,低头看了一眼那本摊开的笔记本,红圈圈着的那个"零点五"很醒目,"你用红笔写?" "蓝笔是设计视角,红笔是玩家视角。" 方睿沉默了一会儿。然后他说:"你觉得那个延迟是故意的?" 沈砚没有立刻回答。他合上了笔记本,指腹按在封面上那道最深的折痕上,来回摩挲了两下。他说:"不知道。但游戏行业有一个铁律——没有任何一个机制是'不小心'做出来的。代码不会自己长腿跑进去。零点五秒的精确延迟,每一轮都复现,这如果是美术优化导致的副作用,它的误差应该呈正态分布。但它是固定值。" "所以你是说……" "有人在正式上线之后,单独给这个副本加了一行代码。"沈砚把本子放回抽屉里,关上抽屉的时候发出"咔嗒"一声轻响,"一行没有被记录在任何更新日志里的代码。" 方睿的表情变了。他张了张嘴,像是想说什么,但最后只是问了一句:"你觉得是谁?" 沈砚靠在椅背上。头顶那盏灯重新亮了,大概是声控感应到了方睿刚才说话的声音,白光有些刺眼,他微微眯起眼睛,看着天花板的灯管,灯管里有一根有点发黑,可能是快坏了。 "不知道。"他说,"但有一件事可以确定——这行代码不是季总的授意。季总要的是降低通关难度,不是抬高它。" "那能是谁?整个副本系统只有策划组有权限动底层代码。" 沈砚没说话。 他重新坐直,把键盘拉回面前,屏幕的冷光照在他脸上。他打开了一个新的空白文档,光标在页面的左上角闪烁,一下,两下,三下。他的手指悬在键盘上方,指腹离按键只有不到一厘米的距离,但他没有按下去。 文档里是空的。 他盯着那片空白看了很久。方睿不知道什么时候已经退回自己的工位了,键盘声又响了起来,断断续续的,像是在查什么资料。远处的窗户外面,写字楼的灯光连成一片,像一条横卧在地平线上的光带。 沈砚终于动了。他敲下第一行字: "关于'神陨之墟'难度异常的分析报告(非官方)——" 光标停在那行字的末尾。 他把那行字删掉了。重新敲: "关于副本'神陨之墟'中落石机制延迟现象的技术说明——" 又删掉了。 第三次,他敲了三个字: "发现了。" 然后他停下了。文档里只有那三个字,孤零零地悬浮在白色的页面上。他的目光落在屏幕右下角的时间上:十八点四十七分。办公室里的其他人早就走了,整层楼只剩下他和方睿两个人,安静得能听见灯管里电流的嗡鸣声。 他把文档保存了,文件名只有一个字:"疑"。 然后他关掉显示器,站起身,把椅子推回桌底。方睿在那边头也不抬地问:"走了?" "嗯。" "明天还来?" "来。" 沈砚走到办公室门口的时候停了一步。他转过身,看了一眼自己工位上那台已经熄灭的显示器,屏幕黑漆漆的,倒映着他背后走廊的应急指示灯,一个绿色的光点孤零零地亮着。 那行代码到底是谁加的。 他推开门,走廊里的冷风吹过来,他缩了一下脖子,把外套的拉链拉到顶。电梯门打开的时候里面空无一人,他走进去,按了一楼的按钮,电梯门合拢,镜面的不锈钢门板映出他的脸。 电梯下行。 他的手机震动了一下。掏出来看了一眼,锁屏上是一条微博推送:"'神陨之墟'第一百零三天无人通关,某知名主播直播挑战期间情绪崩溃,当场卸载游戏,直播间峰值观看人数突破四百万。相关话题#神陨之墟制造绝望#登上热搜前三。" 沈砚把手机屏幕按灭了。 电梯停在了一楼,门打开,门厅里的大理石地面泛着冷光,前台的保安抬头看了他一眼,点了点头。他点了点头回应,然后推开了写字楼的玻璃门。 夜色扑面而来,潮湿的、带着草木气味的晚风灌进他的衣领。他站在门前的台阶上,抬头看了一眼天空。佛山的夜空很少能看到星星,今晚也一样,只有远处城市的光污染把云层染成一种脏兮兮的橙红色。 他低下头,迈开步子往地铁站的方向走去。走得很慢,比平时慢了将近一半的速度。脚步声在空荡荡的人行道上回响,每一声都很清楚。 那零点五秒的延迟。 他脑子里反复转着这个数字。零点五秒在游戏里是什么概念?一个普通玩家的反应速度大约是零点二到零点三秒,精英玩家可以压缩到零点一五秒。零点五秒的额外延迟,意味着这个落石机制的反应窗口从零点七秒缩到了零点二秒。对于绝大多数玩家来说,这等于不可能靠反应来躲。 只能靠预判。 但预判的前提是这个机制有可预测的模式。沈砚在设计文档里写的落石模式是"随机落点+固定时间轴",也就是说玩家可以通过数秒来计算安全区域。但如果延迟那零点五秒只是把触发时间推迟了,落石的位置还是随机的,那预判就完全失去了意义。玩家既要数秒,又要在数秒的基础上额外减去零点五秒的偏移,还要在落石落下来的前零点二秒做出闪避判断。 这不是难。这是不可能。 沈砚在地铁闸机前站住了。他刷了卡,走过闸机的时候差点撞上前面的人,对方"啧"了一声,他低声说了句"抱歉"。地铁站里的风从隧道里灌出来,带着一股铁锈和灰尘混合的味道。他站在站台的黄线后面,低头看着自己的鞋尖。 那行代码如果真的是有人故意加进去的,那这个人的目的是什么? 如果是测试阶段留下的遗留代码,为什么上线之后没有被排查掉? 如果不是季成蹊授意的,那还有谁有这个权限? 还有,沈砚想起了一个更细的细节。刚才他看那些金色粒子的时候,粒子的飘落轨迹有一种非常轻微的、几乎无法察觉的偏向性。大部分粒子都是垂直下落的,但总有那么几颗,在飘落到角色周围大约五米范围的时候,会微微偏转方向,朝着角色的位置飘过去。偏转的角度很小,大概只有两到三度,如果不仔细观察根本注意不到。 但这个细节他在设计文档里从来没有写过。 粒子特效的飘落轨迹应该是纯随机的。那种微弱的偏转,看起来像是有人特地给它加了一个"吸引"效果。这个效果目前看来没有任何实际的游戏机制作用——它不会造成伤害,不会触发任何BUFF或DEBUFF,甚至连碰撞体积都没有,它只是飘过去,穿过角色的身体,然后继续下落。 但为什么? 地铁来了。列车带着巨大的噪音冲进站台,车门打开,他走进去,抓着一个吊环站稳。车厢里人不多,他旁边坐着一个戴耳机的女孩,正在看手机上的游戏直播。屏幕上是灰白色的尸体画面,主播的声音从耳机里漏出来,隐约能听到"真的打不了""我已经尽力了"之类的词句。 沈砚移开了视线。 列车启动,窗外的隧道壁灯被拉成一道道流光。他闭上眼睛,地铁的晃动从吊环传到他的手臂上,一阵一阵的,很有节奏。 他明天要去查一件事。那行代码的提交记录、版本号、作者的工号和IP地址。这些在公司的版本控制系统中都有日志,虽然普通策划没有权限直接访问底层的提交历史,但沈砚是主策划,他的工号在系统里的权限级别是仅次于季成蹊的。 他可以去查。 列车到站了。他睁开眼,车门打开,他走出车厢,踏上站台。晚上的地铁站人不多,他的脚步声在空旷的通道里回响,皮鞋底磕在瓷砖上发出清脆的"嗒嗒"声。 走出地铁口的时候,凉风又扑过来了。他家的方向在街道对面,要过一座天桥。他走上天桥的台阶,钢结构的桥面在他脚下发出轻微的震颤,桥下车流的车灯织成一条流动的光河。 沈砚在天桥中间停住了。他两只手搭在栏杆上,铁栏杆被晚风吹得有些凉,掌心的温度贴上去,很快就散了。他低头看着桥下的车流,一辆一辆车从他脚下经过,有快有慢,有的亮着前灯有的亮着尾灯,红的白的交汇在一起。 他脑子里还在转那个零点五秒。 那不是一个随机的数字。他忽然想起了什么,手从栏杆上抬起来,掏出手机,打开浏览器,搜索了一个关键词:"神陨之墟 落石 延迟"。搜索结果跳出来好多条,他点进最上面那个帖子。 那是贴吧上的一个帖子,标题叫"有没有人觉得第一阶段的石头砸得不太对劲?"。发帖时间是六十七天前。正文只有两行:"我数了十几次,从BOSS抬手到石头落地的时间好像不太固定,有时候快有时候慢,但我用录像逐帧看的时候发现每一次其实都是一样的,只是不知道为什么体感上觉得有延迟。有大佬分析一下吗?" 下面跟了三百多条回复。大部分是"没感觉""你卡了吧""换电脑""菜就多练"之类的,中间夹着几条认真的讨论,但最后都不了了之了。 沈砚盯着那个帖子看了三分钟。 六十七天前。那时候这个副本刚上线不到四十天。已经有人发现了异常,但没人能确定这是不是设计本身的意图。毕竟"神陨之墟"的难度本身就是史无前例的,玩家倾向于把所有不合理的机制都归结为"策划就是故意这么设计的"。 但沈砚知道不是。那些机制大部分是他设计的,只有这个零点五秒的延迟不是。 他把手机收起来,继续往前走。下了天桥,走过一条巷子,上楼的脚步声在楼道里响起来,声控灯一层一层地亮,又在他经过之后一层一层地灭了。 他掏钥匙开门,屋子是黑的,玄关的鞋柜上放着一个外卖的传单,他随手把它扔进了垃圾桶。换了拖鞋,走进客厅,没有开灯,只是借着窗外的路灯光走到沙发前面坐了下来。 沙发陷下去一块,他整个人往后靠,脖子搭在沙发靠背上,眼睛看着天花板。天花板是白的,但窗外的路灯光透过窗帘的缝隙投进来一道窄窄的光带,照在墙壁上,像一条发亮的裂缝。 那行代码到底是谁加的。 他的手机又亮了。他拿起来看了一眼,还是微博推送,这次的话题是"神陨受害者计数帖突破两万回复"。他点进去看了一眼,第一条就是那个帖子:"第103天,我还在等一个奇迹。" 帖子最下面的回复是一个小时前的:"第103天,卸载了。兄弟萌我先撤了,等通关了叫我一声。" 沈砚把手机放在茶几上,屏幕朝下。客厅重新陷入黑暗。 他闭上眼。 明天去查版本库。