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 206 by alloc, Sun May 27 23:31:26 2007 UTC vs.
Revision 215 by alloc, Tue Jun 12 20:31:54 2007 UTC

# Line 3 | Line 3 | unit TXMP;
3   interface
4  
5   uses
6 <  TypeDefs, _DataTypes, _FileTypes;
6 >  _FileTypes;
7  
8   type
9    TFile_TXMP = class(TFile)
10 <    protected
11 <      procedure InitDatLinks; override;
10 >    public
11        procedure InitDataFields; override;
13      procedure InitRawList; override;
12    end;
13  
14   implementation
15  
16   uses
17 <  ConnectionManager, Math;
20 <
21 < { TFile_SNDD }
22 <
23 < procedure TFile_TXMP.InitDatLinks;
24 < begin
25 <  SetLength(FDatLinks, 2);
26 <  FDatLinks[0].SrcOffset := $94;
27 <  FDatLinks[0].DestID := -1;
28 <  FDatLinks[0].PosDestExts := '*';
29 <  FDatLinks[1].SrcOffset := $98;
30 <  FDatLinks[1].DestID := -1;
31 <  FDatLinks[1].PosDestExts := 'TXMP';
32 < end;
17 >  ConnectionManager, Math, Classes, TypeDefs, _DataTypes;
18  
19 + { TFile_TXMP }
20  
21   procedure TFile_TXMP.InitDataFields;
22   var
23    tempi: Integer;
24    temps: String;
25 +  templist: TStringList;
26   begin
27 <  FDataFields := TBlock.Create(Self, 0, 'Base', '', nil);
27 >  inherited;
28 >  FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);
29 >  templist := TStringList.Create;
30    with FDataFields do
31    begin
32      AddField(TFileID, $00, 'FileID', '', nil);
33 +
34      AddField(TLevelID, $04, 'LevelID', '', nil);
35 +
36      tempi := 128;
37      AddField(TString, $08, 'FileName', '', @tempi);
38 <    tempi := 4;
39 <    AddField(TInt, $88, 'Flags', '', @tempi);
38 >
39 >    templist.Add('MipMapping enabled');
40 >    templist.Add('unknown');
41 >    templist.Add('U wrapping disabled');
42 >    templist.Add('V wrapping disabled');
43 >    templist.Add('EnvMapped/EnvMap');
44 >    templist.Add('unused');
45 >    templist.Add('Play anim back to back');
46 >    templist.Add('Random anim order + frame time');
47 >    AddField(TBitSet, $88, 'Flags1', '', @templist);
48 >
49 >    templist.Clear;
50 >    templist.Add('Random anim time offset');
51 >    templist.Add('High byte as EnvMap');
52 >    templist.Add('High byte as alpha');
53 >    templist.Add('Different alpha formula');
54 >    templist.Add('Data swapping (always set)');
55 >    templist.Add('used at runtime');
56 >    templist.Add('TXAN looping on/off');
57 >    templist.Add('16 bit blue');
58 >    AddField(TBitSet, $89, 'Flags2', '', @templist);
59 >
60 >    templist.Clear;
61 >    templist.Add('16 bit alpha');
62 >    templist.Add('16 bit red');
63 >    templist.Add('unknown');
64 >    templist.Add('unknown');
65 >    templist.Add('unknown');
66 >    templist.Add('unknown');
67 >    templist.Add('unknown');
68 >    templist.Add('unknown');
69 >    AddField(TBitSet, $8A, 'Flags3', '', @templist);
70 >
71 >    templist.Clear;
72 >    templist.Add('unknown');
73 >    templist.Add('unknown');
74 >    templist.Add('unknown');
75 >    templist.Add('unknown');
76 >    templist.Add('unknown');
77 >    templist.Add('unknown');
78 >    templist.Add('unknown');
79 >    templist.Add('unknown');
80 >    AddField(TBitSet, $8B, 'Flags4', '', @templist);
81 >
82      tempi := 2;
83      AddField(TInt, $8C, 'Width', '', @tempi);
84 +
85      tempi := 2;
86      AddField(TInt, $8E, 'Height', '', @tempi);
87 +
88      tempi := 4;
89      AddField(TInt, $90, 'StoreType', '', @tempi);
90 <    temps := 'TXAN';
90 >
91 >    temps := '*';
92      AddField(TLinkByID, $94, 'TXAN', '', @temps);
93 +
94      temps := 'TXMP';
95      AddField(TLinkByID, $98, 'TXMP', '', @temps);
96 +
97      AddField(TRawLink, $9C, 'RawLink', '', nil);
98 +
99      AddField(TRawLink, $A0, 'SepLink', '', nil);
100 +
101      tempi := $1C;
102      AddField(TUnused, $A4, 'Unused', '', @tempi);
103    end;
104 +  templist.Free;
105   end;
106  
107  
67 procedure TFile_TXMP.InitRawList;
68 var
69  link_pc:   Integer;
70  link_mac:  Integer;
71  x, y:      Word;
72  storetype: Byte;
73  datasize:  Integer;
74  mipmap:    Byte;
75
76  function GetImgSize(w,h, storetype: Integer): Integer;
77  begin
78    case storetype of
79      0, 1, 2:
80        Result := w*h*2;
81      8:
82        Result := w*h*4;
83      9:
84        Result :=  Max(1, w div 4) * Max(1, h div 4) * 8;
85    else
86      Result := -1;
87    end;
88  end;
89
90 begin
91  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $88, SizeOf(mipmap), @mipmap);
92  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8C, SizeOf(x), @x);
93  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8E, SizeOf(y), @y);
94  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $90, SizeOf(storetype), @storetype);
95  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $9C, 4, @link_pc);
96  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $A0, 4, @link_mac);
97
98  datasize := GetImgSize(x, y, storetype);
99  if (mipmap and $01) > 0 then
100  begin
101    repeat
102      x    := Max(x div 2, 1);
103      y    := Max(y div 2, 1);
104      datasize := datasize + GetImgSize(x, y, storetype);
105    until (x = 1) and (y = 1);
106  end;
107
108  SetLength(FRawParts, 1);
109  if ConManager.Connection[FConnectionID].DataOS = DOS_WIN then
110  begin
111    FRawParts[0].SrcOffset := $9C;
112    FRawParts[0].RawAddr   := link_pc;
113  end
114  else
115  begin
116    FRawParts[0].SrcOffset := $A0;
117    FRawParts[0].RawAddr   := link_mac;
118  end;
119  FRawParts[0].RawSize := datasize;
120  FRawParts[0].LocSep  := not (ConManager.Connection[FConnectionID].DataOS = DOS_WIN);
121 end;
122
108   end.
109  

Diff Legend

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