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

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

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

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

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

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

Читать далее

Выпуск: VK.Shadowlog

VK.Shadowlog: Просмотр удаленных записей\комментариев ВКонтакте

На днях я сделал ещё один userscript для ВКонтакте. На этот раз это кое-что необычное - данный скрипт позволяет просматривать удаленные записи и комментарии на страницах групп\сообществ.

Конечно, для проделывания такой "магии" есть некоторые условия, но это остается довольно полезным трюком.

О принципе работы далее в этой записи, ссылка на скачивание в конце.

Читать далее

GameMaker: Добавление изображений на “экран загрузки” в HTML5


(веб демка)

Кто-то на форуме спросил, существует ли пример/расширение для отображения логотипа (или иной картинки) во время загрузки собранной на HTML5 модуле GameMaker: Studio игры. Подходящих расширений замечено не было, поэтому я сделал одно.

Читать далее

Установка userscript’ов / .user.js

Данная мини-запись преимущественно сделана того, чтобы ссылаться на нее с страниц моих же userscript'ов.

Userscript'ы это [обычно небольшие] сценарии на языке программирования JavaScript, что встраиваются браузером в подходящие под критерии страницы. Поскольку такие сценарии имеет полный доступ к содержимому затрагиваемой страницы, они могут быть использованы для добавления элементов на страницу, изменения функционала, и прочего.

Читать далее

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

string_thousands

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

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

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

Читать далее

BitFive: Теперь с мультитачем

Теперь в openfl-bitfive, альтернативной реализации Flash/OpenFL API на HTML5 с фокусом на блиттинг и совместимость с мобильными устройствами, есть поддержка мультитача.
Использование аналогично Flash/AIR - вы добавляете соответствующий слушатель событий на нужный DisplayObject, и обрабатываете приходящие в него события TouchEvent:

stage.addEventListener(TouchEvent.TOUCH_BEGIN, function(e) {
	trace("Касание на (" + e.stageX + ", " + e.stageY + ")");
});

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

Изменения уже внесены в репозиторий и haxelib, есть демка (имеет смысл запускать на мобильном устройстве), а дополнительные детали доступны в английской версии записи.

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