public void Read(FileData d) { d.Endian = Endianness.Big; d.seek(0x16); int count = d.readShort(); d.seek(0x60); for (int i = 0; i < count; i++) { string name = d.readString(d.pos(), -1); d.skip(0x40); int unk = d.readInt(); int nextFile = d.readInt(); int c2 = d.readShort(); int c1 = d.readShort(); d.skip(4); // padding? int[] partsizes = new int[4]; for (int j = 0; j < 4; j++) { partsizes[j] = d.readInt(); } TreeNode part = new TreeNode(); part.Text = name; Nodes.Add(part); int off = 0; for (int j = 0; j < c1; j++) { TreeNode t = new TreeNode(); part.Nodes.Add(t); int decompressedSize = d.readInt(); byte[] dat = FileData.InflateZLIB(d.getSection(d.pos(), partsizes[j] - 4 - off)); d.skip(partsizes[j] - 4); off += partsizes[j]; string mag = new FileData(dat).Magic(); t.Text = name + "." + mag; if (mag.Equals("NTWD")) { Runtime.TextureContainers.Add(new NUT(new FileData(dat))); } if (mag.Equals("OMO ")) { Runtime.Animations.Add(t.Text, OMO.read(new FileData(dat))); MainForm.animNode.Nodes.Add(t.Text); } } } }
//<summary> //Open an animation based on filename //</summary> public void openAnimation(string filename) { //Runtime.Animations.Clear(); if (filename.EndsWith(".mta")) { MTA mta = new MTA(); try { mta.Read(filename); Runtime.MaterialAnimations.Add(filename, mta); mtaNode.Nodes.Add(filename); MainForm.Instance.viewports[0].loadMTA(mta); Runtime.TargetMTAString = filename; } catch (EndOfStreamException) { mta = null; } } else if (filename.EndsWith(".smd")) { var anim = new SkelAnimation(); if (Runtime.TargetVBN == null) { Runtime.TargetVBN = new VBN(); } SMD.read(filename, anim, Runtime.TargetVBN); leftPanel.treeRefresh(); Runtime.Animations.Add(filename, anim); animNode.Nodes.Add(filename); } else if (filename.EndsWith(".pac")) { PAC p = new PAC(); p.Read(filename); foreach (var pair in p.Files) { if (pair.Key.EndsWith(".omo")) { var anim = OMO.read(new FileData(pair.Value)); string AnimName = Regex.Match(pair.Key, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString(); //AnimName = pair.Key; //AnimName = AnimName.Remove(AnimName.Length - 4); //AnimName = AnimName.Insert(3, "_"); if (!string.IsNullOrEmpty(AnimName)) { if (Runtime.Animations.ContainsKey(AnimName)) { Runtime.Animations[AnimName].children.Add(anim); } else { animNode.Nodes.Add(AnimName); Runtime.Animations.Add(AnimName, anim); } } else { if (Runtime.Animations.ContainsKey(pair.Key)) { Runtime.Animations[pair.Key].children.Add(anim); } else { animNode.Nodes.Add(pair.Key); Runtime.Animations.Add(pair.Key, anim); } } } else if (pair.Key.EndsWith(".mta")) { MTA mta = new MTA(); try { if (!Runtime.MaterialAnimations.ContainsKey(pair.Key)) { mta.read(new FileData(pair.Value)); Runtime.MaterialAnimations.Add(pair.Key, mta); mtaNode.Nodes.Add(pair.Key); } // matching string AnimName = Regex.Match(pair.Key, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString().Replace(".mta", ".omo"); if (Runtime.Animations.ContainsKey(AnimName)) { Runtime.Animations[AnimName].children.Add(mta); } } catch (EndOfStreamException) { mta = null; } } } } if (filename.EndsWith(".dat")) { if (!filename.EndsWith("AJ.dat")) { MessageBox.Show("Not a DAT animation"); } else { if (Runtime.ModelContainers[0].dat_melee == null) { MessageBox.Show("Load a DAT model first"); } else { DAT_Animation.LoadAJ(filename, Runtime.ModelContainers[0].dat_melee.bones); } } } //if (Runtime.TargetVBN.bones.Count > 0) //{ if (filename.EndsWith(".omo")) { Runtime.Animations.Add(filename, OMO.read(new FileData(filename))); animNode.Nodes.Add(filename); } if (filename.EndsWith(".chr0")) { Runtime.Animations.Add(filename, CHR0.read(new FileData(filename), Runtime.TargetVBN)); animNode.Nodes.Add(filename); } if (filename.EndsWith(".anim")) { Runtime.Animations.Add(filename, ANIM.read(filename, Runtime.TargetVBN)); animNode.Nodes.Add(filename); } }
private void openStageToolStripMenuItem1_Click(object sender, EventArgs e) { using (var ofd = new FolderSelectDialog()) { ofd.Title = "Stage Folder"; if (ofd.ShowDialog() == DialogResult.OK) { string stagePath = ofd.SelectedPath; string modelPath = stagePath + "\\model\\"; string paramPath = stagePath + "\\param\\"; string animationPath = stagePath + "\\animation\\"; List <string> nuds = new List <string>(); if (Directory.Exists(modelPath)) { foreach (string d in Directory.GetDirectories(modelPath)) { foreach (string f in Directory.GetFiles(d)) { if (f.EndsWith(".nud")) { openNud(f, Path.GetFileName(d)); } } } } if (Directory.Exists(paramPath)) { Runtime.TargetLVD = null; foreach (string f in Directory.GetFiles(paramPath)) { if (Path.GetExtension(f).Equals(".lvd") && Runtime.TargetLVD == null) { Runtime.TargetLVD = new LVD(f); lvdList.fillList(); } } } if (Directory.Exists(animationPath)) { foreach (string d in Directory.GetDirectories(animationPath)) { foreach (string f in Directory.GetFiles(d)) { if (f.EndsWith(".omo")) { Runtime.Animations.Add(f, OMO.read(new FileData(f))); animNode.Nodes.Add(f); } else if (f.EndsWith("path.bin")) { Runtime.TargetPath = new PathBin(); Runtime.TargetPath.Read(f); } } } } } } }