public static Formats.Hlpb ParseHlpb(this SsbhParser parser) { var result = new Formats.Hlpb(); result.Magic = parser.ReadUInt32(); result.VersionMajor = parser.ReadUInt16(); result.VersionMinor = parser.ReadUInt16(); { // TODO: Extract this code to a method? long absoluteOffset = parser.ReadRelativeGetAbsoluteOffset(); long elementCount = parser.ReadInt64(); long previousPosition = parser.Position; parser.Seek(absoluteOffset); result.AimEntries = new Formats.HlpbRotateAim[elementCount]; for (int i = 0; i < elementCount; i++) { result.AimEntries[i] = parser.ParseHlpbRotateAim(); } parser.Seek(previousPosition); } { // TODO: Extract this code to a method? long absoluteOffset = parser.ReadRelativeGetAbsoluteOffset(); long elementCount = parser.ReadInt64(); long previousPosition = parser.Position; parser.Seek(absoluteOffset); result.InterpolationEntries = new Formats.HlpbRotateInterpolation[elementCount]; for (int i = 0; i < elementCount; i++) { result.InterpolationEntries[i] = parser.ParseHlpbRotateInterpolation(); } parser.Seek(previousPosition); } { // TODO: Extract this code to a method? long absoluteOffset = parser.ReadRelativeGetAbsoluteOffset(); long elementCount = parser.ReadInt64(); long previousPosition = parser.Position; parser.Seek(absoluteOffset); result.List1 = parser.ReadStructs <System.Int32>((int)elementCount); parser.Seek(previousPosition); } { // TODO: Extract this code to a method? long absoluteOffset = parser.ReadRelativeGetAbsoluteOffset(); long elementCount = parser.ReadInt64(); long previousPosition = parser.Position; parser.Seek(absoluteOffset); result.List2 = parser.ReadStructs <System.Int32>((int)elementCount); parser.Seek(previousPosition); } return(result); }