— Сколько тебе нужно времени? — спросила Лаура.
— Думаю, нескольких часов хватит.
— Ты справишься так быстро?
— Это простая процедура. Кроме того, я успел хорошо разобраться в командах мозгового компилятора.
— Тогда за работу!
Тимур перелопатил уже достаточно отрывков программного кода, чтобы понимать принципы программирования ботов. Кроме того, в его распоряжении было руководство, составленное в свое время Джепом, Хортом и другими работавшими в «NGF Lab» программистами. Поэтому он без особого труда прорисовал в голове алгоритм и за два часа до рассвета приступил к реализации.
Прежде всего создавался экземпляр класса nfBrainAction. Тимур назвал его Operation. Следующим объявлялся экземпляр класса nfImpact. Он инициировался функцией NewImpact (), которая вызывалась из Operation. На этом этапе Тимур получал доступ к мозгу, выходил за пределы мозгового процессора. Затем задавались тип операции (om_Stimulation — стимуляция, а не считывание импульсов) и часть головного мозга, в которой будет проходить стимуляция (LIMBUS — лимбическая система). В переменную Coordinates типа nfImpactCoordinates записывались координаты будущей стимуляции — HYPOTHALAMUS — гипоталамус. Куда посылать импульсы, определила Лаура; именно в гипоталамусе находится центр удовольствия. Параметры импульсов настраивались в структуре Imparam (типа nfImpactParam). Туда передавались значения интенсивности (ii_Normal — средняя) и интервала, через который будут запускаться импульсы (100 миллисекунд). Рабочая часть программы складывалась из конечного цикла. Шестьсот раз вызывалась функция Delight.Activate (). Учитывая заданный интервал, стимуляция должна была продолжаться 60 секунд.
В самом конце психиатр посоветовала добавить функцию Imparam.HormoneCheckupOn (). Собственно, функцию выбирал Тимур. Лаура только объяснила физический принцип, который был заложен в программу и без которого стимулятор, вероятнее всего, работать не будет. Дело в том, что за чувственное удовольствие у человека отвечает дофамин — гормон, который вырабатывается мозговым веществом надпочечных желез, а также многими другими органами. Этот гормон действует непосредственно на центр удовольствия. Большинство наркотиков увеличивают поток дофамина в 5 — 10 раз, давая возможность людям, их принимающим, получать удовольствие. Так, амфетамин напрямую увеличивает выброс дофамина, влияя на механизм его транспортировки. Кокаин блокирует механизмы обратного захвата дофамина, увеличивая его концентрацию в синаптическом пространстве. Алкоголь нейтрализует действие антагонистов[116]дофамина. Если наркоман продолжает стимулировать центр удовольствия, мозг адаптируется к искусственному повышению уровня дофамина, тормозя производство гормона и уменьшая количество рецепторов, на него реагирующих. Дальнейшее развитие химической толерантности приводит к необратимым изменениям в нейронах. Удовольствие притупляется, а со временем исчезает совсем. Найденная Тимуром функция HormoneCheckupOn () позволяла «выключать» проверку любого гормона, заставляя мозг игнорировать пагубное влияние на организм. Таким образом Тимур и Лаура застраховались от того, что мозг ботов может адаптироваться к большой концентрации дофамина (hc_Dopamine).
Окончательно функция стимуляции приобрела следующий вид:
nfBrainAction Operation (System.GetOperation (NEW_DIRECT_ACTION));
if (!Operation.m_lpDispatch) return;
nfImpact Delight (Operation.NewImpact (BRAIN_GLOBAL_PENETRATION));
if (Delight.m_lpDispatch!
{
Delight.SetOperationMode (om_Stimulation, TRUE);
Delight.SubGlobalTarget (LIMBUS);
nfImpactCoordinates Coordinates (Delight.GetPosition (HYPOTHALAMUS));
if (Coordinates.m_lpDispatch)
{
Delight.SetTargetCoordinates (Coordinates);
Delight.SetOperationType (ot_Pulse, ot_Point);
nfImpactParam Imparam (Delight.GetImpactParamDefinition());
if (Imparam.m_lpDispatch)
{
Imparam.SetImpulseIntensity (ii_Normal);
Imparam.HormoneCheckupOn (hc_Dopamine, FALSE);
Imparam.SetInterval (100);
Imparam.Update ();
}
}
else return;
for (int i=0; i<=600; i++) Delight.Activate ();
Clear ();
}
В 7:45 субботним утром бота, который до этого времени непрерывно развлекался с кнопкой «DLGHT», оторвали от пульта. «Малыш» долго приходил в себя. Его лихорадило.
Успокоившись, бот вернулся в депрессивное, полукататоническое состояние.
Тимур таращился на экран, на котором зависло сообщение. Секунды шли, но с ботом ничего не происходило. Время от времени он отключался, погружаясь в тяжелую дремоту. Потом просыпался и тянулся пальцами к пульту, на котором светилась кнопка «DLGHT».
— Ну, давай… давай же… — шептал Тимур. От напряжения у парня на висках выступили капли пота. — Запускай, ну… Догадайся!
После прекращения стимуляции у бота упал артериальное давление, началась брадикардия. Никто не знал доподлинно, то ли он дремлет, то ли теряет сознание.
Прошло несколько минут. Тимур повторил компиляцию. Процедура заново записалась на мозговой плате. И опять успешно — процессор принял код. Тем не менее бот не запускал модуль. Он или не понимал, или не хотел его активировать.
Алан и Хедхантер искоса поглядывали на Тимура.
— Я думаю, ему нужно время, — растерянно пробормотал программист. Хотя он подозревал, что проблема не во времени. Возможно, бот не может построить логическую цепочку «стимуляция — кнопка “DLGHT” — запрет пользоваться кнопкой — запись процедуры». — Он просто не улавливает суть процедуры.
— Попробуй добавить команду на самозапуск после компиляции, — предложил Алан.
Тимур вставил перед телом основной процедуры системную функцию — SetAutoRun (). Она автоматически запускала модуль на выполнение сразу после компиляции. И попробовал скомпилировать измененный код.
Результат получился ожидаемый. Реализованный Хортом функционал по обработке макросов заблокировал компиляцию. На информационной панели появился красный восклицательный знак и надпись: COMPILATION FAILED! ERROR 117: INVALID DESCRIPTOR.
— Оно не хочет компилироваться, — стиснув зубы, произнес Тимур.
— Вижу, — помрачнел Алан.
— Что означает эта ошибка? — ткнула пальцем в экран Лаура.