Создать книгу

← Все примеры · Баг в титрах · глава 2 из 14

Скачать пример: EPUBFB2PDF
Читает голос вашего устройства. Студийная аудиокнига — скоро.

Глава 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

Понравилось?

Напишем такую же историю, но свою: с вашими героями, событиями и финалом.

Хочу такую же, но свою