一
八月中旬的A城进入了一年中最热的时段。骆襄铃在评审结束后的第三天收到了一封来自人事的正式通知,标题是"晋升评审结果",她把邮件点开的时候坐在工位上先看完了第一段,然后靠回椅背上喝了一口已经凉透的咖啡才重新低头看了第二遍。结果是通过了。下个月起岗位调整,薪资和职级同步更新。
她把邮件截图发到了三人小群里,没有配任何文字。许诺在大约十分钟后回了一张照片——他画展的场地布置现场,几幅装裱好的画作正在被工作人员挂上墙面,画面中其中一幅是她之前在游戏里见过的那幅"灯给你留着"的月光水乡全景。程砚在中午回复了一条更短的消息:"项目验收通过了。周五之前把剩余文档交完就收尾。"
三个人在同一个群里用三张不同内容的图片各自回复了"完成了"的信号,没有用任何文字说明,但每一张图的内容足以让另外两个人看到各自的那件事已经走完了收尾阶段。骆襄铃把手机锁屏的时候在工位上又坐了一小会儿——从春天到夏天,她在这段时间里完成了三件事:在游戏里建了一座水乡,在现实中完成了一次晋升评审,以及跟两个人在虚拟和现实的边界上来回走了好几趟。三件事的完成时间点在八月的同一个星期内依次落定,像是各自独立的进度条在同一个系统界面上先后走到了100%。
周五晚上三个人在水乡重新聚齐。夏季的暮色在八月中旬已经开始略微提前了,连理亭的夜灯在七点四十分左右亮起的时候天色还残留着最后一层深蓝。骆襄铃走到连理亭门口的时候看到许诺已经在里面坐着了,面前摊着那幅"灯给你留着"的原稿——他把它从画展场地带回了一幅复制品,原稿应该在装裱后会继续留在展墙上。程砚坐在靠书房方向的侧面坐凳上,他面前的石桌桌面上放着那盒从老槐巷取回的铁盒,盒盖闭合着,但边缘处她放进去的那枚干透的桃花瓣标本被挪到了铁盒旁边的一张独立纸上。
"第三版规划,今晚看了吧。"她走进亭子坐下来。
"等你看。"许诺把铁盒从桌面中央推向她的方向。
骆襄铃把铁盒打开,从里面取出了那叠牛皮纸信封封好的纸页。信封的封口处有一枚干透的胶痕,她沿着胶痕的边缘把封口揭开——里面的纸页比她预想的要薄一些,大约七八页,每一页都是手写的,字迹跟手记中的完全一致。第一页的顶部写着"隐藏模式·全系统架构图·第三版",下方是一整面密布的数据流程示意——从清风庄的坐标定位出发,经过水路联动、信物触发、引渡口标记、同城频道映射,最终汇聚到一个标注为"现实坐标对外接口"的终端节点上。
她逐页翻看。第二页是"同城频道与真实定位之间的数据交换协议",第三页是"引渡口标记在现实坐标对照库中的索引方式",第四页是"老槐巷七号院墙坐标砖的读取与校验流程"——每一页的左侧都有一行极小的日期标注,分布在两年多的时间跨度内。最后一页的日期是三年前的十月,比前面所有页面都晚。她翻到那一页的时候注意到纸面的边缘有一道细长的折痕,像是被人反复折叠又展开过。
最后一页的内容比前面的要短:
"第三版的最后一部分——也是这套系统的最终目标:不是让玩家从游戏走到现实坐标,而是让现实坐标反向映射回游戏。如果玩家在现实中找到了某个'标记位'(比如老槐巷的铁盒、梧桐巷的茶舍),系统应当能通过同城频道的定位数据将该位置反向写入游戏地图的'已探索'标签中。这个功能在我写这一版的时候还没有完全测试过,但接口已经预留了。如果将来有数据接入,它应该能自动跑通。"
"我把这把锁留在了地下。钥匙在盒子里,锁在游戏里。如果你已经打开了这把锁——那说明同城频道的映射链路已经通了。可以用了。"
骆襄铃把那页纸翻过来——背面没有字。她又翻了翻前面的页面确认了一下没有更多内容,然后把整叠纸按顺序重新摞好放回信封中。她放回去的时候注意到信封的内侧底部有一行极细的铅笔字,像是写在封底上的最后一条补充说明:
"附注:本系统的全部测试数据均以'引渡口→梧桐巷→老槐巷'作为映射链路基准。如果你的路径与这条基准不同——那更好。说明系统接受偏移。"
她把信封合上扣好了铁盒的盖子。"他把整个系统的设计逻辑都写完了。"
"你看到最后那页关于'反向映射'的部分了吗?"许诺问。
"看到了。他的最后一层设计是让现实中的坐标可以被反向写入游戏地图。"
程砚坐在侧面的坐凳上没有急着说话,等她把话说完之后才开口:"那就是说——我们现在去过的所有地方,理论上都可以被同城频道记录为游戏内的可识别标记。"
"理论上是。"骆襄铃把铁盒放回桌面中央,"但他说这套功能在他写第三版的时候还没有完全测试过。接口预留了,链路理论上是通的,但需要有人实际触发一次才能确认。"
三个人在连理亭的夜灯下安静了一会儿。沈叔在第三版的最后一段写的是"可以用了"——用的是肯定句式,不是"应该可以"或"希望可以"。他在三年前写完最后一段的时候认为这套系统已经完成了足够多的测试准备,可以进入实际使用了。只是没有人用它。
"那就我们触发一次。"骆襄铃说,"老槐巷七号——我们已经去过了,钥匙开过门了,铁盒取出来了,坐标在墙上了。这些动作如果被同城频道记录的话——就应该能在游戏地图上显示出一个新标记。"
许诺坐在对面没有立刻接话。他看了一眼桌面上铁盒的方向,然后说了一句:"我们触发过一次了。你去引渡口的时候,系统显示那个位置已经被收录到了现实坐标对照库里。"
"那是引渡口本身被收录了,但老槐巷的坐标还没有被单独标记过。"
"那就让系统标记一次。"程砚说,"我们在老槐巷七号院墙内侧读过坐标砖的时候,同城频道的定位数据应该已经同步了那段时间的位置信息。如果同城频道的映射链路是通的,系统应该已经记录了我们停留在那个坐标范围内的时长。剩下的就是等它自动生成标记。"
三人各自在手机或电脑上打开同城频道的界面。骆襄铃刷新了一下自己的位置记录——在"历史位置"那一栏中,确实有一条新的记录出现在列表里:"老城区·老槐巷片区——停留时长:约35分钟。"旁边的状态标签标注的是"已同步至坐标对照库"。
她看到了那行标签,把手机屏幕转向许诺和程砚的方向。"'已同步至坐标对照库'——标记生成了。"
许诺也看到了自己手机上的同城频道界面中同样的"已同步"标签。程砚在侧面的坐凳上查看完自己的记录之后把手机扣在了桌面上。"那现在沈叔的那条链路——从引渡口到梧桐巷到老槐巷——已经完整地走通了一遍。系统记录了这一整条路径的坐标数据。"
"游戏里会显示出这个标记吗?"骆襄铃问。
"现在还没有。"许诺说,"同城频道记录的是'移动端定位数据',游戏地图的'已探索'标签生成需要游戏端的数据同步。同步周期大概是二十四小时。"
"那明天这个时候应该能看到。"
三个人在连理亭里又坐了一会儿。夏季的夜虫鸣叫声在水道的方向持续不断地铺展着,跟春季的间歇性鸣叫不同,夏天的声音是连续的、均匀的,像是不会主动中断也不需要外力维持的底噪。骆襄铃坐在连理亭的夜灯下看着石桌桌面上那只铁盒和信封之间的相对位置。沈叔设计的那条链路——从游戏到现实、再从现实回到游戏——在今天晚上完成了一次完整的循环。引渡口的坐标通过她的标记被系统收录了;梧桐巷的地址通过木盒中的信被他们找到了;老槐巷的坐标通过同城频道的定位数据同步到了坐标对照库中。他三年前写下的"反向映射"功能,在今晚被三个人在不同的终端上各自确认了"已同步"的状态。
"明天晚上再来看一次。"她站起来的时候把铁盒推回桌面中央,"看看游戏地图上会不会多出一个'老槐巷七号'的标签。"
"会有的。"许诺说。
"你怎么知道?"
"因为他在第三版里写了'可以用了'。"许诺也站起来,"他写'可以用了'的时候是真的可以用了。"
三个人从连理亭走出来各自沿着不同的方向散开。骆襄铃走回书房的路上在水道的转角处停了半步朝引渡口的方向看了一眼——西南方向那片林地的边缘在夜灯的照射范围内呈现出一种均匀的暗色,但她在心里能看到那个坐标的位置。她走过引渡口的标记、梧桐巷的木盒、老槐巷的铁盒,以及刚刚在手机屏幕上确认的那条"已同步至坐标对照库"的记录——那条链路在今天晚上被完整地走过了一轮。
她走进书房的时候手机在同城频道中收到了一条新的推送通知。她以为是同步周期的系统更新提示——但她看了一眼推送的内容后停在了书房门口:"系统通知:检测到您在同城频道中的'老槐巷片区'停留记录已被收录至'现实坐标对照库'。根据系统设定,该收录将触发一次'已同步'状态的反馈——反馈内容将在二十四小时内显示于游戏地图的'自定义标记'区域。"
"根据系统设定。"她轻声重复了那行字中的四个字。沈叔在第三版的规划中设定的同步逻辑,正在按照他三年前写下的流程自动运行。
她关上书房门的时候最后看了一眼窗外连理亭的方向——许诺还没有走,他在亭子里站着,面朝水道的方向。她看不到他的表情,但她能看到暮雨剑在他腰侧的轮廓——那把剑鞘上刻着同一条引渡口到老槐巷的路径纹理,跟第三版规划中标注为"映射链路基准"的那条线,是同一段路的两种呈现方式。
二
周六上午,骆襄铃收到了一条来自游戏系统的正式地图更新通知。她打开通知的时候正在喝早上第二杯咖啡,她在看到通知的第一行字时放下了杯子:"您好:您在同城频道中录入的'老槐巷·七号'坐标已被系统收录至游戏地图的'已探索区域'中。您可以在水乡地图的'自定义标记'分页中找到该坐标,系统已为其生成对应的描述标签。"
她切到游戏地图,打开水乡西南方向的视图。在引渡口的浅绿色自定义标记旁边,多了一个新的标记——颜色是深绿色的,跟引渡口的浅绿色略有区别,像是系统自动生成的标准色。标记的位置正是她之前保存的老槐巷坐标的网格位置。她放大了标记的详情页面,系统自动生成的描述标签是:"'老槐巷·七号——现实坐标已同步。'"
她坐在电脑前面看着那个深绿色的标记在地图边缘线上亮着。沈叔写的那条"反向映射"链路,在二十四小时后完成了它的正式运行——游戏地图上出现了一个对应真实地址的标记,那个标记的生成过程她全程参与了:从引渡口的记录到梧桐巷的地址确认,再到老槐巷的坐标读入,最后被系统同步到游戏端的地图页面。整个过程没有出现任何系统错误或报错,就像是它从一开始就能这样运行、只是一直没有人触发它。
她在队伍频道里发了一条消息:"地图上刷新了老槐巷的标记。深绿色的。在地图自定义标记分页里。"
许诺的回复在几秒后出现:"我这边也看到了。"
程砚过了一小会儿才回:"在引渡口旁边。两个标记的间距跟现实中的位置比例一致。"
骆襄铃把地图视图拉到最大范围,让引渡口和老槐巷的标记同时出现在同一帧画面中——两个标记之间隔着约两指宽的屏幕距离,但在地图缩放比例下实际对应着城南到老城之间的那段路程。三个标记——引渡口、梧桐巷、老槐巷——如果沈叔的系统继续运行下去,她可以通过同样的方式继续在游戏地图上生成对应的"现实坐标已同步"的标记,把虚拟和现实之间的可识别位置点越来越多地拼在一起。
她截了一张三个标记同框的图存进了相册。然后她关掉地图界面,走到书房窗口站了一小会儿。窗外的夏季日光正在接近正午的亮度,水乡的睡莲在水道上全盛地开着,连理亭檐口的紫藤已经越过了亭顶的边线垂下了几串新的花穗。所有东西都在以夏季全盛期的姿态保持着稳定的存在。
她站在窗口看着水道的方向,在心里把沈叔的系统架构图又过了一遍。他的全部设计——从清风庄到烟雨古镇到引渡口到同城频道到现实坐标对照库——形成了一个完整的环。他花了好几年时间建这个环,而他写第三版的时候可能还不知道这个环是否真的能被从一端到另一端完整地走通。他在最后一页写了"可以用了",但他写下"可以用了"的时候没有人能够证明"真的可以用"。直到今天,这个证明才被完成。
她回到书桌前重新打开铁盒,把那叠第三版规划纸页从信封中取出来平摊在桌面上。八页纸依次排开,她逐页按顺序看了一遍。看到最后一页的时候她注意到一个之前没发现的细节——最后一页纸张的底部,在那条"如果将来有数据接入,它应该能自动跑通"的句子下方,有一行极短的、像是用笔尖最枯的一侧补写的后记:
"如果你读到了这里——那你已经找到了比游戏更重要的东西。"
她把那行字看了很久。它不是技术说明,不是设计注释,也不是地址或数据——它是沈叔在完成了整份系统规划之后在最后一页底部补写的一句话,跟前面所有内容都不在同一个维度上。她在那个句子里听到的是一种跟许诺在画上写"灯给你留着"相同的语气。
她小心地把八页纸按顺序叠好重新放回信封中,然后把信封放回了铁盒内。铁盒的盖子合上时发出了一声低沉的闷响,跟它在泥土中被开启时的声音一致。
三
当天下午,三人约在现实中的那条石拱桥河边碰了一次面。
夏季的河岸边长满了比春天时茂盛得多的植被,石拱桥两侧的栏杆上爬着几株新生的藤蔓,绿叶间开着几朵细小的白色花。骆襄铃到的时候许诺已经在桥头站着了,背靠栏杆手里握着一只保温杯,程砚在河岸的石阶上坐着看手机,三个人各自在河边不同位置待着,形成了一种散开但不分散的分布状态。
骆襄铃走到石阶边上在程砚旁边坐下来。许诺从桥头走下来,在石阶的另一端坐下。三个人在河岸的石阶上各自就位,夏季午后的光线从头顶直射下来,在河面上形成一片持续的亮光。河水的流速比春天的时候慢了一些,水面上有几片绿色的浮萍正在缓慢地漂移。
"地图上新加的标记,你们设置'可见'了吗?"程砚开口问。
"设置了。"骆襄铃说,"我设成'仅同城好友可见'。"
"我也是。"许诺说。
"那在同城频道的列表中,我们的状态栏应该会显示'已关联坐标标记'的标签。"
骆襄铃打开手机看了一眼同城频道——在"许谔"和"青墨"的名字旁边,确实多了一行灰色的标注文字:"已关联坐标标记·老槐巷七号"。她自己的名字旁边也显示了同样的标注。三人的ID在同一页列表中并排亮着,每行旁边都多了一行灰色的标注,像是三个人各自背包里放了一份相同类型的地图坐标文件。
"沈叔的系统现在正在运行的这一部分——"骆襄铃把手机收起来,"是他当年想要的那种效果吗?"
许诺在石阶上安静了一下。"他想要的效果是把游戏里的坐标跟现实中的位置连起来。现在我们三个人的同城状态栏里都在显示同一个现实地址的标记——这就是他要的那种效果。"