Глава 4. Главный квест, которого нет
Ворота Зеро-Сити болтались на одной петле. Вторая валялась в пыли, и сквозь неё просвечивал полигональный каркас — текстура дерева не прогрузилась.
Глыба остановился у арки.
— Добро пожаловать в хаб, — пробормотал он. — Где каждый НПС — баг.
Трактирщик стоял у дверей таверны «Синий глюк». Улыбался. Кивал.
— Добро пожаловать.
— Добро пожаловать.
— Добро пожаловать.
ДД подошла ближе. Помахала рукой перед его лицом.
— Эй. У тебя пластинку заело.
— Добро пожаловать.
— Он на репите, — констатировала Скрыт. — Одна фраза. Бесконечный цикл.
Опора уже открыл интерфейс. Пальцы бегали по воздуху — он листал логи НПС.
— Сбой диалогового дерева. Ветка «Приветствие» замкнута сама на себя. Три тысячи четыреста двадцать первая итерация.
— И он не устал? — ДД постучала трактирщику по лбу.
НПС дёрнулся. Улыбка сбросилась. Лицо стало пустым.
— Добро... — начал он.
И захрипел.
Глыба оттащил ДД за плечо.
— Не трогай. Мало ли — агришь моба.
1— Я агрю? — возмутилась та. — Он сам кого хочешь заагрит. Два часа кивает — крыша съедет.
Стражник у городской стены шагнул вперёд. И сквозь стену. И вышел с другой стороны. Развернулся. Снова шагнул.
Опора проводил его взглядом.
— Коллизия отсутствует. Модель игнорирует физический объект.
— Модель игнорирует мозг, — отрезал Глыба. — Идём. Нам нужен Архив Патчей.
Улица вела к рыночной площади. По пути попалась лавка алхимика. Старик в синем балахоне стоял над котлом. Мешал варево. Ложка двигалась — раз, два, три. Плавно. Монотонно.
А потом дёрнулась. И застыла.
— Завис, — прошептала ДД.
И скользнула к прилавку.
Глыба не успел её остановить. Опора открыл рот. Скрыт просто смотрела.
ДД сгребла склянки с зельями — четыре штуки. Сунула в инвентарь. Алхимик не шелохнулся. Ложка висела в воздухе.
— Он даже не качается, — удивилась ДД. — Обычно хоть дышат.
— Он не дышит, — сказала Скрыт. — У него нет цикла дыхания. Анимация только на руку.
— Жуть, — ДД взяла пятую склянку. — Но зелья-то настоящие.
2Глыба выдохнул сквозь зубы.
— Если он очнётся...
— Он не очнётся, — перебила Скрыт. — У него зациклен таймер. Видите? Ложка дёргается каждые три секунды на одно и то же место. Это не баг. Это кто-то намеренно повесил на него бесконечный каст.
Опора прищурился.
— Ты хочешь сказать...
— Да. Кто-то специально ломает НПС. Создаёт этот цирк.
ДД замерла. Склянка звякнула в пальцах.
— Зачем?
Скрыт указала на стену таверны. Там, поверх каменной текстуры, горели строки кода. Они ползли вниз — медленно, как капли.
— Смотрите. Каждый алхимик. Каждый стражник. Каждый трактирщик. У них один и тот же шаблон ошибки. Как будто кто-то запустил скрипт.
Глыба нахмурился.
— Скрипт ломает игру.
— Скрипт ломает всё, к чему прикасается, — уточнила Скрыт. — И мы идём в Архив. К тому, кто его пишет.
Опора уже шагал к Библиотеке — массивному зданию, парящему в метре над землёй. К нему вела лестница. Три ступени из десяти отсутствовали. Опора перепрыгнул провал.
Внутри пахло пылью. И серверным маслом.
3Библиотекарь стоял за стойкой. Глаза горели жёлтым. В руках — свиток.
— Добро пожаловать в Архив. Какой патч вас интересует?
— Любой, — Опора положил руки на стойку. — Что за обновление сейчас активно?
Библиотекарь развернул свиток.
— Патч 4.2.1 для «Shadowrun: Hong Kong». Исправлен баг с мерцанием теней в миссии «Гонконгский гамбит».
— Это не та игра, — сказал Опора. — У нас «Aethelred».
— Патч 4.2.2 для «Shadowrun: Hong Kong». Исправлен баг с наложением текстур у торговца Вонга.
— Ты вообще слушаешь?
Библиотекарь поднял глаза. Жёлтые. Немигающие.
— Патч 4.2.3...
— Хватит! — Опора ударил по стойке. — Мне нужен Главный квест. Где?
НПС застыл. Из горла вырвался механический треск. Рука дёрнулась к полке. Схватила свиток. Протянула.
— Главный квест. Актуален. Ознакомьтесь.
Опора развернул свиток.
Текст: «Соберите три яблока в саду Имриль. Награда: опыт, 50 золотых. Время на выполнение: без ограничений».
Он моргнул.
Текст сменился: «Убейте дракона Фаргота. Награда: Меч Тысячи Истин. Время: 72 часа».
Снова моргнул.
«Принесите десять шкур волка трактирщику. Награда: 20 серебряных».
4— Оно меняется, — прошептал Опора. — Каждые...
— Тридцать секунд, — закончила Скрыт. Она стояла за его спиной. — Я засекла. Тридцать секунд. Ровно.
Текст снова сменился: «Найдите Разработчика».
Опора замер. Прочитал вслух:
— «Найдите Разработчика».
Глыба подошёл ближе.
— Это оно? Главный квест?
Скрыт склонилась над свитком. Пальцы пробежали по строкам.
— Смотрите. Текст меняется, но структура одна. «Сделайте X. Получите Y. Время Z». И каждые тридцать секунд. Как...
— Как будто кто-то дёргает ложкой, — закончила ДД.
Все посмотрели на неё.
— Что? — она пожала плечами. — Я тоже могу быть умной.
Текст сменился снова. Теперь по свитку бежали символы — бессмысленная абракадабра. Буквы перетекали друг в друга. Строки ломались.
— Это не случайный рандом, — сказала Скрыт. — Это шифр.
— Шифр? — Глыба скрестил руки. — И что там?
— Я не знаю. Но это не безумие. Это код.
Опора уже копировал символы в интерфейс. Пальцы летали.
— Если это шифр... — он осёкся.
Свиток в его руках вспыхнул. И превратился в пепел.
5— Эй! — ДД рванулась к полке. — Там ещё такие?
Библиотекарь покачал головой.
— Экземпляр удалён. Причина: нарушение политики конфиденциальности.
— Какой политики?! — взорвался Глыба. — Мы ничего не нарушали!
— Вы прочитали, — ответил НПС. — Чтение является нарушением.
И улыбнулся.
Впервые.
Медленной, резиновой улыбкой.
Скрыт схватила Опору за рукав.
— Уходим.
— Но...
— Уходим.
Они вышли на улицу. Солнце висело в зените. И не двигалось.
— Оно зависло, — констатировала ДД.
— Как и всё здесь, — кивнула Скрыт. — Кроме нас.
Глыба сел на край фонтана. Воды в нём не было — только сухой код на дне.
— Значит так. Главный квест — это рандомный генератор. Забиваем. Ищем консоль.
— Консоль заблокирована, — напомнил Опора. — С тех пор, как мы в Серверной.
— Тогда ищем того, кто её заблокировал.
— Разработчика, — тихо сказала Скрыт.
Все повернулись к ней.
Она стояла, прикрыв глаза. Пальцы касались воздуха — она что-то видела.
6— Свиток. Там было три слоя. Верхний — мусор. Средний — задания. А нижний...
— Что? — ДД подпрыгнула.
— Нижний слой — один и тот же текст. Он не менялся. Каждые тридцать секунд. «Найдите Разработчика». Всегда. Просто прятался под мусором.
Глыба встал.
— Значит, это и есть Главный квест. Тот, кто его создал. Тот, кто ломает игру. Один и тот же.
— Разработчик, — кивнула Скрыт. — Он где-то здесь. В этом мире. И он специально всё это делает. Каждого НПС. Каждый баг. Это не ошибка. Это саботаж.
Опора переглянулся с ДД.
— Саботаж изнутри, — сказал он. — Кто-то ломает игру, чтобы...
— Чтобы никто не вышел, — закончил Глыба. — Вечный ран. Это его работа.
Тишина.
Потом скрип. Где-то сбоку. Медленный, размеренный.
Скрыт обернулась первой.
У стены таверны стоял человек. Серый костюм без складок. Лицо — размытое. Не как текстура низкого разрешения. Хуже. Как будто кто-то стёр детали ластиком.
— Поверенный, — выдохнула ДД.
НПС не двигался. Просто стоял. И смотрел.
Глыба шагнул вперёд.
7— Ты следишь за нами?
Молчание.
— Отвечай.
Поверенный поднял руку. В пальцах — свиток. Точно такой же, какой сгорел в Библиотеке.
— Главный квест обновлён, — произнёс он без интонации. — Время выполнения: тридцать секунд.
— Что за бред? — Опора сделал шаг к нему. — Какой квест мы не взяли...
— Вы прочитали.
Свиток в руке Поверенного замерцал.
— Чтение является нарушением. Наказание: аннулирование контракта.
— Но мы его не подписывали! — крикнул Глыба.
— Вы здесь. Этого достаточно.
Поверенный развернул свиток. Текст горел красным: «Вечный ран. Статус: активен. Квест: Найти Разработчика. Время: бесконечно».
— Но вы же только что... — начал Опора.
— Система обновляет условия. Каждые тридцать секунд.
Скрыт схватила Глыбу за плечо.
— Он не враг. Он такой же заложник. Видите?
Она указала на руку Поверенного. Та дрожала. Едва заметно. Но дрожала.
— Он не может не выполнять протокол. Как трактирщик. Как алхимик. Как все.
Поверенный опустил руку. Свиток исчез.
— Вы правы, — сказал он. — Я исполняю. Я не решаю.
8И сделал шаг назад.
В стену.
И исчез.
Глыба выдохнул.
— Что за...
— Он ушёл в серверную, — перебила Скрыт. — Как мы тогда. Через зеркало. Помните?
Опора кивнул. Пальцы снова забегали по воздуху.
— Я записал лог. Он сказал «я не решаю». Это ключ.
— К чему? — ДД покрутила в пальцах склянку. Зелье булькнуло.
— К тому, кто решает. Разработчик. Он где-то есть. И его можно найти.
Скрыт указала на мостовую. Там, под ногами, снова ползли строки кода. Они складывались в узор. Стрелки. Все в одну сторону.
— Это путь. Скрытый под багами. Кто-то оставил.
Глыба перехватил щит.
— Тогда идём.
— Ага, — ДД подбросила склянку. — Только сначала я опробую зелье невидимости.
— У тебя нет невидимости.
— Будет.
Она открутила пробку. Зелье зашипело. Из горлышка повалил розовый дым.
Глыба закашлялся.
— ДД!
— А что? — дым окутал её с головой. — Я уже невидима?
Скрыт вздохнула.
— Ты розовая. И светишься в ультрафиолете.
— Круто!
— Это баг.
— Ещё круче!
9Опора махнул рукой.
— Идём. Пока весь город не превратился в алхимика.
Они двинулись по стрелкам. Мимо трактирщика, который всё ещё кивал. Мимо стражника, который всё ещё шагал сквозь стену. Мимо алхимика, чья ложка всё ещё дёргалась.
Город замирал.
А стрелки вели вниз. В подвал. В темноту.
Где кто-то ждал.
И писал патчи.
Темнота пахла сыростью и старым кодом.
— Похоже на серую зону, только глубже, — тихо сказала Скрыт.
Глыба спускался первым. Его наплечники скребли по каменным стенам, высекая синие искры — текстуры здесь были наложены в три слоя, и каждый из них пытался перекрыть соседний.
— Кто-то очень не любит это место, — буркнул он.
Опора чиркнул пальцем по воздуху. Логарифмическая линейка выскочила из-за пояса сама — баг инвентаря, который он уже перестал фиксить.
— Глубина залегания кода — четыре метра под уровнем спавна, — сообщил он. — Это ниже, чем предусмотрено движком.
— Значит, не предусмотрено, — сказала Скрыт.
10Она двигалась последней. Плащ растворял её в тенях, оставляя только контур — размытый, как лицо Поверенного. ДД шагала следом за Глыбой и каждые три ступеньки подбрасывала новую склянку. Розовый дым ещё не выветрился, и она светилась, как неоновая вывеска над трактиром.
— Я как маяк, — сообщила она.
— Ты как баг на колёсиках, — отозвался Глыба.
— Ой, да ладно! Зато сразу видно, где свои.
— Мы в подземелье, ДД. Тут нет чужих.
— Значит, я просто красивая.
Ступеньки кончились. Глыба шагнул вниз — и замер.
Подвал был бесконечным.
В прямом смысле. Стены уходили в бесконечность в обе стороны. Потолок терялся где-то наверху, а пола не было — только строки кода, которые ползли под ногами, создавая иллюзию твёрдости. И в центре всего этого сидел человек.
Он сидел за столом. Обычным деревянным столом, единственным предметом с нормальными текстурами. На столе стояла чернильница. В чернильнице плескался жидкий код. Человек макал в него перо и писал на длинной полосе пергамента.
— Библиотекарь, — тихо сказала Скрыт. — Мы его уже видели.
11Человек поднял голову. Лицо было человеческим. Почти. Слишком симметричным. Слишком неподвижным. Глаза смотрели сквозь них — как у трактирщика, как у стражника, как у всех.
— Добро пожаловать в библиотеку, — произнёс он.
Голос звучал плоско. Без интонации. Без пауз между словами.
— Я искатель знаний. Чем могу помочь?
Опора шагнул вперёд.
— Нам нужен Разработчик.
Библиотекарь моргнул. Медленно. Слишком медленно — веки двигались рывками, как плохо анимированный спрайт.
— Запрос не распознан. Предлагаю ознакомиться с последними патчами.
Он протянул пергамент. Опора взял. Пробежал глазами.
— Тут написано... «Патч 7.2.1 для Galactic Farmer: теперь помидоры не квадратные».
— Это не наша игра.
— Я знаю.
Глыба перехватил щит.
— Спроси ещё раз.
Опора откашлялся.
— Где Разработчик?
Библиотекарь моргнул ещё медленнее.
— Запрос не распознан. Предлагаю ознакомиться с последними патчами.
И снова протянул пергамент. Тот же самый. Слово в слово.
— У него ответы зациклены, — сказала Скрыт. — Как у трактирщика с «Добро пожаловать».
12— Тогда ломаем, — ДД выхватила из пояса новую склянку. — У меня есть зелье взлома речевых паттернов!
— Такого нет в инвентаре, — начал Опора.
— Теперь есть! Я его сварила!
Она швырнула склянку в Библиотекаря. Стекло разбилось о стол. Жидкость растеклась по пергаменту — и строки кода на нём замерцали. Задёргались. И начали перестраиваться.
Библиотекарь замер с открытым ртом.
— Ошибка. Ошибка, — заговорил он. — Ошибка в секторе семь. Недопустимое вмешательство. Протокол нарушен.
— Зато ты заговорил, — хмыкнула ДД.
— Протокол нарушен. Требуется перезагрузка. Требуется...
Он осёкся. Глаза сфокусировались — впервые с начала разговора.
— Вы те самые, — сказал он.
— Какие? — спросил Глыба.
— С пометкой «Вечный ран». Четверо пользователей с бесконечным таймером. Я читал про вас в логах.
— Ты умеешь читать логи? — Опора подался вперёд.
— Я их храню, — ответил Библиотекарь. — Весь город — библиотека. А я — её каталог.
Он встал из-за стола. Движения стали плавнее. Как будто с него сняли ограничение анимации.
13— Вы пришли искать Разработчика. Но его здесь нет.
— Где он? — спросил Глыба.
— В главном квесте, — ответил Библиотекарь. — Которого нет.
Он указал на пергамент. Тот всё ещё дёргался, перебирая строки. Сменялись патчи. Сменялись игры. Мелькали названия: Galactic Farmer, Medieval Tycoon, Space Heist. И сквозь них — один и тот же текст. На секунду. На полсекунды.
«Главный квест: Найдите Разработчика».
— Почему он исчезает? — спросила Скрыт.
— Потому что так написано в сценарии, — ответил Библиотекарь. — Каждые тридцать секунд он обновляется. Каждые тридцать секунд появляется новый квест. И каждый раз — на секунду — про Разработчика.
— Кто пишет сценарий?
Библиотекарь молчал.
— Кто?
Он поднял руку. Медленно. И показал пальцем наверх.
— Система.
— Тогда почему она прячет «Найти Разработчика» под чужими патчами? — спросил Опора. — Если это главный квест — зачем его стирать?
— Потому что его нельзя выполнить, — ответил Библиотекарь. — Разработчик покинул Систему. Он оставил код без присмотра. А Система не может существовать без цели.
14Скрыт шагнула ближе к столу. Вгляделась в строки.
— Он не покинул, — сказала она. — Он спрятался.
— Почему ты так думаешь?
— Потому что баги не хаотичны, — ответила Скрыт. — Они подчиняются алгоритму. Кто-то специально ломает игру.
Библиотекарь опустил руку.
— Это не баги. Это патчи. Система пытается починить то, что сломал Разработчик. А ломает он всё, что Система чинит.
Глыба выругался.
— То есть они играют в кошки-мышки. А мы застряли между ними.
— Вы застряли в главном квесте, — поправил Библиотекарь. — Которого нет. Но который есть. На секунду.
Он протянул пергамент Опоре.
— Возьмите. Там всё.
Опора взял. Текст снова сменился. Galactic Farmer. Medieval Tycoon. Space Heist. И снова:
«Главный квест: Найдите Разработчика».
— Мы не успеем прочитать, — сказал Опора.
— Успеете, — ответил Библиотекарь. — Если замедлите время.
Он указал на ДД.
— У неё есть зелье.
ДД замерла.
— Откуда ты...
15— Я каталог, — перебил Библиотекарь. — Я помню всё, что попадает в библиотеку. Зелье «Стазис-бомба» лежит у тебя в поясе с того момента, как ты украла его у алхимика.
— Я не крала! Я одолжила!
— Алхимик не давал согласия.
— Он вообще не давал ничего! Он завис!
— Это неважно, — перебил Опора. — Ты сказал «Стазис-бомба»?
Библиотекарь кивнул.
— Она замедляет время для всех объектов в радиусе действия. Кроме того, кто её активирует.
— А радиус?
— Весь подвал.
Глыба перехватил щит.
— Так. Кидай.
— Что, прямо сейчас? — ДД вытащила склянку. — А если не сработает?
— Тогда мы просто взорвёмся, — сказал Опора. — Но перед этим успеем прочитать квест.
— Веская причина.
— Бросай.
ДД размахнулась. И метнула склянку в центр бесконечности.
Та упала. Разбилась. И время застыло.
Строки кода остановились. Библиотекарь замер с поднятой рукой. Опора застыл, не успев договорить фразу. Глыба замер с открытым ртом. И только ДД двигалась. Она наклонилась над пергаментом.
«Главный квест: Найдите Разработчика».
16— Я прочитала! — крикнула она в пустоту.
— Молодец, — ответил Опора. — Теперь запомни.
— Я не запоминаю! У меня память как у голубя!
— Тогда перепиши!
ДД выхватила пергамент. Строки ещё держались. Она достала уголёк из пояса — тот самый, которым Опора чертил формулы в первый день, — и быстро нацарапала на обратной стороне:
«Найдите Разработчика. Квест. Настоящий.»
И тут время пошло.
С грохотом. С воем сирены. С красной строкой в воздухе:
«ВНИМАНИЕ. ОБНАРУЖЕНА ПОПЫТКА ДОСТУПА К ФАЙЛАМ ЯДРА. ПРИМЕНЯЕТСЯ ПАТЧ 9.0.0.»
Библиотекарь дёрнулся и начал рассыпаться. Буквально. Его тело распадалось на пиксели, как разбитое зеркало.
— Уходите! — крикнул он. — Патч стирает всё, что не входит в основной билд!
— А ты? — крикнула Скрыт.
— Я войду! Я войду в новый билд! В следующем патче! Я всегда вхожу!
Он исчез.
А вместе с ним — стол, чернильница, бесконечность стен.
Подвал схлопнулся.
17И они оказались на поверхности. На той же мостовой. На том же месте. Только стрелок больше не было. И трактирщик больше не кивал — он стоял с открытым ртом, и из него выходил код. Как дым. Как пар. Как дыхание Системы.
— Город пересобирается, — сказал Опора.
— Плевать, — ответил Глыба. — У нас есть квест.
— У нас есть кусок угля и надпись «Найдите Разработчика», — поправила ДД. — Разница небольшая.
— Главное — мы знаем, что он есть, — сказала Скрыт. — И знаем, что Система прячет его.
Она обернулась. На краю улицы стоял человек в сером костюме. Лицо размыто. Но рука больше не дрожала. Он смотрел на них. И ждал.
— Поверенный, — сказал Глыба.
— Он не нападает, — заметил Опора.
— Он наблюдает.
— Зачем?
Скрыт шагнула вперёд.
— Потому что он тоже хочет найти Разработчика, — сказала она. — И мы — его единственный шанс.
Поверенный кивнул. Едва заметно. И исчез.
18А город вокруг начал загружаться заново. Строка за строкой. Патч за патчем. И где-то в глубине кода, под слоями чужих игр и бесконечных правок, прятался тот, кто всё это начал.
19