Перейти к содержимому


Фотография

формат *.COL (Collision File)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 OLEGator2

OLEGator2

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 02 June 2010 - 06:26

Здравствуйте, Интересует пока формат первой версии.
почитал описание формата COL на англ. вики _http://www.gtamodding.com/index.php?title=Collision_File
из описания ясно, что архив из нескольких файлов не имеет собственного заголовка, а файлы тупо склеены друг с другом.
Как лучше подойти к этому архиву, чтобы написать простой редактор архива (добавление, удаление, замена файлов)?
Нужно сформировать массив из имёни, размера и смещения.
Структура заголовка:
Первые 4 байта: 43 4F 4C 4C версия формата (COLL - означает первую версию)
Следущие 4 байта: 28 03 00 00 размер файла, начиная после этих 8 байт. Значение следует перевернуть - 00 00 03 28 и преобразовать в десятичное значение - 808 байт + 8 байт заголовка = 816 байт
Теперь 20 байт: 61 64 6D 69 72 61 6C 00 40 67 2F 00 17 39 40 00 40 67 2F 00 имя файла, где байты до первого фрагмента 00 собственно имя - admiral, а остальнео мусор (спасибо за подсказку Chipsman).


--------- updated -------------
Вроде получилось.
Изображение
И так я открываю файл архива для чтения в бинарном режиме, читаю первые 4 байта, проверяю формат. Возвращаюсь опять на начало файла, читаю текущее смешение (позицию), читаю 28 байт, из них формирую размер и имя, складываю текущую позицию с размером и перехожу на это смещение, чтоб читать следующий файл в цикле.

While 1 ; цикл заполняет окно программы данными
;--------

$d_offset = FileGetPos ($o_vehicles_col); текущая позиция на файле в десятичном виде
$offset = Hex ($d_offset) ; смещение в HEX виде
;--------

$b_vehicles_col = FileRead ($o_vehicles_col, 28) ; читаем весь заголовок 4+4+20 байт
If @error = -1 Then ExitLoop ; если достигнут конец файла Выход из цикла
;--------

$size = BinaryMid ($b_vehicles_col, 5 , 4);размер файла в архиве в байтах
$size = Hex (_rotate($size)); переворачиваем байты и преобразуем в HEX
$size = Dec ($size)+ 8 ; преобразуем в десятичное значение и прибавляем 8 байт заголовка
;---------

$filename = BinaryMid ($b_vehicles_col, 9 , 20); читаем 20 байта (имя файла в архиве)
$filename = _GetName($filename)
;---------
GUICtrlCreateListViewItem ($filename&"|"&$size&"|"&$offset, $ListView1); заносим данные в ГУИ
FileSetPos ($o_vehicles_col, $d_offset+$size, $FILE_BEGIN); меняем позицию на файле
WEnd


Сообщение отредактировал OLEGator2: 02 June 2010 - 07:19


#2 XEPOMAHT007

XEPOMAHT007

    Активный участник

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 02 June 2010 - 13:21

Загрузчик номерочков и оффсетов к ним в формате COL2 так же не сложно написать (очень похоже, что в COL2 вместо имён моделей используются уникальные идентификаторы - ID), но пока что дальше заголовка информацию распознать не получается (формат COL для меня такой же не понятный, как и COL2).

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#3 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 02 June 2010 - 13:44

http://public.sannyb...ll_20090822.rar

В ogModels.h и ogModels.cpp есть полный работающий ридер COL3.
ридеры COLL и COL2 получаются из него выкидыванием лишнего
You think your day was surreal? Try mine.

#4 OLEGator2

OLEGator2

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 02 June 2010 - 16:22

очень интересно: А что это за такая GTA_DLL ? Что-то я нигде о ней информации не нашёл. Она является отдельным функциональным модулем, который можно использовать в своих программах или она часть какого-то проекта? Если первое, то есть ли в скомпиленом виде и документация как ей пользоваться?

#5 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 02 June 2010 - 16:44

gta_dll - это часть проекта openSanAndreas. Смысл проекта - реверсинг SA для понимания происходящих процессов. По ходу работы, код переписывался и подменял собой оригинальный. Т.е., если скомпилировать содержимое архива, получится vorbisFile.dll, которую можно положить в каталог с игрой, переименовав оригинальную в vorbisHooked.dll. Чтобы это скомпилировать, нужна VS2003 или выше (новые версии, от мая этого года и новее, требуют либо VS2010, либо пересоздания проекта). Дальше, можно заменять игровой код своим, добавлять трассировку и делать прочие полезные вещи. Проект был приостановлен с выходом IV. В свежей, еще не выложенной версии добавлено некоторое количество кода, выдернутого из IV (в основном, всякие AI-шные дела). Если все в жизни будет нормально (с работой, здоровьем, свободным временем, наконец), есть надежда, что это плавно перерастет в проект openSandbox (вместе с отреверсенным из IV, MC:LA и RDR)
You think your day was surreal? Try mine.

#6 OLEGator2

OLEGator2

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 02 June 2010 - 17:25

Спасибо за информацию. Желаю успеха!

#7 bykin

bykin

    Участник

  • Пользователи
  • PipPip
  • 19 сообщений

Отправлено 27 August 2010 - 14:16

когда твоя программа выйдет?




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных