Пришла мне тут безумная идея, которую при текущих обстоятельствах осуществить вряд ли является возможным, ибо идея утопическая. Суть такова: переписать
Crash Team Racing в виде преимущественно сетевой игры на
PC. Вроде Trackmania, Teeworlds, etc. Будет очень весело поиграть, например, ввосьмером на одной карте. А в случае чего можно будет и новых фишек / возможностей добавить.
С этой целью стал я "реверсить" форматы, начал с формата карт. Раскопать пока удалось самую малость - уделяю этому делу не так много времени и внимания, но по-мелочи результаты есть. Пришлось усовершенствовать
дебаггер на базе pcsx - добавил некоторые брякпоинты на обмен данными с GPU (а вообще - серьёзно подумывал, не переписать ли там систему брякпоинтов и вьюверов регистров / памяти с нуля, по-человечески, но это пока без особой надобности).
Повторюсь, что целью скорей является интерес, чем стремление к осуществлению идеи. Посему могу забросить всё это дело на любой стадии, просто потеряв этот самый интерес.
Тему, собственно, создал в основном с целью узнать общественное мнение по этому поводу, а заодно и вести своеобразный дневник раскопок, составляя спецификацию форматов и раскрывая особенности игры (эх, как интересно было слушать особенности технической реализации
Battle City из уст
АнС'а!).
Пока опишу что нарыл. Не технически грамотно, а просто, на словах, ибо пока особенно описывать нечего. В качестве подопытного экспоната взял карту
Dingo Canyon, ибо идёт она первой в паке карт. Хранятся карты, как и многие другие данные, в файле
BIGFILE.BIG. Формат его чертовски прост - нулевой инт в начале, затем количество файлов, а затем пары unsigned int номер сектора внутри файла / размер файла. Ни имён файлов, ни какой-либо ещё информации нет.
Карта состоит из двух, может более файлов. Один файл - текстуры, которые, я так понимаю, прямоком грузятся в видеопамять без особых преобразований (единственно что - грузятся областями, чтобы не затереть уже присутствующие там данные).
Следующий файл - сама карта, содержащая всю остальную информацию. Правда в память грузится ещё один файл такого же или очень схожего формата - возможно, это фоны и дальние пейзажи, ибо имена объектов преимущественно "big". Ясно станет позже.
Процесс загрузки карты происходит так: в начале файла присутствует размер непосредственно карты, по совместительству некий указатель на "хвост" файла. Ни размер, ни хвост к карте как таковой не принадлежат. Сама карта начинается со смещения 4 сразу после размера. А в хвосте хранится список смещений всех указателей внутри файла карты - сделано это для того, чтобы все относительные указатели (указатели внутри файла) превратить в абсолютные - указатели внутри оперативной памяти. После преобразований эти данные отбрасываются.
Первое, на что я обратил внимание в карте - присутствие именованных объектов. Сами имена не используются, ибо многие из них обрезаны. Но благодаря этому копать стало немного легче. Примерно в начале файла идёт список экземпляров объектов со своими параметрами и указателями на сами объекты, где уже хранятся модели, анимация и другие данные. При этом у некоторых объектов существует несколько моделей - low для отображения вдали (с самым низким качеством), med - для среднего расстояния и hi - для самой близкой дистанции. Сделано это для экономии вычислительных ресурсов.
В данный момент я пытаюсь узнать, в каком формате хранятся вертексы объектов и данные о текстурах. Сами потенциальные вертексы я нашёл, теперь эксперементирую.