GameMaker: Решение невозможности сборки проектов из редактора

Время от времени я наблюдаю вопросы о проблемах со сборкой любых проектов на GameMaker: Studio, что попадают под одно из двух описаний:

  1. Игра не собирается, редактор выдает "An error occurred, check compile form for more information", но во вкладке "Compile" никакого текста о ошибке нет
  2. Игра собирается, но вместо окна игры появляется окно, просящее выбрать файл:

Причина возникновения данных ошибок предельно проста – битые пути в настройках (меню: File - Preferences):

Читать далее

GameMaker: Использование внешних систем управления версиями

За годы, я наблюдал отдельный сценарий слишком много раз:

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

Поскольку пояснять данные вещи "в индивидуальном порядке" не слишком рационально, я решил написать запись, что покрывала бы наиболее важные элементы:

  • Пояснение преимуществ систем управления версиями над обычным резервным копированием.
  • Пояснение (пошаговая инструкция) принципов использования стандартной комбинации для контроля версий - BitBucket (сервис) + Git (ПО) + SourceTree (визуальный клиент).

Данная статья преимущественно направлена на пользователей GameMaker: Studio, но может быть с легкостью применена к другим инструментам.

Читать далее

Добавление десятичных разделителей

string_thousands

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

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

Эта запись посвящена данной операции, включая алгоритм и код.

Читать далее

GameMaker: подсветка синтаксиса в стиле GM8 для Studio

Если вы используете GameMaker: Studio, и стандартная тёмная тема показалась вам странноватой, вы, наверное, уже переключились на подобную предыдущим версиям программы тему "GM8" через File - Preferences.

Но, увы, переключение на эту тему не меняет цвета в редакторе кода, и вы остаетесь с стандартной тёмно-оранжевой темой посреди светло-серого редактора.

Поэтому, я подумал, что имело бы смысл опубликовать GM8-образную тему для редактора кода, которую я сделал долгое время назад, и до сих пор активно использую.

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

Чтобы импортировать тему для подсветки синтаксиса, перейдите в File - Preferences - Scripts and Code, нажмите Import, и выберите скачанный файл.

Про малые вещи сложно писать большие записи, поэтому, файл:

Download COL

Развлекайтесь 🙂

GameMaker: Windows-специфичные функции для Studio

Работая с одним из недавних проектов, я наткнулся на несколько проблем, встречаемых многими - даже если вы делаете игру лишь для Windows в GameMaker: Studio, вы не можете работать с файлами вне папки программы в AppData (нельзя даже работать с папкой, где программа установлена). Так же нет функций для открытия файлов в внешних программах, так что никаких вам "readme" в папке программы с открытием их из игры, никаких портативных файлов настроек, некоторых других вещей... грустно, в общем-то.
Поэтому я потратил вечер и сделал компактный DLL, который добавляет эквиваленты павшим функциям (sleep, execute_shell, I/O без песочницы) для Windows таргета. Поддерживаемые функции следующие:

Читать далее

GameMaker: Нахождение ресурсов по имени

Если вы работали с GameMaker, вам наверняка хоть раз хотелось написать код вроде такого:

instance_create(x, y, 'obj_item' + string(irandom_range(1, 3)));

Но, как вы, возможно, заметили, просто так это сделать нельзя. Это происходит потому, что идентификаторы ресурсов - числа, а не строки. Обычно советуют сделать что-то вроде этого:

var i;
switch (irandom_range(1, 3)) {
	case 1: i = obj_item1; break;
	case 2: i = obj_item2; break;
	case 3: i = obj_item3; break;
}
instance_create(x, y, i);

Это работает (и работает, стоит сказать, довольно быстро), но ручное написание таких фрагментов кода - сомнительное удовольствие. Даже более сомнительное, если вы хотите использовать сложные правила формирования имени (spr_player_действие_v_вариация).
Другой подход, который нередко используется, выглядит так:

execute_string('instance_create(x, y, obj_item' + string(irandom_range(1, 3)) + ');');
// Некоторые говорят, что вы - ужасный человек, если используете такой код.

Но, увы, это - плохая идея, поскольку это заставляет GameMaker разбирать (парсить) данный кусок кода при каждом вызове. А, ну да, и это так же не будет работать в GameMaker: Studio, поскольку функции динамического скриптинга были удалены из программы с корнями.
В этот момент можно было бы остановится и спросить:

А что же тогда предлагаешь ты?

А я бы ответил:

Рабочее решение, конечно же.

А если серьезно, используйте ds_map. Это - довольно элегантно, потому что поиск слабо зависит от количества ресурсов, и единственная истинно ресурсоемкая операция должна быть выполнена в начале выполнения игры.
Пример, приведенный в конце данной записи, включает в себя такую функцию инициализации, как и простой интерфейс для непосредственного поиска:

instance_create(x, y, object_find('obj_item' + string(irandom_range(1, 3))));

Если же вы используете GameMaker: Studio версии 1.1 или выше, процесс становится еще проще - ведь в программу была добавлена функция asset_get_index(имя ресурса), что имеет подобное назначение (с тем различием, что тип ресурса в ней указывать не нужно).
Пример в формате GMZ прилагается ради совместимости с более ранними версиями.

Скачать GMK Скачать GMZ

GameMaker: Перетягивание вида/камеры

vis-view-drag

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

Читать далее

GameMaker: Открытие проектов 5/6/7/8 версии в GameMaker Studio

Открытие GameMaker 8.1, 8, 7, 6, 5 проектов в GameMaker: Studio

Один из первых вопросов при переходе на GameMaker: Studio заключается в том, как открывать созданные в более ранних версиях (GameMaker 8.1, GameMaker 8.0, 7, 6.x, 5.x...) проекты. Если вы пришли сюда из поиска, то вероятно вы уже заметили что перетягивание файлов предыдущих версий на программу или попытки открытия их обычным способом не имеют никакого эффекта. В такие моменты приходят мысли этого рода:

Грустный рисованный человечек с надписью 'Переписать весь код?' над ним.

Но нет, конечно же не все так плохо (почему бы кто-то заставлял вас переписывать весь код?), и вы можете запустить ваши проекты в GameMaker: Studio импортировав их. Эта запись объясняет, как, и почему.

Читать далее

GameMaker: Монетки, магазины, и всплывающие надписи

Пример экономики для GameMaker
Давайте просто скажем что графика для этого примера взята из "абстрактной" коллекции.

Хотя я сделал этот пример долгое время назад, похоже что вопросы на эту тематику до сих пор задаются довольно часто, и имеет смысл сделать данный пример "находимым" с помощью этой записи.
Пример демонстрирует создание трех основных вещей:
  • Монетки, как подбираемый ресурс.
  • Всплывающий текст, используемый тут для отображения "+1" при подборе монеток, но имеющий много других применений (в том числе и отображение урона).
  • Магазины, продающие игроку полезные (или в данном случае безполезные) предметы за монетки.
В общем, довольно просто, но все равно полезно для тех, кто еще с этим не разобрался.

Скачать GMK