Exemple #1
0
        // Methods
        public override void Load(Stream fileStream)
        {
            // BINA Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            string sig = reader.ReadSignature(4);

            if (sig != Signature)
            {
                throw new InvalidSignatureException(Signature, sig);
            }
            var unknown1 = reader.ReadUInt32(); //Might be part of the Header according to Skyth's spec?

            if (unknown1 != 1)
            {
                Console.WriteLine($"Unknown1 does not equal 1 in this file! It's actually set to {unknown1}");
            }
            var shapeCount = reader.ReadInt64();
            var unknown2   = reader.ReadUInt64();

            if (unknown2 != 24)
            {
                Console.WriteLine($"Unknown1 does not equal 24 in this file! It's actually set to {unknown1}");
            }
            Console.WriteLine(unknown2);

            for (int i = 0; i < shapeCount; i++)
            {
                SvShape shape           = new SvShape();
                var     shapeNameOffset = reader.ReadInt64();
                long    pos             = reader.BaseStream.Position;
                reader.JumpTo(shapeNameOffset, false);
                shape.Name = reader.ReadNullTerminatedString();
                reader.JumpTo(pos, true);

                shape.Unknown1            = reader.ReadUInt32();
                shape.Size                = reader.ReadVector3();
                shape.Position            = reader.ReadVector3();
                shape.Rotation            = reader.ReadQuaternion();
                shape.BoundingBox.Minimum = reader.ReadVector3();
                shape.BoundingBox.Maximum = reader.ReadVector3();
                shape.Unknown2            = reader.ReadUInt32();

                var sectorCount      = reader.ReadInt64();
                var sectorListOffset = reader.ReadInt64();
                pos = reader.BaseStream.Position;
                reader.JumpTo(sectorListOffset, false);
                for (int s = 0; s < sectorCount; s++)
                {
                    SvSector sector = new SvSector();
                    sector.SectorIndex = reader.Read();
                    sector.Visible     = reader.ReadBoolean();
                    shape.Sectors.Add(sector);
                }
                reader.JumpTo(pos, true);
                SvShapes.Add(shape);
            }
        }
Exemple #2
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            VertexCountOffsetOffset = reader.ReadUInt32(); //Refered to in LibS06 as `geometry_address`
            PostFaceOffset          = reader.ReadUInt32(); //Refered to in LibS06 as `mopp_code_address`
            VertexCountOffset       = reader.ReadUInt32(); //Refered to in LibS06 as `vertex_section_address`
            FaceCountOffset         = reader.ReadUInt32(); //Refered to in LibS06 as `face_section_address`
            VertexCount             = reader.ReadUInt32();

            //Vertexes
            for (int i = 0; i < VertexCount; i++)
            {
                Vertices.Add(reader.ReadVector3());
            }

            //Faces
            FaceCount = reader.ReadUInt32();
            for (int i = 0; i < FaceCount; i++)
            {
                S06CollisionFace face = new S06CollisionFace();
                face.Vertex1 = reader.ReadUInt16();
                face.Vertex2 = reader.ReadUInt16();
                face.Vertex3 = reader.ReadUInt16();
                reader.JumpAhead(2);
                face.Flags = reader.ReadUInt32();
                Faces.Add(face);
            }
        }
Exemple #3
0
            public void Read(BINAReader reader)
            {
                uint nodesCount            = reader.ReadUInt32();
                uint dataNodeCount         = reader.ReadUInt32();
                long nodesOffset           = reader.ReadInt64();
                long dataNodeIndicesOffset = reader.ReadInt64();

                // Nodes
                reader.JumpTo(nodesOffset);
                Nodes.Capacity = (int)nodesCount;

                for (int i = 0; i < nodesCount; ++i)
                {
                    Nodes.Add(new Node(reader, false));
                }

                // Data Node Indices
                reader.JumpTo(dataNodeIndicesOffset);
                DataNodeIndices.Capacity = (int)dataNodeCount;

                for (int i = 0; i < dataNodeCount; ++i)
                {
                    DataNodeIndices.Add(reader.ReadInt32());
                }
            }
Exemple #4
0
 // Constructors
 public EffectData(BINAReader reader)
 {
     EffectName = reader.GetString();
     reader.JumpAhead(12);
     LinkMotionStop = reader.ReadBoolean();
     reader.JumpAhead(7);
 }
Exemple #5
0
        public static void ExportFont(Stream stream, string outputFile)
        {
            var reader = new BINAReader(stream);

            reader.ReadHeader();

            var sig = reader.ReadSignature(8);

            if (sig != "KFCS1000")
            {
                throw new InvalidSignatureException("KFCS1000", sig);
            }

            var fontName = reader.GetString();

            reader.JumpAhead(4);
            reader.JumpAhead(0x10);
            var length = reader.ReadInt64();
            var fntSig = reader.ReadSignature();

            outputFile = fntSig == "OTTO" ? Path.ChangeExtension(outputFile, ".otf")
                : Path.ChangeExtension(outputFile, ".ttf");
            var data = reader.ReadBytes((int)length - 4);

            using (var fntStream = File.Create(outputFile))
            {
                fntStream.Write(Encoding.Default.GetBytes(fntSig), 0, 4);
                fntStream.Write(data, 0, data.Length);
            }
        }
Exemple #6
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            reader.ReadHeader();

            uint fileCount      = reader.ReadUInt32();
            uint fileEntriesPos = reader.ReadUInt32();

            uint typeCount      = reader.ReadUInt32();
            uint typeEntriesPos = reader.ReadUInt32();

            // Files
            Files.Capacity = (int)fileCount;
            reader.JumpTo(fileEntriesPos, false);

            for (uint i = 0; i < fileCount; ++i)
            {
                Files.Add(new S06FileEntry(reader));
            }

            // Types
            Types.Capacity = (int)typeCount;
            reader.JumpTo(typeEntriesPos, false);

            for (uint i = 0; i < typeCount; ++i)
            {
                Types.Add(new S06TypeEntry(reader, fileEntriesPos));
            }
        }
 // Methods
 public override void Read(BINAReader reader, BINAHeader header = null)
 {
     for (uint i = 0; i < EntryCount; ++i)
     {
         Entries[i] = new Entry(reader);
     }
 }
Exemple #8
0
            // Methods
            public void Read(BINAReader reader)
            {
                // Read the data
                uint lineType = reader.ReadUInt32();
                uint padding1 = reader.ReadUInt32();

                ulong nameOffset = reader.ReadUInt64();
                ulong padding2   = reader.ReadUInt64();

                UnknownFloat1 = reader.ReadSingle();
                byte firstCharacter  = reader.ReadByte();
                byte firstAnim       = reader.ReadByte();
                byte secondCharacter = reader.ReadByte();
                byte secondAnim      = reader.ReadByte();

                TalkingCharacter = reader.ReadUInt64();

                // Parse it
                if (nameOffset != 0)
                {
                    Name = reader.GetString((uint)nameOffset + reader.Offset);
                }

                LineType            = (LineTypes)lineType;
                FirstCharacter      = (CharacterTypes)firstCharacter;
                FirstCharAnimation  = (AnimationTypes)firstAnim;
                SecondCharacter     = (CharacterTypes)secondCharacter;
                SecondCharAnimation = (AnimationTypes)secondAnim;
            }
Exemple #9
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            while (reader.BaseStream.Position != 42020)
            {
                uint value1  = reader.ReadUInt32();
                uint value2  = reader.ReadUInt32();
                uint value3  = reader.ReadUInt32();
                uint value4  = reader.ReadUInt32();
                uint value5  = reader.ReadUInt32();
                uint value6  = reader.ReadUInt32();
                uint value7  = reader.ReadUInt32();
                uint value8  = reader.ReadUInt32();
                uint value9  = reader.ReadUInt32();
                uint value10 = reader.ReadUInt32();
                uint value11 = reader.ReadUInt32();
                uint value12 = reader.ReadUInt32();
                uint value13 = reader.ReadUInt32();
                uint value14 = reader.ReadUInt32();
                uint value15 = reader.ReadUInt32();
                uint value16 = reader.ReadUInt32();
                uint value17 = reader.ReadUInt32();
                uint value18 = reader.ReadUInt32();
                uint value19 = reader.ReadUInt32();
                uint value20 = reader.ReadUInt32();
                uint value21 = reader.ReadUInt32();
                uint value22 = reader.ReadUInt32();
                uint value23 = reader.ReadUInt32();
                uint value24 = reader.ReadUInt32();
            }
        }
Exemple #10
0
 // Constructors
 public DebrisData(BINAReader reader)
 {
     Gravity        = reader.ReadSingle();
     LifeTime       = reader.ReadSingle();
     Mass           = reader.ReadSingle();
     ExplosionScale = reader.ReadSingle();
     ImpulseScale   = reader.ReadSingle();
 }
Exemple #11
0
 // Methods
 public override void Read(BINAReader reader, BINAHeader header = null)
 {
     for (uint i = 0; i < CaptionCount; ++i)
     {
         reader.FixPadding(8);
         Captions[i] = new Caption(reader);
     }
 }
Exemple #12
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            string sig = reader.ReadSignature(4);

            if (sig != Signature)
            {
                throw new InvalidSignatureException(Signature, sig);
            }

            uint unknown1 = reader.ReadUInt32(); //Probably Flags according to Rad's Spec

            if (unknown1 != 537265920)
            {
                Console.WriteLine($"unknown1 does not equal 537265920! Actually equals {unknown1}!");
            }

            uint bankNameOffset    = reader.ReadUInt32(); //Offset to the Scene Bank name
            uint cueNameOffset     = reader.ReadUInt32(); //Offset of the first entry in the Scene Bank
            uint cueIndiciesOffset = reader.ReadUInt32(); //Offset to the number list for non stream indexs
            uint streamOffset      = reader.ReadUInt32(); //Offset to the table for xma names

            Name = reader.ReadChars(64);                  //Scene Bank's name
            uint cueCount       = reader.ReadUInt32();    //Total Number of Cues in this Scene Bank
            uint csbCueCount    = reader.ReadUInt32();    //Amount of Cues in this Scene Bank which pull their data from a corrosponding CSB file
            uint streamCueCount = reader.ReadUInt32();    //Amount of Cues in this Scene Bank which use XMA files

            int streams = 0;

            for (uint i = 0; i < cueCount; i++)
            {
                Cue cue = new Cue()
                {
                    Name = reader.ReadChars(32)
                };
                uint cueType  = reader.ReadUInt32();
                uint cueIndex = reader.ReadUInt32();
                cue.Category = reader.ReadUInt32();
                cue.Unknown1 = reader.ReadSingle();
                cue.Unknown2 = reader.ReadSingle();

                if (cueType == 1)
                {
                    long pos = reader.BaseStream.Position;          //Save position
                    reader.JumpTo(streamOffset, false);
                    reader.JumpAhead(4 * streams);                  //Jump ahead to the right offset for our Cue's XMA
                    reader.JumpTo(reader.ReadUInt32(), false);
                    cue.Stream = reader.ReadNullTerminatedString(); //Read the XMA's name for this Cue
                    reader.JumpTo(pos, true);                       //Jump back to where we were
                    streams++;
                }
                Cues.Add(cue); //Save Cue to list
            }
        }
Exemple #13
0
            // Methods
            public void Read(BINAReader reader, bool readStageID = false)
            {
                // Stage Index
                StageIndex = reader.ReadByte();
                byte unknown2 = reader.ReadByte();
                byte unknown3 = reader.ReadByte();
                byte unknown4 = reader.ReadByte();

                // Time Bonus
                TimeBasis = reader.ReadUInt32();
                TimeDown  = reader.ReadUInt32();

                // Miss Bonuses
                NoMissBonus       = reader.ReadUInt32();
                OneMissBonus      = reader.ReadUInt32();
                TwoMissBonus      = reader.ReadUInt32();
                ThreeMissBonus    = reader.ReadUInt32();
                FourMissBonus     = reader.ReadUInt32();
                FivePlusMissBonus = reader.ReadUInt32();

                // Rank Scores
                SRankScore = reader.ReadUInt32();
                ARankScore = reader.ReadUInt32();
                BRankScore = reader.ReadUInt32();

                uint CRankScore = reader.ReadUInt32(); // Not really used
                uint DRankScore = reader.ReadUInt32(); // Unused

                // Stage ID
                stageIDOffset = reader.ReadUInt64();
                ulong unknown5 = reader.ReadUInt64();

                if (readStageID)
                {
                    StageID = reader.GetString((uint)stageIDOffset);
                }

                // Padding/Unknown Value Checks
                if (unknown2 != 0)
                {
                    Console.WriteLine($"WARNING: Unknown2 != 0! ({unknown2})");
                }

                if (unknown3 != 0)
                {
                    Console.WriteLine($"WARNING: Unknown3 != 0! ({unknown3})");
                }

                if (unknown4 != 0)
                {
                    Console.WriteLine($"WARNING: Unknown4 != 0! ({unknown4})");
                }

                if (unknown5 != 0)
                {
                    Console.WriteLine($"WARNING: Unknown5 != 0! ({unknown5})");
                }
            }
Exemple #14
0
                // Constructors
                public MotionData(BINAReader reader)
                {
                    MotionName = reader.GetString();
                    reader.JumpAhead(12);

                    SyncFrame    = reader.ReadBoolean();
                    StopEndFrame = reader.ReadBoolean();
                    reader.JumpAhead(6);
                }
Exemple #15
0
        // Methods
        public override sealed void Load(Stream fileStream)
        {
            // BINA Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            // Data
            Read(reader, Header);
        }
Exemple #16
0
 // Constructors
 public PhysicsParam(BINAReader reader)
 {
     Mass              = reader.ReadSingle();
     Friction          = reader.ReadSingle();
     GravityFactor     = reader.ReadSingle();
     Restitution       = reader.ReadSingle();
     LinearDamping     = reader.ReadSingle();
     AngularDamping    = reader.ReadSingle();
     MaxLinearVelocity = reader.ReadSingle();
 }
Exemple #17
0
                // Constructors
                public KillData(BINAReader reader)
                {
                    KillType = (KillTypes)reader.ReadUInt32();

                    KillTime        = reader.ReadSingle();
                    BreakMotionName = reader.GetString();
                    reader.JumpAhead(12);

                    _DebrisData = new DebrisData(reader);
                    reader.JumpAhead(4);
                }
Exemple #18
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            reader.ReadHeader();

            //File related header stuff
            uint fileCount      = reader.ReadUInt32();
            uint fileEntriesPos = reader.ReadUInt32();

            //Type related header stuff
            uint typeCount      = reader.ReadUInt32();
            uint typeEntriesPos = reader.ReadUInt32();

            //Read Types
            reader.JumpTo(typeEntriesPos, false);
            for (uint i = 0; i < typeCount; ++i)
            {
                S06TypeEntry type          = new S06TypeEntry();
                uint         namePos       = reader.ReadUInt32();
                uint         typeFileCount = reader.ReadUInt32();
                uint         filesPos      = reader.ReadUInt32();

                long pos = reader.BaseStream.Position;

                reader.JumpTo(namePos, false);
                type.TypeName = reader.ReadNullTerminatedString();

                reader.JumpTo(filesPos, false);

                //Read Objects
                for (uint f = 0; f < typeFileCount; ++f)
                {
                    S06FileEntry file            = new S06FileEntry();
                    uint         friendlyNamePos = reader.ReadUInt32();
                    uint         filePathPos     = reader.ReadUInt32();

                    long curPos = reader.BaseStream.Position;

                    reader.JumpTo(friendlyNamePos, false);
                    file.FriendlyName = reader.ReadNullTerminatedString();

                    reader.JumpTo(filePathPos, false);
                    file.FilePath = reader.ReadNullTerminatedString();

                    reader.JumpTo(curPos);
                    type.Files.Add(file);
                }
                Types.Add(type);

                reader.JumpTo(pos, true);
            }
        }
Exemple #19
0
            // Methods
            public void Read(BINAReader reader)
            {
                _MotionData     = new MotionData(reader);
                _MirageAnimData = new MirageAnimData(reader);
                reader.JumpAhead(8);
                _ProgramMotionData = new ProgramMotionData(reader);
                _EffectData        = new EffectData(reader);
                _SoundData         = new SoundData(reader);
                _KillData          = new KillData(reader);

                reader.JumpAhead(8);
            }
Exemple #20
0
                // Constructors
                public ProgramMotionData(BINAReader reader)
                {
                    MotionType = (MotionTypes)reader.ReadUInt32();
                    reader.JumpAhead(12);

                    Axis = reader.ReadVector3();
                    reader.JumpAhead(4);

                    Power      = reader.ReadSingle();
                    SpeedScale = reader.ReadSingle();
                    Time       = reader.ReadSingle();
                    reader.JumpAhead(4);
                }
Exemple #21
0
            // Methods
            public void Read(BINAReader reader)
            {
                for (uint i = 0; i < LineCount; ++i)
                {
                    Lines[i] = new Line(reader);
                }

                Unknown1 = reader.ReadUInt32();
                if (Unknown1 != 0)
                {
                    Console.WriteLine("WARNING: Caption Unknown1 != 0!! {0:X}", Unknown1);
                }
            }
Exemple #22
0
        // Methods
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            string sig = reader.ReadSignature(4);

            if (sig != Signature)
            {
                throw new InvalidSignatureException(Signature, sig);
            }

            uint messageTableOffset = reader.ReadUInt32();
            uint messageCount       = reader.ReadUInt32();

            long namePos = reader.BaseStream.Position;

            reader.JumpTo(messageTableOffset, false);
            Name = reader.ReadNullTerminatedString();
            reader.JumpTo(namePos, true);

            for (uint i = 0; i < messageCount; i++)
            {
                string name        = string.Empty;
                string text        = string.Empty;
                string placeholder = string.Empty;

                uint nameOffset        = reader.ReadUInt32();
                uint textOffset        = reader.ReadUInt32();
                uint placeholderOffset = reader.ReadUInt32();

                long pos = reader.BaseStream.Position;

                reader.JumpTo(nameOffset, false);
                name = reader.ReadNullTerminatedString();
                reader.JumpTo(textOffset, false);
                text = reader.ReadNullTerminatedStringUTF16();
                if (placeholderOffset != 0)
                {
                    reader.JumpTo(placeholderOffset, false);
                    placeholder = reader.ReadNullTerminatedString();
                }

                MSTEntries entry = new MSTEntries(name, text, placeholder);
                entries.Add(entry);

                reader.JumpTo(pos, true);
            }
        }
Exemple #23
0
        // Methods
        public override void Load(Stream fileStream)
        {
            // BINA Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            string sig = reader.ReadSignature(4);

            if (sig != Signature)
            {
                throw new InvalidSignatureException(Signature, sig);
            }
            var unknown1 = reader.ReadUInt32(); //Might be part of the Header if Skyth's svcol spec is anything to go on?
        }
Exemple #24
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();
            long namePositionHack = reader.BaseStream.Position;

            reader.JumpAhead(0xC);
            prop.Name = reader.ReadNullTerminatedString();
            reader.JumpTo(namePositionHack, true);
            reader.JumpTo(0x4c, true);
            prop.ObjectCount = reader.ReadUInt32();
            reader.JumpAhead(0x4);
            for (uint i = 0; i < prop.ObjectCount; i++)
            {
                S06PropObject obj = new S06PropObject();

                var objectNameOffset = reader.ReadUInt32();
                obj.ObjectParameterCount = reader.ReadUInt32();
                var paramOffset = reader.ReadUInt32();
                obj.ObjectUnknown1 = reader.ReadUInt32();
                obj.ObjectUnknown2 = reader.ReadUInt32();

                long position = reader.BaseStream.Position;

                reader.JumpTo(objectNameOffset, false);
                obj.ObjectName = reader.ReadNullTerminatedString();

                for (uint c = 0; c < obj.ObjectParameterCount; c++)
                {
                    reader.JumpTo(paramOffset + (c * 0x18), false);

                    S06PropParameter parameter = new S06PropParameter();
                    parameter.ParameterName = reader.ReadNullTerminatedString();
                    reader.JumpTo(paramOffset + (c * 0x18) + 0x10, false);

                    parameter.ParameterType = reader.ReadUInt32();
                    parameter.ParameterID   = reader.ReadUInt32();

                    obj.Parameters.Add(parameter);
                }

                prop.Objects.Add(obj);

                reader.JumpTo(position, true);
            }
        }
Exemple #25
0
        public override void Load(Stream fileStream)
        {
            // Header
            var reader = new BINAReader(fileStream);

            reader.ReadHeader();

            string sig = reader.ReadSignature(4);

            if (sig != Signature)
            {
                throw new InvalidSignatureException(Signature, sig);
            }

            uint texturePos         = reader.ReadUInt32();
            uint placeholderEntries = reader.ReadUInt32();

            reader.JumpTo(reader.ReadUInt32(), false);
            long pos = reader.BaseStream.Position;

            // Texture
            reader.JumpTo(texturePos, false);
            string texture = reader.ReadNullTerminatedString();

            reader.JumpTo(pos, true);

            // Placeholders
            for (uint i = 0; i < placeholderEntries; ++i)
            {
                S06FontPictureUV fontPicture = new S06FontPictureUV();
                Texture = texture;

                uint placeholderEntry = reader.ReadUInt32();

                fontPicture.X      = reader.ReadUInt16();
                fontPicture.Y      = reader.ReadUInt16();
                fontPicture.Width  = reader.ReadUInt16();
                fontPicture.Height = reader.ReadUInt16();

                pos = reader.BaseStream.Position;

                reader.JumpTo(placeholderEntry, false);
                fontPicture.Placeholder = reader.ReadNullTerminatedString();
                reader.JumpTo(pos, true);

                Entries.Add(fontPicture);
            }
        }
Exemple #26
0
        // Methods
        public override void Load(Stream fileStream)
        {
            var reader = new BINAReader(fileStream);

            Header      = reader.ReadHeader();
            IsBigEndian = reader.IsBigEndian;

            System.Console.WriteLine(reader.BaseStream.Position);
            RangeIn       = reader.ReadSingle(); // Unused
            RangeDistance = reader.ReadSingle(); // Unused

            ModelName = reader.GetString();
            reader.JumpAhead(12);

            SkeletonName = reader.GetString();
            reader.JumpAhead(12);

            BoundingShape = (BoundingShapes)reader.ReadUInt32();

            BoundingSize = reader.ReadVector3();

            MeshName = reader.GetString();
            reader.JumpAhead(20);

            ShapeOffset = reader.ReadVector3();
            reader.JumpAhead(4);
            ShapeSizeOffset = reader.ReadSingle();

            RigidBodyType     = (RigidBodyTypes)reader.ReadByte();
            RigidBodyMaterial = (RigidBodyMaterials)reader.ReadByte();
            reader.JumpAhead(2);

            _PhysicsParam = new PhysicsParam(reader);

            ContactDamageType = (ContactDamageTypes)reader.ReadByte();
            RideOnDamage      = reader.ReadBoolean();
            AerialBounce      = reader.ReadBoolean();

            reader.JumpAhead(9);

            // ReactionData
            for (uint i = 0; i < ReactionDataCount; i++)
            {
                _ReactionData[i] = new ReactionData(reader);
            }
        }
Exemple #27
0
            public void Read(BINAReader reader, bool readChildIndices = true)
            {
                long nameOffset            = reader.ReadInt64();
                long dataOffset            = reader.ReadInt64();
                long childIndexTableOffset = reader.ReadInt64();

                ParentIndex = reader.ReadInt32();
                Index       = reader.ReadInt32();
                DataIndex   = reader.ReadInt32();

                ushort childCount   = reader.ReadUInt16();
                bool   hasData      = reader.ReadBoolean();
                byte   fullPathSize = reader.ReadByte(); // Not counting this node in

                // Read name
                if (nameOffset != 0)
                {
                    Name = reader.GetString((uint)nameOffset);
                }

                // (MINOR HACK) Store data offset in Data
                // to be read later, avoiding some Seeks
                if (hasData && dataOffset != 0)
                {
                    Data = dataOffset;
                }

                // Read Child Indices
                if (!readChildIndices)
                {
                    return;
                }

                long curPos = reader.BaseStream.Position;

                reader.JumpTo(childIndexTableOffset);
                ChildIndices.Capacity = childCount;

                for (int i = 0; i < childCount; ++i)
                {
                    ChildIndices.Add(reader.ReadInt32());
                }

                reader.JumpTo(curPos);
            }
        protected NodeTree ReadNodeTree(BINAReader reader)
        {
            var  nodeTree   = new NodeTree();
            uint nodesCount = reader.ReadUInt32();

            nodeTree.DataNodeCount = reader.ReadUInt32();
            long nodesOffset           = reader.ReadInt64();
            long dataNodeIndicesOffset = reader.ReadInt64();

            // Nodes
            reader.JumpTo(nodesOffset);
            for (uint i = 0; i < nodesCount; ++i)
            {
                nodeTree.Nodes.Add(new Node(reader));
            }

            return(nodeTree);
        }
Exemple #29
0
            // Methods
            public void Read(BINAReader reader)
            {
                uint id       = reader.ReadUInt32();
                long dataSize = reader.ReadInt64();

                reader.JumpAhead(4);

                DataOffset = reader.ReadInt64();
                reader.JumpAhead(8);

                ExtensionOffset = reader.ReadInt64();
                DataType        = (DataEntryTypes)reader.ReadUInt64();

                if (DataType != DataEntryTypes.NotHere)
                {
                    Data = new byte[dataSize];
                }
            }
        // Methods
        public override void Load(Stream fileStream,
                                  Dictionary <string, SetObjectType> objectTemplates)
        {
            if (objectTemplates == null)
            {
                throw new ArgumentNullException("objectTemplates",
                                                "Cannot load Colors set data without object templates.");
            }

            // Header
            var reader = new BINAReader(fileStream);

            Header = reader.ReadHeader();

            // SOBJ Data
            Objects = SOBJ.Read(reader,
                                objectTemplates, SOBJ.SOBJType.Colors);
        }