Конечно, можно было и не заморачиваться такими сложностями. Но я же планирую делать боевую марионетку! И главный ее недостаток в том, что магу в бою приходится отвлекаться на управление куклой. Конечно, я собираюсь использовать для этого Немо, но было бы наивно ожидать, что она сможет справиться с опытными бойцами без каких-либо инструкций.
У нас много элтелиона, так что мы можем позволить себе запустить сразу тридцать два процессора общей мощностью в три “терафлопса”. Но и это капля в море, когда занимаешься большими данными. По сути, как хорошая игровая видеокарта, не более того. Я поинтересовался у Немо, как же она делает сложные расчеты, когда показывает реалистичную трехмерную графику. Оказалось, что у нее есть несколько типов процессоров. Для операций с числами – как обычно, для операций с матрицами – как в игровых видеокартах и даже, о ужас, для операций с тензорами! Последние открылись совсем недавно, после повышения уровня Немо. Вот это действительно хорошая новость. Иметь тридцать две “видеокарты” – это гораздо, гораздо лучше с точки зрения производительности! Держу пари, Немо и сама активно использует что-то вроде нейросетей, но влезть в ее "исходный код" мы никак не можем, вот и приходится начинать с нуля, шаг за шагом нащупывая точки соприкосновения.
Передав управление каждой куклой отдельной нейросети, а точнее, целому каскаду разных сетей, я проводил между ними битвы в виртуальном симуляторе Немо, поощряя каждую победу. Когда уровень скорости обучения достиг своего предела, а куклы стали драться не хуже меня самого, сравнил рейтинг побед и поражений. Как и ожидалось, на вершине "пищевой цепочки" оказалась моя Алита – слишком уж много внимания я ей уделял. Достойную конкуренцию ей мог составить лишь Богомол – просто за счет своих непомерно длинных ручищ. Кентаврик волочил свои копыта в самом хвосте списка. Чересчур неповоротливый.
Вот тут и начались настоящие танцы с бубном. Кому-то добавить полезных движений, кому-то сократить тайминги или, наоборот, растянуть движения. Затем заново провести обучение и оценку. И так по кругу. С горем пополам добился некоторого баланса. И все равно эффекта "камень, ножницы, бумага" избежать мне так и не удалось. Богомол хорош против Алиты, Алита – против Четырехрукого, тот неплохо бьет Железного человека, и так далее. Ну, для игр это даже хорошо. Я и так, можно сказать, заморочился сверх всякой меры. Одно успокаивает: весь этот опыт поможет мне потом при управлении моей будущей супермарионеткой!
Движений пришлось записывать много, гораздо больше, чем у первых версий. Но я быстро понял, что необязательно пытаться протаскивать куклу через цепочку четко выверенных поз. Вместо этого можно просто приложить некоторую силу к ключевым точкам – рукам, ногам, туловищу. Конечно, векторы силы пришлось долго и муторно высчитывать, но зато количество ключевых точек сократилось в сотни раз, и драгоценной золотой фольги ушло гораздо меньше, чем в первый раз. Тем не менее мы потратили почти все золото, что дал нам Бранд, и все его накопители.
Свое собственное золото и “батарейки” из первых марионеток я пока отложил для более серьезного проекта. Памятуя о том, как кукол пытались украсть, я сделал и систему самоуничтожения, на случай если кто-то попытается их насильно вскрыть. Она разрушит рунные дорожки на золотой фольге, и марионетка станет простой деревянной игрушкой. В общем, работой я остался доволен. По ходу дела мы с Немо вносили некоторые корректировки и в наш главный проект. Например, Богомол натолкнул меня на мысль сделать дополнительные выдвижные сегменты, например для цепной пилы. Можно будет регулировать и длину ног, чтобы увеличивать скорость ходьбы и бега.
Вскоре мы устроили торжественное открытие игровой комнаты клуба. Дети были в полном восторге! Каждую куклу установили на свой собственный пьедестал (спасибо за помощь, папа!), над которым висела подробная инструкция и полный мув-сет куклы. В первых марионетках не было счетчика жизни, и мы просто считали пропущенные удары. Но теперь куклы могли посылать друг другу световые сигналы об уроне, а благодаря защитным рунам мы точно знали, прошел удар или нет. Когда счетчик здоровья проседал до нуля, кукла эпично падала на колени и “погибала”, переставая реагировать на команды. А выигравший совершал свое фирменное фаталити. В общем, у меня получился неплохой файтинг, пусть и не слишком разнообразный по геймплею. Ну, будут время и деньги, сделаем еще несколько кукол.