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;