Example #1
0
 private static Common.Folder_s makeRoot()
 {
     Common.Folder_s root = new Common.Folder_s();
     root    = orderFolder(MainDir, 0, "root");
     root.ID = 0xf000;
     return(root);
 }
Example #2
0
    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);
    }
Example #3
0
        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);
        }
Example #4
0
 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);
 }
Example #5
0
 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);
 }
Example #6
0
 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);
 }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
 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);
 }
Example #11
0
            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);
            }