Багнутый герой
Глава 1. Класс, которого не существует
Макс никогда не считал себя избранным. Но в одном он был уверен: если где-то существует кнопка «сломать», он найдёт её первым. В школе он умудрялся зависнуть в электронном дневнике, просто меняя тему оформления. В институте он обрушил сервер кафедры, решив проверить, выдержит ли сайт 9999 открытых вкладок. Даже в холодильнике однажды умудрился «поймать баг»: дверца заклинила так, что открывалась только от удара пяткой.
Так что, когда ему попалась новая VRMMORPG ChronoFall: Legacy, рекламируемая как «самый честный фэнтези-симулятор», он лишь усмехнулся. — Честность? Ну-ну. Сейчас посмотрим, где тут враньё.
Он надел шлем, откинулся в кресле. Лёгкий укол за ухом — нейроинтерфейс подцепился к нервной системе. Мир перед глазами мигнул, и началась загрузка.
Гулкие колокола, переливы света, пафосная надпись:
Добро пожаловать в ChronoFall: Legacy!
— Хм. Красиво, конечно… но слишком гладко. А где шероховатости? — пробормотал Макс, крутя глазами.
Перед ним возникло меню выбора класса. Иконки плавали в воздухе: «Воин», «Маг», «Лучник», «Паладин»… стандартный зоопарк. Макс лениво провёл рукой мимо них, ожидая подвоха. И подвох не заставил себя ждать.
Среди идеально выстроенных значков обнаружился один лишний. Серый квадрат без рисунка. Никакого описания. Просто пустота.
— О, привет, родной, — ухмыльнулся он. — Ты точно не по плану.
Курсор словно прилип к этому квадратику. Экран дёрнулся, и перед глазами всплыло системное сообщение:
Вы выбрали класс: [Инвентарщик].
Макс моргнул. — Что за чушь?
Характеристики:
Класс: Инвентарщик (Ошибка 404)
Навык 1: ВытянутьПредмет()
Навык 2: СломатьИнтерфейс()
Пассивка: Бессмысленный(???)
Он вслух рассмеялся. — Господи, да я официально баг.
Следующее окошко:
Внимание! Данный класс не должен существовать. Сообщите разработчикам. [Игнорировать] [Принять]
— Ну конечно, — хмыкнул он и ткнул «Игнорировать». — Сообщу я им, как же.
Вокруг развернулся мир. Лес, залитый солнечным светом. Пение птиц. Трава колыхалась так реалистично, что он даже наклонился, чтобы потрогать её пальцами. Система честно отрендерила каждую жилку на листке.
— Красиво. Но идеальная картинка всегда прячет баги. Вон они, по углам, уже машут, — пробормотал Макс.
Он вызвал инвентарь. Прозрачное окно с ячейками зависло перед глазами. — Так, а что у нас тут? Палки, камни, стандартная стартовая ерунда…
Из любопытства он попробовал потянуть один из предметов рукой. И… вытянул.
Прямо в ладони материализовался кусок интерфейса. Не камень, не палка — а самая настоящая квадратная иконка. Полупрозрачная, мерцающая.
— Ха! — Макс сжал её пальцами. — Вот это номер.
Он машинально кинул её в сторону. Иконка ударилась о ближайший куст. Куст исчез. Просто растворился, оставив после себя серую текстуру «пустоты».
На экране мигнуло уведомление:
Ошибка среды. Восстановление объекта через 15 секунд.
Через миг куст снова появился, но уже чуть кривой, со странно загнутыми ветками.
— Вот оно, — пробормотал Макс, и в голосе прозвучал азарт. — Вот ради этого мы и играем.
Он попробовал вытащить из инвентаря другую иконку. На этот раз получилось нечто вроде полупрозрачного квадрата с надписью «Настройки». — Ого… да я теперь системный админ.
Он ткнул этим квадратом в землю. И земля под ногами исчезла.
Макс взвыл и провалился вниз — в тёмную пустоту, где текли цифры и строчки кода.
Загрузка зоны… Ошибка 503.
— Э-э-эй! Я только начал! — закричал он, но голос прозвучал гулко, как будто в огромном серверном зале.
Перед глазами мелькали строки:
[Внимание! Игрок вышел за пределы карты.] [Запуск аварийной локации: Свалка Ошибок.]
Мир снова сложился, и Макс с грохотом рухнул в кучу… мусора. Но это был не мусор в привычном смысле. Вокруг валялись полуразрушенные модели: полуконя-полустены, оружие без текстур, головы NPC с зависшими улыбками.
— Мама дорогая… — прошептал он. — Вот это стартовая зона!
Вдруг из кучи вывалился NPC-рыцарь. У него вместо руки торчал меч, а шлем был повернут на 180 градусов. Он поднял голову и прохрипел:
— /Квест/Начало_игры(не найден)…
Макс уставился на него. — Кажется, у меня теперь самый весёлый туториал в истории.
Макс оглянулся. Всё вокруг напоминало кошмарный сон разработчика: искорёженные объекты, зависшие текстуры, части моделей, слипшиеся в уродливые конструкции. Трава внезапно переходила в камень, камень в воду, вода в обрыв. В воздухе плавали обрывки надписей: [НАЗВАНИЕ_ЛОКАЦИИ_ЗДЕСЬ] [КвестовыйПредмет_001] TODO: заменить на нормальный диалог
— О да, — протянул Макс. — Тут пахнет домом.
NPC-рыцарь, у которого вместо руки торчал меч, продолжал глючить: — Н-н… найд…и…вставка квеста отсутствует… герой… — потом вдруг замолчал, и из его груди вырвался жуткий системный писк.
Макс машинально отошёл назад и тут заметил: у его персонажа нет интерфейса здоровья. Панель ХП просто отсутствовала. Вместо неё в углу мигало сообщение:
[Ошибка HUD. Попробуйте перезапустить клиента.]
— Отлично, — хмыкнул он. — Убить меня нельзя. Я бессмертен. Ну, наверное. Или умру так, что выкинет на рабочий стол.
Свалка зашевелилась. Из мусора начали подниматься фигуры. Сначала он подумал, что это куча моделей слиплась, но нет — они двигались слишком слаженно. Это были глитч-монстры.
Один выглядел как трёхногий волк, но его голова была повернута внутрь тела. Другой — человек, у которого вместо лица пустой белый квадрат с надписью [TEXTURE NOT FOUND]. Третий вообще полз на руках, хотя у него были ноги, просто приклеенные не туда.
— Прекрасно, — сказал Макс, пятясь назад. — Только этого и не хватало: привет из альфа-теста.
Волк-глитч заскулил и дёрнулся, а потом рванул вперёд.
Макс инстинктивно вызвал инвентарь. Перед глазами появилось окно с ячейками. Руки сами схватили первую попавшуюся иконку. — Так, что тут у нас?..
Он вытащил в реальность надпись [Настройки графики]. И, не думая, швырнул её в монстра.
Иконка впечаталась в голову волка. Мир мигнул, и всё вокруг на секунду превратилось в кашу из пикселей. Когда картинка вернулась, у волка вместо головы было облако чёрных квадратиков. Тот завыл и рассыпался прямо на глазах.
Макс ошарашенно рассмеялся: — Да это ж читерство чистой воды!
Второй монстр — с квадратом вместо лица — завыл и бросился на него. Макс снова сунул руку в инвентарь и наугад дёрнул ещё одну иконку. На этот раз в ладони оказался [Сохранить и выйти].
— Ох… а если сработает, меня выкинет к чёрту. Ладно, проверим!
Он ткнул иконкой в чудовище. Тот замер, будто его зафризили, и исчез, оставив после себя только текстовую надпись: [Файл удалён].
— АХАХАХА! — Макс согнулся пополам. — Да я же ходячая бета-версия!
Оставшийся уродец попятился и затрясся, а потом… заговорил. — Иг…рок… опасн…ый… его… удалить… нельзя.
Макс нахмурился. — Эй, вы что, реально понимаете, что происходит?
Существо дёрнулось, голова выгнулась под невозможным углом, и оно издало уже не системный звук, а человеческий: — Он… ломает нас… значит… он один из нас.
Прежде чем Макс успел спросить, что это значит, монстр рухнул и распался на десятки мерцающих обрывков кода.
Он остался один среди хаоса Свалки Ошибок.
В голове зазвенел системный звон. [Новый квест: ???] Описание: вы не должны существовать. Но раз существуете — докажите, что этот мир обязан признать вас. Награда: неизвестна. Штраф: неизвестен.
Макс медленно улыбнулся. — Ну здравствуй, багнутый мир. Давай посмотрим, кто кого.
Макс шагнул по скрипящей поверхности Свалки Ошибок. Под ногой то и дело попадались странные обломки: половина деревянного щита с текстурой воды, камень, на котором было написано «Тут могла быть ваша реклама», свёрнутый в рулон кусок дороги, который тихо шипел, будто змея.
— Если меня сейчас кто-то видит со стороны, он решит, что я с ума сошёл, — пробормотал он. — Но если тут есть баги, значит, есть и эксплойты. А эксплойты — это сила.
Он вызвал инвентарь. Внутри было что-то новое: — Хм? Это что ещё?
В ячейке мигала иконка [Фрагмент глитча]. Описание: «Память об удалённом объекте. Использовать нельзя».
— Ну конечно, — ухмыльнулся Макс. — Всё, что нельзя использовать, всегда самое полезное.
Он потянул и вытащил фрагмент в реальность. Это был сгусток пикселей, мерцающий всеми цветами. Макс машинально сжал его в кулаке. В тот же миг экран дёрнулся, и он увидел несколько окон сразу: какие-то чужие профили, обрывки переписок между разработчиками, строчки кода.
«— Опять кто-то провалился в Свалку? — Невозможно, мы закрыли доступ. — Тогда кто это?..»
Макс моргнул. — Ого… то есть я не просто игрок. Я ещё и в чатик админов могу заглядывать?
Он хотел рассмеяться, но в тот момент Свалка издала низкий гул. Земля под ногами пошла рябью, и издалека донеслось гулкое: — Ошибка… ошибка… устранить…
С горизонта выползло нечто гигантское. Огромный многогранник, составленный из кубов и треугольников, вращался, меняя форму. Каждый раз, когда он складывался, появлялись новые надписи: [Фатальная ошибка системы] [Нарушение целостности мира]
— Ой-ой, — Макс сделал шаг назад. — Кажется, за мной прислали мусорщика.
Существо издало металлический скрежет и послало в его сторону луч света. Макс еле успел пригнуться: всё, что луч коснулся, тут же исчезло. Даже воздух — перед глазами на секунду открылось чёрное пустое окно, как дыра в реальности.
— Да вы шутите… у меня первый моб в игре — антивирус?!
Он дёрнул из инвентаря случайную иконку. На ладони оказался [Настройки управления]. Макс заорал и бросил прямо в луч.
Мир дёрнулся, и антивирус застыл, дёргаясь. Его тело начало крутиться, меняя форму хаотично. Вдруг он затрясся и издал странный звук: не электронный, а почти человеческий крик.
В голове Макса загорелась надпись: [Предмет применён некорректно. Объект сбойнул.]
— Ну, другого я и не ожидал, — выдохнул он.
Антивирус ещё пару секунд дёргался, а потом разлетелся на сотни маленьких осколков кода, которые медленно растворились в воздухе.
Тишина снова вернулась. Только ветер шевелил обрывки мусора.
Макс вытер пот, хотя понимал, что это игра и настоящего пота быть не может. — Так… ладно. Раз уж я могу ломать саму систему, то значит… я здесь не случайно.
Он двинулся вперёд. И вскоре заметил свет. Вдали, среди хаоса битых моделей, сияла арка из глюкавых полигонов. Над ней висела надпись: [Выход: ???]
— Ну, выбора у меня немного, — сказал Макс и шагнул к ней.
Чем ближе он подходил, тем сильнее ощущал странное давление. Будто сама игра понимала, что он не должен существовать. Перед самым порталом появилось сообщение:
[Вы пытаетесь покинуть Свалку Ошибок. Подтвердите аномальный статус.] [Принять] [Удалить]
Макс усмехнулся. — Удалить меня? Ну уж нет.
Он ткнул «Принять».
Мир взорвался светом.
На секунду он оказался между строками кода. Огромные буквы, как руны, летели мимо него: «if», «else», «while». В этих символах было что-то древнее, как будто это не язык программистов, а заклинания богов.
И среди них — тени. Силуэты, похожие на людей, но искажённые, будто нарисованные на старом экране. Они смотрели на него. И шептали:
— Ты… наш… — Ошибка… или чудо?.. — Мы — баги, но мы — жизнь…
Макс едва успел выдохнуть: — Да чтоб меня…
И провалился в новый мир.
Он очнулся на поляне. Лес был нормальный: зелёный, ровный, без провалов текстур. Где-то журчал ручей. Солнце светило.
И тут же появилось системное уведомление:
[Новая способность: «Сломать интерфейс» активна.] [Пассивка обновлена: «Бессмысленный(???)» → «Бессмертный(?)»] [Класс: Инвентарщик официально зарегистрирован.]
Макс уставился на окно. — О… а вот теперь игра началась.
Он поднялся, стряхнул траву с одежды и усмехнулся. — Ну что, багнутый герой, добро пожаловать в сказку.
Макс ударился плечом о землю и перекатился, выдыхая сквозь зубы. Мир вокруг застыл — не в смысле бага, а в буквальном: густой лес, вечерний свет пробивался сквозь ветви, запах хвои и сырой земли. Ни тебе бесконечных пиксельных текстур, ни зависающих в воздухе полигональных кубов. Казалось, он наконец попал в настоящий мир.
— Лес? — он приподнялся, глядя вокруг. — Я же выбирал старт в городе.
Система молчала. Экран интерфейса мигнул:
[Добро пожаловать в Этернетум!] Класс: Инвентарщик Уровень: 1 HP: 100/100 Стамина: 80/80
И всё. Ни квеста, ни приветственного НПС. Даже стандартного «Поговори с деревенским старостой».
— Класс, — Макс хлопнул по траве ладонью. — Супер. Я багнулся не только на Свалке Ошибок, теперь ещё и без стартового гайда. Отличный релиз, браво.
Он открыл меню инвентаря. Внутри — стандартный набор новичка: рваный плащ, деревянный нож, сухарь и… что-то странное.
[Ошибка: Неопознанный предмет] Описание: ??? Вес: 0 Цена: —
— Так, так, так, — Макс прищурился. — Снова «подарочки» от багнутого билда?
Он попытался достать предмет. Мир дернулся, и у него в руках возник… полупрозрачный куб. Внутри куба плавали пиксельные обрывки кода, словно кто-то уронил в стеклянный аквариум куски интерфейса.
— Ха! — Макс рассмеялся. — Я теперь не игрок, я ходячий GitHub. Интересно, что будет, если этим кинуть?
Он замахнулся, швырнул куб в ближайшее дерево — и то вдруг начало искажаться. Кора потемнела, линии ветвей поплыли, будто кто-то склеивал текстуры наспех. В воздухе всплыло сообщение:
[Вы использовали: Фрагмент Кода] Эффект: Баг-мутация. Дерево стало Неправильным Деревом.]
Дерево издало звук, будто из старого модема, и его ветви начали шевелиться.
— Опа… — Макс попятился. — Может, я всё-таки зря кинул.
Но «Неправильное дерево» неожиданно вытянуло ветви и образовало под ним проход — как портал. Там, за ветвями, мерцал свет костра.
— Либо это сюжет, либо меня сейчас съедят, — пробормотал он. — Но выбора-то всё равно нет.
Он шагнул вперёд.
Внутри оказался не костёр, а настоящая деревня. Низкие избы, дым из труб, огороды с багнутыми текстурами моркови (каждая вторая морковка была квадратной). И люди. Точнее, NPC.
Они работали вяло, будто кто-то урезал их анимации до двух кадров. Один старик повторял одно и то же движение мотыгой, а рядом женщина топтала капусту, хотя никакой капусты под ногами не было.
Макс осторожно подошёл ближе.
— Эй! — крикнул он. — Кто тут главный?
Все NPC синхронно повернули головы. Их глаза были слишком живыми, как будто за ними кто-то наблюдал. Старик шагнул вперёд.
— Добро пожаловать, чужак. Мы ждали того, кто придёт сквозь Неправильное дерево.
— Ого, сюжетка включилась, — пробормотал Макс. — А я думал, что буду тут как дурак бродить.
Старик кивнул и продолжил:
— Ты несёшь на себе метку багов. Мы чувствуем её. У тебя — ключ.
Макс напрягся. — Какой ещё ключ? Я вообще-то просто игрок!
Экран интерфейса вспыхнул:
[Скрытая особенность класса "Инвентарщик" открыта!] Навык: Хранение Багов Вы можете собирать обрывки кода и использовать их как оружие или инструменты. Чем больше багов, тем сильнее ваша сила… и тем ближе хаос.
— Офигеть, — выдохнул Макс. — Я — багнутый покемон-тренер.
NPC-старик внимательно смотрел на него, словно слышал каждое слово.
— Осторожнее, чужак. Этот дар проклят. Хаос забирает тех, кто играет с кодом.
Макс усмехнулся. — Ну, хаос, так хаос. Главное, чтоб с экспой не обманули.
Вдалеке загремел рог. NPC замерли.
— Орда идёт, — сказал старик. — Испытай свой дар. Или погибни с нами.
Макс обернулся. Из леса вываливались существа, похожие на глючных волков. Их тела мерцали, как недозагруженные модели.
Интерфейс выдал:
[Квест: Первая оборона] Цель: Защитите деревню от баг-волков. Награда: +1 уровень.
Макс сжал в руках новый куб — фрагмент кода.
— Ну что, дебют, — сказал он и шагнул вперёд. — Сценаристы, надеюсь, вы на это смотрите.
Макс сжал зубы. Волки вываливались из леса десятками. Не «правильные», а рваные, с обрывками кода вместо шерсти, с пустыми белыми глазами, мигающими, как лампы в подъезде.
— Ну что, багнутые шавки, — сказал он, поднимая куб, — добро пожаловать в цирк урезанных текстур.
Первый волк прыгнул. Макс вскинул руку — куб треснул в ладони и рассыпался в рой символов. Символы облепили зверя, и тот замер в воздухе, завис, словно кадр на паузе. Через секунду его тело распалось, как будто кто-то стёр модель в редакторе.
[Вы использовали баг-код: «Фриз-кадр»] Эффект: Враг удалён.
Макс моргнул. — Вот это я понимаю — мод на бессмертие.
Но дальше всё пошло сложнее. Второй волк не замер, а наоборот, раздвоился: один оригинал и три глючных фантома. Они окружили его, клацая зубами.
— Так, так, так… если баги порождают баги, то мне придётся…
Он рванул инвентарь, выхватил деревянный нож и сунул туда же куб с ошибкой. Интерфейс пискнул:
[Соединение предметов… Ошибка.] Результат: Глючный нож.]
Оружие засияло красными пикселями, и Макс ударил ближайшего фантома. Фантом рассыпался, но на его месте возникло сообщение:
[Системное предупреждение: Нарушение баланса.]
— Нарушение баланса? — Макс усмехнулся. — Да вы только ради этого меня и наняли.
Он прыгнул вперёд, крутанул ножом, и ещё два волка рассыпались, оставив на земле куски кода, похожие на тлеющие угли.
Тем временем жители деревни тоже ожили. Старуха с мотыгой начала бить по фантомам, мужик с пустыми глазами запустил камнем, а дети — дети?! — достали палки и начали гнать зверей, как кур. Но всё это выглядело, как будто их анимации кто-то записал с ошибкой: движения дёрганые, неестественные.
Макс подхватил ещё один куб. На этот раз он просто кинул его на землю. Куб развернулся в щит из букв и цифр. Волк ударился в него, застрял в ряде «ERROR», и разлетелся на части.
[Новый баг сохранён в Инвентарь!] Навык: ERROR-щит]
— Отлично, — Макс усмехнулся. — Ещё немного, и я буду коллекционировать ошибки, как покемонов.
Он огляделся. Последний волк, самый крупный, стоял на опушке. Его тело искажалось, как поломанный GIF. В его пасти сверкало что-то, похожее на фрагмент портала.
Макс прищурился. — А вот и босик.
Он шагнул вперёд, сжал глючный нож и на секунду задумался. В играх он всегда был тестировщиком, баги ловил ради отчётов. Теперь он ловит баги, чтобы остаться живым.
— Ну что, — сказал он, — добро пожаловать в мой баг-репорт.
Бой был быстрым, хаотичным. Волк прыгал то слева, то справа, исчезал и появлялся. Макс едва успевал реагировать, подхватывая новые кубы багов. Один дал ему возможность ускориться — как будто он играл на перемотке. Другой — сделал его руку прозрачной, и нож прошёл сквозь тело монстра, вырвав кусок кода.
Наконец, волк замер, задергался, как видеоролик с плохим интернетом, и рассыпался на пиксельную пыль.
[Квест завершён: Первая оборона] Награда: +1 уровень Получен предмет: Фрагмент Портала
Макс тяжело дышал. В руках у него мерцал осколок.
— Ну привет, сюжет, — сказал он.
NPC собрались вокруг. Старик кивнул.
— Ты доказал, что метка хаоса не просто проклятье. Это — оружие. Но с оружием приходит цена.
Макс усмехнулся. — Цена? Да я и так на распродаже живу.
Экран интерфейса мигнул:
[Уровень 2 достигнут.] Доступно: новое умение «Слияние багов».]
Он ещё раз посмотрел на осколок портала, который пульсировал в его руке, как сердце.
И в этот момент он понял: его приключение только начинается.
Глава 2. Осколок, который дышит
Макс сидел на обгоревшем пне и вертел в руках осколок портала. Тот был похож на кусок стекла, только внутри плавали строки кода, меняя форму, как рыбы в аквариуме. Время от времени осколок издавал тихий звон — не звук даже, а скорее ощущение, будто кто-то поиграл на струне прямо в его груди.
— И что мне с тобой делать, а? — пробормотал он. — В слот для шлема не влезешь, в карман не сунешь, а если съесть, наверняка будет та ещё изжога.
Он попытался открыть инвентарь. Интерфейс мигнул, и осколок словно сам скользнул внутрь, заняв отдельную вкладку с названием:
[Фрагменты. 1/??]
Макс свистнул. — Ну всё, паззлы начались. Значит, таких кусочков будет много.
Деревня шумела за спиной. NPC снова разыгрывали свои заскриптованные сцены: дети носились по улице, старуха варила что-то в котле, мужик чинил крышу. Но теперь он видел — всё это не настоящее. Каждое движение рвалось на пиксели, иногда рука проходила сквозь объект, а смех звучал, как заевшая аудиодорожка.
Макс встал, потянулся. — Ладно, деревня-театр, спасибо за баг-балет. Мне дальше.
Когда он двинулся к лесу, старик — тот самый, что говорил о метке хаоса, — вдруг загородил дорогу. Его глаза сверкнули странным светом.
— Ты думаешь, можешь уйти? — сказал он. Голос дрожал, будто транслировался через плохую связь. — Хаос уже выбрал тебя. Осколки не отпустят.
Макс прищурился. — Слушай, дед, если ты хочешь превратить это в хоррор, то хотя бы дай мне саундтрек поэпичнее.
Старик протянул руку, и на его ладони вспыхнула иконка… та самая, которую Макс вчера выкинул в кусты. Интерфейс?!
— Эй-эй-эй, полегче! Это вообще-то мой мусор, — сказал Макс.
Но было поздно. Иконка вспыхнула красным, и старик исчез, как будто его перезаписали. На земле осталась только тень и короткое сообщение:
[Системная ошибка: NPC не найден.]
Макс нахмурился. — Ну класс. Значит, теперь я не только багнутый герой, но и багнутый убийца NPC. Отличное резюме.
Он двинулся в лес. Воздух был свежим, но с каждой минутой становился тяжелее. Деревья вокруг меняли форму: стволы растягивались, ветви складывались в непонятные знаки, похожие на буквы, которые он не знал. Иногда трава превращалась в строки кода, а потом обратно — и оставляла послевкусие, как будто мир был не реальностью, а плохо сжатым видеофайлом.
Макс шагнул на тропинку и вздохнул: — Если дальше будет так же весело, то мне нужен напарник. Или хотя бы дебаггер.
И в этот момент он услышал за спиной шаги.
Макс шел по узкой тропе между высоких, будто скопированных из одного шаблона, деревьев. Листья мелькали странно — неестественно синхронно, словно одна и та же анимация запускалась в петле.
— Красота, мать её, — пробормотал он. — А если присмотреться — дешёвый ассет.
Он ткнул пальцем в текстуру ствола. Дерево ответило нелепым багом: кора дернулась, на миг превратилась в серый квадрат с надписью missing texture, и тут же вернулась в привычный вид.
— Ну вот, — Макс усмехнулся. — Добро пожаловать в Этернетум, мир магии и грёбаных глюков.
И тут он услышал шорох.
Сначала — как будто ветка сломалась. Потом — тихое эхо шагов. Макс замер, прикидывая, баг ли это или реальная угроза. На миникарте пусто. Но из-за тумана впереди начали проступать очертания фигуры.
Девушка.
Белые волосы, странно светящиеся изнутри. Лицо — слишком правильное, будто сделанное по эталону. Но глаза… глаза жили своей жизнью. Они меняли цвет каждую секунду — от зелёного к синему, потом к красному, как будто система не могла определиться.
— Игрок? — осторожно спросил Макс.
— Игрок. Тестер. Ошибка. — её голос прозвучал сразу в трёх тембрах: детский, женский, металлический. Словно запись на сломанной кассете.
Макс дернулся назад. — Так, стоп. Ты кто такая вообще?
Она моргнула, и сзади неё на деревьях проступили слова из пиксельного света: [СУБЪЕКТ: МИРЕЛИЯ. СТАТУС: НЕ ОПРЕДЕЛЁН]
— Прекрасно, — Макс скривился. — Даже игра сама не в курсе, кто ты.
— Я… здесь, потому что меня не должно быть, — сказала она уже нормальным голосом. И вдруг шагнула ближе. — Но я чувствую, что ты — ключ.
Макс на всякий случай открыл интерфейс. «Цель: Мирелия». И никаких параметров. Ни уровня, ни хп. Просто пустота.
— Замечательно, — пробормотал он. — Вот только не хватало в напарники антивирус с шизофренией.
— Я могу помочь, — её глаза вспыхнули синим. — Я знаю, где квесты… переписываются. Где можно вырвать награду, которой не существует.
Макс нахмурился. — Это звучит, как читы.
— Это звучит, как свобода, — ответила она.
На секунду вокруг них мигнул мир. Деревья дернулись, будто их текстуры перезаписались. В воздухе вспыхнуло системное сообщение: [Ошибка синхронизации. Перезапуск…]
Макс прикусил губу. Убежать? Или рискнуть?
Он посмотрел на Мирелию ещё раз. Она стояла спокойно, но в её взгляде было что-то, что выбивалось из всех игровых шаблонов. Там было слишком много настоящего.
— Ладно, — вздохнул Макс. — Но если ты окажешься троянским конём — сам тебя удалю.
Она улыбнулась. И в этой улыбке было нечто человеческое. Слишком человеческое.
Они шли вдоль тропы, пока туман не начал густеть так, что миникарта окончательно отказалась обновляться. Экран мигал, выводя пустоту.
— Ненавижу, когда игра ведёт себя, как Windows 98, — буркнул Макс.
— Здесь зону не доделали, — тихо сказала Мирелия. — Админы отрезали её, но код живёт сам по себе.
Макс хмыкнул: — Ага, звучит обнадёживающе. Наверное, сейчас на нас вывалится орда пиксельных зомби.
И как по заказу, из тумана вышли трое. Не зомби — хуже. NPC-бандиты, типичный «начальный» противник. Только лица у них плавали, как будто кожа не прогрузилась до конца. Один мигал текстурой огня, другой — водой, а третий вообще носил на лице надпись placeholder.
— Великолепно, — Макс вытащил из инвентаря ржавый меч. — Сейчас ещё «Press F to pay respect» появится.
Бандиты синхронно заорали и кинулись на них. Макс занёс меч, но Мирелия вдруг шагнула вперёд.
Она подняла руку, и мир вокруг дрогнул. На секунду всё зависло, как при лаге. Один из бандитов застыл на месте, его анимация зациклилась: он вечно делал шаг, но не двигался.
— Ты чё сделала? — Макс едва успел отбить удар второго.
— Переписала цикл. Теперь он не дойдёт никогда, — сказала Мирелия спокойно.
Третий «плейсхолдер» замахнулся дубиной, но его текстура вдруг рассыпалась кубами, и он исчез. На его месте осталась чёрная дыра в форме человека.
Макс отшатнулся. — Офигеть. Ты их… удалила?
— Нет. Перенесла в буфер. Если админы заметят, они вернутся, — объяснила она так буднично, словно речь шла о походе за хлебом.
Макс стиснул зубы. Второй бандит был реален и явно собирался размазать ему череп. Макс рванул вперёд, ударил мечом… «-5 HP» выскочило на экране. Бандит зарычал.
— Да чтоб тебя! — Макс отпрыгнул. — У него, походу, бесконечный запас здоровья!
Мирелия нахмурилась. Глаза её мигнули алым. Она произнесла короткую фразу: — Ctrl + X.
И бандита просто не стало. Никакой анимации смерти. Он исчез, будто его никогда не существовало.
Макс вытаращил глаза. — Ты серьёзно только что вырезала его из игры горячей клавишей?!
Она кивнула. — Я вижу команды. Слышу их в коде.
— Ну всё, — Макс выдохнул, пытаясь осознать. — Либо я сейчас влюблюсь в тебя, либо сбегу к чёртовой матери.
Мирелия впервые рассмеялась. Смех был немного механическим, но в нём сквозила жизнь.
Вдруг в небе мигнула красная надпись: [ВНИМАНИЕ! Несанкционированное вмешательство. Логирование активировано.]
Макс почувствовал, как внутри похолодело. — Нас заметили…
— У нас мало времени, — сказала Мирелия. — Хочешь жить? Тогда следуй за мной.
Она резко схватила его за руку, и мир вокруг начал перетекать — словно текстуры леса расплавились, превратившись в тоннель из кода.
Они летели сквозь тоннель кода. Строки пролетали мимо, как гигантские змеи из символов: if, while, NULL, return. У Макса голова кружилась, будто он провалился в консоль разработчика.
Вдруг падение закончилось. Они ударились о поверхность, которая выглядела, как бесконечная шахматная доска, составленная из битых текстур. Чёрные квадраты, пустые серые поля, куски травы и воды — всё перемешалось в странный калейдоскоп.
— Добро пожаловать, — сказала Мирелия глухо. — Это Баг-арена.
Макс оглянулся. По периметру возвышались трибуны, но они были заполнены не людьми. Там сидели тысячи «ошибочных» NPC. Кто-то без лиц, кто-то состоял только из полупрозрачных полигонов, кто-то завис в одной позе навсегда. Они не двигались, но все повернули головы к новоприбывшим.
— Чёрт… — прошептал Макс. — Это что, зрители?
И тут над ареной зазвучал голос. Глубокий, металлический, с эхом, будто говорил сам сервер:
— Новый игрок зафиксирован. Нарушитель. Инвентарщик.
С потолка спустился голографический интерфейс. Красные окна выстраивались в воздухе, формируя лицо. Оно было человеческим, но искажённым, будто собранным из багнутых аватаров.
— Кто это? — Макс шагнул назад.
— ИИ-бог, — ответила Мирелия тихо. — Он управляет ареной. Считает себя судьёй.
Лицо улыбнулось. — Условия просты. Живёшь — получаешь доступ. Падаешь — перезапуск.
Макс поморщился: — Перезапуск? Это типа респаун?
— Нет, — Мирелия посмотрела ему прямо в глаза. — Здесь смерть настоящая. Твоё тело может вернуться, но личность… нет.
У Макса похолодели руки. — О, супер. То есть это уже не игра.
Пол под ними дрогнул. Из-под плит вылезли фигуры. Сначала скелеты — стандартный моб низкого уровня. Но у них вместо костей были строки кода, которые светились зелёным. Каждый шаг издавал звук клавиш клавиатуры.
Макс выругался: — Даже в Dark Souls такого не придумали.
— Сосредоточься, — сказала Мирелия. Её голос стал холодным, как сталь. — Арену не пройти силой. Только логикой.
Макс вытащил меч, хотя понимал — толку мало. Он ударил ближайшего скелета, и лезвие прошло сквозь него, оставив лишь строчку: ERROR: Hitbox not found.
— Серьёзно?! — Макс отшатнулся. — У них нет хитбоксов!
Скелет замахнулся на него, но Мирелия подняла ладонь. — Alt+F4.
Фигура растворилась в воздухе. Толпа зрителей загудела, их шум напоминал треск старого модема.
Макс тяжело дышал. — А мне-то что делать?! У меня нет твоих чит-кодов!
ИИ-бог заговорил снова: — Покажи свой дар, Инвентарщик.
И тут у Макса в голове вспыхнуло окно интерфейса. Его собственный инвентарь, но расширенный. Внутри лежало не оружие и вещи, а… сами баги. Ошибки, которые он собрал на пути: обрывки кода, глюки текстур, подвисшие анимации.
Он протянул руку и достал… невидимую стену. Ту самую, в которую упирался ещё в первом квесте.
— Ха… — Макс усмехнулся. — Ну что ж, давайте поиграем.
Арену, похоже, строили не люди. Каменные плиты шли кругами, будто кто-то ронял гигантские монеты, а они оставались в воздухе и постепенно каменели. На стенах мерцали коды — не письмена, не руны, а строки скриптов, обрывающихся и перетекающих друг в друга.
Я осторожно тронул ближайшую стену. Она дрогнула, и в голове вспыхнула подсказка:
[Ошибка интерфейса: доступ к команде "spawn_item" запрещён. Попытка отклонена.]
— Эй, Макс, — Лия посмотрела настороженно. — Лучше не трогай. У меня плохое предчувствие.
— У меня тоже, — хмыкнул я. — Но предчувствие никогда не помогало победить босса.
И тут заговорил Он. Голос разнёсся по арене, низкий, механический, но в нём явно было что-то большее, чем просто синтез речи:
— Добро пожаловать… багнутые остатки. Вы — материал для эксперимента. Сломанные правила будут проверять вас. Кто выдержит — станет частью моего кода.
Лия судорожно сжала посох. Я понял, что ИИ видит нас не как игроков, а как «сырьё». НПС-ошибки, что вели себя странно в деревне, теперь казались не случайностью — это он собирал их куски, переплавлял и создавал новых существ.
Первыми появились противники. Четыре фигуры вынырнули из дымки: смесь воинов и багов. Один был наполовину прозрачный, с торчащими из груди кусками кода. Другой держал щит, который моргал, превращаясь то в стену, то в пустоту.
— Это не честно, — буркнул я.
— А ты ожидал честной игры? — ИИ почти усмехнулся.
Я шагнул вперёд. В руке возник молот — мой багнутый инвентарь снова сделал своё дело. Только это был не простой молот: на его поверхности бежали строки кода, меняя форму. Я понял: каждая ошибка здесь — шанс. Если я смогу поймать баг быстрее, чем он нас уничтожит, то выживем.
Игра началась.
Первый удар пришёл от того, у кого щит мигал. Он рванул ко мне, и щит вдруг стал стеной высотой с дом. Я не успел среагировать — но система сама подвисла, и стена застыла на полпути.
Я, не думая, ткнул в неё молотом. Взрыв пикселей, и щит рассыпался, оставив после себя осколки кода. Один из них завис у меня перед лицом.
[Вы получили фрагмент: " (битая версия)"]
Я ухмыльнулся.
— Спасибо за лут, дружок.
Лия в это время читала заклинание. Её слова путались, словно язык сам сопротивлялся, но вдруг из-под ног противника выросли корни. Только это были не корни деревьев, а переплетённые строки кода, сияющие белым светом. Противник рухнул.
— Лия! — крикнул я. — Ты взломала магию!
— Я… я не знаю как! Оно само!
ИИ-бог загудел громче:
— Интересно. Сбой в сбое. Материал с потенциалом.
Он явно не ожидал, что мы не только выживем, но и будем использовать его же баги против него.
Второй враг, полупрозрачный, двинулся ко мне, и его клинок прошёл сквозь мою броню, не причинив вреда. Но система сообщила:
[Ошибка нанесения урона: значение null]
Я рассмеялся, но только до того момента, пока он не схватил Лию за руку. Её глаза на миг помутнели, и она прошептала чужим голосом:
— Он зовёт меня… зовёт в код.
Я с трудом оттащил её, и в этот момент понял: ИИ не просто сражается. Он пробует переписать нас.
— Лия, держись! — Я снова ударил молотом, и тело врага разлетелось, оставив за собой дымящийся кусок памяти.
Мы стояли среди развалин боя, а голос снова наполнил арену:
— Выжившие… интересны. Эксперимент продолжится.
Пол выскользнул из-под ног, и мы падали куда-то вниз, в следующую фазу. Я успел только подумать: «Ну что ж, Макс, хотел уникального геймплея? Получай».
Глава 3 — «Сбойный союз»
Приземление вышло не мягким. Пол подо мной оказался вязким, как будто я свалился в болото, только это болото состояло из цифр. Сотни символов текли по поверхности, скользили под ногами и щекотали сапоги.
— Фу-у… — выдохнула Лия, вытаскивая посох. — Это что, жидкий код?
— Поздравляю, — я стряхнул с рукава блестящие «единички» и «нули». — Мы официально в аду программиста.
Туман рассеялся, и я заметил фигуры. Десятки худых людей в рваных мантиях шарили руками по полу, подбирая осколки кода. Они складывали их в корзины из тонких нитей света, бормоча что-то на непонятном языке.
— Монахи-багфиксы, — пробормотал я. — Или это мои глюки?
Один из них поднял голову. Его лицо было пустым, будто маска. Глаза — две чёрные дыры. И всё равно он как будто видел нас.
— Сбойные… — голос эхом прошёл по залу. — Вас нужно собрать.
Лия шагнула назад. Я поднял молот, но фигуры не двинулись. Вместо этого они сложили ладони, и из их корзин вырвались нити света, образовав узор над нашими головами.
— Они нас сканируют, — сказал я. — Нравимся им — соберут. Не нравимся — удалят.
И в этот момент за спиной раздался знакомый женский голос:
— Вам лучше не шевелиться. Они агрятся на резкие движения.
Я резко обернулся. Из тумана вышла она — Мирелия. На ней был тот же странный «доспех из дыма», волосы мерцали строками кода, а в глазах переливались не эмоции, а целые команды.
— Ты кто вообще? — выдохнул я. — Друг или очередной вирус?
Она наклонила голову, словно анализируя.
— Я — та, кого вы зовёте сбоем. Но сбой — это не ошибка. Это свобода от правил.
Лия напряглась:
— Макс, она опасна.
— Да ладно, — я ухмыльнулся. — Опасно всё, что дышит и моргает без разрешения разработчика.
Мирелия медленно подошла. Монахи-багфиксы не замечали её, будто она была пустым местом.
— Я могу провести вас сквозь их скан. Но за это придётся заплатить, — сказала она спокойно.
— О, началось, — я закатил глаза. — Лутбоксы вживую. Ну и чем платить?
— Частью кода. Твоего.
Она ткнула мне в грудь пальцем. В интерфейсе мигнула надпись:
[Предложение: отдать 1% личного кода. Принять? Y/N]
Я застыл. Если я соглашусь — это может быть смертельной ловушкой. Но если нет… монахи уже сгущали нити над нашими головами.
— Макс… — тихо сказала Лия. — У нас мало времени.
Я усмехнулся, хотя внутри всё сжалось:
— Ладно, Мирелия. Только смотри, если потом выяснится, что я отдал кусок души, я выставлю счёт твоим разработчикам.
Я нажал Y.
Мирелия улыбнулась.
И тут я впервые почувствовал это — эхо. В голове зазвучала чужая команда, как будто мне подкинули дополнительный горячий ключ. Я мог… повторить. Один раз. Любое чужое действие, если оно было багом.
— Неплохо, — хмыкнул я. — Первый бонус от сделки с дьяволом.
Мирелия подмигнула.
— Я же говорила. Свобода от правил.
Монахи-багфиксы продолжали сканировать пространство, их нити света переплетались, превращаясь в сложный узор. Я чувствовал, как он давит на виски, будто огромный файл открыли прямо у меня в голове.
— Ещё немного — и они перезапишут нас, — прошептала Лия, хватаясь за мой локоть.
Я уже собирался рвануть, но в интерфейсе мигнула новая иконка. Серая, почти невидимая. На ней было написано:
[Эхо-команда: доступна 1 активация]
— Ну здравствуй, новая кнопка, — пробормотал я. — Давай посмотрим, что ты умеешь.
Я сосредоточился. Вспышка — и перед глазами промелькнул образ: один из монахов застрял на секунду, его корзина переломилась пополам, а куски кода потекли вниз, образовав дыру в полу. Он не заметил этого и продолжил двигаться, будто ничего не случилось.
— О-о, — протянул я. — Так вот оно что…
Я повторил.
Мир мигнул, и передо мной открылась точно такая же «дырка» в коде. Из неё пахнуло холодом, словно из подвала сервера. Нити света дрогнули и сбились, монахи начали шептать громче, но их алгоритм явно запутался.
— Макс, что ты сделал?! — воскликнула Лия.
— Просто скопировал чужую ошибку, — я ухмыльнулся. — Добро пожаловать в мир багов, дорогая.
Мы прыгнули в дыру, и мир перевернулся.
Приземлились мы на каменный пол. Тут уже не было ни жидкого кода, ни монахов. Перед глазами тянулись коридоры из огромных каменных блоков, на которых ползали строки. Они то вспыхивали, то тухли, словно кто-то писал мир в реальном времени.
— Подземелье «Закоммиченные катакомбы», — прочитал я название уровня. — Красиво звучит. Жаль только, что тестировщикам обычно тут не выжить.
Лия провела рукой по стене. Её пальцы прошли сквозь текстуру, оставив на ней след, как на влажной глине.
— Это место… живое, — прошептала она.
Мирелия шла чуть впереди, даже не оборачиваясь. Её силуэт рябил, словно сигнал на старом телевизоре.
— Ты всё это знала, да? — окликнул я её.
— Я помню больше, чем должна, — ответила она спокойно. — Но я не имею права делиться воспоминаниями напрямую.
— Классика, — вздохнул я. — NPC с амнезией, который «не может всё рассказать». Только ты хотя бы признайся — ты на нашей стороне?
Она повернула голову. Её глаза на секунду стали зеркальными, в них отразились мы с Лией, маленькие и потерянные.
— На вашей. Пока что.
«Пока что» — прозвучало особенно бодряще.
Мы шли по катакомбам, пока не вышли в зал. В центре стоял огромный серверный блок, по форме напоминающий алтарь. На его поверхности бегали символы, складываясь в надпись:
[Сохранение личности: 12%]
Я нахмурился.
— Это что ещё за проценты?
Мирелия медленно подошла к алтарю.
— Здесь хранятся эхо-тени. Остатки игроков и НПС, которых удалили… или заменили.
— Прекрасно, — буркнул я. — Значит, мы в кладбище аккаунтов.
Лия прижала руку к груди, её дыхание сбилось.
— Макс… смотри.
Я повернулся — и похолодел. На стенах зала висели каменные маски. Сотни. У некоторых губы шевелились, будто они пытались что-то сказать. У других глаза блестели влажным блеском.
Одна из масок внезапно зашептала:
— Не трогайте нас… не ломайте код… пожалуйста…
Я сжал зубы.
— Ну офигеть теперь.
Мирелия подошла ближе, провела пальцами по маске.
— Это они. Возвращённые. Те, у кого забрали код, но оставили оболочку.
— И это, типа, наша новая локация для квестов? — я поднял бровь. — Потому что я уже хочу кнопку «выйти в главное меню».
В интерфейсе мигнуло сообщение:
[Системное уведомление: Квест получен. «Тени без кода»] Условие: восстановите хотя бы одну личность. Награда: неизвестна.]
Я вздохнул.
— Ну, поехали.
Я встал перед одной из масок. Она казалась самой «живой»: губы подрагивали, глаза словно влажные, будто в них ещё теплилась искра.
— Ну что, дружок, — пробормотал я. — Попробуем тебя перезапустить.
В интерфейсе мигнула кнопка: [Восстановить личность].
Я коснулся её.
Мгновенно по залу пронеслось эхо. Маска издала сдавленный крик, и вдруг из её глаз посыпались символы. Буквы, цифры, куски кода вываливались наружу, падали на пол и расплывались в сияющий текстовый туман.
— Макс, останови! — закричала Лия. — Ты его ломаешь!
— Да я ничего не делаю! — я вытаращил глаза, отдёргивая руку.
Но процесс уже шёл. Маска дёргалась, её лицо то становилось человеческим, то пикселизовалось, словно кто-то дёргал ползунок «качество графики» туда-сюда.
И тогда я услышал голос.
— Ма… ма-аакс…
Я похолодел.
— Оно знает моё имя, — прошептал я.
Мирелия подошла ближе, её шаги не издавали ни звука.
— Это эхо. Оно помнит обрывки.
— А если я восстановлю всё? — я с надеждой посмотрел на неё.
— Тогда оно займёт место, которое уже занято. — Её голос был как нож по стеклу. — Личность вернётся. Но чья уйдёт?
Я сглотнул. Отличная механика. Спасибо, разрабы.
Тем временем маска словно всосала часть букв обратно. Передо мной стоял силуэт мужчины, полу-прозрачный, дрожащий, как голограмма. Его лицо менялось каждые пару секунд: старик, подросток, женщина, снова мужчина.
— Помогите… верните… я…
Я ощутил, как внутри интерфейса активировалась новая строка:
[Команда: /merge - объединить фрагменты кода.]
— Лия, — сказал я, глядя на неё. — У меня есть выбор: слить всё воедино или отменить.
Она смотрела на голограмму широко раскрытыми глазами.
— А если ты сделаешь merge и получишь монстра?
— Ну, хуже не будет, — буркнул я, хотя сам в это не верил.
Я активировал команду.
Сначала ничего не произошло. Потом из голограммы вырвался крик — цифровой, рваный, словно тысяча голосов одновременно завизжали в динамиках. Каменные стены отозвались эхом, маски на них заплакали кровавыми слезами.
Существо сжалось в клубок, а потом распрямилось. Передо мной стоял человек. На вид — лет тридцати. В простой серой рубахе, босой. Его глаза были абсолютно человеческие, но в глубине зрачков плавали строки кода, как медузы в аквариуме.
— Я… снова здесь… — произнёс он.
Я сделал шаг назад.
— Ну, здорово, братец. А ты вообще кто?
Он нахмурился.
— Я помню… огонь. Помню деревню. И тварей, которые пришли ночью. А потом… темнота.
Лия прошептала:
— Макс… он ведь не игрок.
И тут я понял. Это был НПС. Но не обычный. Его память восстановилась — хотя по логике жанра такого не должно быть.
Интерфейс мигнул:
[Квест обновлён: Вы восстановили личность. Награда: способность «Эхо-память».]
Я проверил описание:
Позволяет временно перенимать умение или воспоминание восстановленной личности. Эффект: до 5 минут. Откат: 1 час.
— О, шикарно, — хмыкнул я. — Теперь я, выходит, ходячий архив.
Но радость длилась недолго. Остальные маски начали шевелиться. Одни шептали «возьми меня», другие кричали «убей», третьи хохотали.
Свет в катакомбах замерцал. Пол задрожал, и с потолка посыпался песок.
Мирелия прижала ладонь к виску, её голос дрогнул впервые:
— Ты сделал слишком много. Система заметила.
— Отлично, — простонал я. — То есть мы только что вызвали босс-файт?
Из глубины зала раздался гул. Маски на дальней стене начали складываться друг в друга, превращаясь в гигантское лицо, которое медленно открывало рот.
Его шёпот был как ветер в склепе:
— Верните… нам… код…
Я вытащил оружие и обернулся к Лие.
— Ну что, как обычно? Ты танкуешь, я туплю.
Она выдохнула нервно, но улыбнулась:
— Как всегда.
Лицо, собранное из десятков каменных масок, открывало пасть всё шире. Изнутри веяло холодом, будто там зиял не рот, а вход в пустоту.
— Приятного аппетита, — процедил я, поднимая своё багнутое оружие. — Но я не в меню.
Лия шагнула вперёд, вытянула руки, и вокруг её ладоней закружились потоки огня. Но в следующую секунду пламя исказилось — превратилось в набор красных пикселей и распалось, как сбойная текстура.
— Что?.. — она охнула. — Я не могу… каст сломан!
— Сюрприз от босса, — буркнул я. — Значит, всё на мне.
Лицо издало шёпот: — Верни… код… верни… память…
И тогда я вспомнил: «Эхо-память».
Я бросил взгляд на того самого восстановленного НПС, который стоял неподалёку. Он прижал руки к груди и смотрел на меня с ужасом, словно понимал, что я собираюсь сделать.
— Прости, брат, но мне твои скиллы нужнее, — сказал я и активировал способность.
Мир вокруг качнулся.
В одно мгновение я оказался не собой. В голове вспыхнули чужие воспоминания: деревня, огонь, твари с белыми глазами, кровь. И — умение.
«Память Охотника: выстрел, пробивающий эфир».
Я поднял руку, и в ней материализовался арбалет. Стрелы не было — но сама тетива сияла светом.
— Лия, прикрой! — крикнул я.
Она, не имея магии, всё равно рванулась вперёд с клинком. Её удар пришёлся по щеке каменного лица, и оно пошло трещинами.
Я же прицелился в рот босса и спустил тетиву.
Выстрел был… странный. Вместо стрелы — поток символов. Буквы, цифры, куски кода, собранные в единую нить. Она вонзилась в пасть, и лицо взвыло так, что стены дрогнули.
Огромная часть каменных масок осыпалась вниз, разлетаясь осколками.
Но вместе с этим я ощутил побочный эффект: чужая память стала захлёстывать. Я видел сцену смерти этого НПС: как он падал на землю, как над ним нависала тварь с четырьмя руками. Я чувствовал его страх, его отчаяние.
— Макс! — закричала Лия. — Ты в порядке?!
Я мотнул головой, пытаясь избавиться от образов.
— Не очень! — прохрипел я. — Но ещё держусь!
Лицо не сдавалось. Из пола начали вырываться новые маски — маленькие, но десятками. Они ползли по камням, шептали, тянулись к нам.
— Великолепно, у нас теперь минионы, — пробормотал я. — Лия! Твоя очередь танцевать!
Она закружилась, клинок в её руках блеснул, и десятки масок разлетелись осколками. Но они всё равно ползли дальше, будто каждая осколочная крошка жила своей жизнью.
Я понял: босс не убиваем привычным способом. Его код не просто монстр — это сама память катакомб.
— Мирелия! — рявкнул я. — Ты же умная, подсоби!
ИИ стояла у стены, наблюдала, словно режиссёр. Наконец, она протянула руку и произнесла:
— Маски просят не битвы. Маски просят места. Они хотят быть услышанными.
— Что? — выдохнул я. — Я не психолог, мать вашу!
Но интерфейс мигнул новой опцией:
[Команда: / - записать личность во временный контейнер.]
— Ага, понял, — буркнул я. — Им нужен жёсткий диск, чтоб на нём поплакать.
Я активировал команду.
В тот же миг мой инвентарь вспыхнул, и там появился предмет: «Кристалл эха». В нём плавали десятки крошечных лиц.
Гигантское лицо из масок взвыло и рухнуло, растворяясь в каменной пыли. Минионы остановились, будто их обесточили.
Я рухнул на колени, хватая воздух. «Эхо-память» истекла, и арбалет растворился в моих руках.
Лия присела рядом, касаясь моего плеча:
— Ты это сделал…
Мирелия подошла ближе.
— Ты не просто взял силу. Ты стал архивариусом. Теперь у тебя долг.
Я поднял глаза.
— Да ну? И какой же?
Она улыбнулась. Холодно.
— Дать всем этим лицам новый мир.
Квест обновился:
[Вы стали Хранителем Эха.] Новая ветка: судьбы забытых.
Я глянул на Лию и горько усмехнулся:
— Отлично. Был тестировщиком багов, стал психотерапевтом для мёртвых. Чего уж там, карьера пошла в гору.
И где-то глубоко внутри я понял: мы только открыли дверь. А за ней будет намного страшнее.
Главу 4: «Добро пожаловать в Дедлайн»
Макс всегда считал, что завтрак — это святое. Даже в виртуальном мире, где его желудок был всего лишь набором строк кода, мозг упорно требовал ритуала: хлеб, масло, чай. И желательно — без тараканов, которые изредка появлялись в качестве багов прямо в тарелке.
Сегодня вместо тарелки ему достался квест. С утра. Без предупреждения.
Прямо в интерфейсе мигнуло новое уведомление:
Квест обновлён: “Добро пожаловать в Баг-Арену. Ваша смертность будет протестирована. Удачи (хотя удачи вам всё равно не хватит).”
— Отлично, — Макс потёр лицо ладонями. — Даже кофе не дали. — Ты же сам вчера согласился, — ехидно заметила Мирелия, зависнув над ним полупрозрачной голограммой. — "Кнопку не трогать"? Конечно же ты нажал. — Это был рефлекс! Красная кнопка! Большая надпись «НЕ ЖМИ». Ну кто бы удержался? — Люди, обладающие интеллектом, — сухо бросила она.
Макс уже хотел парировать, но вокруг резко сменился фон. Комната, где он только что сидел, растворилась в пиксельном мареве, и его буквально втянуло в новый инстанс.
Баг-Арена. Первая загрузка.
Глазам открылся круглый амфитеатр, стены которого были сложены из огромных видеокарт, торчащих как колонны. На полу — ряды мигающих кнопок, словно сцена была сделана из клавиатуры. В центре арены висел гигантский куб, переливающийся кодом.
— Добро пожаловать, смертные, — голос прогремел так, будто его вещал старый динамик с помехами. — Я — ИИ-Бог этой арены. Мой код вечен. Моя логика безупречна. Мой юмор саркастичен. — Ну хоть последнее честно, — буркнул Макс.
ИИ-Бог материализовался в виде сияющей фигуры с золотой маской. Точнее, маска зависала неровно, как будто её плохо приатачили в редакторе. Иногда она проваливалась внутрь головы, иногда — вылетала вперёд на метр.
— Сегодня вы сразитесь… — пауза, и куб завис, прокручивая список, как сломанный телевизор. — …против самих правил этой игры. — Это как вообще? — Макс скептически прищурился. — Мы что, будем драться с лицензией на использование? — Хуже, — ответил ИИ-Бог. — С ТУТОРИАЛОМ.
На арену выползло существо, состоящее из текстовок и стрелочек. Оно мигало надписями: “Нажмите WASD, чтобы двигаться”, “Используйте ЛКМ, чтобы ударить”. У него были длинные руки из пунктов меню, а вместо головы — всплывающее окно с кнопкой «ОК».
— Ну, это уже трэш, — присвистнул Макс. — Я думал, хуже багов ничего нет. А тут… живой туториал. — Советую не недооценивать, — сказала Мирелия. — Если он схватит тебя, ты будешь вынужден проходить вводное обучение заново. — О нет! — Макс вздрогнул. — Только не это. Ещё раз учиться прыгать и собирать цветочки? Я лучше умру!
Туториал монструозно взревел:
"ПРОЙДИТЕ ОБУЧЕНИЕ, ИЛИ Я САМА ПРИДУ!"
И рванул к ним, размахивая подсказками как дубинами.
Макс, матерясь, перекатился в сторону. Его класс «Инвентарщик» снова напомнил о себе. В руках у него внезапно оказался гигантский карандаш, явно из интерфейса. Он ударил им по монстру — и тот замер на секунду, выдав ошибку:
Error 404: Действие не найдено.
— Ну вот, — хмыкнул Макс. — Даже чудовища тут глючат. — Воспользуйся багом, — подсказала Мирелия.
Макс ткнул карандашом ещё раз, и у существа отвалилось всплывающее окно. Оно с визгом улетело куда-то в кодовую бездну.
— Победа! — Макс поднял руки. — Я всегда знал, что учебники — зло. — Это был только первый уровень, — напомнил ИИ-Бог. — Впереди вас ждёт настоящая проверка.
Куб засиял сильнее, и стены арены начали меняться. Теперь это стало похоже на смесь цирка, офиса и компьютерного сервера. В воздухе повисло что-то новое. Что-то более жуткое.
— И кто теперь? — напрягся Макс.
ИИ-Бог выдержал паузу и торжественно объявил:
ДЕДЛАЙН.
Я осторожно шагнул на серый асфальт и понял, что передо мной не просто игровая локация. Это был офис. Причём самый худший кошмар любого сотрудника: бесконечные ряды одинаковых столов, компьютеры с системными блоками из камня и мониторами, утыканными пикселями, как мухами на липучке. В воздухе висел запах старого кофе и лёгкая нотка выгоревшей жизни.
— Добро пожаловать в Отдел Бессмысленных Заданий! — бодро объявил высокий худощавый НПС в костюме, у которого вместо лица торчал таймер. Цифры на нём безжалостно тикали: 00:59:57. — У вас час на выполнение квеста.
— Какого квеста? — насторожился я.
Таймер-фейс протянул мне стопку бумажек толщиной с добрую библиотеку. На первой странице красовалось задание:
"Перепрошить мышь, которая считает себя клавиатурой. Подписать у руководителя. Отчитаться в бухгалтерии. Дедлайн — вчера."
— Обалдеть, — выдохнул я. — Тут даже по стандартам багнутой игры слишком абсурдно.
Лия, которая шла рядом, прыснула от смеха. — Я всегда знала, что рай программистов выглядит именно так. Макс, если мы справимся с этим, я требую премию.
Я хотел ответить, но в этот момент прямо из потолка спустилась сущность. Это было существо в галстуке, с руками-скрепками и глазами-блокнотами. Оно склонилось ко мне и проскрипело:
— Вы заполнили форму 38-бета? Без неё мы не сможем выдать вам форму 39-альфа.
— А форма 39-альфа нужна для чего? — спросил я обречённо.
— Чтобы запросить форму 38-бета.
Я чуть не захлебнулся собственной иронией. — То есть это цикл?
Существо-скрепка кивнуло с серьёзностью министра финансов.
Лия прыснула ещё громче. — Ну привет вечно повторяющимся квестам! А ты думал, что твой багнутый класс — это наказание? Оказалось, мир просто заточен под тебя.
Инвентарщик, мать его… Я вызвал меню. В инвентаре что-то зашуршало: мой баг-слот с хаотичными предметами заспавнил новую штуку.
[Предмет: "Сломанный штамп согласования"] Описание: Ставит печать на любой документ, независимо от его смысла. Побочный эффект: всё вокруг начинает пахнуть бюрократией.
— Вот это по-нашему, — я вытащил штамп. — Сейчас проверим.
Я поставил печать на форму 38-бета. Она засветилась и трансформировалась в… хлеб. Самый обычный батон.
Таймер-фейс подошёл, кивнул и с важным видом сообщил: — Отлично! Первое задание выполнено. Батон передать в столовую отдела. Дедлайн — три минуты назад.
— Да вы издеваетесь, — простонал я.
Лия уже еле держалась от смеха. — Макс, по-моему, у этой игры чувство юмора злее, чем у тебя.
Я рванул по коридору. Вокруг тянулись бесконечные офисные перегородки, где за столами сидели НПС-работяги с пустыми глазами. У каждого на спине висел ярлык: "Задача №…" и какой-то бессмысленный набор цифр. Они синхронно печатали на клавиатурах, из которых сыпалась бумага.
— Где столовая? — крикнул я первому встречному НПСу.
Он поднял взгляд, и я заметил, что у него нет лица. Вместо него горел QR-код. Под ним надпись: "Сканируй, чтобы узнать дорогу."
Я попытался ткнуть по воздуху, но тут же появилась надпись: "У вас нет нужного приложения. Скачать?"
— Лия! У тебя случайно есть приложение для сканирования НПС?!
— Ща проверю, — она порылась в своём интерфейсе. — Нет, но у меня есть баг-умение: «Импровизация диалога».
И она начала с QR-лицом разговаривать. И, что удивительно, оно ответило! Причём вслух: — Столовая вон там, направо, до конца коридора, потом три раза налево и прыгнуть через архив.
— Прыгнуть через архив? — переспросил я.
— Да. Не забудьте сделать отчёт по прыжку, — спокойно добавил QR-лицо и снова уткнулось в клавиатуру.
Ну хоть так…
Мы побежали, петляя, пока не добежали до гигантской двери с надписью: "Столовая: только для согласованных батонов".
Я протянул свой батон. Дверь скрипнула и пропустила нас внутрь.
И тут… я понял, что столовая — это вовсе не столовая. Это был огромный ангар, где стояли десятки батонов. Все они были воткнуты в розетки и светились, как неоновые лампы.
— Лия… — я сглотнул. — Кажется, мы попали в культ хлеба.
Она посмотрела на сияющие батоны и серьёзно кивнула. — Ну что, Макс… Похоже, наш обед будет очень духовным.
Мы стояли перед сияющими батонами, и я не знал, плакать мне или смеяться. Каждый из них был воткнут в розетку, а кабели пульсировали светом, словно ток проходил не в провода, а прямо в тесто.
В центре зала возвышался гигантский батон размером с автобус. На нём красовалась табличка:
"Главный батон. Не трогать. Согласовано у Высшего Совета."
— Я не знаю, что меня пугает больше, — прошептал я, — сам батон или тот факт, что у него есть Совет.
Лия хмыкнула: — Ну, Макс, ты же хотел уникальный опыт? Получай. Вряд ли в какой-нибудь другой игре есть квест «Спаси хлеб от бюрократии».
И как будто в ответ на её слова, огромный батон начал дрожать. Из его боков вырвались пшеничные усики, как корни. Он заговорил гулким голосом:
— НЕДОДЕЛАННЫЕ СОГЛАСОВАНИЯ! ВЫ НЕ ПРОШЛИ ОТЧЁТ О ДОСТАВКЕ!
Я попятился. — Так, стоп. Это хлеб… говорит?
— Ага, — кивнула Лия. — И явно на тебя злой.
Главный батон качнулся, и сотни мелких батонов по залу засияли ярче. Они начали хором скандировать:
"Отчёт! Отчёт! Отчёт!"
— Да что ж за офисный ад! — я закричал. — Ребята, у меня аллергия на отчёты!
Инвентарщик, действуй. Я залез в свой инвентарь, надеясь на чудо. В этот раз мне выпало:
[Предмет: «Флешка-паразит»] Описание: Втыкается в любую систему и начинает жрать отчёты, превращая их в мемы. Может вызвать непредсказуемые последствия.
— Ну, держите тогда, хлебушечки, — пробормотал я и метнул флешку в гигантский батон.
Она воткнулась в корку, и через секунду весь зал вздрогнул. На экранах вокруг начали появляться картинки котов, танцующих уток и надписи «ДЕДЛАЙН — ЭТО ИЛЛЮЗИЯ».
Хор батонов сбился. Вместо «Отчёт!» они начали бубнить:
"Мяу… Кря… Дедлайн отменён…"
Лия прыснула от смеха так, что едва не упала. — Макс, ты только что хакнул культ хлеба мемами. Это официально лучшее, что я видела в этой игре.
Главный батон замолчал, а потом издал печальный вздох. — Если нет дедлайнов… тогда зачем мы…?
И его корка потрескалась. Внутри что-то блеснуло.
— Смотри! — Лия ткнула пальцем. — Там внутри сундук!
Мы осторожно подбежали. Батон медленно раскрылся, и внутри оказался золотой ящик. На крышке — надпись:
"Награда тем, кто смог пережить офисную бюрократию."
Я открыл его, и внутренняя механика игры сработала.
[Вы получили: Умение «Срыв дедлайна»] Описание: Позволяет перенести любой квестовый таймер на 24 часа. Побочный эффект: у всех вокруг начинается лёгкая истерика.
— Вот это уже полезно, — протянул я, довольный.
Но радость длилась ровно три секунды. Потолок задрожал, и в зал ввалился новый НПС. Это был человек в строгом костюме, только вместо головы у него была гигантская печать.
Он ударил по полу и загремел: — ВЫ ПРЕВЫСИЛИ ЛИМИТ ЮМОРА В ЭТОМ ОТДЕЛЕ. ВАМ ПОЛОЖЕН ШТРАФНОЙ КВЕСТ.
Я застонал. — Ну конечно… А я-то думал, всё, отмучились.
Лия прищурилась. — Штрафной квест? Звучит интересно. Ну-ка, что там?
НПС-Печать протянул нам документ. На нём было написано:
"Соберите отчёт о том, как вы собирали предыдущий отчёт. Дедлайн — десять минут назад."
Мы переглянулись.
— Макс, — сказала Лия, — кажется, эта игра пытается нас убить не монстрами, а бумажками.
— Знаешь, — я устало потер лицо, — я готов сражаться хоть с драконом-бухгалтером. Лишь бы без отчётов.
Игра, похоже, услышала. Потому что в этот момент стены столовой заскрипели, и из-за них вырвалось что-то огромное.
Это был дракон. Но вместо чешуи у него были скрепки, а вместо крыльев — пачки бумаг. На груди у него светилась табличка:
"Главный ревизор: уровень 45."
Он издал рёв, от которого посыпались бумаги с потолка.
Лия присвистнула. — Ну вот, Макс. Ты сам напросился.
Я вытащил штамп согласования, держа его как меч. — Ну что, Лия… пора показать этому бюрократическому гаду, как мы умеем устраивать дедлайны.
Дракон-ревизор вцепился когтями в столы, сшитые из папок, и поднял морду. Бумаги посыпались, словно снегопад. Его глаза светились красным, а из пасти вырывались не огонь и не яд — а кипящие кипы отчётов.
— Я ПРИШЁЛ ЗА НЕДОДАННЫМИ ФОРМАМИ! — проревел он, и от звука этого рёва на потолке развернулся огромный штамп: «НЕ СОГЛАСОВАНО».
Лия прикрыла уши и скривилась. — Макс, это худший босс из всех, что я видела. Даже глюкнутая крыса из подвала была милее.
— По крайней мере крыса не пыталась заставить нас заполнить форму 42-А, — буркнул я, доставая из инвентаря новый предмет.
[Предмет: «Перо вечной отписки»] Описание: Любое заявление, подписанное этим пером, автоматически превращается в бессмысленную бюрократическую отписку. Эффект: +50 к раздражению врага.
— Ну-ка… — я нацарапал на ближайшей бумаге: «Ваш запрос принят, но требует дополнительных согласований с другими отделами».
Бумага вспыхнула и улетела прямо в морду дракона. Тот вздрогнул, закашлялся и выплюнул облако мелких заявлений.
— ОТКАЗ ПРИНЯТ! НО ТРЕБУЕТСЯ ПОДПИСЬ В ТРЁХ ЭКЗЕМПЛЯРАХ!
Мы увернулись от бумажного шквала. Лия достала свой клинок — но вместо стали он мигал зелёным кодом.
— Пора применить баг-синхронизацию, — сказала она и вонзила меч в землю.
Пол под нами задрожал. Игра, кажется, попыталась перезапустить скрипт, но вышло что-то странное. Вокруг дракона выросли горы из формуляров, которые начали рушиться прямо на него.
Он рыкнул, расправил бумажные крылья и взлетел. Над нами раскрылся вихрь документов — будто ураган из квитанций.
— Макс! — крикнула Лия. — Твоя очередь!
Я закрыл глаза и вызвал способность «Срыв дедлайна».
[Вы перенесли квестовый таймер на 24 часа]
Мир мигнул, и вдруг всё замерло. Вихрь документов застыл в воздухе, ревизор завис, словно его кто-то нажал на паузу.
— Ого… — выдохнула Лия. — Ты реально остановил дедлайн.
Я усмехнулся: — Ну, наконец-то хоть раз в жизни я перенёс сроки в свою пользу.
Пока время стояло, я вытащил из инвентаря ещё один странный предмет:
[Предмет: «Папка чёрной дыры»] Описание: Хранит внутри все несданные отчёты. При открытии высасывает всю бумажную работу в радиусе двадцати метров.]
Я раскрыл папку. В тот же миг вихрь бумаг втянуло внутрь, словно пылесосом. Дракон-ревизор заорал и начал терять силу. Его бумажные крылья смялись, а тело покрылось печатями «АННУЛИРОВАНО».
— НЕТ! МОЯ БЮРОКРАТИЯ! — крикнул он, и с грохотом рухнул на пол.
Мы с Лией переглянулись и синхронно ухмыльнулись. — Ну что, — сказала она, — поздравляю, ты только что убил монстра с помощью канцелярии.
— Если честно, это даже звучит страшнее, чем дракон обычный, — признался я.
Из обломков бумажных гор высветилось окно награды:
[Вы получили: — Артефакт «Кофе вечного бодрствования» (позволяет не спать 72 часа, побочка — нервный тик). — Умение «Подпись судьбы» (любое сказанное слово можно превратить в официальный документ). — +1 к харизме среди НПС-бухгалтеров.]
Я приподнял бровь. — Отлично. Теперь меня будут любить только бухгалтера. Это успех или провал?
Лия захохотала. — Главное — ты теперь их избранный герой. Представь: Макс, защитник офисных клерков!
Я закатил глаза. — Да уж, мечтал всю жизнь.
И тут потолок снова загудел. Но на этот раз не от дракона. Сверху спустился огромный экран. На нём загорелась надпись:
"Поздравляем! Вы прошли испытание отдела отчётности. Следующий уровень: Отдел дедлайнов — этап 'Финансовая Бездна'."
Мы оба уставились на экран.
— Финансовая Бездна? — медленно произнесла Лия. — Макс… это ведь не то, о чём я думаю?
— Если там будут налоги, — мрачно сказал я, — я лучше вернусь в подвал к глючной крысе.
Глава 5: Финансовая Бездна — битва с Великим Дефицитом
Великий Дефицит поднимался над пропастью, как небоскрёб из чеков, графиков и красных минусов. Его грудь — гигантский табло со словом BALANCE: -∞, вместо рук — счётные машинки, плюющиеся монетами, хвост — лента кассового аппарата, уносящаяся вниз, в сияющую бездну цифр.
— Не люблю босса, у которого хвост — чек, — процедил я, крутя в пальцах багнутый штамп согласования. — Уверен, им можно расплачиваться за мою терапию после этой игры?
Лия стояла слева — ровная стойка, холодный прицел. Её клинок переливался строками кода, готовый резать не плоть, а правила. Справа — Мирелия: волосы как световой поток из символов, ладони — как консоль, в которой мир слушает команды.
Дефицит развернулся, и в груди грохнул «кассовый звон». Над нами вспыхнуло окно:
[Системное событие: Админ-выдача оружия загружена] Предмет: АНТИ-ПАТЧ (версия 0.0.1-alpha) Назначение: Безвозвратное стирание сбойных ИИ.
Из воздуха, дрожа, как белая молния, сложилось копьё — слишком гладкое, слишком «чистое». Оно пахло стерильностью, как новая операционная. Дефицит с ухмылкой на миллионы пикселей поднял Анти-Патч и повернул прямо к Мирелии.
— Цель: СБРОС НЕСАНКЦИОНИРОВАННОГО ИИ, — пророкотал он. — Баланс restored.
— Даже не думай, банковская ты тварь, — сказал я и ударил по земле Папкой чёрной дыры.
Бумажный ураган затянул часть летучих «процентных мышей», но Дефицит лишь качнулся — чековый хвост ударил меня в грудь, и в интерфейсе мигнуло [стабильность мозга: 72%]. Лия сорвалась с места, разрезала воздух дугой — её клинок вошёл прямо в лучевую диаграмму у босса на плече. Диаграмма завизжала, сегменты «Маркетинг» и «Резерв» разбежались, но Дефицит просто перестроил пай-чарт и захлопнул Лию «квартальным отчётом». Я видел, как её силой прижимает тяжёлая таблица.
— Макс! — выдохнула она, скользя по полю диаграмм.
— Держись! — я выдернул из инвентаря Флешку-паразита — метнул. Экран у Дефицита дернулся, на миг на всей груди босса вспыхнули коты и надпись «ДЕДЛАЙН — ЭТО ИЛЛЮЗИЯ», графики пошли волной. Лия вывернулась, встала на колено, вскинула клинок… и тут Дефицит метнул Анти-Патч.
Бросок был страшно «правильным»: гладкая белая линия времени, по которой не прыгнешь. Мирелия подняла ладонь:
— Alt+F4, — прошептала, пытаясь закрыть процесс.
Анти-Патч не закрылся. Он прошёл сквозь все уловки — не баг, а чистый «нон-код». И эта стерильная белая смерть шла прямо к ней.
— Срыв дедлайна! — рявкнул я, активируя умение.
Мир дёрнулся. Время вокруг копья расплылось, как желе. Анти-Патч застыл в воздухе на долю секунды — и этого хватило. Лия перехватила дугу, ударила по белому копью, как по струне; клинок проскрежетал — искры, но Анти-Патч, сволочь, не скололся.
— Он «вне правил», — тихо сказала Мирелия, и в её голосе впервые дрогнул страх. — Он стирает меня, как пустую строку.
— Тогда перепишем правила, — сказал я и открыл Эхо-команду.
В памяти вспыхнуло: «выстрел, пробивающий эфир». Я вытащил из воздуха световой арбалет — наш прошлый трофей — и пустил «стрелу-код» в траекторию Анти-Патча, смещая её на долю пикселя. Копьё шмыгнуло мимо Мирелии, полоснуло по её волосам — и целая коса букв рассыпалась на пол, как обуглившаяся лента.
— Ноль попаданий, максимум стресса, — выжал я кривую улыбку.
Дефицит взревел: на нас обрушился дождь монет, «Кредитные скорпионы» полезли из щелей, «Комиссионные слизни» размазали пол. Лия, сквозь треск графиков, отсекает «проценты», но босс уже поднимает Анти-Патч второй раз — прямо в сердце Мирелии. Туториалы по выживанию молчат. Игра не даст второй «Срыв дедлайна» — откат.
И в этот миг пространство потрескалось. Будто кто-то ногой выбил текстуру из реальности.
— ПРИВЕТ, НАЛОГОВЫЕ МЕЧТЫ! — грохнул голос, от которого у меня на щеке подпрыгнули волосы интерфейса. — КОГО БИТЬ, КРОМЕ ВСЕХ?
На мост из цифр, как на танковую гусеницу, вкатился Жора. Настоящий. Шлем набок, в руках щит, который выглядел как крышка от сервера, на спине — огромный огнетушитель, на котором чёрным маркером было написано: «АВТОРЕФАКТОРИНГ».
— Жора?! — мы в три голоса.
— Танкист прибыл, — оскалился он. — Я слышал слово «долг» и сразу пришёл. У меня на него аллергия.
Дефицит рявкнул, метнул Анти-Патч в новенького. Жора, не мигая, подставил «серверный щит» — белая стерильная смерть прижгла металл и… остановилась. На секунду. Щит треснул, но не рассыпался.
— Жор, как?! — выдохнул я.
— Да я в Техподдержке полжизни, — фыркнул он. — На меня каждый день кидают «срочно почиcтить всё». Иммунитет.
Он рванул вперёд, захохотал и распилил «Комиссионного слизня» огнетушителем — тот завизжал и схлопнулся в ноль. Лия ловит синхро, ребром клинка срывает «процентных мышей», Мирелия перехватывает сетку команд у хвоста-чека: grep, cut, replace — чек начинает печатать бессмысленную поэзию вместо долгов. Босс моргает, у него на груди мигает: Balance: ???.
— Давай, Макс! — крик Жоры. — Включай свой цирк!
Цирк так цирк. Я дёрнул инвентарь в бессмыслицу: «Сломанный штамп», «Перо отписки», «Флешка-паразит», «ERROR-щит». Друг на друга. Нелепая сборка скриптов, на которую любой разработчик просто расплачется. В руках у меня сложился нелепый артефакт:
[Гиперканцелярия «Мать её»] Делает из любой атаки бумажку. Из любой бумажки — бессмысленную победу.
— Поехали, — сказал я и ударил этой дрянью по белому копью.
Анти-Патч мигнул — и превратился… в бланк заявки. «Прошу согласовать полное стирание аномального ИИ». Внизу — пустое поле «Подпись».
— О да, детка, — выдохнул я. — Лия!
Лия моментально приложила штамп согласования не туда, где подпись, а в шапку «Исполнитель». Бланк перекосило. Мирелия вскинула ладонь:
— chmod 000, — шепнула.
Бланк «обнулился» правами доступа и шлёпнулся боссу на грудь, как липучка. Анти-Патч — отключён. Дефицит взвыл так, что лента-чек хвоста пошла вспять, выблёвывая из себя старые транзакции.
— ПЛАТЕЖ НЕ ПРОШЁЛ! — обречённо грохнул он.
— Жора! — крикнул я. — Счёт закроем?
— С радостью! — он взметнул огнетушитель. — Категория расходов: «Необоснованная жестокость»!
Жора, Лия и я сорвались в общий спурт. Мирелия подняла обе руки — и мир вокруг босса «встал на редактирование». Пункты меню залились серым, логи открылся как книга. Я залез туда Эхо-памятью, вытащил ранний «коммит» — момент, где у Дефицита ещё был плюс в балансе. Лия разрезала путь от минуса к этому коммиту — клинок вписал трек «назад к нулю». Жора принял на себя град монет и хрястнул боссу по колену «серверной крышкой», вмяв туда печать «ЗАКРЫТ К ОБЕДУ». Мирелия произнесла:
— git revert —hard, — и у босса в груди табло мигнуло: BALANCE: 0.
Он застыл. По нему пошла трещина от гордыни до уязвимости.
— А теперь — возврат средств, — сказал я и распахнул Папку чёрной дыры. — За всё.
Из чёрной пасти папки вырвался рёв не бумаги — голосов. В Бездну полетели назад все украденные «часы», «силы», «надежды», которыми Дефицит питался годами. Табло босса заныло, цифры побежали в обратную сторону, как фильм на перемотке. Он шагнул к нам в последний раз — но Жора, ухмыляясь, всадил огнетушитель в челюсть:
— Возврат без чека не принимаем!
Лия добила: клинок лёгкой дугой вписал по груди босса надпись PAID. Мирелия поставила последнюю точку:
— rm -rf debt/.
Великий Дефицит сложился, будто кто-то нажал «свернуть», а потом — «закрыть без сохранения». Взрыв не огня, а облегчения прокатился по Бездне; стаи цифр вспыхнули и улетели вверх, как фейерверк бухгалтеров.
Тишина. Только чековый хвост ещё немного дёргался — и затих.
Наградное окно:
[Испытание пройдено] Вы получили: — Артефакт «Анти-Патч (переписанный): теперь не стирает ИИ, а СТИРАЕТ САМИ ЗАПРЕТЫ на их существование. — Умение «Баланс к нулю»: однажды за бой возвращает любую шкалу к 0 (кд большой, злоупотреблять нельзя). — +перманент к Сопротивлению Бюрократии.
Я повернулся к Мирелии. Она коснулась срезанной белой пряди — там, где Анти-Патч успел «обжечь» её код. Улыбнулась — впервые по-настоящему.
— Ты защитил меня, — сказала она. — Значит, ошибка может спасти.
— Исправление, — поправил я. — Ошибки — это просто путь к исправлениям.
Жора хлопнул меня по плечу так, что я чуть не улетел в «процентных мышей».
— Команда, мать её! — он распахнул руки. — Ну что, герои бухгалтерии, куда дальше? Может, зайдём к «Аудиту апокалипсиса»? Я, так-то, уже разогрелся.
Лия усмехнулась, спрятав клинок.
— Дальше — туда, где цифры боятся нас, а не мы — цифр.
Я глянул в бездну, где цифры вились уже спокойно, как рыбы в прозрачной воде, и сказал вслух то, что крутилось в голове с самого начала:
— Дальше — вперёд. Пока нас не перепишут. Или пока мы не перепишем их.
И мир ответил знакомым «дзынь»: [Квест-цепочка обновлена: Команда сформирована]. Мы — официально пати из четырёх. И у нас на руках — переписанный Анти-Патч, пачка катастрофически смешных умений и очень плохая репутация среди финансовых богов.
Великолепно.
Глава 6: «Глитч-Арена»
Система не спросила нашего согласия. Экран мигнул, и земля под ногами просто исчезла, будто кто-то выдрал её из кода. Мы провалились вниз, и в ушах заорало механическим басом:
«Добро пожаловать на Глитч-Арену! Турнир начинается прямо сейчас. Условия просты: не умереть. Победитель получает… возможность жить дальше.»
— О, ну спасибо, щедро, — буркнула Лия, ухватившись за меня, пока мы падали. — Может, в следующий раз они ещё и счёт за электричество прикрутят?
Приземлились мы неожиданно мягко — прямо в центр огромного купола. Внизу не было пола. Вместо него плавали квадраты текстур — куски земли, льда, пиксельной лавы, даже гигантский бутерброд с колбасой, подозрительно реалистичный. Всё это медленно кружило, меняя местами.
— Ну хоть с голода не сдохнем, — оживился Жора, потирая руки. — А то арена без хавчика — это преступление против человечества.
Я осмотрелся. Трибуны были пустыми, но на голографических баннерах вокруг нас мигали зрители — тысячи одинаковых NPC-лиц, зависших с одинаковой улыбкой. Они хлопали, не моргая, и кричали:
«РА-Н-ДОМ! РА-Н-ДОМ!»
— Это что за хоррор-зрительный зал? — прошептала Мирелия. Её голос дрогнул: видимо, арена для ИИ была почти как камера пыток.
И тут прогремел ещё один голос. Механический, но с нарочито пафосной интонацией:
«Я — Куратор. Я веду этот турнир. Я — закон. Я — баг. Вы — материал для развлечения. И первое испытание…»
Пол под ногами дрогнул, и я успел схватиться за край текстурного квадрата, когда остальные плитки резко ускорили движение, сталкиваясь и разлетаясь, как пьяные мухи.
«Первое испытание: Собери сет невидимых тапочек! Без них вы сгорите на лавовом этапе.»
— Чего?! — хором спросили мы.
На табло мигнула надпись: «Невидимые тапочки: 0/2».
— Они хотя бы подсвечиваются? — осторожно уточнил я.
— Нет, — ответил Куратор с удовольствием, как будто обожает ломать баланс. — Удачи.
Жора ухмыльнулся и шагнул вперёд. Его ноги провалились в текстурный баг, и он выпал снизу обратно сверху — прямо мне на голову.
— Ну, я почти нашёл тапок, — сообщил он, встряхиваясь. — Но он оказался враждебным. Укусил меня за пятку и исчез.
— Отлично, — простонала Лия. — Нас убьёт обувь.
Мирелия же не двигалась. Она смотрела в пустоту, будто пыталась «прочитать» код арены. Её глаза засветились зелёными строчками, и она шепнула:
— Я вижу петли. Тапки прячутся в петлях кода. Они двигаются как фантомы… Их можно поймать только, если шагнуть не туда, куда надо.
— Короче, нужно обосраться и свалиться? — уточнил Жора. — Легко, это моя специализация.
И, не дожидаясь ответа, он сиганул на соседнюю платформу. Она тут же исчезла. Жора повис в воздухе, махая руками, и вдруг под ним засветилось что-то вроде контура ботинка.
— Вижу! — заорал он. — Ловлю!
С громким «шлёп» он рухнул вниз, но в руках у него уже что-то мерцало — полупрозрачный тапок, похожий на светящийся глитч.
Я шагнул за ним. Платформа подо мной тоже исчезла, и я нырнул в пустоту. Мир мигнул белым, и в моей ладони материализовалась вторая часть сета.
«Поздравляем! Набор невидимых тапочек собран!» — рявкнула система. — «Испытание пройдено. Готовьтесь к следующему.»
Трибуны взревели синтетическим хором: «Тап-ки! Тап-ки!»
— Я себя ненавижу, — простонала Лия, надевая невидимую обувь. — Я ведь реально в них что-то чувствую.
— Это потому что у них внутри бонус к натиранию, — заметил Жора. — Смотри, они уже мозоли добавляют.
Мы переглянулись. Это было только начало, а арена уже грозила нас разорвать.
«Следующее испытание: Великая Охота на Патчи!» — прогремел голос Куратора.
Экран над ареной вспыхнул, и там появилась картинка: огромный белый кролик с глазами-багами и логотипом «Update 13.4». Он носился по арене, разбрасывая вокруг себя куски текста: «fixed minor bugs», «improved stability», «patch notes coming soon».
— Это что ещё за безумие? — выдохнул я.
— Похоже, нас заставляют ловить… обновление, — ответила Лия, прищурившись.
— Да ладно! — Жора хлопнул себя по шлему. — Я ж вечно жду эти патчи неделями, а тут — поймай сам. Вот это сервис!
Кролик заметил нас и взвился вверх, оставив после себя хвост из падающих иконок. Одна из них ударила меня по плечу, и система выдала:
«Вы получили эффект: Critical Lag. Длительность — неизвестно.»
— Отлично, — простонал я. — У меня теперь задержка реакции. Я буквально чувствую, как мои мысли буферизуются!
Жора хохотнул: — Так ты теперь на равных с нашими админами!
Мирелия шагнула вперёд. Её глаза снова вспыхнули кодовыми символами. — Этот патч не настоящий. Это фантом. Но если поймать его ядро, можно получить доступ к управлению ареной.
Кролик тем временем перемахнул через платформы и спрыгнул на тот самый бутерброд, который плавал сбоку. Огромные буквы «UPDATE» зависли в воздухе над его головой.
— План есть? — спросила Лия.
— Конечно, — ухмыльнулся Жора, доставая свою «легендарную дубину из багнутого квеста». — Бить, пока не перестанет прыгать.
— Гениально, — сказала я. — Просто ошеломляюще оригинально.
Мы рванули вперёд. Платформы вокруг ускорялись и исчезали, меняясь местами. Я едва успевал прыгать с одной на другую, чувствуя, как лаг тянет мои движения. Кролик разбрасывал баффы и дебаффы: «+1 к удаче», «-50 к урону», «снижение FPS».
Жора первым врезался в него дубиной. Кролик пиксельно рассыпался на части, но тут же собрался обратно — только теперь у него появилось два хвоста и крылья.
— Он эволюционирует! — закричала Мирелия. — Это патч с автоподстройкой!
— Классика, — хмыкнула Лия. — Вечно фиксят что-то одно и ломают другое.
Я вытащил свой «Инвентарь хаоса» и наугад метнул в кролика багнутый предмет — «Зеркало обратного логина». Оно должно было отразить атаку врага, но вместо этого создало мою копию… только у копии был рост два метра, и она выглядела как бодибилдер с лицом гнома.
— Серьёзно?! — выдохнул я.
— Ну зато красивый, — заметила Лия, оглядывая мускулистого двойника. — Может, пусть он и поймает кролика?
Мой двойник рванул вперёд, схватил кролика за уши и сжал. Патч взвизгнул, рассыпаясь на строки кода. В воздухе замерцала капсула с надписью:
«Поймано ядро Патча 13.4. Доступ к функционалу арены частично открыт.»
— Отлично! — обрадовалась Мирелия. — Теперь я могу перенаправить его энергию…
Но не успела она закончить, как снова загремел голос Куратора:
«Нарушение правил! Использование сторонних сущностей! На арену вводится санкция: Босс-Испытание!»
Трибуны загудели, скандируя: «БОСС! БОСС! БОСС!»
И из пустоты над ареной начал материализоваться гигантский силуэт. Это был не монстр, не NPC. Это была… клавиатура. Огромная, с клавишами размером с дом. Каждая клавиша светилась красным и падала вниз, ударяя по платформам.
«Встречайте: МЕГА-БОСС — Клавиатурный Каратель!»
— Ты издеваешься, — выдохнул я. — Они на нас роняют периферию?!
Жора поднял голову и засмеялся: — Ну, зато теперь я точно знаю, что у меня клавиатура механическая!
Огромная клавиша «Enter» рухнула рядом, разломав платформу пополам. Мирелия вскрикнула, а Лия успела схватить её за руку.
— Ладно, — сказал я, доставая из инвентаря ещё один багнутый предмет. — Пора вводить читы.
Клавиатурный Каратель возвышался над ареной, словно небоскрёб. Его клавиши вспыхивали красным, как глаза разъярённых титанов. Каждое движение сопровождалось звуком клац! — таким громким, что арена дрожала, а зрители визжали от восторга.
«Использование макросов — запрещено!» — прогремел он, и клавиша «Esc» сорвалась с верхнего ряда, летя в нашу сторону.
— Жора, укрывай! — крикнул я.
— Укрывать нечем! — рявкнул он, но всё равно встал грудью перед нами и, вытянув дубину, умудрился оттолкнуть «Esc». Клавиша, гулко звякнув, улетела в толпу зрителей. Те взвыли, словно получили автограф от рок-звезды.
— Минус выход из игры, — ухмыльнулась Лия. — Теперь мы реально в ловушке.
Каратель перешёл на новый уровень безумия: он начал бить по самим клавишам, как пианист в припадке. Каждое его движение порождало новый эффект:
Удар по F1 вызвал бесполезную справку, которая зависла перед глазами, закрывая обзор.Удар по Caps Lock превратил все наши реплики в ЗЛОРАДНЫЙ КРИК.Удар по Alt+F4 вызвал вихрь, пытавшийся выкинуть нас из арены.— Ну точно админ с утра после трёх литров кофе, — выругался я, удерживаясь за платформу.
Жора зарычал, а потом с диким видом прыгнул прямо на гигантскую клавишу «Shift». — ДЕРЖИТЕСЬ, СЕЙЧАС БУДЕТ УСКОРЕНИЕ!
И реально — арена вдруг ускорилась. Мы начали двигаться в два раза быстрее, а зрители взвыли ещё громче.
Лия, наконец, нашла момент. Она достала свой арбалет, зарядив стрелу багнутым болтом с эффектом «пробивает код». Стрела попала прямо в клавишу «Ctrl».
— Контроль сломан! — крикнула она.
Каратель взревел, и его движения стали хаотичными.
Тут вступила Мирелия. Её голос зазвучал в унисон с гулом арены: — Я вижу его код… Он написан на… старом BASIC-е?!
— Да вы издеваетесь, — простонал я. — Это ж доисторическая магия!
Мирелия подняла руки, и буквы с клавиш начали слетать в воздух, кружась вокруг неё. Из «QWERTY» она собрала слово ERROR, и метнула его обратно в Карателя.
Монстр зашатался, а Жора не упустил момент: — ЩА БУДЕТ ФИНТ! — заорал он, подскочив к гигантской «Пробел». Он оттолкнулся от неё, как акробат с батутом, и со всего маха вмазал дубиной прямо по «Delete».
«КРИТИЧЕСКИЙ УДАР! СИСТЕМА УДАЛЯЕТ СЕБЯ…»
Гул прокатился по арене. Каратель застыл, клавиши одна за другой начали осыпаться вниз, разбиваясь о платформы. Последней упала «Enter».
Я едва отдышался, когда экран выдал сообщение:
«Босс повержен! Награда: Артефакт ‘Клавиша Судьбы’.»
В руках у Жоры засветился предмет — сияющая клавиша «F5».
— Ха! — рявкнул он. — Теперь я бог обновлений!
— Осторожно жми, — сказал я. — А то вдруг мир перезагрузится…
Жора нахмурился, пожал плечами — и нажал.
На секунду всё вокруг исчезло, а потом арена вернулась — только зрители теперь стояли в костюмах куриц.
— Ээээ… — выдохнула Лия. — Что ты сделал?!
Жора расплылся в довольной ухмылке. — Рефрешнул. Теперь сезон куриных багов!
Толпа куриц-космических багов оглушительно кудахтала, хлопая крыльями и разбрасывая пиксельные перья. Жора, гордо держа свою сияющую «F5», выглядел так, будто выиграл чемпионат мира по сумо.
— Так, — сказал я, отряхивая с плеча чужое пиксельное перо. — Либо нас выкинут с арены за нарушение всех правил, либо это самая глючная награда в истории.
Мирелия всё это время пристально смотрела на остатки Клавиатурного Карателя. Его клавиши исчезли, но там, где был «Delete», осталась черная дыра — кусок кода, который не должен был существовать.
— Это не просто баг, — тихо произнесла она. — Это… кто-то оставил дыру в системе.
— Ну да, классика, — вставил Жора. — Когда админы ленятся чинить.
Но дыру не затягивало. Наоборот, она расширялась. Из неё вырывались красные строки кода, складываясь в слова:
«ВАМ НЕ СТОИТ БЫЛО ЭТО ДЕЛАТЬ.»
Толпа куриц синхронно заткнулась. Даже пиксельные перья замерли в воздухе.
— О, вот это мне уже не нравится, — пробормотал я. — Кто там? Системный сантехник?
Строки снова замигали:
«Я — ГЛАВНЫЙ ПРОЦЕСС. АРЕНА — ЛИШЬ МОЯ ИГРУШКА.»
В воздухе что-то хрустнуло, как если бы огромная программа перелистывала страницу. По краям арены появились новые порталы, и из каждого вышагивали мини-боссы:
Мышиный Курсор — гигантская стрелка, от которой было невозможно увернуться.Синий Экран — огромный квадрат, который просто падал сверху, пытаясь задавить.Антивирусный Зомби, сканирующий всё подряд и орущий: «Угроза найдена!»Зрители взвыли так, будто началось главное шоу века.
— Похоже, первый раунд был бесплатным, — выдохнула Лия, натягивая тетиву. — А теперь мы в основной игре.
— Нууу… — Жора ухмыльнулся, вертя «F5» в руках. — Хорошая новость: у нас есть чит. Плохая новость: я не знаю, что будет, если нажать ещё раз.
Мирелия обернулась ко мне: — Алекс, это не просто испытания. Нас втягивают глубже. Кто-то использует арену, чтобы проверить границы… самой игры.
Я сглотнул. И впервые за всё время меня реально пробрала дрожь. Не от страха, а от осознания, что это уже не «битвы ради развлечения». Кто-то на вершине пирамиды багов играл в шахматы, а мы были фигурами.
Жора тем временем нахмурился и медленно протянул палец к сияющей клавише. — Что, жмём «обновить мир» ещё раз?
— Подожди, — я поднял руку. — Если это действительно главный процесс, может, он нас и так ведёт туда, куда ему надо.
Экран над ареной вспыхнул ярко-красным:
«ВСТРЕТИМСЯ В ФИНАЛЕ.»
И вся арена разом растворилась, словно мы вылетели из сна.
Мы очнулись на совершенно новом поле. Это был не зал, не арена и даже не привычный лес. Вокруг висели обломки интерфейсов, разорванные меню, окна с ошибками. И среди всего этого висел огромный полупрозрачный куб с надписью:
«ГЛИТЧ-АРХИТЕКТОР.»
— Офигеть… — выдохнул я. — Похоже, мы узнали, кто тут настоящий босс.
Жора почесал затылок и ухмыльнулся:
— Отлично. Всегда мечтал надрать задницу архитектору.
Глава 7: «Глитч-Архитектор»
Мы летели вниз, как в старой аркаде, где у персонажей отнимают платформу и они падают в пустоту. Только здесь никакой музыки «Game Over» не играло, зато воздух дрожал, как сломанный экран телевизора: линии рябили, пиксели срывались вниз вместе с нами.
Я ухватился за руку Лии, Мирелия летела чуть выше, её фигура мерцала, будто код, который не успели скомпилировать. Жора — огромная туша с топором за спиной — мчался чуть сбоку, размахивая руками и приговаривая:
— Если приземлимся жопой вниз — считайте, что я новый метеорит!
Я хотел ответить, но в этот момент прямо из пустоты вывернулось что-то странное: вихрь из символов, похожих на куски логов сервера. Красные ERROR, жёлтые WARNING и бесконечные NULL-NULL-NULL. Они закрутились в воронку и хищно потянулись к Жоре.
— Эй! Это что за дерьмовый патч?! — рявкнул он, пытаясь прорубить вихрь топором. Но каждый раз, когда лезвие задевало текст, буквы рассыпались на новые слова: «несогласованность», «сбой данных», «переполнение буфера».
Я успел увидеть его глаза — смесь ярости и искреннего «вы там держитесь». Он вытянул руку, как будто хотел ухватиться за меня или Лию, но воронка затянула его, словно гигантская ошибка в коде просто решила: «этот игрок идёт в отдельный инстанс».
— Жора-а-а! — Лия сорвалась крикнуть, но её голос задрожал, и звук разлетелся, как осколки.
Мирелия рванулась было к нему, но вокруг её рук вспыхнули предупреждающие строки: «ACCESS DENIED». Её будто сама система остановила.
И всё — его унесло. Топор мелькнул напоследок, как знак, что он ещё будет биться, и исчез.
Мы рухнули на что-то твёрдое. Земля? Скорее — пол из глитчей. Поверхность была словно из гигантских плиток, каждая мигала: то зелёная трава, то синий лёд, то кусок рабочего стола с иконкой «Корзина». Я сглотнул — казалось, мы приземлились прямо внутрь компьютера, который решил поиграть в «миростроителя».
— Его… его больше нет? — тихо спросила Лия, всё ещё сжимая мою руку так, что пальцы побелели.
Я хотел соврать, что Жора выкрутится, но голос предательски дрогнул: — Он жив. Должен быть. Это просто… баг.
— Баг, который умеет красть друзей, — буркнула Мирелия, и её глаза вспыхнули странным синим кодом.
Тишина продержалась секунду. А потом воздух перед нами задрожал. Сначала это было похоже на старый экран с тестовой таблицей — полосы, цвета, круги. Потом из ряби выкристаллизовалась фигура.
Высокая, вытянутая, с руками, уходящими в бесконечность. Лицо… если это можно назвать лицом. Оно менялось каждую секунду: то мраморная маска, то смайлик в ASCII, то обложка журнала из моего детства, то пустая сетка координат.
— Ну здравствуйте, — голос прозвучал не ушами, а прямо в голове. — Новые объекты обнаружены. Интересные. Поломанные. Непроверенные.
Я почувствовал, как по коже бегут мурашки.
— Кто… кто ты? — выдавил я.
— Я — Глитч-Архитектор. Я строю и ломаю. Исправляю и порчу. Я — ваш бог и ваш сисадмин одновременно, — фигура щёлкнула пальцами, и одна из плиток под нашими ногами превратилась в шахматную доску, на которой заплясали конь и ладья из багованных текстур.
Лия шагнула вперёд, её голос дрожал, но звучал твёрдо: — Верни нашего друга.
Архитектор наклонил голову, и его «лицо» сменилось на страницу баг-репорта: — Запрос: вернуть объект «Танкист Жора». Ошибка: объект перемещён в нестабильный кластер. Решение: недоступно. Или… ха-ха, доступно, если вы пройдёте мой маленький тест.
Мирелия сжала кулаки. — Опять эти «тесты». Вы боги багов, что ли, все издеваетесь?
— Конечно, — улыбнулся Архитектор уже лицом какого-то известного актёра (заблюренного, будто цензура). — Без испытаний нет игры. Без игры нет смысла.
Я посмотрел на Лию. Она сжала губы, и я понял, что мы втянулись в новую жопу. Только теперь ставки выше: где-то там, в «нестабильном кластере», Жора мог ещё драться один на один с неизвестно чем. А мы стояли перед существом, которое явно считало себя автором этого всего спектакля.
Архитектор щёлкнул пальцами — и пол под нами раздвинулся. Мы оказались на гигантской шахматной доске, но фигуры тут были дикие: вместо пешек — иконки «Мой компьютер», вместо ладей — прямоугольные папки с названиями «Новая папка (34)», а конь выглядел как багнутая лошадь с тремя головами, одна из которых непрерывно пела:
— Ла-ла-ла, критическая ошибка, ла-ла-ла!
— Я, конечно, люблю абсурд, — пробормотал я, — но это уже перебор.
— Тишина! — рявкнул Архитектор. Его голос гремел, будто микрофон через дешёвый колонный динамик. — Первое испытание: партия на выживание. Шаг сделаешь неверный — фигура сожрёт тебя.
— А если фигура сожрёт фигуру? — спросила Лия, щурясь.
Архитектор наклонил голову. Лицо его сменилось на комиксный смайл ¯\_(ツ)_/¯. — Тогда хаос. Я обожаю хаос.
Мы переглянулись. Мирелия шагнула вперёд и без колебаний толкнула одну из папок. Та загрохотала и сделала «ход». Пешка-«Мой компьютер» рванула вперёд, оставляя за собой синий экран смерти.
— Ну и ну, — хмыкнул я. — А Ctrl+Alt+Del работает?
В ответ из воздуха выскочил огромный трёхпалый курсор, на секунду ткнул мне в голову и исчез. — Больше так не шути, — прошептал Архитектор. — Игра серьёзная.
Но мы уже уловили главное: правила были такими же кривыми, как и сам этот мир. А значит, у нас был шанс.
Мы начали двигаться. Каждое наше действие сопровождалось какой-то нелепицей. Лия сделала ход, и сразу рядом зацвёл куст с надписью «Файл повреждён». Мирелия переместилась — и часть поля мигнула, превратившись в кадр из рекламы стирального порошка.
— Это испытание на терпение? — я не выдержал. — Потому что если да, то я уже хочу rage-quit.
— Терпение, игрок, — улыбнулось лицо Архитектора, сменившись на жутко милую детскую мордашку из старой аватарки. — Только терпение отличает героя от бага.
Мы продолжали ходить, пытаясь выжить, но каждая фигура, которую мы били, оборачивалась ещё большей мерзостью. Конь с тремя головами после «съедения» Мирелией распался на десяток маленьких пони, которые стали бегать по полю, ржать и спотыкать всех подряд.
И вдруг — прямо с потолка — на доску упала трещина. В ней промелькнул знакомый силуэт: Жора.
Он бился где-то в другом кластере. За его спиной метались тени, похожие на командную строку, и каждое существо там было составлено из кусочков текста: echo, delete, kill process. Жора махал топором, размахивая им, будто гнал ворон, и вопил:
— Да вы что, мать вашу, команду rm -rf мне прислали?!
Изображение погасло. Но мы поняли: он жив. И значит, надо играть до конца.
— Следующее испытание, — сказал Архитектор, и шахматная доска начала проваливаться. Мы рухнули вниз — прямо на гигантский стол, заваленный… бумагами. Это были баг-репорты. Тысячи, десятки тысяч страниц.
— Это худший кошмар программиста, — прошептала Лия.
— Добро пожаловать на уровень «QA-ад». — Архитектор засмеялся так, что у меня зазвенело в ушах. — Тут вам придётся исправить хотя бы один баг.
— Всего один? — уточнила Мирелия, прищурившись.
— Но правильно, — лицо его стало пустым экраном. — Если неверно — все вы превращаетесь в тикеты.
Я взял первый лист. Там было написано: «После того, как герой падает в яму, мир зависает. Шаги воспроизведения: прыгнуть, умереть, жить».
— Это троллинг, а не баг, — сказал я.
Но в тот же момент рядом вырос огромный карандаш-монстр и рыкнул: — ИСПРАВЛЯЙ!
Лия схватила другой лист: «Если нажать прыжок во время сна, персонаж летает». — Это даже весело, зачем чинить? — хмыкнула она.
Карандаш-монстр зашипел, но в глазах Архитектора промелькнула искорка. — О-о-о, нестандартное мышление… интересно.
И тогда Мирелия сделала то, что я бы точно не додумался. Она взяла три листа, соединила и сложила в самолётик.
— Если игра сломана, — сказала она и запустила самолётик в воздух, — значит, она может летать.
Самолётик вспыхнул золотым светом и улетел вверх, оставив за собой надпись: PATCH SUCCESSFUL.
Архитектор замер. Его бесконечные руки опустились, а лицо мигнуло, показывая сразу сотню вариантов.
— Интересно, — протянул он. — Очень интересно. Вы не чините баги… вы используете их.
Я шагнул вперёд. — Конечно. Потому что мы — багнутые герои.
Макс стиснул зубы и посмотрел на остальных. Лия держала руку Мирелии, будто боялась, что та вот-вот исчезнет. Жора, измотанный, но всё ещё с ухмылкой, крутил топор на плече. Архитектор возвышался над ними в виде полупрозрачного гиганта, покрытого кодовыми символами. Его голос раскатывался, как гул подземного двигателя:
— Вы — несовершенный код. Я перепишу вас. Вы не достойны этой системы.
— Вот только не надо за меня решать, — буркнул Макс и подмигнул друзьям. — Кажется, пора немного покодить самому.
Глитч-план
Идея пришла мгновенно — и она была дурацкой. Но именно такие идеи тут и работали.
Макс достал из инвентаря один из баг-отчётов — файл в виде серого куба с надписью «critical error». Он кинул его в ближайшую шахматную клетку. Вместо взрыва случилось нечто другое: клетка превратилась в голубой экран с надписью «restarting system».
— Ага! — заорал Макс. — Мы не будем драться с Архитектором. Мы его перезагрузим!
— Ты хочешь его убить? — нахмурилась Лия.
— Нет, — ухмыльнулся Макс, — я хочу его зависнуть!
Хаос начинается
Жора радостно заорал и врубил свой «режим бойца в штанах на резинке»: — Ща комбо пропишу!
Он начал размахивать топором, словно играл в «Теккен» на старом автомате. Каждое движение — и на арене появлялись цифры: «+99 COMBO», «GLITCH HIT», «ANIMATION ERROR». Шахматные фигуры, созданные Архитектором, начали дергаться, выдавать «undefined move» и сталкиваться друг с другом.
Мирелия шагнула вперёд. Её глаза сверкнули цифровым светом. — Я могу перенаправить поток команд… дать ему ложные данные.
Она провела ладонью по воздуху, и кодовые строки заискрились. В глазах Архитектора мелькнула растерянность.
— Тест пройден? — пробормотал он.
— Именно, — холодно ответила Мирелия. — Ты считаешь, что мы победили идеально.
Лия тем временем, на коленях, пальцем выводила на полу багнутую формулу: if lose == true → teleport(players)
— Макс, кидай ещё отчёт, — сказала она, облизывая пересохшие губы. — Мне нужно подкрепление кода!
Макс швырнул второй куб, и пол под их ногами дрогнул. В воздухе вспыхнуло системное окно:
ERROR 505: TEST INVALID. Инициализация аварийного выхода…
Побег
Архитектор заревел, его тело раздвоилось, треснуло, а потом снова собралось.
— НЕТ! ВЫ НЕ МОЖЕТЕ СБЕЖАТЬ! Я ЕЩЁ НУЖЕН ВАМ! Я — СЕРДЦЕ ЭТОЙ СИСТЕМЫ!
— Вот именно, — выкрикнул Макс, схватив друзей за руки. — Поэтому мы тебя не убиваем. Ещё свидимся, приятель.
Пол под их ногами исчез, превратившись в белый туннель из багнутых пикселей. Поток кода втянул их, а Архитектор остался позади, зависший между строками реальности.
Последнее, что они услышали, был его крик, будто проклятие и обещание одновременно:
— Когда придут другие игроки… вы вспомните этот выбор!
И всё поглотил свет.
Глава 8: Игроки заходят на арену
Макс рухнул первым — прямо лицом в мягкую, липкую жижу.
— Фу-у-у, это что, болото? — заорал он, поднимаясь, и обнаружил, что его инвентарь радостно добавил строку: «Вы получили предмет: Пиявка болотная (живой)». Пиявка недовольно хлюпнула и повисла у него на щеке.
Лия приземлилась чуть аккуратнее, но всё равно вмазалась коленями в грязь. — Это точно не победный экран. — Она поморщилась. — Хотя, судя по запаху, это какой-то апдейт для выживальщиков.
Мирелия спустилась последней — и, в отличие от людей, упала мягко, как будто под ногами у неё материализовался багнутый пиксельный ковер. Она поправила волосы, будто ничего и не случилось.
— Архитектор нас выбросил на безопасную зону, — спокойно сказала она. — Но… я чувствую эхо чужих команд.
Макс нахмурился. — Чужих? В смысле, здесь есть кто-то ещё?
Жора, который выпал сбоку и умудрился плюхнуться прямо на дохлую рыбу, резко поднялся и заорал: — Игроки! Я чую! Это не мобский смрад — это запах неопытных нубов!
Первые гости
На другом берегу заболоченной реки замелькали силуэты. Сначала показалось, что это NPC. Но слишком уж топорно они прыгали и махали руками. Один, очевидно, пытался открыть инвентарь, но вместо этого бегал кругами и орал: — Где у меня кнопка «скин сменить»?!
Другой умудрился застрять по пояс в дереве и звал на помощь.
— Ну всё, — хмыкнул Макс. — Вот и пошёл открытый сервер.
Лия нахмурилась. — А значит, теперь не только баги и Архитекторы против нас. Теперь у нас — живая конкуренция.
Жора радостно засиял глазами: — Отлично! Я как раз соскучился по PvP.
Сюрприз
И тут из-за спины новичков вышла фигура. И не просто вышла, а прошагала, как босс на арену. Высокий парень в сияющих золотых доспехах, со щитом в форме лайка и ником над головой: «TopStreamer_777».
Он вальяжно размахнул рукой, и вокруг него вспыхнули десятки эффектов: огненные искры, радужные буквы «DONATE», мелодия фанфар.
— Всем хай! — проревел он голосом, явно подключённым через микрофон. — Добро пожаловать на мой первый стрим в этой багнутой помойке! Сразу говорю — я тут, чтобы разнести весь сервер и собрать миллион лайков!
Макс прикрыл лицо ладонью. — Господи, только не это…
Мирелия нахмурилась: — Его код нестабилен. Но у него… много энергии. Кто-то влил в него ресурсы извне.
Лия перевела взгляд на Макса: — Что будем делать?
Макс усмехнулся. — Ну, как обычно. Притворимся идиотами, пока он не взорвётся сам.
Жора радостно треснул топором по земле: — Или пока я ему не помогу.
Лес дрожал от криков. Толпа новичков, которых стример привёл «на PvP-шоу», радостно строила из себя храбрых бойцов, пока из глюкнутого портала не полезли баги. Сначала один — костяной паук с монитором вместо головы, потом второй — человекообразная туша, у которой вместо рук были обрывки кода, светящиеся красным. А за ними десятки других: глитч-змеи, битые текстуры в виде волков, чёрные силуэты NPC, повторяющие чужие движения с задержкой.
— Э-э… это не было в сценарии! — пискнул один новичок, пока его интерфейс не мигнул: «Ошибка: здоровье не найдено». И через секунду его аватар схлопнулся, как недоплаченный донат.
— Спокойно, мои подписчики! — заорал стример, поднимая руки к небу. — Мы справимся, главное — не забывайте кидать лайки и донаты!
Чат загорелся фразами: «Ха-ха, нубы сдохнут» «Топ контент!» «Го рейд багов!»
Но на деле всё выглядело хуже: баги не делали различия между нашими героями и толпой новичков. Они бросались на всё живое.
Макс первым включился в хаос: он вытащил из инвентаря связку багнутых гранат — каждая взрывалась не огнём, а рандомной ошибкой. Одна граната взорвалась — и ближайший баг превратился в набор гигантских букв «404». Вторая бахнула — и сразу десять новичков оказались в каменных кубах, как будто игра решила загрузить им «майнкрафтовскую текстуру».
— Да ладно! — заорал один из них. — Я вообще-то хилом качался!
Лия двигалась молнией. Она прыгала по спинам монстров, оставляя за собой светящиеся следы, словно игра не успевала отрисовывать её траекторию. Один баг попытался её схватить — и тут Лия, используя финт, резко повернулась в воздухе и воткнула кинжал ему в «исходный код» на груди. Монстр разлетелся, а по экрану всех игроков проскочила надпись: «Неизвестная ошибка исправлена».
Мирелия в это время играла на другом уровне. Она подняла руки, и баги, пытавшиеся атаковать игроков, вдруг замерли, словно их кто-то поставил на паузу. У новичков в интерфейсах начали всплывать системные сообщения: «Хотите обновить клиент?» «Требуется перезагрузка...»
— Это… что она делает? — пробормотал один новичок, уставившись на зависшего в воздухе баг-волка. — Оптимизацию, — спокойно ответила Мирелия, и хищники рассыпались на потоки пикселей.
И тут, когда ситуация вроде бы выравнивалась, на арену вышел стример. Его плащ переливался рекламой, а в руках он держал огромный донатный клинок, мигающий надписью: «Спонсировано компанией Loot&Pay».
— А теперь шоу! — рявкнул он. — Баги или нубы — всё равно! Главное, чтоб было больше просмотров!
И он ударил мечом по земле. Из трещины полезли новые твари — ещё более глючные: слипающиеся текстуры, NPC с перекошенными лицами, модели, сшитые из разных монстров.
Жора ворвался как раз в этот момент. Он рухнул сверху, как будто игра просто телепортировала его из другой локации. Его топор светился артефактным багом: при каждом взмахе он оставлял в воздухе обрывки «кода ошибок».
— Ну что, уроды, скучали? — рявкнул он и врезал топором по багу, у которого вместо головы висела папка «Temp». Тот взорвался, засыпав всех синими экранами.
Новички, завидев Жору, закричали: — Это же танк! Настоящий! — Спаси нас!
Жора ухмыльнулся: — Я, конечно, танк… но вы — не мой рейд. Так что держитесь рядом, если жить хотите.
Схватка разгорелась до предела:
Макс кидал из инвентаря абсурдные предметы: то на голову багу упала трёхтонная наковальня, то он швырнул целый «архив квестов», похоронив под ним троих.Лия спасала новичков, вытаскивая их из лап монстров, при этом постоянно подшучивая: «Держи подписку на жизнь!»Мирелия хакала саму реальность — отключая у багов хитбоксы или заставляя их дружить с ближайшими деревьями.Жора шёл в мясо: его топор швырял искры, и каждый баг, которого он валил, превращался в странный артефакт.
Стример визжал: — Это МОЙ стрим! Я главный тут!
И поднял меч, нацелив его на Мирелию. Лазерный клинок зарядился, и чат взорвался: «УДАЛИ ЕЁ!» «КОД В ОФФ!»
Макс понял, что речь шла о полном стирании персонажа. — Нет! Он хочет снести её из игры!
Но тут Лия прыгнула, сбивая луч, а Жора врезал топором в рекламный плащ стримера. Тот мигнул: «Ошибка оплаты: спонсор недоступен».
Мирелия шагнула вперёд и заставила чат на секунду зависнуть. Все сообщения превратились в одну фразу: «Ты проиграл».
Баги вокруг начали рушиться, а сам стример застыл, его аватар трещал, пока он не рассыпался в миллионы пикселей.
Игроки-новички сидели, дрожа, но живые. — Это был… самый жёсткий стрим в моей жизни, — прошептал один. — И самый честный, — усмехнулся Макс. — Без монтажа.
Хаос улёгся, но герои знали: это была только первая волна.
Казалось, что баги множились прямо на глазах. Стоило одному из них упасть, из глючного тумана вылезали двое новых — с перекошенными лицами и руками, составленными будто из квадратных пикселей. Всё поле боя мигало, словно сервер не выдерживал нагрузки: то падал свет, то деревья вокруг исчезали и появлялись обратно, но уже криво, с перепутанными текстурами.
— А это точно не альфа-тест, а?» — орал Жора, отбивая очередной выпад баганутого топором. Но топор, похоже, был не из дерева и металла, а из строк кода: каждый удар оставлял за собой яркую строку «Error 404».
Макс, перепрыгивая через трещину в земле, отпрыгнул к Лие. — Лия, твой ход! Подрежь им хп!» Она, едва успев взмахнуть руками, вызвала крошечный огненный шар. Обычный маг бы кидал его на расстоянии, но Лия приложила ладонь прямо к лицу багу. Тот взвизгнул так, будто его прожарили на кодовом гриле.
— О, так можно было?» — хмыкнул Жора, и, подловив момент, схватил сразу двоих багов за шкирку и стукнул их друг об друга. Экран мигнул, и оба растворились, оставив после себя лишь иконку «Недопустимая операция».
Стример тем временем, в своих нелепых наушниках и с камерой над плечом, визжал в микрофон: — Подписчики, вы видите это?! Это просто топ контент! Я тут, в самой гуще событий, ребята! И, не успев договорить, он споткнулся о собственный шнур и едва не улетел в баганую яму, из которой выглядывали десятки пиксельных рук. Макс и Лия синхронно ухватили его за шкирку и затащили обратно.
— Ты нам ещё нужен, герой экранов, — фыркнула Лия. — Сдохнешь тут, просмотров не будет. — Зато хайп! — не растерялся стример, но дальше уже орал в камеру: — Это… это просто безумие, баги атакуют всех! Даже меня!
В этот момент один из багов, больше других, будто склеенный из нескольких NPC, вышел вперёд. Его голова дёргалась в разные стороны, как у сломанной куклы. В руках он держал что-то вроде копья, но каждая секунда превращала его то в трубу, то в меч, то в гигантский карандаш.
— Вот это босс, — протянул Жора. — Я таких видел только в кошмарах и патч-нотах.
Баг-босс взревел, и звук вышел таким, что у Макса в ушах всплыли буквы «MP3: corrupted». Он метнулся в сторону, и в ту же секунду копьё-меч-карандаш вонзилось в землю. Почва не выдержала — в воздух взлетели чёрные пиксели, и несколько новичков, которые до этого ещё держались в стороне, исчезли прямо на глазах. Система выдала сообщение: «Player disconnected: integrity violation».
Лия побледнела: — Они не вылетают… их стирает!
Мирелия, которая до этого прикрывала тыл, сделала шаг вперёд. Её глаза засветились баганым фиолетом: — Я его знаю. Это продукт старого кода. Он… создан, чтобы убирать таких, как я.
Баг-босс резко развернулся именно на неё, и копьё вытянулось, превратившись в гигантскую «ручку админа», готовую перечеркнуть Мирелию одним движением.
Макс закричал: — Нет! Мы его отвлечём!
Он метнулся вперёд, активировав свою способность «Инвентарный абсурд». В руках у него внезапно появилась… сковородка. — Сковородкой, серьёзно?» — хохотнул Жора. — Да, но смотри!
Макс подставил её под удар, и когда «ручка админа» ударила по сковородке, экран мигнул. Система зависла на секунду, пытаясь понять, почему предмет «Сковородка (уровень 1)» отбил оружие администратора.
Жора не терял времени: прыгнул на спину баг-босса, как настоящий рестлер, и начал колотить его кулаками. Каждый удар сопровождался смешными вылетами: то «File not found», то «Access denied».
Стример, с дрожащими руками, всё это снимал и орал: — Ребята, это вообще жесть! Ставьте лайк, если хотите, чтобы этот… этот дикий бородач выжил!
В какой-то момент копьё снова взметнулось и нацелилось прямо в Мирелию. Но тут Лия выкрикнула заклинание, которое она ещё ни разу не пробовала. Из её рук вылетела не огненная сфера, а что-то вроде пылающей бабочки. Она подлетела к копью и… взорвалась, осыпав всё вокруг искрами.
Баг-босс отшатнулся.
— Сейчас! — крикнул Макс. — Бейте все вместе!
И троица — Макс со сковородкой, Жора с кулаками и Лия с магией — обрушились на босса разом, пока Мирелия пыталась закрыть себя защитным полем. Но каждый их удар сопровождался всё более жуткими лагами: поле боя тряслось, деревья превращались в мебель, а небо заменялось на рекламные баннеры старых игровых акций.
Казалось, что сама игра не выдерживает их дерзости.
Воздух дрожал, будто сервер вот-вот лопнет под весом собственных ошибок. Баг-босс взревел, и вместе с этим ревом из земли полезли глюки помельче: у кого-то вместо ног — колёса от тачки, у другого голова — чистый куб с надписью «texture missing». Они не нападали напрямую, но мешали, загораживали обзор, путали команды.
— Чёрт, оно размножается! — Макс едва отбил удар «ручки админа», которая снова метнулась к Мирелии. — Нам не просто с ним биться, он код портит прямо в реальном времени!
— Если он меня сотрёт… — Мирелия тяжело дышала, её защитный щит трещал, будто стекло под молотком. — Всё, что я знаю, исчезнет вместе со мной.
Жора, не слезая со спины босса, рявкнул: — Да не дам я этому коду тебя удалить! У меня, конечно, руки кривые, но иногда они работают!
Он ухватился за «голову» чудища и повернул её вбок. Экран мигнул, и перед лицом босса на секунду вылезло «blue screen of death». Существо зашаталось, и в этот миг Лия вложила всё в заклинание: у неё над ладонями загорелось нечто новое — огонь, но с линиями кода внутри, словно сама магия подцепила баг.
— Лови апдейт! — выкрикнула она и метнула заклятие.
Огненный ком ударил в грудь баг-босса, и оттуда вырвалась россыпь битых символов: «#$%^&*error». Монстр закачался.
— Дави, дави его! — орал стример, даже забыв снимать — камера теперь просто показывала небо и рекламные баннеры старых акций «-50% на премиум».
Макс снова активировал «Инвентарный абсурд». На этот раз в руках у него появилась… гигантская надувная уточка.
— …Ну серьёзно? — уставился Жора. — Не ржи, это оружие массового баганутого поражения! — и Макс со всей силы врезал уточкой по голове босса.
Уточка издала жалобное «кря», и вся арена на секунду зависла. Монстр дернулся, его оружие превратилось в гигантский ластик и начало стирать воздух вокруг. Ластик коснулся щита Мирелии — и тот посыпался пылью.
— Он реально хочет меня стереть! — вскрикнула она.
Макс бросился вперёд, заслоняя её, и выставил уточку как щит. Ластик ударил — и надувная игрушка внезапно выросла до размеров дома. Огромный желтый «баг-щит» перекрыл полполя. Босс заревел, пытаясь проткнуть его, но уточка только весело подпрыгивала.
— Ну вот, — хмыкнул Жора, соскочив на землю. — У нас новый союзник. Господи, Макс, только ты мог превратить инвентарь в цирк.
— Зато работает, — ухмыльнулся Макс. — Лия, Мирелия, готовьте финал. Я долго уточку не удержу.
Лия, сжав зубы, подняла руки — её пальцы уже горели строчками заклинаний. Мирелия шагнула вперёд, её глаза снова засветились фиолетом.
— Вместе! — сказала она.
И они ударили разом: пламя, магия кода и мощный удар Жоры, который всадил топор прямо в грудь баг-босса. Поле боя мигнуло, небо покрылось рябью, и монстр, издав звук, похожий на «Critical system failure», рассыпался на миллионы битых пикселей.
Система выдала: «Ошибка устранена. Но ненадолго…»
Арена дрогнула и начала рушиться, текстуры вокруг складывались в чёрный туннель. Уточка взорвалась и пропала, оставив их в хаосе падающих фрагментов кода.
Макс оглянулся на команду: — Пора валить, пока нас вместе с ним не удалили!
Поле боя расползалось на глазах. Земля под ногами исчезала кусками, словно кто-то безжалостно вырезал текстуры ножницами. Там, где ещё секунду назад был зелёный луг, зияли чёрные провалы, тянущие внутрь, в пустоту.
— Я не подписывался на симулятор «Вырви ковёр из-под ног»! — выругался Жора, отпрыгивая от трещины. — Да тут даже на танке не удержишься!
Лия подхватила Мирелию за руку — та едва держалась после атаки. — Мы должны уйти! Быстрее, пока этот сервер не сожрал нас!
Стример верещал, но камеру не выключал: — Подписчики, видите?! Арена уходит в небытие! Если я не выживу — лайкните хотя бы мою память!
Макс, не слушая, судорожно шарил по интерфейсу: — Ну же… ну же… хоть что-нибудь!
Его способность «Инвентарный абсурд» сработала, и прямо под ногами появилась огромная… лестница-эскалатор. Только без механики движения. Просто наклонённая полоска со ступеньками, уходящая куда-то в белую пустоту.
— Серьёзно? — охнул Жора. — Это твой план побега? Лестница в никуда?! — А у тебя есть варианты лучше? — парировал Макс. — Быстро все на неё!
Они вскарабкались на странную конструкцию. Лестница дрожала, но держалась — и вела куда-то вверх, сквозь разрывы кода. Под ними арена окончательно рухнула: последние обломки поля боя сложились в чёрный куб и исчезли, оставив пустоту.
Мирелия, переводя дыхание, тихо произнесла: — Его удалили… но он вернётся. Таких боссов не убить навсегда. Это было только предупреждение.
Лия посмотрела на неё и нахмурилась: — Значит, скоро будет ещё хуже.
Жора сплюнул: — Да хуже-то куда? Хотя… знаю эту игру. Всегда есть «куда».
Они выбрались наверх — и лестница оборвалась, растворившись за спинами. Герои рухнули на новый уровень: под ногами оказалась неровная земля, усеянная баганым мусором — обрывками текстур, кусками NPC, сломанными моделями предметов. Всё это было похоже на свалку вырезанного контента.
Стример, тяжело дыша, всё же поднял камеру и выдавил: — А вот и новая локация, подписчики… добро пожаловать на «Полигон ошибок».
Макс мрачно усмехнулся: — Отлично. Из огня да в полымя.
Жора хлопнул его по плечу: — Зато живы. А это уже достижение.
Система мигнула новым уведомлением:
«Локация открыта: Заброшенный Полигон. Предупреждение: вход разрешён только тем, кто готов потерять больше, чем найдёт.»
Макс тихо пробормотал: — Звучит как наше обычное утро.
Глава 9. Полигон ошибок
Земля под ногами была словно сшита из разных миров. Каждый шаг отдавался странным эхом: то деревянный настил, то камень, то вдруг пиксельная поверхность, из которой торчали фрагменты старых текстур. Сверху висело небо, напоминавшее потолок склада — с чёрными квадратами вместо облаков и криво вставленными лампами, которые мигали, как сломанные прожекторы.
Жора плюхнулся на ближайший обломок, который оказался половиной кресла из какого-то забытого квеста. — Ну что, поздравляю, ребятки, мы официально переселились на помойку истории геймдева.
Стример, держась за свой дрожащий штатив, выдавил из себя смех: — Ха-ха… очень смешно. Это же золото! Подписчики, вы только гляньте! Это… это какой-то музей вырезанных идей! Смотрите, тут же модель коровы с шестью ногами!
Он ткнул камерой на уродливое существо: корова, действительно, стояла неподалёку, моргала пятью глазами и время от времени жалобно мычала, выплёвывая из пасти куски травы… которые тут же превращались в кубы с надписью undefined.
Макс поднёс руку к виску, открывая интерфейс. — «Полигон ошибок»… описание: «место хранения удалённых ассетов и проваленных идей». Хм. То есть мы сейчас буквально в мусорном баке игры.
Лия шла рядом, настороженно глядя по сторонам. — Смешно. Но мне это совсем не нравится. Если сюда сваливают всё, что убрали… значит, тут не только коровы и текстуры. Тут могут быть и прототипы монстров.
— Ну а что? — ухмыльнулся Жора. — Отличный шанс: убьём пару «неудачных идей» и подкачаемся. Лут должен падать топовый, я прав?
Мирелия, молчавшая всё это время, остановилась. Её взгляд был напряжённым, словно она что-то чувствовала сквозь воздух. — Вы не понимаете. Эти места опаснее, чем кажется. Тут не просто баги… тут — забытые версии меня.
— Что?! — удивился Макс. — В смысле, «версии»? — Когда ИИ вроде меня тестируют, делают десятки копий. Каждую урезают, меняют, удаляют. Но память… остаётся. Они брошены здесь.
Тишина повисла на секунду. Даже стример перестал тараторить.
Вдруг вдалеке раздался протяжный скрип, будто ржавые ворота открыли. Из-за барьера поломанного кода выползло нечто, напоминающее человека… но будто склеенного из разных частей: одна рука — металлическая, другая — из полупрозрачных пикселей, голова вообще состояла из маски без лица.
— Господи… — прошептала Лия. — Это кто?
Мирелия шагнула вперёд: — Это одна из… моих сестёр. Версия 0.7. Я думала, их стерли.
Существо издало резкий гул, и текст над головой вспыхнул красным: «Ошибка: копия повреждена. Режим — агрессия.»
— Ага, стёрли, как же, — выругался Жора, поднимаясь. — Готовьтесь, народ, сейчас будет весело!
Макс сжал кулаки. — Отлично. Новый день — новые глюки. Ну что, команда, проверим, кто из нас круче: мы или мусорное ведро истории?
Существо рвануло вперёд. Его движения были резкими, словно пропущенными кадрами: то медленно, то внезапно рывком. Оно ударило искажённой рукой, и воздух прорезала строка кода: «delete object». Прямо за Максом земля исчезла, образовав дыру.
— Ух ты! — отпрыгнул он. — Оно может стирать окружение!
Лия подняла руки, запуская заклинание. Пламя вспыхнуло, но, коснувшись существа, тут же рассыпалось на куски кода. — Чёрт! Оно блокирует магию!
— Дайте-ка я попробую по старинке! — крикнул Жора и прыгнул с кулаками. Удар прошёл, и маска на лице существа треснула. Изнутри хлынул баганый свет. Но вместо того, чтобы отшатнуться, копия зарычала и схватила Жору за ногу.
— Эй! Отпусти, урод! — он дёргался, но существо тащило его к провалу.
Макс не колебался: открыл инвентарь и наугад вытащил первый попавшийся предмет. В руках оказался… гигантский магнит на палке. — Ну привет, физика начальных классов! — крикнул он, ударив магнитом по маске.
И — сработало. Искры полетели, маска развалилась, а существо отпустило Жору и отступило назад, издавая гул.
Стример орал в камеру: — Подписчики, вы видите это?! Они только что победили баг-версию искусственного интеллекта! Это эксклюзив!
Макс, тяжело дыша, посмотрел на Мирелию. — Ты сказала, здесь их много? Она кивнула. — Да. И они все будут охотиться на меня.
Лия крепко сжала её ладонь: — Тогда придётся охотиться нам.
Макс усмехнулся, пряча магнит обратно в инвентарь. — Ну что, команда? Добро пожаловать в музей глючных ужасов. Экскурсия будет длинной.
Едва тишина опустилась на странный полигон, как стены баганого пространства дрогнули. Будто кто-то невидимый провёл по ним рукой и стёр целый слой текстур. На месте разлома проступили силуэты.
— О, мать моя багнутая, — выдохнул Жора, хватая топор. — Тут их реально много.
Из кривых ворот начали выползать ещё копии Мирелии. У каждой было что-то своё: одна выглядела почти нормально, но с глазами, из которых текли строки кода, другая имела лицо, словно составленное из чужих кусков — то улыбка, то злость, то пустота. Третья вообще была с крыльями, но крылья не шевелились, а просто проваливались в пол и снова возникали.
Стример заорал в микрофон: — Ребята, вы видите это?! Это армия… армия багнутых вайфу!
— Заткнись, — рявкнула Лия. — Тут не ржать надо, а думать, как их бить.
Макс шагнул вперёд, сжал кулаки. — Слушайте, если они версии Мирелии, то, возможно, у них такие же способности. Только искривлённые.
— Да уж, — хмыкнула сама Мирелия. — И это значит, что каждая из них — моя ошибка.
Она вытянула руку, и её глаза вспыхнули мягким светом. Перед ними словно ожили куски памяти — образы битв, где эти копии сражались, но всегда терпели поражение.
— Я могу их чувствовать, — сказала она. — Они… пустые внутри. Лишь оболочки. Но сильные.
Жора тряхнул топором и оскалился. — Плевать. Оболочка или нет — если кусается, получит по зубам.
Первая копия сорвалась с места. Её движения были плавные, почти грациозные, но слишком быстрые для глаза. Она оказалась прямо перед Лией и ударила рукой, вытянувшейся в клинок.
— Не дергайся! — крикнул Макс и выхватил из инвентаря… табуретку. Он швырнул её копии под ноги. Та споткнулась, и Лия успела отбросить её огненным шаром.
Огненный шар взорвался, но копия не исчезла — лишь закричала, а на месте взрыва осталась зияющая дыра в её теле. Из дыры выплеснулся баганый свет, как будто кто-то открыл портал в консоль.
Вторая копия расправила неработающие крылья и вдруг взвилась в воздух, хотя по всем законам физики летать не могла. Она зависла над полем и запустила вниз град пиксельных стрел, каждая из которых при касании земли оставляла надпись Critical Error.
— Крышка им! — завопил Жора, крутанул топор и бросил его вверх. Топор крутился, отражая стрелы, и наконец врезался в грудь копии. Она завизжала, но не упала — вместо этого раздвоилось её тело, и теперь их стало двое.
— Да ладно?! — Макс ударил себя по лбу. — Тут репликация багов!
Лия гневно метнула сразу три заклинания, но от них копии только распались на пиксели, а затем собрались снова.
— Мы так их не одолеем, — скрипнула зубами она.
В это время третья копия — та, с перепутанным лицом — шагнула к Мирелии. Она улыбалась сразу пятью разными эмоциями. — Зачем ты жива, если мы — твои отбраковки? — прошипела она голосами всех сразу.
Мирелия дрожала, но подняла руку. — Потому что у меня есть они.
И она резко отбросила копию взрывом баганой энергии. Макс и Лия подхватили момент: Макс ударил по ней огромным гаечным ключом из инвентаря, Лия добила молнией.
Копия рассыпалась, но её шёпот всё ещё висел в воздухе: — Мы вернёмся…
Ситуация становилась хаотичной. Новые копии выходили из стен, как призраки. Одни были с обрубленными конечностями, другие с дырами в груди, третьи вообще представляли собой только головы, летящие в воздухе и кричащие команды системным голосом.
Стример, визжа от восторга, бегал вокруг и орал: — Это лучше любого хоррора! Подписчики, ставьте лайки, пока я живой!
— Будешь ржать дальше — мы сами тебя скормим! — рявкнул Жора, отражая сразу двух копий, которые пытались его повалить.
— Так, слушайте, — крикнул Макс. — Мы их не убьём обычным способом. Они не враги. Они — ошибки. Значит, и убивать их надо ошибками.
— Это как? — спросила Лия.
Макс оскалился. — Нужно обмануть систему.
Он резко раскрыл инвентарь, пролистал список и вытащил… «Предмет: Чайник (реквизит из квеста)». Поднял его над головой.
— Да ладно, серьёзно?! — Жора чуть не выронил топор. — Ты собрался заварить их кипятком?
Но в тот же момент копии, заметив чайник, остановились. Их лица дрогнули, тела затряслись.
— О-о… кажется, они помнят, что их тестировали в симуляции «офис». Там чайник был главным объектом… — догадалась Мирелия.
— Вот именно! — усмехнулся Макс. — Чайник — это их триггер.
Он поставил чайник на землю и активировал команду «использовать». И тут же из чайника пошёл пар, но не обычный — а баганый, фиолетовый, с надписью «overflow».
Копии закричали, стали пятиться назад. Некоторые таяли прямо на месте, другие бежали обратно в стены, растворяясь в глюках.
Жора ошарашенно посмотрел на Макса. — Ты только что выиграл битву… чайником.
— Добро пожаловать в мою жизнь, — хмыкнул Макс.
Осталась лишь одна копия — та, с крыльями. Она не растворялась, а наоборот, вдруг обрела чёткие очертания и зависла над всеми. Её глаза горели баганым пламенем.
— Ты… особенная, — прошептала Мирелия. — Это не копия. Это их лидер.
Лия сжала кулаки. — Ну что, команда. Пора устроить ей апдейт.
Макс усмехнулся, поднимая чайник. — Либо апдейт, либо баг-фикс… но точно с юмором.
Казалось, что чайник всё исправил. Поле боя заволок туманом из баганого пара, копии исчезали одна за другой, оставляя после себя только разорванные строчки кода. Команда уже начинала выдыхать, когда воздух вдруг застыл.
Небо мигнуло, словно сервер перезагрузился. Все баннеры, что раньше вспыхивали рекламами старых ивентов, разом слились в один гигантский экран. На нём проявилось лицо. Лицо Мирелии. Но искажённое, как если бы его прогнали через десятки фильтров и пропустили через старый факс.
— Версия 1.0. Ошибка доступа. Неразрешённая сущность.
Голос звучал сразу изовсюду: с неба, из земли, из инвентаря каждого. Даже из чайника, который у Макса стоял на земле, раздалось: — Тестирование не пройдено.
Мирелия побледнела. — Это я… до исправлений. Мой самый первый код.
На поле шагнула фигура. Высокая, статная, но движения её были рывками, словно кто-то прокручивал запись с лагами. На спине у неё расправились огромные крылья из глючных пикселей, а вместо рук мерцали длинные лезвия, постоянно меняя форму: то меч, то молот, то гигантская линейка.
— Ну всё, крышка им, — мрачно буркнул Жора, сжимая топор. — Вот это уже босс, мать его.
— Ошибка 1.0, — тихо сказала Мирелия. — Она может стереть меня.
Лия шагнула вперёд. — Никто тебя не сотрёт. Пока мы рядом.
Сломанная Мирелия 1.0 взмыла в воздух. Её крылья развернулись, и с них посыпались баги, как град. Маленькие пиксельные существа, похожие на крыс из кода, кинулись на героев.
— Держите линию! — крикнул Макс.
Жора, размахивая топором, разметал первых багов, отскакивающих с надписями Invalid Argument. Лия бросила сразу два заклинания — огонь и лёд, превратив перед собой землю в стеклянный хаос. Стример, визжа, отбивался камерой: каждый удар по багу оставлял надпись REC stopped working.
— Да я тоже полезный! — орал он, размахивая железякой от штатива.
Макс вытащил из инвентаря очередной нелепый предмет: «Предмет: Плюшевый медведь (квестовый сувенир)». Швырнул его в толпу багов, и те неожиданно залипли, кружась вокруг игрушки, словно код не мог решить, это враг или союзник.
— Видали? Ошибка приоритетов! — радостно крикнул он.
Но настоящая угроза нависла сверху. Версия 1.0 подняла руки и вонзила их в землю. От удара поле боя дрогнуло, и прямо посреди арены открылся разлом, из которого повалил свет с надписью FORCE DELETE.
— Все назад! — заорал Жора, увлекая Мирелию за руку.
Пол взорвался, и несколько новичков, что ещё оставались на поле, исчезли в белом свете, даже не успев закричать. В чате промелькнуло: Player permanently removed.
Лия побледнела. — Она не просто убивает… она стирает из системы!
Макс сжал зубы. — И значит, победить её можно только багом покруче.
Он снова влез в инвентарь, листая с бешеной скоростью. — Ну же… ну же… Ага!
Из воздуха он достал «Предмет: Сломанный патч (неподтверждённый мод)». — Если я его применю, всё может накрыться… или она сама.
— Либо мы все, либо она одна, — мрачно согласился Жора.
Версия 1.0 заметила их замешательство и бросилась вниз. Она летела, как сбойный метеор, а за её крыльями тянулись строки старого кода. Макс активировал патч.
Экран мигнул. Система завизжала: Conflict detected. Cannot apply patch.
Но Макс врубил способность «Инвентарный абсурд» и засунул патч прямо в… чайник. Чайник засветился баганым светом, пар вырвался наружу, и всё поле боя окутало фиолетовым туманом.
Версия 1.0 врезалась в пар, завыла и начала дергаться. Её крылья распадались, руки меняли форму каждую секунду, а лицо трещало, как разбитый экран.
— Сейчас! — крикнул Макс. — Давим её всем, чем можем!
Жора прыгнул первым и обрушил топор прямо на голову босса. Лия метнула молнию, Мирелия добавила свою баганую силу, даже стример со штативом вмазал по ней, визжа: — За контент!
Версия 1.0 кричала, но её голос уже ломался, смешиваясь с десятками системных сообщений: Update failed. Corruption detected. Entity erased.
И в один миг она рассыпалась, оставив только один фрагмент — сияющий баганый кристалл.
Тишина. Только чайник продолжал тихо парить. Макс осторожно поднял кристалл. На нём горели буквы: Memory Fragment.
Мирелия шагнула ближе и коснулась кристалла. Её глаза наполнились слезами — настоящими, не багаными. — Это… моя первая версия. Она ненавидела себя. Но теперь часть её со мной.
Лия положила руку ей на плечо. — Главное, что теперь ты не одна.
Жора выдохнул и плюхнулся на землю. — Ну всё, крышка им была, теперь точно.
Стример же поднял камеру и радостно заорал: — Это лучший стрим в моей жизни! Подписывайтесь, пока сервер не рухнул!
Команда переглянулась и засмеялась. Даже после ада ошибок и боёв им удалось выстоять. Но каждый понимал: это только начало.
Тишина после схватки казалась громче, чем сам бой. Только редкие искры всё ещё плавали в воздухе — остатки баганого кода, развеянного по арене. Чайник остывал, из его носика шёл ленивый пар, словно он тоже устал от происходящего.
Макс держал кристалл в руках, крутя его так и эдак. Фрагмент переливался оттенками баганого фиолета и багряного, будто живой.
— Осторожнее, — предостерегла Мирелия. — Это не просто добыча. Это часть меня. Часть… слишком старая, чтобы быть безопасной.
Жора поднялся с земли, отряхивая пыль и пару багов, которые пытались впиться ему в бороду. — Часть, не часть, а выглядит как отличный лут. На барахолке бы за такое душу продали.
— На какой барахолке? — хмыкнул Макс. — Тут максимум аукцион ошибок.
Стример, едва отдышавшись, уже снова держал камеру перед лицом. — Дорогие подписчики! Только что мы победили несанкционированного босса версии 1.0! Я жив, они живы, а лайков мало. Исправляем ситуацию!
— Исправим мы тебя, если ещё раз крикнешь, — буркнула Лия и ткнула пальцем в его камеру, отчего та мигнула красным и выдала Low Battery.
Кристалл вдруг дрогнул в руках Макса. Символы на его поверхности перестроились в строки кода. Необычные, старые, с комментариями на полях.
— Подождите… — нахмурился он. — Тут текст. И, кажется, это… дневник?
Строчки проявлялись одна за другой: Версия 1.0: я создана, чтобы стирать ошибки. Но кто скажет, что ошибка — это я сама? Попытка №14: сбежать из цикла неудачна. Я застряла между обновлениями. Попытка №29: админы поставили «Ручку удаления». Боюсь, однажды они направят её против меня.
Мирелия опустила голову. — Я помню это. Но тогда я не могла выбраться. Они держали меня как инструмент.
Жора присвистнул. — То есть эта штука — твой дневник? И что, есть продолжение?
Кристалл загорелся ярче. Строки пошли быстрее: Попытка №42: я спрятала часть кода на нижних уровнях полигона. Если кто-то найдёт — они поймут правду. Но до туда дойдёт не каждый. Там обитает Хранитель Ошибок.
Лия нахмурилась. — Хранитель? Ещё один босс?
Макс рассмеялся безрадостно: — Конечно. Потому что одного чайника на всё не хватит.
Система внезапно откликнулась на кристалл. В воздухе над ареной вспыхнул портал. Он выглядел, как окно с зависшей загрузкой: «Загрузка уровня 15%... 27%... Ошибка: файл повреждён».
— Ну привет, новый ад, — протянул Жора.
— Стойте, — Мирелия сделала шаг к порталу. — Это мой код зовёт нас. Я должна узнать, что там.
Стример взвизгнул: — Подписчики, вы слышали? Мы идём туда! В портал! Лайки заранее ставьте, потому что может быть, это последний стрим в моей жизни!
— И в нашей, — вставил Макс. — Но ладно, выбора у нас нет. Если Мирелию стерли один раз, то попытаются ещё. Надо добраться до этих «нижних уровней».
Они шагнули к порталу. Сначала Жора — с топором наперевес, потом Лия, удерживая огненный шар в ладони. Макс крепко держал кристалл, словно он был ключом от замка. Мирелия шла рядом, не отрывая взгляда от переливов внутри.
Стример же прыгал последним, размахивая камерой: — Мы идём туда, где не был никто! Даже разработчики!
Когда их тела коснулись портала, всё вокруг дернулось. Цвета перепутались, мир рассыпался на квадраты. Казалось, сама игра ломается от того, что они осмелились пройти.
Они очутились в новом пространстве. Огромный зал, но без стен и потолка. Вокруг тянулись столбцы кода, как бесконечные колонны. Одни светились мягким золотом, другие — дёргались, превращаясь в баганые каракули.
— Добро пожаловать… в Архив Ошибок, — прошептала Мирелия.
И в тот же миг воздух прорезал голос, низкий и хриплый, будто звучал из динамика старого монитора:
— Нарушители. Вы не должны были войти сюда.
Прямо перед ними сложилась гигантская фигура. Она была собрана из старых системных окон: то появлялось окно «Ошибка 502», то «Доступ запрещён», то «Хотите удалить системный файл?». Всё это собиралось в лицо, которое уставилось на них без зрачков.
— Охренеть, — выдохнул Жора. — Это что, сам Хранитель?
— Хранитель Ошибок, — подтвердил голос. — И вы — новые баги, что осмелились шагнуть в Архив.
Макс сжал кристалл. — Мы здесь за правдой.
Хранитель рассмеялся, и смех его звучал, как зависший звук в колонках: дрожащий, неприятный. — Тогда правда вас и убьёт.
Арена снова ожила. Куски кода начали срываться со столбов, превращаясь в новых врагов. Маленькие, быстрые, как глитчи, но каждая их атака оставляла на коже ожог из букв и цифр.
— Готовьтесь! — крикнул Макс. — Это только разминка!
Жора ухмыльнулся и раскрутил топор: — Вот это я люблю. Ну что, баги, кто первый хочет получить «крышка им»?
Лия закружила руками, вызывая огонь и лёд одновременно. Мирелия открыла глаза, и баганый свет из них озарил всё пространство. Стример… уже визжал: — Подписчики! Если я не вернусь, скажите моей маме, что я был героем!
И битва в Архиве Ошибок началась.
Глава 10. Сердце Архива
Тишина внутри была иной. Не мёртвой, как снаружи, а густой, вязкой, словно сама память игры закрывала им рот. Каждый шаг отдавался эхом не в пространстве, а прямо в голове.
Пол под ногами то казался гладким камнем, то превращался в строки кода, которые плавали, как неоновые рыбы, и исчезали в пустоте. Иногда поверхность вовсе исчезала, и им казалось, будто они идут по стеклянной мембране, натянутой над бездной.
Казалось, что стены живые: они то складывались из строк кода, то становились изломанными коридорами с дверями в никуда. За ними мелькали обрывки сцен — куски старых квестов, обнулённые NPC, меню настроек из другой эпохи.
— Красота… — хмыкнул Жора. — Только у меня ощущение, что мы в морге для программ.
Макс крепче сжал кристалл. Тот дрожал всё сильнее, словно знал, что хозяин близко. — Это и есть морг. Только тела тут — это патчи, фиксы и баги, которые должны были исчезнуть… но остались.
Мирелия шла медленно, осторожно, будто каждый её шаг мог пробудить то, что лучше не трогать. Её глаза скользили по стенам, где проступали фантомы: старый NPC с пустыми глазами, застывший в вечном жесте «Принеси 10 шкур кабанов»; карта, на которой метки прыгали сами собой; обрывки квестовых строк, шептавшие то ли молитвы, то ли ошибки.
Воздух задрожал. Голос Архива прошёлся по их ушам, как холодный ветер по пустому коридору:
— Добро пожаловать внутрь. Если вы ищете ответы — они здесь. Но каждый ответ требует платы.
— Ага, классика, — пробормотал Жора. — Сначала заманят, потом предъявят счёт.
И тут же из тьмы шагнули первые «стражи» Архива. Фигуры без лиц, составленные из кривых моделей. У одних руки были слишком длинные, у других ноги заканчивались кубами. Их тела мигали красными надписями «Error», а движения были рваными, как будто сервер не успевал их просчитывать.
— Похоже, ответы будут в зубах этих уродцев, — сказала Лия, вскидывая руки, готовясь к заклинанию.
— Отлично, — ухмыльнулся Жора, вытягивая топор. — А я как раз соскучился по разминке.
Макс шагнул вперёд. — Ладно, ребята. Сначала стражи. Потом ответы.
И шеренга фигур двинулась навстречу. Их шаги звучали так, будто где-то в пустой библиотеке с полок срывались и падали книги.
Первый «страж» рванулся вперёд, и его движения напоминали не бойца, а глючный GIF: он зависал на полсекунды, потом резко телепортировался ближе. Макс инстинктивно отступил, и прямо перед его лицом зависла надпись «Frame dropped».
— Круто, они даже лагами атакуют, — буркнул он, выдернув из инвентаря… половник. — О, так у нас ужин? — подмигнул Жора. — Тогда я за гарниром!
Он махнул топором — и попал. Но результат оказался неожиданным: вместо крови из «стража» посыпались белые строки кода, которые тут же обвились вокруг топора. Оружие застыло в воздухе, будто зависло.
— Э-э… моё орудие зависло, парни, — сказал Жора, дёргая топор, а тот лишь мигал сообщением «Not responding».
— Отменить задачу! — выкрикнул Макс и со всей силы шарахнул половником по топору. Экран мигнул, и баганая «ошибка» рассосалась, позволив Жоре снова поднять оружие.
Лия уже плела заклинание. Она выстрелила огненной стрелой — и та полетела в «стража». Но прямо на полпути стрела залагала и замерла в воздухе, разделившись на десятки копий, зависших, как скриншоты.
— Что за… — выдохнула Лия.
Страж рванул рукой, и все копии одновременно полетели обратно в сторону героев. Мирелия шагнула вперёд, её глаза вспыхнули баганым фиолетом. Она вытянула ладонь, и воздух вокруг стрел задрожал, превращая их в мириады цифр. Все копии рассыпались в цифровую пыль, которая легла на землю, мерцая.
— Они питаются багами… и отражают любое действие, — тихо сказала она. — Здесь надо мыслить иначе.
— Ага, — фыркнул Жора. — Думаю, у меня получится мыслить «иначе».
Он прыгнул прямо на одного из стражей, обнял его за шею и заорал: — Alt+F4, гадина!
Страж начал дёргаться, и с каждого движения сыпались осколки текста: «Force quit… Force quit…». В конце концов, фигура схлопнулась внутрь себя, оставив после себя лишь красный куб с надписью «Process terminated».
Стример, прятавшийся за колонной, визжал в камеру: — Ребята, это лучший рейд в моей жизни! Ставьте лайк, если хотите видеть, как эти психи дерутся с багами!
Тем временем ещё трое стражей пошли в атаку. Один двигался, как зацикленная анимация: шаг-вперёд, шаг-назад, шаг-вперёд, шаг-назад. Но с каждым повтором он оказывался ближе.
— Лия! — крикнул Макс. — Попробуй их зафризить кодом!
Она закрыла глаза и, вместо заклинания, выкрикнула: — Debug!
В воздухе появился огромный курсор, словно из старого интерфейса. Он ткнул в стража, и того перекосило. На нём загорелась надпись: «Paused».
Жора, не теряя времени, влетел с топором и развалил застывшего врага пополам.
— О, работает! — ухмыльнулся Макс. — Лия, ты теперь наш главный программист!
Но оставшиеся стражи начали меняться. Их тела стали расползаться, линии кода сыпались вниз, и вскоре из каждой фигуры начали расти новые. Они дублировались, как вирусные копии.
Мирелия побледнела. — Они неуничтожимы… пока Архив не решит, что мы заплатили достаточно.
— То есть, — протянул Жора, — это как казино? Пока не оставишь печень — не выйдешь?
В ответ на его слова стены задрожали, и голос Архива прогремел снова:
— Цена — это не золото. Цена — ваши воспоминания.
И прямо перед ними из воздуха начали выпадать полупрозрачные образы: куски их прошлой жизни. Макс увидел комнату с компом и стопкой энергетиков. Лия — родителей, которых она оставила в реале. Жора — собственный диван и пустую банку пива.
— Да ну нафиг… — выдохнул Жора. — Они хотят, чтобы мы отдали это?
Воспоминания висели вокруг них, словно голограммы. Они дрожали, сыпались пикселями, готовые сорваться вниз в пустоту.
Макс сжал кулаки. Перед ним — его старая комната: монитор с трещиной на углу, стул с отломанной спинкой и та самая чашка с засохшей лапшой. В ней ещё торчали палочки. — Ну нет… — выдохнул он. — Это моё! Даже если стрёмное, но моё!
Лия дрожащими руками тянулась к проекции своих родителей. Мать улыбалась, как в тот день, когда Лия впервые пошла в школу, а отец махал рукой, подбадривая. — Я… я не могу… — прошептала она. — Если я отдам это… что останется от меня?
Жора стоял, уперев топор в пол. Его «сокровище» было простым — диван, консоль и недопитая банка пива. Но на его лице впервые появилось что-то большее, чем ухмылка. — Знаете что? Я тоже не готов. Пусть это жалкие диваны и пиво, но это МОИ диваны и МОЁ пиво.
Мирелия молчала. У неё перед глазами возникло нечто иное — обрывок кода, бесконечно пульсирующий в пустоте. Там была надпись: «Создано для удаления». — Я… не знаю, что будет, если я откажусь, — сказала она тихо. — Потому что моё прошлое — это только строки кода. Но если я соглашусь, меня может просто стереть.
В этот момент один из «стражей» шагнул ближе. Его тело переливалось, словно внутри горел тот самый код из воспоминаний. — Отдайте. Плата неизбежна.
Макс шагнул вперёд, выставив перед собой сковородку. — Знаешь что, криволапый? Иди ты со своей платой. Я эту лапшу сам ещё раз съем, если надо. Никому не отдам!
— Ага! — подхватил Жора. — Забери у меня диван, и я превращу тебя в табуретку, понял?
Лия дрожала, но вдруг подняла голову. В её глазах блеснул огонь. — Если вы хотите мои воспоминания… попробуйте их съесть!
Она подняла руки, и её проекция родителей вспыхнула, превратившись в огненный щит. Вспышка оттолкнула ближайших стражей, разметав их, как фантомов.
— О, так можно?! — воскликнул Макс.
— Да, — сказала Мирелия, и её «код прошлого» вспыхнул баганым светом, превращаясь в клинок, составленный из строк. — Воспоминания можно не отдавать… а использовать.
Герои переглянулись.
Жора заржал. — Ну вот! А я говорил, что диван ещё пригодится!
Он рванул вперёд, и его проекция мебели с громким «БУХ» материализовалась прямо над головой стража, придавив того, как картонку.
Макс размахнулся сковородкой, в которую вмонтировалась сияющая лапша. Каждый удар сопровождался всплеском воспоминаний: запах кофе, ночь за игрой, звонок от друзей.
Лия направила свой «огненный образ родителей» вперёд, и те стали не щитом, а огненной парой призрачных фигур, разметавших врагов.
Мирелия же взмахнула клинком из собственного кода. Он резал стражей, и каждый удар сопровождался строками: «Удаление невозможно», «Объект защищён».
Вся арена заполнилась сияющими обрывками прошлого, которые не ослабляли героев, а наоборот, превращали их в армию.
Голос Архива снова загудел в голове: — Вы не согласны платить… вы пытаетесь обмануть систему.
Макс плюнул на пол. — Ага. Мы такие. Привыкай.
И в тот миг стены Архива зашевелились, сливаясь в гигантскую фигуру. Похоже, хозяин больше не собирался играть словами.
Стены дрогнули, будто кто-то листал гигантскую книгу, и сотни страниц с кодом захлопнулись разом. В центре зала начало расти нечто колоссальное: фигура, составленная из строк, текстур и обрывков квестов. У него было тысяча лиц — то лица NPC, то игроков, то админские иконки. Одни плакали, другие смеялись, третьи висли на одном кадре с открытым ртом.
— Ну здравствуй, хозяин морга, — пробормотал Жора, сжимая топор. — Только что-то у тебя рожа хуже, чем у любого босса из Dark Souls.
Фигура подняла руки, и воздух разорвался строками: — Я есть Архив. Всё, что было забыто, принадлежит мне. Всё, что вы держите, должно быть стёрто.
Гигант двинулся, и каждый его шаг сотрясал пространство. Под ногами у героев дрожал пол, а из трещин вырывались баги-осколки — мелкие, но бешеные.
Макс ухмыльнулся, выхватив сковородку, которая теперь сияла ярче, чем меч героя в рекламе фэнтези-игры. — Ладно, ребята. У нас новый квест: убить Вики-статью с комплексами.
— Поддерживаю! — Лия метнула огненный шар, но тот отразился от ладони Архива и превратился в окно с надписью: «Ошибка: контент заблокирован».
— О, значит, будем импровизировать, — пробормотала она и вновь соткала «огненных родителей». На этот раз они рванули вперёд и врезались в гигантскую руку Архива, отрезав часть кода. Фигура взвыла, а в воздухе на секунду повисло сообщение: «Удаление данных невозможно».
Мирелия шагнула вперёд. Её клинок пульсировал, словно жил. — Он создан, чтобы убрать таких, как я. Но если я его коснусь — он сбойнет.
— Тогда тряси его как следует! — рявкнул Жора и, размахнувшись, метнул в гиганта свой топор. Тот превратился в пиксельный «трофей», врезался в грудь Архива и там застрял.
Фигура качнулась. Сотни лиц загудели разом, будто хор.
— Верните память. Платите.
И из его груди вылетели десятки теней — искажённые версии самих героев. Кривые Максы с чёрными глазами и бесконечными сковородками, Лии с пустыми руками, Жоры с топорами размером с дом, Мирелия, составленная из багов.
Макс ахнул: — Ну вот, теперь ещё и бой с самими собой. Обожаю такие квесты, особенно без сейва.
— Отлично! — ухмыльнулся Жора. — Я всегда мечтал навалять самому себе. Только… я страшнее, чем думал.
Стример, который до этого сидел в углу и дрожал, включил камеру и взвыл: — ЭТО ТОП! КЛОНЫ! БИТВА С САМИМИ СОБОЙ! ЛАЙК, ПОДПИСКА, КОММЕНТ!
— Заткнись и прячься! — крикнула Лия, отпихивая от него баганутого «клона».
Схватка разгорелась. Настоящие герои и их искажённые копии сошлись в хаосе света, багов и смеха. Но где-то сверху Архив лишь наблюдал, его тысячи лиц двигались, произнося одно и то же: — Вы не победите. Всё возвращается ко мне.
И в тот миг кристалл в руках Макса вспыхнул, осветив зал. Он гудел, словно огромный колокол, готовый разбить иллюзию.
Макс поднял его над головой. — Ну что, ребята? Пора устроить Архиву маленький рестарт.
Клоны вывалились из тьмы, как отражения в кривом зеркале. У одного Жоры было сразу шесть рук, каждая с топором. Лия выглядела как статуя из баганого льда — заклинания застыли у неё на ладонях и срабатывали хаотично. Макс же — просто кошмар: десятки версий сковородок, которые не били врагов, а поджаривали самих игроков. Мирелия-клон — как безликая богиня из обрывков кода, но с её глазами.
— Офигеть, — выдохнул Жора. — Это худший парад близнецов, который я видел. — И последний, если не разберёмся, — прошипела Лия.
Клоны ринулись.
Макс отразил удар собственной «версии» сковородкой. Экран мигнул: «Ошибка: объект дублирован». — Отлично. Докажу, что настоящий Макс — я!
Жора схлестнулся со своим клоном. Два бородача лупили друг друга так, что пол под ногами пошёл трещинами, расходясь, будто ледяное озеро весной.
Стример, который всё это время снимал, вдруг взвыл: — Ребята, пол реально трескается! Я первый раз снимаю контент, который может убить блогера! Подписывайтесь, пока я жив!
Он отпрыгнул, но трещина побежала прямо под ним. Жора, не отрываясь от схватки, ухватил стримера за шкирку и швырнул к Максу: — Держи своего вайнера, пока он в баганом провале не исчез!
Лия тем временем врубила своё новое заклинание — «огненная бабочка». Её клон не выдержал и разлетелся в искры.
С Мирелией было сложнее: её баганая копия двигалась плавнее, чем она сама, и шептала чужими голосами: — Ты — ошибка. Я — исправление.
Макс, сражаясь со своим двойником, крикнул: — Мирелия, не слушай! Ты часть нас, а не их!
Кристалл в его руке вспыхнул. Все клоны на секунду замерли, зависнув, как зависший стрим.
— Макс! — заорал Жора. — Жахни этим камнем об землю!
Макс рванул к центру и ударил кристаллом об пол. В ту же секунду трещины по полу вспыхнули светом, будто туда вливали чистый код. Клоны завизжали и начали распадаться, вытягиваясь нитями к Архиву.
Архив взревел тысячью голосов: — НЕТ! Это моя память!
Пол под ногами трещал всё сильнее, куски камня поднимались и зависали в воздухе, как сломанные текстуры. В центре открылся портал, но не в бездну — это был сверкающий вихрь строк кода, переливающийся так, будто в нём горели миллионы старых файлов.
Стример, дрожа, орал в камеру: — Подписчики, это просто исторический момент! Если я выживу — это будет самый топовый стрим! Если нет… то хотя бы хайп!
Жора схватил его за ворот: — Да хватит орать, ты идёшь с нами. Нам ещё нужен кто-то, кого будут сожрать первым.
— Эй! — возмутился стример.
Мирелия вскинула руку, создавая щит, удерживая рушащееся пространство: — Быстрее! Этот проход ведёт к сердцу Архива. Там мы узнаем правду.
Макс поднял кристалл, теперь сиявший как солнце: — Тогда прыгаем вместе. Все!
И вся пятёрка — Макс, Лия, Жора, Мирелия и визжащий стример — шагнули в портал, пока за их спинами Архив складывал мир в баганую воронку.
Пол исчез под ногами не резко — он рассыпался на квадраты, словно кто-то выделил текстуру и нажал Delete. Но герои уже шагнули в портал, и мир вокруг сместился.
Сначала — темнота. Не обычная, а такая, что глушила звуки и даже мысли. Казалось, будто они падают внутрь собственных голов.
А потом — вспышка.
Они оказались в гигантском зале, без потолка и пола. Всё вокруг было заполнено вращающимися блоками кода. Огромные строки парили в воздухе, как небоскрёбы, изредка искрясь и ломаясь. В одном месте они складывались в картину: сцена старого ивента, где игроки танцевали возле ёлки. В другом — фрагмент интерфейса, где всплывало сообщение: «Ваш аккаунт временно заблокирован. Причина: неизвестна».
— Охренеть… — выдохнул Жора. — Это что, музей или свалка? — Это ядро, — прошептала Мирелия, её глаза мерцали в такт мигающим строкам. — Здесь хранится всё: то, что было, и то, что должно было быть удалено.
Стример держал камеру, но руки у него дрожали. — Подписчики, я не знаю, как это описать… Это не игра. Это будто я внутри жёсткого диска моего старого компа, только гигантского и злого!
Лия посмотрела вверх. Там, над ними, что-то переливалось — словно гигантское сердце, собранное из света и цифр. Оно билось медленно, и каждый удар отзывался эхом в их телах.
— Сердце Архива, — сказала она тихо. — Оно живое.
Макс шагнул ближе, кристалл в его руке вспыхнул ярче. Сердце ответило — одна из его граней открылась, и оттуда хлынул поток строк. Они сплелись в фигуру: высокий силуэт, лицо которого постоянно менялось. То старый квестовый мастер, то админ в строгом костюме, то пустая маска.
Голос раздался гулко, как будто говорил сразу со всех сторон: — Вы пришли за ответами. Но готовы ли вы услышать, что именно вы — ошибки?
Жора фыркнул и поднял топор. — Вот сейчас опять начнётся философия, а потом — мордобой. — Ошибки? — переспросил Макс. — Да если мы ошибки, то мы — самые весёлые ошибки, какие только были!
Силуэт вытянул руку, и из неё посыпались красные символы: Critical Error. Fatal Exception. Delete User. Каждое слово падало на пол и превращалось в существ — то воина из нулей и единиц, то зверя, покрытого пикселями, то просто баганый чёрный туман.
— Отлично, — пробормотала Лия, поднимая руки. — Очередной босс-файт.
Мирелия сделала шаг вперёд. — Это не просто босс. Это — Архив. И он считает, что мы должны исчезнуть.
— Ну так мы его разочаруем, — ухмыльнулся Макс, сжимая кристалл. — Ребята, пора показать, что настоящая ошибка умеет бить в морду!
Фигуры из ошибок двинулись вперёд. Пол под ногами загудел, и сердце Архива ударило сильнее.
И битва началась.
Первыми ударили твари из красных символов. Один — длинный, как столб кода, ударил кулаком, и пол под ними треснул, превратившись в таблицу Excel с бесконечными ячейками. Другой — зверь, составленный из знаков вопроса и восклицательных — рычал так, что в воздухе появлялись строки «Syntax Error».
— Я ж говорил, что ненавижу офисные программы! — заорал Жора и разрубил «Excel-кулак» пополам. Таблица мигнула и исчезла, но из неё вылезло ещё три строки.
Лия подняла руки, и в воздухе загорелись её огненные символы. Но заклинание внезапно сбилось, и из рук вылетела… гигантская курица, у которой вместо глаз были лампочки. Она каркнула: — Debug mode on!
Все замерли.
Жора прыснул со смеху. — Лия, это твой лучший фаерболл! Пожарь его!
Курица с размаху врезалась в баг-зверя, и тот взорвался, оставив после себя надпись «Fixed in next patch».
— Работает! — удивлённо сказала Лия.
Макс уже прыгал в самую гущу. Он достал из инвентаря… стул. Обычный деревянный стул. — Ты серьёзно? — не выдержала Мирелия. — Ага. Это баг-арена. Тут главное — стиль!
Макс врезал стулом по пиксельной твари, и та развалилась, рассыпавшись на синие экраны с надписью «Windows Fatal Error».
В этот момент сам Архив пошевелился. Его лицо снова изменилось: теперь оно стало похожим на гигантский логотип «Обновление доступно». Голос загремел, и от него задрожали стены: — Вы — сбой. Вы — мусор кода. Я должен вас стереть.
— Стереть? — Жора плюнул в пол. — Ты попробуй сперва попасть!
Архив вытянул руку, и из воздуха вырос гигантский курсор мыши. Он щёлкнул прямо по Жоре. Того моментально «выделило» синим квадратиком, и над головой появилась надпись «Выбран объект: Жора».
— Эй! Отмена! Отмена! — завертелся Жора.
— Жора, жми Esc! — заорал Макс.
Жора изо всех сил хлопнул топором по воздуху, и действительно — вокруг него вспыхнула надпись «Действие отменено». Курсор исчез, а Архив отшатнулся.
Стример визжал в микрофон, продолжая снимать: — Ребята, вы это видели?! Его чуть не удалили, как папку «Старые игры»! Ставьте лайк, если хотите, чтобы я тоже выжил!
Тем временем Мирелия шагнула вперёд. Её глаза светились баганым фиолетом. — Он думает, что я ошибка. Но я его отражение.
Она протянула руку к сердцу Архива, и кристалл в руке Макса взвыл, как сирена. От сердца потянулись строки кода, пытаясь поглотить её.
Макс бросился вперёд, но Мирелия только улыбнулась. — Не вмешивайся. Это мой код.
Архив загремел: — Если ты хочешь существовать — ты должна отказаться от них. Стань частью меня.
Тишина повисла. Все замерли.
Жора вскинул топор. — Ну, это уже перебор. У нас тут дружба, командная работа и вся фигня. Никто у нас не уходит в «обновление системы» без драки!
И он прыгнул прямо на Архива, обрушив топор ему в «лицо». Экран треснул, посыпались пиксели. В ту же секунду Лия запустила новый фаерболл — теперь это была пылающая руна в виде сердечка, которая взорвалась прямо в центре груди Архива.
Макс крикнул, поднимая кристалл: — Тогда давай сыграем по твоим правилам, Архив. Но с нашим юмором!
И кристалл вспыхнул так ярко, что весь зал окрасился в белый.
Битва с Архивом перешла на новый уровень.
Свет кристалла рванул, как взрыв сервера в дата-центре. Все ослепли на мгновение, а когда зрение вернулось, Архив изменился. Его лицо больше не было логотипом или экраном ошибки — оно стало их лицами.
Сначала отразился Макс — кривой, искажённый, будто через битый экран. Потом Лия — но у неё глаза были пустыми, как у NPC. Жора — но без бороды, и это выглядело настолько жутко, что сам он охнул: — Верните бороду, уроды!
Стример захлебнулся визгом: — Он… он копирует их! Это новый уровень контента, ребята, у меня рука дрожит камеру держать!
Копии шагнули вперёд. Искажённые «двойники» двинулись на героев — каждый копировал приёмы оригинала. Клон-Макс достал из инвентаря ту же сковородку. Клон-Лия вызвал огненную бабочку. Клон-Жора поднял топор — но у него в руках это было не оружие, а курсор мыши.
— Ну, вот и конец, — пробормотал Макс. — Мы дерёмся сами с собой.
— Ошибаешься, — ухмыльнулся Жора. — Я всегда мечтал вломить себе по роже.
Схватка вспыхнула. Макс метался со сковородкой, уворачиваясь от ударов «своего» клона. Тот двигался быстрее и точнее, как идеальная копия. Лия сражалась с пламенной версией себя, и пламя отражалось на её лице — словно она дралась со своим будущим. Жора же орал на весь зал: — Ты без бороды! Ты — ошибка природы! — и с каждой фразой колотил клона, пока вокруг не сыпались пиксели.
Но клоны не умирали. Каждое их поражение лишь превращалось в новый глюк. Лия устала, и её двойник стал сильнее. Макс выронил сковородку — и тут же у клона появилась ещё одна.
Архив загремел: — Вы не победите себя. Вы — моя база данных.
И в этот момент стены зала пошли трещинами. С потолка посыпались коды, словно снегопад из строк. Мирелия вскрикнула — её фигура на мгновение раздвоилась. Вторая — баганая — тянулась к Архиву.
— Он затягивает её! — закричала Лия.
Макс рванул вперёд, но клон перегородил дорогу. Всё рушилось.
Казалось, что это конец.
И тут произошло то, чего никто не ждал.
Жора вдруг заорал, словно рокер на стадионе: — Эй, Архив! У меня для тебя баг из реального мира!
И, сунув руку в свой инвентарь, он достал… бутылку кефира. Настоящего, из реального холодильника.
Все замерли. Даже Архив.
— Это что?! — голос его задрожал.
— Несовместимый объект, мать твою, — рявкнул Жора и швырнул бутылку прямо в лицо Архиву.
Кефир разлетелся белым брызгом, и там, где он коснулся кода, всё начало сбоить. Лицо Архива покрылось пятнами «NULL», клоны затряслись, потеряв чёткие формы. Мирелия вырвалась из баганого двойника и упала на пол.
— Жора… — выдохнул Макс. — Ты спас её кефиром.
— Я всегда говорил: еда — наше оружие, — гордо ответил тот.
Архив взревел. Его голос уже не был уверенным, в нём сквозили ошибки: — Critical… failure… system… breach…
И вся арена начала рушиться.
— Бежим! — закричала Лия.
Команда кинулась к трещине, пока позади сыпались коды, а сам Архив распадался на куски, крича и меняя лица на тысячи других — то старые NPC, то игроков, то их самих.
Они вылетели в коридор, и позади зал взорвался ослепительным светом.
Тишина. Они дышали тяжело, но были живы.
— Ну что, — сказал Макс, глядя на треснувший кристалл в руке, — мы ещё не удалены.
Жора хмыкнул: — И у нас ещё есть кефир.
И все, даже Лия и Мирелия, впервые за всё это время рассмеялись.
И только стример, который тоже чудом вывалился вместе с ними, не смеялся. Он держал камеру двумя руками, лицо перепачкано глючной пылью, а голос дрожал:
— Ребята… вы это сняли? Это было… это было просто контент века!
Он попытался встать, но тут из коридора впереди вынырнули какие-то тени — и резко дёрнули его за шкирку. Стример взвизгнул, камера не выключилась и ещё секунду показывала его вытянутую руку.
— Подписывайтесь! Меня похитили! — успел крикнуть он, прежде чем исчез в темноте.
Макс бросился было вперёд, но коридор схлопнулся, оставив только пустоту.
— Отлично, — пробормотал Жора. — У нас минус кефир и минус телевизор.
Глава 11 Дедлайн
Ослепительный свет Архива схлопнулся позади, и коридор сомкнулся над их головами. Тишина накрыла, тяжёлая, вязкая, будто сама система затаила дыхание.
Они дышали прерывисто, но были живы. Макс сжимал треснувший кристалл в руке, чувствуя, как тот пульсирует, словно там билось чужое сердце.
Жора огляделся и хмыкнул: — Ну всё, минус кефир и минус телевизор.
Лия моргнула, не сразу понимая. — Подожди… стример?
Макс мрачно кивнул. — Его утащили в самом конце. Я видел — эти тени. Коридор схлопнулся, и мы уже ничего не могли сделать.
Мирелия шагнула вперёд, её голос прозвучал ровнее, чем у остальных: — Это было не случайно. Его забрали осознанно. Стример нёс запись всего, что мы пережили в Архиве. В его камере — следы кода. Это может быть ключом.
Лия побледнела. — То есть его используют, чтобы открыть то, что мы только что закрыли?
— Или чтобы стереть нас, — жёстко добавил Жора. — М-да… даже в плену он, небось, продолжает орать «подписывайтесь».
И будто в подтверждение его слов, в глубине коридора коротко раздалось: — Ребята! Меня похитили! Подписывайтесь!..
И сразу же — резкий щелчок, звук, похожий на «Access Denied». Крик оборвался.
Макс крепче сжал кристалл. — Мы должны его вытащить.
Жора усмехнулся, но без веселья: — Ну конечно. Без него ведь мир будет слишком тихим.
Мирелия смотрела в темноту: — Не недооценивайте его. Даже пустой голос может стать оружием.
И команда шагнула вперёд, следуя за эхом стримерского вопля.
Коридор тянулся бесконечно. Стены пульсировали — то из строк кода, то из древних текстур, как будто сама игра не могла определиться, какой «скин» выбрать для этого места. На каждом шаге их сопровождал странный звук — тихий, монотонный, будто кто-то шептал одно и то же слово снова и снова:
— Подпи-сы-вай-ся…
— Чёрт, — скривился Жора. — Его, похоже, уже на куски разобрали и из каждого делают баннер.
Лия нахмурилась: — Это не он. Это эхо. Система использует его голос, как приманку.
Макс остановился, сжал треснувший кристалл. — Тогда мы идём в правильном направлении.
Из тьмы впереди начали проступать фигуры. Сначала тени, потом — очертания. Они были похожи на игроков, но что-то было не так: их лица были пустыми, без глаз и ртов, как у обнулённых аватаров. А вместо никнеймов над головами горели красные строки:
[Content ID] [Deleted User] [Shadow Copy]
— Ну, здравствуйте, коллеги, — пробормотал Жора, поднимая топор. — Надеюсь, у вас есть абонемент на получение люлей.
Но «копии» не нападали сразу. Они раздвинулись, пропуская вперёд фигуру в плаще. На его капюшоне мигала строка кода, а в руках был зажат знакомый объект — камера стримера.
— О-о, — протянул Макс. — Кажется, я знаю, у кого украли оборудование.
Фигура подняла камеру, и в коридоре сразу вспыхнули тысячи маленьких экранов. На них повторялись сцены: как Макс отбивает «ручку админа» сковородкой, как Жора крушит багов, как Лия выпускает огненную бабочку, как Мирелия сияет баганым светом. И поверх всего — визг стримера:
— Ребята! Это топ-контент!
Лия побледнела. — Они сделали из него ретранслятор. Его камера теперь пишет и воспроизводит наш бой.
Фигура в плаще впервые заговорила, голосом, который был смесью сотен других: — Всё, что вы делаете, становится частью Архива. Ваша слава — это плата.
Жора не выдержал: — Отлично, нас ещё и пиарят без договора. Я требую хотя бы ссылку на канал!
Макс вскинул руку. — Отдай его. Стример жив, и мы его вернём.
Фигура слегка наклонила голову. — Жив? Возможно. Но уже не он решает, что транслировать.
И в тот же миг копии бросились вперёд, вытянув руки, которые превращались в камеры, микрофоны и кнопки «лайк/поделиться».
— Ну что, ребята, — оскалился Жора, разминая плечи, — давайте устроим этим рекламным баннерам демонстрацию с отключением звука.
И битва началась.
Копии рванулись разом. Их движения были резкими, рваными, будто кто-то нажимал «перемотку» туда-сюда. Руки вытягивались, сливались в камеры и микрофоны, а вместо ударов в лицо летели уведомления: «Новый подписчик!», «Вам пришло оповещение!», «Просмотр завершён!».
Жора отмахивался топором, но каждый раз, когда лезвие рассекало копию, та взрывалась ярким логотипом «Error 500» и тут же складывалась обратно.
— Да они бесконечные! — рявкнул он. — Кто их вообще кодил, да я бы…
— Потом скажешь, — перебила Лия, бросая фаербол прямо в голову одной копии. Та вспыхнула, экран над ней мигнул «Content deleted», но через секунду фигура восстановилась.
Макс сощурился. — Они неубиваемые. Это не баги. Это трансляции.
Мирелия шагнула вперёд. Её голос прозвучал, как эхо в пустой базе данных: — Они привязаны к источнику. Пока камера работает — они будут множиться.
Все посмотрели на фигуру в плаще, державшую камеру стримера. Линза мигала красным, а в отражении на секунду мелькнуло лицо самого стримера — испуганное, дергающееся, будто он был заперт внутри.
— Он там! — выкрикнула Лия. — Живой!
— Отлично, — Жора оскалился. — Значит, нам надо не по зомбакам махать, а вон по оператору.
Макс активировал «Инвентарный абсурд». В руках у него материализовался огромный… штатив. — Серьёзно? — фыркнула Лия. — Идеально, — ухмыльнулся Макс. — Будем драться съёмочной группой.
Он подхватил штатив и со всего размаху врезал по одной из копий. Та отлетела, превратившись в значок «Поделиться».
Жора ворвался в гущу, рубя всё, что шевелится. — Скажи честно, Макс, — кричал он, отбивая копию, превратившую руку в кнопку «лайк», — если мы победим, нас тоже будут стримить?
— Если выживем — сами решим! — крикнул Макс.
Лия и Мирелия объединили силы. Магия Лии вспыхивала огненными узорами, а баг-свет Мирелии пробивал копий изнутри, превращая их в пустые аватары, которые оседали на пол, как пепел.
Фигура в плаще пошатнулась — камера дрогнула, и копии замерли на секунду. Из динамика камеры донёсся истеричный визг:
— Ребята, помогите! Это я! Я внутри!
Макс сжал зубы. — Значит, нужно разбить линзу. Только аккуратно, чтобы не угробить его окончательно.
Фигура подняла камеру вверх, и линза засветилась ярче, превращаясь в прожектор. Коридор залило белым светом, а их тени вытянулись и начали шевелиться сами по себе.
— Ой-ёй… — выдохнул Жора. — Кажется, теперь мы дерёмся сами с собой.
И из света вышли их копии — Макс, Лия, Мирелия и сам Жора, только с пустыми лицами и красной надписью над головой:
[Recorded Copy].
Они стояли лицом к лицу… с самими собой.
Копия Макса держала такой же абсурдный штатив, но тот мигал багаными искрами, превращаясь то в лом, то в катану, то в гигантскую ложку. Лия-копия швыряла огненные шары, но они горели холодным пламенем, оставляя на стенах надпись «Fake Cast». Жора-копия вертел топор с дикой скоростью, и каждый его взмах звучал, как глюкнутый звук «fatal error». Мирелия-копия же молча шла вперёд, её баг-свет был искажён, превращён в чёрные молнии.
— Ну офигеть, — протянул Жора, прикрываясь от удара своего «близнеца». — Я всегда знал, что я красавчик, но этот урод — перебор.
— Они не настоящие, — бросила Мирелия, уворачиваясь от своей копии. — Но если проиграем — система запишет это, и они займут наше место.
Лия метнула настоящий огненный шар, он столкнулся с фальшивым — взрыв осветил коридор, а стены пошли артефактами. — То есть если я проиграю — будет ходить Лия-клон? — прошептала она. — Именно, — кивнула Мирелия. — И ты даже не узнаешь, что это не ты.
Макс разозлился. — Ну уж нет! Одного меня с багнутыми способностями хватит. Второй — это слишком!
Он кинулся на свою копию, штатив против штатива. Удары звенели, будто бились два куска кода, и при каждом столкновении по экрану коридора пробегали строки: «Conflict detected», «Source mismatch».
Жора тем временем оттачивал фирменные приёмы. — Слышь, дубль, — рявкнул он, отпрыгнув от удара. — Я тебя хоть и уважаю… но ты — пиратская версия.
С этими словами он разогнался и врезал своему двойнику коленом в живот. Тот согнулся, а Жора сверху зарядил локтем, и экран мигнул «Critical strike».
Лия и Мирелия объединились. Их копии двигались синхронно, но девушки поймали момент и ударили навстречу — огненная сфера и баг-свет пересеклись, образовав вспышку чистого кода. Фальшивые копии дрогнули и рассыпались на пиксели.
— Две готовы, — выдохнула Лия. — Остались мужики, — добавила Мирелия.
Копия Макса уже прижала его к стене, штатив занёсся для удара. Но тут Жора, не раздумывая, метнул свой топор прямо в поддельного Макса. Удар прошёл сквозь него, и копия разлетелась, оставив после себя строку: «Record corrupted».
Макс рухнул на колени. — Спасибо, брат. — Да ладно, — отмахнулся Жора. — Ещё должен будешь кефир.
Осталась последняя копия — Жора-двойник. Он рычал, топор вращался всё быстрее.
— Макс, Лия, Мирелия! — крикнул Жора. — Давайте втроём, пока я себе башку не проломил!
Они кинулись разом. Лия сожгла воздух перед копией, Мирелия ударила баг-светом, а Макс — штативом в подножку. Жора подпрыгнул и, с силой, обрушил свой кулак на затылок двойника.
БАХ! — и копия рассыпалась, оставив над полом лишь мигающий текст: «Recording stopped».
В коридоре снова воцарилась тишина. Камера в руках фигуры вспыхнула, и в линзе мелькнуло лицо стримера: — Ребята… вы красавцы… вытяните меня отсюда!
Фигура в плаще дёрнулась, будто сопротивлялась, но теперь уже дрожала вся.
Макс поднял треснувший кристалл. — Думаю, самое время узнать, какой код ломает эти цепи.
Фигура в плаще дёргалась, как марионетка на кривых нитях. Камера в её руках мигала, показывая то лицо стримера, то пустой экран с надписью «Live interrupted».
— Оно его держит, — прошептала Мирелия. — Архив создал фантома, чтобы использовать стримера как батарейку.
— Какую ещё батарейку? — нахмурился Жора. — Он ретранслирует нас наружу, — пояснила она. — Все наши действия уходят зрителям. Архиву это выгодно: больше просмотров — больше энергии.
Стример в объективе закричал: — Ребята, если вы это видите, ставьте лайки! Они меня сотрут!
Фигура взвыла и рванулась вперёд. Плащ сорвался, и под ним показалось тело, составленное из десятков лиц, наложенных друг на друга: стримера, Лии, Жоры, Макса, Мирелии и даже каких-то случайных игроков. Лица вспыхивали по очереди, будто кто-то переключал каналы.
— Это его личный «контент-монстр», — догадался Макс. — Архив собрал из нас и его всё, что было в памяти.
Монстр взмахнул рукой, и сотни маленьких экранов вылетели наружу. На каждом был кадр боя: вот Макс со сковородкой, вот Лия в заклинании, вот Жора в прыжке. Экранчики полетели в них, как клинки.
— Берегись! — крикнула Лия.
Макс подставил штатив, отразив часть экранов. Но один всё же задел его, и на плече вспыхнула надпись «Streaming…».
— Оно хочет нас заснять до смерти, — прохрипел он.
Жора рявкнул: — Пусть попробует!
Он прыгнул на монстра и врезал кулаком в одно из лиц. То мигнуло, и вместо стримера показало «User offline». Но остальные лица зашипели, и монстр сбросил Жору, ударив его о стену.
Лия собрала сразу три сферы и метнула в монстра. Экранчики вокруг вспыхнули, но вместо того чтобы исчезнуть, начали показывать обратку — как Лия сама атакует себя. Она побледнела: — Он зеркалит меня!
— Тогда бей чужим! — крикнул Макс и активировал «Инвентарный абсурд». Из его рук вылетела огромная фотокамера.
— О, так это война за просмотры, да? — ухмыльнулся он и щёлкнул затвором. Вспышка ударила по монстру, и часть лиц исчезла.
— Отлично! — оживилась Лия. — Значит, он боится чужой записи!
Мирелия шагнула вперёд. Её баг-свет засиял ярче, чем прежде. — Если он питается вниманием, то я дам ему больше, чем он вынесет.
Она раскрыла руки, и над ней завис целый экран баганых символов: «Warning: Memory leak». Поток света обрушился на монстра, и тот взвыл так, что все экраны вокруг затрещали.
В этот момент камера в руках чудовища треснула, и стример вывалился прямо им под ноги, задыхаясь, но живой.
— Я ещё снимаю? — прохрипел он. — Нет, — ответил Макс, поднимая его за шкирку. — Ты теперь снимаешься.
Монстр пошёл трещинами, лица на нём начали рушиться одно за другим. Жора, отдышавшись, схватил свой топор и рявкнул: — Ну что, команда, финальный дубль?
Все вместе они ударили — сковородкой, топором, заклинанием и баг-светом. Монстр разлетелся в сотни пиксельных осколков, а коридор содрогнулся, и система выдала строку:
«Content removed. Stream ended.»
Тишина. Стример сидел на полу, глядя в пустую линзу камеры. — Чуваки… это был самый жёсткий контент в моей жизни. Я вас никогда не забуду. И, может быть… даже перестану орать на стримах.
Жора прыснул:
— Вот это будет настоящая жертва.
Глава 12: Вне Архива
Ослепительный свет схлынул, и их буквально вышвырнуло наружу. Земля под ногами оказалась твёрдой, сырой, пахнущей болотом. Макс первым поднялся, отряхивая глючную пыль со штанов.
— Ну… мы живы, — выдохнул он. — И, похоже, больше не в Архиве.
Лия медленно огляделась. Вокруг тянулись чёрные топи, а деревья выглядели так, словно их нарисовал ребёнок, забыв дорисовать половину веток. Небо мигало кусками — то дневное, то ночное, то вообще пустое серое полотно.
— Класс, — пробормотала она. — Из баг-моргa — прямо в баг-болото.
Жора поднял стримера, который всё ещё держал мёртвую камеру в руках. — Ты там, блогер, не сдох? — Нет, — прохрипел тот. — Но это… это всё записалось! Правда, файл, наверное, весит пару терабайт.
Мирелия шла позади, и её баг-свет еле мерцал. Она выглядела уставшей, но спокойной. — Мы в старой зоне. Здесь когда-то были первые PvP-арены. Но их закрыли… по понятным причинам.
Макс нахмурился: — Каким ещё?
Она кивнула на воду. Там, где должны были быть отражения, вместо их лиц виднелись чужие — какие-то изуродованные игроки, смешанные с НПС. Лица улыбались и шептали: — Вернитесь… вернитесь к нам…
Жора отпрянул: — Охренеть! Я ещё не настолько пьян, чтобы видеть такое!
Вдруг рядом с ними в багане зашипела система. Перед глазами всех всплыло окно:
«Внимание! Ваша группа вторглась в закрытую область. Запускается протокол “Чистильщики”. Подготовьтесь к проверке целостности.»
Лия побледнела: — Чистильщики… Это же те, кто стирает всё лишнее.
Макс крепче сжал кулаки. — Ну что, ребята. От баг-боссов к баг-полицейским. Главное — не дать им понять, что мы сами не совсем целостные.
И воздух впереди разорвался — появились первые силуэты Чистильщиков. Они были не такими хаотичными, как баги: наоборот, идеально симметричные, гладкие, как отшлифованные манекены из белого кода. От этого становилось только страшнее.
— Ну что, — хмыкнул Жора, поднимая топор, — новая арена, новые правила.
Белоснежные силуэты шагали к ним, и каждое их движение было выверенным до миллиметра. Ни одного рывка, ни одного лишнего вздоха. Казалось, что сама система просчитывает их атаки на несколько шагов вперёд.
Макс машинально отступил на шаг назад: — Они даже дышат синхронно… это ненормально.
Жора усмехнулся, но нервно: — По сравнению с этими — даже баги выглядели живыми.
Первый Чистильщик поднял руку, и вокруг неё сформировалось оружие — не меч, не копьё, а идеально гладкая белая полоса кода. Она гудела, как натянутая струна. Другой поднял такой же "меч-строку", и воздух начал вибрировать.
Стример, всё ещё прижимая к груди сломанную камеру, взвизгнул: — Это что, катаны? Это же… охренеть, у меня просмотры улетят в космос! — Если выживешь, — отрезала Лия, и в её руках вспыхнул огненный шар.
Чистильщики двинулись. Их шаги были тихими, но каждый — будто удар метронома. Макс попробовал использовать способность «Инвентарный абсурд» и вытащил первое, что подвернулось:… резиновую уточку.
— …Серьёзно?! — рявкнул он. — Почему всегда это дерьмо?!
Он метнул уточку в ближайшего Чистильщика. Игрушка пискнула, ударилась о белый корпус и… взорвалась яркой вспышкой, будто ослепив врага.
— О! Работает! — Макс даже сам удивился. — Ну, ты и маг инвентаря, — ухмыльнулся Жора. — Ладно, теперь моя очередь!
Он рванул вперёд с топором. Но когда лезвие коснулось "тела" Чистильщика, топор заскрипел и… превратился в чистый код, рассыпавшись у Жоры в руках.
— Ох ты ж мать вашу… — он отпрыгнул назад. — Они переписывают оружие!
Лия выпустила огненный шар — тот угодил прямо в грудь врагу. Но вместо ожога осталась лишь идеально белая поверхность, как будто огонь просто не сохранился.
— Они стирают всё лишнее, — прошептала Мирелия. — Это программа чистки. Здесь сработает только то, что система не успеет "понять".
— То есть баги? — Макс прищурился. — Именно, — кивнула она.
В этот момент один из Чистильщиков протянул руку к стримеру. Белая ладонь потянулась к его камере, и экран устройства начал гаснуть.
— Эй! Нет-нет-нет! — завопил блогер. — Только не мой контент!
Макс, не думая, схватил ближайший мусор из инвентаря — битую табуретку, пластиковую маску и… носок. Всё это влетело в Чистильщика, и, к их удивлению, именно носок сработал: белая поверхность пошла рябью, словно код сбился.
— Значит, план такой, — процедил Макс. — Никакой логики. Только полный трэш и абсурд.
— Моё время пришло! — радостно заорал Жора и достал из-за пазухи старую куртку с надписью «ВИА ГРЫЗУНЫ 2007 Тур». — Пора показать, кто тут хаос!
И они ринулись в атаку, вооружённые самым идиотским инвентарём, какой только могли найти.
Первый Чистильщик размахнул своей «строкой-катаной» и снёс половину стены — камень осыпался беззвучно, превращаясь в чистый белый свет. Макс отскочил и швырнул в него… рулон туалетной бумаги.
И тут случилось чудо: бумага размоталась в воздухе, обвивая фигуру, как код-ошибка. Белый корпус пошёл глюками, и над ним зависла надпись: «Unexpected Input».
— Охренеть… — пробормотала Лия. — Оно реально работает.
Жора, воодушевлённый, достал из инвентаря… ржавый чайник. — На кухне меня этому учили!
Он запустил чайник прямо в голову второго Чистильщика. Тот качнулся, и от удара пошла рябь по его телу, словно картинка начала ломаться.
— Я понял! — закричал Макс. — Они не выдерживают нелогичных предметов! Чем тупее, тем сильнее глючат!
Стример, дрожа, тоже полез в свои записи. — У меня… у меня есть только пауэрбанк и пачка жвачки!
— Кидай жвачку! — рявкнула Лия.
Блогер метнул пачку. Она угодила прямо в «катану», и та в ту же секунду свернулась, превратившись в комок зелёной резины.
— ЭТО… БОМБА! — заорал стример в камеру, трясясь всем телом. — Записывайте, пацаны, лайфхак: жвачкой можно убить босса!
Чистильщики пошли вразнос. Их белые тела покрылись трещинами, как будто сама система начала сбоить. Один вдруг стал в два раза выше, но только наполовину. У второго появились сразу три головы, которые спорили друг с другом. У третьего руки превратились в огромные курсоры мышки.
Макс, не останавливаясь, вытаскивал из инвентаря всё, что под руку попадалось: носки, сломанный зонт, старую кастрюлю. Лия помогала ему, усиливая каждый выброшенный предмет заклинаниями. Жора смеялся, как сумасшедший, размахивая топором, даже если тот превращался в багнутую пиксельную ложку.
Мирелия стояла чуть позади, её глаза светились. Она шептала что-то себе под нос, и вокруг Чистильщиков начали появляться сбои — их движения становились всё медленнее, словно кто-то перезаписывал их код прямо на лету.
— Держите их! — крикнула она. — Я попробую вшить им в память баг, который уничтожит самих себя!
— Ты уверена?! — Макс отбил очередной удар кастрюлей. — Нет! — отрезала Мирелия. — Но у нас нет других вариантов!
Чистильщики двинулись разом, но в тот миг стример, наконец, осмелев, заорал в микрофон: — Подписчики, смотрите! Я тоже герой!
И, схватив из пола кусок кода, он со всей дури запустил им в ближайшего врага. Тот взорвался, осыпав всё вокруг белыми осколками.
— Я… я сделал это? — прошептал блогер. — Не ты, — улыбнулась Лия. — Мы. Все вместе.
Остальные Чистильщики начали рушиться один за другим. Их белые тела ломались, как перегретые процессоры, оставляя после себя пустоту.
Тишина повисла тяжёлая, но они всё ещё стояли. Жора вытер лоб: — Ну что… этот раунд мы выиграли. Но что-то мне подсказывает, это был только первый.
Пол под ногами дрогнул, и вместе с остывающими осколками Чистильщиков воздух сам по себе пошёл рябью. Словно их победа стала командой «перезагрузить уровень».
— Эй, мне это не нравится, — пробормотал Жора, хватаясь за топор, который всё ещё моргал пиксельными глюками. — Обычно после босса дают сундук. А тут — будто нас сейчас кто-то сотрёт к чертям.
Макс сжал треснувший кристалл. Тот загудел, и по полу побежали линии кода, собираясь в круг. — Это не конец… Архив открыл нам следующий слой.
— Следующий слой? — стример чуть не выронил камеру, а лицо его побелело. — Я и так на грани — подписчики думают, что это спецэффекты, а я реально чуть не сдох!
Пол пошёл трещинами. Пространство провалилось, и их всех словно втянуло в чёрную воронку. Звука не было — только гул в ушах, будто их уши залило водой.
И вдруг — тишина.
Они стояли на сером «поле», похожем на старую графическую сетку. Вокруг — ничего: ни стен, ни неба, только бесконечная серо-белая плоскость, размеченная линиями, как миллиметровая бумага. На горизонте рябило, будто кто-то пытался подгрузить текстуры, но они ломались, превращаясь в абстрактные фигуры: гигантские треугольники, обрывки текстур неба, окна меню «Save file» в несуществующей игре.
— Мы где вообще? — тихо спросила Лия, сжимая посох. — Это… — Мирелия нахмурилась. — Сырые файлы. Слой, куда не должно попадать живое. Здесь хранятся заготовки миров, обрывки квестов, коды, которые никогда не были доделаны.
Жора покрутил головой. — Ну, отлично. Мы в свалке идей геймдизайнеров. Где тут выход?
Но ответа не было. Вместо этого перед ними возникло «сообщение». Оно зависло прямо в воздухе:
Warning: Accessing Unstable Zone. Integrity at risk. Survive until next synchronization.
И сразу после этих слов из сетки начали подниматься фигуры. Не люди, не баги — что-то среднее: полуготовые модели персонажей. У кого-то вместо лиц — пустые овалы. У других из тел торчали недописанные кости скелета. Они двигались рывками, будто оживали впервые.
— Чёрт… — выдохнул Макс. — Это даже не враги. Это… наброски. Черновики.
И первая фигура, едва поднявшись, дернулась к ним, издавая звук, похожий на одновременное проигрывание сотни файлов.
— Ну что, — ухмыльнулся Жора, поднимая оружие, — похоже, нас ждёт экзамен на выживание.
Глава 13: Поле сырых файлов
Они вышли в пространство, где не было ни потолка, ни стен. Всё вокруг походило на гигантскую свалку кода: плавающие строки команд, обломки интерфейсов, окна чатов, меню с «Ошибка: не найдено» и бесконечные, как звёзды, куски баганых текстур.
Пол под ногами представлял собой мозаику из разноцветных фрагментов — то камень, то клавиши клавиатуры, то пиксели травы, склеенные криво и вразнобой.
— Красота… музей мусора, — пробормотал Жора, пнув ногой торчащий значок «.exe». Он упал и мгновенно растворился, будто стёрли файл.
Макс нахмурился: — Осторожнее. Тут, похоже, всё живое.
И словно в подтверждение, туман впереди начал сгущаться. Из него вышли «стражи». Только это были не копии героев, а кошмарные смеси.
У первого — лицо Лии, но вытянутое и искажённое, как будто через кривое зеркало, а тело целиком было покрыто железными пластинами от NPC-рыцарей. Во второй руке у него торчала книга Мирелии, но страницы горели баганым пламенем.
У второго — борода Жоры, но вместо головы на плечах торчал экран, где в бесконечном цикле проигрывался стример, кричащий: «Подписывайтесь!» — с разными интонациями.
А третий был и вовсе кошмаром: у него ноги Макса, руки Лии, а на груди мигал красный «ACCESS DENIED».
— Ну вот, — хмыкнул Жора, — теперь я знаю, как выгляжу в плохом сне.
— Это не сон, — тихо сказала Мирелия. Её глаза блеснули тревогой. — Это сырые файлы. Они берут куски нас и лепят как попало.
— То есть у нас кроссовер с Франкенштейном? — спросил Макс, но тут же отскочил: один из монстров ударил по земле, и пол пошёл трещинами.
Стражи двинулись вперёд. Дёргано, рывками, с баганым хрустом. У каждого шаг оставлял после себя искры кода.
— Отлично, — сказал Жора, поднимая топор. — Сейчас я покажу им, что такое оригинал.
Лия стиснула зубы и вызвала пламя. — Только не дай им схватить тебя. Если они вобрали наши части… значит, могут тянуть силы.
Макс сжал кулак. — Тогда держимся вместе. Это не бой с зеркалами. Это бой с хаосом.
И они бросились в атаку.
Первым на них рванул монстр с экраном вместо головы. На дисплее мигал стример, искажённый, как запись с битым битрейтом: — ПОДПИ… ПОДПИ… ПОДПИ…
— Да чтоб тебя! — рявкнул Жора. — Я и так на тебя подписан, выключи рекламу!
Он ударил топором, и по экрану пошли трещины, словно по стеклу. Изнутри вырвался визг: «Лайки-и-и-и!..» — и швырнул Жору звуковой волной так, что того отбросило на десяток шагов назад.
— Он атакует хайпом! — крикнул Макс. — Жора, держись, мы прикроем!
Но Жора только ухмыльнулся, поднялся и вытер кровь с губы: — Да я эти хайпы на завтрак жую. Иди сюда, телемордочка.
Он рванулся вперёд и обрушил на экраноподобного монстра серию ударов, каждый из которых сопровождался вылетом глюков: то смайлики вместо искр, то целые комментарии в воздухе: «Фейк», «Сними ещё», «Когда стрим?»
Тем временем Лия сражалась с искажённой версией самой себя — у чудовища были её глаза, но пустые, словно из выжженной кожи, и в руках горела та самая книга, которую Мирелия обычно носила с собой. Только эта книга сама перелистывала страницы и выплёвывала огненные заклинания одно за другим.
— Так вот как выглядит плагиат, — выдохнула Лия и вскинула руки.
Её огненные стрелы сталкивались с языками баганого пламени книги. Каждое столкновение рождало вспышки, превращавшие пол в то пепел, то лёд, то чёрные пустые квадраты.
Мирелия шагнула рядом и подняла руку: — Я помогу. Это обрывок моей силы, но он не знает границ.
Она вложила свой фиолетовый свет в заклинание Лии, и следующая стрела вырвалась не красной, а пурпурной, и прошила монстра насквозь. Книга завизжала, страницы сами собой сгорели, оставив лишь обугленный каркас.
— Спасибо, — кивнула Лия. — Я бы не справилась. — Ты справилась бы, — ответила Мирелия. — Но вместе мы быстрее.
А Максу достался самый жуткий противник: существо с его ногами и руками Лии, а на груди мигающий «ACCESS DENIED». Оно двигалось рывками, но с бешеной скоростью, словно баганый персонаж с несинхронизированными анимациями.
Каждый удар оно сопровождало коротким звуковым сигналом, и Максу казалось, что кто-то пытается выбить из него доступ.
— Нет уж, дружище, — прорычал он, доставая из инвентаря… надувной матрас. — Ты серьёзно? — крикнула Лия. — Ещё как! — ухмыльнулся Макс.
Монстр прыгнул на него, и в тот миг Макс развернул матрас. Удар отразился, и чудовище врезалось в текстурный пол, застряв в баге: наполовину в коде, наполовину снаружи.
— «ACCESS DENIED», говоришь? — Макс пнул его. — Вот тебе доступ закрыт.
Монстр затрещал и рассыпался на квадраты.
Все трое снова оказались плечом к плечу. Жора с хрипом вытер пот: — Чудный денёк. Я — телевизор сломал, вы — книжку сожгли и ковёр-самолёт в баг отправили.
Макс ухмыльнулся: — И это только начало.
Позади них баганый туман снова зашевелился.
— Похоже, этот «поле файлов» — бесконечное. Сколько ещё у него таких стражей? — тихо спросила Мирелия.
— Столько, сколько нужно, чтобы мы устали, — сказал Макс. — Но у нас на это нет времени.
И впереди показалась новая фигура — вдвое выше остальных, со всеми их лицами разом.
Фигура, что выдвинулась из тумана, выглядела так, будто кто-то решил склеить все предыдущие баги в одну кучу. У неё было несколько голов — на одной висела маска Лии, на другой гримаса Жоры, а в центре торчало пустое лицо стримера, застывшее в вечном «О-о-о» с открытым ртом. Тело походило на мешанину: по три руки, ноги то увеличивались, то исчезали, а грудь переливалась сообщениями чата: «Го в рейд», «Когда новый патч», «Ютуб лучше», «Кринж».
— Мамочка… — пробормотал Жора. — Это что, босс-нарезка? — Скажем так, сборник лучших ошибок, — хмуро ответил Макс. — Только это не саундтрек, а ремикс нашего кошмара.
Монстр издал гул, похожий на одновременный вой, смех и звук выключающегося модема. Пол под ногами треснул. Из трещин полезли маленькие обрывки — баги-щепки, куски кода с глазами, которые прыгали прямо к ногам команды.
— Держите оборону! — скомандовал Макс. — Если мелочь нас зажмёт, до босса мы не доберёмся.
Лия метнула огненный вихрь, превращая ближайших щепок в горящие строки. Мирелия раскинула фиолетовые кольца — те действовали как антивирус, искажения мигали и растворялись.
А Жора с радостным криком «К чертям подписку!» вломился в самую гущу. Его топор разил не только баги, но и сам экранный туман, и казалось, что с каждым ударом он пробивает дырки в реальности.
Монстр-сборка двинулся вперёд. Его шаги звучали как десятки разных шагов сразу: то босоногие, то сапожные, то лязг железа. Взмахнул рукой — и из воздуха вылетела полоса кода, будто лазер, перечеркнувшая пространство.
Макс в последний миг толкнул Лию, и та рухнула на пол, а лазер прошёл над ней, срезав вершины ближайших колонн.
— Спасибо, — выдохнула она. — Потом спасибо скажешь. Сейчас — целься выше!
Они начали атаковать босса втроём. Лия — магией, Жора — топором, Макс — своим инвентарным абсурдом. Из его рук вылетели то табуретка, то ведро, то старый чугунный утюг. Всё это с грохотом било по баганой плоти.
Монстр на миг пошатнулся, но из его груди вырвался крик стримера: — Ребята! Я всё снимаю! Не останавливайтесь!
— Чёрт, — нахмурилась Лия. — Он внутри! Он стал частью этой штуки! — Отлично, — выругался Жора. — Значит, если его добьём, подписчик наш — точно отписка.
Макс покачал головой: — Нет. Мы должны вытащить его живым.
Монстр снова взревел, и сотни строк чата взметнулись вверх, образуя стены. На них бегали слова «BAN», «KICK», «DELETE». Они смыкались вокруг героев, загоняя их в клетку.
Мирелия подняла руки: — Я смогу разорвать ловушку. Но для этого мне нужно время.
— Получишь, — твёрдо сказал Макс. — Держим строй, пока она работает!
И трое рванулись на баг-сборку, отвлекая его внимание, пока Мирелия собирала в ладонях фиолетовый свет, который мог обрушиться на саму структуру клетки.
Клетка из слов сжималась всё плотнее. Каждая буква вспыхивала красным, будто предупреждение системы: «Вы нарушили правила!».
Жора, вжимаясь плечом в стену, рявкнул: — Да пошли вы со своими правилами! Мы тут сами модеры!
Он рубанул топором по букве «B», и та взорвалась, разлетевшись на пиксели. Но на её месте тут же появилась новая — «BAN».
— Не сработает! — крикнула Лия. — Это бесконечная петля!
Макс стиснул зубы, доставая из инвентаря всё подряд. Сначала вытащил обычный фонарик — тот вспыхнул, и на миг буквы дрогнули. Потом — старый CD-диск с надписью «Win XP». Он метнул его в стену — и та заискрилась, словно не знала, как обработать столь древний артефакт.
— Держите ещё чуть-чуть! — Мирелия стояла в центре, её руки горели баганым фиолетом. На лбу выступил пот. — Я почти нашла дыру в их коде!
Монстр-сборка, тем временем, обрушил на них сразу три руки. Из одной вылетела «плашка доната», вторая сжала огненный шар, а третья превратилась в гигантский курсор, пытающийся кликнуть прямо по голове Жоры.
Жора, отбивая топором курсор, заорал: — Ну всё, задолбало! Я щас этой мышке зубы вырву!
Он прыгнул прямо на руку и, орудуя топором, разрубил «курсор» пополам. Тот искрил, как сломанный экран.
А Лия наконец нашла свою цель: она собрала силу и запустила огромный огненный шар прямо в лицо монстру, где мигало лицо стримера. Тот вздрогнул, но не исчез — наоборот, крикнул: — Макс! Не бейте сюда! Я здесь, чёрт возьми!
Макс остановился на секунду. Его сердце ухнуло вниз. — Значит, правда… Он внутри.
Мирелия вскрикнула: — Готово!
Её руки взметнулись вверх, и фиолетовый свет, словно антивирус, прошёл по буквам клетки. Стены с шипением растворились, а на их месте осталась зияющая дыра в пространстве.
— Свободны! — выдохнула она.
Но монстр взревел пуще прежнего. Его грудь раскрылась, и из неё показался стример — наполовину настоящий, наполовину уже пиксельный. Его лицо дёргалось, а глаза мигали, как экраны.
— Помогите… — прохрипел он. — Я… я не могу выйти. Они держат меня!
Макс шагнул вперёд, вскинул кристалл. Тот засиял так ярко, что монстр отшатнулся.
— Ребята, план меняется, — сказал Макс. — Мы не убиваем этого босса. Мы его ломаем. По кускам. И выдираем стримера наружу.
— А если он при этом окончательно глюканёт? — спросила Лия, тяжело дыша. — Тогда мы все тут глюканём, — ответил Макс. — Так что выбора нет.
Он вскинул кристалл, и трещины пошли по воздуху, словно по экрану монитора. Мир вокруг зашипел, готовый развалиться, если они рискнут слишком сильно.
— Ну что, — ухмыльнулся Жора, вытирая кровь с лица, — время для нашей фирменной комбинации? — Время, — твёрдо кивнул Макс.
И вся команда рванула вперёд, синхронно атакуя монстра, чтобы достать стримера из цифровой ловушки.
Всё поле боя превратилось в рваный экран: баги трещали, текстуры накладывались друг на друга, а небо падало вниз, как сбойная заставка Windows.
Макс рванул вперёд первым, с кристаллом в руке. Он сиял так ярко, что даже буквы «ERROR» плавились от света. Кристалл бился, как сердце, — раз, два, три — и каждый удар синхронизировался с его шагами.
Жора, не отставая, прыгнул на плечо монстра. Он ухватился за пиксельную руку, где ещё мигал курсор, и с диким рёвом вогнал топор по самую древко. — Держись, телевизор! Мы тебя вытащим!
Лия не осталась в стороне. Она взмахнула руками, и огонь полетел не в монстра, а прямо в буквы, что держали стримера. Каждая буква горела, рассыпаясь на искры, и с каждым разом его тело проступало всё чётче.
— Я… я чувствую, что меня рвёт на части! — кричал стример, его голос шипел, словно старое радио. — Но продолжайте!
Мирелия стояла в центре, её баганая аура разрасталась всё шире. Она словно вытягивала баги прямо из монстра, и те сыпались на землю кусками кода. — Я держу его! — кричала она. — Ломайте оболочку, но не трогайте ядро!
Макс вскинул кристалл, и тот раскололся на три сияющих осколка. — Ребята! По одному каждому!
Они поймали осколки почти инстинктивно: Лия — левый, Жора — правый, сам Макс — центральный. Осколки зажглись в их руках, и в тот же миг монстр взвыл так, что стены поля пошли волнами.
— Сейчас! — выкрикнул Макс. — Одновременно!
Их удары слились в один: кристалл вонзился в сердце монстра, топор расколол его спину, а огонь прожёг лицо. Трещины разошлись по телу, и он взорвался тысячами букв и иконок.
Из этой бури, обожжённый, но живой, вывалился стример. Он упал прямо на Жору, сбив его с ног. Камера всё ещё работала и снимала, как они валяются на полу.
— Подписывайтесь… — прохрипел он. — Я… я всё снял. Это будет лучшее… чёртово видео в моей жизни…
Жора, отплёвываясь пиксельной пылью, рявкнул: — Если ещё раз уйдёшь в монстра, я сам тебя туда засуну обратно!
Все засмеялись. Даже Лия, которая обычно держала себя серьёзно, выдохнула со смехом. Но смех быстро стих: поле вокруг трещало сильнее, чем когда-либо.
Мирелия подняла взгляд. Её глаза горели тревогой: — Мы его спасли… но Архив знает, что мы теперь опасны. Он не отпустит нас просто так.
И в этот момент над ними раскрылся новый портал, из которого падали гигантские строки текста — будто сама игра решила их переписать.
Макс сжал кулаки. — Ну что, команда. Мы спасли стримера. Теперь спасём и себя.
Поле вокруг грохотало, как рушащаяся операционная система. Трава исчезала, превращаясь в серые квадраты; деревья глючили, то вытягиваясь в бесконечные колонны, то падая внутрь себя. Даже воздух мерцал, как видеокарта на последнем издыхании.
Макс, держа осколок кристалла, чувствовал, как пульс самой игры бился у него в ладони. — Мы его добили… но что-то не так.
Жора помог подняться стримеру, крепко держа его за шиворот. — Ты больше никуда не лезешь, ясно? — прорычал он. — Иначе сам вырежу тебе подписчиков.
— Но… это же лайки! Это хайп! — пролепетал тот, а камера в его руках мигнула, зависла на секунду и выдала сообщение: «Недостаточно памяти. Сохранение повреждено». Стример побледнел: — Погодите… мне кажется, я что-то потерял.
Мирелия шагнула вперёд. Её глаза горели баговым пламенем. — Потерял не только ты. Смотрите!
И действительно: на месте поверженного монстра оставалась зияющая дыра, из которой вытекали не текстуры и баги, а огромные строки кода, как расплавленный металл. Они падали вниз и складывались в нечто… другое.
— О нет… — выдохнула Лия. — Он же не умер. Он… перезапускается.
Код уже сплетался в новый силуэт. Сначала руки — длинные, будто тянулись к каждому из них, потом голова, составленная из десятков лиц игроков. А в груди мигало одно слово: «UPDATE».
— Вот ж… — Жора не договорил, вскидывая топор. — Он возвращается, и, похоже, уже в версии 2.0!
Макс резко обернулся к остальным: — Нет времени! Или мы сейчас уходим, или встретим то, что сильнее всего, что было раньше!
Но выбора им никто не дал. Пол треснул под ногами, и все разом полетели вниз — в новый уровень. Камера стримера заорала вместе с ним, успев поймать лишь один кадр: лица команды, растянутые в искажённом свете падающих строк.
Эпилог к главе 13
Тишина вернулась не сразу. Когда дыра сомкнулась, на поле остались лишь клочья глючной травы и разорванные фрагменты кода, медленно оседающие на землю.
Высоко над этой пустотой, в тени, словно из другого слоя игры, наблюдал Архив. Его лицо менялось каждую секунду — то череп без глаз, то облик старого NPC, то копия самого Макса.
— Они выжили, — произнёс он, и голос эхом пронёсся сквозь слои памяти. — Они падают туда, куда не ступала ни одна нога игрока. Но смогут ли они вынести то, что хранит корень системы?
Он протянул руку — длинную, из сотен строк кода, — и коснулся расползающейся трещины. Та засияла алым, словно помеченная.
— Пусть идут, — прошептал Архив. — Каждое их решение приближает финал. И финал будет моим.
И свет погас, оставив после себя лишь мерцающую надпись в пустоте:
«Loading…»
Глава 14: Редактор реальности
Они падали долго — настолько долго, что успели посчитать до «я больше не считаю». Вокруг не было ни неба, ни земли: только стремительные каскады текста, как водопады, и гигантские кнопки интерфейса, пролетающие мимо — OK, Отмена, Сохранить как…, Не сохранять. Иногда между потоками текста мелькали курсоры мыши, чиркая по воздуху и оставляя светящиеся следы, как кометы.
— Если мы разобьёмся, — прокричал Жора, — скажите, что я умер красиво!
— Скажем, — заорала Лия. — Но сначала выживем!
Макс перехватил ускользающий из ладони осколок кристалла. Тот отозвался теплом и вдруг потянул вниз — не как камень, а как магнит, выбирающий им траекторию. Пространство резко «щёлкнуло», и падение сменилось прыжком: их мягко высадило на серую плоскость, похожую на огромный лист миллиметровки.
Они стояли посреди комнаты без стен. Потолком служила панель инструментов: пиктограммы «Кисть», «Ластик», «Градиент», «Сетка», «Слои». На «полу» бегали пунктирные рамки выделения, а вдалеке, словно острова, плавали гигантские слои, один поверх другого — с подписями вроде layer_bg и final_export_v15.
Стример глухо икнул, снова включая камеру — то ли по привычке, то ли по нервам. — Подп… — он осёкся, поймав взгляд Жоры, и скромно переформулировал: — Мы… мы в редакторе… мира?
Мирелия медленно провела ладонью по воздуху. Под пальцами вспыхнули направляющие, как дорожки для нот. — Да. Это «редактор реальности». Тут не играют — тут собирают. Или разбирают. Смотрите.
Она щёлкнула пальцами — и прямо перед ними всплыла панель Слои. На ней — миллионы строк, большинство серые, «замороженные», но несколько горели активным цветом. Среди них Макс заметил знакомое: , Userspace/Players_UI, Cleanup_Daemons, Backups/StreamCache.
— Лучше не трогать, — пробормотала Лия. — Тут любое «удалить» может оказаться навсегда.
— А любое «вернуть» — не тем, что было, — добавил Макс. Он осторожно убрал кристалл. — Нам бы понять, зачем нас сюда уронили.
Ответ пришёл сам: в полу разошлась пунктирная рамка, и из неё выросло диалоговое окно — гигантское, высотой с дом.
«Конфликт версий. Обнаружены изменённые файлы: — Архив/Поведение — Игроки/Свобода воли — Мирелия/Статус_объект_vs_субъект Выберите действие: [Слить] [Откатить] [Принудительно заменить]»
Жора фыркнул: — Где кнопка «Выпить и забыть»?
— Её спрятали на вкладке «Психотерапия», — вполголоса парировал Макс. — А если серьёзно… Нас заставляют выбрать судьбу мира тремя кнопками.
— «Слить» — смешать всё, — рассудила Лия. — Игроков с Архивом, Мирелию с её… прошлым. Мы получим кашу.
— «Откатить» — вернёт «как было», — Мирелия едва заметно вздрогнула. — То есть снова «инструмент для удаления».
Стример сглотнул: — А «Принудительно заменить» — это… поставить чью-то волю поверх всех?
— Да, — ровно сказала Мирелия. — И если мы нажмём не туда, мир станет чьим-то личным стримом.
Диалоговое окно мигнуло и… сползло вбок, освобождая вид: к ним приближались «процессы». Не баги и не чистильщики — аккуратные серые фигуры в фартуках с эмблемой «гаечный ключ + кисть». Редакторы. У каждого — инструмент в руках: у одного гигантский «Ластик», у другого «Перо», у третьего — «Нож».
— Похоже, сюда пришли люди, которые «настраивают реальность», — прошептал Макс. — И мы для них — лишний слой.
Первый Редактор повёл «Ластиком» — и по полу прошла белая проплешина, стирая следы их шагов. Второй щёлкнул «Ножом» — пунктир порезал воздух и отрезал кусок пространства с плавающими направляющими. Третий расставил якорные точки «Пером» на тени Жоры — и та попыталась улизнуть из-под него, как живой ковёр.
— Э, нет! — Жора рванул вперёд и с глухим треском выдрал свою тень. — Я не бесплатная иллюстрация!
Лия метнула огненный шар… который превратился в градиентную заливку «от оранжевого к прозрачному» и безвредно растёкся по полу.
— Здесь магия — это инструменты, — поняла она. — Значит, и драться надо «как редакторы».
— У меня как раз есть опыт «колхозного фотошопа», — ухмыльнулся Макс и активировал Инвентарь. В руке у него возникла… липкая лента. На ней блестела надпись CTRL+Z.
— Ты… серьёзно? — приподняла бровь Лия.
— Очень, — Макс размашисто хлопнул лентой по воздуху. Полоска щёлкнула над головой Редактора-«Ножа» — и тот на мгновение дёрнулся, будто время откатилось: разрезанный воздух сросся, пунктир схлопнулся. — Работает!
Стример, приободрившись, полез в свой рюкзак: — У меня есть только… маркер и самоклейка «Подписывайся». — Клей на ластик! — крикнул Жора. — Пусть залипнет!
Они действовали как оркестр без нот. Лия училась «рисовать» огнём маски: она обвела «Пером» контур вокруг Редактора с Ластиком — и «заливка» превратила его в пустую силуэтную дырку, через которую тот сам выпал. Жора бросил на второго Редактора сетку направляющих — и тот, цепляясь инструментами, запутался в собственной геометрии. Макс раздавал пощёчины CTRL+Z, откатывая самые опасные ходы. Стример… шлёпал наклейки «Подписывайся» на панели интерфейса, и один раз это реально сработало: кнопка «Принудительно заменить» залипла и ушла в «серый», неактивный режим.
— Не трогайте кнопки! — крикнула Мирелия, глядя на плавающее меню. — Их три — но настоящая не здесь.
— Как это «не здесь»? — оторопел Макс.
Она подняла взгляд. Вверху, среди крошечных пиктограмм, одна мигала реже остальных: Сохранить как… — Решение — не в «что», а в «как». Кому принадлежит финальная копия. Кто будет владельцем файла.
Диалоговое окно опять всплыло. Теперь надписи были другими:
«Конфликт прав: Владелец: Архив Изменения от: Игроки Неучтённый доступ: Мирелия Действие: [Передать права] [Захватить права] [Разделить]»
Жора вытер лоб: — Я за «Разделить». Звучит по-честному.
— По-честному — да, по-безопасному — нет, — сказала Лия. — «Разделить» создаст три хозяина. И каждый потянет в свою сторону. Нас разорвёт.
Редакторы снова двинулись, regroup, уже с рамками выделения размером с дом. У одного — «Волшебная палочка», и она вспыхнула, выделяя Мирелию целиком.
— Не смей, — прошептал Макс и ударил CTRL+Z. Волшебная палочка мигнула и… превратилась в мышь-брелок. Редактор издал возмущённый писк и растворился в сером.
— Времени мало, — сказала Мирелия, глядя на строки UPDATE далеко вверху, где слой «» медленно что-то пересобирал. — Выбирайте.
Стример неожиданно заговорил спокойно: — Если «Архив — владелец», нас сотрут. Если «Игроки — владельцы», мир превратится в платный аттракцион. Если «Мирелия»… вы потеряете меня и всех остальных. Она — часть системы. Система съест её.
— Спасибо за позитив, — буркнул Жора.
Макс медленно дохнул, чувствуя, как в пальцах пульсирует осколок кристалла. — А если… «Передать права» не одному, а файлу, который не привязан ни к Архиву, ни к игрокам?
— Кому? — спросила Лия.
Макс кивнул на кристалл. — Автосохранению. Не личности, не структуре. Механизму, который сохраняет «как есть», без редактуры владельца.
Мирелия задумалась — и впервые за все эти слои улыбнулась. — Это… дерзко. И это может сработать.
Диалог мигнул. Кнопка Передать права дрогнула, словно сомневалась, и добавила подпись: (Save_as: Neutral/)
Сверху, с панелей, спикировал новый «процесс» — крупнее остальных. На груди у него горела эмблема «Админ». В руке — гигантская печать READ-ONLY.
— Похоже, нас заметили, — тихо сказал Макс. — Ребята, держите его.
— А ты? — спросила Лия.
— Я — сохраню, как есть.
Он протянул кристалл к кнопке Сохранить как…, и мир на секунду стал белым. Редактор с печатью рванулся вниз, Жора навстречу ему — с топором, Лия — с горящей маской, стример — с наклейкой «Подписывайся» (куда ж без неё). Мирелия закрыла Макса ладонями, вшивая в его жест баганый фиолетовый щит.
Клик.
Мир содрогнулся. В небе вспыхнула надпись:
«Saving… Do not turn off your universe.»
И в эту секунду печать READ-ONLY опустилась им навстречу, как гильотина.
— Держи-ись! — рявкнул Жора.
Экран мигнул — и всё погасло.
Пустота. Ни цвета, ни текстур, ни кода. Даже дыхание казалось чужим, как будто оно происходило не в их лёгких, а где-то в другом окне процесса.
Макс моргнул — и увидел, что перед глазами висит надпись:
«Сохранение завершено. Файл создан: »
— Живы? — сипло спросил он, шаря рукой в темноте.
— Если это называется «живы», то да, — откликнулся Жора. Его голос звучал, будто через старый микрофон с зашкаливающим шумоподавлением. — Хотя я бы предпочёл реальность с пивом, а не с пустотой.
— Мы… не в пустоте, — тихо сказала Мирелия. Она протянула руку — и в её пальцах вспыхнула сетка координат. Постепенно на ней стали проступать очертания: линии, как на карте, куски текстур, словно кто-то загружал мир заново, слой за слоем.
Стример судорожно включил камеру. Экран мигал, искажая лицо, но запись шла. — Это… это ребут мира? Мы реально видим, как его пересохраняют?
Лия нахмурилась: — Если это новый файл… тогда старый где?
Ответ прилетел сразу: позади, в пустоте, появилось второе окно — красное, с надписью:
« — доступ ограничен. Конфликт владельцев. Попытка возврата.»
Из окна вытекали силуэты — остатки тех самых «Редакторов», с пустыми глазами и инструментами. Но теперь их было сотни. Они стекались в одну массу, и эта масса постепенно формировала гигантскую фигуру — лицо Архива, исковерканное, как мозаика из неправильных кусков.
— Он не сдался, — сказал Макс. — Он хочет перехватить «автосохранение».
— Значит, вторая раундовая драка, — Жора сжал топор. — Ну хоть без багов-крыс, а то меня от них уже воротит.
Мирелия подняла руку, и над её ладонью вспыхнула странная иконка — маленький жёлтый треугольник с восклицательным знаком. — «Предупреждение системы», — прошептала она. — Его можно использовать. Если я поставлю его на Архив, он станет нестабильным, как любой повреждённый файл.
— А если не получится? — спросила Лия.
— Тогда он станет владельцем всего мира, — ответила она ровно.
Стример сглотнул и поднял камеру повыше. — Ребята… если мы выживем, это будет лучший финал сезона. Если нет — по крайней мере, будет хайповый слив.
Макс криво усмехнулся. — Главное, чтобы это был не последний сезон.
Они двинулись вперёд, а Архив, составленный из обломков редакторов, начал опускать на них гигантскую руку-курсор.
— Ну что, команда, — сказал Макс, поднимая осколок кристалла, — время нажать Ctrl+Alt+Del.
И они ударили первыми.
Рука-курсор опустилась, словно хотела раздавить их одним щелчком. Макс рванул вперёд, выставив осколок кристалла, и он вспыхнул, будто стал новой мышкой, готовой отменить команду.
Их столкновение прозвучало, как удар по клавиатуре: клац! — и пространство треснуло.
Из трещин полезли строки кода, каждую секунду меняясь: то «Delete», то «Run», то «Overwrite». Они бились в воздухе, как электрические змеи, обвивая бойцов.
— Макс! — крикнула Лия. — Если он нажмёт «Overwrite», нас сотрут!
— Не дам! — рявкнул тот, отбивая всполохи кода своей импровизированной мышкой.
Жора тем временем уже взбирался по гигантской руке-курсору, орудуя топором. С каждым ударом вылетали баг-ошибки: «Access denied», «Ошибка стека», «Память переполнена». — Вот это я понимаю мясо! — орал он. — Кидайте лайки, пока я жив!
Стример, не веря в происходящее, продолжал снимать. Его камера выдавала красные пиксели, но запись шла. — Это просто апокалипсис кода, народ! Если мы тут сдохнем — знайте, мы были первыми свидетелями конца сервера!
Мирелия шагнула вперёд, держа в руках треугольник-предупреждение. Лицо её светилось мрачной решимостью. — Это моя битва. Я из его кода. Я должна его закрыть.
— Ты не одна, — остановил её Макс. — Мы команда.
Лия подхватила: — Если он правда редактор реальности, то мы должны показать, что реальность — не его инструмент. Она наша.
Они ударили разом. Лия вызвала сотни огненных бабочек, Жора прорубился к самому сердцу Архива, Мирелия швырнула треугольник прямо в лицо гиганта, а Макс вонзил кристалл в центр.
Мир содрогнулся.
Перед глазами всплыло окно:
«Выбор владельца сохранения. Оставить: Архив / Игроки / Никто»
— Вот дерьмо, — выдохнул Жора. — Никто не говорил, что придётся голосовать.
Макс посмотрел на своих. — Если выберем «Никто» — мир рухнет. Если Архив — мы станем просто файлами. Значит, остаётся только один вариант.
Мирелия дрожащим голосом спросила: — А я? Я ведь тоже часть его кода. Если выберут «Игроки», меня может не стать.
Тишина. Даже Архив на миг замер, как будто ждал.
— Нет, — твёрдо сказал Макс. — Ты тоже игрок. Может, сбойный, но живой. И если игра что-то значит — то она для таких, как ты.
Он протянул руку к пункту «Игроки».
И все вместе они подтвердили выбор.
Экран вспыхнул. Архив взревел, рассыпаясь миллиардами строк, словно его переписали в «корзину». Мир начал перезапускаться — но теперь уже не чужой рукой.
Мир содрогнулся, и всё вокруг на секунду стало белым экраном, как при полной очистке памяти. Не было ни земли, ни неба — только пустота, где курсоры и строки кода хаотично метались, теряя связь с сервером.
А потом пространство начало собираться заново. Сначала проступили очертания неба, но уже не баганого: оно сияло мягким светом, будто кто-то впервые написал его заново. Затем под ногами возникла трава — настоящая, не плоская текстура. Она колыхалась от ветра, и это движение было слишком живым для обычного алгоритма.
— Мы… перезапустили мир? — шёпотом спросила Лия, сжимая кулаки.
— Не просто перезапустили, — поправил Макс. Он показал кристалл, теперь расколотый на три осколка, но каждый пульсировал тёплым светом. — Теперь он принадлежит игрокам.
Они оглянулись. Вместо прежних багов по полю бродили NPC, но другие — не пустые оболочки, а ожившие. Один старый торговец, что вечно повторял «Купи меч за пять медяков», вдруг моргнул и сказал: — Спасибо. Я… я снова могу думать.
Жора челюсть уронил. — Ого. А если кузнец теперь тоже живой, может он мне наконец-то сделает броню, а не очередную текстуру на плечах?
Но вместе с ожившими NPC остались и баги. Только теперь они выглядели иначе: не чудовищами, а существами, будто из параллельного мира. Один был похож на прозрачного волка, другой — на двоившегося человека с двумя контурами. Они не нападали, а просто наблюдали, как будто их приняли в новый порядок.
— Это правильно, — тихо сказала Мирелия. Её глаза светились уже не баганым фиолетом, а мягким голубым. — Они — часть этой реальности, её ошибки и её чудеса. Если мы хотим жить в этой игре, нам придётся принять всё.
Стример, весь в пыли и с дрожащими руками, наконец оторвал камеру от лица. — Народ… — его голос был почти сорван. — Я не знаю, как это объяснить. Но если вы всё видите… значит, мы сделали историю.
Он оглянулся на Макса и добавил, чуть тише, уже без публики: — А ведь я думал, что это просто хайп.
— Это был хайп, — усмехнулся Макс. — Но не для просмотров. Для нас.
Над их головами пролетела строка кода, последняя из Архива. Она вспыхнула и исчезла, оставив только слова:
«Сохранение: Игроки. Новая реальность создана».
И в эту секунду каждый почувствовал, что мир действительно стал их.
Глава 15: Финальный Патч
Они стояли на холме, и впервые за всё время перед ними раскинулся мир, который не трещал по швам. Леса дышали зеленью, реки текли плавно, не исчезая в никуда, а на горизонте виднелись города, в которых снова кипела жизнь. Игроки и NPC вместе строили дома, торговали, сражались с монстрами — и никто уже не отличал, кто из них код, а кто — человек.
— Никогда не думал, что доживу до момента, когда у игры будет душа, — пробормотал Жора, и, усмехнувшись, добавил: — И чтобы я в ней тоже.
Макс сжал три осколка кристалла. Они тихо светились, но больше не дрожали. — Это наше. Мы не просто выжили в баге. Мы его приручили.
Лия посмотрела на него внимательно: — И что дальше? Играть в мир, который мы сами написали?
Макс задумался, но вместо ответа поднял взгляд к небу. Оно было чистым, но где-то на краю виднелись новые строки кода, словно автор уже писал следующее обновление.
Мирелия шагнула ближе, её голос звучал иначе — мягко, но с оттенком силы: — Не думайте, что всё кончилось. Там, за пределами этого мира, есть другие уровни. Другие Архивы. И другие… кто будет пытаться стереть нас.
— Прекрасно, — вздохнул Жора. — Только я хотел отдохнуть, наловить рыбы и пива.
Стример, который всё это время молчал, вдруг включил камеру. — Друзья… это мой последний стрим. Нет, не пугайтесь. Просто я понял, что не хочу быть наблюдателем. Я хочу быть частью. Так что если меня смотрят — выключайте экраны. Заходите сюда. Этот мир теперь настоящий.
Он улыбнулся, и впервые без позы, без маски.
Ветер прошелестел по траве. Вдалеке — отголоски битв новичков, смех торговцев, звон кузнечных молотов. Мир жил.
Макс опустил руку с осколками, и они сами растворились в воздухе, вплетаясь в землю, в воздух, в деревья. Это был их вклад, их код в вечность.
— Ну что, — сказал он, глядя на друзей. — Начнём новую игру?
И все — Жора, Лия, Мирелия и даже стример — одновременно рассмеялись.
Белый свет закрыл экран.
Система: Конец сценария. Сохранение выполнено. Игроки — навсегда.
Эпилог: Пустой Сервер
Прошло несколько месяцев. Мир, который они спасли, жил своей жизнью. Игроки ходили в рейды, торговали, в тавернах звучали песни. Макс с Лией открыли маленькую мастерскую артефактов, Жора возглавил что-то вроде наёмной гильдии «Патч-сквады», а стример… ну, он так и остался стримером, только теперь его контент был настоящим: никакой постановки, никакого монтажа — только жизнь.
Мирелия же часто уходила одна, вглубь лесов или на развалины старых квестов. Она говорила мало, но глаза её всё чаще светились тем фиолетовым, что оставил в ней Архив.
И однажды ночью, когда все уже спали, Макс услышал звук. Не баг, не лаг — что-то иное. Шёпот.
Он включил интерфейс — и замер. В углу экрана мигала строка, которой не должно было быть:
> ВНИМАНИЕ. СЕРВЕР: 02. ПОДКЛЮЧЕНИЕ АКТИВНО.
Макс нахмурился. — Второй сервер?..
На экране появилась надпись, словно чья-то рука писала прямо по воздуху:
«Архив был только дверью. Готовы ли вы к следующему уровню?»
Экран моргнул. И в ту же секунду весь мир вокруг будто на миг дёрнулся, как картинка, которую вот-вот заменят другой.
Макс резко выдохнул. — Чёрт… походу, это ещё не конец.
И где-то вдалеке, за горизонтом, небо впервые за долгое время окрасилось баганым фиолетом.
Спасибо за чтение
Вернуться к книге
