Ejemplo n.º 1
0
        private void ReadRdbUnknownLinkedList(BinaryReader reader, int block)
        {
            // Store current reader position
            long position = reader.BaseStream.Position;

            // Go to first unknown object
            reader.BaseStream.Position = blocks[block].DFBlock.RdbBlock.ObjectHeader.UnknownOffset;

            // Iterate over list
            int count = 0;

            while (true)
            {
                // Read object data
                DFBlock.RdbUnknownObject obj = new DFBlock.RdbUnknownObject();
                obj.This          = (Int32)reader.BaseStream.Position;
                obj.Next          = reader.ReadInt32();
                obj.Index         = reader.ReadInt16();
                obj.UnknownOffset = (UInt32)reader.ReadInt32();

                // Create array for first time
                if (blocks[block].DFBlock.RdbBlock.UnknownObjectList == null)
                {
                    // Index counts backwards, so first item index is also length of list
                    blocks[block].DFBlock.RdbBlock.UnknownObjectList = new DFBlock.RdbUnknownObject[obj.Index];
                }

                // Exit if finished
                if (obj.Next < 0)
                {
                    break;
                }

                // Store object
                blocks[block].DFBlock.RdbBlock.UnknownObjectList[count++] = obj;

                // Go to next position
                reader.BaseStream.Position = obj.Next;
            }

            // Revert reader position
            reader.BaseStream.Position = position;
        }
        private void ReadRdbUnknownLinkedList(BinaryReader reader, int block)
        {
            // Store current reader position
            long position = reader.BaseStream.Position;

            // Go to first unknown object
            reader.BaseStream.Position = blocks[block].DFBlock.RdbBlock.ObjectHeader.UnknownOffset;

            // Iterate over list
            int count = 0;
            while (true)
            {
                // Read object data
                DFBlock.RdbUnknownObject obj = new DFBlock.RdbUnknownObject();
                obj.This = (Int32)reader.BaseStream.Position;
                obj.Next = reader.ReadInt32();
                obj.Index = reader.ReadInt16();
                obj.UnknownOffset = (UInt32)reader.ReadInt32();

                // Create array for first time
                if (blocks[block].DFBlock.RdbBlock.UnknownObjectList == null)
                {
                    // Index counts backwards, so first item index is also length of list
                    blocks[block].DFBlock.RdbBlock.UnknownObjectList = new DFBlock.RdbUnknownObject[obj.Index];
                }

                // Exit if finished
                if (obj.Next < 0)
                    break;

                // Store object
                blocks[block].DFBlock.RdbBlock.UnknownObjectList[count++] = obj;

                // Go to next position
                reader.BaseStream.Position = obj.Next;
            }

            // Revert reader position
            reader.BaseStream.Position = position;
        }