| 2 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 3 | 
   | 
 interface | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 4 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 5 | 
 < | 
 uses Math, Dialogs, Types, SysUtils, Classes, Data, ConnectionManager, TypeDefs; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 5 | 
 > | 
 uses Math, Dialogs, Types, SysUtils, Classes, Data, ConnectionManager, TypeDefs, | 
 
 
 
 
 
 | 6 | 
 > | 
   Imaging, ImagingTypes; | 
 
 
 
 
 
 
 
 
 
 
 
 | 7 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 8 | 
   | 
 type | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 9 | 
   | 
   TImgDataType = set of (DT_OniReverted, DT_Oni, DT_Decoded32); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 10 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 11 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 12 | 
   | 
 type | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 13 | 
   | 
   TOniImage = class | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 14 | 
   | 
   private | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 19 | 
   | 
     FDepth:     Byte; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 20 | 
   | 
     FStoreType: Byte; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 21 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 22 | 
 + | 
     FImage:     TImageData; | 
 
 
 
 
 
 
 
 
 | 23 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 24 | 
   | 
     function ResizeImage(oldx, oldy: Integer; img: TByteData): TByteData; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 25 | 
   | 
     procedure RevertImage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 26 | 
   | 
     procedure DecompressImage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 27 | 
   | 
   protected | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 28 | 
   | 
   public | 
 
 
 
 
 
 
 
 
 | 29 | 
 + | 
     property Image:     TImageData   Read FImage     Write FImage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 30 | 
   | 
     property Loaded:    Boolean      Read FLoaded    Write FLoaded; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 31 | 
   | 
     property DataType:  TImgDataType Read FDataType  Write FDataType; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 32 | 
   | 
     property Width:     Word         Read FWidth     Write FWidth; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 40 | 
   | 
     function LoadFromPSpc(ConnectionID, FileID: Integer): Boolean; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 41 | 
   | 
     function LoadFromTXMP(ConnectionID, FileID: Integer): Boolean; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 42 | 
   | 
     function LoadFromTXMB(ConnectionID, FileID: Integer): Boolean; | 
 
 
 
 
 
 
 
 
 | 43 | 
 + | 
     function GetImgSize(w,h, storetype: Integer): Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 44 | 
   | 
     function GetImageDataSize(fading: Boolean): Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 45 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 46 | 
   | 
     procedure DecodeImageTo32bit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 62 | 
   | 
 implementation | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 63 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 64 | 
   | 
 //uses Functions; | 
 
 
 
 
 
 
 
 
 
 
 
 | 65 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 60 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 | 65 | 
 > | 
 uses Img_DDSTypes; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 66 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 67 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 68 | 
   | 
 constructor TOniImage.Create; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 74 | 
   | 
   Self.FHeight    := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 75 | 
   | 
   Self.FDepth     := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 76 | 
   | 
   Self.FStoreType := 0; | 
 
 
 
 
 
 
 
 
 | 77 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 | 78 | 
 + | 
   InitImage(FImage); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 79 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 80 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 81 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 479 | 
   | 
 function TOniImage.LoadFromTXMP(ConnectionID, FileID: Integer): Boolean; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 480 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 481 | 
   | 
   img_addr: Integer; | 
 
 
 
 
 
 
 
 
 | 482 | 
 + | 
   data: TMemoryStream; | 
 
 
 
 
 
 
 
 
 | 483 | 
 + | 
   hdr: TDDSDXTHeader; | 
 
 
 
 
 
 
 
 
 | 484 | 
 + | 
   imginfo: Integer; | 
 
 
 
 
 
 
 
 
 | 485 | 
 + | 
   x,y, i: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 486 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 487 | 
   | 
   Result := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 488 | 
   | 
   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8C, SizeOf(Self.FWidth), @Self.FWidth); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 489 | 
   | 
   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8E, SizeOf(Self.FHeight), @Self.FHeight); | 
 
 
 
 
 
 
 
 
 
 
 
 | 490 | 
 < | 
   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(Self.FStoreType), | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 491 | 
 < | 
     @Self.FStoreType); | 
 
 
 
 
 
 
 
 
 
 | 490 | 
 > | 
   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(Self.FStoreType), @Self.FStoreType); | 
 
 
 
 
 
 | 491 | 
 > | 
   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(imginfo), @imginfo); | 
 
 
 
 
 
 
 
 
 
 
 
 | 492 | 
   | 
   if ConManager.Connection[ConnectionID].DataOS = DOS_WIN then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 493 | 
   | 
     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, SizeOf(img_addr), @img_addr) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 494 | 
   | 
   else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 496 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 497 | 
   | 
   case Self.FStoreType of | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 498 | 
   | 
     0, 1, 2: | 
 
 
 
 
 
 
 
 
 
 | 488 | 
 – | 
     begin | 
 
 
 
 
 
 
 
 
 
 | 489 | 
 – | 
       SetLength(Self.FData, Self.FWidth * Self.FHeight * 2); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 499 | 
   | 
       Self.FDepth := 16; | 
 
 
 
 
 
 
 
 
 
 | 491 | 
 – | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 500 | 
   | 
     8: | 
 
 
 
 
 
 
 
 
 
 | 493 | 
 – | 
     begin | 
 
 
 
 
 
 
 
 
 
 | 494 | 
 – | 
       SetLength(Self.FData, Self.FWidth * Self.FHeight * 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 501 | 
   | 
       Self.FDepth := 32; | 
 
 
 
 
 
 
 
 
 
 | 496 | 
 – | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 502 | 
   | 
     9: | 
 
 
 
 
 
 
 
 
 
 | 498 | 
 – | 
     begin | 
 
 
 
 
 
 
 
 
 
 | 499 | 
 – | 
       SetLength(Self.FData, Self.FWidth * Self.FHeight div 2); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 503 | 
   | 
       Self.FDepth := 16; | 
 
 
 
 
 
 
 
 
 
 | 501 | 
 – | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 504 | 
   | 
     else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 505 | 
   | 
       Result := False; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 506 | 
   | 
       Exit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 507 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 508 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 509 | 
   | 
   if ConManager.Connection[ConnectionID].DataOS = DOS_WIN then | 
 
 
 
 
 
 
 
 
 | 510 | 
 + | 
     ConManager.Connection[ConnectionID].LoadRawFile(fileid, $9C, TStream(data)) | 
 
 
 
 
 
 
 
 
 | 511 | 
 + | 
   else | 
 
 
 
 
 
 
 
 
 | 512 | 
 + | 
     ConManager.Connection[ConnectionID].LoadRawFile(fileid, $A0, TStream(data)); | 
 
 
 
 
 
 
 
 
 | 513 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 | 514 | 
 + | 
   with hdr do | 
 
 
 
 
 
 
 
 
 | 515 | 
 + | 
   begin | 
 
 
 
 
 
 
 
 
 | 516 | 
 + | 
     FOURCC := 'DDS '; | 
 
 
 
 
 
 
 
 
 | 517 | 
 + | 
     with SURFACEDESC2 do | 
 
 
 
 
 
 
 
 
 | 518 | 
 + | 
     begin | 
 
 
 
 
 
 
 
 
 | 519 | 
 + | 
       Size := 124; | 
 
 
 
 
 
 
 
 
 | 520 | 
 + | 
       Flags := DDSD_CAPS or DDSD_PIXELFORMAT or DDSD_WIDTH or DDSD_HEIGHT; | 
 
 
 
 
 
 
 
 
 | 521 | 
 + | 
       if FStoreType = 9 then | 
 
 
 
 
 
 
 
 
 | 522 | 
 + | 
         Flags := Flags or DDSD_LINEARSIZE | 
 
 
 
 
 
 
 
 
 | 523 | 
 + | 
       else | 
 
 
 
 
 
 
 
 
 | 524 | 
 + | 
         Flags := Flags or DDSD_PITCH; | 
 
 
 
 
 
 
 
 
 | 525 | 
 + | 
       if (imginfo and $01) > 0 then | 
 
 
 
 
 
 
 
 
 | 526 | 
 + | 
         Flags := Flags or DDSD_MIPMAPCOUNT; | 
 
 
 
 
 
 
 
 
 | 527 | 
 + | 
       Height := FHeight; | 
 
 
 
 
 
 
 
 
 | 528 | 
 + | 
       Width := FWidth; | 
 
 
 
 
 
 
 
 
 | 529 | 
 + | 
       if FStoreType = 9 then | 
 
 
 
 
 
 
 
 
 | 530 | 
 + | 
         PitchOrLinearSize := FWidth * FHeight div 2 | 
 
 
 
 
 
 
 
 
 | 531 | 
 + | 
       else | 
 
 
 
 
 
 
 
 
 | 532 | 
 + | 
         PitchOrLinearSize := FWidth * FDepth div 2; | 
 
 
 
 
 
 
 
 
 | 533 | 
 + | 
       Depth := 0; | 
 
 
 
 
 
 
 
 
 | 534 | 
 + | 
       MipMapCount := 1; | 
 
 
 
 
 
 
 
 
 | 535 | 
 + | 
       x := FWidth; | 
 
 
 
 
 
 
 
 
 | 536 | 
 + | 
       y := FHeight; | 
 
 
 
 
 
 
 
 
 | 537 | 
 + | 
       while (x > 1) and (y > 1) do | 
 
 
 
 
 
 
 
 
 | 538 | 
 + | 
       begin | 
 
 
 
 
 
 
 
 
 | 539 | 
 + | 
         x := x div 2; | 
 
 
 
 
 
 
 
 
 | 540 | 
 + | 
         y := y div 2; | 
 
 
 
 
 
 
 
 
 | 541 | 
 + | 
         Inc(MipMapCount); | 
 
 
 
 
 
 
 
 
 | 542 | 
 + | 
       end; | 
 
 
 
 
 
 
 
 
 | 543 | 
 + | 
       for i := 1 to 11 do | 
 
 
 
 
 
 
 
 
 | 544 | 
 + | 
         Reserved[i] := 0; | 
 
 
 
 
 
 
 
 
 | 545 | 
 + | 
       with PIXELFORMAT do | 
 
 
 
 
 
 
 
 
 | 546 | 
 + | 
       begin | 
 
 
 
 
 
 
 
 
 | 547 | 
 + | 
         Size := 32; | 
 
 
 
 
 
 
 
 
 | 548 | 
 + | 
         if FStoreType = 9 then | 
 
 
 
 
 
 
 
 
 | 549 | 
 + | 
           Flags := DDPF_FOURCC | 
 
 
 
 
 
 
 
 
 | 550 | 
 + | 
         else | 
 
 
 
 
 
 
 
 
 | 551 | 
 + | 
           Flags := DDPF_RGB; | 
 
 
 
 
 
 
 
 
 | 552 | 
 + | 
       end; | 
 
 
 
 
 
 
 
 
 | 553 | 
 + | 
     end; | 
 
 
 
 
 
 
 
 
 | 554 | 
 + | 
   end;  | 
 
 
 
 
 
 
 
 
 | 555 | 
 + | 
   LoadImageFromStream(data, FImage); | 
 
 
 
 
 
 
 
 
 | 556 | 
 + | 
 { | 
 
 
 
 
 
 
 
 
 | 557 | 
 + | 
   if ConManager.Connection[ConnectionID].DataOS = DOS_WIN then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 558 | 
   | 
     ConManager.Connection[ConnectionID].LoadRawFile(fileid, $9C, FData) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 559 | 
   | 
   else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 560 | 
   | 
     ConManager.Connection[ConnectionID].LoadRawFile(fileid, $A0, FData); | 
 
 
 
 
 
 
 
 
 
 
 
 | 561 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 | 561 | 
 > | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 | 562 | 
   | 
   Self.FDataType := [DT_OniReverted, DT_Oni]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 563 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 564 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 633 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 634 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 635 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 636 | 
 + | 
 function TOniImage.GetImgSize(w,h, storetype: Integer): Integer; | 
 
 
 
 
 
 
 
 
 | 637 | 
 + | 
 begin | 
 
 
 
 
 
 
 
 
 | 638 | 
 + | 
   case storetype of | 
 
 
 
 
 
 
 
 
 | 639 | 
 + | 
     0, 1, 2: | 
 
 
 
 
 
 
 
 
 | 640 | 
 + | 
       Result := w*h*2; | 
 
 
 
 
 
 
 
 
 | 641 | 
 + | 
     8: | 
 
 
 
 
 
 
 
 
 | 642 | 
 + | 
       Result := w*h*4; | 
 
 
 
 
 
 
 
 
 | 643 | 
 + | 
     9: | 
 
 
 
 
 
 
 
 
 | 644 | 
 + | 
       Result := Max(1, w div 4) * Max(1, h div 4) * 8; | 
 
 
 
 
 
 
 
 
 | 645 | 
 + | 
   else | 
 
 
 
 
 
 
 
 
 | 646 | 
 + | 
     Result := -1; | 
 
 
 
 
 
 
 
 
 | 647 | 
 + | 
   end; | 
 
 
 
 
 
 
 
 
 | 648 | 
 + | 
 end; | 
 
 
 
 
 
 
 
 
 | 649 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 650 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 651 | 
   | 
 function TOniImage.GetImageDataSize(fading: Boolean): Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 652 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 653 | 
   | 
   size: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 654 | 
   | 
   x, y: Word; | 
 
 
 
 
 
 
 
 
 
 | 591 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 592 | 
 – | 
   function GetImgSize(w,h, storetype: Integer): Integer; | 
 
 
 
 
 
 
 
 
 
 | 593 | 
 – | 
   begin | 
 
 
 
 
 
 
 
 
 
 | 594 | 
 – | 
     case storetype of | 
 
 
 
 
 
 
 
 
 
 | 595 | 
 – | 
       0, 1, 2: | 
 
 
 
 
 
 
 
 
 
 | 596 | 
 – | 
         Result := w*h*2; | 
 
 
 
 
 
 
 
 
 
 | 597 | 
 – | 
       8: | 
 
 
 
 
 
 
 
 
 
 | 598 | 
 – | 
         Result := w*h*4; | 
 
 
 
 
 
 
 
 
 
 | 599 | 
 – | 
       9: | 
 
 
 
 
 
 
 
 
 
 | 600 | 
 – | 
         Result :=  Max(1, w div 4) * Max(1, h div 4) * 8; | 
 
 
 
 
 
 
 
 
 
 | 601 | 
 – | 
     else | 
 
 
 
 
 
 
 
 
 
 | 602 | 
 – | 
       Result := -1; | 
 
 
 
 
 
 
 
 
 
 | 603 | 
 – | 
     end; | 
 
 
 
 
 
 
 
 
 
 | 604 | 
 – | 
   end; | 
 
 
 
 
 
 
 
 
 
 | 605 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 655 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 656 | 
   | 
   x    := Self.FWidth; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 657 | 
   | 
   y    := Self.FHeight; |