
Track 2
· 2:21 · 3 plays · v3-preview
- future bass
- rhythmic
- bass
- hardcore hip hop
- talkbox
- aggressive
- big room
- bass synthesizer
- heavy
- intense
- fast
- melodic
- choral
- asian
- chinese
- china
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);
IsFirstFile := False;
end
else
begin
// Читаем сначала 4 байта, чтобы проверить, не BSP ли это
FS.ReadBuffer(Tag4, 4);
for i := 0 to 3 do
if Tag4[i] <> #0 then CurrentTag := CurrentTag + Tag4[i];
Comments
No comments yet.