public DeprecatedField(ExtendedUpdateField field)
			: base(field)
		{
		}
		public NewField(ExtendedUpdateField field)
			: base(field)
		{
		}
		public static ExtendedUpdateField Find(ExtendedUpdateField[] arr, string name, uint start)
		{
			for (uint i = start; i < arr.Length; i++)
			{
				var field = arr[i];
				if (field != null && field.Name.Equals(name))
				{
					return field;
				}
			}
			return null;
		}
		public ChangedField(ExtendedUpdateField original, ExtendedUpdateField mt)
			: base(original)
		{
			Changed = mt;
		}
		public FieldVariation(ExtendedUpdateField original)
		{
			Original = original;
		}
		private void WriteArrayField(TextWriter writer, ExtendedUpdateField field, int num)
		{
			writer.WriteLine("\t\t/// <summary>");
			writer.WriteLine("\t\t/// {0}", field.Description);
			writer.WriteLine("\t\t/// </summary>");
			writer.WriteLine("\t\t{0}_{1} = {2},", field.Name, num + 1, field.Offset + num);
		}
		private void WriteFieldFromArray(List<string> array, TextWriter writer, ExtendedUpdateField field, int fieldStart,
		                                 int id)
		{
			writer.WriteLine("\t\t/// <summary>");
			writer.WriteLine("\t\t/// {0}", field.Description);
			writer.WriteLine("\t\t/// </summary>");
			writer.WriteLine("\t\t{0} = {1},", array[fieldStart + id], field.Offset + id);
		}
		private void WriteField(ExtendedUpdateField field, TextWriter writer)
		{
			writer.WriteLine("\t\t/// <summary>");
			writer.WriteLine("\t\t/// {0}", field.Description);
			writer.WriteLine("\t\t/// </summary>");
			writer.WriteLine("\t\t{0} = {1},", field.Name, field.Offset);
		}
		private void FillList(BinaryReader binReader)
		{
			m_fieldCount = 0;

			string previousField = String.Empty;
			string currentField;

			binReader.BaseStream.Position = m_dataStartOffset;

			while (true)
			{
				var field = new ExtendedUpdateField
				            	{
				            		NameOffset = binReader.ReadUInt32()
				            	};
				// 4A4C90 for GUID (4869264)

				if (field.NameOffset < 0x9999)
				{
					uint oldNameOffset = field.NameOffset;
					field.NameOffset = binReader.ReadUInt32();
				}

				field.Offset = binReader.ReadUInt32();
				field.Size = binReader.ReadUInt32();
				field.Type = (UpdateFieldType) binReader.ReadUInt32();
				field.Flags = (UpdateFieldFlags) binReader.ReadUInt32();

				if (m_fieldCount == 0)
				{
					// 0x401A00
					m_stringOffsetDelta = field.NameOffset - m_stringStartOffset;
				}

				long stringOffset = field.NameOffset - m_stringOffsetDelta;

				long oldpos = binReader.BaseStream.Position;
				binReader.BaseStream.Position = stringOffset;
				currentField = binReader.ReadCString();
				binReader.BaseStream.Position = oldpos;

				var sb = new StringBuilder();
				sb.AppendFormat("Size: {0} - ", field.Size);
				sb.AppendFormat("Type: {0} - ", field.Type);
				sb.AppendFormat("Flags: {0}", field.Flags);
				field.Description = sb.ToString();

				field.Name = currentField;

				m_updateFieldList.Add(field);

				m_fieldCount++;

				if (!previousField.Equals("CORPSE_FIELD_PAD") && currentField.Equals("CORPSE_FIELD_PAD"))
				{
					break;
				}

				previousField = currentField;
			}
		}