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