ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Helper/LevelDB.pas
(Generate patch)

Comparing oup/current/Helper/LevelDB.pas (file contents):
Revision 113 by alloc, Sun Feb 25 17:20:22 2007 UTC vs.
Revision 131 by alloc, Wed Mar 28 01:20:26 2007 UTC

# Line 78 | Line 78 | var
78    Connection: TDataAccess;
79    ConRepMsg:  TStatusMessages;
80  
81 +  FileID:     Integer;
82 +
83    Strings:    TStrings;
84    i, j:       Integer;
85    temps:      String;
86 +  tempi:      Integer;
87 +  tempb:      Byte;
88    FileInfo:   TFileInfo;
89 +  DatLinks:   TDatLinkList;
90 +  RawLinks:   TRawDataList;
91  
92    DatFileStream, RawFileStream: TMemoryStream;
93   const
# Line 145 | Line 151 | begin
151        begin
152          ShowMessage('Couldn''t delete file. Aborting');
153          Exit;
148      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then
149      begin
150        ShowMessage('Couldn''t delete file. Aborting');
151        Exit;
152      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then
153      begin
154        ShowMessage('Couldn''t delete file. Aborting');
155        Exit;
154        end;
155 +      if FileExists(AnsiReplaceStr(Target, '.dat', '.raw')) then
156 +        if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then
157 +        begin
158 +          ShowMessage('Couldn''t delete file. Aborting');
159 +          Exit;
160 +        end;
161 +      if FileExists(AnsiReplaceStr(Target, '.dat', '.sep')) then
162 +        if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
163 +          if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then
164 +          begin
165 +            ShowMessage('Couldn''t delete file. Aborting');
166 +            Exit;
167 +          end;
168      end else begin
169        ShowMessage('Aborting');
170        Exit;
# Line 270 | Line 281 | begin
281    Application.ProcessMessages;
282  
283    FileTime := Time;
284 <  for i := 0 to DatHeader.Files - 1 do
284 >  for FileID := 0 to DatHeader.Files - 1 do
285    begin
286 <    FileInfo := Connection.GetFileInfo(i);
286 >    FileInfo := Connection.GetFileInfo(FileID);
287      for j := 0 to 3 do
288 <      FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j];
288 >      FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j];
289      if FileInfo.Size > 0 then
290      begin
291 <      //        DatLinks:=;
281 <      FilesHeader[i].DataAddr := Stream_Body.Size + 8;
291 >      FilesHeader[FileID].DataAddr := Stream_Body.Size + 8;
292        DatFileStream := TMemoryStream.Create;
293 <      Connection.LoadDatFile(i, DatFileStream);
293 >      Connection.LoadDatFile(FileID, TStream(DatFileStream));
294        DatFileStream.Seek(4, soFromBeginning);
295        DatFileStream.Write(LevelID, 4);
296  
297 <      if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then
297 >      DatLinks := Connection.GetDatLinks(FileID);
298 >      if Length(DatLinks) > 0 then
299 >      begin
300 >        for i := 0 to High(DatLinks) do
301 >        begin
302 >          DatFileStream.Seek(DatLinks[i].SrcOffset, soFromBeginning);
303 >          if DatLinks[i].DestID < 0 then
304 >            tempi := 0
305 >          else
306 >            tempi := DatLinks[i].DestID * 256 + 1;
307 >          DatFileStream.Write(tempi, 4);
308 >        end;
309 >      end;
310 >
311 >      RawLinks := Connection.GetRawList(FileID);
312 >      if Length(RawLinks) > 0 then
313        begin
314 <        rawlist := OniDataConnection.GetRawList(i);
290 <        if Length(rawlist) > 0 then
314 >        for i := 0 to High(RawLinks) do
315          begin
316 <          for j := 0 to High(rawlist) do
316 >          if RawLinks[i].RawSize > 0 then
317            begin
318 <            if rawlist[j].raw_size > 0 then
318 >            RawFileStream := TMemoryStream.Create;
319 >            Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, TStream(RawFileStream));
320 >            RawFileStream.Seek(0, soFromBeginning);
321 >            if RawLinks[i].LocSep then
322              begin
323 <              if (UpperCase(fileinfo.Extension) = 'TXMP') and
324 <                ((Data[$88] and $01) > 0) then
325 <              begin
326 <                OniImage.LoadFromTXMP(Connection, i);
327 <                OniImage.GetMipMappedImage(rawdata);
328 <                rawlist[j].raw_size := OniImage.GetImageDataSize(True);
329 <                Data[$90] := $08;
330 <                Data[$89] := 32;
331 < {                  if data[$90]<>OniImage.StoreType then begin
332 <                    data[$90]:=OniImage.StoreType;
306 <                    data[$89]:=(data[$89] and $CF) or $20;
307 <                  end;
308 < }                end
309 <              else
310 <              begin
311 <                SetLength(rawdata, rawlist[j].raw_size);
312 <                OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, @rawdata[0]);
313 <              end;
314 <              //                data[$88]:=data[$88] and $FE;
315 <
316 <              if rawlist[j].loc_sep then
317 <              begin
318 <                rawlist[j].raw_addr := Stream_Sep.Size;
319 <                Stream_Sep.Write(rawdata[0], Length(rawdata));
320 <              end
321 <              else
322 <              begin
323 <                rawlist[j].raw_addr := Stream_Raw.Size;
324 <                Stream_Raw.Write(rawdata[0], Length(rawdata));
325 <              end;
326 <            end
327 <            else
328 <              rawlist[j].raw_addr := 0;
329 <            Data[rawlist[j].src_offset + 0] := (rawlist[j].raw_addr) and $FF;
330 <            Data[rawlist[j].src_offset + 1] := (rawlist[j].raw_addr shr 8) and $FF;
331 <            Data[rawlist[j].src_offset + 2] := (rawlist[j].raw_addr shr 16) and $FF;
332 <            Data[rawlist[j].src_offset + 3] := (rawlist[j].raw_addr shr 24) and $FF;
333 <          end;
323 >              RawLinks[i].RawAddr := Stream_Sep.Size;
324 >              Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size);
325 >            end else begin
326 >              RawLinks[i].RawAddr := Stream_Raw.Size;
327 >              Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size);
328 >            end;
329 >          end else
330 >            RawLinks[i].RawAddr := 0;
331 >          DatFileStream.Seek(RawLinks[i].SrcOffset, soFromBeginning);
332 >          DatFileStream.Write(RawLinks[i].RawAddr, 4);
333          end;
334        end;
335 <
336 <      Stream_Body.Write(Data[0], Length(Data));
338 <      //
335 >      DatFileStream.Seek(0, soFromBeginning);
336 >      Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size);
337      end
338      else
339        FilesHeader[i].DataAddr := 0;
# Line 350 | Line 348 | begin
348      FilesHeader[i].FileSize := fileinfo.Size;
349      FilesHeader[i].FileType := fileinfo.FileType;
350  
351 <    if ((i mod 10) = 0) and (i >= 100) then
351 >    if ((FileID mod 10) = 0) and (FileID >= 100) then
352        lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
353 <        (Time - FileTime) / i * (progress.Max - i + 1) * 1.1, TimeFormat );
354 <    progress.Position := i + 1;
355 <    lbl_progress.Caption := 'Files done: ' + IntToStr(i + 1) + '/' + IntToStr(progress.Max);
353 >        (Time - FileTime) / FileID * (progress.Max - FileID + 1) * 1.1, TimeFormat );
354 >    progress.Position := FileID + 1;
355 >    lbl_progress.Caption := 'Files done: ' + IntToStr(FileID + 1) + '/' + IntToStr(progress.Max);
356      Application.ProcessMessages;
357    end;
358  
# Line 382 | Line 380 | begin
380    Stream_Body.Free;
381    Stream_Names.Free;
382    Stream_Raw.Free;
383 <  if OniDataConnection.OSisMac then
383 >
384 >  if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
385      Stream_Sep.Free;
386  
387    progress.Position      := progress.Max;
# Line 398 | Line 397 | begin
397  
398    converting := False;
399  
400 <  CloseDataConnection(DataConnections[conIndex]);
400 > //  CloseDataConnection(DataConnections[conIndex]);
401   end;
402  
403  
# Line 408 | Line 407 | procedure TForm_LevelDB.HandleFile;
407   var
408    i: Byte;
409   begin
410 <  for i := 1 to Length(ConvertHandlers) do
410 > {  for i := 1 to Length(ConvertHandlers) do
411      if UpperCase(ConvertHandlers[i].Ext) = UpperCase(ext) then
412        if ConvertHandlers[i].needed then
413        begin
# Line 417 | Line 416 | begin
416        end
417        else
418          Break;
419 < end;
419 > }end;
420  
421  
422  
423  
424   procedure TForm_LevelDB.CreateDatabase(Source, target: String);
425 + {
426   var
427    DataBase:    TABSDatabase;
428    Query:       TABSQuery;
# Line 454 | Line 454 | const
454      else
455        group_progress.Caption := 'Creating DB (FINISHED)';
456    end;
457 + }
458  
459   begin
460 <  if CreateDataConnection(Source, ODB_Dat) = nil then
460 > {  if CreateDataConnection(Source, ODB_Dat) = nil then
461    begin
462      ShowMessage('Could not connect to .dat-file');
463      Exit;
# Line 659 | Line 660 | begin
660    database.Free;
661  
662    CloseDataConnection(DataConnections[conIndex]);
663 + }
664   end;
665  
666  
667  
668  
669 < procedure TForm_LevelDB.stop_convert;
669 > procedure TForm_LevelDB.StopConvert;
670   begin
671 <  btn_abortok.Caption := '&Close';
671 > {  btn_abortok.Caption := '&Close';
672    btn_abortok.Default := True;
673    converting := False;
674    lbl_estimation.Caption := 'ABORTED';
# Line 677 | Line 679 | begin
679    begin
680      DeleteFile(loaded_filename);
681    end;
682 < end;
682 > }end;
683  
684  
685  
# Line 700 | Line 702 | end;
702  
703  
704  
705 <
705 > {
706   procedure InsertDatLinkToDB(fileid: LongWord; offset: LongWord);
707   var
708    link: LongWord;
# Line 1732 | Line 1734 | begin
1734    begin
1735    end;
1736   end;
1737 + }
1738  
1739  
1740 <
1738 <
1740 > {
1741   procedure InsertHandler(ext: String; needed: Boolean; handler: THandler);
1742   begin
1743    SetLength(ConvertHandlers, Length(ConvertHandlers) + 1);
# Line 1743 | Line 1745 | begin
1745    ConvertHandlers[High(ConvertHandlers)].needed  := needed;
1746    ConvertHandlers[High(ConvertHandlers)].handler := handler;
1747   end;
1748 <
1748 > }
1749   begin
1750 <  InsertHandler('ABNA', False, nil);
1750 > {  InsertHandler('ABNA', False, nil);
1751    //  InsertHandler('AGDB',True,AGDB);
1752    InsertHandler('AGDB', False, nil);
1753    InsertHandler('AGQC', False, nil);
# Line 1843 | Line 1845 | begin
1845    InsertHandler('WMM_', False, nil);
1846    InsertHandler('WMMB', True, WMMB);
1847    InsertHandler('WPGE', True, WPGE);
1848 < end.
1848 > }end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)