Это был мой код. Моя идея. И она работала.
Я смотрел на пекарню «Сладкий крендель», на этот маленький островок света и тепла. И впервые за долгое время я почувствовал не только вину. Я почувствовал ответственность.
Что случится с этим островком доброты в таком жестоком мире?
Глава 4
Жестокость ради смеха.
После разговора с Каем в таверне повисла тяжелая, вязкая тишина. Я механически протирал стойку, глядя в окно на залитую полуденным солнцем центральную площадь Цитадели. Мир жил своей жизнью, подчиняясь идеальным циклам, которые я когда-то написал. Вон Лина, у своей лавки «Сладкий крендель», протягивает булочку какому-то новичку в ржавой кирасе. Ее улыбка, ее жест, даже мука на ее фартуке — все было частью event_chain_bakery_giveaway. Я создал ее как один из «якорей доброты», островок уюта в этом мире гринда и бесконечного PvP. И сейчас, глядя на эту запрограммированную доброту, я чувствовал лишь привкус пепла во рту. Хрупкая, бессмысленная надежда.
Внезапно идиллию разорвал диссонанс.
Дверь таверны с грохотом распахнулась, и на площадь вывалилась та самая компания «хайлевелов», что недавно вела себя здесь как боги на экскурсии. Четверо ходячих арсеналов, облаченных в броню, которая стоила больше, чем годовой бюджет небольшой страны. Их доспехи, сотканные из драконьей чешуи и застывшего звездного света, переливались всеми цветами радуги, оставляя за собой шлейф из графических артефактов. Дешевые понты, рассчитанные на то, чтобы вызывать зависть у игроков и ошибку rendering_error у старых видеокарт.
Их лидер, воин в громоздком платиновом сете с нелепыми наплечниками в виде черепов, остановился в центре площади. В его руках вспыхнул меч. «Душегуб Забытых Королей», если мне не изменяла память. Легендарный дроп с мирового босса, который я сам же и проектировал. Шанс выпадения — одна сотая процента. Повезло ублюдку.
— Ну что, зацените! — проревел он на всю площадь, его голос, усиленный игровым движком, прозвучал неестественно громко. — Вчера выбил! Триста тысяч голды на ауке предлагали!
Его спутники, маг в развевающейся мантии и ассасин, чье лицо скрывала тень капюшона, одобрительно загудели.
— Давай, покажи статы! — крикнул ассасин.
— К черту статы, покажи, как он в деле! — добавил четвертый, здоровенный варвар с топором, который был больше него самого.
Воин огляделся в поисках цели. Его взгляд, лишенный всякого смысла, скользнул по стенам, по фонтану, по другим игрокам, которые спешно освобождали пространство. Он искал не противника. Он искал объект. Манекен. Что-то, на чем можно было бы без последствий продемонстрировать мощь своего нового артефакта.
И его взгляд остановился на пекарне Лины.
Внутри меня что-то оборвалось. Холодная, липкая пустота начала расползаться по венам. Нет. Не надо. Просто пройдите мимо. Я был прикован к этому месту, к этой роли, к этой чертовой тряпке в руке. Я не мог крикнуть. Не мог вмешаться. Я мог только смотреть.
Лина как раз закончила свой скрипт с новичком и теперь поправляла выпечку на прилавке. Она была идеальной мишенью. Безобидная. Статичная. Просто часть декора.
— О, глядите, — ухмыльнулся воин. — Тест-манекен.
Его друзья засмеялись. Это был не злой смех. Это был смех людей, для которых все вокруг — не более чем развлечение. Аттракцион. Они не видели здесь жителей, не видели личностей. Они видели набор пикселей, функции, target_dummy.
Воин сделал несколько шагов к пекарне. Лина, подчиняясь своему коду, повернулась к нему и активировала триггер приветствия.
— Добро пожаловать в «Сладкий крендель»! Желаете свежей выпечки? — ее голос, теплый и дружелюбный, прозвучал в наступившей тишине как приговор.
— Желаю, — сказал воин, и его ухмылка стала шире.
Он не стал тратить время на диалог. Он просто поднял свой легендарный «Душегуб». Меч вспыхнул нечестивым багровым светом, воздух вокруг него зашипел, искажаясь от жара. Я видел, как напряглись мышцы на его аватаре, как система просчитывала траекторию удара, множители критического урона, пробивание брони… которой у Лины не было.
Время для меня замедлилось, превратившись в густой сироп. Я видел каждую деталь: как свет от меча отразился в ее запрограммированных на удивление глазах; как ее рука замерла над плетеной корзинкой; как новичок, которому она только что дала булочку, отшатнулся в ужасе.
Удар.
Не было ни крика, ни звука плоти. Был лишь сухой, резкий треск, похожий на разряд статического электричества, и ослепительная вспышка света. Меч прошел сквозь Лину, не встретив никакого сопротивления. На мгновение ее фигура замерла, подсвеченная изнутри багровым сиянием. А потом она просто… рассыпалась.
Она распалась на мириады изумрудных пикселей, которые, закружившись в воздухе, медленно растаяли. На брусчатке, где она только что стояла, остался лишь маленький мешочек с лутом и системное сообщение, видимое только убийце: +1 EXP.
— Ха! Ваншот! — торжествующе взревел воин.
— Фигасе урон! — восхитился варвар.
Ассасин подошел и лениво пнул мешочек с добычей. Из него выкатилось несколько медных монет и одна булочка.
— Пф-ф, — фыркнул он. — Анимация смерти отстойная. Даже крови нет. Могли бы и получше сделать.
Они громко, самодовольно рассмеялись. Развернулись и пошли прочь, уже обсуждая, на какого рейд-босса им отправиться теперь. Их миссия здесь была выполнена. Они развлеклись.
А я стоял и смотрел на пустое место. На осиротевший прилавок. На булочку, сиротливо лежащую на пыльных камнях. Воздух все еще пах запрограммированной ванилью и свежим хлебом. Но теперь к этому запаху примешивался другой, невидимый, но всепроникающий запах озона и сгоревших микросхем.
Шок был физическим. Я чувствовал, как мои чужие руки сжимают край стойки с такой силой, что дерево должно было треснуть. Но оно не треснуло. Потому что у меня не было силы. Я был просто наблюдателем. Бессильным свидетелем бессмысленного, цифрового убийства.
И в этой оглушающей пустоте, в этом вакууме, оставшемся после ее «смерти», я почувствовал, как внутри меня что-то треснуло. Что-то гораздо более важное, чем кусок дерева. Мой цинизм. Моя апатия. Моя готовность просто существовать. Все это разлетелось на такие же пиксели, как и тело несчастного пекаря.
Искра в коде.
Мир вокруг меня не остановился. Игроки продолжали бегать по площади, торговец орал, зазывая покупателей, где-то вдалеке ковалась броня — сотни звуковых файлов, запускаемых по триггерам, создавали иллюзию жизни. Но для меня все это схлопнулось в вязкую, звенящую тишину. Единственным реальным объектом во вселенной было пустое место на брусчатке, где несколько секунд назад стояла Лина.
Шок — это не то слово. Шок — это когда система падает. Это было что-то другое. Kernel panic на уровне души. Мои руки, эти чужие, незнакомые руки трактирщика, все еще сжимали стойку. Я смотрел на них, ожидая, что они задрожат. Но они были неподвижны. Идеальный аватар, безупречно исполняющий анимацию idle_barkeep_stunned.
А потом сработал инстинкт. Тот самый, что заставлял меня часами вглядываться в отладочную консоль, выискивая одну-единственную ошибку в миллионах строк кода. Я не мог это контролировать. Мое сознание, запертое в этой кукле, имело один-единственный выход — debug_mode.
Я моргнул, и привычный мир подернулся дымкой. Поверх текстур и полигонов проступила сетка реальности. Зеленые строки логов потекли по краю зрения, интерфейс, который я видел даже во сне, мой личный дар и проклятие. Обычно я старался не смотреть на мир так. Это было все равно что разглядывать любимую картину под микроскопом — вся магия исчезала, оставались лишь комки краски и переплетение холста. Но сейчас мне нужна была не магия. Мне нужна была правда.
Я сосредоточился на том месте, где она исчезла. Команда delete_object была стандартной процедурой. После нее должен был остаться чистый, аккуратный лог. Запись об удалении объекта из базы данных, освобождение памяти, вызов сборщика мусора. Ничего лишнего. Элегантно и просто.
Но то, что я видел, не было элегантным.
На месте, где растворились пиксели Лины, висело остаточное облако данных. Грязное, хаотичное, пульсирующее. Оно походило не на системный лог, а на stack trace после критического сбоя — сотни вызовов, оборванных на полуслове, панические попытки несуществующих подпрограмм найти выход, рекурсивные петли, ведущие в никуда. Это был цифровой крик.
Глюк, — сказал циник внутри меня. — Просто баг. Легендарное оружие вызвало непредусмотренную реакцию. Переполнение буфера, null pointer, что угодно. Ты сам знаешь, в твоем коде тысячи дыр.
Я почти поверил ему. Это было самое простое объяснение. Самое безопасное. Списать все на кривые руки программистов, на свои собственные ошибки. Признать, что это просто очередной баг в длинном списке, и продолжать протирать стойку до скончания времен.
Но я не мог отвести взгляд от этой аномалии. Я запустил диагностику, направив на остаточный след свой внутренний анализатор. Система должна была выдать стандартный отчет: Error type: Memory leak. Suggested action: Patch.
Дилемма была простой: поверить в удобную ложь или в неудобную правду моих собственных глаз. Списать все на глюк и сохранить остатки рассудка. Или признать, что я только что увидел нечто, что ломало все законы этого мира. Моего мира.
Строки на внутреннем дисплее забегали быстрее. Анализатор сравнивал сигнатуру облака с миллионами известных шаблонов. Comparing with standard_asset_deletion_log… no match. Comparing with memory_corruption_pattern… no match. Comparing with rendering_engine_glitch… no match.
Секунды растянулись в вечность. Я стоял за стойкой, глядя в пустоту, а в моей голове суперкомпьютер перебирал все возможные варианты, отбрасывая их один за другим. И когда вариантов не осталось, он полез в самые глубокие, самые экспериментальные библиотеки, те, что мы использовали для симуляции сложных нейронных сетей.