«Возвращение в замок злого колдуна»: Настырный Рыцарь

YqmAfvK

У девушек были другие планы в отношении двух рыцарей...
(Crash Test Dummies)


Если, как я уже предлагал где-то в комментариях, считать «Возвращение в замок злого колдуна» спрессованным в шесть минут экшеном, скажем, не на 60, а хоть на 6 часов, то момент встречи с Рыцарем — это по хронометражу уже первая битва с боссом. И в первую очередь для меня как для разработчика. Применив свой любимый аналитический метод — посчитав, сколько раз этот персонаж встречается на уровне — я понял, что передо мной не рядовой монстр, а особенный противник. Пришло время наводить ужас на игроков по настоящему!

(Внимание, в статье могут содержаться спойлеры, так что читайте скорее!)

Итак, в отличие от Черного Шара, все боевое снаряжение Рыцаря было налицо: рогатый шлем, меч и щит. Поэтому я решил для начала сделать ему простую атаку мечом, а принцип «все работает немного не так» воплощать, уже имея какой-то базис. Прежде всего нужно было придумать способ анимации. Готовой покадровой раскладки, как для героини, у меня не было; пририсовыванием ложноножек в фотошопе тоже было не обойтись. Рисовать каждый кадр вручную было лень, к тому же вряд ли бы я смог сымитировать авторский стиль Доктора Денди и его приятеля, а также изобразить текстуру «рисунок фломастером, дополнительно изгаженный JPG-сжатием». Оставалась перекладная анимация. Я посоветовался с Константином Дмитриевым, автором российского опенсорсного аниме «Марья Моревна», и он посоветовал мне OpenToonz или Synfig, но потом оказалось, что устроить виртуальный ваянг можно и с помощью Блендера, с которым я, к счастью, уже был знаком.

Процесс, в общих чертах, таков:

  1. Берется исходная картинка и режется на отдельные куски, которые должны будут двигаться друг относительно друга (у рыцаря это тело, голова, руки, ноги, меч и щит). В GIMP, например, можно разложить их по слоям, а потом использовать специальный плагин для экспорта в отдельные картинки. Конечно, куски могут перекрываться, чтобы в организме анимируемого не образовывались дыры.
  2. В Blender включается возможность Import Images as Planes, и картинки импортируются туда (с определенными настройками, в частности, прозрачностью). Сразу скажу. что у меня проявились какие-то артефакты на краях плоскостей — возможно, от них можно было избавиться с помощью настроек, но я их просто постирал вручную, а на некоторые просто забил (приглядевшись, вы можете увидеть их в игре, хотя грязно-серый фон в некоторой степени их скрывает).
  3. Далее из фрагментов строится чучелко персонажа и в нем настраиваются иерархические связи — чтобы рука двигалась вслед за телом, а меч за рукой.
  4. Можно анимировать!

aByjy7J

Без ложной скромности скажу, я прямо диву дался, увидев, как преобразился Рыцарь, когда я даже не заставил его двигаться, а всего лишь поставил в другую позу. На исходной картинке он выглядел, как будто 1) съел аршин и 2) видит свой меч впервые в жизни и готов отдать его первому встречному (так же, кстати, смотрелся и сам герой).

lbxwhT5

Конечно, если бы он и правда отдавал свой меч нашей физкультурнице, это было бы вполне в русле принципа «все работает немного не так...» — а потом, разумеется, оказалось бы, что меч такой тяжелый, что девушка им и взмахнуть-то не может… но нет, я все-таки решил сделать Рыцаря хищным, прижал его к земле, расставил ноги и наклонил корпус и меч в сторону противника. Добавил пружинящую idle-анимацию, и впору было кричать «It's alive!» — и думать, как же запрограммировать ему поведение.

Я решил, что прикреплю к нему невидимый объект, обозначающий зону атаки (а по здравом размышлении лучше два, повыше и пониже). Рыцарь движется в сторону героини, и, если она соприкасается с каким-то из этих сканирующих объектов, рубит ее мечом. Соответственно, предполагалось, что нужно отступить, а затем пробежать мимо него сразу после удара, пока он снова заносит меч.

В процессе тестирования выяснился еще один момент. Героиня подходит к Рыцарю с возвышенности, и в 99% игр это бы означало, что он не может ее атаковать, пока она там стоит (а в Dark Souls, параллели с которой уже пора начать проводить, прыжок с обрыва еще и позволял нанести противнику больший ущерб). Но я решил, что в чем-то «Возвращение» может позволить себе быть и похардкорнее «Темных душ», так что, даже стоя на обрыве, можно схлопотать мечом по чешкам.

Кто-то бы на этой одной атаке и остановился, но анимировать мне понравилось, и захотелось сделать что-то необычное. И тут я обратил внимание, что если голову Рыцаря отклонить назад, она становится похожа не то на птичью, не то на щучью голову с раскрытым ртом. «Ага, — подумал я, — пусть он тогда бьет еще и назад, превращаясь на мгновение в рыбоголовое чудище». По факту, кажется, никто этой метаморфозы не оценил, однако задняя атака у Рыцаря осталась.

bb33k_3_knight-beak.png

Я немного потестировал его, и мне показалось, что монстр по-прежнему слишком простой. «О, у него же еще щит есть!» Так добавилась еще одна зона атаки: при соприкосновении физкультурницы со щитом зеленоштанник стал сбивать ее с ног, и уже потом добивать мечом.

runner_2018-03-13_23-46-58-30.jpg

Рыцарь превратился просто в ходячую полосу препятствий. Однако легко увидеть, что перед самым носом у Рыцаря между зонами атаки есть промежуток. И… Рыцарь действительно не видит героиню, если она стоит там (если вам хочется объяснений, он близорук и у него неудобное расположение смотровых щелей в забрале). Трюк лишь в том, как оттуда выбраться.

Кстати, вначале я хотел, чтобы Рыцарь «посвящал героиню в рыцари» — ударив мечом, превращал ее в шахматного коня (по-английски, как вы знаете, он называется knight). Но анимацию этого превращения тоже хотелось сделать прикольной, и я понял, что ее не потяну. Поэтому обошелся кровожадным звучком и телепортацией в начало уровня, к магнитофону.

Вкупе с болтающимся под ногами колобком, лужей и лифтом-хваталкой, которого надо ждать, пока Рыцарь ковыляет за вами со скоростью черепахи-убийцы, сцена получилась на славу. Но я внезапно переключился из режима коварного разработчика в режим юзера-нытика и подумал: «А почему девушка в луже тонет, а Рыцарь нет?» Мысль была просто отличная: учитывая, что игра ограничена по времени, а игрока все время отбрасывает на начало, можно было бы выдать ему «кредит за настойчивость» и изящно упростить прохождение первого этажа, если он продержится 3 минуты и хотя бы раз сумеет преодолеть Рыцаря (так как в лужу его еще надо заманить). Но как только я это подумал, рубильничек в голове сработал в обратную сторону: «Но кредит-то, хе-хе, надо возвращать!» К тому же мне было все-таки жалко, что такой симпатичный, красиво анимированный и нашпигованный коварными атаками персонаж вдруг просто так снимался с игрового поля. Так что я решил, что, утонув в одной луже, Рыцарь будет восставать из другой, на втором этаже, где справиться с ним будет несколько сложнее (на самом деле во второй луже он тоже потом тонет, но после этого у игрока остаются считаные секунды, чтобы забраться на третий этаж и победить финального босса).

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

P.S.: кстати, после того как я сделал Рыцаря тонущим, мне пришлось дорисовать специальный кадр плавания Черному Шару, чтобы нагляднее показать его плавучесть.

Игра «Возвращение в замок злого колдуна» по-прежнему бесплатно доступна здесь: https://chentzilla.itch.io/bb33k