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); }