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


Внимание!

Это форум по извлечению ресурсов из игр: музыки, звуков, текстур, 3D-моделей...
Перед поиском ответов на форуме, рекомендуется ознакомиться с основным сайтом EXTRACTOR.ru!
[ Прочтите внимательно - правила создания тем и ответа в них ]
Все вопросы по запуску игр задавайте в другом месте: Установка и запуск игр.


Фотография

Warhammer 40k Dawn Of War


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

#21 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 08 May 2007 - 21:44

А без подсчета хешей игра принимает архивы? Попробуй разный порядок байтов, может поможет.
Вот что люди с Relic Forums пишут про подсчет md5:
Цитата

MD5 Checksums

Note: the full seed strings are not given here due to possible legal reasons, to find out how to get the full seed string, follow the link attached to the seed string.


Both MD5 checksums have a seed string which is given to the MD5 algorithm before any data. Even though the seed strings look like MD5 checksums, pass them to the algorithm as NULL terminated ASCII string. The header MD5 is an MD5 of the seed string “DFC9nnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn” followed by the data from byte 180 and of length specified by the data header size:
Код
MD5Context md5HeaderKey;
MD5InitKey(&md5HeaderKey, "DFC9nnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn");
pStream->VSeek(180, IFileStore::IStream::SL_Root);
char* pHeader = new char[m_SgaHeader.iDataHeaderSize];
pStream->VRead(1, m_SgaHeader.iDataHeaderSize, pHeader);
MD5Update(&md5HeaderKey, (unsigned char*)pHeader, m_SgaHeader.iDataHeaderSize);
delete[] pHeader;
unsigned char pMD5Main[16];
MD5Final(pMD5Main, &md5HeaderKey);

The data MD5 is an MD5 of the seed string “E015nnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn” followed by the data from byte 180 to the end of the file:
Код

MD5Context md5DataKey;
MD5InitKey(&md5DataKey, "E015nnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn");
pStream->VSeek(0, IFileStore::IStream::SL_End);
long iDataLength = pStream->VTell() - 180;
pStream->VSeek(180, IFileStore::IStream::SL_Root);
char* pDataFull = new char[1048576];
while(iDataLength)
{
 long iToRead = (iDataLength < 1048576) ? iDataLength : 1048576;
 pStream->VRead(1, iToRead, pDataFull);
 MD5Update(&md5DataKey, (unsigned char*)pDataFull, iToRead);
 iDataLength -= iToRead;
}
delete[] pDataFull;
unsigned char pMD5Tool[16];
MD5Final(pMD5Tool, &md5DataKey);



#22 Xasha666

Xasha666

    Ефрейтор

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

Отправлено 09 May 2007 - 09:54

Да, мне оттуда уже помогли.
Плагин готов, работает со всеми описанными в спецификации версиями.
Есть окошко настроек для выбора версии и сжатия.
Но тестировался плагин только на Dawn of War.

Скачать можно здесь http://ex-ve.ucoz.ru/files/xsga.rar
Если хотите, можете выложить на этом сайте.

jTommy, спасибо за спецификацию, но там надо поправить некоторые вещи. smile.gif

Код

   Signature : array[0..07] of ANSIChar; // Сигнатура, всегда равна "_ARCHIVE"
   Version   : cardinal;                 // Версия архива
   HeadMD5   : array[0..15] of byte;     // MD5 хеш данных заголовка
   ArchName  : array[0..63] of WideChar; // Имя архива (Unicode)
   DataMD5   : array[0..15] of byte;     // MD5 хеш всего архива
   HeadSize  : cardinal;                 // Размер всех заголовков и TOC'ов
   DataOffset: cardinal;                 // Смещение данных первого файла

Сначала должно идти DataMD5, а потом HeadMD5 - это во всех версиях. В первой версии только DataMD5.

Код

 TSGATOCInfo = packed record
   RootDir   : array[0..63] of ANSIChar; // Имя корневого каталога TOC (ASCIIZ строка)
   TOCName   : array[0..63] of ANSIChar; // Имя TOC (ASCIIZ строка)
   FirstDir  : word;                     // Номер первого каталога, относящегося к этой TOC
   LastDir   : word;                     // Номер последнего каталога, относящегося к этой TOC
   FirstFile : word;                     // Номер первого файла, относящегося к этой TOC
   LastFile  : word;                     // Номер последнего файла, относящегося к этой TOC
   Unknown   : word;                     // Неизвестно (всегда равно 0x00)
 end;

Здесь LastDir и LastFile тоже - 1

Код

 TSGAFileInfoV4 = packed record
   NameOffset: cardinal; // Смещение имени файла [+TSGAHeader.NamesOffset]
   DataOffset: cardinal; // Смещение данных файла [+TSGAMainHeader.DataOffset]
   PackSize  : cardinal; // Размер сжатых данных
   DataSize  : cardinal; // Размер распакованых данных
   CRC32     : cardinal; // Возможно CRC-32 или хеш-значение
   IsPacked  : word;     // Флаг компрессии
 end;

Здесь не CRC32, а время модификации файла FileTime. Но формат нестандартный.

Код

 Для версий 1 и 2 (IC, HW2 и DoW):
 TSGAFileDataV2 = packed record
   Name   : array[0..255] of ANSIChar; // Имя файла (без пути)
   Unknown: int64;                     // Две CRC-32 или хеш-значение
   Data   : pointer;                   // Данные файла
 end;

Вместо "Unknown: int64" должно быть:
FileTime: Cardinal; //Время модификации файла, тоже в нестандартном формате.
CRC32b: Cardinal; //Контрольная сумма (именно CRC32b) файла в распакованном виде

Код

 Для версии 4 (CoH):
 TSGAFileDataV4 = packed record
   Name   : array[0..255] of ANSIChar; // Имя файла (без пути)
   Unknown: cardinal;                  // CRC-32 или хеш-значение
   Data   : pointer;                   // Данные файла
 end;

Здесь тоже вместо Unknowm должно быть CRC32b.

#23 Xasha666

Xasha666

    Ефрейтор

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

Отправлено 10 May 2007 - 15:15

Ох. Всё таки не так как надо работает упаковка - когда много папок в архиве, появляются баги. Буду исправлять.

#24 Xasha666

Xasha666

    Ефрейтор

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

Отправлено 11 May 2007 - 11:32

Вот теперь, надеюсь, всё правильно:
http://ex-ve.ucoz.ru...ga1.0.0.120.rar

#25 Hunter

Hunter

    Прапорщик

  • Пользователи
  • 128 сообщений
  • Пол:Мужчина
  • Город:Омск

Отправлено 20 May 2007 - 15:47

JTommy, можешь сделать автоматический конвертер (типа to waw?)
А то у меня руки не оттуда растут smile.gif
А вообще-то просто времени нет разбираться - скоро защита диплома, а у меня он готов процентов на 70 cool.gif

#26 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 20 May 2007 - 18:35

Xasha666, извини, что долго не отвечал. Спасибо за исправления в спецификации, но есть вопросы.

Цитата
Сначала должно идти DataMD5, а потом HeadMD5 - это во всех версиях. В первой версии только DataMD5.
Это точно? Потому что на форуме RelicNews было наоборот. Кстати, ты справился с подсчетом хеш-значений?

Цитата
Вместо "Unknown: int64" должно быть:
FileTime: Cardinal; //Время модификации файла, тоже в нестандартном формате.
CRC32b: Cardinal; //Контрольная сумма (именно CRC32b) файла в распакованном виде
А что значит "b" и известно ли тебе начальное значение при подсчете crc32?

Hunter, всмысле "автоматический конвертер"?


#27 Hunter

Hunter

    Прапорщик

  • Пользователи
  • 128 сообщений
  • Пол:Мужчина
  • Город:Омск

Отправлено 20 May 2007 - 18:45

В прямом (или не очень)!! To Wav Кто делал? Там файлик bat`овский был: кликаешь по нему и прога конвертит всё, что может! huh.gif Или нет? В общем файл назывался convAll.bat Для какой именно игры я его использовал не помню, но то что с DOS`ом не мучался эт точно. ph34r.gif
Вопрос не по теме: как создать бат файл с помощью которого можно было бы запустить 2 приложения: сначала одно, потом другое (без закрытия при этом первого)? А то у меня возникла небольшая проблемка wink.gif

#28 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 20 May 2007 - 19:48

Hunter:
Цитата
To Wav Кто делал? Там файлик bat`овский был: кликаешь по нему и прога конвертит всё, что может!
Его Xplorer делал. Я надеюсь ты не хочешь таким образом запускать плагин товарища Xasha666? smile.gif

Вообщем иди на мой сайт (вон кнопка внизу этого сообщения), там найдешь распаковщик SGA архивов.

По поводу второго вопроса ничего не скажу - не знаю.


#29 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 21 May 2007 - 17:15

Hunter!
Читай справку по команде "start" и будет тебе счастье:
start /?

#30 Hunter

Hunter

    Прапорщик

  • Пользователи
  • 128 сообщений
  • Пол:Мужчина
  • Город:Омск

Отправлено 24 May 2007 - 19:14

Я же только музыку хочу конвертнуть, чтоб слушать можно было!!! С SGA разобрался довольно давно, Я музыку конвертнуть не могу!!! angry.gif Потому, как программированием не увлекался, а из DOS`а могу только хард форматнуть, либо дефраг сделть!!! И специальность уменя с програмированием не пересекается sad.gif

#31 Xasha666

Xasha666

    Ефрейтор

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

Отправлено 25 May 2007 - 02:22

Цитата
Цитата
Сначала должно идти DataMD5, а потом HeadMD5 - это во всех версиях. В первой версии только DataMD5.
Это точно? Потому что на форуме RelicNews было наоборот.

Да, это точно. Проверено.
Код
0x000000 - Identifier ASCII String (8)
0x000008 - Version (4)
0x00000C - Data MD5 (16)
0x00001C - Archive Type UNICODE String (128)
0x00009C - Header MD5 (16)
0x0000AC - Data Header Size (4)
0x0000B0 - Data Offest (4)
Цитата
Кстати, ты справился с подсчетом хеш-значений?

Мне помогла библиотека HashLib. smile.gif

Цитата

Цитата
Вместо "Unknown: int64" должно быть:
FileTime: Cardinal; //Время модификации файла, тоже в нестандартном формате.
CRC32b: Cardinal; //Контрольная сумма (именно CRC32b) файла в распакованном виде
А что значит "b" и известно ли тебе начальное значение при подсчете crc32?

В той же библиотеке есть и подсчёт CRC32b - это просто модификация CRC32, для неё не нужно начальное значение.

#32 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 25 May 2007 - 16:10

Xasha666, спасиб, эта инфа пригодится в будушем.

Hunter, как ты заметил, тут шел разговор об SGA, поэтому я и подумал, что ты о том же...
У тебя проблема только с Dark Crusade или с другими играми тоже?
А в игре музыка есть? Может у тебя пиратская урезанная версия.
Ранее, в этой теме, я давал тебе bat-файл, ты все сделал правильно? Точно правильно?

#33 Hunter

Hunter

    Прапорщик

  • Пользователи
  • 128 сообщений
  • Пол:Мужчина
  • Город:Омск

Отправлено 15 June 2007 - 08:59

у меня полная русская версия от буки
что имеено я делал с Бат файлом - не помню - давно это было...