IPB

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

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


Advanced Member
***

Группа: CTPAX-X
Сообщений: 533
Регистрация: 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
 
Reply to this topicStart new topic
Ответов
Siberian GRemlin
Jun 17 2007, 13:48
Сообщение #2


Advanced Member
***

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



Вот, на нашем родном языке =)
http://www.shokhirev.com/nikolai/programs/...TeaSet_pas.html

-=CHE@TER=-
Переименуй, пожалуйста, тему в "The Settlers (Все части)"

Всем, кто ещё дышит
У меня экзамен через 36 часов где-то, а я ещё не готовился даже... какой ужас! А ещё только что обнаружил, что у меня не все лекции!

Но я тут колупал два формата графики The Settlers 2... дак, вот если есть кто дышит, то не могу понять что тут за один извращённый формат графики. Каждая строчка картинки разной ширины, но вместо их ширины есть только смещения до их начала. А вот как их рисовать не понятно, в одних рисунках д.б. выравнивание на лево, а других по центру, как я понял, но где это написано неясно. Дак вот, у меня косячит выравнивание по центру у файла cast_01 и подобных.

Вот код + примеров пачка
Пароль: www.Васю_Зашкурирло.ru
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
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 28th April 2024 - 15:54