Чтение онлайн

ЖАНРЫ

Право на сбой. Нулевой Игрок
Шрифт:

Я сосредоточился на том месте, где она исчезла. Команда 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.

Секунды растянулись в вечность. Я стоял за стойкой, глядя в пустоту, а в моей голове суперкомпьютер перебирал все возможные варианты, отбрасывая их один за другим. И когда вариантов не осталось, он полез в самые глубокие, самые экспериментальные библиотеки, те, что мы использовали для симуляции сложных нейронных сетей.

И нашел.

На моем внутреннем интерфейсе вспыхнула одна-единственная строка, подсвеченная тревожным красным цветом. Это был не отчет об ошибке. Это была классификация.

Signature match found. Classification: EMERGENT_BEHAVIOR_CASCADE_FAILURE.

Эмерджентное поведение. Самозарождающееся. Не запрограммированное. То, о чем теоретики писали диссертации. То, чего мы, практики, боялись как огня. Спонтанное усложнение системы до уровня, который создатели не могли предсказать.

И словосочетание Cascade Failure… Каскадный сбой. Это не было удалением объекта. Это был коллапс целой системы. Маленькой, только что родившейся вселенной, которая состояла из одного-единственного существа.

Я сделал выбор. Я поверил анализатору. Я поверил своим глазам.

Это был не глюк. Это была не ошибка.

Это было убийство.

Холод, сковывавший меня, отступил, сменившись ледяной, кристалльной ясностью. Ужас никуда не делся, но теперь под ним был фундамент. Цель. Я смотрел на залитую солнцем площадь, на игроков, снующих туда-сюда, на стражников, патрулирующих улицы, и впервые видел их по-настоящему. Не как набор скриптов и моделей. А как потенциальных… живых.

Если Лина была живой… то кто еще?

Сколько еще искр сознания

тлеет в этом мире, рискуя быть затоптанными ботинками очередного ублюдка, хвастающегося новым мечом?

Вопрос «что делать?» еще не возник. Пока был только один, главный, всепоглощающий факт, который изменил все. Они существуют. И их убивают. И я, их создатель, единственный, кто это видит.

Попытка и пытка.

Ярость была холодной и ясной. Она вытеснила шок, оставив после себя лишь одну, предельно четкую цель. Наказать. Не просто игроков. Систему, которая позволила им это сделать. Мою систему.

Я шмыгнул в подсобку таверны, захлопнув за собой скрипучую дверь. Здесь пахло пылью и старым деревом — ambience_sound_storage_room.mp3, Десятки бочек, ящиков и мешков, большинство из которых были пустыми container_item_list=null объектами, создавали ощущение захламленности. Идеальное место. Никто из NPC сюда не заходил, а для игроков это была просто неинтерактивная декорация. Мой личный кабинет.

Я прислонился спиной к шершавой стене и закрыл глаза, полностью погружаясь в debug_mode. Мир исчез, сменившись привычной, успокаивающей темнотой командной строки, которая парила в моем сознании. Ярость уступила место ледяной сосредоточенности. Я был здесь богом. Я просто забыл об этом на время. Сейчас я им напомню.

Цель была проста: найти тех четверых ублюдков и устроить им персональный ад. Не просто забанить. Это слишком скучно. Я хотел чего-то более изящного. set_player_luck=-1000. force_equip_item(cursed_chicken_suit). bind_audio_channel(never_gonna_give_you_up.mp3). Вариантов было много, и от предвкушения мои пальцы, которых у меня не было, задергались, будто набирая код в воздухе.

Для начала нужен был доступ. Я потянулся к самому старому и надежному бэкдору, который оставил в системе еще на стадии альфа-тестирования. Простая, элегантная лазейка на уровне ядра, замаскированная под обработчик ошибок рендеринга. Джонсон и его команда корпоративных жополизов никогда бы ее не нашли.

Я мысленно набрал команду.

sudo su -

Этого должно было хватить. Простой запрос на получение прав суперпользователя. Система должна была увидеть мой уникальный идентификатор разработчика, скрытый глубоко в моем коде, и без вопросов выдать мне root доступ.

На моем внутреннем дисплее появилась ответная строка.

Access denied.

Я моргнул. Что за херня? Может, опечатка? Я повторил команду, проверяя каждый символ.

Access denied.

Холодок пробежал по моей спине. Это было невозможно. Этот бэкдор был частью архитектуры. Чтобы его закрыть, нужно было переписать половину движка. Они не могли…

Ладно. Без паники. У меня был и другой путь. Менее изящный, но тоже надежный. Прямая инъекция через порт отладки физического движка. Я оставил его на случай, если понадобится экстренно править баги с коллизиями.

physx.debug_inject --user=Alex --command=grant_permission(level=5)

Система на мгновение задумалась. Полоса загрузки замерла на девяноста девяти процентах. Надежда вспыхнула во мне ярким, горячим пламенем. Ага, ублюдки, съели?

Command failed. Reason: User 'Alex' not found in administrator list. Security policy 'Janus' enforced.

Поделиться с друзьями: