Добро пожаловать, гость ( Вход | Регистрация )
| Siberian GRemlin |
Jun 6 2007, 15:58
Сообщение
#1
|
|
Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 222 раз(а) |
Итак, пока есть время перед экзаменами и играть поднадоело + зависоны, я решил поковырять четвёртых Поселенцев, о чём давно мечтал. А точнее начал пока с формата [.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. |
![]() ![]() |
| Siberian GRemlin |
Jun 17 2007, 13:48
Сообщение
#2
|
|
Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 222 раз(а) |
Вот, на нашем родном языке =)
http://www.shokhirev.com/nikolai/programs/...TeaSet_pas.html -=CHE@TER=- Переименуй, пожалуйста, тему в "The Settlers (Все части)" Всем, кто ещё дышит У меня экзамен через 36 часов где-то, а я ещё не готовился даже... какой ужас! А ещё только что обнаружил, что у меня не все лекции! Но я тут колупал два формата графики The Settlers 2... дак, вот если есть кто дышит, то не могу понять что тут за один извращённый формат графики. Каждая строчка картинки разной ширины, но вместо их ширины есть только смещения до их начала. А вот как их рисовать не понятно, в одних рисунках д.б. выравнивание на лево, а других по центру, как я понял, но где это написано неясно. Дак вот, у меня косячит выравнивание по центру у файла cast_01 и подобных. Вот код + примеров пачка Пароль: www.Васю_Зашкурирло.ru |
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 Вернулся к разбору четвёртой части. Демо-версия.
... 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![]() ![]() |
| Упрощённая версия | Сейчас: 2nd December 2025 - 01:39 |