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 248 by alloc, Mon Nov 26 11:02:28 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;
9 >  TFile_TXMP = class(TResource)
10 >    public
11        procedure InitDataFields; override;
12 <      procedure InitRawList; override;
12 >      procedure InitEditor; override;
13    end;
14  
15   implementation
16  
17   uses
18 <  ConnectionManager, Math;
19 <
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;
18 >  ConnectionManager, Math, Classes, TypeDefs, _DataTypes, ExtCtrls, StdCtrls,
19 >  Controls, Forms;
20  
21 + { TFile_TXMP }
22  
23   procedure TFile_TXMP.InitDataFields;
36 var
37  tempi: Integer;
38  temps: String;
24   begin
25 <  FDataFields := TBlock.Create(Self, 0, 'Base', '', nil);
25 >  inherited;
26 >  FDataFields := TBlock.Create(Self, nil, 'Base', '', []);
27    with FDataFields do
28    begin
29 <    AddField(TFileID, $00, 'FileID', '', nil);
30 <    AddField(TLevelID, $04, 'LevelID', '', nil);
31 <    tempi := 128;
32 <    AddField(TString, $08, 'FileName', '', @tempi);
33 <    tempi := 4;
34 <    AddField(TInt, $88, 'Flags', '', @tempi);
35 <    tempi := 2;
36 <    AddField(TInt, $8C, 'Width', '', @tempi);
37 <    tempi := 2;
38 <    AddField(TInt, $8E, 'Height', '', @tempi);
39 <    tempi := 4;
40 <    AddField(TInt, $90, 'StoreType', '', @tempi);
41 <    temps := 'TXAN';
42 <    AddField(TLinkByID, $94, 'TXAN', '', @temps);
43 <    temps := 'TXMP';
44 <    AddField(TLinkByID, $98, 'TXMP', '', @temps);
45 <    AddField(TRawLink, $9C, 'RawLink', '', nil);
46 <    AddField(TRawLink, $A0, 'SepLink', '', nil);
47 <    tempi := $1C;
48 <    AddField(TUnused, $A4, 'Unused', '', @tempi);
29 >    AddField(TResourceID, 'FileID', '', []);
30 >    AddField(TLevelID, 'LevelID', '', []);
31 >
32 >    AddField(TString, 'FileName', '', [128]);
33 >
34 >    AddField(TBitSet, 'Flags1', '',
35 >        ['MipMapping enabled', 'unknown', 'U wrapping disabled',
36 >         'V wrapping disabled', 'EnvMapped/EnvMap', 'unused',
37 >         'Play anim back to back', 'Random anim order + frame time']);
38 >
39 >    AddField(TBitSet, 'Flags2', '',
40 >        ['Random anim time offset', 'High byte as EnvMap', 'High byte as alpha',
41 >         'Different alpha formula', 'Data swapping (always set)', 'used at runtime',
42 >         'TXAN looping on/off', '16 bit blue']);
43 >
44 >    AddField(TBitSet, 'Flags3', '',
45 >        ['16 bit alpha', '16 bit red', 'unknown', 'unknown',
46 >         'unknown', 'unknown', 'unknown', 'unknown']);
47 >
48 >    AddField(TBitSet, 'Flags4', '',
49 >        ['unknown', 'unknown', 'unknown', 'unknown',
50 >         'unknown', 'unknown', 'unknown', 'unknown']);
51 >
52 >    AddField(TInt, 'Width', '', [2]);
53 >    AddField(TInt, 'Height', '', [2]);
54 >    AddField(TInt, 'StoreType', '', [4]);
55 >    AddField(TLinkByID, 'TXAN', '', ['TXAN']);
56 >    AddField(TLinkByID, 'TXMP', '', ['TXMP']);
57 >    AddField(TRawLink, 'RawLink', '', ['TXMP']);
58 >    AddField(TRawLink, 'SepLink', '', ['TXMP']);
59 >    AddField(TUnused, 'Unused', '', [$1C]);
60    end;
61 +  FDataFields.Update(0, -1);
62 +  FFileStream.Free;
63 +  FFileStream := nil;
64   end;
65  
66  
67 < procedure TFile_TXMP.InitRawList;
67 > procedure TFile_TXMP.InitEditor;
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 <
69 >  group: TGroupBox;
70 >  splitter: TSplitter;
71   begin
72 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $88, SizeOf(mipmap), @mipmap);
73 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8C, SizeOf(x), @x);
74 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $8E, SizeOf(y), @y);
75 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $90, SizeOf(storetype), @storetype);
76 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $9C, 4, @link_pc);
77 <  ConManager.Connection[FConnectionID].LoadDatFilePart(FFileID, $A0, 4, @link_mac);
78 <
79 <  datasize := GetImgSize(x, y, storetype);
80 <  if (mipmap and $01) > 0 then
81 <  begin
82 <    repeat
83 <      x    := Max(x div 2, 1);
84 <      y    := Max(y div 2, 1);
85 <      datasize := datasize + GetImgSize(x, y, storetype);
86 <    until (x = 1) and (y = 1);
87 <  end;
88 <
89 <  SetLength(FRawParts, 1);
90 <  if ConManager.Connection[FConnectionID].DataOS = DOS_WIN then
91 <  begin
92 <    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);
72 >  inherited;
73 >  FEditor := TFrame.Create(nil);
74 >  group := TGroupBox.Create(FEditor);
75 >  group.Align := alTop;
76 >  group.Height := 150;
77 >  group.Caption := '1. ';
78 >  group.Parent := FEditor;
79 >
80 >  splitter := TSplitter.Create(FEditor);
81 >  splitter.Align := alTop;
82 >  splitter.Top := group.Height + 10;
83 >  splitter.AutoSnap := False;
84 >  splitter.MinSize := 100;
85 >  splitter.Beveled := True;
86 >  splitter.Height := 8;
87 >  splitter.Parent := FEditor;
88 >
89 >  group := TGroupBox.Create(FEditor);
90 >  group.Align := alClient;
91 >  group.Caption := '2. ';
92 >  group.Parent := FEditor;
93   end;
94  
95   end.
124

Diff Legend

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