private void Parse() { int AnimationCount = BitConverter.ToInt16(rawBytes, 18); int SkeletonOffset = BitConverter.ToInt32(rawBytes, 20); int AnimationOffset = BitConverter.ToInt32(rawBytes, 24); int AnimationNamesOffset = BitConverter.ToInt32(rawBytes, 28); //Header eanFile.I_08 = BitConverter.ToInt32(rawBytes, 8); eanFile.IsCamera = (rawBytes[16] == 0) ? false : true; eanFile.I_17 = rawBytes[17]; //Skeleton eanFile.Skeleton = ESK_Skeleton.Read(rawBytes, SkeletonOffset, false); //Animations eanFile.Animations = AsyncObservableCollection <EAN_Animation> .Create(); if (AnimationCount > 0) { for (int i = 0; i < AnimationCount; i++) { if (BitConverter.ToInt32(rawBytes, AnimationOffset) != 0) { eanFile.Animations.Add(ParseAnimation(BitConverter.ToInt32(rawBytes, AnimationOffset), BitConverter.ToInt32(rawBytes, AnimationNamesOffset), i)); } AnimationOffset += 4; AnimationNamesOffset += 4; } } eanFile.LinkEskData(); }
private void WriteSkeleton(ESK_Skeleton skeleton, int offsetToReplace) { bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count()), offsetToReplace); int startOffset = bytes.Count(); int count = (nonHierarchalBones != null) ? nonHierarchalBones.Count() : 0; bytes.AddRange(BitConverter.GetBytes((short)count)); bytes.AddRange(BitConverter.GetBytes(skeleton.I_02)); bytes.AddRange(new byte[24]); bytes.AddRange(BitConverter_Ex.GetBytes(skeleton.I_28)); if (count > 0) { //Writing Index List bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 4); for (int i = 0; i < count; i++) { bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].Index1)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].Index2)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].Index3)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].Index4)); } //Writing Name Table and List bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 8); List <Xv2CoreLib.StringWriter.StringInfo> stringInfo = new List <Xv2CoreLib.StringWriter.StringInfo>(); for (int i = 0; i < count; i++) { stringInfo.Add(new Xv2CoreLib.StringWriter.StringInfo() { StringToWrite = nonHierarchalBones[i].Name, Offset = bytes.Count(), RelativeOffset = startOffset }); bytes.AddRange(new byte[4]); } for (int i = 0; i < count; i++) { bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - stringInfo[i].RelativeOffset), stringInfo[i].Offset); bytes.AddRange(Encoding.ASCII.GetBytes(stringInfo[i].StringToWrite)); bytes.Add(0); } //Writing RelativeTransform StartNewLine(); bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 12); for (int i = 0; i < count; i++) { bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_00)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_04)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_08)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_12)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_16)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_20)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_24)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_28)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_32)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_36)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_40)); bytes.AddRange(BitConverter.GetBytes(nonHierarchalBones[i].RelativeTransform.F_44)); } //Writing AbsoluteTransform (esk only) //StartNewLine(); //bytes = CommonOperations.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 16); // for (int i = 0; i < count; i++) // { // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_00)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_04)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_08)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_12)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_16)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_20)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_24)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_28)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_32)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_36)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_40)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_44)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_48)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_52)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_56)); // bytes.AddRange(BitConverter.GetBytes(bones[i].AbsoluteTransform.F_60)); //} //Writing Unk1 if (skeleton.Unk1 != null) { bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 20); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_00)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_04)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_08)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_12)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_16)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_20)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_24)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_28)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_32)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_36)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_40)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_44)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_48)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_52)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_56)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_60)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_64)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_68)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_72)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_76)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_80)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_84)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_88)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_92)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_96)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_100)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_104)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_108)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_112)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_116)); bytes.AddRange(BitConverter.GetBytes(skeleton.Unk1.I_120)); } //Writing Unk2 if (skeleton.UseUnk2 == true && count > 0) { bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count() - startOffset), startOffset + 24); for (int i = 0; i < count; i++) { bytes.AddRange(BitConverter.GetBytes(281470681743360)); } } } }