Всем привет! Решил вот завести дневник для своего проекта, чтобы оставлять некоторые заметки по прогрессу.
Кто ещё не знает - пишу свой движок наподобии RPG Maker, который должен вобрать все лучшие его качества (в том числе создание игр без программирования), при этом предоставить решительно новые возможности и сделать удобнее многие старые. Затеял это дело ещё три года назад, но до сих пор не довёл до ума. Впрочем, проект не заброшен и потихоньку пилится.
В 2013 я излагал некоторые мысли и идеи на этом сайте и Нейтральной полосе и даже выкладывал пару демок под заголовком "RPG Maker Online". Ныне это всё неактуально, ибо абсолютно всё было переписано с нуля, даже название изменено на "Leaf Engine". Свежие демки ходили только среди нескольких людей и публично уже нигде не выставлялись.
Первые версии были реализованы на html-элементах (div-ах с картинками, которые двигал js), flash, а также чистом canvas. Актуальная версия пилится на pixi.js (с поддержкой webgl), что значительно лучше.
Хорошая оптимизация на любых устройствах, полная кроссплатформенность
Цель: Минимум 60 fps даже на слабеньких устройствах.
Статус: Игры могут быть запущены в браузере или же собраны как самостоятельное приложение (аналогично RPG Maker MV).
В данный момент с десктопными браузерами всё хорошо, мобильные же требуют больше тестинга.
Замечены фризы в мобильной Opera. Chrome и Android Browser справляются отлично.
Ещё предстоит много работы над оптимизацией по мере увеличения другого функционала.
Поддержка игр с различным типом графики
Цель: Поддержка карт на основе готовых картинок (аналог параллакс маппинга), тайловых карт, изометрических (как плоских, так и объёмных, с полноценными 3D-вычислениями коллизий и видимости). Возможность использования неограниченного количества слоёв карты. Возможность размещения объектов как с привязкой к сетке, так и без неё.
Статус: В данный момент есть поддержка многослойных карт на основе готовых картинок, однако ещё требуется оптимизация для карт большого формата (нарезка на куски в видеопамяти для выборочного рендеринга).
Поддержка плоских изометрических карт тоже готова, с объёмными пока сложно (в целом алгоритмы и отрисовка работают, но нужно больше оптимизации, при наличии десятков тысяч объектов наблюдаются некоторые проблемы с производительностью).
Тайловый редактор ещё в процессе разработки, пока он умеет мало (есть слои, рисование, заливка, но нет поддержки автотайлов, свободно позиционруемых объектов и т.д.).
Поддержка свободного движения и движения по клеточкам
Цель: Возможность создания как полностью независимых от клеток игр, так и поклеточных. Поклеточные могут быть как с движением по диагонали, так и без него. Возможность задавать проходимость с помощью клеток, изображений-масок (попиксельная коллизия) или же параметров ивентов (коллижен боксы).
Статус: В данный момент есть поддержка свободного движения, колижен-боксов, попиксельной коллизии. Алгоритмы движений требуют оптимизации и доработки (при столкновении с препятствием персонаж должен пытаться его обойти).
Гибкая настройка спрайтов и анимаций
Цель: Поддержка любого формата спрайтов и их анимаций.
Статус: В данный момент игродел может создать текстовый файл с описанием формата своего спрайта, или же использовать один из готовых (например, стандартный формат графики RPG Maker). В файлике описываются размеры кадра, местонахождение нужных анимаций на картинке, количество кадров, скорость анимации, порядок кадров. Можно сделать персонажей с 8 вариантами поворота, или даже больше (хоть все 360). При движении персонажа игра сама подбирает наиболее подходящий угол поворота из доступных. Анимациям можно дать названия (attack, casting и т.д.) для удобного вызова их в дальнейшем.
Необходимо доработать некоторые возможности для сглаживания анимации (например, чтобы при развороте на 180 градусов персонаж не моментально поворачивался, а реалистично, через промежуточные повороты). Само собой, такие фичи будут опциональными, выбираться в параметрах игры.
Полноценная поддержка всех видов управления
Цель: мышь, клавиатура, геймпад, тачскрин, экранный геймпад.
Статус: В данный момент реализовано управление мышью и с тачскрина.
Система событий на основе ивентов
Цель: Гибкая система событий на основе Событие-Условие-Действие. Например: событие [персонаж вошёл в регион], условие [*вошедший персонаж* это не игрок], действие [убить *вошедшего персонажа*]. На примере видно одно из удобств схемы: в условиях и действиях можно ссылаться на объекты, вызвавшие событие, а не жёстко задавать их, как в мейкере. Такая схема создания событий на деле не сложнее мейкерской, однако делает ГОРАЗДО проще создание в играх очень многих возможностей.
Полноценная реализация поддержки мультиплеера
Цель: Возможность создания как кооперативных (сессионных), так и ммо-игр.
Статус: Была достигнута шикарная скорость синхронизации с помощью вебсокетов и сервера на node.js. Передвижения персонажей разных игроков и ивентов синхронизируются крайне быстро, что позволит делать даже активные игры, не испытывая проблем с лагами.
Если вам интересен мой проект, буду потихоньку рассказать более подробно о разных вещах (со скриншотами и т.д.). Не стесняйтесь, пишите каменты! А пока, чтобы текст не был слишком скучным, вот вам супер-маленькая демка:
>> ИГРАЕТСЯ В БРАУЗЕРЕ, ТЫКАЙ НЕ БАИСЬ <<
В демке можно наблюдать несколько вещей:
1. Адаптация игры под разные разрешения экрана, игра старается выдежать один масштаб игры на любых пропорциях экрана, однако подстраивается иначе, если это невозможно (например, ширина экрана больше чем ширина всей карты).
2. На карте есть попиксельная коллизия и пространственное позиционирование объектов, можно походить за столами, чтобы увидеть это.
3. Есть демонстрация движения и поворотов персонажа, анимированные объекты карты (свечи на стене).
4. Показатель FPS, чтобы оценить как это идёт на ваших калькуляторах и звонилках.