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