diff --git a/output/tim2view_linux_i386 b/output/tim2view_linux_i386
index 0003fe9..08232ab 100644
Binary files a/output/tim2view_linux_i386 and b/output/tim2view_linux_i386 differ
diff --git a/output/tim2view_linux_x86_64 b/output/tim2view_linux_x86_64
index bc4fee4..685e59c 100644
Binary files a/output/tim2view_linux_x86_64 and b/output/tim2view_linux_x86_64 differ
diff --git a/output/tim2view_win32_i386.exe b/output/tim2view_win32_i386.exe
index d0b00f4..74a0bb4 100644
Binary files a/output/tim2view_win32_i386.exe and b/output/tim2view_win32_i386.exe differ
diff --git a/output/tim2view_win64_x86_64.exe b/output/tim2view_win64_x86_64.exe
index c112e2c..5983b8e 100644
Binary files a/output/tim2view_win64_x86_64.exe and b/output/tim2view_win64_x86_64.exe differ
diff --git a/tim2view.lpi b/tim2view.lpi
index e153d53..5066333 100644
--- a/tim2view.lpi
+++ b/tim2view.lpi
@@ -27,7 +27,7 @@
-
+
diff --git a/umain.lfm b/umain.lfm
index edcbbf7..42a0596 100644
--- a/umain.lfm
+++ b/umain.lfm
@@ -898,6 +898,15 @@ object frmMain: TfrmMain
object mnExtractAllPngs3: TMenuItem
Action = actExtractPngs
end
+ object N22: TMenuItem
+ Caption = '-'
+ end
+ object MenuItem2: TMenuItem
+ Action = actExtractTimsAll
+ end
+ object MenuItem3: TMenuItem
+ Action = actExtractPngsAll
+ end
end
object mnOptions: TMenuItem
Caption = '&Options'
@@ -1056,11 +1065,20 @@ object frmMain: TfrmMain
OnExecute = actExtractTimsExecute
ShortCut = 8305
end
+ object actExtractTimsAll: TAction
+ Caption = 'Extract all TIMs (&All Files)'
+ OnExecute = actExtractTimsAllExecute
+ ShortCut = 24689
+ end
object actExtractPngs: TAction
Caption = '&Extract all PNGs (This File)'
OnExecute = actExtractPngsExecute
ShortCut = 8307
end
+ object actExtractPngsAll: TAction
+ Caption = 'Extract all PNGs (All &Files)'
+ OnExecute = actExtractPngsAllExecute
+ end
object actChangeClutIdx: TAction
OnExecute = actChangeClutIdxExecute
end
diff --git a/umain.pas b/umain.pas
index cc8fa12..d6af001 100644
--- a/umain.pas
+++ b/umain.pas
@@ -28,6 +28,8 @@ type
actExtractTims: TAction;
actChangeFile: TAction;
actChangeBackColor: TAction;
+ actExtractTimsAll: TAction;
+ actExtractPngsAll: TAction;
actShowFileInfo: TAction;
actPngImport: TAction;
actStopScan: TAction;
@@ -50,6 +52,9 @@ type
dlgOpenFile: TOpenDialog;
dlgSavePNG: TSavePictureDialog;
dlgSaveFile: TSaveDialog;
+ MenuItem2: TMenuItem;
+ MenuItem3: TMenuItem;
+ N22: TMenuItem;
mnExtractAllPngs3: TMenuItem;
mnExtractAllTims3: TMenuItem;
N21: TMenuItem;
@@ -117,8 +122,10 @@ type
procedure actCloseFileExecute(Sender: TObject);
procedure actCloseFilesExecute(Sender: TObject);
procedure actExitExecute(Sender: TObject);
+ procedure actExtractPngsAllExecute(Sender: TObject);
procedure actExtractPngsExecute(Sender: TObject);
procedure actExtractTimExecute(Sender: TObject);
+ procedure actExtractTimsAllExecute(Sender: TObject);
procedure actExtractTimsExecute(Sender: TObject);
procedure actOpenLabExecute(Sender: TObject);
procedure actOpenRepoExecute(Sender: TObject);
@@ -372,6 +379,58 @@ begin
Close;
end;
+procedure TfrmMain.actExtractPngsAllExecute(Sender: TObject);
+var
+ I, J, OFFSET, BIT_MODE, SIZE: Integer;
+ FName, Path: string;
+ IsImage: Boolean;
+ ScanTim: TTimInfo;
+ TIM: PTIM;
+ Image: PDrawSurf;
+begin
+ lblStatus.Caption := sStatusBarPngsExtracting;
+
+ for J := 1 to ScanResults.Count do begin
+ FName := ScanResults[J - 1].ScanFile;
+ IsImage := ScanResults[J - 1].IsImage;
+
+ New(Image);
+ Image^ := nil;
+
+ pbProgress.Position := 0;
+ pbProgress.Max := ScanResults[J - 1].Count;
+ for I := 1 to ScanResults[J - 1].Count do
+ begin
+ ScanTim := TimInfoByIdx[I - 1];
+ OFFSET := ScanTim.Position;
+ SIZE := ScanTim.Size;
+ BIT_MODE := ScanTim.BitMode;
+
+ Path := SysToUTF8(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStrUTF8(0)) + cExtractedPngsDir));
+ CreateDirUTF8(Path);
+ Path := IncludeTrailingPathDelimiter(Path + ExtractFileName(FName));
+ CreateDirUTF8(Path);
+
+ TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE);
+ Tim2Png(TIM, cbbCLUT.ItemIndex, Image, cbbTranspMode.ItemIndex);
+
+ Path := Path + FormatPngName(FName, I - 1, BIT_MODE, 0);
+ SaveImage(Path, Image, False);
+ {$IFDEF Linux}FpChmod(Path, &777);{$IFEND}
+ Image^.Free;
+ Image^ := nil;
+
+ FreeTIM(TIM);
+
+ pbProgress.Position := I;
+ Application.ProcessMessages;
+ end;
+ Dispose(Image);
+ lblStatus.Caption := sStatusBarExtracted;
+ pbProgress.Position := 0;
+ end;
+end;
+
procedure TfrmMain.actExtractPngsExecute(Sender: TObject);
var
I, OFFSET, BIT_MODE, SIZE: Integer;
@@ -437,6 +496,49 @@ begin
FreeTIM(TIM);
end;
+procedure TfrmMain.actExtractTimsAllExecute(Sender: TObject);
+var
+ I, J, OFFSET, BIT_MODE, SIZE, MAGIC: Integer;
+ FName, Path: string;
+ IsImage: Boolean;
+ TIM: PTIM;
+ ScanTim: TTimInfo;
+begin
+ lblStatus.Caption := sStatusBarFilesExtracting;
+
+ for J := 1 to ScanResults.Count do begin
+ FName := ScanResults[J - 1].ScanFile;
+ IsImage := ScanResults[J - 1].IsImage;
+
+ pbProgress.Position := 0;
+ pbProgress.Max := ScanResults[J - 1].Count;
+ for I := 1 to ScanResults[J - 1].Count do
+ begin
+ ScanTim := TimInfoByIdx[I - 1];
+ OFFSET := ScanTim.Position;
+ SIZE := ScanTim.Size;
+ BIT_MODE := ScanTim.BitMode;
+ MAGIC := ScanTim.Magic;
+
+ Path := SysToUTF8(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStrUTF8(0)) + cExtractedFilesDir));
+ CreateDirUTF8(Path);
+ Path := IncludeTrailingPathDelimiter(Path + ExtractFileName(FName));
+ CreateDirUTF8(Path);
+
+ TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE);
+ Path := Path + FormatFileName(FName, I - 1, BIT_MODE, MAGIC);
+ SaveTimToFile(Path, TIM);
+ {$IFDEF Linux}FpChmod(Path, &777);{$IFEND}
+ FreeTIM(TIM);
+
+ pbProgress.Position := I;
+ Application.ProcessMessages;
+ end;
+ lblStatus.Caption := sStatusBarExtracted;
+ pbProgress.Position := 0;
+ end;
+end;
+
procedure TfrmMain.actExtractTimsExecute(Sender: TObject);
var
I, OFFSET, BIT_MODE, SIZE, MAGIC: Integer;
@@ -839,6 +941,8 @@ begin
RemoveGridSelection;
cbbFiles.Enabled := (cbbFiles.Items.Count <> 0);
+ actExtractTimsAll.Enabled := cbbFiles.Enabled;
+
pnlList.Enabled := cbbFiles.Enabled;
actCloseFile.Enabled := cbbFiles.Enabled;
@@ -852,6 +956,8 @@ begin
actPngExport.Enabled := (Surf^ <> nil) and actReplaceTim.Enabled;
actPngImport.Enabled := actReplaceTim.Enabled;
actExtractTim.Enabled := actReplaceTim.Enabled;
+ actExtractTims.Enabled := actReplaceTim.Enabled;
+ actExtractPngs.Enabled := actReplaceTim.Enabled;
pnlImageOptions.Enabled := actReplaceTim.Enabled;
end;