コード例 #1
0
        public virtual void refreshOffsets()
        {
            if (beginFile != null)
            {
                fileBeginP = (int)beginFile.getUintAt(beginOffset) + filesystemDataOffset;
            }

            if (endFile != null)
            {
                int end = (int)endFile.getUintAt(endOffset);
                if (endIsSize)
                {
                    fileSizeP = (int)end;
                }
                else
                {
                    fileSizeP = (int)end + filesystemDataOffset - fileBegin;
                }
            }
        }
コード例 #2
0
        private void decompressWithHeaderButton_Click(object sender, EventArgs e)
        {
            File f = fileTreeView.SelectedNode.Tag as File;

            try
            {
                try
                {
                    f.beginEdit(this);
                }
                catch (AlreadyEditingException)
                {
                    MessageBox.Show(LanguageManager.Get("Errors", "File"));
                    return;
                }

                if (f.getUintAt(0) != 0x37375A4C)
                {
                    MessageBox.Show(LanguageManager.Get("Errors", "NoLZHeader"));
                    f.endEdit(this);
                    return;
                }

                byte[] CompFile = f.getContents();
                byte[] CompFileWithoutHeader = new byte[CompFile.Length - 4];
                Array.Copy(CompFile, 4, CompFileWithoutHeader, 0, CompFileWithoutHeader.Length);
                byte[] RawFile = ROM.LZ77_Decompress(CompFileWithoutHeader, false);
                f.replace(RawFile, this);
                UpdateFileInfo();
                f.endEdit(this);
            }
            catch (Exception)
            {
                MessageBox.Show(LanguageManager.Get("FilesystemBrowser", "DecompressionFail"));
                if (f.beingEditedBy(this))
                {
                    f.endEdit(this);
                }
            }
        }
コード例 #3
0
        private string getFileTypeForFile(File f)
        {
            string name = f.name.ToLowerInvariant();

            if (f.id == 131)
            {
                return("NSMBeUD");
            }

            //Name checks
            if (name == "banner.bin")
            {
                return("BANNER");
            }
            if (name.Contains("_ncg"))
            {
                return("NCG");
            }
            if (name.Contains("_ncl"))
            {
                return("NCL");
            }
            if (name.Contains("_nsc"))
            {
                return("NSC");
            }
            if (name.EndsWith(".enpg"))
            {
                return("ENPG");                        //ENPG (256x256 Bitmap with 256x256 Palette)
            }
            //Header checks
            CompressedFile.CompressionType CompressionType = f.guessCompression(true);

            int i = 0;

            if (CompressionType == CompressedFile.CompressionType.LZ)
            {
                i = 5;
            }
            else if (CompressionType == CompressedFile.CompressionType.LZWithHeader)
            {
                i = 9;
            }
            else if (CompressionType == CompressedFile.CompressionType.Yaz0)
            {
                i = 17;
            }

            int HeaderMinSize = 4 + i;

            if (f.fileSize >= HeaderMinSize + 0x10 && f.getUintAt(i + 0x10) == 0x43484152)
            {
                return("NCGR");                                                                           //NCGR (NCR with header)
            }
            if (f.fileSize >= HeaderMinSize + 0x10 && f.getUintAt(i + 0x10) == 0x504C5454)
            {
                return("NCLR");                                                                           //NCLR (NCL with header)
            }
            if (f.fileSize >= HeaderMinSize + 0x10 && f.getUintAt(i + 0x10) == 0x5343524E)
            {
                return("NSCR");                                                                           //NSCR (NSC with header)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x4352414E)
            {
                return("NARC");                                                             //NARC (ARCHIVE)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30444D42)
            {
                return("BMD0");                                                             //BMD0 (NSBMD/MODEL)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30585442)
            {
                return("BTX0");                                                             //BTX0 (NSBTX/MODEL TEXTURE)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x54414453)
            {
                return("SDAT");                                                             //SDAT (SDAT/MUSIC)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30414342)
            {
                return("BCA0");                                                             //BCA0 (NSBCA/ANIMATION)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30505442)
            {
                return("BTP0");                                                             //BTP0 (NSBTP)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30415442)
            {
                return("BTA0");                                                             //BTA0 (NSBTA)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30414D42)
            {
                return("BMA0");                                                             //BMA0 (NSBMA)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x30415642)
            {
                return("BVA0");                                                             //BVA0 (NSBVA)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x4753454D)
            {
                return("BMG");                                                             //MESG (BMG/MESSAGE)
            }
            if (f.fileSize >= HeaderMinSize + 4 && f.getUintAt(i) == 0x53504120 && f.getUintAt(i + 4) == 0x315F3232)
            {
                return("SPA");                                                                                                     // APS22_1 (SPA/PARTICLE)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0X4C424E4A)
            {
                return("BNBL");                                                             //JNBL (BNBL/TOUCHPOS)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x4C434E4A)
            {
                return("BNCL");                                                             //JNCL (BNCL/GFXPOS)
            }
            if (f.fileSize >= HeaderMinSize && f.getUintAt(i) == 0x44434E4A)
            {
                return("BNCD");                                                             //JNCD (BNCD/BITMAP)
            }
            return("Unknown File");
        }