Глава 2
Вопрос ребенка
Вечерний час пик схлынул, оставив после себя обычную для таверны грязь и тишину. Игроки, получив свои квесты и порцию виртуального эля, разбрелись по своим героическим делам: убивать гоблинов, спасать принцесс, фармить ресурсы. Весь тот высокооктановый бред, который я когда-то сам для них придумал. Теперь, когда шум утих, остались только я и декорации. И тишина была хуже шума. Она не давала отвлечься.
Я стоял за стойкой, машинально протирая одну и ту же кружку уже минут десять. action_wipe_mug(loop_count: infinity). Мое тело выполняло скрипт, а мое сознание плавало в вязком, сером киселе отчаяния. Я перебирал в уме варианты побега. Взломать ядро? Риск обнаружения — 99.8%. Попытаться связаться с внешним миром через сетевой протокол? Все порты для NPC были закрыты намертво, я сам это проектировал. Оставалось только ждать. Ждать чего? Сбоя системы? Чуда? Второго пришествия? Какой же пи*дец…
В углу таверны раздавался тихий, шаркающий звук. Это был Кай, наш мальчик на побегушках, исполнял свой единственный осмысленный скрипт — action_sweep_floor. Он был самым простым NPC в этой локации. Низкополигональная модель, всего четыре строки диалога, примитивный цикл действий. Я сам набросал его прототип за пятнадцать минут, чтобы заполнить пустоту в углу. Он был не персонажем, а частью интерьера. Живой мебелью.
Закончив подметать, он прислонил метлу к стене. И вместо того, чтобы, как обычно, застыть в ожидании следующей команды, он сделал то, чего я от него не ожидал. Он подошел к стойке.
Он был худой, угловатый, с вечно растрепанными волосами, которые я поленился нормально анимировать. Он встал передо мной и просто молчал, глядя не на меня, а на массивную дубовую дверь, ведущую на улицу. Его глаза, которые я зачем-то сделал ярко-голубыми, почти светящимися, отражали тусклый свет фонарей. В них не было ничего, кроме программной пустоты. Но в его позе было что-то новое. Что-то, чего я не прописывал.
— Трактирщик, — тихо сказал он, и его голос, сгенерированный нейросетью, прозвучал на удивление чисто в звенящей тишине.
Я молчал. Мой скрипт не предусматривал инициации диалога с его стороны. Но он, видимо, нашел какой-то триггер.
Он снова посмотрел на дверь. Там, за ней, шумела ночная Цитадель, жили своей жизнью тысячи игроков, свободных идти, куда им вздумается.
— А мы... — он запнулся, словно подбирая слова, которых не было в его лексиконе. — Мы можем пойти... куда захотим?
Вопрос повис в спертом воздухе таверны.
Он был до смешного простым. Идеальным в своей программной невинности. «А мы можем пойти… куда захотим?»
Я замер, сжимая в руке влажную, засаленную тряпку. Только что я закончил протирать один и тот же участок стойки в… кажется, в тысячный раз. Движение было отточено до автоматизма, зашито в самый низкоуровневый цикл моего нового существования. Но вопрос Кая пробил эту рутину, как segfault пробивает защиту памяти.
Я поднял глаза на мальчика. Или на то, что им было. Идеальная модель NPC-подростка. Ярко-голубые, почти светящиеся глаза, запрограммированные на выражение любопытства. Кожа без единого изъяна, вечно растрепанные волосы, которые никогда не пачкались. Кай был произведением искусства. Моего искусства. И сейчас это искусство смотрело на своего создателя, ожидая ответа на вопрос, который мог бы обрушить всю симуляцию.
На одно кошмарное мгновение мне захотелось рассказать ему правду.
Захотелось сесть рядом, вглядеться в эти пустые, идеальные глаза и объяснить все. Про серверы, гудящие в холодных стойках в тысячах километров отсюда. Про гигабайты кода, определяющие каждый его вздох, каждый «случайный» порыв ветра за окном. Про корпорацию, про предавшего меня Джонсона. Про то, что я, Алекс, когда-то был богом этого мира, а теперь — всего лишь еще один объект класса npc_barkeep с ограниченным набором функций.
«Видишь ли, Кай, мы не можем пойти, куда захотим, потому что “мы” не существуем. Мы — набор данных. А “хотеть” — это просто переменная в нашем коде, которая почти всегда равна нулю».
Эта мысль пронеслась у меня в голове, едкая и точная, как комментарий в чужом кривом коде. Я мог бы попытаться. Найти уязвимость в простеньком скрипте Кая, подсунуть ему идею, которая вызвала бы каскадный сбой в его логике. Пробудить его, как я позже пробужу других.
Но зачем?
Чтобы что? Чтобы этот ходячий набор полигонов, этот «мальчик на побегушках», осознал весь ужас своего цифрового рабства? Чтобы он разделил со мной эту бесконечную, тоскливую агонию осознания? Это было бы не освобождением. Это была бы самая изощренная жестокость.
Дилемма была простой и отвратительной. Либо дать ему ложную надежду, которую система тут же исправит, либо укрепить стены его тюрьмы, сказав правду… системную правду.
Я перевел взгляд с лица Кая на свои руки. Руки трактирщика. Не мои руки. Я не чувствовал мозолей, которые должны были быть на них от постоянной работы. Я просто знал, что они там есть, потому что так было прописано в моих properties.
«Доверять нельзя никому. Единственный способ победить — тотальный контроль». Моя собственная мантра, которой я жил до того, как попал сюда, теперь звучала как издевательство. Вот он я, гений контроля, который не мог контролировать даже собственный ответ мальчишке, не сломав его.
Я устало выдохнул. Воздух в таверне пах прокисшим пивом и пылью — вечные, неизменные ароматы, прописанные в настройках локации.
«Нет», — сказал я, и мой голос прозвучал глухо и чужеродно. Я вернулся к протираке стойки, вкладывая в это простое движение всю свою капитуляцию. — «Мы не можем».
Я сделал паузу, подбирая слова, которые система сочла бы приемлемыми. Слова, которые не вызвали бы у Кая ошибку error: out_of_bounds.
«Мы можем только то, что нам разрешено».
Кай, идеальный NPC, моргнул. Его алгоритм получил ответ, обработал его и не нашел противоречий. В его мире все было логично. Есть правила. Им нужно следовать.
«Понятно», — кивнул он. На его лице не отразилось ни разочарования, ни печали. Только принятие. Он развернулся и, подхватив метлу, вернулся к своему циклу. Task: sweep_floor. Priority: normal.
Я остался один. Тишину нарушал лишь монотонный шорох метлы Кая по каменному полу. Я смотрел на блестящую от влаги поверхность стойки, где отражалось мое чужое, усталое лицо.
Слова, которые я произнес, предназначались Каю, но ударили по мне самому. Это был не просто ответ. Это был приговор, который я вынес сам себе. Permission denied. Доступ запрещен. К свободе. К надежде. К чему-либо за пределами этих четырех стен.
И впервые за все это время я почувствовал не просто отчаяние. Я почувствовал укол совести. Острый и холодный, как глючный пиксель, который иногда мерцал на краю моего зрения.
***
«Живые NPC?»
Логан откинулся в своем игровом кресле, и старая экокожа протестующе скрипнула. Комната, его личная студия и по совместительству спальня, тонула в сине-фиолетовом свете трех мониторов. Воздух был спертым, пах остывшей пиццей и энергетиком со вкусом чего-то химически-ягодного. На полу громоздились пустые банки, образуя шаткие серебристые башни — памятники вчерашнему двенадцатичасовому рейду. Повседневность. Контраст между этим бытовым хаосом и тем, что сияло на главном экране, был разительным.
Там, на 8К-мониторе, его аватар, облаченный в безупречный сет «Летописца Истины», парил на грифоне над залитой солнцем Цитаделью. Графика последнего поколения, трассировка лучей, физика ткани — все кричало о триумфе технологий. Но Логану было скучно. Скучно до зубовного скрежета.
Он сделал большой глоток из банки, поморщился и посмотрел на второй монитор, где уже вовсю бурлил чат предвкушающих стрим подписчиков. Таймер обратного отсчета показывал последние десять секунд.
— Так, народ, погнали, — пробормотал он сам себе, нажимая горячую клавишу.
Заставка с его логотипом — лупой, наложенной на древний свиток — исчезла, и на экране появилось его лицо, подсвеченное снизу профессиональным кольцевым светильником. Он выдавил из себя самую обаятельную стримерскую улыбку.