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

Comparing oup/current/FileClasses/TXMP.pas (file contents):
Revision 214 by alloc, Tue Jun 12 17:35:56 2007 UTC vs.
Revision 215 by alloc, Tue Jun 12 20:31:54 2007 UTC

# Line 7 | Line 7 | uses
7  
8   type
9    TFile_TXMP = class(TFile)
10    protected
11      procedure InitDatLinks; override;
12      procedure InitRawList; override;
10      public
11        procedure InitDataFields; override;
12    end;
# Line 108 | Line 105 | begin
105   end;
106  
107  
111 procedure TFile_TXMP.InitDatLinks;
112 begin
113  SetLength(FDatLinks, 2);
114  FDatLinks[0].SrcOffset := $94;
115  FDatLinks[0].DestID := GetDatLinkValue(FFileStream, $94);
116  FDatLinks[0].PosDestExts := '*';
117  FDatLinks[1].SrcOffset := $98;
118  FDatLinks[1].DestID := GetDatLinkValue(FFileStream, $98);
119  FDatLinks[1].PosDestExts := 'TXMP';
120 end;
121
122
123 procedure TFile_TXMP.InitRawList;
124 var
125  link_pc:   Integer;
126  link_mac:  Integer;
127  x, y:      Word;
128  storetype: Byte;
129  datasize:  Integer;
130  mipmap:    Byte;
131
132  function GetImgSize(w,h, storetype: Integer): Integer;
133  begin
134    case storetype of
135      0, 1, 2:
136        Result := w*h*2;
137      8:
138        Result := w*h*4;
139      9:
140        Result :=  Max(1, w div 4) * Max(1, h div 4) * 8;
141    else
142      Result := -1;
143    end;
144  end;
145
146 begin
147  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $88, SizeOf(mipmap), @mipmap);
148  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8C, SizeOf(x), @x);
149  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8E, SizeOf(y), @y);
150  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $90, SizeOf(storetype), @storetype);
151  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $9C, 4, @link_pc);
152  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $A0, 4, @link_mac);
153
154  datasize := GetImgSize(x, y, storetype);
155  if (mipmap and $01) > 0 then
156  begin
157    repeat
158      x    := Max(x div 2, 1);
159      y    := Max(y div 2, 1);
160      datasize := datasize + GetImgSize(x, y, storetype);
161    until (x = 1) and (y = 1);
162  end;
163
164  SetLength(FRawParts, 1);
165  if ConManager.Connection[FConnectionID].DataOS = DOS_WIN then
166  begin
167    FRawParts[0].SrcOffset := $9C;
168    FRawParts[0].RawAddr   := link_pc;
169  end
170  else
171  begin
172    FRawParts[0].SrcOffset := $A0;
173    FRawParts[0].RawAddr   := link_mac;
174  end;
175  FRawParts[0].RawSize := datasize;
176  FRawParts[0].LocSep  := not (ConManager.Connection[FConnectionID].DataOS = DOS_WIN);
177 end;
178
108   end.
109  

Diff Legend

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