
Track 1
· 2:17 · 2 plays · v3-preview
- bass
- fast
- future bass
- aggressive
- rhythmic
- hardcore hip hop
- big room
- bass synthesizer
- heavy
- intense
- melodic
- choral
- asian
- china
- atmospheric
Lyrics
if (FS.Position + ChunkSizeLE > FS.Size) then
begin
Log(Format('[0x%8.8X] Ошибка фазы чтения на теге %s. Размер: %d', [StartOffset, CurrentTag, ChunkSizeLE]));
Break;
end;
// 3. СЧИТАЕМ ИНДЕКС ДЛЯ ИМЕНИ
Idx := NameCounters.IndexOf(CurrentTag);
if Idx = -1 then
begin
Count := 0;
NameCounters.AddObject(CurrentTag, TObject(Count));
end else
begin
Count := Integer(NameCounters.Objects[Idx]) + 1;
NameCounters.Objects[Idx] := TObject(Count);
end;
// Выставляем расширения
if (CurrentTag = 'TERRTITL') or (CurrentTag = 'TEXT') then Ext := '.txt'
else if (CurrentTag = 'XBMP') or (CurrentTag = 'XBGM') then Ext := '.tim'
else if (CurrentTag = 'COLS') then Ext := '.clr'
else if (CurrentTag = 'FORM') then Ext := '.dat'
else if (CurrentTag = 'ZMAP') then Ext := '.map'
else if (CurrentTag = 'ZONE') then Ext := '.zon'
else Ext := '';
SavedName := Format('%s%.4d%s', [Trim(CurrentTag), Count, Ext]);
Log(Format('[0x%8.8X] Извлечение: %s (%d байт)', [StartOffset, SavedName, ChunkSizeLE]));
// Записываем в манифест признак BSP, чтобы пакер знал, как собирать
if IsBSP then
Manifest.Add(SavedName + '=BSP_SPECIAL')
else
Manifest.Add(SavedName + '=' + CurrentTag);
// 4. СОХРАНЯЕМ НА ДИСК
OutFile := TFileStream.Create(LevelPath + SavedName, fmCreate);
try
if ChunkSizeLE > 0 then
OutFile.CopyFrom(FS, ChunkSizeLE);
finally
OutFile.Free;
end;
// Выравнивание по четной границе (модифицировано под вашу логику)
if (ChunkSizeLE mod 2) <> 0 then
begin
if FS.Position < FS.Size then
begin
FS.ReadBuffer(PaddingByte, 1);
if PaddingByte <> 0 then
FS.Position := FS.Position - 1;
end;
end;
ProgressBar1.Position := FS.Position;
end;
Manifest.SaveToFile(LevelPath + '!files.cfg');
ProgressBar1.Position := ProgressBar1.Max;
Log('=== РАСПАКОВКА УСПЕШНО ЗАВЕРШЕНА! ===');
finally
NameCounters.Free;
Manifest.Free;
FS.Free;
end;
end;
// ==========================================
// СБОРКА С УЧЕТОМ УНИКАЛЬНОГО BSP
// ==========================================
procedure TForm1.Button2Click(Sender: TObject);
var
FS, InFile: TFileStream;
Manifest: TStringList;
Comments
No comments yet.