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