第一章 界印降临之夜
夜色压在城市表面的时候,最先起反应的不是天,也不是云,而是玻璃。
整条街的玻璃幕墙像被什么看不见的手指轻轻刮了一下,反光抖成细小的碎片,又被强行拼回去。灯牌、霓虹、窗里的人影,都在那一瞬间轻微错位了一格。
林岚提着两罐饮料,从便利店推门出来。门上的铃铛响了几声,又不太情愿地托长了一些尾音,像音轨被人拉慢了几帧。
他停在门口,把外套拉链往上拽了拽,但还没拉到一半,就看到前方的街道——似乎微微弯了那么一下。
那种弯不是透视带来的视觉错觉,而是整条路的中线被人从远处掐住,往上提出一个不符合重力的角度。远处的车辆随着这道“折角”轻轻抬起,再缓缓落下,轮胎擦地的声音都延迟了一拍,像是从录音里回放出来的。
空气里有东西在飘着。
起初,林岚以为是灰尘,被路灯打出的亮光折射。他眯眼盯了几秒,才发现那些亮点都有形状——细短的横线,小弯钩,单独的括号,像是一堆代码,像是谁把一大段代码拆碎为字符,然后全部撒进了夜色里。
路口的柱形音响依然按部就班地播放着城市广播:“请注意交通安全,道路千万条,安全第一条!”
零点几秒之后,完全一样的一句又被播放了一遍,就像是磁带重复在播放。
林岚站在那里,没有立刻动。冷气从便利店里漏出来,贴着他的后颈往上爬,带着一丝冰箱的味道。
街对面,一块巨大的广告屏闪了两闪。黑屏与黑屏之间,有一条极细的线短暂亮过。那条线细得像一根头发,但林岚就是看见了,那条线划在视觉与注意力的正中央。线段亮起的那零点几秒里,有几个歪斜的字符凸了出来,林岚甚至也都清晰的看到了:
obs_layer… unstable
是那样一种亮度——不刺眼,却让林岚有一种就是特意亮给自己看的错觉。
他下意识眯了眯眼睛。
就在这一眨眼之间,天和楼的交界处被撕开了一条缝。
那条缝起初很细,然后像蓝色墨水沿着纸里的纤维慢慢渗开。裂纹内部挤满了快速闪烁的符号,它们像在努力想要组合成句子,又在每一次几乎接近某种句子的时候被打散,它们像是在挣扎。
裂纹向上爬的时候,远处传来一种极轻的噪声。不是风声,也不是车声,像是被迫放小了音量的电流声,对,就是电流声,在高楼之间来回反弹。
林岚抬头看着。胸腔微微往下坠了一格,像电梯刚起步时轻微的失重感。
那不是人类日常经验里会出现的画面。他一瞬间想到了“渲染错误”“线程冲突”之类的词,又很快对这种本能的技术类联想感到一点不耐烦,这是加班加多了,加出幻觉了吧。
然后,折叠光开始落下。
那束蓝白色的光,从裂纹里倾斜着压下来,没有任何雷声或爆响。它的质感更像一支巨大的笔,试图想在世界这一页上写入什么。
光落地的瞬间,整条街被切成两部分。
左半条街一切照旧。车灯、红绿灯、行人的影子没有任何变化。
右半条街却像被人把时间调慢了好几倍。车轮移动得迟缓,广告牌上的画面只有两张图在不停切换,行人像卡带的录像带。建筑轮廓竟然有轻微重叠,重叠处泛出幽暗的重影。
两条街道的画面在界线处硬生生嵌在一起。每当折叠光轻微脉动一次,这两份现实就像两层没对齐的图层,彼此错开,又勉强重叠。
林岚恰好站在这条界线附近。
他的影子被拉进右边那条“延迟街道”,动作慢了一帧。更诡异的是,在那边的延迟画面里,又浮出一个模糊的他——透明,边缘模糊,像被压缩过的低清版本。那个人影提着塑料袋,从便利店门口走出来,动作和五分钟前的自己一模一样。
空气里的冷意更重了一点。
林岚下意识地伸手,摸了摸自己胸口,心跳还在,节奏正常,没有电影里那种“砰砰乱跳”的戏剧化,只是每一下都显得有点过于清楚。
那不是平时生活里会出现的画面。
他盯着那边那个“自己”看了两秒,脑子里冒出一个非常不体面的念头:
——这录像质量真一般。
然后才反应过来,眼前这不是哪家监控回放,而是现实本身在对他“延迟播出”。
就在他盯着的当口,那条天与楼之间的裂缝猛地往下坠了一截。
仿佛有谁上面拿捏不住了,松了手。
裂缝落地的时候,没有震动,没有爆炸,只是很简单地把街沿切下去一块,切出来一条干净利落的半弧形口子。口子里面看不见土,也看不见管线,只有一块说不出颜色的东西——像是画布上被橡皮擦过,却还没来得及重新涂上颜料。
街上的声音被抽空了。
车声没了,风声没了,连便利店里收银扫码的电子提示音都像被关掉了,只剩下一点零零碎碎的符号在半空中闪烁:
#??::render-fail…
node.scan… pending…
那些字没有出现在任何屏幕上,就是悬在那里,好像世界被迫把内部报错信息泄露了一点出来。
林岚看着那块“不知道是什么”的空洞,喉咙发干,吞咽了一下,没听见自己吞咽的声音。
“这不科学。”他在心里说。
然后很快否决了自己这个念头——
这已经不是“科不科学”的问题了。
有个冲动顺着脊柱往上窜,推着他往前走。
他不知道那是好奇、求生欲,还是单纯的神经反射。反正腿已经抬起来了,鞋底踩在地面的触感出奇地清晰,像是每一粒沙子都被单独记录了一遍。
他慢慢靠近裂缝边缘。
塑料袋被他往手腕上一挂,腾出手来。
指尖在空气里试探了一下。
那些在空中游走的亮点察觉到了他的动作,立刻像一群被灯光惊到的飞虫一样短暂聚拢,又在离他指尖半厘米的地方分散开去,像是既想靠近,又有点害怕沾上他。
林岚没有停。
指尖轻轻碰到了裂缝的边缘。
世界顿了一下。
不是比喻,而是整条时间线在那一瞬间被按下了暂停键。
光停在半空,折叠成一片片蓝白色的层次;风停在建筑的棱角附近,连一片塑料包装纸都定格在半鼓起的形状;右边那条“延迟街道”里的车停在路口中央,司机的手悬在半空,握着一截模糊的方向盘。
裂缝不再继续向上爬,也没有继续塌陷,就那么保持着原本的宽度,轻微地颤抖了一下。
林岚也停住了。
他维持着伸手的姿势,感觉自己像是按到了什么不该按的按钮,好比深夜加班时无意中删掉了一个不知道功能的系统文件,然后屏幕卡死。
他甚至能清晰地感觉到:
这一刻,不是他在看这道裂缝,而是这道裂缝在看他。
下一秒,一块半透明的界面就在他的视野中央弹出来。
没有来源,没有投影仪,没有屏幕。
它就这么安安静静地浮在那儿,像是在他眼球后面翻出来的一层叠加界面:
【Interface Seal_Beta】
Status: Collapsed_Stage
Semantic_Scan: initializing…
Subject: human_identity(…)
那些字薄薄地贴在空气上,好像稍微用力一吹就能吹散,可又透着一种不容置疑的存在感。
林岚下意识眨了一下眼睛。
界面还在。
他试着把目光偏向一点,界面也跟着一起偏过去,始终待在视野正中,很有“你跑不掉”的意思。
下一行字的颜色从白变成了红色:
result: Noise-Origin
classification: Anomalous Semantic Source
“异常噪声源?”
他在心里默读了一遍,后颈不由得一紧,仿佛有一只冰凉的手指从脊椎根部滑到了头皮。
世界在扫描他。
在给他下定义。
而且很显然,这个定义不属于普通人的那一类。
街道上那些飘来飘去的符号突然疯狂起来,像是被投进水里的墨汁一样朝裂缝涌去。裂缝边缘的蓝白光线乱成一团,像一行写了一半就开始不断退格的句子。
林岚张了张嘴,声音有点哑:“别扩。”
这句话说出口的时候,他自己都没想明白为什么会是这三个字。
听上去不像是发号施令,更像是对一场已经失控的事故的本能抗拒。
但裂缝的扩张真的停了一瞬间。
所有静止的东西依然静止着,可是空气里出现了一种微妙的“迟疑”,就好像整个系统读到了一个不知道该当成什么处理的输入,不确定自己是不是该照常运行下去。
林岚的心跳也跟着乱了一拍,紧接着又勉强稳住。
更高处的天空中,第二道折叠光亮起。
这一次,在光的内部挤满了密密麻麻的字符,它们像一群被压缩过的信息,努力往外挤:
〈scan.node.3〉
〈memory.echo… unstable〉
〈proxy-layer?〉
风从一个不太合理的角度灌下来,绕着街角转了一圈,吹过他的耳边。那风又冷又干,里面掺了点类似服务器机房的那种塑料味和金属味。
视野里的 HUD轻轻抖了一下,整个界面像是一张纸被人揉皱了一下,又粗暴地摊平。
新的警告被强行插了进来:
Warning: ghost_sign detected.
Level:…undefined…
ghost_sign。
这个单词在界面上闪了一下,随后停住,不再刷新。
林岚盯着它看,心里很清楚地升起了一种说不上来的感觉——
像是在看一行连系统本身都不太愿意承认存在的词。
胸口那种下坠感再一次加强了些。
远处的云层开始以一种不符合天气预报的方式被往上抽走。夜空的一片区域被硬生生擦出一个灰白的洞,洞里什么都没有,连正常意义上的“黑暗”都没有,只是一种未被渲染完的空白。
空气里所有的字符、噪声、残余的声音碎片,像是接到了某种信号,全部朝那个洞流过去。
那片灰洞既像洞,也不像洞。
它更像是世界被人不小心翻到的一页草稿。
林岚抬头,看着它在夜空里慢慢扩大。
他没有后退,也没有上前,只是站在那里,像被钉在世界与世界之间。
背后便利店里又响起了熟悉的“滴——”的一声,收银的提示音显得遥远又普通,像从上一个版本的现实里漏出来的声音。
他忽然觉得,这一切还有点滑稽。
宇宙好像懒得给他准备什么隆重的仪式,只是随手在他下班路上撕开了一条缝。
一个想法缓慢而固执地在他心里坐了下来:
——世界不是坏了。
只是被人,或者什么东西,
切换到了“编辑状态”。
灰色的空洞继续张开,边缘变得越来越模糊,像是一只没有瞳孔的眼睛缓慢睁开。
风停了一下。
光线暗了一点点。
街道仿佛在等待什么。
在那片灰洞最深处,有什么东西正在形成。
可能是一个词,一个标签,或者——一个名字。
它需要一个指向的目标。
而此时此刻,站在折叠光照亮的那块街道交界线上的人,
只有林岚一个。
