Game maker studio

RPG Maker

История одного из самых знаменитых конструкторов ролевых игр началась ещё в конце 1980-х. Более поздние версии для Windows, созданные японскими разработчиками, получили широкое распространение на Западе. Сегодня популярность движка достигла таких масштабов, что тег RPG Maker в Steam представляет уже не столько игры на самом движке, сколько собирательный образ тематического направления в геймдеве. Этот феномен легко объяснить.

RPG Maker используют преимущественно для создания JRPG в стиле ранних частей Final Fantasy. Сам жанр требует огромного количества ресурсов: локаций, персонажей, мобов и так далее. Большинство тех, кто работает в RPG Maker, используют дефолтные шаблоны движка, дополняя их собственными персонажами и иллюстрациями. Иногда даже NPC в этих играх созданы только с помощью генератора. Поэтому игры на RPG Maker, как правило, выглядят очень однотипно. Лень тут ни при чём: у большинства инди-разработчиков просто нет времени, навыков и ресурсов, чтобы сделать всё с нуля. А готовые системы сохранения, боя и интерфейс тяжело изменить. Даже если потратить на кастомизацию достаточное количество времени, мелкие детали в интерфейсе всё равно выдадут RPG Maker.

Сейчас существует несколько версий редактора. Последняя — RPG Maker MZ — вышла в 2020 году. Базовая версия обойдётся в 1 389 рублей. Также не стоит забывать о DLC с наборами тематических ассетов, которые наверняка потребуются начинающему разработчику.


Скриншот из To the Moon — игры, созданной на RPG Maker. Скриншот: игра To the Moon / Steam

Преимущества:

  • не требует навыков программирования, более опытные разработчики могут оценить гибкость движка с помощью JavaScript;
  • кросс-платформенность (Windows, Mac OS X, HTML5; iOS и Android — в RPG Maker MV);
  • огромное количество плагинов: игру можно сделать фактически с нуля без помощи художников и композиторов;
  • на тематических форумах есть бесплатные ассеты.

Недостатки:

  • большое количество ассетов и DLC, которые следует докупать отдельно;
  • неоправданно большой «вес» проектов: согласно порталу gamedesigning.org, игра занимает от 400 МБ независимо от количества контента, к тому же конструктор нередко создает резервные копии, засоряя жёсткий диск;
  • если перемудрить с ассетами, игра начнет тормозить — выявить причину будет непросто;
  • портирование на мобильные платформы может сопровождаться неприятными багами.

Игры на движке: To the Moon, Hello Charlotte, Grimm’s Hollow, Lawmage Academy.


Скриншот из Lawmage Academy — игры, созданной на RPG Maker. Скриншот: игра Lawmage Academy / Steam

«Мне хотелось сделать добротную двумерную RPG с приятным геймплеем, хорошей боёвкой и презентабельным визуалом. Я понял, что мне не хватит опыта и бюджета для работы с Unity 3D или UE4 (если не считать работой сборку игры сомнительного качества из готовых ассетов), поэтому я остановился на RPGMaker, тем более что мне уже доводилось с ним работать. Это замечательный инструмент, но, к сожалению, за годы у него сложилась репутация конструктора плохих игр, которые порой бывают даже хуже, чем поделки на Unity. Отчасти это связано с простотой его использования. Практически любой желающий может сразу создать игру на RPG Maker, достаточно посмотреть пару обучающих видео. Однако реальные возможности движка сильно ограничены: на нём можно сделать только JRPG в стиле Final Fantasy, для иных жанров потребуется масса плагинов, а ещё предстоит потратить время на работу с кодом».

Manly Mouse Studios, инди-разработчик (The Singularity Wish). Дневник разработчика, октябрь 2019 года


Скриншот из The Singularity Wish — игры, созданной на RPG Maker. Скриншот: игра The Singularity Wish / Steam

«RPG Maker действительно очень простой движок. Его простота и доступность привели к тому, что на нём появилось огромное количество „мусора“, в том числе порнографического содержания. Из-за этого многие геймеры терпеть не могут RPG Maker. И эта дурная слава будет преследовать даже качественные проекты. Игры на этом движке очень узнаваемы. Ещё могу отметить тот факт, что движок подходит для создания пошаговых RPG и даже квестов. Игры других жанров в теории тоже можно сделать (я даже видел симпатичный beat ’em up), но это равносильно забиванию гвоздей отвёрткой вместо молотка».

Кирилл Пестряков, инди-разработчик (Heroines of Swords & Spells)


Скриншот из Heroines of Swords & Spells — игры, созданной на RPG Maker. Скриншот: игра Heroines of Swords & Spells / Steam

Возможности

Изначально автор приложения – Марк Овермарс – хотел создать обучающую программу, которая объясняла бы студентам принципы программирования. Однако постепенно разработка превратилась в игровой редактор. Он развивается уже более 15 лет, обрастая функционалом, что позволяет:

  • придумывать 2D-игры;
  • создавать презентации;
  • рисовать анимацию;
  • использовать программу в учебных целях.

Интерфейс приложения интуитивно понятен, окно содержит привычные для обычных пользователей строки меню и панели кнопок. В меню находится раздел справки, где можно увидеть обучающий ролик, объясняющий всю суть программы.

Runtime Changes

Many functions have been added in GameMaker Studio 2, the following sections outline those that have been added and those that have been removed, please consult the manual (Help -> Open Manual) for further info.

Our Windows Desktop Runner has also changed from using DX9 to using DX11 this may mean that there are some compatibility issues that may need to be addressed, there are some known issues at present

  • No Anti Aliasing implemented — all functions return 0 for the number of anti aliasing levels, we will implement this in the future
  • Line drawing — unfortunately line drawing is not consistently implemented by hardware vendors, this means that between different manufacturers and different drivers from the same manufacturer you may get different results, we reccomend that you do not rely on line drawing in released games, but the functions are still there for you to try.
  • Windows XP is no longer supported for games created using GameMaker Studio 2.

GPU functions

  • gpu_set_blendenable(enable) — enable or disable the gpu blending
  • gpu_set_ztestenable(enable) — enable or disable the gpu ztest
  • gpu_set_zfunc(cmp_func) — set the gpu z compare function (one of cmpfunc_never, cmpfunc_less, cmpfunc_equal, cmpfunc_lessequal, cmpfunc_greater, cmpfunc_notequal, cmpfunc_greaterequal, cmpfunc_always, default is cmpfunc_lessequal)
  • gpu_set_zwriteenable(enable) — enable or disable the gpu z write enable
  • gpu_set_fog(enable,col,start,end) — enable or disable the fog used in the default shader setting the colour and the start and end depths
  • gpu_set_cullmode(cullmode) — set the gpu cull mode (one of cull_noculling, cull_clockwise, cull_counterclockwise)
  • gpu_set_blendmode(mode) — set the gpu blend mode (one of bm_normal, bm_add, bm_max, bm_subtract)
  • gpu_set_blendmode_ext(src,dest) — set the gpu blend mode where source or dest could be (one of bm_zero, bm_one, bm_src_colour, bm_inv_src_colour, bm_src_alpha, bm_inv_src_alpha, bm_dest_alpha, bm_inv_dest_alpha, bm_dest_colour, bm_inv_dest_colour, bm_src_alpha_sat)
  • gpu_set_blendmode_ext_sepalpha(src,dest,srcalpha,destalpha) — set the gpu blend mode where the source and destination blendmodes are set separately and the src alpha and dest alpha blend modes can be different (each param is one of bm_zero, bm_one, bm_src_colour, bm_inv_src_colour, bm_src_alpha, bm_inv_src_alpha, bm_dest_alpha, bm_inv_dest_alpha, bm_dest_colour, bm_inv_dest_colour, bm_src_alpha_sat)
  • gpu_set_alphatestenable(enable) — enable or disable the gpu alpha test
  • gpu_set_alphatestref(value) — set the gpu alpha test reference value (default value is 0)
  • gpu_set_texfilter(linear) — set the gpu filter type for default sampler (0)
  • gpu_set_texfilter_ext(sampler_id,linear) — set the gpu filter type for specified sampler
  • gpu_set_texrepeat(repeat) — enable or disable the gpu texture repeat for the default sampler (NOTE: sets both u and v repeats)
  • gpu_set_texrepeat_ext(sampler_id,repeat)- enable or disable the gpu texture repeat for the specified sampler (NOTE: sets both u and v repeats)
  • gpu_set_colourwriteenable(red,green,blue,alpha) — enable or disable the gpu writing to destination channels individually
  • gpu_set_colorwriteenable(red,green,blue,alpha) — enable or disable the gpu writing to destination channels individually
  • gpu_get_blendenable() — get the current state of gpu blending
  • gpu_get_ztestenable() — get the current state of gpu z test
  • gpu_get_zfunc() — get the current value for gpu z function
  • gpu_get_zwriteenable() — get the current state of gpu z writing
  • gpu_get_fog() — get the current state of gpu fog (returns an array with entries — enable/disable, -colour, — start value, — end value)
  • gpu_get_cullmode() — get the current value for the gpu cullmode
  • gpu_get_blendmode() — get the current gpu blendmode value
  • gpu_get_blendmode_ext() — get the current gpu blendmode (array with — src blend, — dest blend)
  • gpu_get_blendmode_ext_sepalpha() — get the current gpu blendmode (array with — src blend, — dest blend, — src alpha blend, — dest alpha blend)
  • gpu_get_blendmode_src() — get the current gpu source blend value
  • gpu_get_blendmode_dest() — get the current gpu destination blend value
  • gpu_get_blendmode_srcalpha() — get the current gpu source alpha blend value
  • gpu_get_blendmode_destalpha() — get the current gpu destination alpha blend value
  • gpu_get_alphatestenable() — get the current status of gpu alpha enable/disable
  • gpu_get_alphatestref() — get the current gpu alpha test reference value
  • gpu_get_texfilter() — get the current gpu texture filter status for default sampler (0)
  • gpu_get_texfilter_ext(sampler_id) — get the current gpu texture filter status for specified sampler
  • gpu_get_texrepeat() — get the current status gpu texture repeat for default sampler
  • gpu_get_texrepeat_ext(sampler_id) — get the current status gpu texture repeat for specified sampler
  • gpu_get_colorwriteenable() — get the current state of the gpu color write enable (array with — red, — green, — blue, — alpha)
  • gpu_get_colourwriteenable() — get the current state of the gpu colour write enable (array with — red, — green, — blue, — alpha)
  • gpu_push_state() — push the current gpu state onto an internal gpu state stack
  • gpu_pop_state() — pop the entry from the top of the gpu state stace and make it current
  • gpu_get_state() — get the current gpu state as a map (returns a map id)
  • gpu_set_state(map) — set the current gpu state to the state stored in given map

Обзор интерфейса

Последней версией Game maker studio №1 была 8.1.140, на сегодняшний день она перестала поддерживаться, так была выпущена новая версия Game maker studio 2.

Так же на официальном форуме можно скачать русификатор для движка.

Ссылка на русификатор: Google drive

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

Так как мы используем бесплатную версию программы, категория «Изучение» нам не будет доступна.

Для того, чтобы начать разработку игры, нажимаем на кнопку «Создать» и в следующем окне «Drag and Drop» после чего откроется окно, в котором нужно придумать название проекта и сохранить в удобное для вас место.

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

Для того что бы начать работать и создавать объекты нам нужно будет нажать правой кнопкой по пустому пространству, и выбрать пункт «Ресурсы». В выпавшем окне выбираем с создания чего будем начинать разработку.

При создании спрайта нам откроется меню создания, анимированные персонажа нашей игры. Тут можно полностью с нуля, попиксельно, нарисовать персонажа или же импортировать уже готового. Так же анимировать его, создать по кадровую анимацию действий персонажа.

Для создания карты нам нужно выбрать «Ресурсы», а затем в выпавшем окне «Создать комнату». В редакторе комнаты предоставляются возможности задать размер, фон, установить элементы взаимодействия, разместить персонажей, нарисовать пути и т.д. В редакторе комнаты так же можно импортировать уже готовый фон или создать его саму с помощью этого редактора.

Создание событий можно произвести без обращения к программированию и созданию скриптов, все делается с помощью довольно интуитивно понятных меню и окон. Можно продумать и создать довольно сложные сценарии действий для объекта с помощью визуального редактора Game maker studio.

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

Стоит заметить часть программы, в которой нам дается возможность работать с кодом на языке GML. Очень радует та легкость, с которой простые командные функции могут быть сделаны. Поэтому если вы начинающий Game creator и готовы посвятить этому большую часть времени, тогда вам просто необходимо заняться изучением языка GML.

Workspaces

The first major change you’ll see on starting a new project with GameMaker Studio 2 is that you are now presented with a workspace. This is an area that will hold the windows associated with the resources that you are working on and it can be zoomed and panned as if it was an actual desktop area. To move around the workspace you can click the middle mouse button and move — or hold down Space and left click — to pan around, with holding down Control and the mouse wheel being used to zoom in and out.

One of the main features of the workspace is that you aren’t limited to just one of them, nor are you limited to having everything in the same window. If you click on the workspace tab at the top, you can drag it off of the main GameMaker Studio 2 window and it will create another sub-window for the project that can then be positioned elsewhere (like in another monitor, for example). You can also merge any secondary workspaces with the main window by clicking the tab and dragging it back onto the main IDE. Each workspace can also be named to easily identify it by double clicking on the tab name and typing the name you prefer to have.

Apart from having multiple workspaces, you can also dock windows to the sides and the bottom of any active workspace.

A docked window will remain fixed to the chosen workspace, and you can open and close the dock by clicking the small arrowed button on the side. In this way you can quickly get more space to see what’s happening by closing a dock and then expand it again as required. Note that there is a button at the top of the IDE to quickly expand/collapse all docks at once.

Web Audio

When creating games for the HTML5 target platform, the audio
engine requires Web Audio support, and this in turn mans
that sometimes your audio won’t play when or how you expect it.
This is because the Web Audio context may not be running or may
stop running when your game is being played. What causes this
varies greatly between browsers, and even between different
versions of the same browser, and so detecting when the web audio
context status changes is very important, eg: to detect when the
context changes and pause/start looping audio like background
music.

To help with this issue, GameMaker Studio 2 has two
separate ways to detect the change in Web Audio context status,
either using the following function:

Or using the Asynchronous System Event, which will be
triggered whenever the Web Audio status changes. In this event you
will get the built in async_load DS map populated with
the key «event_type» which in turn will hold the string
«audio_system_status» if it is an audio event. When this
key exists, there will also be a further «status» key
which will be either «available» or
«unavailable«. Note that this event will be triggered on
all platforms, but on everything except HTML5 it will only
be triggered once on Game Start when the audio engine is first
initialised. For more information please see the section:

Примеры скриптов [ править | править код ]

Вот простой пример скрипта, который выводит легендарную фразу «Hello, World!»:

Ещё один пример, который отображает тот же текст, но уже в окне программы. Заметьте, что по умолчанию Game Maker непрерывно перерисовывает окно, поэтому в обычном случае этот код нужно поместить в событие рисования.

Вот фрагмент кода из игры на GML:

Стили кода можно смешивать. Например, предыдущий пример может быть записан так:

Вот пример обычного управления с клавиатуры. Функция motion_set принимает два параметра: направление (в градусах) и скорость (пикселей за шаг). Вызов этой функции приведет к изменению встроенных локальных переменных speed и direction, которые использует Game Maker для перемещения объектов (объекты также можно сдвигать напрямую, используя локальные переменные x и y):

А вот пример более сложного скрипта для платформенной игры. Используя его, игрок может ходить по выпуклой поверхности:

Tilemaps and Tiles

  • tilemap_tileset(tilemap_element_id,tileset) — set the tileset to use for the tilemap element
  • tilemap_x(tilemap_element_id,x) — set the x position of the tilemap element
  • tilemap_y(tilemap_element_id,y) — set the y position of the tilemap element
  • tilemap_set(tilemap_element_id,tiledata,cell_x,cell_y) — set the tiledata at the cell (x,y) position on the tilemap element
  • tilemap_set_at_pixel(tilemap_element_id,tiledata,x,y) — set the tiledata at the pixel (x,y) position on the tilemap element
  • tilemap_get_tileset(tilemap_element_id) — get the tileset used for the tilemap element
  • tilemap_get_tile_width(tilemap_element_id) — get the tile width of the tilemap element
  • tilemap_get_tile_height(tilemap_element_id) — get the tile height of the tilemap element
  • tilemap_get_width(tilemap_element_id) — get the width (in tiles) of the tilemap element
  • tilemap_get_height(tilemap_element_id) — get the height (in tiles) of the tilemap element
  • tilemap_get_x(tilemap_element_id) — get the x position of the tilemap element
  • tilemap_get_y(tilemap_element_id) — get the y position of the tilemap element
  • tilemap_get(tilemap_element_id,cell_x,cell_y) — get the tiledata for the cell at (cell_x, cell_y) on this tilemap element
  • tilemap_get_at_pixel(tilemap_element_id,x,y) — get the tiledata for the pixel at (x, y) on this tilemap element
  • tilemap_get_cell_x_at_pixel(tilemap_element_id,x,y) — get the cell x for the pixel at (x, y) on this tilemap element
  • tilemap_get_cell_y_at_pixel(tilemap_element_id,x,y) — get the cell y for the pixel at (x, y) on this tilemap element
  • tilemap_clear(tilemap_element_id,tiledata) — clear all the cells in the tilemap element with the given tiledata
  • draw_tilemap(tilemap_element_id,x,y) — draw the tilemap at position x, y in the current view
  • draw_tile(tileset,tiledata,frame,x,y) — draw the given tiledata from the tileset using given frame at position x, y in the current view
  • tilemap_set_global_mask(mask) — set the current rendering global mask for ALL tilemap elements (allows user to reserve bits in the tiledata as renderer can be set to ignore them using this function) NOTE:this does not affect get/set tiledata functions above
  • tilemap_get_global_mask() — get the current global mask
  • tilemap_set_mask(tilemap_element_id, mask) — set the current rendering mask for this tilemap element (allows user to reserve bits in the tiledata as renderer can be set to ignore them using this function) NOTE:this does not affect get/set tiledata functions above
  • tilemap_get_mask(tilemap_element_id) — get the current rendering mask
  • tilemap_get_frame(tilemap_element_id) — get the current frame number for the tilemap element
  • tile_set_empty(tiledata) — set the tiledata to be an empty cell, returns modified tiledata
  • tile_set_index(tiledata,tileindex) — set the tileindex to use on a given tiledata, returns modified tiledata
  • tile_set_flip(tiledata,flip) — enable or disable the flip flag on tiledata, returns modified tiledata
  • tile_set_mirror(tiledata,mirror) — enable or disable the mirror flag on the tiledata, returns modified tiledata
  • tile_set_rotate(tiledata,rotate) — enable or disable the rotate flag on the tiledata, returns modified tiledata
  • tile_get_empty(tiledata) — returns true if tiledata is empty
  • tile_get_index(tiledata) — returns the index of the tile from tiledata
  • tile_get_flip(tiledata) — returns the flip flag of the tiledata
  • tile_get_mirror(tiledata) — returns the mirror flag of the tiledata
  • tile_get_rotate(tiledata) — returns the rotate flag of the tiledata

Недостатки Game Maker Studio 2?

Тут во многом с моей колокольни, и многое — лично мой взгляд. Некоторые вещи — просто непривычны, однако есть объективные недостатки.

GMS 2 требует больше ресурсов для работы чем старые версии. Старые GM у меня летали, эта уже греет компьютер, что ни есть приятно. Жрёт сравнительно много (с прошлыми версиями) оперативки. Когда делаешь игры месяцами и еще крутишь другие программы фоном — это может напрягать. Ну и вообще он работает медленнее, дольше компиляция, дольше загрузка и т.д. Это проблема была и у многих других старых версий ГМ, часто их выкидывают сухими, а уже потом допиливают. Тут тоже допилят со временем. я уверен.

Русской версии пока нет, и может быть не будет никогда. Хотя так-то игры делаются на английском, привыкайте. Справки на Русском тоже вроде как пока нет, и ресурсов для обучения мало. Не знаю буду-ли я на своём канале делать про это обучающие видео, возможно — да, но в целом гмс 2 сильно похож на ранние версии и многое актуально и для него. Это хорошо.

Элементы интерфейса занимают много места. То, что одна вкладка не может наплывать на другую, немного бесит, лично меня. Таким образом всё занимает больше места и есть ощущение что делали — лишь бы красиво, а удобство это дело второе. Хочется ставить game maker studio 2 на двух мониторах. Вот так будет круто.

Запущенные игры иногда виснут после закрытия, может быть это только у меня.

Изменился некоторый синтаксис кода. Немного раздражает. Зачем менять instance_create, добавляя туда слой, я не знаю. При чём, в целом изменений синтаксиса не так много, но вот эти изменения сильно мешают спокойно и быстро осваивать новые версии и переносить старые проекты на новый ГМ. Бесит сдецл.

Цена. Цена ощутима. Точно не скажу сколько, но например в США $100 за лицуху для PC, и дикие $400, за возможность компилировать под мобильные платформы. Это бесило и в первой части ГМС, и именно это привело к тому, что игру тупо пиратят. Сделали-бы они нормальную цену, например $100 за полный функционал, мало-бы кто пиратил. Жадность лишь увеличивает воровство.

В целом было ощущение (еще когда узнал что будет ГМС 2) что кое-кому просто захотелось срубить бабла в стиле Apple, просто повесив на продукт цифру X+1, и продать это всё еще раз. Стратегия, конечно, хорошая. Для них. Но не для нас. Однако я вижу что нового в Game Maker Studio 2 вполне достаточно для новой версии и я надеюсь что его будет еще больше, а все косячки они приберут.

Так что версия для PC (Если у вас лицуха GMS 1 — будет хорошая скидка) вполне достойна внимания, а команда YoYo Games работает уже очень давно и я думаю вполне можно их отблагодарить за хороший продукт (чуть позже, когда его доведут до ума и он таковым станет), но скидку они могут и убрать, а до ума они его почти наверняка доведут, так-что если вы хотите серьезно заниматься созданием игр и вы выбрали Game Maker — думаю, стоит брать.

Хотя если вы совсем новичок — выбор между ГМ и Юнити будет довольно трудный, у Юнити очень много плюсов (та-же бесплатность), поэтому я бы еще подумал что выбирать.

Просто на мой взгляд научиться создавать компьютерные игры вам будет проще именно с помощью Game Maker, он для этого и придумывался — для обучения созданию игр.

Если вам понравилась эта статья, поставьте чуть ниже палец вверх, спасибо за прочтение. Надеюсь на основные вопросы я ответил и вам она помогла.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector