Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 09:42   #1
Brutalus
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 10
Печаль Распаковка формата

Здравствуйте, уважаемые знатоки. Я очень большой новичок в дельфи, но предстала такая задача. Написать распаковщик специфического формата.
Все ведомости о нём (англ.):
Цитата:
SSF files have the following Big-Endian header (the rest of the file besides the first header and nested sec headers are Little-Endian though it is also
possible the files I have were from the XBox or Wii versions because XBox and Wii games support both types of Endian, though I think this game just decided to use Big-Endian headers in the PS2 version which could be programed in. A third idea is that since the game uses RenderWare for the graphics is that the PS2 and Wii and Xbox versions use exactly the same .ssf files)

Big-Endian Header of .SSF files
53 45 43 20
4ByteUnknown
4ByteUnknown
4ByteUnknown
4Byte#NumberOfSubFiles
4ByteSizeofEntire SSF file
SubfileListings:
{4ByteIntegerTypeofSubFile, 4ByteIntegerOffsetToSubFile, 4ByteSizeofSubFile}


The Type of subfiles can be:
00 00 00 01- Identification File
00 00 00 02-Type 1 Texture File
00 00 00 03-Type 2 Texture File
00 00 00 04-Mesh File
00 00 00 05-Ragdoll Mesh File Animations??
00 00 00 06-Nested SEC File
00 00 00 07-Animation information for Camera?? Also appears to be using Big-Endian
00 00 00 08-Nested SEC File
00 00 00 0A-Mesh Weight File


The Face Index is composed of a Tristrip (possibly multiple strips):{2ByteIntegerVertexes(#1,#2 ....)} The vertex section is composed of arrays that are 86Bytes in Length:{4ByteFloatVertexes(X,Y,Z),4 ByteFloatTextureMaps#1(U,V),10ByteU nknown,4ByteFloatNormalMaps(X,Y,Z), 4ByteFloatTextureMaps#2(U,V),20Byte Unknown}
И ещё некая вот такая инормация:
Цитата:
Let "AX"= [0x20]+0x30
Let "BX"=["AX"]
Let "CX"=[0x20]+"BX"
Let "DX"=["CX"+0x44]*0x38+"CX"+0x48
Let "EX"=["DX"+0x2C]*0xC+"DX"+0x38
Let "FX"=["DX"-0x8]*0x24+"EX"+0x70
Let "GX"{1}=["FX"-0x4]+"DX"+0x4
Let "HX"=["FX"+0x4]="BodyListEnd#"
Let "GX"{2}=["GX"{1}+0x4]+"GX"{1}+0xC
Let "GX"{3}=["GX"{2}+0x4]+"GX"{2}+0xC
Let "GX"{4}=["GX"{3}+0x4]+"GX"{3}+0xC
........
Let "GX"{"BodyListEnd#"}=["GX"{"BodyListEnd#"-1}+0x4]+"GX"{"BodyListEnd#"-1}+0xC="GX"{END}
Let "JX"=["GX"{END}+10]+"GX"{END}+0x1C
В чем проблема, я совсем не понимаю всего этого. Добрые люди, пожалуйста, помогите!

Последний раз редактировалось Brutalus; 07.06.2012 в 09:44. Причина: Добавление информации
Brutalus вне форума Ответить с цитированием
Старый 07.06.2012, 10:16   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

а запостить ссылку на оригинальную статью у вас рука не поднялась? Специально, чтобы нам сложнее было проходить этот квест?

Формат вроде не сильно сложный, понапихано всякой 3d требухи в перемешку с тестурами.

Если вы "совсем не понимаю всего этого", то чем мы можем помочь? Да и потом, что вы хотите с этим файлом сделать? Выкусить текстуры? 3д модели? Поменять на свои?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.06.2012, 10:22   #3
Brutalus
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
а запостить ссылку на оригинальную статью у вас рука не поднялась? Специально, чтобы нам сложнее было проходить этот квест?

Формат вроде не сильно сложный, понапихано всякой 3d требухи в перемешку с тестурами.

Если вы "совсем не понимаю всего этого", то чем мы можем помочь? Да и потом, что вы хотите с этим файлом сделать? Выкусить текстуры? 3д модели? Поменять на свои?
Извините пожалуйста, забыл просто.
Нужен просто распаковщик который выкинет 2 типа текстуры (вероятно стандартная карта и альфа) и мэш.
Не знаю чем вы можете помочь... Наверное поможете сделать программу?
Brutalus вне форума Ответить с цитированием
Старый 07.06.2012, 10:26   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

тогда это во флиланс, там быстро и с радостью вам помогут

а если хотите испытать свои знания и силы, начинайте с простых операций с файлами, там типа прочитать 4 байта по такому-то смещению, перейти по новому смещению, прочитать еще 16 байт (это будет заголовок под-файла), всё это проще заносить в структуры (учитывая big/little endian). В принципе это базовые операции, ничего особо сложного.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.06.2012, 10:35   #5
Brutalus
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 10
По умолчанию

http://programmersforum.ru/showthread.php?t=198906
нашел темку с подобным, сейчас ухожу, приду - буду пытаться вникнуть

Возник вопрос, как сделать чтобы программа считала первые четыре байта, следующие четыре пропустила, и снова считала четыре? То есть как сделать пропуск?

Последний раз редактировалось Stilet; 07.06.2012 в 21:00.
Brutalus вне форума Ответить с цитированием
Старый 07.06.2012, 13:30   #6
@нтошка
Помог? Дави весы!
Пользователь
 
Регистрация: 15.05.2012
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Brutalus Посмотреть сообщение
Возник вопрос, как сделать чтобы программа считала первые четыре байта, следующие четыре пропустила, и снова считала четыре? То есть как сделать пропуск?
Просто считывать всё подряд. А на ненужные 4 байта не обращайте внимания
@нтошка вне форума Ответить с цитированием
Старый 07.06.2012, 13:45   #7
Brutalus
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 10
По умолчанию

Таак... С этим решили. Далее возникла проблема с Big-Endian. Swap ведь строки не может перевести... Короче как мне Big-Endian превратить в Little?
Brutalus вне форума Ответить с цитированием
Старый 07.06.2012, 13:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если пользуетесь TFileStream - тогда смотрите описание метода .Seek

Цитата:
Код:
function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract;

Description

Each descendant stream object defines a Seek method that moves the current position of the stream 
in its particular storage medium (such as memory or a disk file).

The Origin parameter indicates how to interpret the Offset parameter. Origin should be one of the following values:

Value	Meaning

soFromBeginning	Offset is from the beginning of the resource. Seek moves to the position Offset. Offset must be >= 0.
soFromCurrent	Offset is from the current position in the resource. Seek moves to Position + Offset.
soFromEnd	Offset is from the end of the resource. Offset must be <= 0 to indicate a number of bytes before the end of the file.

Seek returns the new value of the Position property.

это я отвечал на вопрос про пропуск нужного числа байт...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2012, 13:50   #9
Brutalus
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 10
По умолчанию

Serge_Bliznykov, спасибо, я сам уже нашел.
Вопрос в том, как файл разом перевести в l-e.
Brutalus вне форума Ответить с цитированием
Старый 07.06.2012, 14:07   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, что ли?
Код:
function SwapEndian(Value: longint): longint; register; overload;
asm
  bswap eax
end;

procedure TForm1.FormCreate(Sender: TObject);
var tf : TFileStream;
  BigInd : LongInt;
begin
  tf := TFileStream.Create('ssf.dat', fmOpenRead);
  tf.Read(BigInd, SizeOf(BigInd));
  BigInd := SwapEndian(BigInd); 
  Edit1.Text := IntToHex( BigInd, 4 );
  FreeAndNil(tf);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с изменением формата даты при копировании из CSV формата в эксель mars56 Microsoft Office Excel 4 16.03.2010 09:50
Распаковка Dll Hookis1 Фриланс 9 09.03.2010 09:38
Распаковка архивов Starscream Общие вопросы Delphi 2 25.06.2009 23:26
Распаковка из .exe Satorin Общие вопросы Delphi 19 25.04.2009 18:46
распаковка .Jpeg vitality Мультимедиа в Delphi 12 08.02.2008 11:00