Загадки с управлением
В моей игре Zzzz-Zzzz-Zzzz вы неоднократно встретите пиктограммы с кнопками. Что они обозначают? Какая связь с моей работой над ремастером этой игры? Я расскажу в этом посте - вас ждёт неожиданный геймдзиайн. Ещё я поделюсь мини-библиотекой настройки управления для движка Game Maker.
Летсплейщики часто надолго застревали в этих местах. Возможно, вы тоже, если играли в игру. Если ещё нет - попробуйте, это бесплатно =)
Всё становится предельно понятно, если сразу после этих странных мест показать вот этот экран:
Это тоже один из снов, он открыт с самого начала. Но впервые на него можно попасть только из Карты Снов. Это интерактивный выбор уровней.
В этом сне вы меняете управление. Именно с этим управлением вам нужно прийти к этой пиктограмме, чтобы там появился переход в другой сон.
Управление подобрано специально, чтобы усложнить или облегчить задачу игроку в том сне, куда он перешёл. Однако, управление сбрасывается при выходе в главное меню. Я пока не решил что с этим делать. Всю логику кнопки esc я буду переделывать. Консультируюсь со своими игроками на дискорд-сервере. Можете присоединиться к обсуждению и вы =)
В 2013-ом я затачивал эту механику только под клавиатуру. Сейчас я работаю над ремастером игры. Поэтому мне нужно уметь поддерживать ещё и геймпады. Только для XBOX пока что - я буду реализовывать его поддержку в первую очередь.
С геймпадом есть несколько сложностей, которые мне ещё предстоит решить:
- Нужно как-то показать на мелких пиктограмах кнопки геймпада.
- У геймпада есть стики, которые интерпретируются движком как оси H/V. При смене управления нужно это учитывать.
- В Game Maker нету функции, которая возвращает что нажато на геймпаде в конкретный момент. Считывать нажатия кнопок и осей придёится проверять полным перебором. Хорошо, что в геймпаде не так много кнопок.
В Game Maker нету интерфейса задания управления, как в Unity или Godot. Когда можешь задать название контрола и привязать к нему кнопки клавиатуры и геймпада. Несколько лет назад я написал для Game Maker набор функций, который делает то же самое. Делюсь им с вами =)
Awesome Control System
Это набор функций для Game Maker версии Studio 2.3.* и выше. Я поставляю его как локальный пакет, вы можете скачать по прямой ссылке. Потом просто импортируете в свой проект.
Что умеет на момент написания поста:
- Привязывает к "строковому названию" кнопки клавиатуры и геймпада.
- Поддерживает mapping - задание нескольких кнопок клавиатуры/геймпада для "строкового названия".
- Поддержка функционала pressed и released для стиков геймпада. По умолчанию таких функций в Game Maker нету.
- Функция проверки нажатия любой кнопки на геймпаде, в т.ч. стиков. По умолчанию такой функции нету.
- Отслеживает что игрок использует в данный момент (клавиатуру или геймпад) и хранит это в глобальной переменной. Полезно при отрисовке подсказок управления.
Я заложил ту же идею, что и в Unity, но без GUI. Вам нужно будет вызвать несколько функций чтобы привязать к строкам конкретные клавиши. Потом использовать эти строки при проверке нажатия, зажатия и отпускания клавиш. При завершении игры освободить память.
Сперва вы создаёте строковые названия контролов и назначаете им кнопки.
Вы можете добавить сразу и клавиатуру с геймпадом, а можете по отдельности. Мне удобно задавать сразу пару. А потом добавлять mapping, если нужно. В примере выше я так дублирую для геймпада кнопки "вправо/влево" со стика на d-pad. То же самое можно сделать со стрелками клавиатуры на WASD.
Добавьте вызов ACS_update на каждый тик игры (событие End Step).
Используйте функции ACS_held, ACS_pressed и ACS_released для проверки удержания, нажатия и отпускания контрола.
В конце игры (событие Game End) вызовите функцию ACS_free чтобы высвободить занятую память.
Я всегда делаю в игру постоянный (persistent) объект, который вызывает ACS_update и ACS_free. Рекомендую делать так же.
В старой версии библиотеки были ещё функции получения для конкретного контрола установленных кнопок клавиатуры и геймпада. И можно было выгружать все установки в виде хэш-карты. После того как я добавил mapping, это нужно переделывать. Как раз буду в ближайшее время в рамках текущего проекта - Zzzz-Zzzz-Zzzz. Так что это не последняя версия пакета ACS!
Заключение
Я сделал так, что для прогрессии по игре нужно настроить управление конкретным образом. Называю такие приёмы "геймдизайн ломает четвёртую стену". Это был часто используемый приём в наколенных инди 2008-2015 годов. Обычно управляли окном игры - положение/фокус/дефокус и т.д. Свою игру Zzzz-Zzzz-Zzzz я сделал в 2013-ом, вдохновившись подобными вещами. Конкретно - играми Lab14 и FEZ.
В текущей версии игры все места с использованием настройки управления выглядят одинаково. Мне не нравится, что разгадав эту задачку, игрок одинаково решит их все. Подумаю, что с этим можно сделать.
Библиотеку ACS я использую в каждом своём проекте. И вам советую, если вы делаете свои игры на Game Maker как я =)
- Следите за прогрессом по проекту Zzzz-Zzzz-Zzzz в моей руппе ВК
- Обсудить игру и библиотеку ACS можете на моём дискорд-сервере. И другие игры - мои, чужие, ваши. Или просто про игры потрещать =)
- Поддержать моё творчество и проекты можете на моей страничке бусти
Спасибо за внимание!