Skip to main
Swap32 artwork

Swap32

dengame

· 3:34 · 4 plays · v3-preview

Lyrics

procedure TForm1.Button1Click(Sender: TObject);

var

FS, OutFile: TFileStream;

Manifest: TStringList;

NameCounters: TStringList;

GlobalSign: array[0..3] of Char;

GlobalSizeBE: LongWord;

Tag8: array[0..7] of Char;

Tag4: array[0..3] of Char;

CurrentTag, Ext, SavedName, LevelPath: string;

ChunkSizeBE, ChunkSizeLE: LongWord;

Idx, Count, i: Integer;

PaddingByte: Byte;

StartOffset: Int64;

IsFirstFile: Boolean;

IsBSP: Boolean;

begin

OpenDialog1.Title := 'Выберите файл Vigilante 8 для распаковки';

OpenDialog1.Filter := 'Файлы данных (*.EXP)|*.EXP|Все файлы (*.*)|*.*';

if not OpenDialog1.Execute then Exit;

Memo1.Clear;

Log('--- Начало распаковки архива V8 ---');

LevelPath := ExtractFilePath(Application.ExeName) + 'level\';

ForceDirectories(LevelPath);

FS := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);

Manifest := TStringList.Create;

NameCounters := TStringList.Create;

NameCounters.Sorted := True;

ProgressBar1.Max := FS.Size;

try

if FS.Size < 8 then Exit;

FS.ReadBuffer(GlobalSign, 4);

FS.ReadBuffer(GlobalSizeBE, 4);

Log('Глобальный заголовок: ' + Copy(GlobalSign, 1, 4));

Log('Размер данных: ' + IntToStr(Swap32(GlobalSizeBE)) + ' байт');

Log('----------------------------------------------------');

IsFirstFile := True;

while FS.Position <= FS.Size - 8 do

begin

StartOffset := FS.Position;

CurrentTag := '';

IsBSP := False;

// 1. ОПРЕДЕЛЯЕМ ИМЯ И ТИП ТЕГА

if IsFirstFile then

begin

FS.ReadBuffer(Tag8, 8);

for i := 0 to 7 do

if Tag8[i] <> #0 then CurrentTag := CurrentTag + Tag8[i];

CurrentTag := Trim(CurrentTag);

IsFirstFi

Comments

No comments yet.