public void LoadData(CR2WFile facFile) { byte[] data; data = File.ReadAllBytes(@"D:\w3.modding\FACE_ANIMATION\h_01_wa__ciri.w3fac"); using (MemoryStream ms = new MemoryStream(data)) using (BinaryReader br = new BinaryReader(ms)) { W3FaceFile = new CR2WFile(); w3FaceFile.Read(br); //int count = Read(br, 0); CMimicFace chunkMimicFace = W3FaceFile.Chunks[0].data as CMimicFace; CSkeleton mimicSkeleton = W3FaceFile.Chunks[1].data as CSkeleton; CSkeleton floatTrackSkeleton = W3FaceFile.Chunks[2].data as CSkeleton; CArray <SSkeletonBone> mimicSkeletonBones = mimicSkeleton.Bones; uint nbBones = (uint)mimicSkeletonBones.Count; foreach (SSkeletonBone bone in mimicSkeletonBones) { CName boneName = bone.NameAsCName; //meshSkeleton.names.Add(boneName.Value); } //convert mapping into bone array CArray <CInt32> mimicMapping = chunkMimicFace.Mapping; //ie. mimicMapping[0] = "uv_center_slide2" //give each mapping a name CArray <SSkeletonTrack> tracks = floatTrackSkeleton.Tracks; CArray <CArray <EngineQsTransform> > mimicPoses = chunkMimicFace.MimicPoses; //save poses into for (int i = 0; i < mimicPoses.Count(); i++) { AnimExportData pose = new AnimExportData(); string trackanme = tracks[i].NameAsCName.Value; pose.name = trackanme; pose.numFrames = 1; CArray <EngineQsTransform> mimicbones = mimicPoses[i]; List <Bone> exportBones = new List <Bone>(); for (int j = 0; j < mimicbones.Count(); j++) { Bone myBone = new Bone(); //finde the bone name using mapping int map = (mimicMapping[j] as CInt32).val; var BoneName = mimicSkeletonBones[map].NameAsCName; myBone.BoneName = BoneName.Value; // find the mapping float x = mimicbones[j].X.val; float y = mimicbones[j].Y.val; float z = mimicbones[j].Z.val; float pitch = mimicbones[j].Pitch.val; float yaw = mimicbones[j].Yaw.val; float roll = mimicbones[j].Roll.val; float w = mimicbones[j].W.val; float scale_x = mimicbones[j].Scale_x.val; float scale_y = mimicbones[j].Scale_y.val; float scale_z = mimicbones[j].Scale_z.val; myBone.positionFrames.Add(new Vector(x, y, z)); myBone.rotationFrames.Add(new Quaternion(pitch, yaw, roll, w)); myBone.scaleFrames.Add(new Vector(scale_x, scale_y, scale_z)); exportBones.Add(myBone); } pose.bones = exportBones; exportPoses.Add(pose); } } //SaveJson(@"D:\w3.modding\FACE_ANIMATION\face_anims_test_01.json"); }