Все персонажи, события, места и исторические реалии, описанные в этой книге, являются вымышленными. Любое сходство с реальными людьми, живыми или умершими, а также с реальными историческими событиями и государствами — случайно. Мир книги — авторская фантазия и не имеет отношения к реальному Китаю, его истории, культуре или политике.
Глава 1
python
line_zero = ""
Текст — это просто последовательность символов. Жизнь — это просто последовательность событий. И то, и другое можно разобрать на токены, проанализировать и, в идеале, отладить. Вот только код слушается. А жизнь — нет.
Меня зовут Денис Воробьёв, и моя жизнь последние три месяца выдавала сплошные ERROR 404.
Мой монитор в полутемном офисе был сейчас единственным источником смысла. На нём — не код в привычном понимании. Не строгие строчки на Java или Python. На нём плескалось море, упирающееся в скалистый берег, по которому вилась тропа, протоптанная в рисовых полях. Династия Мин. 1468 год от Рождества Христова. А здесь, в этом кабинете с выцветшими обоями и вечно гудевшим сервером, был 2024-й, три часа ночи, и пахло старой пылью и холодным кофе. Я не играл. Я лепил. Я был демиургом в очках с синим светофильтром.
— Система погоды не просто циклична, — говорил я, не отрываясь от экрана, чувствуя, как слова выходят хрипловатыми от усталости. — Она — переменная. Она влияет на NPC. Если идёт дождь, стражники у городских ворот менее внимательны, у них moodModifier = -0.3. Но крестьяне на полях получают productivityPenalty. Это цепная реакция.
На стуле рядом, подавшись вперёд, сидел Роман Викторович, мой начальник. Он пах дорогим парфюмом, и смотрел не на меня, а вглубь моего монитора, будто пытался разглядеть в пикселях что-то большее.
— Игрок? — спросил он коротко.
— Игрок это агент хаоса, — щёлкнул я, открывая окно с поведенческими древами. — Он думает, что следует сюжету. На самом деле он просто вбрасывает в эту систему высокоуровневые команды. «Доставить невесту императору из провинции Ляодун». Это квестовая строка. А под капотом… — я развернул окно консоли, где бежал лог, — checkPoliticalStability(faction_Eunuchs), calculateBanditSpawnRate(distanceToCapital), updateHiddenMetric("ImperialFavor"). Игрок не знает этих чисел. Он лишь чувствует их вес. Как гравитацию.
Роман Викторович медленно кивал. Ему нравилось это. Нравилась идея игры не как развлечения, а как системы. Живой, дышащей, жестокой в своей математической справедливости. В реальности справедливости не было. Вот вчера соседи сверху забыли закрыть кран. Вода пролилась не как дождь в моём симуляторе, а как холодная, мутная беда, залившая мои книги, ковёр и последние остатки спокойствия. Страховая будет разбираться месяц. Я ночую в спальнике в той же комнате, на полу, под аккомпанемент капель в подставленное ведро.
— Жестокость, — проговорил я, переводя взгляд на Романа Викторовича. Его лицо в синем отсвете экрана казалось высеченным из камня. — Она не в крови и расчленёнке. Она — в неотвратимости. Ты опоздал на день с невестой — не потому что дракон съел, а потому что неправильно рассчитал запас провизии или обидел мелкого чиновника, который задержал твои бумаги. И тебя не убьют в бою. Тебя отведут на рыночную площадь и… — я нашёл в папке с ассетами модель процедурной анимации, запустил её. На экране схематичный человечек падал на колени, палач замахивался тяжелой дубиной. Не мечом. Дубиной. Медленно, чтобы ломались кости, чтобы крик растягивался во времени. — Бам. Раз. Бам. Два. Это не для зрелища. Это для fearSpread среди NPC. Чтобы другие понимали: система не прощает ошибок. Никогда.
Я выключил анимацию. В кабинете повисла тишина, нарушаемая лишь гулом железа. Роман Викторович выдохнул.
— Мрачновато, Денис. Но глубоко. Людям нравится, когда их мир прост и понятен. Даже если он жесток.
— Их мир не прост, — пробормотал я, снова глядя на тропу на экране. — Он просто подчиняется правилам, которые можно выучить. В отличие от нашего.
Мысли о «нашем» мире лезли в голову, как назойливые всплывающие окна. Катя. Она ненавидела, когда я засиживаюсь. «Ты живёшь в этой своей виртуальности, Денис! Ты здесь, но тебя нет!» Последний разговор, три дня назад. Голоса, приглушённые тонкой стеной, за которой теперь плескалась чужая вода.
— Я допишу этот модуль дорожных событий, — сказал я, больше себе, чем начальнику. — Там должен быть баланс между случайностью и логикой. Бандиты не появляются просто так. Они приходят, когда 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 года, зажглись первые огоньки в окнах. Было уютно. Было понятно.
********************************************************
Наш Денис в своем привычном окружение.

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