Название: OpenLara
Жанр: Action-adventure, puzzle-platform
Движок: С++ / OpenGL
Платформа: Windows, Linux, Mac OS X, WebGL (Android, iOS, RaspberryPi в планах)
Исходный код: GitHub / задачи
Видео: youtube
Демо: WebGL версия (обновляется постоянно)
Всем привет, после просмотра истории серии игр Tomb Raider в июле 2016 года, движимый ностальгией и любопытством веду разработку движка с целью повторить механику классических игр серии Tomb Raider (1-5) с некоторыми графическими и геймплейными плюшками. Проект разрабатывается в свободное от работы время и никаких коммерческих целей не преследует.
Контент используется оригинальный без изменений.
На данный момент проект разрабатывается уже 4 месяца и находится в состоянии alpha 1. По плану до весны выйдет ещё две альфы с периодичностью в месяц.
Есть такие вопросы:
Panzerschrek[CN]
> Открыты ли какие-то исходники у оригинальной игры?
Нет, но есть дизассемблер
> Используются ли наработки других проектов?
Меня консультируют ребята из аналогичного проекта OpenTomb
> Откуда известны форматы данных оригинальной игры - текстур, уровней, моделей и т. д.?
В 1999 году в сети появился анонимный документ частично описывающий форматы данных. Его со временем развило сообщество.
> Откуда берутся параметры игровой логики - скорости врагов, урон оружия и т. д?
Скорость и ускорение хранится в параметрах самой анимации. Урон худо-бедно из асм листинга достаётся.
> Насколько вообще игровая логика соответствует оригиналу?
Целью является полное воссоздание, так что в перспективе все недочёты будут пофикшены.
Вау. Какое же это извращенство.Я до сих пор завидую людям которые способны достать из скомпилированной игры исходник.
У оригинальной игры движок на с++ ?
endeavour_pr
Чистый C с примесью ассемблера, насколько я понимаю.
Напомнило
Хотя если это пойдёт по идейному пути OpenXcoM'а, то было бы интересно поглядеть.
У этой игры был крутой движок. Благодаря ему маленькая команда смогла сделать ААА игру за не большой срок.
Мне Лара больше всего вот этим запомнилась)
Глянул код - а там всё в .h файлах.
XProger, Как так?
Panzerschrek[CN]
> Глянул код - а там всё в .h файлах.
> XProger, Как так?
+1.
XProger
Не хочется в коде копаться. Расскажи как уровни устроены с алгоритмической точки зрения. Почему они из больших кубов устроены при этом в каждом кубе много полигонов.
нетривиальная задротская работа) круть.
только велосипед же. причем конкретной модели
amd.fx6100
> Почему они из больших кубов устроены при этом в каждом кубе много полигонов.
BSP-разбиение, может быть?
а может разрушаемость. правда не припомню это в томбрайдер
amd.fx6100
Абсолютно все модели, звуки, анимации, стейты, текстуры, иерархии костей, враги, объекты и главная героиня и т.д. находятся в одном файле уровня. Т.е. для работы игры достаточно файла LEVEL*.PHD.
Уровень разбит на комнаты, каждая комната разбита на ячейки размером 1024х1024. В проходах между комнатами расставлены порталы которые используются для отсечения, соответственно каждая комната знает какие порталы в ней находятся и куда ведут.
В свою очередь, каждая ячейка может хранить в себе дополнительную информацию: высоту пола и потолка, значения уклонов пола и потолка, индекс комнаты над ячейкой и под ячейкой, список команд тригера и портальный переход в другую комнату. Последний как раз отвечает за переходы из комнаты в комнату и сделан благодаря тому, что комнаты идут с нахлёстом. Т.е. переходя на такой переход игрок переносится в комнату, для которой перход обратно находится в предыдущей клетке %)
Все эти данные используются в основном для расчёта коллизий, минимальный шаг высоты пола равен четверти ячейки (256). Визуальная геометрия хранится отдельно и никак к ячейкам не привязана. Индексированная геометрия состоит из квадов и треугольников, причём для моделей они могут быть не отекстурены (задан только цвет).
Из плюсов такой структуры: в игре существуют большие блоки 1024^3 которые можно двигать, они по факту подменяют высоту пола. Двери обычно расположены на границе порталов, в закрытом состоянии ставят за собой невидимую стену, и такую же стену ставят в комнате которую получают из ячейки за дверью, выходит своего рода 4D пространство, когда наличие стены зависит от того с какой стороны подошёл к двери 8) Благодаря портальной системе в TR3 смогли сделать НЛО небольшое снаружи, огромное внутри.
upd: в нулевой пост добавил спойлер с забавными багами в процессе разработки :)
XProger
Глянул исходники.
#ifdef __APPLE__ extern char *contentPath; int len = strlen(contentPath); strcat( contentPath, name); f = fopen( contentPath, "rb"); contentPath[len] = '\0'; #else
что за contentPath ? можно же намного проще через _NSGetExecutablePath получить пусть к исполняемому файлу, потом уже получать путь к папкам, это отлично работает для IOS/Mac OS X