Exemple #1
0
        private static Texture FindTexture(BinaryReader sourceFile, Texture texture, BinaryReader searchFile, SearchField searchField)
        {
            sourceFile.BaseStream.Position = texture.Address;
            using (BinaryReader data = new BinaryReader(new MemoryStream(sourceFile.ReadBytes(texture.Size))))
            {
                uint a;
                uint b;
                bool foundTexture = false;

                foreach (var field in searchField.Field)
                {
                    if (field.Size < texture.Size)
                    {
                        continue;
                    }

                    searchFile.BaseStream.Position = field.Start;
                    while (searchFile.BaseStream.Position < field.End)
                    {
                        a = searchFile.ReadUInt32();
                        b = data.ReadUInt32();
                        if (a != b)
                        {
                            searchFile.BaseStream.Position -= data.BaseStream.Position;
                            searchFile.BaseStream.Position += 4;
                            data.BaseStream.Position        = 0;
                        }
                        if (data.BaseStream.Position >= texture.Size)
                        {
                            foundTexture = true;
                            break;
                        }
                    }
                    if (foundTexture)
                    {
                        int address = (int)(searchFile.BaseStream.Position - texture.Size);
                        searchField.CutSearchField(address, address + texture.Size);
                        return(new Texture(texture.Name, address, texture.Format, texture.Width, texture.Height));
                    }
                }
            }
            return(null);
        }