IPB

Добро пожаловать, гость ( Вход | Регистрация )

> The Settlers (все части), Запнулся на сжатии
Siberian GRemlin
Jun 6 2007, 15:58
Сообщение #1


Advanced Member
***

Группа: CTPAX-X
Сообщений: 537
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 221 раз(а)



Итак, пока есть время перед экзаменами и играть поднадоело + зависоны, я решил поковырять четвёртых Поселенцев, о чём давно мечтал. А точнее начал пока с формата [.LIB]. Но, вот? незадача, я думал, там обычный ZLib, но разжать не смог =( Порылся в файлах, нашёл RTComp.dll логично подумал, что Comp от Compress и, кажется, был прав в этом файле видны строчки с "zlib". Но почему-то у меня не получилось разжать файл. Погуглил на RT Compression и сокращения, нашёл только какую-то чушь (вроде) про Real-Time Compression.

Работаю с последней английской версией игры и версией от 1С. Демку можно скачать с AG.ru
CODE
program Settlers4_LIB_Info;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows,
  Classes;
type
  TFAT = record
    Unknown1,
    Unknown2,
    Unknown3,
    FolderCount,
    Unknown5,
    FilesCount: Dword;
  end;
  TFileInfo = record
    Offset,
    PackedSize,
    UnPackedSize,
    FolderNum,
    IsPacked,
    CheckSum: Dword;
  end;
  TFile = record
    Name:String;
    Info:TFileInfo;
  end;
var
  MSTR: TMemoryStream;
  FATOffset: Dword;
  F:TFAT;
  Folders: array of string;
  Files: array of TFile;
  i,j: dword;
  outf: textfile;
begin
  Assign(outf,'D:\Games\The Settlers IV\gfx.txt');
  ReWrite(outf);
  MSTR:=TMemoryStream.Create;
  Mstr.LoadFromFile('D:\Games\The Settlers IV\gfx.lib');
  Mstr.Position:=Mstr.Size-4;
  Mstr.ReadBuffer(FATOffset,4);
  WriteLn(outf,'Header Offset: '+IntToHex(FATOffset,4));
  Mstr.Position:=FATOffset;
  Mstr.ReadBuffer(F,sizeof(f));
  WriteLn(outf);
  WriteLn(outf,'Unknown1: '+IntToStr(F.Unknown1));
  WriteLn(outf,'Unknown2: '+IntToStr(F.Unknown2));
  WriteLn(outf,'Unknown3: '+IntToStr(F.Unknown3));
  WriteLn(outf,'Folder Count: '+IntToStr(F.FolderCount));
  WriteLn(outf,'Unknown5: '+IntToStr(F.Unknown5));
  WriteLn(outf,'Files Count: '+IntToStr(F.FilesCount));
//папки
  SetLength(Folders,F.FolderCount);
  for i:=1 to F.FolderCount do begin
    j:=1;
    SetLength(Folders[i-1],1);
    Repeat
      Mstr.ReadBuffer(Folders[i-1][j],1);
      inc(j);
      SetLength(Folders[i-1],Length(Folders[i-1])+1);
    Until ord(Folders[i-1][j-1])=0;
    SetLength(Folders[i-1],Length(Folders[i-1])-2);
  end;
//файлы
  SetLength(Files,F.FilesCount);
  for i:=1 to F.FilesCount do begin
    j:=1;
    SetLength(Files[i-1].Name,1);
    Repeat
      Mstr.ReadBuffer(Files[i-1].Name[j],1);
      inc(j);
      SetLength(Files[i-1].Name,Length(Files[i-1].Name)+1);
    Until ord(Files[i-1].Name[j-1])=0;
    SetLength(Files[i-1].Name,Length(Files[i-1].Name)-2);
  end;
//данные
  for i:=1 to F.FilesCount-1 do begin
    Writeln(outf);
    Mstr.ReadBuffer(Files[i-1].Info,sizeof(Files[i-1].Info));
    if F.FolderCount>1 then
    WriteLn(outf,IntToStr(i)+': '+Folders[Files[i-1].Info.FolderNum]+'\'+Files[i-1].Name)
    else
    WriteLn(outf,IntToStr(i)+': '+Folders[0]+'\'+Files[i-1].Name);
    WriteLn(outf,Format('Offset: %s Packed Size: %s UnPacked Size: %s Compressed: %s ?ChekSum?: %s',[IntToHex(Files[i-1].Info.Offset,8),IntToHex(Files[i-1].Info.PackedSize,8), IntToHex(Files[i-1].Info.UnPackedSize,8),IntToHex(Files[i-1].Info.IsPacked,1), IntToHex(Files[i-1].Info.CheckSum,8)]));
  end;
  Mstr.Free;
  CloseFile(outf);
  WriteLn('Complete!');
  Readln;
end.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме
Siberian GRemlin   The Settlers (все части)   Jun 6 2007, 15:58
Siberian GRemlin   Поковырялся ещё. Оказалось в GFX.LIB последней анг...   Jun 7 2007, 04:29
jTommy   Раздобыл полную версию. Заодно и пятую часть скача...   Jun 8 2007, 13:11
Siberian GRemlin   Ты уверен, что в пятой zlib? т.к. на wiki.xentax б...   Jun 14 2007, 03:59
jTommy   Ты уверен, что в пятой zlib? т.к. на wiki.xentax б...   Jun 14 2007, 20:04
Siberian GRemlin   Я думал, ты меня сразу носом натыкаешь! =) Я с...   Jun 15 2007, 05:59
Siberian GRemlin   Вот, на нашем родном языке =) http://www.shokhirev...   Jun 17 2007, 13:48
Siberian GRemlin   Вернулся к разбору четвёртой части. Демо-версия. ...   Oct 3 2018, 07:03
-=CHE@TER=-   Там, действительно, какая-то модификация LZW, приш...   Oct 3 2018, 18:31
Siberian GRemlin   Спасибо. Наконец-то адаптирую переводы под последн...   Oct 3 2018, 18:58
Siberian GRemlin   Можешь проверить - у тебя кириллица будет в демке ...   Oct 5 2018, 15:03
-=CHE@TER=-   Проверил. Закинул твой файл в демку, меню стало на...   Oct 5 2018, 19:44
Siberian GRemlin   Спасибо. Вроде бы разобрался. Теперь надо проверит...   Oct 5 2018, 20:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 14th November 2024 - 20:16