Загадки с управлением

В моей игре 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 можете на моём дискорд-сервере. И другие игры - мои, чужие, ваши. Или просто про игры потрещать =)
  • Поддержать моё творчество и проекты можете на моей страничке бусти

Спасибо за внимание!

22
Начать дискуссию