Skip to main
Track 1 artwork

Track 1

dengame

· 2:17 · 2 plays · v3-preview

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.