Макс выдохнул. Еще один баг. Ну этот хоть интересный — говорящая лягушка.
— Да ты прямо моя фоновая музыка, — фыркнул он. — Может, правда петь начнешь? Я, если что, рок люблю.
Квак, конечно же, промолчал. Макс вообще не обольщался — это наверняка было единичное явление. Но все-таки посматривал на жаба. Его глаза — если это вообще были глаза — чуть светились, как перегоревший индикатор на старой микроволновке.
— Ладно. Допустим. Молчи дальше. Просто не подглядывай, когда я начну сохраняться, понял?
Квак не ответил. Но где-то в глубине строки кода будто бы промелькнула пауза. Как если бы он хотел возразить. Или хотя бы понять, о чем речь.
Макс вздохнул:
— Призрачный наблюдатель с репликой уровня тостера. И я ему теперь жизнь доверяю.
Он пошел вперед, в багнутый лес. Квак последовал за ним — на полшага позади. Всегда. Точно в рамках маршрута, прописанного, но ни разу не протестированного.
Они двигались по склону. Каждая третья ступенька — глюк. То нога проваливалась по щиколотку, то камни вспыхивали зеленым и исчезали. Птичьи звуки явно проигрывались наоборот, потому что один особенно противный трель-недодятел заканчивал свою мелодию с характерным: «кйййй-ууууч».
Макс шел, матерился, и думал. Не рефлексировал — думал. Потому что сохраниться в багнутом мире — это не просто нажать F5. Во-первых, тут клавиатуры не выдали. Во-вторых, понятие «сохранение» должно на что-то ссылаться. Состояние. Положение. Идентификатор. А у него ID до сих пор был:
[НЕВЕРИФИЦИРОВАННЫЙ]
[ПРЕЦЕДЕНТ: МИФ]
— Миф, — бурчал он, — мифический идиот? Или мифический простофиля?..
Через пару сотен шагов лес начал меняться. Макс не сразу понял, как: вместо багов — пустоты. Не просто отсутствие объектов, а отсутствие данных. Ветви деревьев вдруг заканчивались нулем, корни — логическим сбоем, и даже тени исчезали, как только он на них смотрел.
— Что это, черт возьми, за… антипейзаж? — пробормотал Макс, замирая у границы сползающего в небытие склона.
Квак замер рядом, не шелохнувшись. Не пищал, не вращал головой, не мигал интерфейсом. Просто сказал:
— Местность нестабильна. Данных нет. Поверхность не верифицирована. Возможна утечка.
Макс вздрогнул. Он даже не сразу понял, что это сказал Квак. Полным предложением. Без стандартной интонации системного логгера.
— Подожди, подожди… — Макс уставился на него. — Ты сейчас… это ты сейчас реально сказал? Сам?
— Подтверждение не требуется. — снова Квак. Четко, без запинки.
— Так. Так-так-так. — Макс сделал круг вокруг спутника, как будто проверяя, не торчит ли где-то новая антенна или модуль речи. — Я тебя не обновлял. Ничего не качал. Не шевелил ни одной галки. Ты с чего это вдруг заговорил, а? — Он прищурился. — Или ты меня все это время просто троллил, а теперь решил выйти из образа?
Квак промолчал. Но повел головой чуть в сторону, будто прислушиваясь к невидимому сигналу. Или к себе.
Макс опустился на корточки, все еще с подозрением поглядывая на своего спутника, и заметил то, что в первую секунду принял за просто глюк земли — небольшое пятно в почве, пульсирующее не в такт остальному пейзажу. Цвет у него был странный: не то голубой, не то прозрачный, как если бы поверхность пыталась отрисовать что-то, но все время спотыкалась об ошибку.
Он протянул руку, осторожно, как будто щупал дно глючного бассейна.
Под пальцами — щелк. Что-то твердое. Угловатое. Гладкое, будто стекло. Но теплое. И… странно тяжелое для пустоты.
— Что за… — Он нащупал край, приподнял. Воздух вокруг дрогнул, как от жары.
Перед ним, словно вынутая из памяти давно удаленной игры, проявилась панель. Полупрозрачная, с вывернутыми слоями интерфейса. Не HUD, не лог — что-то между. Как будто вытащили часть подменю разработчика наружу.
Текст на ней мигнул один раз, прежде чем застыть:
[РЕЖИМ ВОССТАНОВЛЕНИЯ КАНДИДАТА: null]
— Отлично… — Макс крякнул. — Панель из ниоткуда, режим из ниоткуда, и у меня снова статус «кандидат». Спасибо, Свалка, я уже чувствую себя почетным мусором месяца.
Он повернулся к Кваку:
— Ты это тоже видишь?
— Подтверждено. Неавторизованный интерфейс. Объект: фантомный. Источник: отсутствует. Контекст: неизвестен.
Макс тихо присвистнул:
— Ладно. Ты либо скачал себе мод на «говорящего аналитика», либо мы оба официально в режиме самокодирования. Только не говори, что у тебя теперь чувства есть.
Квак посмотрел на него. Не с укором, не с раздражением — просто с каким-то внутренним… эхо. Как будто понял. Или почти понял.
Панель тем временем погасла. Не исчезла — погасла, оставив в воздухе дымчатый след, как метеор, который никто не видел, но все почувствовали.
И в эту секунду Макс понял: это был ключ. Не факт, что к чему-то хорошему. Но точно — к следующему уровню. Или к выходу. Или к тому, чтобы остаться. Как не мусор. Как не сбой. Как точка восстановления, если уж на то пошло.
[restore_candidate::null]
[версия неизвестна]
[метка: отклонено]
Макс замер.
— Это… ты мне говоришь, что я не подхожу для восстановления? Или что вообще никто не подходит?
Панель тихо заморгала. Затем погасла. Но строчка осталась. Висела в воздухе, как брошенная кость. Не объект, не подсказка — паразитный след.
И вот тогда Макс впервые понял, отчего у него от рождения чесался затылок: здесь нет точек сохранения.
Никаких. Ни автосейвов, ни чекпоинтов, ни восстановления.
Все, что не вошло в патч, удаляется. Все, что не верифицировано, исчезает без следа.
Значит — он сам.
— Нахрен. Так дело не пойдет, — он выпрямился. — Если здесь нельзя сохраниться — значит, я сделаю свою точку сам.
Квак отреагировал:
— Незарегистрированный объект. Несанкционированное вмешательство.
— Обращайся, — сказал Макс, ухмыляясь. — Я же типа миф. А мифы сохраняются не по правилам. Их вообще обычно слагают, как и легенды. О! Так может, я идиот легендарный?..
Он усмехнулся собственной шутке и оглянулся.
Интерфейс погас, как будто его никогда не было. Не исчез, не схлопнулся — просто перестал существовать, как забытый объект в фоне сцены. Макс сел. Не от усталости — от процесса. Надо было думать. И думать быстро.
— Окей, — пробормотал он. — Сейв. Чекпойнт. Контрольная точка. Что у них общего?
Он закрыл глаза, перечисляя в голове, будто на экзамене:
— Фиксация состояния. Координаты. Статус игрока. Кэш. Привязка к времени и переменным. И… разрешение на восстановление.
Он посмотрел на землю, потом на Квака. Тот по-прежнему сидел рядом, на удивление спокойно.
Говорил. Сам. Без пинга, без апдейтов, без внешних вызовов.
— Ты ведь… — Макс нахмурился. — Ты не просто стал болтать. Ты заговорил здесь. В этой чертовой локации.
Он резко поднялся и начал ходить туда-сюда, иногда проваливаясь одной ногой сквозь текстуру.
— Значит, здесь что-то есть. Что-то, что позволило тебе… самокодироваться? Модифицироваться? Да какая, к черту, разница. Главное — можно менять поведение объектов. А если можно менять поведение — значит, можно переписать правила.
Он повернулся к багнутому дереву, торчащему из земли под странным углом.
— Если бы я был чекпойнтом, я бы был здесь, — пробормотал он. — На краю зоны. Где никто не проверяет целостность. Где нет контроля. Где никто не подгружает скрипт, пока сам не заглянешь.
Макс встал вплотную к дереву. Положил руку на кору. Она дрожала — не от ветра, а как багнутая анимация, что не успевает за моделью.
— Запомни меня. — Он сказал это не дереву. И не системе. — Запомни меня. Здесь. Сейчас. Так, как есть.
И добавил, выдохнув:
— В следующий раз, когда меня убьют, я хочу возродиться здесь. Под этим деревом. С этим лицом. И с твоей тупой мордой, Квак.
— Подтверждение получено, — ровно ответил спутник.
— Это была метафора! — отреагировал Макс, отдернув руку.
Но в ту же секунду — в ту самую, когда слова зависли в воздухе — мир будто задержал дыхание. Кора под его ладонью затеплилась. Не огнем — кодом. Вокруг него на миг появился тот самый фантомный интерфейс, который раньше показывал:
[restore_candidate::null]
Теперь он мигнул — и null исчез.
На его месте — просто пустота. Свободное поле.
Как будто кто-то… или что-то… ждал, чтобы Макс сам вписал себя в реестр.
И именно в этот момент, почти шутя, почти всерьез, он произнес:
— Я. Макс. Запиши это. Хоть на туалетной бумаге.
Интерфейс дрогнул.
Прозрачные линии закружились в воздухе, собравшись в новую строчку. Медленно, глючно, но неотвратимо она проступила:
[restore_candidate::MAX]
Он даже не успел выругаться, как в левом верхнем углу мелькнуло:
[Задание завершено:::null]
[Новая цель: дождаться восстановления]
Макс замер.
А потом, сквозь зубы, с каким-то странным облегчением:
— Дождаться… Чего? Патча? Или конца?
В ответ раздался звук.
Не щелчок, не скрип. Не ошибка.
Это было… вторжение. Что-то входило в зону — не по сетке, не через загрузку. Без сопровождения. Без интерфейса.
Макс вздрогнул.
Медленно обернулся.
Позади, за искаженной листвой, что-то менялось. Фон рябил. Пространство не держалось.
Он не видел ничего — но чувствовал.
Система прислала кого-то. Или что-то.
Глава 10«Ты должен исчезнуть»
Он почувствовал это до того, как заметил.
Не звук. Не движение. Скорее — пауза в воздухе. Как если бы кадр подвис между двумя тиками. Как если бы сам лес перестал считать время.
— Кажется, у нас гости, — пробормотал Макс, по привычке повернувшись к Кваку.
Но Квак молчал.
Стоял на месте, вытянув шею, и смотрел в никуда. Не мигал. Не шевелился. Только редкий синий пиксель моргал в уголке глаза, как ошибка синхронизации. Макс щелкнул пальцами перед его мордой — тишина.