Глава 2. Пользовательское соглашение с петлёй
Они выбрались из Серверной и вернулись к хижине Отшельника. Над его головой уже висел новый знак.
— Квест обновился.
ДД уже подпрыгивала на месте. Розовые волосы хлестали по плечам, зелья на поясе позвякивали в такт.
— Да ладно вам! Одна взорвалась — подумаешь! Это же квест! Тут經驗а дают!
— Опыта, — поправил Опора. — В логах написано «опыта». Через «о».
— Да хоть через «ё»! Я хочу посмотреть, что будет, если спасти сразу двух!
Скрыт молча указала на угол интерфейса. Там, переливаясь алым, висела строчка:
«Текущий статус: Вечный ран. Попыток выхода: 0. Доступных попыток выхода: 0».
— Это значит, — сказала она, — что любой провал…
— …генерирует новый баг, — закончил Глыба. — Уже проходили.
Отшельник всё ещё стоял у своей покосившейся хижины. Моделька дёргалась — левая рука проваливалась в текстуру стены по локоть, правая нога ушла под землю по колено. Над головой висел восклицательный знак, и под ним — цифра «2».
1— Две кошки, — сказал Отшельник. Голос звучал как запись на заезженной кассете. — Две мои кисоньки. В лесу. За холмом. Спасите.
— А в прошлый раз была одна, — заметил Опора.
— Квест обновился, — пожал плечами Отшельник. — Я что, программирую?
Глыба посмотрел на скипетр в своей руке. Здоровенная дубина с сияющим набалдашником и гравировкой: «Лучшее лекарство — это смех». Ниже мелко: «Скипетр Исцеляющего Сарказма. +15 к регенерации от фейспалма».
— Ладно, — сказал он. — Идём спасать кошек. Но если хоть одна…
— Бах! — радостно выкрикнула ДД и рванула к холму.
Глыба задержался на секунду. В голове мелькнуло: «Снова. Он просто копирует скрипт». Отшельник, квест, кошки — всё это уже было. Система гнала их по кругу, меняя цифры, но не суть. Он мотнул головой и двинулся следом за ДД.
2Лес начинался сразу за хижиной. Деревья росли под углом сорок пять градусов — видимо, генератор ландшафта решил, что так эпичнее. Трава переливалась всеми оттенками фиолетового. Где-то в кронах заливалась цикада, но звук был записан с перегрузкой: каждая трель заканчивалась хрипом, будто цикада курила тридцать лет.
— Кис-кис-кис! — ДД раздвигала кусты. — Отзовитесь, взрывоопасные!
— Ты их пугаешь, — сказал Опора. — Согласно бестиарию, местные кошки реагируют на спокойный голос.
— Согласно чему? Ты уже и бестиарий прочитал?
— Пока вы падали в зеркало, я листал инвентарь. У меня там книг на три слота.
Глыба обернулся:
— И много полезного?
— «Справочник грибника», «Этикет дворфов» и «Сто способов приготовить василиска». Пока нет.
Скрыт двигалась вдоль кромки леса. Плащ делал её почти невидимой среди фиолетовых стволов. Она остановилась и подняла руку.
— Там.
Все замерли.
На поляне сидела кошка. Обычная. Серая. С жёлтыми глазами. Над головой — маркер: «Кошка Отшельника. 1 из 2. Спасите».
— Одна есть, — выдохнула ДД. — Где вторая?
3Вторая нашлась сама. Прямо над первой, в воздухе, висела точно такая же кошка. Вверх ногами. И медленно вращалась вокруг своей оси.
— Это баг? — спросил Глыба.
— Это анимация, — Опора уже открыл логи. — Смотри: «Object_Cat_02: состояние — левитация. Причина: не назначена гравитация».
— Кошка без гравитации, — медленно повторил Глыба. — Они даже кошку нормально не сделали.
ДД уже кралась к поляне. Руки вытянуты вперёд, шаг осторожный — как сапёр над растяжкой.
— Кисонька, хорошая… Не взрывайся, ладно? Мы тебя спасём…
Кошка на земле моргнула. Кошка в воздухе сделала полный оборот.
— Я беру эту, — ДД кивнула на нормальную. — А ты, Скрыт, лови летучую.
Скрыт беззвучно отделилась от дерева и двинулась к парящей кошке. Плащ стелился по фиолетовой траве.
— На счёт три? — предложила ДД.
— Давай.
— Раз…
Глыба сжал скипетр. Опора открыл меню заклинаний. Там было пусто, если не считать одного: «Баррикада из Бюрократии. Эффект: замедляет противника на время чтения договора».
— Два…
4Скрыт протянула руку к левитирующей кошке. Та сделала ещё один оборот и уставилась на неё жёлтыми глазами. В перевёрнутом виде кошачья морда выглядела особенно жутко.
— Тр…
Интерфейс мигнул красным. Над поляной развернулось системное сообщение:
«Внимание! Обнаружен новый баг. Загрузка исправления…»
— Стойте! — крикнул Опора. — Не трогайте!
Но ДД уже схватила кошку.
На секунду ничего не произошло. Кошка мявкнула. ДД расплылась в улыбке.
— Видите? Нормаль…
Интерфейс дёрнулся. Строка «Кошка Отшельника. 1 из 2» мигнула и сменилась на «Кошка Отшельника. 2 из 2». Одновременно с этим кошка в руках ДД исчезла — просто дематериализовалась, оставив после себя облачко пиксельной пыли.
— Что?
А потом земля под ногами ушла вверх.
Нет, не земля. Они. Поляна накренилась. Деревья поехали вбок. Небо и трава поменялись местами. Глыба вцепился в ствол ближайшего фиолетового дуба и увидел, как Опора катится по склону, который секунду назад был ровным.
— Гравитация! — заорал Опора, пересчитывая рёбрами корни. — Она переключилась на всю локацию!
5Скрыт парила в воздухе — её плащ развернулся крыльями, но и её тянуло в сторону. Кошка всё так же вращалась вокруг оси, только теперь не одна: вокруг неё кружились камни, ветки и ДД, которая успела поймать воздушный поток и теперь неслась вверх тормашками.
— Класс! — донеслось откуда-то сверху. — Как на американских горках!
Глыба посмотрел вниз. Туда, где теперь был верх. А там, на «потолке», сидела вторая кошка и спокойно вылизывала лапу.
Первая исчезла. Вторая сидела на недосягаемой поверхности. А мир продолжал вращаться.
— Она же сказала «не трогайте»! — прохрипел Глыба, пытаясь не разжать пальцы.
— Я не сказала! — крикнула Скрыт. — Я только рот открыла!
— Это система! — Опора наконец зацепился за пенёк и открыл интерфейс. — Смотрите! «Исправление загружено. Версия патча 0.0.0.1-альфа». Они поставили патч прямо во время нашего квеста!
— То есть кошка взорвалась бы в любом случае? — ДД пролетала мимо с выражением глубокого облегчения на лице. — Я не виновата!
6— Виновата! — рявкнул Глыба. — Ты схватила её до загрузки патча! Теперь у нас минус одна спасённая кошка и плюс одна гравитационная аномалия!
Квест обновился. Над головой Отшельника — он всё так же стоял у хижины, только теперь вверх ногами относительно них — сменилась цифра.
«Спасите трёх кошек».
Глыба выматерился. Скипетр в его руке засветился — видимо, сарказма накопилось достаточно для активации.
— Три кошки, — прочитал он. — Сначала одна. Потом две. Теперь три. Что дальше? Десять? Сто? Армия кошек, которую мы должны спасти, пока патчи ломают мир вокруг?
— Это же очевидно, — Опора вытер грязь с мантии. — Квест генерирует баги. Баги требуют исправлений. Исправления ломают квест. Квест генерирует новые требования. Это замкнутый круг. Петля.
— Петля, — повторила Скрыт.
Она всё ещё парила, но уже не боролась с гравитацией — просто висела в воздухе, поджав ноги, и смотрела куда-то в сторону. Туда, где за лесом поднимались стены города. Того самого, из которого они выпали.
7— Мы уже это проходили, — сказала она. — В Серверной. Табличка. «Посторонним вход воспрещён».
Глыба проследил её взгляд. Город висел в воздухе. В прямом смысле — половина карты парила над землёй, соединённая с ней только лестницами из кода. Текстуры домов перемигивались. Вместо неба — чёрный прямоугольник с единственной строчкой:
«Рендеринг не завершён. Пожалуйста, подождите».
— Мы никуда не ушли, — сказал он. — Мы просто упали в другую часть того же самого.
— Значит, — Опора поднялся на ноги и отряхнул мантию, — консоль всё ещё…
— Заблокирована, — закончил Глыба. — Да. И тот, кто её заблокировал…
— …продолжает писать патчи, — тихо сказала Скрыт.
ДД наконец приземлилась. Точнее — вписалась розовой шевелюрой в куст. Куст хрустнул, но выдержал. Она выкарабкалась, отплёвываясь фиолетовыми листьями.
— Так, народ. Я всё поняла. Мы не можем спасти кошек. Мы не можем выполнить квест. Мы не можем выйти. Что мы можем?
Глыба посмотрел на скипетр.
— Мы можем перестать играть по их правилам.
— Это как?
8Он развернулся к Отшельнику. Тот всё так же стоял у хижины — вверх ногами, с восклицательным знаком и цифрой «3».
— Эй! — крикнул Глыба. — Отшельник!
— Да? — отозвался тот. — Спасите моих кисонек.
— А если мы не будем их спасать?
Отшельник моргнул. Впервые за всё время его моделька перестала дёргаться.
— Что значит «не будете»?
— То и значит. Отказываемся от квеста.
— Нельзя, — сказал Отшельник. — Квест активен.
— А если мы просто уйдём?
— Куда?
Глыба не ответил. Он повернулся к команде.
— Слушайте сюда. Мы не знаем, кто пишет патчи. Мы не знаем, кто заблокировал консоль. Но мы знаем, что этот кто-то ожидает, что мы будем бегать за кошками.
— Логично, — кивнул Опора.
— Значит, мы не будем.
— А что будем?
Глыба указал скипетром туда, где над лесом висела половина города.
— Вернёмся. Найдём того, кто всё это затеял. И заставим его прочитать пользовательское соглашение. Вслух. От начала до конца.
Опора поморщился.
— Это жестоко.
— Я знаю.
9Интерфейс мигнул. Строчка о патче сменилась новой:
«Внимание! Квест „Спасите кошек“ отменён. Причина: отказ исполнителей».
И следом:
«Инициирован новый квест: „Найти Администратора“. Сложность: максимальная».
ДД подпрыгнула.
— О! Теперь это интересно!
Скрыт молча указала на появившуюся карту. На ней был отмечен город. Прямо в центре — точка с подписью: «Предполагаемое местоположение Администратора».
— Предполагаемое, — прочитал Опора. — То есть даже система не знает точно?
— Или не хочет знать, — сказала Скрыт.
Глыба посмотрел на скипетр. Тот всё ещё светился. Гравировка «Лучшее лекарство — это смех» перемигивалась, будто подмигивала ему.
— Ладно, — сказал он. — Идём искать Администратора. Но учтите: если он предложит спасти кошку…
— Я первая кину зелье, — пообещала ДД.
— Я составлю протокол о нарушении, — добавил Опора.
— А я, — сказала Скрыт, — найду в его коде дыру.
10Глыба кивнул. Гравитация всё ещё работала в обратную сторону, но это уже было неважно. Они развернулись и пошли туда, где над лесом висела половина города. Отшельник проводил их взглядом. Восклицательный знак над его головой погас. Или переключился на ожидание. Кто их разберёт, этих NPC.
Интерфейс дёрнулся и выдал последнее сообщение:
«Пользовательское соглашение обновлено. Пункт 7.3: отказ от выполнения квеста влечёт загрузку альтернативного. Альтернативный квест не имеет гарантии завершения. Удачи».
— Удачи, — повторила ДД и хмыкнула. — Слышь, Глыба, а это угроза или они правда желают?
— В этой игре, — сказал Глыба, не оборачиваясь, — это одно и то же.
Они уходили от хижины. За спиной оставался лес с фиолетовой травой и перевёрнутыми деревьями. Впереди — город, висящий в пустоте на лестницах из кода. И где-то там, в центре, прятался тот, кто знал ответы.
Или делал вид, что знал.
Потому что в мире, где патчи приходят раньше действий, даже администратор может оказаться просто ещё одним скриптом.
Где-то далеко, за лесом, мяукнула кошка.
Или три.
Квест не отслеживал.
11Дорога стала шире. Плиты под ногами сменились булыжником, который при каждом шаге издавал звук «мяу». Не скрипел, не хрустел — а именно мяукал.
— Серьёзно? — Глыба посмотрел вниз.
Булыжник мяукнул в ответ.
— Это баг, — сказал Опора. — Или фича. Но скорее баг.
— А по-моему, мило, — ДД наступила на следующий камень. Тот взвизгнул. — Ой. Извини.
Скрыт молча шла по краю дороги, где булыжники молчали. Или не умели мяукать — кто их разберёт, эти текстуры.
Город приближался рывками. Не плавно — мир подгружался кусками, и каждый раз, когда ландшафт дёргался, Глыба чуть пригибался. Привычка. В реальности он не пригибался. В реальности он сидел в кресле и не ждал, что текстура дома рухнет на голову.
— Слушайте, — ДД обернулась на ходу, — а мы вообще дышим? Ну, типа, по-настоящему?
Опора остановился. Приложил два пальца к запястью. Замер.
— Пульс есть. Дыхание есть. Но я не уверен, что это мои.
— В смысле — не твои?
12— В смысле — они есть в интерфейсе. — Он ткнул пальцем в воздух, разворачивая полупрозрачное окно. — Вот. Показатель «Сытость», показатель «Усталость», показатель «Сарказм».
— У тебя есть показатель сарказма? — удивилась ДД.
— У Глыбы. Я смотрю его статы.
Глыба заглянул через плечо Опоры. Шкала «Сарказм» была заполнена на три четверти и пульсировала зелёным.
— И что это значит?
— Это значит, что ты здоров, — сказал Опора. — Или скоро будешь.
— Я не болен.
— В этой игре — болен. И твоё лекарство — сарказм. Ты буквально должен язвить, чтобы выжить. Поздравляю.
Глыба посмотрел на скипетр. Тот подмигивал.
— Прекрасно, — сказал он без выражения. — Просто прекрасно.
Дорога дёрнулась и подбросила их на метр вперёд. Все четверо по инерции сделали шаг, хотя никто не шёл.
— Лаг, — констатировала Скрыт.
— Нет, — Опора уже открыл логи. — Это не лаг. Система пишет: «Коррекция маршрута в связи с обновлением квеста».
13— Мы же отказались от кошек! — ДД всплеснула руками, и одно зелье на поясе опасно звякнуло. — Какой ещё квест?
Интерфейс мигнул перед каждым. Буквы выстроились в столбик, как будто кто-то печатал в реальном времени:
Квест: «Найти Администратора». Статус: активен. Примечание: маршрут скорректирован. Примечание к примечанию: маршрут проложен через точки интереса. Примечание к примечанию к примечанию: интерес субъективен.
— Оно издевается, — сказал Глыба.
— Оно уточняет, — поправил Опора. — Это разные вещи.
— Нет. Оно издевается. Я за четыре года стримов научился отличать баг от троллинга. Это стопроцентный троллинг.
Скрыт подняла руку. Все замолчали.
Из-за ближайшего дерева — оно росло кроной вниз и корнями шевелило в воздухе — высунулась кошачья морда. Серая. С жёлтыми глазами. И с восклицательным знаком над левым ухом.
— Нет, — сказал Глыба.
— Да! — заорала ДД и рванула с места.
— Стой! — заорал Опора. — Это может быть ловушкой!
ДД не слушала. Она бежала к кошке, и земля под ногами снова мяукала, и зелья звенели, и розовые волосы развевались.
14Кошка сидела и смотрела. Восклицательный знак мигал жёлтым.
ДД протянула руки.
Кошка мяукнула.
И исчезла.
Не убежала — исчезла. Просто перестала быть. На том месте, где она сидела, остался только восклицательный знак, повисший в воздухе.
— Что?.. — ДД затормозила.
Интерфейс дёрнулся и выдал всем четверым:
Квест: «Спасите кошек». Статус: активен.
— Да вы издеваетесь! — Глыба сжал скипетр.
Прогресс: 0 из 2. Примечание: кошка №1 обнаружена. Кошка №1 деспавнена по причине: «ранний контакт». Рекомендация: не приближаться к объекту спасения до подтверждения его материальности.
— Подтверждения материальности, — повторил Опора. — То есть теперь мы должны не просто найти кошек, а сначала проверить, не глюк ли они.
— А как мы это проверим? — спросила ДД.
— Очевидно, — сказал Опора, — надо...
Он не договорил. Потому что из-за другого дерева — того, что висело — высунулась ещё одна кошачья морда. Тоже серая. Тоже с жёлтыми глазами. И тоже со знаком.
Только надпись над знаком была другая. Она гласила: «Кошка №2. Не материальна».
15— Ну, — сказала Скрыт, — по крайней мере, честно.
— Это ловушка, — сказал Глыба. — Они хотят, чтобы мы потратили время.
— Или ресурсы, — добавил Опора. — Кошки могут требовать хила.
— Или просто взрываться, — добавила ДД. — Уже было.
Глыба повернулся к ней.
— Ты всё ещё хочешь спасать кошек?
— Нет. Теперь я хочу понять, почему они взрываются. Это разное.
— Это одно и то же, — сказал Глыба.
— Нет. Спасать — это когда тебе их жалко. А когда интересно, почему механика работает так криво, — это исследование.
Опора хмыкнул.
— В этом что-то есть. Если мы поймём, как генерируются баги, мы сможем предсказывать их.
— Или использовать, — добавила Скрыт.
Все посмотрели на неё.
— Если система генерирует новый баг при каждом провале, — сказала она тихо, — то каждый наш провал меняет мир. Делает его более... дырявым. Мы можем не чинить квесты. Мы можем ломать их так, чтобы дыры вели куда надо.
— К Администратору, — закончил Глыба.
— Именно.
16Интерфейс дёрнулся. Буквы снова сложились в сообщение:
Квест: «Спасите кошек». Статус: приостановлен. Причина: изменение стратегии пользователей. Рекомендация: продолжайте движение к точке интереса.
— Оно нас слышит, — сказала ДД.
— Оно нас читает, — поправил Опора. — Логи фиксируют каждое слово. Я проверял.
— То есть всё, что мы говорим...
— Да. Сохраняется. И, вероятно, влияет на генерацию контента.
Глыба медленно поднял скипетр, посмотрел прямо в интерфейс — туда, где мигала строка статуса, — и сказал:
— Тогда слушай сюда, железяка. Мы идём к Администратору. И если по дороге взорвётся хоть одна кошка...
Он не договорил. Интерфейс мигнул и выдал:
Принято к сведению. Количество активных кошек на маршруте: 3. Примечание: кошки могут не взрываться. Примечание к примечанию: но это не точно.
ДД засмеялась. Опора вздохнул. Скрыт едва заметно улыбнулась.
Глыба опустил скипетр.
— Пошли.
Они двинулись дальше. Город всё так же висел над лесом, и лестницы из кода перемигивались в закатном свете. Закат здесь был фиолетовым и шёл полосами, как на сломанном мониторе.
17Дорога перестала мяукать. Теперь она просто молчала, и это было даже хуже — потому что в тишине стали слышны звуки леса. Шелест текстур. Писк интерфейса. И далёкое, едва различимое мяуканье.
Три кошки где-то ждали.
И, кажется, не только они.
Дорога вывела их на пыльный перекрёсток.
Четыре указателя торчали из земли под углами, которых в нормальной геометрии не бывает. На одном значилось «Лес Вздохов», на втором — «Озеро Несохранённых Текстур», на третьем — «Городская Свалка (бета)». Четвёртый указатель просто мерцал красным, без надписи.
— Голосуем? — спросила ДД.
— За четвёртый, — сказала Скрыт.
— Почему?
— Потому что его нет на карте.
Опора вызвал интерфейс карты. Действительно, перекрёсток отображался тремя путями. Четвёртого не существовало.
— Это даже не баг, — пробормотал он. — Это кто-то специально спрятал.
Глыба уже шагал к красному указателю. Земля здесь была плотнее, почти настоящая — не проминалась под весом орка в латной броне. Деревья по бокам от дороги стояли ровно, без глюков. Слишком ровно.
За поворотом открылась поляна.
18Хижина. Настоящая — брёвна, мох, кривая труба, из которой не шёл дым. Рядом — колодец. На пороге сидел человек в мешковине и смотрел прямо на них, не мигая.
— Путники, — произнёс он скрипуче, но без эмоции. — Помогите старому отшельнику. Кошка пропала. Спасите.
Интерфейс немедленно отозвался:
Новый квест: «Спасите кошку». Награда: 50 опыта, благословение Отшельника.
— Пятьдесят экспы? — фыркнула ДД. — Да я за один взрыв столько нафармить могу.
— Ты не поняла, — сказал Опора. — Здесь нет экспы. Это просто цифры.
— Тогда зачем?
Отшельник снова открыл рот, но вместо слов оттуда вырвался тот же скрип, наложенный сам на себя трижды. Глыба прищурился.
— У него звуковая дорожка заела.
— Или так задумано, — сказала Скрыт.
ДД уже обегала хижину в поисках кошки.
— Тут! — крикнула она. — Серая, с жёлтыми глазами! На крыше!
Кошка сидела на коньке крыши, обернув хвост вокруг лап. Смотрела на ДД без страха. Без интереса. Как на текстуру.
— Кис-кис.
Кошка не шевельнулась.
19— Я её сниму, — сказала ДД и полезла на хижину.
— Стой, — начал Опора, но поздно.
ДД оттолкнулась от колодца, подпрыгнула и ухватилась за край крыши. Кошка моргнула. ДД подтянулась, перевалилась на крышу — и в этот момент кошка исчезла.
Не убежала. Не спрыгнула. Исчезла. Только лёгкое облачко пикселей на том месте, где она сидела.
— Чего?
Интерфейс дёрнулся:
Статус квеста: провален. Причина: объект «Кошка» не прошёл коллизию с персонажем «ДД».
— Какая ещё коллизия? — возмутилась ДД. — Я до неё даже не дотронулась!
Но интерфейс уже переписывал сам себя. Буквы складывались заново, быстрее, чем в прошлый раз:
Внимание! Обнаружен новый баг. Загрузка исправления... Квест перегенерирован: «Спасите 2 кошек». Награда: 100 опыта.
— Что?!
Из хижины донёсся скрежет — тот самый, тройной.
— Отшельник, — сказала Скрыт. — Он теперь говорит.
— Что говорит?
Она прислушалась. Пауза. Потом тихо:
— «Спасите двух кошек».
Глыба выдохнул так, что интерфейс качнулся.
— Идиотский квест.
20— Это не квест, — вдруг сказал Опора. Он стоял с открытым логом, и его пальцы быстро скроллили строки. — Это демонстрация механики. Система показывает нам, как работает «Вечный ран».
— Что ты увидел?
— Смотрите. Первый провал — кошка взорвалась. Второй — объект не выдержал коллизии. Оба раза квест перегенерировался. Удвоились требования. Удвоилась награда.
— И что?
— А то, что каждый наш провал что-то добавляет. Не просто новый баг — новый слой. Новую сложность. Мы не приближаемся к финалу. Мы удаляемся.
ДД спрыгнула с крыши.
— То есть чем больше мы стараемся — тем хуже?
— Именно.
Поляна вдруг показалась меньше. Деревья стояли слишком близко друг к другу. Отшельник всё так же сидел на пороге и смотрел, не мигая.
— Тогда что делать? — спросила ДД.
Глыба поднял скипетр. Посмотрел на Отшельника. На интерфейс. На ребят.
— Идём.
— Куда?
— Искать Администратора. Того, кто пишет правила.
— А как же кошки? — спросила ДД почти с обидой.
21— А кошки, — сказал Глыба, — пусть спасают сами себя.
Интерфейс мигнул красным.
И загрузил новый баг.
22