private static Common.Folder_s makeRoot() { Common.Folder_s root = new Common.Folder_s(); root = orderFolder(MainDir, 0, "root"); root.ID = 0xf000; return(root); }
public Nds LoadNds() { Header = new NdsHeader(this.reader); Header.ReadHeader(); ARM9 = new ClosableMemoryStream(); this.reader.BaseStream.Seek((long)Header.getARM9Offset(), SeekOrigin.Begin); Utils.loadStream(this.reader, Header.getARM9Size() + 12, ARM9); this.reader.BaseStream.Seek((long)Header.getARM9Ov_Off(), SeekOrigin.Begin); OverlayList = new NdsOverlay(); OverlayList.readOverlays(this.reader, Header.getARM9Ov_Size()); uint position = (uint)this.reader.BaseStream.Position; ARM7 = new ClosableMemoryStream(); Utils.loadStream(this.reader, Header.getARM7Size(), ARM7); FAT = new NdsFat_s(); FAT.ReadFat(this.reader, Header.getFAT_Size(), Header.getFAT_Off()); OverlayList.readOverlaysData(this.reader, position, (int)Header.getARM9Ov_Size(), FAT); FNT = new NdsFnt_s(); this.Tree = new Common.Folder_s(); this.reader.BaseStream.Seek((long)Header.getFNT_Off(), SeekOrigin.Begin); this.Tree = NdsFnt_s.readFnt(this.reader, Header.getFNT_Size(), Header.getFNT_Off(), FAT); Icon = new ClosableMemoryStream(); Utils.loadStream(this.reader, 0xa00, Icon); return(this); }
public Narc LoadNarc(BinaryReader reader) { reader.BaseStream.Seek(4L, SeekOrigin.Begin); magic = reader.ReadInt32(); narcSize = reader.ReadUInt32(); sectionSize = reader.ReadInt16(); sectionNum = reader.ReadInt16(); reader.ReadInt32(); fatbSize = reader.ReadUInt32(); fatbNum = reader.ReadUInt32(); fatb = new NarcFat_s(); uint fatbStartOffset = (uint)reader.BaseStream.Position; fatb.ReadFat(reader, fatbNum); reader.ReadInt32(); fntbSize = reader.ReadUInt32(); fntbStartOffset = (uint)reader.BaseStream.Position; fntb = new NarcFnt_s(); treeSystem = fntb.ReadFnt(reader, fntbSize, fntbStartOffset, fatb); reader.BaseStream.Position = fntbStartOffset + fntbSize; figm.magicId = reader.ReadChars(4); figm.sizeFigm = reader.ReadInt32(); figm.startFigm = (int)reader.BaseStream.Position; figm.fileData = new List <ClosableMemoryStream>(); for (int fileCounter = 0; fileCounter < fatbNum; fileCounter++) { ClosableMemoryStream actualFileStream = new ClosableMemoryStream(); //MessageBox.Show(fntb.getpad().ToString()); reader.BaseStream.Position = fatb.getFileStartAt(fileCounter) + fntbStartOffset + fntbSize; Utils.loadStream(reader, fatb.getFileEndAt(fileCounter) - fatb.getFileStartAt(fileCounter), actualFileStream); figm.fileData.Add(actualFileStream); } return(this); }
public static Common.Folder_s Order_Folder(List <MainDir_s> tables, int idFolder, string nameFolder) { Common.Folder_s _s = new Common.Folder_s { Name = nameFolder, ID = (ushort)idFolder, Files = tables[idFolder & 0xfff].SubDir.Files }; if (_s.Files != null) { for (int i = 0; i < _s.Files.Count; i++) { Common.FileInfo_s _s2 = _s.Files[i]; _s2.Parent_ID = (ushort)idFolder; _s.Files[i] = _s2; } } if (tables[idFolder & 0xfff].SubDir.Folders != null) { _s.Folders = new List <Common.Folder_s>(); foreach (Common.Folder_s _s3 in tables[idFolder & 0xfff].SubDir.Folders) { _s.Folders.Add(Order_Folder(tables, (int)_s3.ID, _s3.Name)); } } return(_s); }
private static Common.Folder_s initActualFolder(List <MainDir_s> tables, int idFolder, string nameFolder) { Common.Folder_s actualFolder = new Common.Folder_s { Name = nameFolder, ID = (ushort)idFolder, Files = tables[idFolder & 0xfff].SubDir.Files }; return(actualFolder); }
private static Common.Folder_s updateParentIDFiles(int idFolder, Common.Folder_s actualFolder) { for (int i = 0; i < actualFolder.Files.Count; i++) { Common.FileInfo_s actualFile = actualFolder.Files[i]; actualFile.Parent_ID = (ushort)idFolder; actualFolder.Files[i] = actualFile; } return(actualFolder); }
public static Common.Folder_s orderFolder(List <MainDir_s> tables, int idFolder, string nameFolder) { Common.Folder_s actualFolder = initActualFolder(tables, idFolder, nameFolder); if (actualFolder.Files != null) { actualFolder = updateParentIDFiles(idFolder, actualFolder); } if (tables[idFolder & 0xfff].SubDir.Folders != null) { actualFolder = orderSubFolder(tables, idFolder, actualFolder); } return(actualFolder); }
private static int loadSubFolders(BinaryReader reader, ref SubDir_s actualSubDir) { int type; Common.Folder_s actualFolder = new Common.Folder_s(); if (actualSubDir.Folders == null) { actualSubDir.Folders = new List <Common.Folder_s>(); } type = actualSubDir.Type - 0x80; actualFolder.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); actualFolder.ID = reader.ReadUInt16(); actualSubDir.Folders.Add(actualFolder); return(type); }
public static Common.Folder_s readFnt(BinaryReader reader, uint size, uint offset, Nds.NdsFat_s FAT) { loadFntDataBinary(reader, size, offset); loadSubDirOff(reader, offset); MainDir = new List <MainDir_s>(); int index = 0; List <Common.FileInfo_s> fileInfoList = new List <Common.FileInfo_s>(); while (reader.BaseStream.Position < (offset + SubDir_Off)) { index = createMainDirList(reader, offset, FAT, index, fileInfoList); } Common.Folder_s root = makeRoot(); return(root); }
private static Common.Folder_s orderSubFolder(List <MainDir_s> tables, int idFolder, Common.Folder_s actualFolder) { actualFolder.Folders = new List <Common.Folder_s>(); foreach (Common.Folder_s subFolder in tables[idFolder & 0xfff].SubDir.Folders) { actualFolder.Folders.Add(orderFolder(tables, (int)subFolder.ID, subFolder.Name)); } return(actualFolder); }
public Common.Folder_s ReadFnt(BinaryReader reader, uint size, uint offset, NarcFat_s FAT) { Common.Folder_s folderStruct = new Common.Folder_s(); long position = reader.BaseStream.Position; Fnt_Data = new byte[size]; Fnt_Data = reader.ReadBytes((int)size); reader.BaseStream.Position = offset; int index = 0; SubDir_Off = reader.ReadUInt32(); reader.BaseStream.Position = offset; MainDir = new List <MainDir_s>(); List <Common.FileInfo_s> fileInfoList = new List <Common.FileInfo_s>(); while (reader.BaseStream.Position < (position + SubDir_Off)) { MainDir_s actualDir = new MainDir_s { startOffset = reader.ReadUInt32(), firstFileId = reader.ReadUInt16(), parentId = reader.ReadUInt16() }; long num3 = reader.BaseStream.Position; reader.BaseStream.Position = offset + actualDir.startOffset; Array.Resize <byte>(ref actualDir.SubDir.Type2, index + 1); actualDir.SubDir.Type2[index] = reader.ReadByte(); actualDir.SubDir.Type = actualDir.SubDir.Type2[index]; actualDir.SubDir.Parent_ID = actualDir.firstFileId; while (actualDir.SubDir.Type != 0) { int type; if (actualDir.SubDir.Type < 0x80) { Common.FileInfo_s _s3 = new Common.FileInfo_s(); if (actualDir.SubDir.Files == null) { actualDir.SubDir.Files = new List <Common.FileInfo_s>(); } type = actualDir.SubDir.Type; _s3.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); pad += _s3.Name.Length; _s3.ID = actualDir.firstFileId; _s3.Offset = FAT.getFileStartAt((int)_s3.ID); _s3.Size = FAT.getFileEndAt((int)_s3.ID) - _s3.Offset; long num5 = reader.BaseStream.Position; reader.BaseStream.Seek((long)_s3.Offset, SeekOrigin.Begin); _s3.FileData = new ClosableMemoryStream(); Utils.loadStream(reader, _s3.Size, _s3.FileData); reader.BaseStream.Seek((long)_s3.Offset, SeekOrigin.Begin); FAT.setFileStreamAt((int)_s3.ID, _s3.FileData); reader.BaseStream.Seek(num5, SeekOrigin.Begin); actualDir.firstFileId = (ushort)(actualDir.firstFileId + 1); actualDir.SubDir.Files.Add(_s3); fileInfoList.Add(_s3); } if (actualDir.SubDir.Type > 0x80) { Common.Folder_s _s4 = new Common.Folder_s(); if (actualDir.SubDir.Folders == null) { actualDir.SubDir.Folders = new List <Common.Folder_s>(); } type = actualDir.SubDir.Type - 0x80; _s4.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); pad += _s4.Name.Length; _s4.ID = reader.ReadUInt16(); actualDir.SubDir.Folders.Add(_s4); } index++; Array.Resize <byte>(ref actualDir.SubDir.Type2, index + 1); actualDir.SubDir.Type2[index] = reader.ReadByte(); pad++; actualDir.SubDir.Type = actualDir.SubDir.Type2[index]; } MainDir.Add(actualDir); reader.BaseStream.Position = num3; } folderStruct = Order_Folder(MainDir, 0, "root"); folderStruct.ID = 0xf000; return(folderStruct); }