Назар Корчинский
Цикл 61

Пролог

ПРОЛОГ

Пролог, в котором Гуанг Гуанг находит баг и не закрывает тикет

Гуанг Гуанг проектировал карты для Super Rivals. Те самые, на которых Мистер Эластик превращался в форму, похожую на знак бесконечности: петля, из которой нет выхода, только следующий виток. Гуанг Гуанг не был старшим дизайнером уровней, потому что уровней в мультиплеерной арене нет — есть карты, есть режимы, есть лабиринты коридоров, в которых заблудится любой, кто попытается искать логику там, где её не предусмотрено.

Он курил в офисе. Нельзя. Плевать. Офис NetDream был устроен так, что некурящих в нём либо сразу увольняли, либо они сами уходили через месяц, не выдержав дыма. Дым висел под потолком серыми слоями, как геологические эпохи. Самый старый слой помнил ещё билд 1.0. Самый свежий только что поднялся от сигареты Гуанг Гуанга и поплыл к вентиляции, которой не существовало.

Серверные стойки вдоль стен дышали: вдох — выдох. Где-то в этом ритмичном шуме прятался ещё один звук — тонкий, монотонный, почти неуловимый. Писк. Он был похож на кардиомонитор, но Гуанг Гуанг давно перестал его замечать. Этот звук был здесь всегда — как фон, как часть архитектуры. Всё в этом здании было подключено к чему-то живому.

На мониторе висел билд 61.0.0.1 — тестовый, внутренний, тот, который никогда не должен был попасть на продакшн-сервер. Но попал, потому что ночная смена в NetDream — это особая форма бытия, где чудеса происходят не по воле богов, а по недосыпу дежурного программиста. Программистку звали Ли. Она работала третью ночь подряд и уже не отличала код от галлюцинаций. Когда она заливала билд на сервер, ей казалось, что она кормит рыбок. Рыбки были воображаемые, а билд — настоящий. На её рабочем столе стоял пустой аквариум. Так 61.0.0.1 оказался в продакшене.

Гуанг Гуанг видел это по логам. Мог остановить — не остановился. Не потому что ждал бага. Потому что Ли напоминала ему его самого десять лет назад: молодого, голодного, готового работать сутками ради игры, которая никогда не станет идеальной.

Он помнил, как сам залил не тот билд в четыре утра — билд 17.0.0.3, который должен был поправить хитбоксы, а вместо этого создал NPC-торговца, говорящего о городе, которого в принципе не существовало. Не в игре. Не в лоре. Не в реальности. Нигде.

— Сургут, — говорил тот торговец равнодушным, записанным голосом. — Сегодня минус двадцать, ветер северный.

Гуанг Гуанг тогда проверил все базы данных. Никакого «Сургута» не было в коде. Никакой отсылки. Никакого скрытого пасхала. Торговец произнёс это слово сам — из пустоты, из ошибки в компиляции, из трещины между билдами.

Он закрыл тикет с пометкой «баг не подтверждён».

Теперь, глядя на логи билда 61.0.0.1, Гуанг Гуанг вспомнил того торговца.

Он откинулся в кресле и затянулся. Дым осел на экране, и на секунду ему показалось, что цифры в логах перестроились в слово. «Кваско». Или «Kvasco». Он отогнал дым рукой, и логи снова стали обычными. Он вбил ник в поиск — и канал высветился первым же результатом.

Гуанг Гуанг перешёл по ссылке на Twitch-канал Kvasco. Стрим шёл. Трансляция показывала пустую комнату — стол, бутылку, сгорбленную тень на стуле. Гуанг Гуанг вгляделся в изображение. На столе, рядом с клавиатурой, лежал ключ. Ржавый, с семью зубцами — один лишний, торчащий вбок, как сломанный палец. Гуанг Гуанг отмотал запись на три часа назад — ключа не было. Ещё час назад — не было. Он появился в кадре ровно в тот момент, когда билд 61.0.0.1 ушёл на продакшн. Не раньше, не позже. Как по расписанию.

Он перевёл взгляд на счётчик зрителей. Шестьдесят один. Ровно. Он обновил страницу. Шестьдесят один. Ещё раз. Шестьдесят один. Живые цифры так себя не ведут. Живые цифры дышат — то вверх, то вниз. А эти — не дышат. Их кто-то заморозил.

Или что-то, — подумал Гуанг Гуанг.

Он проверил логи сервера. Частота модуля нейроинтерфейса — 61 Гц. Число 61 было вшито в архитектуру билда на всех уровнях. Ли, сама того не зная, оставила водяной знак — и теперь этот знак проступал повсюду, куда дотягивался билд. Как подпись. Как клеймо. Как код замка, к которому ещё не нашли ключ.

Он сделал пометку в тикет-системе: «Баг подтверждён. Реальность субъекта активна. Патч не требуется. Количество зрителей зафиксировать на 61.»

Он перешёл в логи чата. На глубине, которую он не смог бы измерить, висело сообщение:

Kvasco: Гуанг Гуанг, твоё пиво выдохлось ещё в позапрошлом патче. Долей.

Гуанг Гуанг замер. Kvasco не мог этого написать. Но сообщение висело в чате. Может, оно появилось само. Может, это система говорила с ним. А может, баг в билде 61.0.0.1 был глубже, чем он думал, и теперь реальность и игра переплетались, как провода в старой серверной стойке.

Он поднёс руку к лицу и посмотрел на пальцы. Они дрожали — не от страха, не от усталости, а от азарта, которого он не чувствовал с тех пор, как закрыл тикет по билду 17. Система не генерировала этот ключ. Система не генерировала это сообщение. Они появились сами. Как торговец, знавший о Сургуте. Как многие другие баги, которые он «закрывал», но которые продолжали жить где-то на периферии кода.

Живые баги, — подумал он. — Эмбрионы.

Затем Гуанг Гуанг напечатал ещё одну пометку: «Субъект готов. Начинаем.»

Он не знал, что начинает. Его пальцы двигались сами — не по его воле, а потому что в билде 61.0.0.1 причина и следствие иногда менялись местами. Слово, которое он напечатал, не существовало в документации, но уже существовало где-то — в черновиках, которые ещё не были написаны, но которые система считала завершёнными.

Пиши.

Гуанг Гуанг затушил сигарету. Достал новую. Закурил. Поднёс к губам пустоту, имеющую форму стакана, — привычка, которую он так и не смог объяснить. Где-то в тёмной комнате за тысячи километров от офиса NetDream человек по имени Александр Кваско спал, и ему снился женский голос. Где-то в Сургуте он открыл глаза и потянулся к бутылке. Гуанг Гуанг сделал глоток из пустоты — и Кваско, сам не зная почему, сделал глоток из своей.

На экране высветилось:

Субъект Kvasco. Статус: активен. Контрольные точки пройдены. Фаза 1 активирована.

Гуанг Гуанг улыбнулся. Это была не добрая улыбка. Это была улыбка человека, который только что понял: ошибка, которую он не исправил, может оказаться единственным, что он сделал правильно за всю свою карьеру.

Глава 1

ГЛАВА 1

ГЛАВА 1,

в которой будильник не срабатывает, а реальность начинает давать сбои

Будильник должен был прозвенеть в 17:00.

Он не прозвенел.

Точнее, он прозвенел где-то в параллельной версии реальности — в той, где Александр Кваско был ответственным человеком, вставал вовремя, завтракал, чистил зубы до скрипа и успевал на служебный автобус в 17:48. В той версии он жил с родителями, не пил по будням и, возможно, даже был счастлив — или хотя бы не был собой. Но в этой ветке будильник просто лежал на полу, экраном вниз, и молчал, как молчат все предметы, которые разочаровались в своём владельце.

Кваско открыл глаза в 20:17.

Первое, что он почувствовал — запах. Кислый, тёплый, родной. Смесь вчерашнего пота, позавчерашнего пива и сигаретного дыма, который въелся в шторы так глубоко, что стал частью ткани. Этот запах был настолько постоянным, что Кваско уже не замечал его — как не замечают цвет стен или гул холодильника. Но иногда, в моменты похмельного просветления, он вдыхал его как что-то чужое. Словно в комнате жил кто-то другой, а он просто зашёл проведать.

Второе — свет. Экран монитора горел красной точкой. Программа для стримов была включена. Трансляция шла. Кваско не помнил, как включил стрим. Может, и не включал. Шестьдесят один зритель.

— Блядь, — сказал Кваско. Или подумал. Или подумал, а чат прочитал. В чате было пусто, но тишина в чате — это тоже сообщение. Отсутствие сообщений — тоже сообщение. Всё было сообщением, если смотреть достаточно пристально.

Телефон показал три пропущенных звонка от руководителя склада. Первый — в 20:08. Второй — в 20:12. Третий — в 20:15. Интервал говорил сам за себя: сначала лёгкое раздражение, потом недоумение, потом короткое «ну всё, пиздец». Кваско смотрел на номера пропущенных и чувствовал странное облегчение. Пропустить звонок — это маленькая победа. Каждый пропущенный звонок — это гвоздь в крышку гроба его карьеры грузчика. И он забивал эти гвозди с удовольствием.

Смена начиналась в 20:00. Но склад находился за городом, и служебный автобус отходил от его остановки в 17:48. Час с лишним в пути — через пробки, через промзону, через серые сургутские окраины. Автобус прибывал к проходной около 19:00, и именно отсюда бралось негласное правило: приходить за полчаса-час до официального старта. Корпоративная культура висела в воздухе, как запах картона, — её никто не произносил вслух, но все ей подчинялись: «Если ты не пришёл раньше — ты уже опоздал. Если ты опоздал — ты уже не работник. Ты просто тело, которое ещё не вынесли».

В 20:17, когда Кваско открыл глаза, служебный автобус уже два с половиной часа как ушёл. Смена шла без него уже семнадцать минут — или больше часа, если считать по негласному правилу. Он был не просто опоздавшим. Он был отсутствующим. Отсутствующим в своей собственной жизни.

Он сел на кровати и опустил ноги на пол. Пол был холодным. Всегда холодным. Даже летом. Кваско подозревал, что под линолеумом там ничего нет — просто пустота, прикрытая строительным мусором. Иногда ему казалось, что если он надавит посильнее, то провалится в квартиру этажом ниже. А там — другие люди, другая мебель, другая жизнь. Может, там он не проспал смену. Может, там он вообще не работает на складе.

Он встал и побрёл в прихожую. Подошёл к мутному зеркалу. Из него смотрел парень лет двадцати четырёх — русые длинные волосы, спутанные после сна, серо-голубые глаза с красными прожилками. На подбородке — тонкий белесый шрам, оставшийся с детства. Кваско провёл по нему пальцем, как делал всегда, когда задумывался. Узкие скулы, заметные, но не острые. Взгляд рассеянный — не то в себя, не то сквозь стену.

Ему послышался странный звук. Ритмичный, тонкий, почти неуловимый. Писк. Словно где-то за стеной работал медицинский прибор. Или это просто кровь шумела в ушах после вчерашнего. Он прислушался — звук исчез. Или его и не было. Гул монитора поглотил этот звук.

— Проснулся, — сказала тень в углу комнаты. Голос коснулся его, как холодная рука.

Голос был женский. Мягкий. С какой-то неправильной, щемящей интонацией, от которой у Кваско свело живот. Он знал этот голос. Он не знал этот голос. Он знал его когда-то — в другой жизни, в другом билде реальности, — но стёр, запил, забил досками, как забивают комнату, в которой кто-то умер. И вот теперь доски треснули, и голос просочился обратно — смутно знакомый, но неузнанный, как мелодия, которую напеваешь во сне, а проснувшись, не можешь вспомнить, откуда она. Этот голос был старше его памяти о нём. Он звучал как эхо — но эхо, которое опережает звук.

— До свадьбы заживёт, — добавила тень, и в этой фразе было что-то такое родное, что Кваско на секунду замер.

Где он это слышал? Когда? От кого? Перед глазами мелькнула картинка — лето, деревенский двор, грушевое дерево, девочка с косичками, перевязанными голубыми ленточками. Она перевязывает ему ногу, он морщится от боли, а она смеётся: «Терпи. До свадьбы заживёт». Картинка исчезла так же быстро, как появилась. Кваско помотал головой. Глюк. Ещё один глюк. В последнее время их было слишком много.

— Я знаю, что проснулся, — ответил он, не оборачиваясь.

— Ты проспал.

— Я знаю, что проспал.

— Ты всегда знаешь, но никогда не меняешь.

— Зачем менять, если всё уже записано? Это стрим. Мы в эфире.

Тень не ответила. Кваско показалось — или не показалось — что в молчании было что-то осуждающее. Или печальное. Или и то и другое. Он так и не обернулся. Не потому что боялся. А потому что знал: если обернётся — увидит только стену. Или не только стену. Эта неопределённость была единственным, что держало его в сознании.

Он встал. Пол качнулся — не метафорически, а вполне физически, как палуба корабля, на который он не садился. Вчерашнее пиво ещё не до конца переварилось в кровь, а кровь ещё не до конца решила, хочет ли она циркулировать или возьмёт отгул, как её хозяин. Алкоголь в его организме был уже не веществом, а структурным элементом. Если бы его кровь отправили на анализ, лаборант спросил бы: «Это пиво с примесью крови или кровь с примесью пива?»

На столе стояла бутылка Old Bobby. Недопитая. На дне, в золотистой мути, что-то поблёскивало. Маленькое. Металлическое. Кваско не помнил, чтобы бросал ключ в бутылку. Он вообще не помнил, чтобы у него был такой ключ. Но ключ лежал там — ржавый, с семью зубцами, один из которых был лишним, как шестой палец, как шестая серия в сезоне из пяти, как шестьдесят первый зритель, которого быть не должно.

Он вытащил ключ из бутылки. Тот был мокрый, липкий, пах солодом и ржавчиной. Старый. Очень старый. Таким ключом не открывают дверь — таким ключом открывают что-то, что не должно быть заперто.

— Ты знаешь, что это за ключ? — спросил он, ни к кому конкретно не обращаясь.

Тень молчала. Но молчание было ответом. Таким же, как тишина в чате. Таким же, как пропущенные звонки.

Кваско сунул ключ в карман куртки, схватил телефон и вылетел из квартиры. Программа для стримов продолжала писать. Шестьдесят один зритель смотрели пустую комнату. Или не смотрели. Или не шестьдесят один. Или не зритель. Похуй. Потом разберёмся.

---

На улице его встретил холод. Мартовский, сургутский — такой холод, который не просто касается кожи, а залезает под неё и устраивается там на ночлег. Сургутский март — это не весна. Это замаскированная зима, которая притворяется, что уходит, но на самом деле просто отошла покурить и сейчас вернётся.

Кваско вызвал такси. Приложение показало: «Время подачи — четыре минуты. Стоимость — сумма, которую вы не можете себе позволить, но заплатите, потому что выбора нет». Он оплатил. Деньги списались с кредитки — той самой, которая была в минусе на сорок тысяч, но банк пока не заблокировал карту. То ли по ошибке, то ли система ждала, когда он уйдёт в минус на сорок одну. В билде 61.0.0.1 всё работало по своей логике. Или не работало. Или и то и другое.

Он закурил, пока ждал. Руки дрожали. От холода. От похмелья. От того, что голос в комнате был слишком знакомым, и думать об этом не хотелось.

Первым был подросток на самокате. Лет пятнадцать, бледный, в чёрной худи с капюшоном. Он проехал мимо остановки, но сбросил скорость, почти остановился, уставившись на Кваско с каким-то странным узнаванием. Кваско готов был поклясться, что тот хотел что-то сказать, но передумал — нажал на газ и укатил в темноту. Или просто курьер, который сверялся с адресом? Или парень, который засмотрелся на прохожего? Кваско не знал. Но его внутренний голос уже начал свою работу: «Узнал. Точно узнал. Даже дети знают».

Вторым был мужик с собакой. Лет пятьдесят, в старой кожаной куртке, с лицом, которое говорило: «я видел всё, и мне не понравилось». Его пёс — лохматый дворянин неопределённой породы — натянул поводок и уставился на Кваско. Не гавкал. Просто смотрел. Мужик тоже посмотрел. Дольше, чем нужно. Не как на прохожего. Как на кого-то, кого он где-то встречал. Он придержал пса и сказал в пустоту:

— Знакомое лицо.

— Чего? — переспросил Кваско.

— Говорю, собака на тебя не лает. Обычно на чужих лает. А тут — смотрит.

— Я ей понравился.

— Или она тебя узнала, — ответил мужик и потянул поводок. Пёс нехотя пошёл за ним, но ещё дважды обернулся.

Кваско смотрел им вслед. Мужик мог иметь в виду что угодно. Что собака узнала в нём прежнего хозяина? Что он похож на кого-то из телевизора? Что он просто пахнет едой? Но Кваско уже пришил это к своей картине мира: «Узнала. Даже собаки знают».

Третьей была девушка с телефоном. Лет двадцать, наушники, яркий шарф. Она стояла на остановке, листала ленту и вдруг улыбнулась — не ему, а чему-то на экране. Кваско замер. «Она смотрит на меня? Узнала? Или просто мем смешной?» Девушка перевела взгляд на него — на секунду, не больше — и снова уткнулась в телефон. Может, она просто заказывала пиццу. Может, переписывалась с подругой. А может, отправляла ей фото со словами «смотри, кто здесь». Кваско не знал. Но его внутренний голос уже всё решил.

Трое за четыре минуты. Он сунул руку в карман и нащупал ключ. Холодный. Тот самый. Ключ появился сегодня утром — или ночью, или он просто не замечал его раньше. И сразу после этого люди на улице начали его узнавать. Совпадение? Или звенья одной цепи? Может, ключ был не просто предметом. Может, он был активатором. Сигналом. И теперь система тестировала его — проверяла, заметит ли он.

В такси он сел на заднее сиденье и сразу полез в телефон. Открыл Twitch. Стрим всё ещё шёл. Программа транслировала ту же пустую комнату, что и час назад. Шестьдесят один зритель. Чат молчал. Но в списке зрителей появился новый ник: GG_Dev. Гуанг Гуанг. Зашёл. Вышел. Или зашёл и остался в невидимом режиме — что для разработчика NetDream было бы странно, но не невозможно.

Водитель такси — мужик с уставшим лицом и значком «Спасибо за тишину» на приборной панели — посмотрел на него в зеркало заднего вида. Посмотрел на секунду дольше, чем позволяла дорога. Машина вильнула — таксист выровнял руль, но взгляда не отвёл.

— Слушай, а ты нигде не снимался? Лицо знакомое.

Саша вздрогнул. Не «молодой человек». Не «брат». «Лицо знакомое». Как свои. Словно они где-то пересекались.

— А где вы меня видели? — спросил он, глядя на водителя в зеркало.

— Да не помню я. Может, в рекламе? Или в кино? У меня сын всё время что-то смотрит.

— А что именно смотрит? Стримы? Игры?

— Да кто его разберёт. Орёт всё время что-то, а я не вникаю.

«Орёт всё время». Кваско отвёл взгляд. Таксист не знал, где его видел. Сын орёт, но непонятно, на кого. Может, это и не стримы вовсе. Может, обычный подросток, который играет в игры. А может, таксист просто не хотел говорить прямо. Может, он знал больше, чем показывал.

Кваско хотел спросить — где? Где вы меня видели? В каком фильме, на каком канале, в каком сне? Но таксист уже включил радио, и салон заполнился помехами.

— Ну, извиняй, — сказал таксист. — Обознался, значит.

Обознался. Просто обознался. Но Кваско уже не верил в «просто».

До того как он стал Kvasco, он был никем. Шестьдесят один фолловер — это не аудитория, это статистическая погрешность. Кто мог его узнать? Кому он мог быть интересен? Его никто не рейдил. Его никто не доксил. Тогда откуда эти взгляды? Откуда эти «обознался» и «похож»?

Либо