Index: oup/current/FileClasses/TXAN.pas
===================================================================
--- oup/current/FileClasses/TXAN.pas	(revision 233)
+++ oup/current/FileClasses/TXAN.pas	(revision 234)
@@ -47,5 +47,5 @@
     arrargs.CounterSize := 2;
     arrargs.BlockLength := 4;
-    with AddField(TArray, $1C, 'AnimTextures array', '', @arrargs) do
+    with TArray(AddField(TArray, $1C, 'AnimTextures array', '', @arrargs)) do
     begin
       AddField(TLinkByID, $00, 'Texture', '', nil);
Index: oup/current/FileClasses/_DataTypes.pas
===================================================================
--- oup/current/FileClasses/_DataTypes.pas	(revision 233)
+++ oup/current/FileClasses/_DataTypes.pas	(revision 234)
@@ -281,64 +281,8 @@
 function TArray.AddField(fieldtype: TFieldType; Offset: Integer;
     Name, Description: String; ExtraArgs: Pointer): TDataField;
-begin
-  Exit;
-end;
-
-constructor TArray.Create(ParentFile: TObject; ParentField: TDataField;
-    Offset: Integer; Name, Description: String; ExtraArgs: Pointer);
 var
   i: Integer;
-  args: TArrayArgs;
-  fstream: TMemoryStream;
-begin
-  inherited Create(ParentFile, ParentField, Offset, Name, Description, ExtraArgs);
-  args := TArrayArgs(ExtraArgs^);
-  if args.CounterSize > 0 then
-  begin
-    fstream := TFile(ParentFile).FileStream;
-    fstream.Seek(Offset, soFromBeginning);
-    args.BlockCount := 0;
-    fstream.Read(args.BlockCount, args.CounterSize);
-  end;
-  SetLength(FDataFields, args.BlockCount);
-  if Length(FDataFields) > 0 then
-  begin
-    for i := 0 to High(FDataFields) do
-    begin
-      FDataFields[i] := TBlock.Create(ParentFile, Self,
-          Offset + args.CounterSize + i * args.BlockLength, Name+'['+IntToStr(i)+']', '', @args.BlockLength);
-    end;
-  end;
-end;
-
-function TArray.GetChildCount: Integer;
-begin
-  Result := Length(FDataFields);
-end;
-
-function TArray.GetChild(ID: Integer): TTreeElement;
-begin
-  Result := FDataFields[ID];
-end;
-
-function TArray.GetFieldByOffset(Offset: Integer): TDataField;
-begin
-  Exit;
-end;
-
-procedure TArray.Update(Offset, Length: Integer);
-begin
-  Exit;
-end;
-
-
-
-{ TBlock }
-
-function TBlock.AddField(fieldtype: TFieldType; Offset: Integer; Name,
-    Description: String; ExtraArgs: Pointer): TDataField;
-var
-  i: Integer;
-begin
+begin
+(*
   if Length(FDataFields) > 0 then
   begin
@@ -356,4 +300,78 @@
       FParentFile, Self, Offset, Name, Description, ExtraArgs);
   Result := FDataFields[High(FDataFields)];
+*)
+end;
+
+constructor TArray.Create(ParentFile: TObject; ParentField: TDataField;
+    Offset: Integer; Name, Description: String; ExtraArgs: Pointer);
+var
+  i: Integer;
+  args: TArrayArgs;
+  fstream: TMemoryStream;
+begin
+  inherited Create(ParentFile, ParentField, Offset, Name, Description, ExtraArgs);
+  args := TArrayArgs(ExtraArgs^);
+  if args.CounterSize > 0 then
+  begin
+    fstream := TFile(ParentFile).FileStream;
+    fstream.Seek(Offset, soFromBeginning);
+    args.BlockCount := 0;
+    fstream.Read(args.BlockCount, args.CounterSize);
+  end;
+  SetLength(FDataFields, args.BlockCount);
+  if Length(FDataFields) > 0 then
+  begin
+    for i := 0 to High(FDataFields) do
+    begin
+      FDataFields[i] := TBlock.Create(ParentFile, Self,
+          Offset + args.CounterSize + i * args.BlockLength, Name+'['+IntToStr(i)+']', '', @args.BlockLength);
+    end;
+  end;
+end;
+
+function TArray.GetChildCount: Integer;
+begin
+  Result := Length(FDataFields);
+end;
+
+function TArray.GetChild(ID: Integer): TTreeElement;
+begin
+  Result := FDataFields[ID];
+end;
+
+function TArray.GetFieldByOffset(Offset: Integer): TDataField;
+begin
+  Exit;
+end;
+
+procedure TArray.Update(Offset, Length: Integer);
+begin
+  Exit;
+end;
+
+
+
+{ TBlock }
+
+function TBlock.AddField(fieldtype: TFieldType; Offset: Integer; Name,
+    Description: String; ExtraArgs: Pointer): TDataField;
+var
+  i: Integer;
+begin
+  if Length(FDataFields) > 0 then
+  begin
+    for i := 0 to High(FDataFields) do
+      if FDataFields[i].FOffset = Offset then
+        Break;
+    if i < Length(FDataFields) then
+    begin
+      ShowMessage('Field already exists');
+      Exit;
+    end;
+  end;
+  SetLength(FDataFields, Length(FDataFields) + 1);
+  FDataFields[High(FDataFields)] := TFieldType(fieldtype).Create(
+      FParentFile, Self, Offset, Name, Description, ExtraArgs);
+  Result := FDataFields[High(FDataFields)];
 end;
 
