Added extracting of TIMs and PNGs from all files.

This commit is contained in:
Vladimir Kryvian
2015-08-06 15:45:09 +03:00
parent ecfbb344b9
commit b5680c2fe8
7 changed files with 125 additions and 1 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -27,7 +27,7 @@
<AutoIncrementBuild Value="True"/> <AutoIncrementBuild Value="True"/>
<MajorVersionNr Value="1"/> <MajorVersionNr Value="1"/>
<RevisionNr Value="90"/> <RevisionNr Value="90"/>
<BuildNr Value="54"/> <BuildNr Value="56"/>
<StringTable CompanyName="Lab 313" FileDescription="The best TIMs tool ever!:)" ProductVersion=""/> <StringTable CompanyName="Lab 313" FileDescription="The best TIMs tool ever!:)" ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="6"> <BuildModes Count="6">

View File

@@ -898,6 +898,15 @@ object frmMain: TfrmMain
object mnExtractAllPngs3: TMenuItem object mnExtractAllPngs3: TMenuItem
Action = actExtractPngs Action = actExtractPngs
end end
object N22: TMenuItem
Caption = '-'
end
object MenuItem2: TMenuItem
Action = actExtractTimsAll
end
object MenuItem3: TMenuItem
Action = actExtractPngsAll
end
end end
object mnOptions: TMenuItem object mnOptions: TMenuItem
Caption = '&Options' Caption = '&Options'
@@ -1056,11 +1065,20 @@ object frmMain: TfrmMain
OnExecute = actExtractTimsExecute OnExecute = actExtractTimsExecute
ShortCut = 8305 ShortCut = 8305
end end
object actExtractTimsAll: TAction
Caption = 'Extract all TIMs (&All Files)'
OnExecute = actExtractTimsAllExecute
ShortCut = 24689
end
object actExtractPngs: TAction object actExtractPngs: TAction
Caption = '&Extract all PNGs (This File)' Caption = '&Extract all PNGs (This File)'
OnExecute = actExtractPngsExecute OnExecute = actExtractPngsExecute
ShortCut = 8307 ShortCut = 8307
end end
object actExtractPngsAll: TAction
Caption = 'Extract all PNGs (All &Files)'
OnExecute = actExtractPngsAllExecute
end
object actChangeClutIdx: TAction object actChangeClutIdx: TAction
OnExecute = actChangeClutIdxExecute OnExecute = actChangeClutIdxExecute
end end

106
umain.pas
View File

@@ -28,6 +28,8 @@ type
actExtractTims: TAction; actExtractTims: TAction;
actChangeFile: TAction; actChangeFile: TAction;
actChangeBackColor: TAction; actChangeBackColor: TAction;
actExtractTimsAll: TAction;
actExtractPngsAll: TAction;
actShowFileInfo: TAction; actShowFileInfo: TAction;
actPngImport: TAction; actPngImport: TAction;
actStopScan: TAction; actStopScan: TAction;
@@ -50,6 +52,9 @@ type
dlgOpenFile: TOpenDialog; dlgOpenFile: TOpenDialog;
dlgSavePNG: TSavePictureDialog; dlgSavePNG: TSavePictureDialog;
dlgSaveFile: TSaveDialog; dlgSaveFile: TSaveDialog;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
N22: TMenuItem;
mnExtractAllPngs3: TMenuItem; mnExtractAllPngs3: TMenuItem;
mnExtractAllTims3: TMenuItem; mnExtractAllTims3: TMenuItem;
N21: TMenuItem; N21: TMenuItem;
@@ -117,8 +122,10 @@ type
procedure actCloseFileExecute(Sender: TObject); procedure actCloseFileExecute(Sender: TObject);
procedure actCloseFilesExecute(Sender: TObject); procedure actCloseFilesExecute(Sender: TObject);
procedure actExitExecute(Sender: TObject); procedure actExitExecute(Sender: TObject);
procedure actExtractPngsAllExecute(Sender: TObject);
procedure actExtractPngsExecute(Sender: TObject); procedure actExtractPngsExecute(Sender: TObject);
procedure actExtractTimExecute(Sender: TObject); procedure actExtractTimExecute(Sender: TObject);
procedure actExtractTimsAllExecute(Sender: TObject);
procedure actExtractTimsExecute(Sender: TObject); procedure actExtractTimsExecute(Sender: TObject);
procedure actOpenLabExecute(Sender: TObject); procedure actOpenLabExecute(Sender: TObject);
procedure actOpenRepoExecute(Sender: TObject); procedure actOpenRepoExecute(Sender: TObject);
@@ -372,6 +379,58 @@ begin
Close; Close;
end; 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); procedure TfrmMain.actExtractPngsExecute(Sender: TObject);
var var
I, OFFSET, BIT_MODE, SIZE: Integer; I, OFFSET, BIT_MODE, SIZE: Integer;
@@ -437,6 +496,49 @@ begin
FreeTIM(TIM); FreeTIM(TIM);
end; 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); procedure TfrmMain.actExtractTimsExecute(Sender: TObject);
var var
I, OFFSET, BIT_MODE, SIZE, MAGIC: Integer; I, OFFSET, BIT_MODE, SIZE, MAGIC: Integer;
@@ -839,6 +941,8 @@ begin
RemoveGridSelection; RemoveGridSelection;
cbbFiles.Enabled := (cbbFiles.Items.Count <> 0); cbbFiles.Enabled := (cbbFiles.Items.Count <> 0);
actExtractTimsAll.Enabled := cbbFiles.Enabled;
pnlList.Enabled := cbbFiles.Enabled; pnlList.Enabled := cbbFiles.Enabled;
actCloseFile.Enabled := cbbFiles.Enabled; actCloseFile.Enabled := cbbFiles.Enabled;
@@ -852,6 +956,8 @@ begin
actPngExport.Enabled := (Surf^ <> nil) and actReplaceTim.Enabled; actPngExport.Enabled := (Surf^ <> nil) and actReplaceTim.Enabled;
actPngImport.Enabled := actReplaceTim.Enabled; actPngImport.Enabled := actReplaceTim.Enabled;
actExtractTim.Enabled := actReplaceTim.Enabled; actExtractTim.Enabled := actReplaceTim.Enabled;
actExtractTims.Enabled := actReplaceTim.Enabled;
actExtractPngs.Enabled := actReplaceTim.Enabled;
pnlImageOptions.Enabled := actReplaceTim.Enabled; pnlImageOptions.Enabled := actReplaceTim.Enabled;
end; end;