Точнее, о "браузерности" игр на нём. Что нам даёт знание этого безобразия? На самом деле, довольно многое. Сразу предупреждаю: нижеследующее - есть лишь мои рассуждения на тему. Свои мысли обязательно пишите в комментах, будет интересно почитать.
Первое и, пожалуй, самое недооценённое - это наличие полноценной консоли. Если вы сталкивались с веб-программированием, вы понимаете, насколько это важная штука. Понятно, что движковые части представляют собой статичные классы, но вот все ваши наработки, плагины и пр. могут выводить в консоль любую информацию, что полезно для дебаггинга. Обсчитываете что-то, выдаёте это в консоль посредством console.log(), и, собственно, профит.
Вот я добавил вывод в консоль тупого сообщения:
В грядущем RPG Maker Unite, за счёт того, что это будет фактически ассет-пак Юнити (которая является фактически фреймворком C#), тоже будет нормальная консоль, в которую можно выводить данные стандартной командой Debug.Log().
Заметка на полях: когда вы что-то меняете в плагине для RMMZ, вам обязательно надо сохранить игру. Если вы тестируете через Запуск игры - движок вас в любом случае спросит, надо ли сохранить прогресс, а вот если вы, к примеру, тестируете боёвку в окне Отряды - не забывайте после всех изменений в коде сохранять проект.
Да, кстати, старый дедовский способ дебаггинга через alert() тоже работает. Как я уже говорил, браузер поддерживает все возможные функции JS, так что получите и распишитесь:
Игра на RMMZ - это js код в браузере, и он болеет всеми проблемами, которые только могут быть у js кода в браузере. Однажды я по приколу делал движок на js - он был проще, чем этот, само собой, но уже тогда я понял одну вещь: оптимизировать это дело - больно и страшно. Я тогда взялся обсчитывать положение десятка объектов на каждом кадре (а их в серьёзном движке, предположим, 60 в секунду!), чтобы реализовать коллизии, и у меня задымился комплюхтер.
Если вы поместите на достаточно небольшую карту в RPG Maker MZ 20 или 30 ивентов, каждый из которых запускается параллельно и имеет свою анимацию (всего-то покадровая анимация из 4 кадров!), ваша игра с вероятностью в 99% начнёт тормозить. И каждый новый ивент будет её притормаживать всё больше и больше.
Плохая новость: подобные приколы буквально неискоренимы, в связи со спецификой той самой пресловутой "браузерности" движка. Придётся с холодной головой и каменным сердцем подходить к тому, что бы умерить аппетиты и размещать на каждой локации не более энного количества ивентов.
Хорошая новость: как и любой js в браузере, с чем знакомы многие мои коллеги, игра может быть и должна быть оптимизирована по мере возможности. Самое главное, что тут применимы все те же методы ускорения, что и в этой вашей айтишечке. Из-под капота жабаскрипт в браузере работает однопоточно, то есть весь код исполняется построчно и прямолинейно. Обратите внимание на эту мысль: КОД В JS ВЫПОЛНЯЕТСЯ ПОСТРОЧНО! А раз так - чем меньше строчек, тем лучше, как говорится. Впрочем, асинхронность в мейкере имеет место, но об этом как-нибудь потом, а то текст и так слишком длинный.
Стандартные методы оптимизации:
Удаление неиспользуемого кода (рассуждение об этом ниже);
Правильное написание кода - без создания по сто раз одних и тех же объектов, с своевременными прерываниями функций и циклов, если они больше не нужны, решают короткие формы записи объявления переменных, тернарные операторы и пр.;
Естественно, минимизация кода;
Самый объёмный пункт: и так далее.
Однако, сам движок у нас готовый, на руках. И оптимизировать его будет, мягко говоря, сложновато. В качестве моего личного предположения: мы можем отрезать нафиг какие-то функции, если мы понимаем, что они нам не нужны, и что мы сможем найти все хвосты, чтобы игра в неожиданном месте не выдала неожиданную волчью задницу.
К примеру, есть люди, которые делают визуальные новеллы на RPG Maker - им стопудово не нужна боевая система, значит, в помойку её. Со всей обслуживающей её инфраструктурой.
Насколько моё предположение оправдано - я не знаю, пока ничего не удалял. Если у вас есть опыт или какие-то измышления на сей счёт - поделитесь.
3. Игра в браузере после релиза
В связи с тем, что игра на RMMZ - это и так браузерное явление, ничего удивительного, что начиная с версии MV экспорт игр в браузер стал плёвым делом. Я даже скажу больше: как мне кажется, именно такое существование для игр на современных мейкерах предпочтительнее. Не знаю, что там будет в Unite.
Потенциально, перенос игры на сервак с возможностью подключения данных из MySQL или любой другой БД на серваке - это открытые ворота к многопользовательской игре. Ещё раз подчеркну: любой код JS будет работать. И даже сторонние плагины и фреймворки потенциально можно заставить пахать на благо вашей чудесной игры.
Опять же, это пока измышления. Если кто-то уже реализовывал серверную историю для проекта на RMMZ, поделитесь, пожалуйста, опытом. Какие подводные камни, ограничения и т.д.?
4. Возможность использовать альтернативные ходы
В предыдущем пункте я уже говорил про возможность разместить проект на серваке и подрубаться к серверным плюшкам, чтобы улучшить свою игру и даже сделать сетевые функции.
Помимо этого можно использовать и другие апи, надстройки и т.д., которые поддерживает JS. К примеру, кладёте в папку с игрой файл, а дальше XMLHttpRequest и поскакали. Эта апишка вполне может помочь расширить функционал вашего проекта. Потом просто по какой-то логике распихиваете полученный контент по переменным с помощью $gameVariables.setValue() - и всё, пользуйтесь.
А ещё есть достаточно бедные, но всё же заметные возможности HTML+CSS. Сама игра, как вы знаете, подгружается в canvas, но такие вещи, как иконки, параметры окна, даже курсор можно поменять в индексе! Между прочим, этим пользуются многие разработчики, которые не хотят лезть внутрь движка, а находят обходные пути.
Вот, смотрите, перед вами код де факто основного файла игры - index.html
А вы думали, как он должен называться?)
Тут сразу видно и подключение иконки, и подключение css, и подключение скрипта внизу. Нам что-то мешает, к примеру, добавить подключение ещё какого-нибудь скрипта, или даже целой библиотеки? Нет, не мешает.
Кстати, интересным развлечением будет почитать файл main.js - в нём содержится, фактически, основной класс вашей игры, этакий менеджер менеджеров. А ещё там можно почитать, в какой последовательности грузятся модули (и добавить собственный при желании), как обрабатываются ошибки и так далее. В результате его работы и работы все подключённых файлов, получается следующая html-разметка (то бишь, один единственный main.js, подключаемый в индексе, уже на клиенте подгружает ещё почти два десятка JS файлов):
Вот этот canvas - он и будет содержать собственно говоря игру.
Но посмотрите на этот впечатляющий список скриптов! Вы можете добавить в этот список что-нибудь своё и спокойно запустить.
В общем, вывод такой: веб-программирование никогда ещё не было так близко к геймдеву и, по всей видимости, уже никогда не будет. Пользуемся, пока движок совсем не покрылся пылью)
Спасибо за внимание и до новых встреч!