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 120 by alloc, Fri Mar 23 00:59:01 2007 UTC

# Line 1 | Line 1
1 + {$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
2 + {$MINSTACKSIZE $00004000}
3 + {$MAXSTACKSIZE $00100000}
4 + {$IMAGEBASE $00400000}
5 + {$APPTYPE GUI}
6 + {$WARN SYMBOL_DEPRECATED ON}
7 + {$WARN SYMBOL_LIBRARY ON}
8 + {$WARN SYMBOL_PLATFORM ON}
9 + {$WARN SYMBOL_EXPERIMENTAL ON}
10 + {$WARN UNIT_LIBRARY ON}
11 + {$WARN UNIT_PLATFORM ON}
12 + {$WARN UNIT_DEPRECATED ON}
13 + {$WARN UNIT_EXPERIMENTAL ON}
14 + {$WARN HRESULT_COMPAT ON}
15 + {$WARN HIDING_MEMBER ON}
16 + {$WARN HIDDEN_VIRTUAL ON}
17 + {$WARN GARBAGE ON}
18 + {$WARN BOUNDS_ERROR ON}
19 + {$WARN ZERO_NIL_COMPAT ON}
20 + {$WARN STRING_CONST_TRUNCED ON}
21 + {$WARN FOR_LOOP_VAR_VARPAR ON}
22 + {$WARN TYPED_CONST_VARPAR ON}
23 + {$WARN ASG_TO_TYPED_CONST ON}
24 + {$WARN CASE_LABEL_RANGE ON}
25 + {$WARN FOR_VARIABLE ON}
26 + {$WARN CONSTRUCTING_ABSTRACT ON}
27 + {$WARN COMPARISON_FALSE ON}
28 + {$WARN COMPARISON_TRUE ON}
29 + {$WARN COMPARING_SIGNED_UNSIGNED ON}
30 + {$WARN COMBINING_SIGNED_UNSIGNED ON}
31 + {$WARN UNSUPPORTED_CONSTRUCT ON}
32 + {$WARN FILE_OPEN ON}
33 + {$WARN FILE_OPEN_UNITSRC ON}
34 + {$WARN BAD_GLOBAL_SYMBOL ON}
35 + {$WARN DUPLICATE_CTOR_DTOR ON}
36 + {$WARN INVALID_DIRECTIVE ON}
37 + {$WARN PACKAGE_NO_LINK ON}
38 + {$WARN PACKAGED_THREADVAR ON}
39 + {$WARN IMPLICIT_IMPORT ON}
40 + {$WARN HPPEMIT_IGNORED ON}
41 + {$WARN NO_RETVAL ON}
42 + {$WARN USE_BEFORE_DEF ON}
43 + {$WARN FOR_LOOP_VAR_UNDEF ON}
44 + {$WARN UNIT_NAME_MISMATCH ON}
45 + {$WARN NO_CFG_FILE_FOUND ON}
46 + {$WARN IMPLICIT_VARIANTS ON}
47 + {$WARN UNICODE_TO_LOCALE ON}
48 + {$WARN LOCALE_TO_UNICODE ON}
49 + {$WARN IMAGEBASE_MULTIPLE ON}
50 + {$WARN SUSPICIOUS_TYPECAST ON}
51 + {$WARN PRIVATE_PROPACCESSOR ON}
52 + {$WARN UNSAFE_TYPE OFF}
53 + {$WARN UNSAFE_CODE OFF}
54 + {$WARN UNSAFE_CAST OFF}
55 + {$WARN OPTION_TRUNCATED ON}
56 + {$WARN WIDECHAR_REDUCED ON}
57 + {$WARN DUPLICATES_IGNORED ON}
58 + {$WARN UNIT_INIT_SEQ ON}
59 + {$WARN LOCAL_PINVOKE ON}
60 + {$WARN MESSAGE_DIRECTIVE ON}
61   unit LevelDB;
62   interface
63   uses
# Line 78 | Line 138 | var
138    Connection: TDataAccess;
139    ConRepMsg:  TStatusMessages;
140  
141 +  FileID:     Integer;
142 +
143    Strings:    TStrings;
144    i, j:       Integer;
145    temps:      String;
146 +  tempi:      Integer;
147 +  tempb:      Byte;
148    FileInfo:   TFileInfo;
149 +  DatLinks:   TDatLinkList;
150 +  RawLinks:   TRawDataList;
151  
152    DatFileStream, RawFileStream: TMemoryStream;
153   const
# Line 270 | Line 336 | begin
336    Application.ProcessMessages;
337  
338    FileTime := Time;
339 <  for i := 0 to DatHeader.Files - 1 do
339 >  for FileID := 0 to DatHeader.Files - 1 do
340    begin
341 <    FileInfo := Connection.GetFileInfo(i);
341 >    FileInfo := Connection.GetFileInfo(FileID);
342      for j := 0 to 3 do
343 <      FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j];
343 >      FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j];
344      if FileInfo.Size > 0 then
345      begin
346 <      //        DatLinks:=;
281 <      FilesHeader[i].DataAddr := Stream_Body.Size + 8;
346 >      FilesHeader[FileID].DataAddr := Stream_Body.Size + 8;
347        DatFileStream := TMemoryStream.Create;
348 <      Connection.LoadDatFile(i, DatFileStream);
348 >      Connection.LoadDatFile(FileID, TStream(DatFileStream));
349        DatFileStream.Seek(4, soFromBeginning);
350        DatFileStream.Write(LevelID, 4);
351  
352 <      if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then
352 >      DatLinks := Connection.GetDatLinks(FileID);
353 >      if Length(DatLinks) > 0 then
354        begin
355 <        rawlist := OniDataConnection.GetRawList(i);
290 <        if Length(rawlist) > 0 then
355 >        for i := 0 to High(DatLinks) do
356          begin
357 <          for j := 0 to High(rawlist) do
357 >          DatFileStream.Seek(DatLinks[i].SrcOffset, soFromBeginning);
358 >          if DatLinks[i].DestID < 0 then
359 >            tempi := 0
360 >          else
361 >            tempi := DatLinks[i].DestID * 256 + 1;
362 >          DatFileStream.Write(tempi, 4);
363 >        end;
364 >      end;
365 >
366 >      RawLinks := Connection.GetRawList(FileID);
367 >      if Length(RawLinks) > 0 then
368 >      begin
369 >        for i := 0 to High(RawLinks) do
370 >        begin
371 >          if RawLinks[i].RawSize > 0 then
372            begin
373 +            RawFileStream := TMemoryStream.Create;
374 +            if UpperCase(fileinfo.Extension) = 'TXMP' then
375 +            begin
376 +              DatFileStream.Seek($88, soFromBeginning);
377 +              DatFileStream.Read(tempb, 1);
378 +              if (tempb and $01) > 0 then
379 +              begin
380 +                OniImage.Load(Connection.ConnectionID, FileID);
381 +                if not OniImage.GetMipMappedImage(TStream(RawFileStream)) then
382 +                begin
383 +                  ShowMessage('MipMapping-Error');
384 +                  RawFileStream.Seek(0, soFromBeginning);
385 +                  tempb := tempb and $FE;
386 +                  DatFileStream.Seek($88, soFromBeginning);
387 +                  DatFileStream.Write(tempb, 1);
388 +                  OniImage.Load(Connection.ConnectionID, FileID);
389 +                  OniImage.GetAsData(TStream(RawFileStream));
390 +                end else
391 +                begin
392 +                  // Change of Depth($89), Storetype ($90)
393 +                  DatFileStream.Seek($89, soFromBeginning);
394 +                  DatFileStream.Read(tempb, 1);
395 +
396 +                  DatFileStream.Seek($90, soFromBeginning);
397 +                  DatFileStream.Read(tempb, 1);
398 +                  Exit;
399 +                end;
400 +              end else
401 +                OniImage.GetAsData(TStream(RawFileStream));
402 +            end else begin
403 +              Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, TStream(RawFileStream));
404 +            end;
405 +            RawFileStream.Seek(0, soFromBeginning);
406 +          end else
407 +            RawLinks[i].RawAddr := 0;
408 +        end;
409 +      end;
410 +
411 + {
412              if rawlist[j].raw_size > 0 then
413              begin
414                if (UpperCase(fileinfo.Extension) = 'TXMP') and
# Line 301 | Line 419 | begin
419                  rawlist[j].raw_size := OniImage.GetImageDataSize(True);
420                  Data[$90] := $08;
421                  Data[$89] := 32;
422 < {                  if data[$90]<>OniImage.StoreType then begin
422 > (*                  if data[$90]<>OniImage.StoreType then begin
423                      data[$90]:=OniImage.StoreType;
424                      data[$89]:=(data[$89] and $CF) or $20;
425                    end;
426 < }                end
426 > *)                end
427                else
428                begin
429                  SetLength(rawdata, rawlist[j].raw_size);
# Line 330 | Line 448 | begin
448              Data[rawlist[j].src_offset + 1] := (rawlist[j].raw_addr shr 8) and $FF;
449              Data[rawlist[j].src_offset + 2] := (rawlist[j].raw_addr shr 16) and $FF;
450              Data[rawlist[j].src_offset + 3] := (rawlist[j].raw_addr shr 24) and $FF;
451 <          end;
334 <        end;
335 <      end;
336 <
451 > }
452        Stream_Body.Write(Data[0], Length(Data));
453        //
454      end

Diff Legend

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