Exemplo n.º 1
0
        public ChunkyFolder(string ID_in, int version_in, string name_in, byte[] innerData) : base(ChunkyChunkType.Folder, ID_in, version_in, name_in)
        {
            children = new ChunkyCollection(this);
            MemoryStream ms = new MemoryStream(innerData, false);
            BinaryReader br = new BinaryReader(ms);

            ChunkyChunk        chunk = null;
            ChunkyDataATTR     attr  = null;
            ChunkyDataINFOTPAT info  = null;

            int pos = 0;

            while (pos < innerData.Length)
            {
                br.BaseStream.Seek(pos, SeekOrigin.Begin);
                chunk = RelicChunkReader.ReadChunkyChunk(br.ReadBytes(innerData.Length - pos), ID_in);
                children.Add(chunk);

                if (chunk is ChunkyDataATTR)
                {
                    attr = (ChunkyDataATTR)chunk;
                }
                else if (chunk is ChunkyDataINFOTPAT)
                {
                    info = (ChunkyDataINFOTPAT)chunk;
                }
                else if (attr != null && chunk is ChunkyDataDATA)
                {
                    ((ChunkyDataDATA)chunk).Attributes = attr;
                }
                else if (info != null && chunk is ChunkyDataLayer)
                {
                    ((ChunkyDataLayer)chunk).Info = info;
                }

                pos += chunk.Length;
            }
        }
Exemplo n.º 2
0
        private static ChunkyStructureCollection ReadChunkyStructure(BinaryReader br, long fileLength)
        {
            //long end = fileLength - 20;
            ChunkyStructureCollection structCol = new ChunkyStructureCollection();
            int unknown1 = br.ReadInt32();
            int unknown2 = br.ReadInt32();
            int unknown3 = br.ReadInt32();

            byte[] bytes = br.ReadBytes((int)(fileLength - br.BaseStream.Position));

            structCol.Add(new RelicChunkyStructure(RelicChunkReader.ReadChunkyChunks(bytes), unknown1, unknown2, unknown3));

            if (RelicChunkReader.HasRemainingBytes())
            {
                byte[] remainingData = RelicChunkReader.GetRemainingBytes();

                if (remainingData[0] == 0x52 && remainingData[1] == 0x65 && remainingData[2] == 0x6C && remainingData[3] == 0x69)
                {
                    MemoryStream ms  = new MemoryStream(remainingData);
                    BinaryReader br2 = new BinaryReader(ms);
                    ChunkyStructureCollection col = ReadChunkyFileStructure(br2);

                    foreach (RelicChunkyStructure strct in col)
                    {
                        structCol.Add(strct);
                    }
                }
                else
                {
                    ChunkyCollection col = new ChunkyCollection();
                    col.Add(new ChunkyRawData(remainingData));
                    structCol.Add(new RelicChunkyStructure(col));
                }
            }

            return(structCol);
        }