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


Внимание!

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


Фотография

Уровни из альфы Сталкера


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

#1 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 03 May 2006 - 20:38

Если кто сможет, то помогите.
Как я понял начало у всех файлов Level одинаковое, потом идёт какое-то число(скорей всего Int, возможно размер), а потом куча сжатой информации(возможно Zlib'ом 1.1.3 это я понял из exe'шника) и в конце просто список текстур.
Просто нет опыта программирования zlib, у кого есть(альфа и опытsmile.gif) то попробуйте.

#2 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 05 May 2006 - 16:25

Эй! Где все умные люди? smile.gif
Ну подскажите хоть как провести декомпрессию потока данных, желательно на Delphi.

#3 CrOm

CrOm

    Старший сержант

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

Отправлено 06 May 2006 - 08:38

вместе с Делфи идет пример работы с ZLib.

#4 Max_XT

Max_XT

    Ефрейтор

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

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

ZLib идёт, а примеры - нет.

#5 Siberian_GRemlin

Siberian_GRemlin

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

  • Пользователи
  • 166 сообщений
  • Город:Красноярск

Отправлено 07 May 2006 - 06:19

На форуме уже была тема с работой модуля ZLib'а на дельфях...

#6 jTommy

jTommy

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

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

Отправлено 07 May 2006 - 09:07

Max_XT:
В своих программах я использую такую функцию. Это конечно не оптимальный вариант, но работает. zlib подключается в виде obj-файлов.
Код

Var
 StreamRec: TZStreamRec;

 ...

Function UnpackData(Var BuffIn, BuffOut: pointer; Var szBuffIn, szBuffOut: cardinal): integer;
begin
 inflateinit_(StreamRec, ZLIB_VERSION, SizeOf(StreamRec));
 // Init StreamRec
 StreamRec.Next_In:=BuffIn;
 StreamRec.Avail_In:=szBuffIn;
 StreamRec.Next_Out:=BuffOut;
 StreamRec.Avail_Out:=szBuffOut;
 // Decompress data
 Result:=inflate(StreamRec, Z_FINISH);
 // Return size of unpacked data
 szBuffOut:=szBuffOut-StreamRec.Avail_Out;
 // Free inflate
 inflateend(StreamRec);
end;


Ну и простой пример использования. Используются функции WinAPI из модуля Windows.
Код

Var
 BufferIn, BufferOut: pointer;
 hArch, hFile: cardinal; // или THandle, без разницы
 PackSize, DataSize, RdC, WrC: cardinal;

 ...

 hArch:=CreateFile(PChar(ArchName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 for i:=0 to NumFiles-1 do begin
   BufferIn:=AllocMem(PackSize);  // буфер для сжатых данных...
   BufferOut:=AllocMem(DataSize); // ... и для распакованных
   //
   SetFilePointer(hArch, DataOffset, nil, FILE_BEGIN); // указатель на запакованные данные
   ReadFile(hArch, BufferIn^, PackSize, RdC, nil); // читаем ВСЕ запакованные данные
   //
   UnpackData(BufferIn, BufferOut, PackSize, DataSize);
   //
   hFile:=CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
   WriteFile(hFile, BufferOut^, DataSize, WrC, nil); // записываем все, что распаковали
   //
   FreeMem(BufferIn, PackSize);
   FreeMem(BufferOut, DataSize);
   CloseHandle(hFile); // закрываем файл
 end;
 CloseHandle(hArch); // закрываем архив



#7 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 07 May 2006 - 11:57

Спасибо большое!!!
Буду разбираться laugh.gif

#8 CrOm

CrOm

    Старший сержант

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

Отправлено 07 May 2006 - 19:07

jTommy
жутко smile.gif

вот самое простое, как используется данная библиотека.

Код
procedure TUnPackZLib.UnPack;
var Count: integer;
begin
ZStr := TDeCompressionStream.Create(SrcS);
try
 TDeCompressionStream(ZStr).OnProgress := FDoProgress;
 while true do
 begin
  Count := ZStr.Read(Buffer, BufferSize);
  if Count <> 0 then DstS.WriteBuffer(Buffer, Count) else break
 end;
finally
 ZStr.Free
end
end;


#9 ganjman

ganjman

    Рядовой

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

Отправлено 08 May 2006 - 07:46

Цитата (Max_XT @ 4.05.2006 - 00:38)
Если кто сможет, то помогите.
Как я понял начало у всех файлов Level одинаковое, потом идёт какое-то число(скорей всего Int, возможно размер), а потом куча сжатой информации(возможно Zlib'ом 1.1.3 это я понял из exe'шника) и в конце просто список текстур.
Просто нет опыта программирования zlib, у кого есть(альфа и опыт:)) то попробуйте.

А где достать альфа-версию Сталкера? :)
Выкладывай её куда-нибудь, посмотрю формат файлов.

#10 jTommy

jTommy

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

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

Отправлено 09 May 2006 - 11:05

CrOm:
Так может и проще (не факт), но размер exe-файла сразу увеличится до 150кб, что для консольной проги великовато.

#11 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 09 May 2006 - 12:56

Альфу я купил ещё полтора года назад под видом законченой игры smile.gif
Минимальный размер файла уровня(только геометрия) - 4.6 Mb, в архиве 3.52, а у вас тут нельзя файлы закачивать?

#12 Siberian_GRemlin

Siberian_GRemlin

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

  • Пользователи
  • 166 сообщений
  • Город:Красноярск

Отправлено 10 May 2006 - 07:19

залей на zalil.ru

#13 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 10 May 2006 - 13:33

А по подробней можно, как заливать файлы, а то я пробовал, но он мне нулевой номер давал. И как с помощью ftp, например Total'ом.

#14 Bourn

Bourn

    Старший сержант

  • Пользователи
  • 74 сообщений
  • Город:Нижний Новгород

Отправлено 15 May 2006 - 08:34

зайди сюда тут про сталкер много че разбирается
http://www.gameru.ne...hp?act=SF&f=107

#15 Max_XT

Max_XT

    Ефрейтор

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

Отправлено 16 May 2006 - 21:43

Много, а по моему делу ничего не нашёл, так что без вас никуда sad.gif