Глава 9. Босс-файт не по сценарию
Рука Скрыт коснулась размытого силуэта — и мир лопнул. Глыба даже не успел крикнуть.
Серая рябь телепорта схлопнулась, и Глыба рухнул на колено. Броня звякнула. Под латной перчаткой — не плиты подземелья, а что-то мягкое. Трава? Он поднял голову.
Арена.
Круглая, как цирковая, но вместо трибун — отвесные стены из кода. Строки ползли вверх, исчезая в сером небе, где вместо облаков висели свёрнутые логи ошибок. Земля под ногами пульсировала — не земля даже, а какая-то каша из текстур. Трава, камень, песок. Всё сразу, перемешанное, как в битом архиве.
— Где мы? — ДД уже стояла, сжимая две колбы. Розовые волосы дыбом.
— В жопе, — сказал Глыба. — В главной жопе этого мира.
В центре арены сгущался воздух. Не просто сгущался — он наращивал себя, как рендер, не успевающий за процессором. Сначала пиксели, потом полигоны, потом — гигантская фигура. Метров десять в высоту. Человек? Нет. Скорее проект человека. Сшитый из кусков удалённого кода, он светился изнутри багровым, а по телу пробегали строки с ошибками синтаксиса.
Разработчик.
1— Entity «Developer» loaded, — произнесла Система. — Build: deprecated. Status: active. Warning: narrative armor engaged.
— Какая броня? — ДД швырнула колбу.
Огненный шар сорвался с её руки, расцвёл в воздухе и... исчез. Просто исчез. Даже звука не было. Только строчка в воздухе: «Error 418: Iʼm a teapot. Damage redirected.»
— Какого...
ДД не договорила. Её подбросило в воздух и швырнуло обратно на землю. Шкала здоровья просела на треть.
— Он вернул урон, — тихо сказала Скрыт. — Не отразил. Вернул.
Опора уже листал что-то в воздухе, шевеля губами.
— Так, правила. Секция двенадцать, подсекция четыре. Атака не может быть отражена, если она не была зарегистрирована системой как...
— Опора! — рявкнул Глыба. — Короче!
— Мы не можем его ударить. Он не регистрирует наши атаки как валидные. Потому что мы — не часть его скрипта.
Разработчик поднял руку. В ладони зажглась строка: «NullReferenceException: object reference not set». Он метнул её в Опору.
— Барьер!
2Опора выбросил вперёд раскрытую ладонь. Воздух перед ним задрожал, покрылся рябью юридического текста — «Пользовательское соглашение», версия 7.3.1, подсвеченное синим. Строка ударила в барьер — и барьер вспыхнул, обновляясь.
— Он патчит мою защиту! — голос Опоры сорвался в фальцет. — Он применяет хотфиксы прямо во время боя!
— Читер! — заорала ДД. — Админский абуз! Я жалобу напишу!
Разработчик повернул голову. Медленно. Как кран на стройке. Его лицо — если это было лицо — состояло из трёх слоёв: каркас из удалённых функций, мышцы из депрекейтед-методов и кожа из строчек комментариев на несуществующем языке. Глаза — два мигающих курсора.
Он взмахнул рукой.
Из земли вырвались шипы. Нет, не шипы — ошмётки битого текста. Обрывки удалённых квестов, недописанных диалогов, брошенных NPC. Всё это неслось на группу, воя голосами персонажей, которых стёрли.
— Рассредоточились! — Глыба дёрнулся вправо. Шип ударил в плечо.
«Броня: -0. ХП: -0. Статус: narrative_damage_received.»
— Что за...
3Он посмотрел на плечо. Брони не было. Точнее, она была, но теперь на ней горела надпись: «Сюжетный урон. Блокирован до окончания сцены». Надпись висела прямо в воздухе. Мигала.
— Он не атакует нас по-честному, — сказала Скрыт. — Он пишет сценарий, в котором мы проигрываем.
— И мы проигрываем, — сказал Глыба. — Уже.
ДД снова швырнула колбу. На этот раз — зелье стазиса. Разработчик даже не дёрнулся. Колба пролетела сквозь него, как сквозь голограмму, и разбилась о стену из кода. На секунду вокруг застыли строки — и тут же потекли дальше.
— У него нет хитбокса, — сказала ДД. — Вообще.
— Потому что мы должны проиграть, — сказала Скрыт. — Смотрите.
Над головой Разработчика висела полоска. Только это была не ХП-шкала. Строка состояния. Одна-единственная. «Статус: Сюжетная броня. Нарратив: неизбежное поражение игроков».
— Это финальный босс-файт, — сказал Глыба. — И мы в нём статисты.
4Разработчик поднял обе руки. С них сорвались сразу десятки строк. «Segmentation fault», «Buffer overflow», «Stack overflow». Они летели, как копья. Опора выставил три барьера. Первый вспыхнул и погас. Второй обновился. Третий — его тут же переписали.
— Не могу! — Опора попятился. — Он правит быстрее меня!
Строка ударила его в грудь. Никакой крови. Просто надпись: «Ошибка компиляции: персонаж не определён». Опора упал на колени. Его руки начали мерцать.
— Я... теряю текстуры...
— Держись! — ДД подбежала, схватила его за плечо. — Не смей исчезать!
Глыба смотрел на Разработчика. На его курсоры-глаза. На его тело из удалённого кода. На броню, которую нельзя пробить.
Потому что битва уже написана.
И тут он понял. Не как в дурацких книгах — «и в этот момент он понял». Нет. Просто факт. Холодный, как отладочная консоль.
Артефакт Тавтологий. На стриме они зачитали строки с него — и активировали перенос. Строки. Слова. А если...
— ДД! — рявкнул он. — То заклинание! Которое на стриме!
— Что?!
— Артефакт! Мы читали его! Помнишь слова?
5ДД моргнула.
— Ну... «Инитиум финис эст»? Начало — это конец?
— Именно! — Глыба вскочил. — Мы читали его вперёд. И попали сюда. А что, если прочесть...
— ...задом наперёд, — закончила Скрыт. — Ты гений, Глыба.
— Знаю. Но зацените идею.
Разработчик начал новый каст. Воздух вокруг них затвердел — превращался в текст, в код, в скрипт, где они были просто переменными.
— В круг! — скомандовал Глыба. — Быстро! И синхронно! Как на стриме!
Они встали. Плечом к плечу. Четыре фигуры против десятиметрового монстра из байтов и логики.
— Три... Два...
Разработчик взревел. Нет — издал звук. Как модем. Как диалап. Как всё, что исчезло, но осталось в кэше.
— Один!
И они произнесли. Четыре голоса слились в один:
— Тсэ синиф муитини!
Мир схлопнулся.
Ни тьмы. Ни света. Просто — ничего. Пустота. А потом — строка.
«Compiling...»
Медленно. Как на древнем компьютере.
«Recompiling...»
«Recompiling done. New world generated.»
6Глыба открыл глаза. И увидел потолок. Обычный. Белый. С трещиной в левом углу. Он знал эту трещину. Он смотрел на неё каждый вечер перед сном.
Он сел. Диван. Тот самый. Обшарпанный, с продавленной подушкой. Стол. Ноутбук. Кружка с остывшим кофе. Запах старой квартиры. Пыль на мониторе.
Он был дома.
— Получилось, — прошептал он. Голос звучал как обычно. Не оркский. Человеческий.
Он поднял руку. Пять пальцев. Обычных. Не зелёных. Не здоровенных.
— Мы выбрались.
В наушниках на столе что-то зашипело. Он потянулся к ним — и замер.
Перед глазами всплыла строка.
HP: 78/100.
— Что?
Он моргнул. Строка не исчезла.
Status: Alive. Quest: ???
— Нет. Нет-нет-нет.
Он вскочил. Ноутбук. Включить. Проверить.
Экран загорелся. Там был рабочий стол. Обычные иконки. Браузер. Игры. Папка «Работа». Всё нормально. Всё как всегда.
Кроме одного.
В правом нижнем углу висело окно. Маленькое. Как из старой версии Windows.
Чат группы «Вечный ран» — онлайн.
Четыре ника. Глыба. Опора. ДД. Скрыт.
И сообщение.
Опора: Вы это видите?
ДД: АААААААААА
Скрыт: Да.
7Глыба медленно сел обратно на диван.
— Мы всё ещё там, — сказал он вслух.
HP: 78/100.
Он смотрел на монитор. А из монитора на него смотрел он сам. Только в другом окне.
И на том «нём» в другом окне был интерфейс.
И в том интерфейсе — ещё одно окно.
И в том окне — ещё один он.
Бесконечная рекурсия.
8