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 142 by alloc, Fri Mar 30 02:08:49 2007 UTC vs.
Revision 173 by alloc, Wed May 2 13:19:40 2007 UTC

# Line 24 | Line 24 | var
24   implementation
25   {$R *.dfm}
26   uses ABSMain, ABSDecUtil, Main,
27 <    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data, RawList;
27 >    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data, RawList,
28 >  Access_OniArchive;
29  
30   var
31    Converting:  Boolean = False;
# Line 44 | Line 45 | end;
45  
46  
47   procedure TForm_LevelDB.CreateLevel(Source, Target: String);
48 + const
49 +  EmptyBytes: Array[0..31] of Byte = (
50 +      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 );
51   var
52    DatHeader:        THeader;
53    FilesHeader:      TFilesMap;
# Line 199 | Line 203 | begin
203    Stream_Names := TMemoryStream.Create;
204    Stream_Dat   := TFileStream.Create(Target, fmCreate);
205    Stream_Raw   := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.raw'), fmCreate);
206 +  Stream_Raw.Write(EmptyBytes[0], 32);
207    if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
208 +  begin
209      Stream_Sep := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.sep'), fmCreate);
210 +    Stream_Sep.Write(EmptyBytes[0], 32);
211 +  end;
212 +
213  
214    DoStep('Creating header');
215    progress.Position      := 0;
# Line 229 | Line 238 | begin
238    for i := 0 to High(DatHeader.OSIdent) do
239      case Connection.DataOS of
240        DOS_WIN: DatHeader.OSIdent[i] := HeaderOSIdentWin[i];
241 <      DOS_MAC: DatHeader.OSIdent[i] := HeaderOSIdentMac[i];
241 >      DOS_MAC, DOS_WINDEMO: DatHeader.OSIdent[i] := HeaderOSIdentMac[i];
242        DOS_MACBETA: DatHeader.OSIdent[i] := HeaderOSIdentMacBeta[i];
243      end;
244    for i := 0 to High(DatHeader.GlobalIdent) do
# Line 270 | Line 279 | begin
279      begin
280        case Connection.DataOS of
281          DOS_WIN:     ExtensionsHeader[i].Ident := FileTypes[j].IdentWin;
282 <        DOS_WINDEMO: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
282 >        DOS_WINDEMO:
283 >            if FileTypes[j].Extension = 'SNDD' then
284 >              ExtensionsHeader[i].Ident := FileTypes[j].IdentWin
285 >            else
286 >              ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
287          DOS_MAC:     ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
288          DOS_MACBETA: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
289        end;
# Line 335 | Line 348 | begin
348              begin
349                RawLinks[i].RawAddr := Stream_Sep.Size;
350                Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size);
351 +              if (Stream_Sep.Size mod 32) > 0 then
352 +                Stream_Sep.Write(EmptyBytes[0], 32 - (Stream_Sep.Size mod 32));
353              end else begin
354                RawLinks[i].RawAddr := Stream_Raw.Size;
355                Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size);
356 +              if (Stream_Raw.Size mod 32) > 0 then
357 +                Stream_Raw.Write(EmptyBytes[0], 32 - (Stream_Raw.Size mod 32));
358              end;
359            end else
360              RawLinks[i].RawAddr := 0;
# Line 347 | Line 364 | begin
364        end;
365        DatFileStream.Seek(0, soFromBeginning);
366        Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size);
367 +      if (Stream_Body.Size mod 32) > 0 then
368 +      begin
369 +        ShowMessage(
370 +            IntToStr(FileID) + '-' + FileInfo.Name + '.' + FileInfo.Extension + #13#10 +
371 +            IntToStr(FileInfo.Size) + ' - 0x' + IntToHex(FileInfo.Size, 6) + ' - real: ' + IntToStr(DatFileStream.Size) + ' - 0x' + IntToHex(DatFileStream.Size, 6) + #13#10 +
372 +            IntToStr(Stream_Body.Size) + ' - 0x' + IntToHex(Stream_Body.Size, 6) );
373 +        Stream_Body.Write(EmptyBytes[0], 32 - (Stream_Body.Size mod 32));
374 +      end;
375      end
376      else
377        FilesHeader[FileID].DataAddr := 0;
# Line 377 | Line 402 | begin
402    for i := 0 to High(ExtensionsHeader) do
403      Stream_Dat.Write(ExtensionsHeader[i], SizeOf(ExtensionsHeader[i]));
404  
405 +  if (Stream_Dat.Size mod 32) > 0 then
406 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
407 +
408    DatHeader.DataSize  := Stream_Body.Size;
409    DatHeader.NamesSize := Stream_Names.Size;
410    DatHeader.DataAddr  := Stream_Dat.Size;
411  
412    Stream_Body.Seek(0, soFromBeginning);
413    Stream_Dat.CopyFrom(Stream_Body, Stream_Body.Size);
414 +
415 +  if (Stream_Dat.Size mod 32) > 0 then
416 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
417 +
418    DatHeader.NamesAddr := Stream_Dat.Size;
419    Stream_Names.Seek(0, soFromBeginning);
420    Stream_Dat.CopyFrom(Stream_Names, Stream_Names.Size);
# Line 463 | Line 495 | const
495      begin
496        DeleteFile(target);
497      end;
498 < end;
498 >  end;
499  
500  
501  
# Line 604 | Line 636 | begin
636    DoStep('Writing .dat-fileslist');
637    Application.ProcessMessages;
638  
639 +  TAccess_OniArchive(Connection).UnloadWhenUnused := False;
640 +
641    FileTime := Time;
642    Database.StartTransaction;
643    for FileID := 0 to Connection.GetFileCount - 1 do
# Line 701 | Line 735 | begin
735    btn_abortok.Default := True;
736  
737    converting := False;
738 +  TAccess_OniArchive(Connection).UnloadWhenUnused := True;
739  
740    Query.Close;
741    Query.Free;

Diff Legend

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