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