public static string BoneNameFromHash(uint boneHash) { foreach (ModelContainer m in Runtime.ModelContainers) { if (m.vbn != null) { foreach (Bone b in m.vbn.bones) { if (b.boneId == boneHash) { return(b.Text); } } } } csvHashes csv = new csvHashes(Path.Combine(MainForm.executableDir, "hashTable.csv")); for (int i = 0; i < csv.ids.Count; i++) { if (csv.ids[i] == boneHash) { return(csv.names[i] + " (From hashTable.csv)"); } } return($"[Bonehash {boneHash.ToString("X")}]"); }
public static void HashMatch() { csvHashes csv = new csvHashes(Path.Combine(executableDir, "hashTable.csv")); foreach (ModelContainer m in Runtime.ModelContainers) { if (m.vbn != null) { foreach (Bone bone in m.vbn.bones) { for (int i = 0; i < csv.names.Count; i++) { if (csv.names[i] == new string(bone.boneName)) { bone.boneId = csv.ids[i]; } } if (bone.boneId == 0) { bone.boneId = Crc32.Compute(new string(bone.boneName)); } } } if (m.dat_melee != null) { foreach (Bone bone in m.dat_melee.bones.bones) { for (int i = 0; i < csv.names.Count; i++) { if (csv.names[i] == new string(bone.boneName)) { bone.boneId = csv.ids[i]; } } if (bone.boneId == 0) { bone.boneId = Crc32.Compute(new string(bone.boneName)); } } } if (m.bch != null) { foreach (BCH.BCH_Model mod in m.bch.models) { foreach (Bone bone in mod.skeleton.bones) { for (int i = 0; i < csv.names.Count; i++) { if (csv.names[i] == new string(bone.boneName)) { bone.boneId = csv.ids[i]; } } } } } } }
public void Read(FileData f) { f.Endian = Endianness.Little; f.seek(4); int count = f.readInt(); f.skip(12); int dataCount = f.readInt(); int boneCount = f.readInt(); int hashCount = f.readInt(); int hashOffset = f.readInt() + 0x28; f.skip(4); int pos = f.pos(); f.seek(hashOffset); csvHashes csv = new csvHashes(Path.Combine(MainForm.executableDir, "hashTable.csv")); List <string> bonename = new List <string>(); for (int i = 0; i < hashCount; i++) { uint hash = (uint)f.readInt(); Console.WriteLine(csv.ids[hash]); bonename.Add(csv.ids[hash]); } f.seek(pos); Console.WriteLine("Count " + count); for (int i = 0; i < dataCount; i++) { Console.WriteLine("Bone " + i + " start at " + f.pos().ToString("x")); // 3 sections int secLength = f.readInt(); int someCount = f.readInt(); // usually 2? for (int sec = 0; sec < 5; sec++) { int size = f.readInt(); int id = f.readInt(); Console.WriteLine(id + ":\t" + size.ToString("x")); for (int j = 0; j < ((size - 1) / 4) - 1; j++) { if (id == 4) { short b1 = f.readShort(); short b2 = f.readShort(); Console.Write("\t" + (b1 == -1 ? b1 + "" : bonename[b1]) + " " + b2 + "\t"); } else if (id == 5) { short b1 = f.readShort(); short b2 = f.readShort(); Console.Write("\t" + (b1 == -1 ? b1 + "" : bonename[b1]) + " " + (b2 == -1 ? b2 + "" : bonename[b2]) + "\t"); } else { Console.Write("\t" + (f.readUShort() / (id == 7 ? (float)0xffff : 1)) + " " + (f.readUShort() / (id == 7 ? (float)0xffff : 1)) + "\t"); } } Console.WriteLine(); } f.skip(8); } Console.WriteLine("0x" + f.pos().ToString("X")); f.skip(8); int hashSize = f.readInt(); int unk = f.readInt(); }
public void Read(FileData f) { f.Endian = Endianness.Little; f.seek(4); int count = f.readInt(); f.skip(12); int dataCount = f.readInt(); int boneCount = f.readInt(); int hashCount = f.readInt(); int hashOffset = f.readInt() + 0x28; f.skip(4); int pos = f.pos(); f.seek(hashOffset); csvHashes csv = new csvHashes(Path.Combine(MainForm.executableDir, "hashTable.csv")); List <string> bonename = new List <string>(); for (int i = 0; i < hashCount; i++) { uint hash = (uint)f.readInt(); for (int j = 0; j < csv.ids.Count; j++) { if (csv.ids[j] == hash) { Console.WriteLine(csv.names[j]); bonename.Add(csv.names[j]); break; } } } f.seek(pos); Console.WriteLine("Count " + count); for (int i = 0; i < dataCount; i++) { Console.WriteLine("Bone " + i + " start at " + f.pos().ToString("x")); // 3 sections int secLength = f.readInt(); int someCount = f.readInt(); // usually 2? for (int sec = 0; sec < 5; sec++) { int size = f.readInt(); int id = f.readInt(); Console.WriteLine(id + ":\t" + size.ToString("x")); for (int j = 0; j < ((size - 1) / 4) - 1; j++) { Console.Write("\t" + f.readShort() + " " + f.readShort() + "\t"); } Console.WriteLine(); } f.skip(8); } Console.WriteLine("0x" + f.pos().ToString("X")); f.skip(8); int hashSize = f.readInt(); int unk = f.readInt(); }