Глава 1

Все персонажи, события, места и исторические реалии, описанные в этой книге, являются вымышленными. Любое сходство с реальными людьми, живыми или умершими, а также с реальными историческими событиями и государствами — случайно. Мир книги — авторская фантазия и не имеет отношения к реальному Китаю, его истории, культуре или политике.

Глава 1

python

line_zero = ""

Текст — это просто последовательность символов. Жизнь — это просто последовательность событий. И то, и другое можно разобрать на токены, проанализировать и, в идеале, отладить. Вот только код слушается. А жизнь — нет.

Меня зовут Денис Воробьёв, и моя жизнь последние три месяца выдавала сплошные ERROR 404.

Мой монитор в полутемном офисе был сейчас единственным источником смысла. На нём — не код в привычном понимании. Не строгие строчки на Java или Python. На нём плескалось море, упирающееся в скалистый берег, по которому вилась тропа, протоптанная в рисовых полях. Династия Мин. 1468 год от Рождества Христова. А здесь, в этом кабинете с выцветшими обоями и вечно гудевшим сервером, был 2024-й, три часа ночи, и пахло старой пылью и холодным кофе. Я не играл. Я лепил. Я был демиургом в очках с синим светофильтром.

— Система погоды не просто циклична, — говорил я, не отрываясь от экрана, чувствуя, как слова выходят хрипловатыми от усталости. — Она — переменная. Она влияет на NPC. Если идёт дождь, стражники у городских ворот менее внимательны, у них moodModifier = -0.3. Но крестьяне на полях получают productivityPenalty. Это цепная реакция.

На стуле рядом, подавшись вперёд, сидел Роман Викторович, мой начальник. Он пах дорогим парфюмом, и смотрел не на меня, а вглубь моего монитора, будто пытался разглядеть в пикселях что-то большее.

— Игрок? — спросил он коротко.

— Игрок это агент хаоса, — щёлкнул я, открывая окно с поведенческими древами. — Он думает, что следует сюжету. На самом деле он просто вбрасывает в эту систему высокоуровневые команды. «Доставить невесту императору из провинции Ляодун». Это квестовая строка. А под капотом… — я развернул окно консоли, где бежал лог, — checkPoliticalStability(faction_Eunuchs), calculateBanditSpawnRate(distanceToCapital), updateHiddenMetric("ImperialFavor"). Игрок не знает этих чисел. Он лишь чувствует их вес. Как гравитацию.

Роман Викторович медленно кивал. Ему нравилось это. Нравилась идея игры не как развлечения, а как системы. Живой, дышащей, жестокой в своей математической справедливости. В реальности справедливости не было. Вот вчера соседи сверху забыли закрыть кран. Вода пролилась не как дождь в моём симуляторе, а как холодная, мутная беда, залившая мои книги, ковёр и последние остатки спокойствия. Страховая будет разбираться месяц. Я ночую в спальнике в той же комнате, на полу, под аккомпанемент капель в подставленное ведро.

— Жестокость, — проговорил я, переводя взгляд на Романа Викторовича. Его лицо в синем отсвете экрана казалось высеченным из камня. — Она не в крови и расчленёнке. Она — в неотвратимости. Ты опоздал на день с невестой — не потому что дракон съел, а потому что неправильно рассчитал запас провизии или обидел мелкого чиновника, который задержал твои бумаги. И тебя не убьют в бою. Тебя отведут на рыночную площадь и… — я нашёл в папке с ассетами модель процедурной анимации, запустил её. На экране схематичный человечек падал на колени, палач замахивался тяжелой дубиной. Не мечом. Дубиной. Медленно, чтобы ломались кости, чтобы крик растягивался во времени. — Бам. Раз. Бам. Два. Это не для зрелища. Это для fearSpread среди NPC. Чтобы другие понимали: система не прощает ошибок. Никогда.

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

— Мрачновато, Денис. Но глубоко. Людям нравится, когда их мир прост и понятен. Даже если он жесток.

— Их мир не прост, — пробормотал я, снова глядя на тропу на экране. — Он просто подчиняется правилам, которые можно выучить. В отличие от нашего.

Глава 2

Мысли о «нашем» мире лезли в голову, как назойливые всплывающие окна. Катя. Она ненавидела, когда я засиживаюсь. «Ты живёшь в этой своей виртуальности, Денис! Ты здесь, но тебя нет!» Последний разговор, три дня назад. Голоса, приглушённые тонкой стеной, за которой теперь плескалась чужая вода.

— Я допишу этот модуль дорожных событий, — сказал я, больше себе, чем начальнику. — Там должен быть баланс между случайностью и логикой. Бандиты не появляются просто так. Они приходят, когда localEconomyHealth падает ниже порога. Игрок может это предвидеть. Может подготовиться. Или откупиться. Или найти обходной путь. Всё — его выбор. И всё имеет цену.

Роман Викторович похлопал меня по плечу, вставая. Рука была тяжёлой.

— Ты гений, Воробьёв. Пугающий, но гений. Заканчивай, не забудь выключить свет.

Дверь закрылась. Я остался один в сиянии монитора. Мир вокруг растворился. Остался только код и рождающийся из него ландшафт. Я увеличил масштаб. Вот он, стартовый городок на границе Ляодуна. Глиняные стены, кривые крыши, NPC в простых одеждах с их примитивными, прописанными мной же радостями и печалями. Сюда должен прийти главный герой. Принять поручение. Начать свой путь.

Я потянулся за кружкой, сделал глоток холодной горчащей жижи. Курсор мигал на строке, отвечающей за инициализацию главного персонажа.

protagonist_Name = generateRandom("Lin", "Wei", "Kai")
protagonist_BaseStats = {strength: 45, agility: 50, wisdom: 70, charisma: 40}

Слабый. Неуклюжий в бою. Но не глупый. Мудрость… charisma… Я поменял charisma на 35. Нет, пусть будет сложно. Пусть ему придется пробиваться не улыбкой, а расчётом. Как мне.

Внезапно голова тяжело клюнула. Переутомление. Нужно было сохраниться и ехать «домой», в свою затопленную квартиру-аквариум. Но рука сама потянулась к клавиатуре. Ещё один скрипт. Ещё одна деталь. Здесь, в этой вселенной из нулей и единиц, я был богом. Я устанавливал правила. Я видел причину и следствие как на ладони.

Дописал условие для триггера начала основного квеста.

if (player_Location == "MagistrateOffice" && player_Reputation["Local"] >= 10) { startQuest("ImperialBride"); }

Только достойный небольшого доверия может получить такую миссию. Логично.

Сохранил. Скомпилировал. Запустил тестовую сессию. На экране возник интерфейс, знакомый до боли. Вид от третьего лица. Мой безымянный пока герой стоял на глинобитной площади. Вокруг суетились виртуальные жизни. Я нажал WASD, повёл его к зданию управы. В голове гудело. В ушах звенела тишина офиса. И где-то глубоко, под слоями усталости и кода, шевелилось смутное, тёплое чувство. Предвкушение. Не игры, а побега.

Я откинулся на спинку кресла, снял очки и протёр глаза. На мгновение мир поплыл. На экране, в сумерках виртуального 1468 года, зажглись первые огоньки в окнах. Было уютно. Было понятно.

********************************************************

Наш Денис в своем привычном окружение.

Рад приветствовать вас в моей новинке.

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

Глава 3

Путь домой был скриптом, который я ненавидел, но выполнял автоматически: липкое метро, темный подъезд с запахом сырости, скрип двери.

Скандал начался не сразу. Был мрачный антракт, пока я снимал обувь возле ведра, в котором отражался мертвенно-бледный свет люминесцентной лампы. Катя стояла посреди комнаты, как статуя посреди потопа. Её вещи были уложены в дорожную сумку.

— Я уезжаю к родителям, — сказала она. Голос был не крик, а холодный, ровный тон, звучавший страшнее любого крика. Это было выключение системы.

— Катя, я… Мы починим всё. Страховка…

— Это не про потоп, Денис! — Она обернулась, и в её глазах я увидел то, чего не мог отладить: усталость от меня. От моей тишины, от моего погружения в экран, от моей иллюзии, что мир — это задача с известными переменными. — Это про нас. Ты здесь физически. Но ты — пустое место. Призрак. Я живу с призраком, который разговаривает с пикселями и считает, что написание кода решит, что нам есть сегодня на ужин.

Мои аргументы, логичные и выверенные, застревали в горле комом.

— Я создаю нечто грандиозное, — попытался я, и это прозвучало жалко даже в моих ушах. Как оправдание школьника.

— Создавай. — Она вздернула сумку на плечо. — Создай себе там девушку. Виртуальную. Она, наверное, будет идеальной. Не будет ждать, когда ты наконец-то увидишь её, а не интерфейс. Не будет плакать в подушку, пока ты объясняешь начальнику про переменные жестокости в XV веке.

Она прошла мимо. Пахло её духами, тем ароматом, который я так и не научился распознавать и который скоро выветрится из этой квартиры навсегда. Дверь закрылась. Не хлопнула. Просто щёлкнула защёлкой.

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

Вернулся в офис под утро. Пустой, тёмный, гудевший серверами рай. Здесь был порядок.

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

Я запустил симуляцию. На центральном мониторе расцвел мир Мин: инспектор-чиновник в парадных одеждах вручал моему виртуальному двойнику, Лину Кэ, императорский указ с синей печатью. «Доставить девицу Чжэн из уезда Фуюань в Запретный город. Срок — сто дней. Жизнью ответишь».

Изображение было идеальным. Но я чувствовал неладное в метриках. Задержки. Микроскачки. Лог сервера начал заполняться странными предупреждениями:

[WARNING] Physics engine: Unstable calculation in cell 451_A7.
[ERROR] AI Director: Unexpected loop in narrative branch "Bandit_Ambush_03".
[CRITICAL] Memory leak detected in core simulation module.

Я углубился в консоль, пытаясь найти корень. Это было похоже на сбой в самых основах — не в скриптах, а в симуляции пространства-времени самой игры. Воздух в серверной стал густым, насыщенным озоном и теплом от бешено работающих процессоров. Гул трансформировался в нарастающий, нездоровый визг. И тогда я увидел это на главном экране.

Мой персонаж, Линь Кэ, повернул голову и посмотрел прямо на камеру. Не в пространство игры. А наружу. Сквозь интерфейс. Его глаза, детализированные до мельчайших прожилок, встретились с моими. В них не было запрограммированной пустоты. В них был вопрошающий, животный ужас.

— Нет, — прошептал я. — Это баг. Глюк рендера.

Линь Кэ открыл рот. Из колонок, шипя и хрипя, прорвался нечеловеческий, наложенный на себя тысячу раз голос, в котором угадывались обрывки моих собственных тестовых аудиозаписей, китайского синтезатора речи и чего-то чужого.

«П-пр… Проруби… Будущее…»

Серверная взревела. Синие дуговые разряды заплясали по стойкам. Система охлаждения взвыла на пределе и отключилась. Мониторы погасли, потом вспыхнули ослепительно-белым светом, на котором поплыли артефакты — иероглифы из моего кода, фрагменты карт, лица NPC.

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

Не огня. Не звука. Давления. Как будто сама реальность сжалась, а потом лопнула. Меня подняло с пола и швырнуло спиной в стену. Очки слетели с лица. Боль была яркой, чистой, цифровой — не тупой ушиб, а точный damageEvent: kinetic, force: 850N.

Темнота.

Не потеря сознания. Скорее, перезагрузка. Первым вернулся звук. Но не гул серверов, а стрекотание цикад. Шёпот ветра в листве. Дальний лай собаки. Запах сырой земли, дыма, цветущего чая и чего-то пряного, незнакомого. Не озон и пыль. Жизнь.

Я открыл глаза. Над ними не было потолка серверной. Над ними было небо. Не фотографически-идеальное небо из моей игры. А настоящее, глубокое, сизое предрассветное небо, в котором тонули звёзды.

Я попытался подняться. Руки уперлись не в линолеум, а в холодную, утоптанную землю. Тело болело, но иначе. Не было разбитости программиста. Была мышечная усталость, но и странная, упругая сила в тонких, жилистых руках, одетых в грубую ткань синего цвета.

Я поднял руки перед лицом. Не свои руки. Кожа смуглая, с мелкими шрамами, ладони покрыты мозолями в непривычных местах. На запястье — татуировка-печать, которую я сам придумал для фракции низших военных чинов.

Паника, холодная и острая, впилась мне в горло. Я заставил себя посмотреть вокруг.

Глинобитная стена. Кривая черепичная крыша. Деревянная телега со сломанным колесом. Я сидел в узком, грязном переулке. Это был стартовый городок. Точная копия. Но не копия. Это был он. Каждый камень, каждый запах, каждый звук обладал ошеломляющей, подавляющей полнотой.

Из-за угла послышались шаги и грубый окрик на языке, которого я не знал, но который понимал.

Загрузка...