private IList <Function> ParseFunctions(BinaryReaderX br, Xq32Header header, IList <Jump> jumps, IList <Instruction> instructions) { var functionStream = Decompress(br.BaseStream, header.table0Offset << 2); var functions = new BinaryReaderX(functionStream).ReadMultiple <Xq32Function>(header.table0EntryCount); var result = new List <Function>(); foreach (var function in functions.OrderBy(x => x.instructionOffset)) { var functionName = _stringReader.Read(function.nameOffset); var functionInstructions = instructions .Skip(function.instructionOffset) .Take(function.instructionEndOffset - function.instructionOffset) .ToArray(); var functionJumps = jumps .Skip(function.jumpOffset) .Take(function.jumpCount) .ToArray(); var functionUnknowns = new int[] { function.unk1, function.unk2 }; result.Add(new Function(functionName, function.parameterCount, functionJumps, functionInstructions, functionUnknowns)); } return(result); }