private static GtexData ReadGtexFromVtex(Stream headers) { VtexHeader textureHeader = headers.ReadContent <VtexHeader>(); headers.Seek(textureHeader.GtexOffset - VtexHeader.Size, SeekOrigin.Current); return(headers.ReadContent <GtexData>()); }
public unsafe void ReadFromStream(Stream stream) { byte[] name = stream.EnsureRead(NameSize); fixed (byte* namePtr = &name[0]) Name = new string((sbyte*)namePtr, 0, NameSize, YkdFile.NamesEncoding).TrimEnd('\0'); Offsets = stream.ReadContent<YkdOffsets>(); Frames = new YkdFrames[Offsets.Count]; for (int i = 0; i < Frames.Length; i++) Frames[i] = stream.ReadContent<YkdFrames>(); }
public void ReadFromStream(Stream stream) { Header = stream.ReadContent <YkdHeader>(); Background = stream.ReadContent <YkdBlock>(); Offsets = stream.ReadContent <YkdOffsets>(); Blocks = new YkdBlock[Offsets.Count]; for (int i = 0; i < Blocks.Length; i++) { stream.SetPosition(Offsets[i]); Blocks[i] = stream.ReadContent <YkdBlock>(); } Resources = stream.ReadContent <YkdResources>(); }
public unsafe void ReadFromStream(Stream stream) { byte[] name = stream.EnsureRead(NameSize); fixed(byte *namePtr = &name[0]) Name = new string((sbyte *)namePtr, 0, NameSize, YkdFile.NamesEncoding).TrimEnd('\0'); Offsets = stream.ReadContent <YkdOffsets>(); Frames = new YkdFrames[Offsets.Count]; for (int i = 0; i < Frames.Length; i++) { Frames[i] = stream.ReadContent <YkdFrames>(); } }
public void Deserialize() { if (_header.Entries == null) { return; } int entryCount = Math.Max(0, _header.Entries.Length - SpecialEntriesCount); WdbMovieEntry[] entries = new WdbMovieEntry[entryCount]; for (int i = 0; i < entryCount; i++) { WpdEntry entry = _header.Entries[i + SpecialEntriesCount]; _input.SetPosition(entry.Offset); if (entry.Length != WdbMovieEntry.StructSize) { throw new InvalidDataException($"[WdbMovieHeader.Deserialize] Entry: {entry.Name}, Length: {entry.Length}, Expected length: {WdbMovieEntry.StructSize}"); } WdbMovieEntry movieEntry = _input.ReadContent <WdbMovieEntry>(); movieEntry.Entry = entry; movieEntry.PackageName = _header.GetString(movieEntry.PackageNameOffset); entries[i] = movieEntry; } _header.Movies = entries; }
public static DxTexture ReadFromWpd(WpdArchiveListing listing, WpdEntry entry) { using (Stream headers = listing.Accessor.ExtractHeaders()) using (Stream content = listing.Accessor.ExtractContent()) { headers.SetPosition(entry.Offset); GtexData gtex; SectionHeader sectionHeader = headers.ReadContent <SectionHeader>(); switch (sectionHeader.Type) { case SectionType.Txb: gtex = ReadGtexFromTxb(headers); break; case SectionType.Vtex: gtex = ReadGtexFromVtex(headers); break; default: throw new NotImplementedException(); } return(LoadFromStream(gtex, content)); } }
public ArchiveListing Read() { ArchiveListingHeaderV2 header; using (Stream input = Decrypt(out header)) { _progressTotalChanged.NullSafeInvoke(header.EntriesCount); short blockNumber = -1; bool? flag = null; ArchiveListingEntryInfoV2[] entries = new ArchiveListingEntryInfoV2[header.EntriesCount]; for (int i = 0; i < entries.Length; i++) { entries[i] = input.ReadContent <ArchiveListingEntryInfoV2>(); if (entries[i].Flag != flag) { flag = entries[i].Flag; blockNumber++; } entries[i].BlockNumber = blockNumber; } ArchiveListingCompressedData data = new ArchiveListingCompressedData(header); data.ReadFromStream(input); ArchiveListing result = new ArchiveListing(_accessor, header); ParseEntries(entries, data, result); return(result); } }
public void ReadFromStream(Stream stream) { BinaryReader br = new BinaryReader(stream); Unknown1 = br.ReadInt32(); Unknown2 = br.ReadInt32(); int count = br.ReadInt32(); Unknown3 = br.ReadInt32(); int[] offsets = new int[count]; for (int i = 0; i < count; i++) { offsets[i] = br.ReadInt32(); } int alignment = ((4 - (count % 4)) % 4); for (int i = 0; i < alignment; i++) { br.Check(r => r.ReadInt32(), 0); } Frames = new YkdFrame[count]; for (int i = 0; i < count; i++) { stream.SetPosition(offsets[i]); Frames[i] = stream.ReadContent <YkdFrame>(); } }
public void ReadFromStream(Stream stream) { BinaryReader br = new BinaryReader(stream); IsFirstBlock = stream.Position == YkdHeader.Size; Type = br.ReadUInt32(); Index = br.ReadUInt32(); AssociatedIndex = br.ReadUInt32(); Unknown = br.ReadUInt32(); for (int i = 0; i < TransformationMatrix.Length; i++) { TransformationMatrix[i] = br.ReadBigInt32(); } Offsets = stream.ReadContent <YkdOffsets>(); Entries = new YkdBlockEntry[Offsets.Count]; for (int i = 0; i < Offsets.Count; i++) { stream.SetPosition(Offsets[i]); Entries[i] = stream.ReadContent <YkdBlockEntry>(); } if (!IsFirstBlock) { switch (Type) { case 0: ZeroTail = stream.ReadContent <YkdBlockOptionalTail>(); break; case 4: Tails4 = stream.ReadContent <YkdBlockOptionalTails>(); break; case 5: case 6: Tail56 = new int[12]; for (int i = 0; i < Tail56.Length; i++) { Tail56[i] = br.ReadInt32(); } break; } } }
public void ReadFromStream(Stream stream) { BinaryReader br = new BinaryReader(stream); SamplesPerBlock = br.ReadInt16(); CoefficientsCount = br.ReadInt16(); Coefficients = stream.ReadContent <AdPcmCoefficientSet>(CoefficientsCount); }
public void ReadFromStream(Stream stream) { BinaryReader br = new BinaryReader(stream); Count = br.ReadInt32(); Unknown1 = br.ReadInt32(); Unknown2 = br.ReadInt32(); Unknown3 = br.ReadInt32(); Tails = stream.ReadContent <YkdBlockOptionalTail>(Count); }
public SeDbArchiveListing Read() { using (Stream input = _accessor.ExtractHeaders()) { SeDbResHeader header = input.ReadContent <SeDbResHeader>(); SeDbArchiveListing result = new SeDbArchiveListing(_accessor, header.Count); result.AddRange(header.Entries); return(result); } }
public WaveStream[] Read() { SectionHeader sectionHeader = _input.ReadContent <SectionHeader>(); SscfHeader sscfHeader = _input.ReadContent <SscfHeader>(); BinaryReader br = new BinaryReader(_input); _input.SetPosition(sscfHeader.WavesOffset); int[] offsets = new int[sscfHeader.NumWaves]; for (int i = 0; i < offsets.Length; i++) { offsets[i] = br.ReadInt32(); } WaveStream[] result = new WaveStream[sscfHeader.NumWaves]; for (int i = 0; i < offsets.Length; i++) { _input.SetPosition(offsets[i]); SscfWaveHeader waveHeader = _input.ReadContent <SscfWaveHeader>(); if (waveHeader.Format == SscfWaveFormat.Vorbis) { _input.SetPosition(waveHeader.DataOffset); byte[] vorbisData = _input.EnsureRead(waveHeader.DataLength); MemoryStream vorbisMs = new MemoryStream(vorbisData, 0, vorbisData.Length, false); result[i] = new VorbisWaveReader(vorbisMs); continue; } WaveFormat format = ReadWaveFormat(waveHeader); if (format == null) { continue; } _input.SetPosition(waveHeader.DataOffset); byte[] data = _input.EnsureRead(waveHeader.DataLength); MemoryStream ms = new MemoryStream(data, 0, data.Length, false); result[i] = new RawSourceWaveStream(ms, format); } return(result); }
public void ReadFromStream(Stream stream) { BinaryReader br = new BinaryReader(stream); IsFirstBlock = stream.Position == YkdHeader.Size; Type = br.ReadUInt32(); Index = br.ReadUInt32(); AssociatedIndex = br.ReadUInt32(); Unknown = br.ReadUInt32(); for (int i = 0; i < TransformationMatrix.Length; i++) TransformationMatrix[i] = br.ReadBigInt32(); Offsets = stream.ReadContent<YkdOffsets>(); Entries = new YkdBlockEntry[Offsets.Count]; for (int i = 0; i < Offsets.Count; i++) { stream.SetPosition(Offsets[i]); Entries[i] = stream.ReadContent<YkdBlockEntry>(); } if (!IsFirstBlock) { switch (Type) { case 0: ZeroTail = stream.ReadContent<YkdBlockOptionalTail>(); break; case 4: Tails4 = stream.ReadContent<YkdBlockOptionalTails>(); break; case 5: case 6: Tail56 = new int[12]; for (int i = 0; i < Tail56.Length; i++) Tail56[i] = br.ReadInt32(); break; } } }
public WdbMovieArchiveListing Read() { using (Stream input = _accessor.ExtractHeaders()) { WdbMovieHeader header = input.ReadContent <WdbMovieHeader>(); WdbMovieArchiveListing result = new WdbMovieArchiveListing(_accessor, header.Count); if (header.Movies != null) { result.AddRange(header.Movies); } return(result); } }
public void ReadFromStream(Stream stream) { Offsets = stream.ReadContent<YkdOffsets>(); Resources = new YkdResource[Offsets.Count]; for (int i = 0; i < Resources.Length; i++) { YkdResource resource = Resources[i] = new YkdResource(); stream.SetPosition(Offsets[i]); resource.ReadFromStream(stream); } if (!stream.IsEndOfStream()) throw new InvalidDataException(); }
public void ReadFromStream(Stream input) { BinaryReader br = new BinaryReader(input); Magic = br.ReadInt64(); Unknown1 = br.ReadInt32(); Unknown2 = br.ReadInt32(); br.Read(UnknownBuff, 0, UnknownBuff.Length); Count = br.ReadInt32(); Unknown3 = br.ReadInt32(); Unknown4 = br.ReadInt32(); Unknown5 = br.ReadInt32(); Entries = input.ReadContent<SeDbResEntry>(Count); }
public void ReadFromStream(Stream input) { BinaryReader br = new BinaryReader(input); Magic = br.ReadInt64(); Unknown1 = br.ReadInt32(); Unknown2 = br.ReadInt32(); br.Read(UnknownBuff, 0, UnknownBuff.Length); Count = br.ReadInt32(); Unknown3 = br.ReadInt32(); Unknown4 = br.ReadInt32(); Unknown5 = br.ReadInt32(); Entries = input.ReadContent <SeDbResEntry>(Count); }
public void ReadFromStream(Stream stream) { Offsets = stream.ReadContent <YkdOffsets>(); Resources = new YkdResource[Offsets.Count]; for (int i = 0; i < Resources.Length; i++) { YkdResource resource = Resources[i] = new YkdResource(); stream.SetPosition(Offsets[i]); resource.ReadFromStream(stream); } if (!stream.IsEndOfStream()) { throw new InvalidDataException(); } }
private static GtexData ReadGtexFromTxb(Stream headers) { TextureHeader textureHeader = headers.ReadContent <TextureHeader>(); return(headers.ReadContent <GtexData>()); }
public override void ReadFromStream(Stream input) { base.ReadFromStream(input); TextureHeader = input.ReadContent <TextureHeader>(); Gtex = input.ReadContent <GtexData>(); }
public virtual void ReadFromStream(Stream stream) { SectionHeader = stream.ReadContent <SectionHeader>(); }
public UmdFile Parse(Stream stream) { var buf = new byte[33 * 1024]; var file = new UmdFile(); //前四个字节区分文件类型 stream.ReadLength(buf, 4); //然后是5个固定的字节 stream.ReadLength(buf, 5); //下面一个字节指定文件类型 var filetype = stream.ReadByte(); if (filetype != 1) { throw new Exception("只能读取文件类型的umd文件"); } //接下来2个随机数 stream.ReadLength(buf, 2); //接下来读取文件属性02->ob FileSection p = null; do { p = stream.ReadFileProperty(buf, file); } while (p != null); //章节偏移量 file.ChapterOffset = stream.ReadChapterOffset(buf); //章节标题 file.ChapterTitle = stream.ReadChapterTitle(buf, file.ChapterOffset.ChapterOffset.Count); //正文 file.Content = stream.ReadContent(buf); //封面 file.Cover = stream.ReadCover(buf); //页面偏移 PageOffsetItem pageoffsetItem = null; do { pageoffsetItem = stream.ReadPageOffsetItem(buf); if (file.PageOffset == null) { file.PageOffset = new PageOffsetSection { PageOffsetCollection = new List <PageOffsetItem>() }; } if (pageoffsetItem != null) { file.PageOffset.PageOffsetCollection.Add(pageoffsetItem); } } while (pageoffsetItem != null); //文件结束 9个字节 stream.ReadByte(); var end = stream.ReadByte(); if (end != 0x0c) { stream.ReadLength(buf, (int)(stream.Length - stream.Position)); Console.WriteLine("文件大小对不上"); } if (file.Content.Content == null) { file.Content.Content = new string[file.ChapterOffset.ChapterOffset.Count]; } return(file); }
private Stream Decrypt(out ArchiveListingHeaderV2 header) { Stream result = _accessor.ExtractListing(); try { header = result.ReadContent <ArchiveListingHeaderV2>(); if (header.IsValid(result.Length)) { header.IsEncrypted = false; return(result); } /*using (*/ TempFileProvider tmpProvider = new TempFileProvider(_accessor.ListingEntry.Name /*"filelist"*/, ".win32.bin");/*)*/ { using (Stream output = tmpProvider.Create()) { output.WriteContent(header); result.CopyTo(output); result.SafeDispose(); } Process decrypter = new Process { StartInfo = new ProcessStartInfo() { FileName = @"Resources\Executable\ffxiiicrypt.exe", Arguments = "-d \"" + tmpProvider.FilePath + "\" 2", CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true } }; decrypter.Start(); Task <string> erroMessage = decrypter.StandardError.ReadToEndAsync(); Task <string> outputMessage = decrypter.StandardOutput.ReadToEndAsync(); decrypter.WaitForExit(); if (decrypter.ExitCode != 0) { StringBuilder sb = new StringBuilder("Decryption error! Code: "); sb.AppendLine(decrypter.ExitCode.ToString()); sb.AppendLine("Error: "); sb.AppendLine(erroMessage.Result); sb.AppendLine("Output: "); sb.AppendLine(outputMessage.Result); throw new InvalidDataException(sb.ToString()); } result = tmpProvider.OpenRead(); header = result.ReadContent <ArchiveListingHeaderV2>(); header.IsEncrypted = true; if (!header.IsValid(result.Length)) { throw new InvalidDataException(); } } return(result); } catch { result.SafeDispose(); throw; } }
private static GtexData ReadGtexFromTxb(Stream headers) { TextureHeader textureHeader = headers.ReadContent<TextureHeader>(); return headers.ReadContent<GtexData>(); }
private static GtexData ReadGtexFromVtex(Stream headers) { VtexHeader textureHeader = headers.ReadContent<VtexHeader>(); headers.Seek(textureHeader.GtexOffset - VtexHeader.Size, SeekOrigin.Current); return headers.ReadContent<GtexData>(); }
public void ReadFromStream(Stream input) { Header = input.ReadContent <GtexHeader>(); MipMapData = input.ReadContent <GtexMipMapLocation>(Header.LayerCount); }