Небольшой Мультиплатформенный 2D-Движок (Android/Ios/Win32/Nix/Kolibrios/Web(Emscripten))

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

Какова цель этого поста? Ответ прост – ищу единомышленников.

Я верю, что есть еще много людей, которым нравится старое доброе добро.

В этом и вся миссия — написать ради развлечения ради чего-то небольшого, но вполне функционального, платформы для «консольных» игрушек в 8/16-битном стиле.

tengine ДЕМО-игра (веб-версия) управление: клавиши со стрелками, Ctrl. Полная концовка.

Главная особенность, отличающая Тенгине от сотен подобных поделок, — это не совсем стандартная идеология:

  • В архитектуре проекта особое внимание уделяется минимизации использования динамической памяти.

    Если память выделена, то она выделяется исключительно для инициализации подсистемы.

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

    Память удаляется строго в порядке, обратном созданию (за этим следит простой механизм контроля удаленных указателей)

  • использование сторонних библиотек сведено к минимуму и должно быть оправдано; это часто является потенциальным источником фрагментации памяти.

  • игровая сцена — это готовая к использованию память, сгенерированная редактором уровней
  • работа с объектами игровой сцены осуществляется исключительно через идентификаторы; невозможно динамически создать объект
  • использование фиксированной точки вместо числа с плавающей запятой
  • мультиплатформенность
  • Официальный язык проекта — C.
Изначально я писал все это для Nintendo ds, моей любимой игровой платформы.

Но времена меняются и все пришлось перенести в более популярный мир технологий.

Так появилась ветка для Android, которая впоследствии стала основной.

Версия Win32 играет большую роль в отладке.

По задумке игра написана и отлажена на win32, а затем скомпилирована на других платформах (все это, конечно, условно, весь функционал полностью работает на win32).

С появлением одного очень хорошего энтузиаста проект обзавелся и платформой NIX, за что ему огромное спасибо.

Хотя Nintendo ds больше не поддерживается, я сознательно не стал удалять из проекта код платформы под ключом препроцессора.

Также остались некоторые специфичные для Nintendo архитектурные особенности, такие как поддержка нескольких экранов и слоев логического рендеринга.

Все это описано в скудной, но все же документации.

Сейчас тенгине это:

  • готовый мультиплатформенный функционал для android ndk, ios, win32, nix, kolibriOS, Emscripten (также был функционал для nitro-sdk (Nintendo ds), но я решил не продолжать разработку этой ветки из-за нехватки времени, она вполне вероятно, что кому-то сейчас будет интересна нитро очень маленькая)
  • браузерная версия js/html на основе Emscripten ( https://github.com/kripken/emscripten/wiki ), хорошая производительность даже на ie11
  • использование памяти по принципу распределителя кадров (удаление памяти в строго обратном порядке создания)
  • архитектурное ограничение на создание динамических объектов, позволившее отказаться от использования скриптовых языков
  • использование openGL es 1.x/2.0, а также самописного блиттера для рендеринга
  • использование openAL (openSL es для Android NDK) для звука
  • поддержка мультитач, dpad, клавиатуры
  • поддержка многопоточности на основе pthread (загрузка потоковой анимации, работа с файлами, звуком)
  • функционал для работы с сетью на начальном этапе
  • (примитивная) система частиц
  • преобразователь графических ресурсов (основной r5g5b5a1 и вспомогательный r8g8b8a8)
  • простой интерфейс для работы с игровыми объектами: позициями, свойствами, состояниями
  • события (окончание анимации, достижение узла и т. д.)
  • поддержка применения базовых аффинных преобразований к кадрам анимации игровых объектов
  • возможность попиксельной проверки границ игрового объекта сложной формы
  • поддержка тайловой карты
  • поддержка полупрозрачности
  • поддержка смешивания данных изображения с указанным цветом
  • поддержка логики узлов пути (по которым могут перемещаться объекты)
  • (частично реализована) система линий столкновения, с помощью которой можно задать границы или места «проходимости» под произвольным углом
  • эмулятор для win32/nix, упрощающий разработку и отладку приложений
  • основная документация
Помимо всего этого есть подсистема gui, являющаяся дополнением к tengine. Основная идея: все элементы gui — это обычные игровые объекты, которые при инициализации приобретают предустановленный функционал элементов gui, таких как, например, «кнопка».

Достаточно зарегистрировать любой игровой объект в gui-контейнере и указать, какое поведение от него ожидается.

Обо всем остальном позаботится дополнение.

Редактор уровней (me3) — это утилита для создания «уровней» для Tengine, включающая в себя:

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

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

К сожалению, документацию написать пока не могу.

Для тех, кому еще интересно, все доступно на https://bitbucket.org/pascualle/tengine В качестве бонуса я давно не занимаюсь спортом.

верлет библиотека описанная в посте habrahabr.ru/post/178135 .

Пока стоит немного особняком, но уже проверен на работоспособность (см.

пример в семплах/пауке) Читайте также небольшой туториал (внимание, в нем нет картинок!) «Создание небольшой игры с помощью tengine» habrahabr.ru/post/180443 Теги: #C++ #tengine #verlet #openal #Opensl es #OpenGL ES #win32 #Android #NDK #iOS #*nix #KolibriOS #emscripten #multiplatform #gamedev #Разработка игр

Вместе с данным постом часто просматривают: