С этого дня решил делиться информацией о своем хобби, тем, чем я занимаюсь в свободное от работы время, о своем долгоиграющем проекте под названием "tengine".
Немного истории, вернее о себе: первую свою игру я написал где-то так в 1991 году, это была простенькая, но все же игра под названием «baraban» для zx-spectrum. С этого момента мне надоело лазить с помощью copy-copy по чужим играм и выискивать места, где можно вставить больше жизней…
Серьезно все началось в 2003 году, когда я окончательно и бесповоротно решил связать свою жизнь с gamedev'ом. Днем я ваял скучные sql запросы, писал корпоративный софт, отчеты и прочее, но вечерами…
Сначала был brew, потом j2me, потом смена работы, потом снова j2me и brew как junior, потом renderware, directx, win32, sony, nitendo, xbox уже как более матерый девелопер…
Вечерами я делал то, что было мне интересно, а не то, за что платили. Так появился сначала tengine + me на j2me, выпущено порядка 5 коммерческих игр. Спустя некоторое время, после паузы, я опять вернулся к своим наработкам, перевел все на с/с++, начал совершенствовать код эдитора (me) и сам tengine.
Сейчас tengine представляет собой:
- эмулятор для win32, упрощающий разработку и отладку приложения
- (почти) готовый кроссплатформенных функционал для nintendo ds (при условии, что есть nitro sdk), android и win32
- использование памяти по принципу frame allocator, делающие невозможными memory leaks, архитектурное ограничение создания динамических объектов, что позволило отказаться от использования скриптовых языков
- два альтернативных взаимозаменяющих рендеринга: openGL es 1.1 и самописный кастомный блиттер
- поддержка тайловой карты бэкграундов с возможностью присвоению группе тайлов неких свойств
- (частично реализованная )система коллижн-линий, с помощью которых можно задавать границы или места «проходимости» под произвольным углом
- поддержка полупрозрачности
- поддержка путевых нод (по которым могут двигаться объекты)
- система эвентов (окончание анимации, достижение ноды и т.д.)
- (примитивная) система партиклов
- поддержка мультитача, dpad, клавиатуры
- поддержка мультипоточности pthread (система jobs’ов -task‘ов, на данном этапе используется только для подгрузки
текстур в стримовой анимации)
- поддержка абстракций tengine «экран» (render screen) и «слой» (layer). «Экран» представляет собой абстракцию физического экрана (например 1 или 2 экрана (bg2, bg3) nintendo ds), а «слой» -- инстанс загруженного в память игрового уровня, причем на один «экран», можно завязать (рендерить) один или несколько «слоев» (например игровой уровень и hud)
- простой интерфейс для работы с игровыми объектами: позиции, свойства, состояния
- собственный формат графических ресурсов, r5g5b5a1 (основной) и r8g8b8a8 (вспомогательный)
- конвертор ресурсов с 256i/bpp24/bpp32 BMP или PNG, оптимизация работы с индексированным цветом в кастомном рендеринге
Эдитор (me3) представляет собою утилиту для создания «уровней» для tengine и включает в себя:
- подсистему работы с графическими ресурсами
- подсистему создания сложной покадровой анимации, включая коллижн-зоны, пользовательские события, точки прикрепления (для динамического прикрепления других игровых объектов, например оружие к руке)
- подсистему создания тайловой карты бэкграунда
- подсистему триггеров, с помощью которых можно менять свойства объектов по определенным условиям
- подсистему путевых нод
- подсистему создания коллижн-линий
- подсистему создания логических состояний объектов, завязывание их на анимацию
- подсистему создания свойств объектов и работы с ними
- менеджер объектов
- превью готовой карты, отслеживание работы триггеров, пользовательских событий
- поддержка шрифтов, текстовых полей (текстовые объекты), внутренний текстовый редактор
- поддержка мультилэнгвиджа
- создание готовых файлов с данными для tengine, экспорт в xml
Не все еще идеально, не все еще работает как я хочу, но я работаю. И получаю удовольствие от этого, потому для меня это хобби. Так что, кому интересно, читайте...