RPF
#1
Отправлено 12 March 2009 - 08:50
#2
Отправлено 12 March 2009 - 11:23
=====================================
Размер названий (папок и файлов, с разделителями "00") может быть вычислен так:
Размер таблицы содержимого - (Количество файлов * 16).
Оффсет начала блока названий:
(Количество файлов * 16)+2048.
(это необходимо делать т.к. в таблице содержимого указывается оффсет названия, "отложенный" от начала блока названий).
В таблице содержимого папки и файлы идут подряд.
Например вот такая структура (в квадратных скобках - количество содержимого):
>root [2] >Папка A. [4] >Файл А.А. >Файл А.Б. >Папка А.В. [5] >Файл А.В.А. >Файл А.В.Б. >Файл А.В.В. >Папка А.В.Г. [2] >Файл А.В.Г.А >Файл А.В.Г.Б >Файл А.В.В. >Файл А.Г. >Папка Б.[1] >Файл Б.А.будет записана так:
root [2] Папка А. [4] Папка Б. [1] Файл А.А. Файл А.Б. Папка А.В.[5] Файл А.Г. Файл А.В.А. Файл А.В.Б. Файл А.В.В. Папка А.В.Г.[2] Файл А.В.В. Файл А.В.Г.А. Файл А.В.Г.Б. Файл Б.А.Не представляю каким циклом можно привести такой неструктурный вид к структурному. IMG3 кажется гораздо более простым чем RPF2.
=====================================
Сообщение отредактировал Dageron: 12 March 2009 - 12:51
#3
Отправлено 21 May 2010 - 02:25
#4
Отправлено 21 May 2010 - 06:08
#5
Отправлено 22 June 2010 - 00:22
Сообщение отредактировал VcSaJen: 22 June 2010 - 01:03
#6
Отправлено 22 June 2010 - 10:58
#7
Отправлено 24 June 2010 - 09:54
- Для папок в третьем (+0x8) поле всегда установлен бит 31 (это и отличает папки от файлов)
- Для раздела файлов в смещении +0x8 не два поля, а одно (RSCType = f8&0xFF; Offset = f8&~0xFF)
- Чтобы распаковать файл с помощью ZLib, нужно добавить к началу файла Word 0xDA78
- Для RSC файлов четвёртое поле (+0xС) содержит 4 байта со смещения +0x8 самого RSC файла
- Четвёртое (+0xC) поле в структуре каталога файла для не-RSC содержит информацию о размере сжатого файла, а также флаг сжатости (30-ый бит). Когда файл не сжат, четвёртое и второе поле равны размеру файла. Когда файл сжат, второе поле равно несжатому размеру файла (округлённое до 4096 вверх), а четвёртое поле равно размеру сжатого файла + установлен 30-й бит.
Там все не совсем так. Я пока разбирался с RPF6, понял общий подход (которы применяется и для IMG).
Если два размера: размер на диске и размер в памяти. (Т.е., сколько надо сдиска прочитать, и сколько места нужно выделить в памяти). Если весь файл загружается постранично (любой RSC), то длина в памяти указывается в страницах (вместе с размерами страниц).
Надо собрать все заметки на эту тему и написать нормальную статью (с форматами/описаниями всех пяти известных RPF)
PS. Чтобы не приписывать к файлу 0xDA78, нужно в вызове inflateInit указывать windowSize = -15.
#8
Отправлено 25 June 2010 - 09:57
@Listener -
СпасибоPS. Чтобы не приписывать к файлу 0xDA78, нужно в вызове inflateInit указывать windowSize = -15.
P.S Последняя версия Open LC - 20090115 ? В паблике только она вроде
Прикрепленные файлы
Сообщение отредактировал VcSaJen: 25 June 2010 - 10:02
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных















