沈砚从测试机前站起来的时候,后腰发出一声干涩的弹响。他伸手撑了一下桌沿,腕骨抵着冰冷的金属边缘,停了大概三秒钟才把重心挪到两条腿上。办公室的日光灯早就按定时程序熄了,只留走廊口那盏应急灯还亮着,橙黄色的光从半开的磨砂玻璃门缝里挤进来,在地砖上拉出一道狭长的梯形。他看了眼墙上的挂钟,十一点过七分。 半个多小时前他还在副本里。测试号"观测者07"站在神陨之墟的起始平台上,周围的哥特式立柱每一根都浇筑着暗金色的流动纹路。按照他的设计初衷,这些纹路应该随着玩家停留时间的增加而逐渐变亮,从暗金到灼白,给玩家一种"被注视"的压迫感。但实际跑起来的时候,纹路只亮到四成亮度就停住了,像一口气没喘上来就卡在嗓子眼。 他回到工位,台式机屏幕上还挂着数据后台的监控面板。面板上贴着两张便利贴,左边那张是三天前自己写的——"检查Boss二阶段过场动画触发条件"——右边那张空白,是准备给明天用的。他伸手按了一下空格键,屏幕亮起来,满屏的曲线图和柱状图同时涌进视网膜。 "神陨之墟"的首周参与团队数:一万七千零二十一。第三个月在跑团队数:二百八十七。他盯着这两个数字之间的落差看了几秒钟,喉咙里有什么东西堵了一下,像吞了一大口没搅匀的蛋白粉。二百八十七支队伍,如果每支队伍平均十二人,那就是三千四百多个玩家还在这个副本里挣扎。而整个MMORPG的市场大盘里,这个数字几乎可以忽略不计。季成蹊给他的两周期限,通关率从百分之零点零三拉到百分之一。百分之一意味着什么,意味着他需要让至少三百支队伍在十四天内推掉这个副本。而现存所有在打这个副本的队伍加在一起,也就二百八十七支。 他往后靠进椅背,椅轮在地砖上滑了半圈,金属气压杆发出咯吱一声。电脑屏幕的光照在他脸上,把颧骨以下的区域都沉进阴影里。他拉开键盘抽屉,从里面摸出一根压扁了的能量棒,撕开包装咬了一口,嚼了十几下才咽下去。包装纸上印的生产日期是两个月前的,入口有一股陈旧的油脂味。他没在意,又咬了一口,然后转回屏幕切到副本数据的三层架构图。 架构图是他花了四个月做出来的。最下面一层叫机制层,包含所有可量化的战斗规则:Boss技能冷却时间、伤害数值区间、仇恨转移判定、场地机关的触发半径和生效延迟。中间一层叫叙事层,包含所有与剧情推进相关的节点:守门人法尔斯的出场台词、四座元素祭坛的激活顺序、Boss二阶段变身时那段三分十二秒的过场动画。最上面一层叫情感层,这部分没有代码,没有数值,只是他用蓝色线条标注的一些批注——"此处玩家应有第一次看见真身的震撼"、"此处应制造短暂的安全错觉便于后续反转"。蓝色线条在屏幕上铺得很开,像一张血管分布图。 他先是看机制层。守门人·法尔斯的"崩裂践踏"技能,冷却时间是二十二秒,范围半径十二米,击退距离六米。如果把这个冷却时间延长到三十秒,容错率会提升将近四成;如果把击退距离缩短到四米,近战职业就不需要在每次践踏后浪费三点五秒跑回输出位置。他的手指悬在键盘上方,眼看就要把修改指令打进去,然后他停住了。 他的视线从机制层往上抬了十二厘米,落在叙事层上。法尔斯在释放"崩裂践踏"之前,会有一个强制性的台词:"大地会记住你们每一个人的重量。"这句台词持续二点三秒,同时Boss会做出一个将右腿后撤半步蓄力的动作。如果冷却时间改了,意味着Boss有更多平A的间隙,但二点三秒的台词和蓄力动作不会变,玩家看到喊话后下意识跑开十二米,然后发现Boss迟迟不踩下来。他们会等。等了三十秒之后再踩下来,蓄力动作依然只有二点三秒——那个瞬间留给玩家的反应窗口根本没有变化。等于说他把践踏的频率降低了,但每一次践踏的致命性没有变。玩家会获得更多的喘息,但每口喘气之后的那一下踩踏,依然能踩死一半的人。 他试着把"崩裂践踏"的伤害从群体百分比扣血改成固定数值伤害。改完之后他把整个二阶段的流程在脑子里过了一遍,然后脊背一阵发凉。按照叙事设定,法尔斯在血量降到百分之四十时会说出另一句台词:"你们带来的伤痛,我十倍奉还。"这句台词的触发前提是"崩裂践踏"此前至少命中过三人次。如果他改成固定伤害而固定伤害数值低于当前玩家的平均血量上限,那么玩家硬吃践踏不死,就会产生一种"可以不躲"的战术思路。一旦玩家不躲了,法尔斯的台词逻辑就崩了——"十倍奉还"失去了情感分量,因为它没有造成足够的伤害来让玩家记住。一个失去情感分量的二阶段变身,跟普通的小怪转阶段没有区别。整个"神陨之墟"的叙事张力会从这个点开始碎裂,然后像冻裂的玻璃一样慢慢蔓延到每一面墙上。 沈砚深吸了一口气。空气里有工位隔板上的积灰味道和显示屏背板发热后散出的塑料焦味。他把三层架构图缩小,又把首周和第三个月的数据曲线拖出来叠在一起看。两条曲线之间有一个尖锐的拐点——第四周开始,参与团队数从一万出头垂直掉到三千以下。他点开第四周的所有补丁日志,滚动条从下往上跑了十几屏,里面只有一条跟"神陨之墟"相关的内容:第二周的周四下午三点,运维团队推送了一个优化补丁,修复了副本内一个"可能导致场景资源加载异常"的底层问题。 他没参与那次补丁的审核,因为当时他正在休调休。但他清楚地记得自己在设计文档的资源加载章节里写了一句话:"场景加载失败时,系统应在三秒内重试一次,重试失败则以低模版本替代高模版本继续运行,不可中断玩家进程。"这句话的意思很明确:宁可画面缩水,不能让玩家掉线。如果运维团队声称修复的是"资源加载异常",那么修复方案无非就是把重试机制改成单次加载失败即报错返回。玩家被强制退出副本,重进的时候进度被重置。一次两次还能忍,十次二十次呢?一万七千支队伍里只要有三成遇到这个问题,第四周的断崖式下跌就说得通了。 他把补丁日志截了图,存进一个新建的文件夹里。文件夹命名为"待核验",放在桌面上最显眼的位置。就在他准备关闭后台面板的时候,右后方的工位方向传来椅子腿蹭地砖的声响。声音很轻,但在只剩应急灯的深夜里格外清晰。 沈砚转过头,看见方睿端着一个马克杯从工位隔板后面探出半边身子。方睿的衬衫解开了最上面两颗扣子,袖子挽到小臂中间,头发比白天乱了一些,像是用手揉过好几遍。他看见沈砚在看他,就端着杯子走过来,把杯子搁在沈砚桌上,然后拉过旁边那张空着的访客椅坐下来。椅面比普通工位椅矮一截,方睿坐下来的时候膝盖几乎顶到桌板下缘。 "你还在弄那个副本。"方睿说。不是问句。 "嗯。"沈砚把能量棒的包装纸揉成一团扔进脚边的垃圾桶,塑料纸团弹了一下桶壁落进去,"数据不太对。" "哪方面的不太对。" "参与率断崖。"沈砚把屏幕往方睿的方向转了三十度,指尖点了点曲线图上的拐点,"第四周,一个补丁进去之后掉了七成队伍。我从补丁日志里找到了一条,说的内容是修复资源加载异常,但我怀疑他们改了重试逻辑。" 方睿把马克杯端起来喝了一口。杯子里冒出来的气味是茉莉花茶,偏甜,跟他整个人灰扑扑的衬衫形成一种奇怪的反差。他放下杯子的时候杯底磕在桌面上,发出沉闷的一声。 "季总知道这事吗?"方睿问。 "目前不知道。"沈砚说,"我还没写正式的排查报告。" 方睿沉默了几秒钟。应急灯的光从他背后照过来,让他的脸轮廓模糊,只有眼白亮着一点。他的手指在马克杯的杯壁上轻轻叩了两下,节奏很缓,像在打拍子。 "沈砚,"方睿开口的时候声音压低了一些,语速放慢了,"你先别管补丁的事。你告诉我,你现在对自己这个副本怎么看?" 沈砚没料到这个问题。他转头看回屏幕,三层架构图还摊开着,蓝色批注线条密密麻麻。他盯着那些蓝色线条看了几秒,然后说:"机制层面可调,叙事层面不能动,情感层面……我不敢动。" "不敢动,为什么?" "因为这些东西是一体的。"沈砚伸手指着屏幕,手指差点碰到液晶面板,"你把机制削了,叙事就会瘸。叙事瘸了,玩家感受不到那些情感节点,他们打完副本出来只会觉得'哦,打了,就这样'。这个副本存在的意义不是让玩家'哦'一声就走的。" 方睿又喝了一口茶。这次喝得慢,喉咙滚动了两下才放下杯子。他把椅子往前拉了一点,膝盖彻底顶到桌板下缘,身体前倾,两只手在桌上合拢,十指交叉。 "那你准备怎么办?"方睿说,"季总给了你两周。我刚才在那边算了一下,按现在的通关率,你就算把这二百八十七支队伍的每一个人都培训一遍,你都拉不到百分之一。你需要的实际通关人数是现在的四倍。四倍,沈砚。两周。" 沈砚没说话。他的手指从屏幕前收回来,放在键盘上,食指无意识地按了一下F5。页面刷新,三条曲线重新绘制了一遍,数据没变。他那一下按F5的动作几乎是条件反射,他自己都不知道为什么要刷新。 "我有个提议,你听一下。"方睿松开交叉的手指,一只手平摊在桌面上,掌心朝上,像在展示什么东西,"季总不是要结果吗?他只要看到通关率达标就行。我们做一次选择性削弱。选三到四个最显眼的数据节点,调一下数值,比如把一阶段Boss的血量砍百分之十五,把落石机制的触发间隔拉长两秒。这些改动表面上看不出来是刻意削弱,但实际效果是整体的容错率会高出一截。玩家那边不会觉得'这副本变简单了',他们只会觉得'这次运气好'。上面看数据,通关率上去了,季总关你两周的监,你保住了主策的位置。" 沈砚听着,呼吸平缓。方睿的掌心还摊在桌面上,茉莉花茶的热气从杯口升上去,在暗光里几乎看不见。他盯着方睿的手掌,突然觉得那姿势真的很像劝孩子吃药的家长——药就放在掌心里,不苦,咽下去就好了。 "你在做这个提议之前自己算过吗?"沈砚问。 "什么?" "你把一阶段Boss血量砍百分之十五之后,二阶段变身台词还会不会触发?" 方睿的眉头皱了一下。那个皱的幅度很小,大概只有两秒钟,然后他松开。 "会。"方睿说,"变身台词的触发条件是血量降至百分之四十以下,不是具体的伤害数值。你砍了百分之十五的总血量,但百分之四十的门槛也跟着降了,是一样的。" "那你把落石间隔拉长两秒呢?"沈砚接着说,"法尔斯在二阶段开场有一句台词是'躲得过落石,躲不过我'。你让落石变成三秒一次,玩家就真的躲得过了。这句话变成了一句空话。等他们打完二阶段听到法尔斯死在平台上喊'我不甘心'的时候——"沈砚停了一下,喉结动了动,"他们脑子里想的不是'这个Boss好可惜',他们想的是'哈,你说得对,落石你确实没砸到我'。这句话从戏剧张力变成了一句被戳穿的牛皮。整个副本给人的收尾印象是从悲壮滑向滑稽。" 方睿把摊开的手掌握成了拳,收回去搁在膝盖上。他低下头看着自己膝盖上那双手,看了很长时间。应急灯的光从他头顶滑到后颈,在衬衫领口留下一道明暗交界。 "所以你打算硬扛。"方睿说。 "我打算先找出那个补丁是谁写的,为什么改了我的重试逻辑。"沈砚把屏幕切回补丁日志的界面,"然后把真正的底层问题修掉。机制层……我不动。" 方睿从椅子上站起来。他起来的时候椅子腿在地砖上蹭了一下,尖利的一声,在空旷的办公室里弹了两下才消下去。他端着他的茉莉花茶,低头看了沈砚一眼。沈砚没有抬头,正盯着屏幕上那行补丁日志的提交人ID。提交人的工号被日志系统自动隐藏了后四位,前面露出的是一个"F"开头的字母。 "我走了,"方睿说,"明天早上还要跟美术那边对资源包。你自己注意身体,别弄太晚。"他转身走了两步,又停下来,没回头,背对着沈砚补了一句,"我说的那个提议……你什么时候想通了,随时找我。" 方睿的脚步声在走廊里渐渐远了。沈砚听见走廊尽头的门被推开又带上,弹簧合页发出"咿呀"一声,然后是门锁咬合的咔嗒。整个办公区重新安静下来。安静得他能听见中央空调回风口的低频嗡鸣,能听见自己手腕上手表秒针一格一格往前挪。 他重新把注意力拉回屏幕上,鼠标光标移到了那条补丁日志上,点了一下"查看完整信息"。系统跳转到一个内部工单页面,提交人那一栏显示的全名是"傅璟"。他认识这个人,运维组的核心开发,比他早两年进公司,技术能力强,但做事风格偏激进。工单的描述栏里写了一段话:"修复神陨之墟副本在特定显卡驱动版本下出现的场景资源无限重试问题,原因系重试逻辑未设置上限,经讨论后决定改为单次加载失败直接退出副本以避免死循环。" 沈砚把这段话反复看了三遍。他心里清楚,这行描述只说了事实的一个侧面。改掉重试逻辑确实能防止死循环,但同时也把玩家从副本里踢出去了。"经讨论后决定"——跟谁讨论?为什么讨论的时候没有抄送给他?他是这个副本的主策划,任何涉及玩法体验的底层修改都应该经过他确认。但那个补丁推送的时候他在休调休,手机静音,错过了一封邮件,然后这扇门就被关上了。 他关掉工单页面,重新打开"神陨之墟"的完整设计文档。文档有四千七百多个段落,分为二十七个章节。他直接跳到最后面,那个标注为"隐藏剧情线-第三层"的折叠区块。双击展开,页面滚动了几屏,停在第三层脚本的末尾。在那行所有正式文档里都没有记录的注释旁边,光标一闪一闪。 他记得自己写下这行注释的时间是去年十一月的某个凌晨,跟今天差不多的时刻。当时他刚刚把第三层隐藏脚本的交互逻辑全部写完,脑子已经转不动了,手指在键盘上敲了一句没有格式的纯文本批注就关了电脑。那句话他几乎忘了,直到前天在工位上重新翻到。现在他又看了一遍:"此机制的触发条件依赖于未被文档记录的交互方式。" 屏幕上这行字没有任何技术细节,没有说明交互方式具体是什么,没有说明为什么没有被记录,没有说明它跟上下文的代码有没有关联。它只是一句潦草的、写在深夜的个人备忘。但沈砚盯着它的时候,脑子里有一个念头像气泡一样从深处浮上来。 他的手指开始敲键盘,在注释下方新建了一个空白段落。光标跳了一下,等待他输入。 凌晨两点十一分。办公区里只剩下他一个人的呼吸声和键盘上指尖落下时轻微的哒哒声。他不知道自己接下来要写什么,但他知道这行注释一定意味着某样东西。某样他在四个月前设计完所有机制、写完所有台词、铺完所有情感节点之后,在疲惫和亢奋交界的那个瞬间,顺手留下来的东西。 他敲下第一行字的时候,窗外忽然有风撞了一下玻璃。是南风,暖的,带着外面马路上深夜车流残留的尾气味。玻璃震了一下又停。他抬起头朝窗外的夜色看了一眼,城市的轮廓灯稀疏地亮着,远天有一层薄薄的橘灰色光晕,是城市灯光在低云上的反照。 他把视线收回来,重新落在屏幕上。光标还在闪。