| Разработка и ромхакинг > Ромхакинг и программирование |
| 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-то открыл, дальше я сам разберусь... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |