--- oup/current/Helper/LevelDB.pas 2007/02/25 17:20:22 113 +++ oup/current/Helper/LevelDB.pas 2007/03/23 17:14:40 127 @@ -78,10 +78,16 @@ var Connection: TDataAccess; ConRepMsg: TStatusMessages; + FileID: Integer; + Strings: TStrings; i, j: Integer; temps: String; + tempi: Integer; + tempb: Byte; FileInfo: TFileInfo; + DatLinks: TDatLinkList; + RawLinks: TRawDataList; DatFileStream, RawFileStream: TMemoryStream; const @@ -270,70 +276,62 @@ begin Application.ProcessMessages; FileTime := Time; - for i := 0 to DatHeader.Files - 1 do + for FileID := 0 to DatHeader.Files - 1 do begin - FileInfo := Connection.GetFileInfo(i); + FileInfo := Connection.GetFileInfo(FileID); for j := 0 to 3 do - FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j]; + FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j]; if FileInfo.Size > 0 then begin - // DatLinks:=; - FilesHeader[i].DataAddr := Stream_Body.Size + 8; + FilesHeader[FileID].DataAddr := Stream_Body.Size + 8; DatFileStream := TMemoryStream.Create; - Connection.LoadDatFile(i, DatFileStream); + Connection.LoadDatFile(FileID, TStream(DatFileStream)); DatFileStream.Seek(4, soFromBeginning); DatFileStream.Write(LevelID, 4); - if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then + DatLinks := Connection.GetDatLinks(FileID); + if Length(DatLinks) > 0 then + begin + for i := 0 to High(DatLinks) do + begin + DatFileStream.Seek(DatLinks[i].SrcOffset, soFromBeginning); + if DatLinks[i].DestID < 0 then + tempi := 0 + else + tempi := DatLinks[i].DestID * 256 + 1; + DatFileStream.Write(tempi, 4); + end; + end; + + RawLinks := Connection.GetRawList(FileID); + if Length(RawLinks) > 0 then begin - rawlist := OniDataConnection.GetRawList(i); - if Length(rawlist) > 0 then + for i := 0 to High(RawLinks) do begin - for j := 0 to High(rawlist) do + if RawLinks[i].RawSize > 0 then begin - if rawlist[j].raw_size > 0 then + RawFileStream := TMemoryStream.Create; + Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, TStream(RawFileStream)); + RawFileStream.Seek(0, soFromBeginning); + if RawLinks[i].LocSep then begin - if (UpperCase(fileinfo.Extension) = 'TXMP') and - ((Data[$88] and $01) > 0) then - begin - OniImage.LoadFromTXMP(Connection, i); - OniImage.GetMipMappedImage(rawdata); - rawlist[j].raw_size := OniImage.GetImageDataSize(True); - Data[$90] := $08; - Data[$89] := 32; -{ if data[$90]<>OniImage.StoreType then begin - data[$90]:=OniImage.StoreType; - data[$89]:=(data[$89] and $CF) or $20; - end; -} end - else - begin - SetLength(rawdata, rawlist[j].raw_size); - OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, @rawdata[0]); - end; - // data[$88]:=data[$88] and $FE; - - if rawlist[j].loc_sep then - begin - rawlist[j].raw_addr := Stream_Sep.Size; - Stream_Sep.Write(rawdata[0], Length(rawdata)); - end - else - begin - rawlist[j].raw_addr := Stream_Raw.Size; - Stream_Raw.Write(rawdata[0], Length(rawdata)); - end; - end - else - rawlist[j].raw_addr := 0; + RawLinks[i].RawAddr := Stream_Sep.Size; + Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size); + end else begin + RawLinks[i].RawAddr := Stream_Raw.Size; + Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size); + end; + end else + RawLinks[i].RawAddr := 0; + end; + end; + +{ Data[rawlist[j].src_offset + 0] := (rawlist[j].raw_addr) and $FF; Data[rawlist[j].src_offset + 1] := (rawlist[j].raw_addr shr 8) and $FF; Data[rawlist[j].src_offset + 2] := (rawlist[j].raw_addr shr 16) and $FF; Data[rawlist[j].src_offset + 3] := (rawlist[j].raw_addr shr 24) and $FF; - end; - end; - end; - +} Stream_Body.Write(Data[0], Length(Data)); // end