Макс никогда не считал себя избранным.
Но в одном он был уверен: если где-то существует кнопка «сломать», он найдёт её первым. В школе он умудрялся зависнуть в электронном дневнике, просто меняя тему оформления. В институте он обрушил сервер кафедры, решив проверить, выдержит ли сайт 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 достигнут.]
Доступно: новое умение «Слияние багов».]
Он ещё раз посмотрел на осколок портала, который пульсировал в его руке, как сердце.
И в этот момент он понял: его приключение только начинается.