Разработка и ромхакинг > Ромхакинг и программирование
Crash Team Racing
(1/2) > >>
HoRRoR:
Пришла мне тут безумная идея, которую при текущих обстоятельствах осуществить вряд ли является возможным, ибо идея утопическая. Суть такова: переписать Crash Team Racing в виде преимущественно сетевой игры на PC. Вроде Trackmania, Teeworlds, etc. Будет очень весело поиграть, например, ввосьмером на одной карте. А в случае чего можно будет и новых фишек / возможностей добавить.
С этой целью стал я "реверсить" форматы, начал с формата карт. Раскопать пока удалось самую малость - уделяю этому делу не так много времени и внимания, но по-мелочи результаты есть. Пришлось усовершенствовать дебаггер на базе pcsx - добавил некоторые брякпоинты на обмен данными с GPU (а вообще - серьёзно подумывал, не переписать ли там систему брякпоинтов и вьюверов регистров / памяти с нуля, по-человечески, но это пока без особой надобности).
Повторюсь, что целью скорей является интерес, чем стремление к осуществлению идеи. Посему могу забросить всё это дело на любой стадии, просто потеряв этот самый интерес.

Тему, собственно, создал в основном с целью узнать общественное мнение по этому поводу, а заодно и вести своеобразный дневник раскопок, составляя спецификацию форматов и раскрывая особенности игры (эх, как интересно было слушать особенности технической реализации Battle City из уст АнС'а!).

Пока опишу что нарыл. Не технически грамотно, а просто, на словах, ибо пока особенно описывать нечего. В качестве подопытного экспоната взял карту Dingo Canyon, ибо идёт она первой в паке карт. Хранятся карты, как и многие другие данные, в файле BIGFILE.BIG. Формат его чертовски прост - нулевой инт в начале, затем количество файлов, а затем пары unsigned int номер сектора внутри файла / размер файла. Ни имён файлов, ни какой-либо ещё информации нет.
Карта состоит из двух, может более файлов. Один файл - текстуры, которые, я так понимаю, прямоком грузятся в видеопамять без особых преобразований (единственно что - грузятся областями, чтобы не затереть уже присутствующие там данные).
Следующий файл - сама карта, содержащая всю остальную информацию. Правда в память грузится ещё один файл такого же или очень схожего формата - возможно, это фоны и дальние пейзажи, ибо имена объектов преимущественно "big". Ясно станет позже.
Процесс загрузки карты происходит так: в начале файла присутствует размер непосредственно карты, по совместительству некий указатель на "хвост" файла. Ни размер, ни хвост к карте как таковой не принадлежат. Сама карта начинается со смещения 4 сразу после размера. А в хвосте хранится список смещений всех указателей внутри файла карты - сделано это для того, чтобы все относительные указатели (указатели внутри файла) превратить в абсолютные - указатели внутри оперативной памяти. После преобразований эти данные отбрасываются.
Первое, на что я обратил внимание в карте - присутствие именованных объектов. Сами имена не используются, ибо многие из них обрезаны. Но благодаря этому копать стало немного легче. Примерно в начале файла идёт список экземпляров объектов со своими параметрами и указателями на сами объекты, где уже хранятся модели, анимация и другие данные. При этом у некоторых объектов существует несколько моделей - low для отображения вдали (с самым низким качеством), med - для среднего расстояния и hi - для самой близкой дистанции. Сделано это для экономии вычислительных ресурсов.
В данный момент я пытаюсь узнать, в каком формате хранятся вертексы объектов и данные о текстурах. Сами потенциальные вертексы я нашёл, теперь эксперементирую.
Crash Nicker:
Вот что называется "There is no knowledge that is not power" :thumbup:

Сначала читаешь, думаешь, мол, действительно утопическая идея, но хорошая, а дочитываешь до конца - иной реакции нету, только "Крутааа..."
HoRRoR:

--- Цитата: Crash Nicker от 04 Январь 2010, 16:03:36 ---Сначала читаешь, думаешь, мол, действительно утопическая идея, но хорошая

--- Конец цитаты ---
Я думаю, что кроме вьювера карт я вряд ли что сделаю. Благо у PSX довольно интересная и не слишком сложная система 3D-рендеринга.
GtatoR:
Было бы довольно круто переписать её  :)
HoRRoR:
Есть определённые успехи с исследованием моделек объектов:


Модель имеет четыре массива данных: данные о вертексах, координаты вертексов, текстурные данные/координаты и цвета.
Каждый вертекс хранится в четырёхбайтовом значении. Вертексы идут группами, где первые три создают первый полигон, остальные пририсовывают по одному полигону.
Битовая структура такого вертекса примерно такая: sl??kv?? iiiiiiii ccccccct tttttttt, где:
t - индекс текстурных координат/параметров в их массиве (0 - не текстурировать)
c - индекс цвета в массиве цветов
i - индекс записи в стек (на самом деле, если умножить на 8 - можно получить адрес в стеке).
v - не загружать новый вертекс (взять из стека по индексу i)
l - поменять первый вертекс текущего полигона на первый вертекс предыдущего
s - начало блока вертексов
k - говорит откуда грузить цвет - из Scratch Pad'а (куда они предварительно грузятся) или из памяти. В принципе, эта фишка нужна только на PSX для оптимальной производительности.
? - неизвестно

При чтении каждого вертекса, если не стоит флаг v - просто считывается тройка (X,Y,Z) координат из массива, затем координаты записываются в стек по индексу (i). Если же флаг стоит - координаты по этому самому индексу грузятся из стека, а не считываются из массива. Т.е. координат в массиве может быть меньше, чем вертексов.
Далее, если стоит флаг "l", то при прорисовке полигона он строится не из трёх последних считанных координат вертексов, как было ранее, а вместо координат первого вертекса берутся координаты вертекса, который был первым в предыдущей такой тройке.
При встрече флага s начинается новая серия полигонов, при встрече значения 0xFFFFFFFF прорисовка завершается.
HoRRoR:
Есть явный прогресс:


Кто хочет - может полюбоваться на модельки, но с текстурами я пока особо не мучался, так что на большинстве объектов они будут отображаться некорректно (T - отключить текстурирование).
Про Игрок:
Весьма занимательно.  :cool:
Vivi the Black Mage:
Согласен, буду ждать с нетерпением! :wow:
КомандоRR:
Есть успехи?  :wow:
nikita600:
Есть вопрос. Если не ошибаюсь, то какой-то эмуль PS поддерживает сетевую игру. А не проще поиграть по сети на том чуде? :)
А по поводу идеи могу сказать только одно... АФИГЕННА!  :D
Про Игрок:

--- Цитата ---Есть вопрос. Если не ошибаюсь, то какой-то эмуль PS поддерживает сетевую игру. А не проще поиграть по сети на том чуде?
--- Конец цитаты ---
Где только не играл, но по сети 2ой игрок терял управление со старта. Наверное смысл темы был именно в портировании игры на ПК, чтобы поиграть по сети. :cool:
nikita600:

--- Цитата ---Где только не играл, но по сети 2ой игрок терял управление со старта. Наверное смысл темы был именно в портировании игры на ПК, чтобы поиграть по сети.
--- Конец цитаты ---
Тогда вопросов больше нет :)
Cyb3rM4n:
Идею поддерживаю. Есть ещё такая идея - может кто захочт сделать высококполигнальные модельки к игре?
gepar:
Круто, HoRRoR, хорошая идея, только сделать это всё одному сложно будет, но нет ничего невозможного, тем более такому ромхакеру и переводчику со стажем как ты .
limnique:
Проект бы точно пользовался популярностью :)

Cyb3rM4n, при достойной реализации задумки я думаю желающих будет хоть отбавляй.
HoRRoR:

--- Цитата: nikita600 от 31 Март 2010, 21:03:29 ---Есть вопрос. Если не ошибаюсь, то какой-то эмуль PS поддерживает сетевую игру. А не проще поиграть по сети на том чуде? :)

--- Конец цитаты ---
Чуешь разницу между отправкой 60 раз в секунду (при очень хорошем соединении) состояния нажатых клавиш без какой-либо синхронизации (разве что отсылать с определённой периодичностью дамп оперативки 2МБ) и синхронизацию по ключевым моментам?


--- Цитата: Cyb3rM4n от 27 Апрель 2010, 21:11:31 ---Идею поддерживаю. Есть ещё такая идея - может кто захочт сделать высококполигнальные модельки к игре?

--- Конец цитаты ---
Есть Crash Nitro Cap на PS2, по сути ремейк, но с изменённым геймплеем. Естественно, модельки там более лучшего качества.

На самом деле данным проектом сейчас не занимаюсь, т.к. есть куча более важных дел, в т.ч. по учёбе, так что не факт, что к нему вернусь...
nikita600:

--- Цитата: HoRRoR от 28 Апрель 2010, 01:42:30 ---Чуешь разницу между отправкой 60 раз в секунду (при очень хорошем соединении) состояния нажатых клавиш без какой-либо синхронизации (разве что отсылать с определённой периодичностью дамп оперативки 2МБ) и синхронизацию по ключевым моментам?

--- Конец цитаты ---
Чую-чую ;)
NiKiTos:
HoRRoR, крутая идея, слушай, а можешь мне объяснить, пожалуйста поподробней, как ты модели извлек, я просто тоже хотел подобный проект сделать, мне модели только нужны, я хотел мод сделать на гта, с картами из ктр, давно уже мучаюсь, гуглю-гуглю, и наткнулся сюда... Поможешь, может???..
HoRRoR:

--- Цитата ---можешь мне объяснить, пожалуйста поподробней, как ты модели извлек
--- Конец цитаты ---
Установил интимную связь с дебаггером (экзотическую, включая сборку собственного билда), достиг эффекта красных глаз и получил результат.
Формат моделек описан выше, если тебе он о чём-нибудь скажет. Что ещё объяснить - я не знаю, без опыта программирования ты с этими знаниями ничего сделать не сможешь.
NiKiTos:
HoRRoR, ну опыт программирования у меня небольшой есть, ты только объясни, чем ты bigfile.big-то открыл, дальше я сам разберусь...
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии