public FileInfo(ArchiveFile parent, byte[] data, int offset) { ParentArchive = parent; FileSize = BitConverter.ToUInt32(data, offset); FileNameOffset = BitConverter.ToUInt32(data, offset + 0x04); if (ParentArchive.MagicWord == ArchiveFile.magicWordGAR) { FullPathOffset = BitConverter.ToUInt32(data, offset + 0x08); int nameLength = (int)(Array.IndexOf(data, (byte)'\0', (int)FullPathOffset) - FullPathOffset); if (nameLength > 0) { FilePath = Encoding.ASCII.GetString(data, (int)FullPathOffset, nameLength).TrimEnd('\0'); } } else { int nameLength = (int)(Array.IndexOf(data, (byte)'\0', (int)FileNameOffset) - FileNameOffset); if (nameLength > 0) { FilePath = Encoding.ASCII.GetString(data, (int)FileNameOffset, nameLength).TrimEnd('\0'); } } }
private void openFileToolStripMenuItem_Click(object sender, EventArgs e) { if (Properties.Settings.Default.LastFile != string.Empty) { ofdOpenFile.InitialDirectory = Path.GetDirectoryName(Properties.Settings.Default.LastFile); ofdOpenFile.FileName = Path.GetFileName(Properties.Settings.Default.LastFile); } if (ofdOpenFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Properties.Settings.Default.LastFile = ofdOpenFile.FileName; meshToRender = -1; renderError = false; if (modelFile != null) { modelFile.Dispose(); } if (animFile != null) { animFile.Dispose(); } if (zsiFile != null) { zsiFile.Dispose(); } if (archiveFile != null) { archiveFile = null; } treeViewEx1.Nodes.Clear(); byte[] fileData = File.ReadAllBytes(Properties.Settings.Default.LastFile); PerformFileAction(fileData); archiveToolStripMenuItem.Enabled = (archiveFile != null); dumpToolStripMenuItem.Enabled = (modelFile != null); this.Text = string.Format("{0} - [{1}]", Program.Description, Path.GetFileName(Properties.Settings.Default.LastFile)); } }
private void PerformFileAction(byte[] fileData) { FileTypes fileType = IdentifyFile(fileData); switch (fileType) { case FileTypes.cmb: modelFile = new ModelHandler(fileData, 0, fileData.Length); treeViewEx1.Nodes.Add(new TreeNode(Path.GetFileName(Properties.Settings.Default.LastFile)) { ImageKey = "default" }); AddSepdChunksToTree(treeViewEx1, treeViewEx1.TopNode); break; case FileTypes.ZAR: case FileTypes.GAR: archiveFile = new ArchiveFile(fileData); treeViewEx1.Enabled = true; CreateArchiveTree(); break; case FileTypes.LzS: byte[] decData = LZSS.Decompress(fileData); string outfile = @"H:\temp\mm3d-test\" + Path.GetFileName(Properties.Settings.Default.LastFile) + ".dec"; //File.WriteAllBytes(outfile, decData); PerformFileAction(decData); break; case FileTypes.ZSI: treeViewEx1.Nodes.Add(new TreeNode(Path.GetFileName(Properties.Settings.Default.LastFile)) { ImageKey = "default" }); zsiFile = new ZSIHandler(fileData, 0, fileData.Length); if (zsiFile.SelectedSetup != null) { modelFile = zsiFile.SelectedSetup.Model; } AddZsiDataToTree(treeViewEx1, treeViewEx1.TopNode); break; } }
public FileType(ArchiveFile parent, byte[] data, int offset) { ParentArchive = parent; NumberOfFilesWithType = BitConverter.ToUInt32(data, offset); FileNumberIndexOffset = BitConverter.ToUInt32(data, offset + 0x04); FileTypeNameOffset = BitConverter.ToUInt32(data, offset + 0x08); AssumedConstant = BitConverter.ToUInt32(data, offset + 0x0C); int nameLength = (int)(Array.IndexOf(data, (byte)'\0', (int)FileTypeNameOffset) - FileTypeNameOffset); if (nameLength > 0) { FileTypeName = Encoding.ASCII.GetString(data, (int)FileTypeNameOffset, nameLength).TrimEnd('\0'); } FileNumberIndex = new uint[NumberOfFilesWithType]; for (int i = 0; i < FileNumberIndex.Length; i++) { FileNumberIndex[i] = BitConverter.ToUInt32(data, (int)(FileNumberIndexOffset + (i * 4))); } }