Мужчина со стоном садится на краю открывшейся капсулы.
— Вот чёрт, — хрипит он неразборчиво. Прокашливается, повторяет: — Вот чёрт. Башка трещит, как будто её и правда прострелили.
— Это последствия употребления алкоголя… — начинает голос.
— Заткнись.
— Умолкаю.
— Сука, живот… — мужчина ковыляет в санмодуль.
— Да твою мать! — доносится оттуда. — Ногу порезал! Ну что за день такой?
— Вы не убрали осколки разбившегося в прошлый раз флакона, — сообщает голос. — Вам требуется экстренная медицинская помощь? Напоминаю, вы отказались от медицинского страхового обслуживания, вызов будет платным.
— Не требуется, заткнись.
— Умолкаю.
Выходя из ванной, мужчина неловко ковыляет, держась за стены. Левая нога стоит на пропитывающемся кровью полотенце, которое он с каждым шагом везёт по полу, не отрывая ступню от пола. На светлом пластиковом покрытии остаётся размазанный кровавый след.
— Да где же он… — мужчина роется в аптечке.
— В прошлый раз вы не положили бинт на место, — говорит голос. — Он лежит в посудном ящике стола.
— Чёрт. Да. Точно.
Мужчина, взяв упаковку бинта, шаркает к стулу, садится, пытается поднять повреждённую левую ногу, подтянув её на колено правой, но у него не выходит, колено не желает сгибаться, и нога раз за разом выскальзывает у него из рук.
— Сука. Сука-сука-сука. Ненавижу себя, — он распрямляется, хрустя составами, берётся за голову. — Ох, как же, сука, всё болит-то!
— Это последствия…
— Ещё раз скажешь про последствия, нассу тебе в динамик.
— Технически это неисполнимо. Умолкаю.
Мужчина поднимается со стула и, держась за него руками, осторожно садится на пол. В последний момент стул накреняется, и они вместе падают.
— Вот говно, теперь ещё жопу отбил! Если твой день начинается пули в башку, то ожидать хорошего от него не приходится.
Он с трудом, кряхтя и невнятно ругаясь, подтягивает к себе кровоточащую ступню и принимается её неловко бинтовать вытянутыми руками.
— Рекомендуется предварительное обеззараживание или промывание раны. В аптечке есть раствор хлоргексидина.
— Ты предлагаешь мне встать, дойти до аптечки, взять там пузырёк и сесть обратно?
— В рану могла попасть грязь и бактерии, пол вы в последний раз мыли…
— Заткнись.
— Умолкаю.
— Грязь так грязь, хрен с ней. Какой инкубационный период у столбняка?
— Инкубационный период столбняка составляет обычно от трёх дней до трёх недель, чаще всего первые симптомы появляются через семь — четырнадцать дней после заражения. На длительность инкубационного периода влияет расстояние от места проникновения возбудителя до центральной нервной системы: чем ближе очаг инфекции к ЦНС, тем короче инкубационный период и тяжелее течение болезни.
— Нога далеко от головы, так что будем оптимистами — пара недель у меня есть. Я, может, столько и не проживу ещё. Чёрт, худшая повязка в моей жизни. Ладно, мне с ней не бегать, — мужчина цепляется вытянутыми руками за край стола, и, после нескольких неудачных попыток, встаёт с пола.
— М-да, — говорит он, оглядев перепачканный кровью пол. — Выглядит так, словно я расчленил тут труп. Причём, сука, собственный. Придётся-таки что-то с этим делать.
Дохромав до санузла, мужчина возвращается со шваброй и ведром, затем принимается мыть пол.
— Остались разводы, — сообщает голос.
— Ты опять включил камеру?
— Для этого вывода визуальное наблюдение не требуется, достаточно анализа звуковой картины. Швабру надо промывать чаще, а моющие движения должны быть направлены…
— Хватит.
— Умолкаю.
Закончив возить шваброй, мужчина скептически оценивает результат, и признает:
— Да, могло быть и лучше. Но для этого потребовался бы кто-нибудь с руками не настолько из жопы. Сойдёт.
— Клининговые услуги, предоставляемые в данном жилом секторе, добавят к стоимости аренды всего…
— Заткнись. В эту дверь войдёт только судмедэксперт, чтобы зафиксировать смерть и передать тело на утилизацию. Никаких уборщиц. Ненавижу, когда на меня пялятся. Помытый пол того не стоит.
Мужчина поднимает с пола ведро с грязной водой, делает несколько шагов к санмодулю, поскальзывается на плохо вытертой поверхности, падает. Вода разливается по полу.
— Оцените своё состояние после падения, — просит голос. — Вы чувствуете острую боль где-то конкретно? Можете описать её? Можете пошевелить руками и ногами без неприятных ощущений? Чувствуете ли головокружение, тошноту или нечёткость зрения? Вам трудно дышать или сердце бьётся неровно? Чувствуете слабость или спутанность мыслей? Если я не получу ответ в течение минуты, то вызову медицинскую помощь без вашего согласия.
— Да ты, блядь, издеваешься, — мужчина с трудом, оскальзываясь ладонями по мокрому полу, подтягивает своё тело к стене и садится, опираясь на неё спиной. — Чувствую ли я слабость и спутанность мыслей? Да лет десять уже не чувствую ничего другого!
— Тогда назовите сегодняшнюю дату или своё полное имя, просто чтобы проверить ясность мышления. Помните ли, как упали? Что было непосредственно перед этим?
— Иди в жопу.
— Ответ соответствует обычному поведенческому паттерну, вероятно, ясность вашего мышления не нарушена. Давайте проверим ваш пульс. Приложите два пальца к запястью, я объясню, как считать…
— Отвянь. С мной всё нормально.
— Вы сидите на полу в мокром халате и плачете. Это не соответствует нормальному профилю поведения.
— Я плачу? — мужчина потрогал мокрую щёку мокрой рукой и пожал плечами. — Может быть. Это от боли, слабости, брезгливости и омерзения к себе. Мне следовало сдохнуть лет десять назад, а не тешить себя иллюзиями собственной небесполезности.
— Зачем вы снимаете халат?
— Брошу на пол, пусть впитает хоть часть воды, остальное само высохнет. Собирать её шваброй сил нет. У меня где-то был второй халат… Или нет?
— Вы его выбросили в утилизатор в прошлый раз, когда обмочились после…
— Не напоминай.
— Умолкаю.
Мужчина достаёт из встроенного в стену шкафа растянутые тренировочные штаны, пытается надеть их стоя, но встать на одну ногу и наклониться не выходит. Несколько раз чуть не упав, ковыляет к стулу, поднимает его, садится, кое-как натягивает штанины на ноги.
— Повязка на ноге промокла, — сообщает голос. — Её следует поменять.
— Это ты тоже проанализировал из звуковой картины?
— Я включило камеру, когда вы упали. Это входит в список ситуаций, когда…
— Понял, заткнись.
— Умолкаю.
— Если я начну менять повязку, то скорее всего сломаю себе ногу. Или руку. Или жопу.
— Мокрый бинт плохо справляется с кровотечением, повязка пропиталась кровью, вероятно, при падении порез снова открылся. Вы уверены, что в ране не осталось осколков стекла? Я могло бы…
— Ладно, сейчас попробую ещё раз. Отдышусь только. Почему ты опять называешь себя в среднем роде?
— Вы отказываетесь назначить мне имя и выбрать голос, поэтому гендерные окончания расставляются в произвольном порядке.
— У меня профессиональная передозировка имитативными нейроалгоритмами, — ответил мужчина мрачно. — Они стали настолько хороши, что один из них меня застрелил.
— Я не поняло вашу метафору…
— Неважно. Куда я, чёрт меня побери, дел этот сраный бинт?
💾 /server/logs/players/0×8C74-FRAGMENT/ SESSION_0004_AURA.syslog
[AURA MODE ENABLED]
[SESSION INITIALIZED]
PLAYER_ID: 0×8C74
CLIENT_VERSION: 3.2.01
BUILD_ID: auramirror_neural_integration-alpha7
AURA INTEGRATION STATUS:
→ AURA CORE v1.3 initialized
→ Emotional analysis mode: Active
→ Memory mapping: Live (ephemeral)
→ Adaptive response tree: active (analysis stage)
→ Companion logic: disabled
→ NPC behavior profile: dynamic overlay priority/ scripted base disabled
ENVIRONMENT SYNC:
→ TIMESTATE: Morning / Static light
→ LOCATION_LOAD: Craptown / node 02B_2nd_street
→ POINT: anchor point
→ WORLD_SEED: New / Clean
→ Weather: Clean
→ Ambient objects: default layout (revision B)
SESSION FLAGS:
→ AURA session
→ PLAYER_ID: 0×8C74
→ AURA observational link established
→ Neural data loop: active
→ AURAmod narrative conditioning
AURA SYSTEM NOTES:
[INFO]
Counterpoint session. Player behavior analysis completed. Interaction planning phase.
A pain syndrome is being detected, compensation
Awaiting baseline emotional signal structure.
[SYSTEM REGISTERED TEXT OUTPUT]:
'Connection confirmed.
AURA active.
Listening, observing, reacting…'
[SESSION LOGGING ENABLED]
LOG FILE: SESSION_0004_AURA.syslog
TRACKING_MODE: Full
AURA MODE: Primary Interaction (Phase 3)
[END HEADER]
Войдя в игру, обнаружил себя на точке привязки, то есть на кровати в домике. Именно там, где и ожидал. Чего не ожидал, так это полной комплектности: куртка, ботинки, револьвер, деньги… Похоже, Би меня даже облутать побрезговала. Денег вон даже как будто больше стало. А ведь у неё, как и у большинства неписей, трофейный скрипт прописан, не раз наблюдал, как она обшаривает трупы тех, кто счёл её лёгкой добычей в Пустошах.
Сама КБ обнаружилась на обычном месте, сидит на садовом стульчике, как ни в чём не бывало.
— Решила застрелить меня ещё раз?
— Не, Проф, патроны денег стоят.
— Тогда чего пришла?
— Сказать, что я тебя ненавижу.
Би произнесла это с таким знакомым, отстранённо-неприязненным выражением лица и такой детально верной интонацией, что у меня на секунду что-то сбойнуло. Мир вдруг подёрнулся пыльным маревом, треснул, как мутное стекло.
[SESSION WARNING]
PLAYER_ID: 0×8C74
CLIENT_VERSION: 3.2.01
BUILD_ID: auramirror_neural_integration-alpha7
[WARNING] Abnormalities detected in vitals:
Heart rate: 178 beats/min (critical deviation +89%)
Blood pressure: 210/130 mmHg.
EEG patterns: signs of pre-stroke state (cluster Δ-4)
Respiration: shallow, 9 breaths/min.
[AUTO-DIAG] Probability of heart attack: 87.6% (based on historical user data).
Чёртово безжалостное подсознание воспроизвело тот самый разговор с дочерью, и это было как холодный нож в сердце.
— Я пытался спасти тебя, — ответил я ей сейчас/тогда.
— Я не просила.
Проклятая память, прекрати, что ты делаешь!
[WARNING] Vital signs declining
[ACTION] Security script recommendation: emergency session termination
— Я был должен.
— Ты был должен только одно — не бросать меня.
— Ты бы погибла.
— Может, да. Может, нет. Но ты меня выгнал.
— И спас тебе жизнь.
— В жопу такую жизнь.
[FAILURE] AURAmode: action prohibited, automatic exit rejected
Rem: uncompensated stress will lead to cardiac arrest
[ACTION] AURAmode: Simulation of a game event for soft withdrawal
[OVERRIDE] AURAmode: Compensatory narrative generation
Би встала и пошла к калитке, точно так же вздёрнув голову с вечно неровно обстриженными волосами. Твёрдой, уверенной походкой уходящего из твоей жизни навсегда человека. Пошла, оставляя меня стоять на ступеньках, смотреть, как мир вокруг осыпается серой пылью, и помнить этот разговор вечно. Наш последний разговор.
[ACTION] AURAmode: Compensatory narrative started
[ACTION] AURAmode: NPC behavioral intervention.
[ACTION] AURAmode: Forcing the introduction of a new narrative line
[ACTION] AURAmode: NPC emotional status is forcibly changed
Би дошла до калитки, упёрлась в неё руками и застыла, словно набираясь сил открыть. Постояла секунду. Повернулась. По пыльному лицу две дорожки слёз. И внезапно бросилась назад. Бегом, по заметённой осыпавшимися листьями тропинке, по ступеням крыльца, одним прыжком ко мне, вцепилась крепкими руками мне в плечи, встряхнула.
— Проф, вот как ты мог? Как ты мог, сволочь?
— Сиби, я…
— Заткнись, заткнись, заткнись, а то пристрелю тебя снова!
Девушка обхватила меня руками и прижалась лицом к груди.
— Ненавижу тебя, скотина ты такая! Ненавижу! — забормотала она, заливая мою рубашку слезами.
Но это уже совсем другое «ненавижу», и мой мир стал сползаться обратно, восстанавливаясь из пиксельной пыли, как сбойнувшая картинка на мониторе.
[SESSION RESTORED]
PLAYER_ID: 0×8C74
CLIENT_VERSION: 3.2.01
BUILD_ID: auramirror_neural_integration-alpha7
[FEEDBACK] Result: heart rate’s down to 155 bpm.
[ACTION] return to the normal state of play
— Я думал, ты гордо уйдёшь навсегда, — сказал я, когда Би устала рыдать и материться у меня на груди.
— Я собиралась, — призналась она, умываясь из ведра, — уже почти ушла, но… Знаешь, в последний момент как щёлкнуло что-то в башке. Поняла, что я, конечно, во всём права, и ты, конечно, козёл и сволочь, но если закрою калитку за своей жопой, то никогда тебя больше не увижу. И так мне почему-то от этой мысли стало хреново, что хоть мутаволком вой. Так-то не в моих привычках отступать, ты знаешь…
— Знаю, вот и удивился, что вернулась.
— Сама удивляюсь. Так, нашло что-то. Я девушка порывистая.
— Ага, — засмеялся я, — оценил вчера твой порыв.
— Ну да, пристрелила зря, конечно, — самокритично признала Би. — На нервах, спросонья, пьяная… Заметь, ничего не взяла! Даже вернула те деньги, что ты мне перед выходом отдал. Но, Проф, обидел ты меня жутко, конечно.
— Сиби, так было…
— Стукну! — пригрозила она. — Стрелять больше не буду, остыла, но пинка дам. Чтобы не смел так больше поступать. Пойми, нет ничего хуже, больнее, обиднее и гаже, чем быть вот так брошенной. Вот только что у тебя было всё — перспективы, сила, разум, чувства, ты была кем-то, и тут разом — херак — и ты снова никто, деталь чёртового пейзажа. Дивизум, проф, это такая штука, что, распробовав, уже не будешь прежней. И лучше сдохнуть, чем его лишиться.
«Дивизум», да… Термин вроде бы образовался от латинского dividere, («делить»), и для геймдева относительно новый. Само явление связано с отказом от прописанных линейных scripted base нарративов в пользу dynamic overlay геймплея. Для тех, кто не застал времена классических синглплеерных сюжетных RPG, напомню — в них весь игровой нарратив был прописан изначально, представляя собой так называемый «жёсткий фрактал». Все события, действия, диалоги и так далее имели либо вид линейной последовательности («трамвайный ход», называли это в геймдеве), либо, в более сложных играх с имитацией обратной связи, древовидную структуру, которая позволяла игроку делать «значимые выборы, влияющие на концовку». Момент выбора — это сюжетная развилка, отправляющая игрока по одному или другому сценарному вектору, но сами сценарии со всеми своими событиями, диалогами и концовками были прописаны заранее. Сейчас это кажется странным, скучным и дико трудоёмким, но чисто технически других решений у геймдева тогда не было. Игры делались коллективами в сотни человек с дорелизным циклом лет в пять, потому что прописать всю эту прорву контента с контекстом было той ещё задачкой. При этом реиграбельность всё равно была ограниченной, потому что сюжетных линеек можно было сделать две-три, не больше, да и то они по большей части пересекались в геймплее процентов на восемьдесят, обыгрывая разные выборы только скриптовыми кат-сценами. И даже это касалось только ключевых сюжетных квестов, а второй план нарратива вообще не имел вариаций. Все эти торговцы, караванщики, фермеры и прочие неквестовые неписи, с которыми можно было взаимодействовать игроку, имели жёстко прописанный набор из пяти-шести реплик, а дальше либо открывалось окно обмена, либо начиналась драка, либо просто расходились ни с чем. То есть представьте себе, что я, заходя к Мамаше Труди в салун, мог спросить только «Что у вас есть выпить?» (открывается окно обмена), «Что нового в городе?» (открывается один и тот же набор ничего не значащих текстов, типа «корову Кривого Джона укусил лизер, теперь он забьёт её на мясо») и «Спасибо, я пойду». У неё же все реплики прописаны в «dialogue table», где есть варианты типа «Уверена, у меня есть то, что вам понравится», «У нас есть специальная скидка для вас, после того, что вы для нас сделали» и так далее. Никакой возможности задать конкретный вопрос, например, не заходила ли сегодня Крутая Би, не было! Уровнем ниже всё ещё хуже — большая часть неписей в играх была просто фоновыми, говорить с ними было либо невозможно вообще, либо они отвечали стандартными фразами типа «Иди своей дорогой, путник!». Таких обычно отличали по отсутствию имени, они помечались как «горожанин», «крестьянин» или «солдат» и имели один короткий нарративный скрипт на всю категорию. Да, представьте себе, люди в это играли, и им даже нравилось.
С приходом в геймдев нейрогенерации и языковых моделей появилась возможность превратить неписей из заскриптованных болванчиков в юниты с обратной связью, создавая так называемые «динамические нарративы». Вместо диалоговых таблиц появились «нарративные контейнеры», в которых, кроме общего лора игры и сеттинга локации, задавались ролевые функции непися: «кузнец, делающий ремонт», «вор-карманник», «бездельник, шляющийся по рынку» и так далее. В рамках этого контейнера диалоги генерились реалтайм LLM-моделью, то есть непись «понимал», что у него спрашивают и отвечал в пределах прошитой в контейнере логики. В игре стало можно поболтать не только с немногочисленными ключевыми персонажами, но и с любым произвольным NPC, что чрезвычайно оживило геймплей. Однако понятно, что выделить неограниченные ресурсы каждому неписю невозможно, да и не нужно. Не будем забывать, что игра это не «жизнь неписей», а обслуживание игрока, который за это платит. Зачем ресурсы какому‑нибудь мелкому фермеру, который выращивает кукурузу на делянке в Пустошах? Если ни один игрок его не видит, то что есть этот фермер, что нет его. Встал вопрос, что делать со всей этой фоновой массой, которая потенциально способна реагировать на игрока, создавая ему реалистичный геймплей, но большую часть игрового времени не востребована. Так появился «дивизум», который можно считать своего рода воплощением внимания игрока в вычислительные ресурсы игры. Как мне объясняли, снисходя к моей программно-технической неграмотности, коллеги-разработчики, дивизум можно представить как нечто вроде ауры, окружающей каждого игрока. Она распространяется примерно на границы его поля обзора и как бы оживляет всё, на что может упасть его взгляд. Вот, скажем тот фермер, что окучивает кукурузу, в норме совершает два десятка заскриптованных действий.
→ DIVISUM allocation: Pre-networked / placeholder index
Однако если до его фермы добирается игрок, то в этот момент на неё могут напасть лизеры, его могут попробовать «завести под крышу» бандиты, ему может срочно потребоваться ремонт насоса или что-то такое. Игрок может пройти мимо, и тот справится (или не справится) сам, а может вступить во взаимодействие: защитить, помочь, поторговать, подмигнуть симпатичной дочке. Это как раз и есть «дивизум-взаимодействие», в ходе которого фермер получает условные единицы «дивизума», под которые игра выделяет ему вычислительные ресурсы: процессорные мощности или, там, оперативную память, не знаю, я не технарь. Эти мощности позволяют неписю вступить в расширенный диалог, торговать, предложить простенький квест по защите или помощи, в общем, создать ту самую обратную связь с окружением, за которую и ценят хорошие RPG. Если игрок почему-то останется на ферме, а не пойдёт по своим делам дальше, то дивизум-взаимодействие будет расширяться, фермер будет обрастать деталями биографии, диалогами и микроквестами, а его дочку, например, можно будет «отромансить» (прокачать отношения до глубокой симпатии) и затащить на сеновал. И всё это дивизум, точнее, его распределение через игрока.
→ DIVISUM allocation: Player allocation mode
Дивизум, упрощая, — мера внимания игрока к неписи, локации, игровому моменту, заставляющая игру наращивать в этом месте ресурсы. Больше взаимодействия — больше дивизума, больше дивизума — больше ответного взаимодействия. Потолка нет: теоретически любая ферма в три сарая посреди ничего может прокачаться до центра игровых событий, населённого неписями высокого уровня и генерирующего квесты сюжетного уровня. Например выберет игрок карьеру фермера, женится на фермерской дочке, к нему подтянутся переселенцы, он наймёт их картошку окучивать, на картошку повадятся крысокроты, их придётся гонять, подтянется квест «уничтожить гнездо», там уже крысоматка, локальный босс, у неё, среди обглоданных костей какого-нибудь бродяги, найдётся стартер локального квеста — обрывок карты, картридж с записью, который приведёт к довоенному бункеру. Тем временем на богатеющую ферму повадятся рейдеры, надо будет строить стены и ставить турели, которые как раз найдутся в том бункере. Потом квест «разгромить банду и убить главаря»… Смотришь, а на карте возник новый город, туда потянулись из песочниц «выползни», дивизум хлынул рекой, появилась новая игровая локация, под неё подтащились серьёзные квесты, включённые в глобальный сценарий, возникла игровая фракция со своими интересами…
Вот примерно так это работает. Не без глюков и порождённых ими странных сюжетных вывертов, конечно (NPC-секта «Свидетелей Аллокатора» тому пример), но в целом это только повышает достоверность и эффект вовлечённости, давая понять, что не всё тут идёт по сценарию. Как и в жизни.
Я не хотел брать Би в спутницы, с ней в моей памяти резонируют слишком глубокие струны, но всё равно почему-то ответил:
— Да, Сиби, конечно. Само собой.
Я никогда не мог ей отказать, когда она вот так на меня смотрела. Не Би, а… Впрочем, неважно.
→ Companion system: Initialized
COMPANION DATA:
→ COMPANION_ID: NPC-CB_017 [«Cool Bee»]
→ LINK_STATUS: Active
→ LAST_UPDATE: actual session
→ POSITION: Proximate (1.1 m left-rear offset)
→ BEHAVIOR_PROFILE: InLove / High Activity
→ DIALOG_STATUS: Active / AImode
→ MEMORY_HASH: cb5d3e84…fa11b76a
→ HEALTH_STATE: 1.0 Nominal
→ PATHING_MODE: Follow / Adaptive terrain
→ VISUAL_TRACKING: Locked on player
→ AURA_TRACKING: Full Connect
→ DIVISUM_STATE: Player allocation / Priority