Index: oup/current/FileClasses/TXMP.pas
===================================================================
--- oup/current/FileClasses/TXMP.pas	(revision 206)
+++ oup/current/FileClasses/TXMP.pas	(revision 207)
@@ -4,5 +4,5 @@
 
 uses
-  TypeDefs, _DataTypes, _FileTypes;
+  TypeDefs, _FileTypes, _DataTypes;
 
 type
@@ -17,5 +17,5 @@
 
 uses
-  ConnectionManager, Math;
+  ConnectionManager, Math, Classes;
 
 { TFile_SNDD }
@@ -37,29 +37,83 @@
   tempi: Integer;
   temps: String;
+  templist: TStringList;
 begin
   FDataFields := TBlock.Create(Self, 0, 'Base', '', nil);
+  templist := TStringList.Create;
   with FDataFields do
   begin
     AddField(TFileID, $00, 'FileID', '', nil);
+
     AddField(TLevelID, $04, 'LevelID', '', nil);
+
     tempi := 128;
     AddField(TString, $08, 'FileName', '', @tempi);
-    tempi := 4;
-    AddField(TInt, $88, 'Flags', '', @tempi);
+
+    templist.Add('MipMapping enabled');
+    templist.Add('unknown');
+    templist.Add('U wrapping disabled');
+    templist.Add('V wrapping disabled');
+    templist.Add('EnvMapped/EnvMap');
+    templist.Add('unused');
+    templist.Add('Play anim back to back');
+    templist.Add('Random anim order + frame time');
+    AddField(TBitSet, $88, 'Flags1', '', @templist);
+
+    templist.Clear;
+    templist.Add('Random anim time offset');
+    templist.Add('High byte as EnvMap');
+    templist.Add('High byte as alpha');
+    templist.Add('Different alpha formula');
+    templist.Add('Data swapping (always set)');
+    templist.Add('used at runtime');
+    templist.Add('TXAN looping on/off');
+    templist.Add('16 bit blue');
+    AddField(TBitSet, $89, 'Flags2', '', @templist);
+
+    templist.Clear;
+    templist.Add('16 bit alpha');
+    templist.Add('16 bit red');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    AddField(TBitSet, $8A, 'Flags3', '', @templist);
+
+    templist.Clear;
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    templist.Add('unknown');
+    AddField(TBitSet, $8B, 'Flags4', '', @templist);
+
     tempi := 2;
     AddField(TInt, $8C, 'Width', '', @tempi);
+
     tempi := 2;
     AddField(TInt, $8E, 'Height', '', @tempi);
+
     tempi := 4;
     AddField(TInt, $90, 'StoreType', '', @tempi);
-    temps := 'TXAN';
+
+    temps := '*';
     AddField(TLinkByID, $94, 'TXAN', '', @temps);
+
     temps := 'TXMP';
     AddField(TLinkByID, $98, 'TXMP', '', @temps);
+
     AddField(TRawLink, $9C, 'RawLink', '', nil);
+
     AddField(TRawLink, $A0, 'SepLink', '', nil);
+
     tempi := $1C;
     AddField(TUnused, $A4, 'Unused', '', @tempi);
   end;
+  templist.Free;
 end;
 
Index: oup/current/FileClasses/_DataTypes.pas
===================================================================
--- oup/current/FileClasses/_DataTypes.pas	(revision 206)
+++ oup/current/FileClasses/_DataTypes.pas	(revision 207)
@@ -2,8 +2,11 @@
 
 interface
+
+uses
+  Classes;
 
 type
   TDataField = class
-    private
+    protected
       FOffset: Integer;
       FName:   String;
@@ -28,4 +31,5 @@
   TFieldType = class of TDataField;
 
+
   TBlock = class(TDataField)
     private
@@ -35,5 +39,5 @@
       function GetFieldCount: Integer;
     public
-      // ExtraArgs: Pointer auf 2 Integer: Length+Count
+      // ExtraArgs: keine
       constructor Create(ParentFile: TObject; Offset: Integer;
           Name, Description: String; ExtraArgs: Pointer); override;
@@ -54,4 +58,17 @@
     public
       // ExtraArgs: Pointer auf Integer: Bytes of TInt
+      constructor Create(ParentFile: TObject; Offset: Integer;
+          Name, Description: String; ExtraArgs: Pointer); override;
+      procedure Update(Offset, Length: Integer); override;
+  end;
+
+
+  TBitSet = class(TDataField)
+    private
+      FBits: Byte;
+      FNames: TStringList;
+      function GetValueAsString: String; override;
+    public
+      // ExtraArgs: Pointer auf TStringList
       constructor Create(ParentFile: TObject; Offset: Integer;
           Name, Description: String; ExtraArgs: Pointer); override;
@@ -116,5 +133,5 @@
       function GetFieldCount: Integer;
     public
-      // ExtraArgs: Pointer auf 2 Integer: Length+Count
+      // ExtraArgs: Pointer auf 2 Integer: Length+Count (packed record...)
       constructor Create(ParentFile: TObject; Offset: Integer;
           Name, Description: String; ExtraArgs: Pointer); override;
@@ -152,9 +169,13 @@
 
 
+
+
 implementation
 
 uses
-  SysUtils, Dialogs, _FileTypes, Classes, ConnectionManager;
-
+  SysUtils, Dialogs, _FileTypes, ConnectionManager;
+
+
+  
 
 { TDataType }
@@ -167,31 +188,4 @@
   FDescription := Description;
   FParentFile := ParentFile; 
-end;
-
-
-
-{ TInt32 }
-
-constructor TInt.Create(ParentFile: TObject; Offset: Integer;
-    Name, Description: String; ExtraArgs: Pointer);
-var
-  fstream: TMemoryStream;
-begin
-  inherited Create(ParentFile, Offset, Name, Description, ExtraArgs);
-  FDataLength := Integer(ExtraArgs^);
-  FInt := 0;
-  fstream := TFile(ParentFile).FileStream;
-  fstream.Seek(Offset, soFromBeginning);
-  fstream.Read(FInt, FDataLength);
-end;
-
-function TInt.GetValueAsString: String;
-begin
-  Result := IntToStr(FInt);
-end;
-
-procedure TInt.Update(Offset, Length: Integer);
-begin
-  Exit;
 end;
 
@@ -226,4 +220,31 @@
 
 procedure TString.Update(Offset, Length: Integer);
+begin
+  Exit;
+end;
+
+
+
+{ TInt }
+
+constructor TInt.Create(ParentFile: TObject; Offset: Integer;
+    Name, Description: String; ExtraArgs: Pointer);
+var
+  fstream: TMemoryStream;
+begin
+  inherited Create(ParentFile, Offset, Name, Description, ExtraArgs);
+  FDataLength := Integer(ExtraArgs^);
+  FInt := 0;
+  fstream := TFile(ParentFile).FileStream;
+  fstream.Seek(Offset, soFromBeginning);
+  fstream.Read(FInt, FDataLength);
+end;
+
+function TInt.GetValueAsString: String;
+begin
+  Result := IntToStr(FInt);
+end;
+
+procedure TInt.Update(Offset, Length: Integer);
 begin
   Exit;
@@ -466,3 +487,32 @@
 end;
 
+
+
+{ TBitSet }
+
+constructor TBitSet.Create(ParentFile: TObject; Offset: Integer; Name,
+  Description: String; ExtraArgs: Pointer);
+var
+  fstream: TMemoryStream;
+begin
+  inherited Create(ParentFile, Offset, Name, Description, ExtraArgs);
+  FNames := TStringList.Create;
+  FNames.AddStrings(TStringList(ExtraArgs^));
+  FDataLength := 1;
+  FBits := 0;
+  fstream := TFile(ParentFile).FileStream;
+  fstream.Seek(Offset, soFromBeginning);
+  fstream.Read(FBits, FDataLength);
+end;
+
+function TBitSet.GetValueAsString: String;
+begin
+  Result := IntToStr(FBits);
+end;
+
+procedure TBitSet.Update(Offset, Length: Integer);
+begin
+  Exit;
+end;
+
 end.
Index: oup/current/FileClasses/_FileTypes.pas
===================================================================
--- oup/current/FileClasses/_FileTypes.pas	(revision 206)
+++ oup/current/FileClasses/_FileTypes.pas	(revision 207)
@@ -47,4 +47,7 @@
 
 
+  TFileType = class of TFile;
+
+
 implementation
 
@@ -79,7 +82,4 @@
   FFile.Free;
   FFile := nil;
-
-//  FDatLinks := DatLinksManager.GetDatLinks(ConnectionID, FileID);
-//  FRawParts := RawLists.GetRawList(ConnectionID, FileID);
 end;
 
