Какова же цель этого поста? Ответ простой — я ищу однодумцев. Я верю в то, что есть еще много людей, которым нравится славный и добрый олдскул. В этом и вся миссия — писать удовольствия ради что-то маленькое, но вполне функциональное, платформу для «приставочных» игрушек в стиле 8/16 бит.
Главная особенность, отличающая tengine от сотен подобных поделок — не совсем стандартная идеология:
- архитектура проекта делает упор на минимизацию использования динамической памяти. Если память и выделяется, она выделяется исключительно на инициализации подсистем
- использовать динамическую память нужно так, как будто не существует операционной системы, постоянно помнить о фрагментации. Удаление памяти происходит в строго обратном порядке создания (за этом следит простой механизм контроля удаляемых указателей)
- использование сторонних библиотек сведено к минимуму и должно быть аргументировано, зачастую это потенциальный источник фрагментации памяти
- игровая сцена представляет собою готовую для использования память, сгенерированная редактором уровней
- работа с объектами сцены игры ведется исключительно через идентификаторы, динамически создать объект невозможно
- использование fixed point вместо float
- мультиплатформенность
- официальный язык проекта — си
Изначально я все это писал под nintendo ds, мою любимую игровую платформу. Но времена меняются и пришлось все переместить в более популярный мир технологий. Так появилась ветка для андроида, которая и стала в последствии основной. win32 версия играет более отладочную роль. По задумке игра пишется и отлаживается на win32, а потом компилится на другие платформы (все это конечно же условно, на win32 весь функционал работает полноценно). С появлением одного очень хорошего энтузиаста, проект обрел еще и freeBSD платформу, за что ему огромное спасибо. В планах все это перенести и на iOS. Хоть nintendo ds уже и не поддерживается, я умышленно не убрал платформенный код под ключом препроцессора из проекта. Также остались некоторые нинтендо-специфические архитектурные особенности, такие как поддержка нескольких экранов и логических слоев отрисовки. Все это описано в скудненькой, но все же документации.
Сейчас tengine представляет собой:
- (почти) готовый мультиплатформенных функционал для android NDK, win32, freeBSD (был еще функционал для nitro-sdk (nintendo ds), но я решил не продолжать развитие этой ветки из-за нехватки времени, вероятность, что кому-то сейчас интересен nitro очень мала)
- использование памяти по принципу frame allocator (удаление памяти в строго обратном порядке созданию)
- архитектурное ограничение создания динамических объектов, что позволило отказаться от использования скриптовых языков
- использование openGL es 1.1 для рендеринга
- использование openAL (openSL es для android NDK) для звука
- поддержка мультитача, dpad, клавиатуры
- поддержка применения базовых афинных преобразований для кадров анимации игровых объектов
- возможность попиксельной проверки границ игрового объекта сложной формы
- поддержка многопоточности на основе pthread (подгрузка потоковой анимации, работа с файлами)
- функционал для работы с сетью на начальной стадии
- (примитивная) система партиклов
- конвертер графических ресурсов (r5g5b5a1 основной и r8g8b8a8 вспомогательный)
- простой интерфейс для работы с игровыми объектами: позиции, свойства, состояния
- события (окончание анимации, достижение ноды и т.д.)
- поддержка тайловой карты
- поддержка полупрозрачности
- поддержка логики путевых нод (по которым могут двигаться объекты)
- (частично реализованная) система коллижн-линий, с помощью которых можно задавать границы или места «проходимости» под произвольным углом
- эмулятор для win32/freeBSD, упрощающий разработку и отладку приложения
- базовая документация
В дополнение ко всему этому есть подсистема gui, являющаяся надстройкой над tengine. Основная идея: все элементы gui — обычные игровые объекты, которые при инициализации обретают уже предустановленный функционал элементов gui таких как, например, «кнопка». Достаточно зарегистрировать любой игровой объект в gui контейнере и указать какое поведение от него ожидается. Все остальное надстройка берет на себя.
Редактор уровней (me3) представляет собою утилиту для создания «уровней» для tengine и включает в себя:
- подсистему работы с графическими ресурсами
- подсистему создания сложной покадровой анимации, включая коллижн-зоны, пользовательские события, точки прикрепления (для динамического прикрепления других игровых объектов, например оружие к руке)
- подсистему создания тайловой карты бэкграунда
- подсистему триггеров, с помощью которых можно менять свойства объектов по определенным условиям
- подсистему путевых нод
- подсистему создания коллижн-линий
- подсистему создания логических состояний объектов, завязывание их на анимацию
- подсистему создания свойств объектов и работы с ними
- менеджер объектов
- отладка готовой карты, отслеживание работы триггеров, пользовательских событий
- поддержка шрифтов, текстовых полей (текстовые объекты), внутренний текстовый редактор
- поддержка функционала для локализации текстов на разные языки
- создание готовых бинарных файлов с данными для tengine, экспорт в xml
Разобраться с редактором немного трудновато поначалу, я его писал специально под своего знакомого геймдизайнера. Но есть примеры в папке samples а также интерфейс на русском, который, как по мне, довольно интуитивен. Документацию, к сожалению, пока не осилил написать.
Кому все еще интересно, все доступно на https://bitbucket.org/pascualle/tengine
Как бонус, совсем не давно спортировал verlet библиотечку, описанную в посте habrahabr.ru/post/178135/. Пока она стоит немного особнячком, но уже проверена на работоспособность (смотрите пример в samples/spider)
ссылка на оригинал статьи http://habrahabr.ru/post/179839/
Добавить комментарий