Уровни из альфы Сталкера
Автор
Max_XT
, May 03 2006 20:38
Сообщений в теме: 14
#1
Отправлено 03 May 2006 - 20:38
Если кто сможет, то помогите.
Как я понял начало у всех файлов Level одинаковое, потом идёт какое-то число(скорей всего Int, возможно размер), а потом куча сжатой информации(возможно Zlib'ом 1.1.3 это я понял из exe'шника) и в конце просто список текстур.
Просто нет опыта программирования zlib, у кого есть(альфа и опыт) то попробуйте.
Как я понял начало у всех файлов Level одинаковое, потом идёт какое-то число(скорей всего Int, возможно размер), а потом куча сжатой информации(возможно Zlib'ом 1.1.3 это я понял из exe'шника) и в конце просто список текстур.
Просто нет опыта программирования zlib, у кого есть(альфа и опыт) то попробуйте.
#2
Отправлено 05 May 2006 - 16:25
Эй! Где все умные люди?
Ну подскажите хоть как провести декомпрессию потока данных, желательно на Delphi.
Ну подскажите хоть как провести декомпрессию потока данных, желательно на Delphi.
#3
Отправлено 06 May 2006 - 08:38
вместе с Делфи идет пример работы с ZLib.
#4
Отправлено 06 May 2006 - 11:32
ZLib идёт, а примеры - нет.
#5
Отправлено 07 May 2006 - 06:19
На форуме уже была тема с работой модуля ZLib'а на дельфях...
#6
Отправлено 07 May 2006 - 09:07
Max_XT:
В своих программах я использую такую функцию. Это конечно не оптимальный вариант, но работает. zlib подключается в виде obj-файлов.
В своих программах я использую такую функцию. Это конечно не оптимальный вариант, но работает. 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
Отправлено 07 May 2006 - 11:57
Спасибо большое!!!
Буду разбираться
Буду разбираться
#8
Отправлено 07 May 2006 - 19:07
jTommy
жутко
вот самое простое, как используется данная библиотека.
жутко
вот самое простое, как используется данная библиотека.
Код |
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
Отправлено 08 May 2006 - 07:46
Цитата (Max_XT @ 4.05.2006 - 00:38) |
Если кто сможет, то помогите. Как я понял начало у всех файлов Level одинаковое, потом идёт какое-то число(скорей всего Int, возможно размер), а потом куча сжатой информации(возможно Zlib'ом 1.1.3 это я понял из exe'шника) и в конце просто список текстур. Просто нет опыта программирования zlib, у кого есть(альфа и опыт:)) то попробуйте. |
А где достать альфа-версию Сталкера? :)
Выкладывай её куда-нибудь, посмотрю формат файлов.
#10
Отправлено 09 May 2006 - 11:05
CrOm:
Так может и проще (не факт), но размер exe-файла сразу увеличится до 150кб, что для консольной проги великовато.
Так может и проще (не факт), но размер exe-файла сразу увеличится до 150кб, что для консольной проги великовато.
#11
Отправлено 09 May 2006 - 12:56
Альфу я купил ещё полтора года назад под видом законченой игры
Минимальный размер файла уровня(только геометрия) - 4.6 Mb, в архиве 3.52, а у вас тут нельзя файлы закачивать?
Минимальный размер файла уровня(только геометрия) - 4.6 Mb, в архиве 3.52, а у вас тут нельзя файлы закачивать?
#12
Отправлено 10 May 2006 - 07:19
залей на zalil.ru
#13
Отправлено 10 May 2006 - 13:33
А по подробней можно, как заливать файлы, а то я пробовал, но он мне нулевой номер давал. И как с помощью ftp, например Total'ом.
#14
Отправлено 15 May 2006 - 08:34
#15
Отправлено 16 May 2006 - 21:43
Много, а по моему делу ничего не нашёл, так что без вас никуда