diff --git a/KKdBaseLib/Auth3D.cs b/KKdBaseLib/Auth3D.cs index e415f9b..3a81e7b 100644 --- a/KKdBaseLib/Auth3D.cs +++ b/KKdBaseLib/Auth3D.cs @@ -2,6 +2,7 @@ namespace KKdBaseLib.Auth3D { public struct Data { + public string[] Auth2D; public string[] Motion; public string[] ObjectList; public string[] ObjectHRCList; @@ -62,9 +63,9 @@ namespace KKdBaseLib.Auth3D public float Aspect; public float CameraApertureH; public float CameraApertureW; - public Key FOV; - public Key Roll; - public Key FocalLength; + public Key? FocalLength; + public Key? FOV; + public Key? Roll; public ModelTransform MT; } } @@ -83,7 +84,6 @@ namespace KKdBaseLib.Auth3D public struct DOF { - public string Name; public ModelTransform MT; } @@ -171,7 +171,6 @@ namespace KKdBaseLib.Auth3D public struct Light { public int Id; - public string Name; public string Type; public Key? ConeAngle; public Key? Constant; @@ -230,6 +229,7 @@ namespace KKdBaseLib.Auth3D public string Morph; public string UIDName; public string ParentName; + public string ParentNode; public ModelTransform MT; public TexturePattern[] TexPat; public TextureTransform[] TexTrans; @@ -262,6 +262,8 @@ namespace KKdBaseLib.Auth3D public bool Shadow; public string Name; public string UIDName; + public string ParentName; + public string ParentNode; public ObjectNode[] Node; } @@ -275,11 +277,11 @@ namespace KKdBaseLib.Auth3D public struct PlayControl { - public int Begin; + public float Begin; public int? Div; - public int FPS; - public int? Offset; - public int Size; + public float FPS; + public float? Offset; + public float Size; } public struct Point diff --git a/KKdBaseLib/F2/ENRS.cs b/KKdBaseLib/F2/ENRS.cs index 3f48a7a..ec462f3 100644 --- a/KKdBaseLib/F2/ENRS.cs +++ b/KKdBaseLib/F2/ENRS.cs @@ -223,7 +223,7 @@ namespace KKdBaseLib.F2 public int Size; public int Repeat; public SubENRSEntry[] Sub; - + public ENRSEntry(int offset, int count, int size, int repeat) { Offset = offset; Count = count; Size = size; Repeat = repeat; Sub = new SubENRSEntry[count]; } @@ -255,13 +255,12 @@ namespace KKdBaseLib.F2 public int SizeSkip => Skip + Reverse * (2 << (byte)Type); public int Size => Reverse * (2 << (byte)Type); - public override string ToString() => "Skip: " + Skip + - "; Reverse: " + Reverse + "; Type: " + Type; + public override string ToString() => + $"Skip: {Skip}; Reverse: {Reverse}; Type: {Type}"; } public override string ToString() => - "Offset: " + Offset + "; Count: " + Count + "; " + - "Size: " + Size + "; Repeat: " + Repeat; + $"Offset: {Offset}; Count: {Count}; Size: {Size}; Repeat: {Repeat}"; } public override string ToString() => diff --git a/KKdBaseLib/KKdBaseLib.csproj b/KKdBaseLib/KKdBaseLib.csproj index 9d040d6..1ce0590 100644 --- a/KKdBaseLib/KKdBaseLib.csproj +++ b/KKdBaseLib/KKdBaseLib.csproj @@ -6,12 +6,12 @@ korenkonder (C) 2019-2021 A base library - 0.4.10.7 + 0.4.10.8 KKdBaseLib KKdBaseLib net461 KKdBaseLib - 0.4.10.7 + 0.4.10.8 AnyCPU diff --git a/KKdMainLib/A3DA.cs b/KKdMainLib/A3DA.cs index 0ad6880..7aff64f 100644 --- a/KKdMainLib/A3DA.cs +++ b/KKdMainLib/A3DA.cs @@ -178,10 +178,8 @@ namespace KKdMainLib if (dict.FV(out value, "dof.name")) { - DOF dof = new DOF { Name = value }; Head.Format = Format.AFT; - dof.MT = RMT("dof"); - Data.DOF = dof; + Data.DOF = new DOF { MT = RMT("dof") }; } if (dict.FV(out value, "ambient.length")) @@ -191,12 +189,24 @@ namespace KKdMainLib for (i0 = 0; i0 < Data.Ambient.Length; i0++) { name = "ambient." + i0; + dict.FV(out Data.Ambient[i0].Name, name + ".name"); Data.Ambient[i0]. LightDiffuse = RRGBAKN(name + ".light.Diffuse"); Data.Ambient[i0].RimLightDiffuse = RRGBAKN(name + ".rimlight.Diffuse"); } } + if (dict.FV(out value, "auth_2d.length")) + { + Data.Auth2D = new string[int.Parse(value)]; + for (i0 = 0; i0 < Data.Ambient.Length; i0++) + { + name = "auth_2d." + i0; + + dict.FV(out Data.Auth2D[i0], name + ".name"); + } + } + if (dict.FV(out value, "camera_root.length")) { Data.CameraRoot = new CameraRoot[int.Parse(value)]; @@ -206,24 +216,24 @@ namespace KKdMainLib nameView = name + ".view_point"; dict.FV(out Data.CameraRoot[i0].VP.Aspect, nameView + ".aspect"); - dict.FV(out i1, nameView + ".fov_is_horizontal"); - Data.CameraRoot[i0].VP.FOVIsHorizontal = i1 != 0; - if (!Data.CameraRoot[i0].VP.FOVIsHorizontal) + if (dict.FV(out i1, nameView + ".fov_is_horizontal")) + { + Data.CameraRoot[i0].VP.FOVIsHorizontal = i1 != 0; + Data.CameraRoot[i0].VP.FOV = RKN(nameView + ".fov"); + } + else { dict.FV(out Data.CameraRoot[i0].VP. CameraApertureH, nameView + ".camera_aperture_h"); dict.FV(out Data.CameraRoot[i0].VP. CameraApertureW, nameView + ".camera_aperture_w"); + Data.CameraRoot[i0].VP.FocalLength = RKN(nameView + ".focal_length"); } Data.CameraRoot[i0]. MT = RMT(name); Data.CameraRoot[i0].Interest = RMT(name + ".interest"); Data.CameraRoot[i0].VP. MT = RMT(nameView); - if (!Data.CameraRoot[i0].VP.FOVIsHorizontal) - Data.CameraRoot[i0].VP.FocalLength = RK(nameView + ".focal_length"); - else - Data.CameraRoot[i0].VP.FOV = RK(nameView + ".fov"); - Data.CameraRoot[i0].VP.Roll = RK(nameView + ".roll"); + Data.CameraRoot[i0].VP.Roll = RKN(nameView + ".roll"); } } @@ -235,7 +245,7 @@ namespace KKdMainLib name = "chara." + i0; dict.FV(out Data.Chara[i0].Name, name + ".name"); - + Data.Chara[i0].MT = RMT(name); } } @@ -294,7 +304,6 @@ namespace KKdMainLib name = "light." + i0; dict.FV(out Data.Light[i0].Id , name + ".id" ); - dict.FV(out Data.Light[i0].Name, name + ".name"); dict.FV(out Data.Light[i0].Type, name + ".type"); Data.Light[i0].Ambient = RRGBAKN(name + ".Ambient"); @@ -389,9 +398,9 @@ namespace KKdMainLib name = "material_list." + i0; dict.FV(out Data.MaterialList[i0].Name, name + ".name"); - Data.MaterialList[i0].BlendColor = RRGBAK(name + ".blend_color"); - Data.MaterialList[i0].GlowIntensity = RK (name + ".glow_intensity"); - Data.MaterialList[i0].Incandescence = RRGBAK(name + ".incandescence"); + Data.MaterialList[i0].BlendColor = RRGBAKN(name + ".blend_color"); + Data.MaterialList[i0].GlowIntensity = RKN (name + ".glow_intensity"); + Data.MaterialList[i0].Incandescence = RRGBAKN(name + ".incandescence"); } } @@ -413,6 +422,7 @@ namespace KKdMainLib dict.FV(out Data.Object[i0].MorphOffset, name + ".morph_offset"); dict.FV(out Data.Object[i0]. Name, name + ".name"); dict.FV(out Data.Object[i0]. ParentName, name + ".parent_name"); + dict.FV(out Data.Object[i0]. ParentNode, name + ".parent_node"); if (dict.FV(out Data.Object[i0]. Pat , name + ".pat" )) dict.FV(out Data.Object[i0]. PatOffset, name + ".pat_offset"); dict.FV(out Data.Object[i0]. UIDName, name + ".uid_name"); @@ -464,8 +474,10 @@ namespace KKdMainLib { name = "objhrc." + i0; - dict.FV(out Data.ObjectHRC[i0]. Name, name + ".name"); - dict.FV(out Data.ObjectHRC[i0].UIDName, name + ".uid_name"); + dict.FV(out Data.ObjectHRC[i0]. Name, name + ".name"); + dict.FV(out Data.ObjectHRC[i0].ParentName, name + ".parent_name"); + dict.FV(out Data.ObjectHRC[i0].ParentNode, name + ".parent_node"); + dict.FV(out Data.ObjectHRC[i0]. UIDName, name + ".uid_name"); dict.FV(out int shadow, name + ".shadow"); Data.ObjectHRC[i0].Shadow = shadow != 0; if (dict.FV(out value, name + ".node.length")) @@ -474,7 +486,7 @@ namespace KKdMainLib for (i1 = 0; i1 < Data.ObjectHRC[i0].Node.Length; i1++) { nameView = name + ".node." + i1; - + if (dict.SW(nameView + ".joint_orient")) { Vec3 jointOrient = new Vec3(); @@ -515,7 +527,7 @@ namespace KKdMainLib name = "point." + i0; dict.FV(out Data.Point[i0].Name, name + ".name"); - + Data.Point[i0].MT = RMT(name); } } @@ -555,6 +567,19 @@ namespace KKdMainLib W("ambient.length", Data.Fog.Length); } + if (Data.Auth2D != null) + { + so0 = Data.Auth2D.Length.SW(); + for (i0 = 0; i0 < Data.Auth2D.Length; i0++) + { + soi0 = so0[i0]; + name = "auth_2d." + soi0; + + W(name + ".name", Data.Auth2D[soi0]); + } + W("auth_2d.length", Data.Fog.Length); + } + if (Data.CameraAuxiliary != null) { name = "camera_auxiliary"; @@ -587,17 +612,17 @@ namespace KKdMainLib W(ref cr.Interest, name + ".interest"); W(ref cr.MT, name, 0b11110); W(nameView + ".aspect", cr.VP.Aspect); - if (!cr.VP.FOVIsHorizontal) + if (cr.VP.FOV.HasValue) + { + W(ref cr.VP.FOV, nameView + ".fov"); + W(nameView + ".fov_is_horizontal", cr.VP.FOVIsHorizontal ? 1 : 0); + } + else { W(nameView + ".camera_aperture_h", cr.VP.CameraApertureH); W(nameView + ".camera_aperture_w", cr.VP.CameraApertureW); W(ref cr.VP.FocalLength, nameView + ".focal_length"); } - else - { - W(ref cr.VP.FOV, nameView + ".fov"); - W(nameView + ".fov_is_horizontal", 1); - } W(ref cr.VP.MT , nameView, 0b10000); W(ref cr.VP.Roll, nameView + ".roll"); W(ref cr.VP.MT , nameView, 0b01111); @@ -635,7 +660,7 @@ namespace KKdMainLib if (Data.DOF != null && (Head.Format == Format.AFT || Head.Format == Format.FT)) { DOF dof = Data.DOF.Value; - W("dof.name", dof.Name); + W("dof.name", "DOF"); W(ref dof.MT, "dof"); Data.DOF = dof; } @@ -710,7 +735,16 @@ namespace KKdMainLib } W(ref light.Specular , name + ".Specular" ); W(name + ".id" , light.Id ); - W(name + ".name", light.Name); + W(name + ".name", light.Id switch + { + 0 => "Char", + 1 => "Stage", + 2 => "Sun", + 3 => "Reflect", + 5 => "CharColor", + 6 => "ToneCurve", + _ => "none", + }); W(ref light.Position , name + ".position" ); W(ref light.SpotDirection, name + ".spot_direction"); W(name + ".type", light.Type); @@ -833,6 +867,7 @@ namespace KKdMainLib } W(name + ".name" , @object.Name ); W(name + ".parent_name", @object.ParentName); + W(name + ".parent_node", @object.ParentNode); if (@object.Pat != null) { W(name + ".pat" , @object.Pat ); @@ -932,9 +967,11 @@ namespace KKdMainLib W(name + ".node.length", objectHRC.Node.Length); } + W(name + ".parent_name", objectHRC.ParentName); + W(name + ".parent_node", objectHRC.ParentNode); if (objectHRC.Shadow) W(name + ".shadow", 1); - W(name + ".uid_name", objectHRC.UIDName); + W(name + ".uid_name", objectHRC. UIDName); } W("objhrc.length", Data.ObjectHRC.Length); } @@ -1002,13 +1039,8 @@ namespace KKdMainLib } private Vec4? RRGBAKN(string str) => - dict.FV(out bool b, str + ".") ? b ? - (Vec4?)new Vec4 { W = RKNS(str + ".a"), Z = RKNS(str + ".b"), - Y = RKNS(str + ".g"), X = RKNS(str + ".r") } : null : null; - - private Vec4 RRGBAK(string str) => - new Vec4 { W = RKNS(str + ".a"), Z = RKNS(str + ".b"), - Y = RKNS(str + ".g"), X = RKNS(str + ".r") }; + dict.SW(str) ? (Vec4?)new Vec4 { W = RKNS(str + ".a"), Z = RKNS(str + ".b"), + Y = RKNS(str + ".g"), X = RKNS(str + ".r") } : null; private Vec3 RV3(string str) => new Vec3 { X = RK(str + ".x"), Y = RK(str + ".y"), Z = RK(str + ".z") }; @@ -1239,9 +1271,9 @@ namespace KKdMainLib RMT(ref Data.CameraRoot[i0]. MT); RMT(ref Data.CameraRoot[i0].Interest); RMT(ref Data.CameraRoot[i0].VP. MT); - RK (ref Data.CameraRoot[i0].VP.FocalLength); - RK (ref Data.CameraRoot[i0].VP.FOV ); - RK (ref Data.CameraRoot[i0].VP.Roll ); + RKN(ref Data.CameraRoot[i0].VP.FocalLength); + RKN(ref Data.CameraRoot[i0].VP.FOV ); + RKN(ref Data.CameraRoot[i0].VP.Roll ); } if (Data.Chara != null) @@ -1380,7 +1412,7 @@ namespace KKdMainLib WO(ref Data.CameraRoot[i0].VP. MT, ReturnToOffset); WO(ref Data.CameraRoot[i0].Interest, ReturnToOffset); } - + if (Data.Chara != null) for (i0 = 0; i0 < Data.Chara.Length; i0++) WO(ref Data.Chara[i0].MT, ReturnToOffset); @@ -1422,7 +1454,7 @@ namespace KKdMainLib if (Data.ObjectHRC[i0].Node != null) for (i1 = 0; i1 < Data.ObjectHRC[i0].Node.Length; i1++) WO(ref Data.ObjectHRC[i0].Node[i1].MT, ReturnToOffset); - + if (Data.Point != null) for (i0 = 0; i0 < Data.Point.Length; i0++) WO(ref Data.Point[i0].MT, ReturnToOffset); @@ -1791,9 +1823,9 @@ namespace KKdMainLib MMT(ref Data.CameraRoot[i0]. MT, ref mData.CameraRoot[i0]. MT); MMT(ref Data.CameraRoot[i0].Interest, ref mData.CameraRoot[i0].Interest); MMT(ref Data.CameraRoot[i0].VP. MT, ref mData.CameraRoot[i0].VP. MT); - MK (ref Data.CameraRoot[i0].VP.FocalLength, ref mData.CameraRoot[i0].VP.FocalLength); - MK (ref Data.CameraRoot[i0].VP.FOV , ref mData.CameraRoot[i0].VP.FOV ); - MK (ref Data.CameraRoot[i0].VP.Roll , ref mData.CameraRoot[i0].VP.Roll ); + MKN(ref Data.CameraRoot[i0].VP.FocalLength, ref mData.CameraRoot[i0].VP.FocalLength); + MKN(ref Data.CameraRoot[i0].VP.FOV , ref mData.CameraRoot[i0].VP.FOV ); + MKN(ref Data.CameraRoot[i0].VP.Roll , ref mData.CameraRoot[i0].VP.Roll ); } if (Data.Chara != null && mData.Chara != null) @@ -2039,6 +2071,14 @@ namespace KKdMainLib }; } + if ((temp = a3d["Auth2D", true]).NotNull) + { + Data.Auth2D = new string[temp.Array.Length]; + + for (i = 0; i < Data.Auth2D.Length; i++) + Data.Auth2D[i] = temp[i].RS(); + } + if ((temp = a3d["CameraAuxiliary"]).NotNull) Data.CameraAuxiliary = new CameraAuxiliary { @@ -2063,10 +2103,18 @@ namespace KKdMainLib if ((temp1 = temp[i]["ViewPoint"]).IsNull) continue; - bool fovIsHorizontal = temp1.RB(temp1["FOVHorizontal"].NotNull - ? "FOVHorizontal" : "FOVIsHorizontal"); - - if (!fovIsHorizontal) + if (temp1[temp1["FOVHorizontal"].NotNull + ? "FOVHorizontal" : "FOVIsHorizontal"].NotNull) + Data.CameraRoot[i].VP = new CameraRoot.ViewPoint + { + MT = temp1.RMT(), + Aspect = temp1.RF32("Aspect"), + FOVIsHorizontal = temp1.RB(temp1["FOVHorizontal"].NotNull + ? "FOVHorizontal" : "FOVIsHorizontal"), + FOV = temp1.RK ("FOV" ), + Roll = temp1.RK ("Roll" ), + }; + else Data.CameraRoot[i].VP = new CameraRoot.ViewPoint { MT = temp1.RMT(), @@ -2074,18 +2122,8 @@ namespace KKdMainLib CameraApertureH = temp1.RF32("CameraApertureH"), CameraApertureW = temp1.RF32("CameraApertureW"), FocalLength = temp1.RK ("FocalLength" ), - FOVIsHorizontal = false, Roll = temp1.RK ("Roll" ), }; - else - Data.CameraRoot[i].VP = new CameraRoot.ViewPoint - { - MT = temp1.RMT(), - Aspect = temp1.RF32("Aspect"), - FOVIsHorizontal = true, - FOV = temp1.RK ("FOV" ), - Roll = temp1.RK ("Roll" ), - }; } } @@ -2112,11 +2150,7 @@ namespace KKdMainLib } if ((temp = a3d["DOF"]).NotNull) - Data.DOF = new DOF - { - MT = temp.RMT(), - Name = temp.RS("Name"), - }; + Data.DOF = new DOF { MT = temp.RMT() }; if ((temp = a3d["Event", true]).NotNull) { @@ -2168,7 +2202,6 @@ namespace KKdMainLib Data.Light[i] = new Light { Id = temp[i].RI32 ("Id" ), - Name = temp[i].RS ("Name" ), Type = temp[i].RS ("Type" ), Ambient = temp[i].RRGBAKN("Ambient" ), ConeAngle = temp[i].RKN ("ConeAngle" ), @@ -2188,7 +2221,6 @@ namespace KKdMainLib Data.Light[i] = new Light { Id = temp[i].RI32 ("Id" ), - Name = temp[i].RS ("Name" ), Type = temp[i].RS ("Type" ), Ambient = temp[i].RRGBAKN("Ambient" ), ConeAngle = temp[i].RKN ("ConeAngle" ), @@ -2212,10 +2244,10 @@ namespace KKdMainLib for (i = 0; i < Data.MaterialList.Length; i++) Data.MaterialList[i] = new MaterialList { - Name = temp[i].RS ( "Name"), - BlendColor = temp[i].RRGBAK( "BlendColor"), - GlowIntensity = temp[i].RK ("GlowIntensity"), - Incandescence = temp[i].RRGBAK("Incandescence"), + Name = temp[i].RS ( "Name"), + BlendColor = temp[i].RRGBAKN( "BlendColor"), + GlowIntensity = temp[i].RKN ("GlowIntensity"), + Incandescence = temp[i].RRGBAKN("Incandescence"), }; } @@ -2293,6 +2325,7 @@ namespace KKdMainLib MorphOffset = temp[i0].RF32("MorphOffset"), Name = temp[i0].RS ( "Name"), ParentName = temp[i0].RS ( "ParentName"), + ParentNode = temp[i0].RS ( "ParentNode"), Pat = temp[i0].RS ( "Pat" ), PatOffset = temp[i0].RF32( "PatOffset"), UIDName = temp[i0].RS ( "UIDName"), @@ -2359,9 +2392,11 @@ namespace KKdMainLib { Data.ObjectHRC[i0] = new ObjectHRC { - Name = temp[i0].RS( "Name"), - Shadow = temp[i0].RB( "Shadow"), - UIDName = temp[i0].RS("UIDName"), + Name = temp[i0].RS( "Name"), + ParentName = temp[i0].RS("ParentName"), + ParentNode = temp[i0].RS("ParentNode"), + Shadow = temp[i0].RB( "Shadow"), + UIDName = temp[i0].RS( "UIDName"), }; if ((temp1 = temp[i0]["Node", true]).NotNull) @@ -2466,6 +2501,14 @@ namespace KKdMainLib a3d.Add(ambient); } + if (Data.Auth2D != null) + { + MsgPack auth2D = new MsgPack(Data.Ambient.Length, "Auth2D"); + for (i = 0; i < Data.Ambient.Length; i++) + auth2D[i] = new MsgPack(null, Data.Ambient[i].Name); + a3d.Add(auth2D); + } + if (Data.CameraAuxiliary != null) { CameraAuxiliary ca = Data.CameraAuxiliary.Value; @@ -2483,14 +2526,13 @@ namespace KKdMainLib { MsgPack cameraRoot = new MsgPack(Data.CameraRoot.Length, "CameraRoot"); for (i = 0; i < Data.CameraRoot.Length; i++) - if (!Data.CameraRoot[i].VP.FOVIsHorizontal) + if (Data.CameraRoot[i].VP.FOV.HasValue) cameraRoot[i] = MsgPack.New .Add("Interest", ref Data.CameraRoot[i].Interest) .Add(new MsgPack("ViewPoint") .Add("Aspect" , Data.CameraRoot[i].VP.Aspect ) - .Add("CameraApertureH", Data.CameraRoot[i].VP.CameraApertureH) - .Add("CameraApertureW", Data.CameraRoot[i].VP.CameraApertureW) - .Add("FocalLength" , ref Data.CameraRoot[i].VP.FocalLength ) + .Add("FOVIsHorizontal", Data.CameraRoot[i].VP.FOVIsHorizontal) + .Add("FOV" , ref Data.CameraRoot[i].VP.FOV ) .Add("Roll" , ref Data.CameraRoot[i].VP.Roll ) .Add(ref Data.CameraRoot[i].VP.MT)) .Add(ref Data.CameraRoot[i]. MT); @@ -2499,8 +2541,9 @@ namespace KKdMainLib .Add("Interest", ref Data.CameraRoot[i].Interest) .Add(new MsgPack("ViewPoint") .Add("Aspect" , Data.CameraRoot[i].VP.Aspect ) - .Add("FOVIsHorizontal", Data.CameraRoot[i].VP.FOVIsHorizontal) - .Add("FOV" , ref Data.CameraRoot[i].VP.FOV ) + .Add("CameraApertureH", Data.CameraRoot[i].VP.CameraApertureH) + .Add("CameraApertureW", Data.CameraRoot[i].VP.CameraApertureW) + .Add("FocalLength" , ref Data.CameraRoot[i].VP.FocalLength ) .Add("Roll" , ref Data.CameraRoot[i].VP.Roll ) .Add(ref Data.CameraRoot[i].VP.MT)) .Add(ref Data.CameraRoot[i]. MT); @@ -2527,7 +2570,7 @@ namespace KKdMainLib if (Data.DOF != null) { DOF dof = Data.DOF.Value; - a3d.Add(new MsgPack("DOF").Add("Name", dof.Name).Add(ref dof.MT)); + a3d.Add(new MsgPack("DOF").Add(ref dof.MT)); Data.DOF = dof; } @@ -2564,7 +2607,6 @@ namespace KKdMainLib MsgPack light = new MsgPack(Data.Light.Length, "Light"); for (i = 0; i < Data.Light.Length; i++) light[i] = MsgPack.New.Add("Id" , Data.Light[i].Id) - .Add("Name", Data.Light[i].Name) .Add("Type", Data.Light[i].Type) .Add("Ambient" , ref Data.Light[i].Ambient ) .Add("ConeAngle" , ref Data.Light[i].ConeAngle ) @@ -2600,7 +2642,7 @@ namespace KKdMainLib instance[i1].Add("Shadow", true); instance[i1].Add("UIDName", Data.MObjectHRC[i0].Instances[i1].UIDName); } - + _mObjectHRC.Add(instance); } @@ -2665,14 +2707,15 @@ namespace KKdMainLib { MsgPack _object = MsgPack.New; if (Data.Object[i0].Morph != null) - _object.Add("Morph" , Data.Object[i0].Morph ) - .Add("MorphOffset", Data.Object[i0].MorphOffset); + _object = _object.Add("Morph" , Data.Object[i0].Morph ) + .Add("MorphOffset", Data.Object[i0].MorphOffset); _object.Add("Name", Data.Object[i0].Name); if (Data.Object[i0].Pat != null) - _object.Add("Pat" , Data.Object[i0].Pat ) - .Add("PatOffset", Data.Object[i0].PatOffset); - _object.Add("ParentName", Data.Object[i0].ParentName) - .Add( "UIDName", Data.Object[i0]. UIDName); + _object = _object.Add("Pat" , Data.Object[i0].Pat ) + .Add("PatOffset", Data.Object[i0].PatOffset); + _object = _object.Add("ParentName", Data.Object[i0].ParentName) + .Add("ParentNode", Data.Object[i0].ParentNode) + .Add( "UIDName", Data.Object[i0]. UIDName); if (Data.Object[i0].TexPat != null) { MsgPack texPat = new MsgPack(Data.Object[i0].TexPat.Length, "TexturePattern"); @@ -2680,8 +2723,8 @@ namespace KKdMainLib { texPat[i1] = MsgPack.New.Add("Name", Data.Object[i0].TexPat[i1].Name); if (Data.Object[i0].TexPat[i1].Pat != null) - texPat[i1].Add("Pat" , Data.Object[i0].TexPat[i1].Pat ) - .Add("PatOffset", Data.Object[i0].TexPat[i1].PatOffset); + texPat[i1] = texPat[i1].Add("Pat" , Data.Object[i0].TexPat[i1].Pat ) + .Add("PatOffset", Data.Object[i0].TexPat[i1].PatOffset); } _object.Add(texPat); } @@ -2714,10 +2757,13 @@ namespace KKdMainLib MsgPack objectHRC = new MsgPack(Data.ObjectHRC.Length, "ObjectHRC"); for (i0 = 0; i0 < Data.ObjectHRC.Length; i0++) { - MsgPack _objectHRC = MsgPack.New.Add("Name", Data.MObjectHRC[i0].Instances[i1].Name); - if (Data.MObjectHRC[i0].Instances[i1].Shadow) + MsgPack _objectHRC = MsgPack.New + .Add("Name", Data.ObjectHRC[i0].Name) + .Add("ParentName", Data.ObjectHRC[i0].ParentName) + .Add("ParentNode", Data.ObjectHRC[i0].ParentNode); + if (Data.ObjectHRC[i0].Shadow) _objectHRC.Add("Shadow", true); - _objectHRC.Add("UIDName", Data.MObjectHRC[i0].Instances[i1].UIDName); + _objectHRC.Add("UIDName", Data.ObjectHRC[i0].UIDName); if (Data.ObjectHRC[i0].Node != null) { @@ -2813,9 +2859,6 @@ namespace KKdMainLib public static Vec4? RRGBAKN(this MsgPack msgPack, string name) => msgPack[name].NotNull ? (Vec4?)msgPack[name].RRGBAK() : null; - public static Vec4 RRGBAK(this MsgPack msgPack, string name) => - msgPack[name].RRGBAK(); - public static Vec4 RRGBAK(this MsgPack msgPack) => new Vec4 { X = msgPack.RKN("R"), Y = msgPack.RKN("G"), Z = msgPack.RKN("B"), W = msgPack.RKN("A") }; diff --git a/KKdMainLib/DB/Auth.cs b/KKdMainLib/DB/Auth.cs index cd6e8e4..bd662f3 100644 --- a/KKdMainLib/DB/Auth.cs +++ b/KKdMainLib/DB/Auth.cs @@ -61,8 +61,7 @@ namespace KKdMainLib.DB s = File.OpenWriter(file + ".bin", true); s.W("#A3DA__________\n"); - s.W("#" + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss yyyy", - System.Globalization.CultureInfo.InvariantCulture) + "\n"); + s.W("# date time was eliminated.\n"); if (Category != null) { @@ -75,18 +74,26 @@ namespace KKdMainLib.DB if (UIDs != null) { int[] so = UIDs.Length.SW(); + int max = -1; for (i = 0; i < UIDs.Length; i++) { if (UIDs[so[i]].Category != null && UIDs[so[i]].Category != "") s.W($"uid.{so[i]}.category=" + UIDs[so[i]].Category + "\n"); if (UIDs[so[i]].OrgUid != null) - s.W($"uid.{so[i]}.org_uid=" + UIDs[so[i]].OrgUid + "\n"); + { + int orgUid = UIDs[so[i]].OrgUid.Value; + s.W($"uid.{so[i]}.org_uid=" + orgUid + "\n"); + if (max < orgUid) + max = orgUid; + } if (UIDs[so[i]].Size != null) s.W($"uid.{so[i]}.size=" + UIDs[so[i]].Size + "\n"); if (UIDs[so[i]].Value != null && UIDs[so[i]].Value != "") s.W($"uid.{so[i]}.value=" + UIDs[so[i]].Value + "\n"); } s.W($"uid.length={UIDs.Length}\n"); + if (max != -1) + s.W($"uid.max={max}\n"); } s.C(); diff --git a/KKdMainLib/Extensions.cs b/KKdMainLib/Extensions.cs index d11f12c..8ff696d 100644 --- a/KKdMainLib/Extensions.cs +++ b/KKdMainLib/Extensions.cs @@ -163,7 +163,7 @@ namespace KKdMainLib if (@struct.HasSubStructs) for (int i = 0; i < @struct.SubStructs.Length; i++) stream.W(@struct.SubStructs[i], depth + 1, shiftX, useDepth); - if (@struct.HasPOF || @struct.HasENRS || @struct.HasSubStructs) + if (@struct.HasPOF || @struct.HasENRS || @struct.HasSubStructs) stream.WEOFC(depth + 1); } } @@ -270,7 +270,7 @@ namespace KKdMainLib { uint a, b, hash; int i; - + const uint m = 0x7FD652AD; const int r = 16; diff --git a/KKdMainLib/F2/Bloom.cs b/KKdMainLib/F2/Bloom.cs index e0a257f..656c847 100644 --- a/KKdMainLib/F2/Bloom.cs +++ b/KKdMainLib/F2/Bloom.cs @@ -98,7 +98,7 @@ namespace KKdMainLib.F2 s.W(blt.Brightpass.Z); s.W(blt.Range ); } - + e.Array = new ENRS.ENRSEntry[2]; e.Array[0] = new ENRS.ENRSEntry(0x00, 0x01, 0x10, 0x01); e.Array[0].Sub[0] = new ENRS.ENRSEntry.SubENRSEntry(0x00, 0x02, ENRS.ENRSEntry.Type.DWORD); diff --git a/KKdMainLib/F2/ColorCorrection.cs b/KKdMainLib/F2/ColorCorrection.cs index af06796..8fa021a 100644 --- a/KKdMainLib/F2/ColorCorrection.cs +++ b/KKdMainLib/F2/ColorCorrection.cs @@ -99,7 +99,7 @@ namespace KKdMainLib.F2 s.W(cct.Gamma.Z ); s.W(cct.Contrast ); } - + e.Array = new ENRS.ENRSEntry[2]; e.Array[0] = new ENRS.ENRSEntry(0x00, 0x01, 0x10, 0x01); e.Array[0].Sub[0] = new ENRS.ENRSEntry.SubENRSEntry(0x00, 0x02, ENRS.ENRSEntry.Type.DWORD); diff --git a/KKdMainLib/F2/DOF.cs b/KKdMainLib/F2/DOF.cs index a7fd453..f40d128 100644 --- a/KKdMainLib/F2/DOF.cs +++ b/KKdMainLib/F2/DOF.cs @@ -91,7 +91,7 @@ namespace KKdMainLib.F2 s.W(dft.Ratio ); s.W(dft.Quality ); } - + e.Array = new ENRS.ENRSEntry[2]; e.Array[0] = new ENRS.ENRSEntry(0x00, 0x01, 0x10, 0x01); e.Array[0].Sub[0] = new ENRS.ENRSEntry.SubENRSEntry(0x00, 0x02, ENRS.ENRSEntry.Type.DWORD); diff --git a/KKdMainLib/F2/Light.cs b/KKdMainLib/F2/Light.cs index e736466..d32435c 100644 --- a/KKdMainLib/F2/Light.cs +++ b/KKdMainLib/F2/Light.cs @@ -895,7 +895,7 @@ namespace KKdMainLib.F2 ToneCurve = 0b00000001000000000, } } - + public struct LITX { public int C; diff --git a/KKdMainLib/KKdMainLib.csproj b/KKdMainLib/KKdMainLib.csproj index 12c5c68..6cfd21a 100644 --- a/KKdMainLib/KKdMainLib.csproj +++ b/KKdMainLib/KKdMainLib.csproj @@ -6,12 +6,12 @@ korenkonder (C) 2018-2021 A simple library for working with Project Diva AC/DT/F/AFT/F2/X/XHD/FT/VRFL/M39 files - 0.4.10.7 + 0.4.10.8 KKdMainLib KKdMainLib net461 KKdMainLib - 0.4.10.7 + 0.4.10.8 AnyCPU diff --git a/KKdMainLib/MotHead.cs b/KKdMainLib/MotHead.cs index 662e55e..48a68d1 100644 --- a/KKdMainLib/MotHead.cs +++ b/KKdMainLib/MotHead.cs @@ -22,12 +22,12 @@ namespace KKdMainLib s.P = 0; Header. MotionSetID = s.RI32(); - Header.StartMotionID = s.RI32(); - Header. EndMotionID = s.RI32(); + Header.FirstMotionID = s.RI32(); + Header. LastMotionID = s.RI32(); Header.SubHeaderOffset = s.RI32(); if (Header.SubHeaderOffset < 0x10) goto RETURN; - i0 = Header.EndMotionID - Header.StartMotionID; + i0 = Header.LastMotionID - Header.FirstMotionID; if (i0 < 0) goto RETURN; s.P = Header.SubHeaderOffset; @@ -39,10 +39,13 @@ namespace KKdMainLib s.P = Header.Data[i].Offset; - Header.Data[i].MotionID = Header.StartMotionID + i; - Header.Data[i].SomeData = s.RI32(); - s.RI64(); - s.RI64(); + Header.Data[i].MotionID = Header.FirstMotionID + i; + Header.Data[i].Field00 = s.RI32(); + Header.Data[i].Field04 = s.RI32(); + Header.Data[i].Field08 = s.RI32(); + Header.Data[i].Field0C = s.RI32(); + Header.Data[i].Field10 = s.RU16(); + Header.Data[i].Field12 = s.RU16(); Header.Data[i].Offset2 = s.RI32(); Header.Data[i].DataHeaderOffset = s.RI32(); @@ -55,7 +58,7 @@ namespace KKdMainLib Header.Data[i].Array = new HeaderData.Sub.Data[i0]; for (i0 = 0; i0 < Header.Data[i].Array.Length; i0++) { - Header.Data[i].Array[i0].Type = s.RI32(); + Header.Data[i].Array[i0].Type = (Type)s.RI32(); Header.Data[i].Array[i0].Frame = s.RI32(); Header.Data[i].Array[i0].Offset = s.RI32(); } @@ -73,17 +76,18 @@ namespace KKdMainLib Header.Data[i].Array2 = new HeaderData.Sub.Data2[i0]; for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) { - Header.Data[i].Array2[i0].Frame = s.RI32(); + Header.Data[i].Array2[i0].Type = s.RI32(); Header.Data[i].Array2[i0].Offset = s.RI32(); } for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) { + ref HeaderData.Sub.Data2 Data = ref Header.Data[i].Array2[i0]; + if ((i1 = GetSize2(Data.Type)) < 1) continue; + if (Header.Data[i].Array2[i0].Offset < 0x10) goto RETURN; - s.P = Header.Data[i].Array2[i0].Offset; - Header.Data[i].Array2[i0].Array = new int[7]; - for (i1 = 0; i1 < Header.Data[i].Array2[i0].Array.Length; i1++) - Header.Data[i].Array2[i0].Array[i1] = s.RI32(); + s.P = Data.Offset; + Data.Array = s.RBy(i1); } } @@ -94,17 +98,10 @@ namespace KKdMainLib ref HeaderData.Sub.Data Data = ref Header.Data[i].Array[i0]; if ((i1 = GetSize(Data.Type)) < 1) continue; - if (Data.Offset > 0) { s.P = Data.Offset; - if (i1 == 0x01) Data.Array = new int[] { s.RU8 () }; - else if (i1 == 0x02) Data.Array = new int[] { s.RU16() }; - else - { - Data.Array = new int[i1 / 4]; - for (i1 = 0; i1 < Data.Array.Length; i1++) Data.Array[i1] = s.RI32(); - } + Data.Array = s.RBy(i1); } } } @@ -117,14 +114,14 @@ RETURN: { if (Header.Data == null || Header.Data.Length < 1) return; - Header.StartMotionID = 0x7FFFFFFF; - Header.EndMotionID = 0x00000000; + Header.FirstMotionID = 0x7FFFFFFF; + Header. LastMotionID = 0x00000000; for (i = 0; i < Header.Data.Length; i++) { - if (Header.Data[i].MotionID < Header.StartMotionID) - Header.StartMotionID = Header.Data[i].MotionID; - if (Header.Data[i].MotionID > Header. EndMotionID) - Header. EndMotionID = Header.Data[i].MotionID; + if (Header.Data[i].MotionID < Header.FirstMotionID) + Header.FirstMotionID = Header.Data[i].MotionID; + if (Header.Data[i].MotionID > Header. LastMotionID) + Header. LastMotionID = Header.Data[i].MotionID; } s = File.OpenWriter(file + ".bin", true); @@ -134,9 +131,9 @@ RETURN: s.O = 0x20; s.P = 0; s.W(0); - for (int I = Header.EndMotionID - Header.StartMotionID; I > -1; I--) + for (int I = Header.LastMotionID - Header.FirstMotionID; I > -1; I--) for (i = 0; i < Header.Data.Length; i++) - if (Header.StartMotionID + I == Header.Data[i].MotionID) + if (Header.FirstMotionID + I == Header.Data[i].MotionID) { s.A(0x20, true); Header.Data[i].Offset = s.P; @@ -156,54 +153,55 @@ RETURN: int Size = GetSize(data.Type); if (data.Array == null || data.Array.Length < 1 || Size < 1) continue; - if (data.Type == 0x3E || data.Type == 0x49) s.A(0x20, true); + if ((int)data.Type == 0x3E || (int)data.Type == 0x49) + s.A(0x20, true); data.Offset = s.P; - if (Size == 0x01) s.W(( byte)data.Array[0]); - else if (Size == 0x02) s.W((short)data.Array[0]); - else - { - if (s.P % 0x4 != 0) s.A(0x04, true); - Size /= 4; - - data.Offset = s.P; - for (i1 = 0; i1 < data.Array.Length && i1 < Size; i1++) - s.W(data.Array[i1]); - - for (; i1 < Size; i1++) s.W(0); - } + if (data.Array.Length >= 4 && s.P % 0x4 != 0) + s.A(0x04, true); + else if (data.Array.Length == 2 && s.P % 0x2 != 0) + s.A(0x02, true); + s.W(data.Array); + if ((int)data.Type == 0x3C) + s.A(0x20, true); } - if (Header.Data[i].Array2 != null) - if (Header.Data[i].Array2.Length > 0) + if (Header.Data[i].Array2 != null && Header.Data[i].Array2.Length > 0) + { + Header.Data[i].Offset2 = s.P; + + for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) + { s.W( 0); s.W(0); } + s.W(-1); s.W(0); + + for (i0 = Header.Data[i].Array2.Length - 1; i0 > -1; i0--) { - Header.Data[i].Offset2 = s.P; + ref HeaderData.Sub.Data2 data = ref Header.Data[i].Array2[i0]; + int Size = GetSize2(data.Type); + if (data.Array == null || data.Array.Length < 1 || Size < 1) continue; - for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) - { s.W( 0); s.W(0); } - s.W(-1); s.W(0); + data.Offset = s.P; - for (i0 = Header.Data[i].Array2.Length - 1; i0 > -1; i0--) - { - Header.Data[i].Array2[i0].Offset = s.P; - for (i1 = 0; i1 < Header.Data[i].Array2[i0].Array.Length && i1 < 7; i1++) - s.W(Header.Data[i].Array2[i0].Array[i1]); - - for (; i1 < 7; i1++) s.W(0); - } - } - break; + if (data.Array.Length >= 4 && s.P % 0x4 != 0) + s.A(0x04, true); + else if (data.Array.Length == 2 && s.P % 0x2 != 0) + s.A(0x02, true); + s.W(data.Array); + } + break; + } } - s.A(0x04, true); + s.A(0x20, true); + Header.SubHeaderOffset = s.P; - i1 = Header.EndMotionID - Header.StartMotionID; + i1 = Header.LastMotionID - Header.FirstMotionID; int offset = 0; for (i = 0, i1++; i < i1; i++) { offset = 0; for (i0 = 0; i0 < Header.Data.Length; i0++) - if (Header.StartMotionID + i == Header.Data[i0].MotionID) + if (Header.FirstMotionID + i == Header.Data[i0].MotionID) { offset = Header.Data[i0].Offset; break; } s.W(offset); } @@ -212,10 +210,12 @@ RETURN: for (i = 0; i < Header.Data.Length; i++) { s.P = Header.Data[i].Offset; - s.W(Header.Data[i].SomeData); - s.W(0); - s.W(0L); - s.W(0x040004); + s.W(Header.Data[i].Field00); + s.W(Header.Data[i].Field04); + s.W(Header.Data[i].Field08); + s.W(Header.Data[i].Field0C); + s.W(Header.Data[i].Field10); + s.W(Header.Data[i].Field12); s.W(Header.Data[i].Offset2); s.W(Header.Data[i].DataHeaderOffset); s.W(0); @@ -223,7 +223,7 @@ RETURN: s.P = Header.Data[i].DataHeaderOffset; for (i0 = 0; i0 < Header.Data[i].Array.Length; i0++) { - s.W(Header.Data[i].Array[i0].Type ); + s.W((int)Header.Data[i].Array[i0].Type ); s.W(Header.Data[i].Array[i0].Frame ); s.W(Header.Data[i].Array[i0].Offset); } @@ -232,15 +232,15 @@ RETURN: if (Header.Data[i].Array2 != null) for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) { - s.W(Header.Data[i].Array2[i0].Frame ); + s.W(Header.Data[i].Array2[i0].Type ); s.W(Header.Data[i].Array2[i0].Offset); } } s.P = 0; s.W(Header.MotionSetID ); - s.W(Header.StartMotionID ); - s.W(Header. EndMotionID ); + s.W(Header.FirstMotionID ); + s.W(Header. LastMotionID ); s.W(Header.SubHeaderOffset); s.C(); } @@ -254,14 +254,18 @@ RETURN: if ((motHead = msgPack["MotHead"]).IsNull) return; Header.MotionSetID = motHead.RI32("MotionSetID"); - MsgPack temp = MsgPack.New; MsgPack motions, array; if ((motions = motHead["Motions", true]).IsNull) return; Header.Data = new HeaderData.Sub[motions.Array.Length]; for (i = 0; i < Header.Data.Length; i++) { Header.Data[i].MotionID = motions[i].RI32("MotionID"); - Header.Data[i].SomeData = motions[i].RI32("SomeData"); + Header.Data[i].Field00 = motions[i].RI32("Field00"); + Header.Data[i].Field04 = motions[i].RI32("Field04"); + Header.Data[i].Field08 = motions[i].RI32("Field08"); + Header.Data[i].Field0C = motions[i].RI32("Field0C"); + Header.Data[i].Field10 = motions[i].RU16("Field10"); + Header.Data[i].Field12 = motions[i].RU16("Field12"); MsgPack array2; if ((array2 = motions[i]["Array2", true]).NotNull) @@ -270,14 +274,17 @@ RETURN: for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) { - Header.Data[i].Array2[i0].Frame = array2[i0].RI32("Frame"); + ref HeaderData.Sub.Data2 data = ref Header.Data[i].Array2[i0]; + + data.Type = array2[i0].RI32("Type"); + data.Array = new byte[GetSize2(data.Type)]; MsgPack arrayArray; if ((arrayArray = array2[i0]["Array", true]).IsNull) continue; - Header.Data[i].Array2[i0].Array = new int[arrayArray.Array.Length]; - for (i1 = 0; i1 < Header.Data[i].Array2[i0].Array.Length; i1++) - Header.Data[i].Array2[i0].Array[i1] = arrayArray[i1].RI32(); + data.Array = new byte[arrayArray.Array.Length]; + for (i1 = 0; i1 < arrayArray.Array.Length; i1++) + data.Array.GBy(arrayArray[i1].RU8(), i1); } } @@ -288,196 +295,266 @@ RETURN: for (i0 = 0; i0 < Header.Data[i].Array.Length; i0++) { ref HeaderData.Sub.Data data = ref Header.Data[i].Array[i0]; - data.Type = array[i0].RI32("Type"); + System.Enum.TryParse(array[i0].RS("Type"), out data.Type); data.Frame = array[i0].RI32("Frame"); + MsgPack temp = array[i0]["Data"]; - if ((temp = array[i0]["Type3"]).NotNull) + if (temp.IsNull) { - data.Type = 0x03; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type53"]).NotNull) - { - data.Type = 0x35; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RI32("i3") }; - } - else if ((temp = array[i0]["Type54"]).NotNull) - { - data.Type = 0x36; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RI32("i3") }; - } - else if ((temp = array[i0]["Type55"]).NotNull) - { - data.Type = 0x37; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RI32("i3") }; - } - else if ((temp = array[i0]["Type56"]).NotNull) - { - data.Type = 0x38; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RI32("i3") }; - } - else if ((temp = array[i0]["Type57"]).NotNull) - { - data.Type = 0x39; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RI32("i3") }; - } - else if ((temp = array[i0]["Type60"]).NotNull) - { - data.Type = 0x3C; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32(), - temp.RF32("f3").ToI32() }; - } - else if ((temp = array[i0]["Type61"]).NotNull) - { - data.Type = 0x3D; - data.Array = new int[] { temp.RI32("i0"), temp.RF32("f1").ToI32() }; - } - else if ((temp = array[i0]["Type62"]).NotNull) - { - data.Type = 0x3E; - data.Array = new int[0x10]; - data.Array[ 0] = temp.RI32("i0"); - data.Array[ 1] = - ((byte)temp.RI32("i1_3") << 24) | ((byte)temp.RI32("i1_2") << 16) | - ((byte)temp.RI32("i1_1") << 8) | (byte)temp.RI32("i1_0"); - data.Array[ 2] = temp.RF32("f2" ).ToI32(); - data.Array[ 3] = temp.RF32("f3" ).ToI32(); - data.Array[ 4] = temp.RF32("f4" ).ToI32(); - data.Array[ 5] = temp.RF32("f5" ).ToI32(); - data.Array[ 6] = temp.RF32("f6" ).ToI32(); - data.Array[ 7] = temp.RF32("f7" ).ToI32(); - data.Array[ 8] = temp.RF32("f8" ).ToI32(); - data.Array[ 9] = temp.RF32("f9" ).ToI32(); - data.Array[10] = temp.RF32("f10").ToI32(); - data.Array[11] = temp.RF32("f11").ToI32(); - data.Array[12] = temp.RF32("f12").ToI32(); - data.Array[13] = temp.RF32("f13").ToI32(); - data.Array[14] = temp.RF32("f14").ToI32(); - data.Array[15] = temp.RI32("i15"); - } - else if ((temp = array[i0]["Type65"]).NotNull) - { - data.Type = 0x41; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type66"]).NotNull) - { - data.Type = 0x42; - data.Array = new int[] { temp.RF32("f0").ToI32() }; - } - else if ((temp = array[i0]["Type67"]).NotNull) - { - data.Type = 0x43; - data.Array = new int[] { temp.RI32("i0"), temp.RF32("f1").ToI32() }; - } - else if ((temp = array[i0]["Type68"]).NotNull) - { - data.Type = 0x44; - data.Array = new int[] { temp.RI32("i0"), temp.RF32("f1").ToI32() }; - } - else if ((temp = array[i0]["Type69"]).NotNull) - { - data.Type = 0x45; - data.Array = new int[] { temp.RI32("i0"), temp.RI32("i1") }; - } - else if ((temp = array[i0]["Type70"]).NotNull) - { - data.Type = 0x46; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type71"]).NotNull) - { - data.Type = 0x47; - data.Array = new int[] { temp.RI32("i0"), temp.RF32("f1").ToI32() }; - } - else if ((temp = array[i0]["Type72"]).NotNull) - { - data.Type = 0x48; - data.Array = new int[] { temp.RI32("i0"), temp.RF32("f1").ToI32() }; - } - else if ((temp = array[i0]["Type73"]).NotNull) - { - data.Type = 0x49; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RI32("i2"), - temp.RF32("f3").ToI32(), - temp.RI32("i4"), - temp.RI32("i5"), - temp.RI32("i6"), - temp.RI32("i7"), - temp.RI32("i8"), - temp.RI32("i9"), - temp.RI32("i10"), - temp.RI32("i11") }; - } - else if ((temp = array[i0]["Type74"]).NotNull) - { - data.Type = 0x4A; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type62"]).NotNull) - { - data.Type = 0x4B; - data.Array = new int[0x0D]; - data.Array[ 0] = temp.RI32("i0"); - data.Array[ 1] = ((byte)temp.RI32("i1_1") << 8) | (byte)temp.RI32("i1_0"); - data.Array[ 2] = temp.RF32("f2" ).ToI32(); - data.Array[ 3] = temp.RF32("f3" ).ToI32(); - data.Array[ 4] = temp.RF32("f4" ).ToI32(); - data.Array[ 5] = temp.RF32("f5" ).ToI32(); - data.Array[ 6] = temp.RF32("f6" ).ToI32(); - data.Array[ 7] = temp.RF32("f7" ).ToI32(); - data.Array[ 8] = temp.RF32("f8" ).ToI32(); - data.Array[ 9] = temp.RF32("f9" ).ToI32(); - data.Array[10] = temp.RF32("f10").ToI32(); - data.Array[11] = temp.RF32("f11").ToI32(); - data.Array[12] = temp.RF32("f12").ToI32(); - } - else if ((temp = array[i0]["Type76"]).NotNull) - { - data.Type = 0x4C; - data.Array = new int[] { temp.RI32("i0"), - temp.RF32("f1").ToI32(), - temp.RF32("f2").ToI32() }; - } - else if ((temp = array[i0]["Type77"]).NotNull) - { - data.Type = 0x4D; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type79"]).NotNull) - { - data.Type = 0x4F; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Type80"]).NotNull) - { - data.Type = 0x50; - data.Array = new int[] { temp.RI32("i0") }; - } - else if ((temp = array[i0]["Array", true]).NotNull) - { - data.Array = new int[temp.Array.Length]; + MsgPack arrayArray = array[i0]["Array"]; + if (arrayArray.IsNull) + continue; + + data.Array = new byte[arrayArray.Array.Length]; for (i1 = 0; i1 < data.Array.Length; i1++) - data.Array[i1] = temp[i1].RI32(); + data.Array[i1] = arrayArray[i1].RU8(); + continue; + } + + data.Array = new byte[GetSize(data.Type)]; + + switch ((int)data.Type) + { + case 0x02: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + break; + case 0x03: + data.Array.GBy(temp.RI32("i00"), 0x00); + break; + case 0x04: + data.Array.GBy(temp.RI32("i00"), 0x00); + break; + case 0x07: + data.Array.GBy(temp.RI32("i00_16"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + break; + case 0x08: + data.Array.GBy(temp.RI16("i04_16"), 0x04); + break; + case 0x0D: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RI32("i04"), 0x04); + data.Array.GBy(temp.RI32("i08"), 0x08); + break; + case 0x11: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RI16("i02_16"), 0x02); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + data.Array.GBy(temp.RF32("f14"), 0x14); + data.Array.GBy(temp.RF32("f18"), 0x18); + break; + case 0x1D: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RI16("i02_16"), 0x02); + data.Array.GBy(temp.RI16("i04_16"), 0x04); + data.Array.GBy(temp.RI16("i06_16"), 0x06); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + data.Array.GBy(temp.RI16("i14_16"), 0x14); + data.Array.GBy(temp.RF32("f18"), 0x18); + data.Array.GBy(temp.RF32("f1C"), 0x1C); + data.Array.GBy(temp.RF32("f20"), 0x20); + data.Array.GBy(temp.RF32("f24"), 0x24); + data.Array.GBy(temp.RF32("f28"), 0x28); + data.Array.GBy(temp.RF32("f2C"), 0x2C); + data.Array.GBy(temp.RI16("i30_16"), 0x30); + data.Array.GBy(temp.RI32("i34"), 0x34); + data.Array.GBy(temp.RI32("i38"), 0x38); + break; + case 0x20: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RI32("i04"), 0x04); + data.Array.GBy(temp.RI32("i08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + break; + case 0x21: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RU8("i02_8"), 0x02); + data.Array.GBy(temp.RI32("i04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RI32("i10"), 0x10); + data.Array.GBy(temp.RI32("i14"), 0x14); + break; + case 0x32: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + break; + case 0x35: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x36: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x37: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x38: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x39: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x3A: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + break; + case 0x3B: + data.Array.GBy(temp.RI32("i00"), 0x00); + break; + case 0x3C: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + break; + case 0x3D: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + break; + case 0x3E: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RU8("i04_8"), 0x04); + data.Array.GBy(temp.RU8("i05_8"), 0x05); + data.Array.GBy(temp.RU8("i06_8"), 0x06); + data.Array.GBy(temp.RU8("i07_8"), 0x07); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + data.Array.GBy(temp.RF32("f14"), 0x14); + data.Array.GBy(temp.RF32("f18"), 0x18); + data.Array.GBy(temp.RF32("f1C"), 0x1C); + data.Array.GBy(temp.RF32("f20"), 0x20); + data.Array.GBy(temp.RF32("f24"), 0x24); + data.Array.GBy(temp.RF32("f28"), 0x28); + data.Array.GBy(temp.RF32("f2C"), 0x2C); + data.Array.GBy(temp.RF32("f30"), 0x30); + data.Array.GBy(temp.RF32("f34"), 0x34); + data.Array.GBy(temp.RF32("f38"), 0x38); + break; + case 0x42: + data.Array.GBy(temp.RF32("Value"), 0x00); + break; + case 0x43: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + break; + case 0x44: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + break; + case 0x45: + data.Array.GBy(temp.RI32("i00"), 0x00); + break; + case 0x46: + data.Array.GBy(temp.RI32("i00"), 0x00); + break; + case 0x47: + data.Array.GBy(temp.RU8("i00_8"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + break; + case 0x48: + data.Array.GBy(temp.RF32("f00"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RI32("i10"), 0x10); + data.Array.GBy(temp.RI32("i14"), 0x14); + data.Array.GBy(temp.RU8("i18_8"), 0x18); + data.Array.GBy(temp.RU8("i19_8"), 0x19); + data.Array.GBy(temp.RU8("i1A_8"), 0x1A); + break; + case 0x49: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RI16("i02_16"), 0x02); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RI16("i08_16"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RI32("i10"), 0x10); + data.Array.GBy(temp.RI32("i14"), 0x14); + data.Array.GBy(temp.RI32("i18"), 0x18); + data.Array.GBy(temp.RI32("i1C"), 0x1C); + data.Array.GBy(temp.RU8("i20"), 0x20); + data.Array.GBy(temp.RU8("i21"), 0x21); + data.Array.GBy(temp.RU8("i22"), 0x22); + data.Array.GBy(temp.RU8("i23"), 0x23); + data.Array.GBy(temp.RF32("f24"), 0x24); + data.Array.GBy(temp.RI32("i28"), 0x28); + data.Array.GBy(temp.RI32("i2C"), 0x2C); + break; + case 0x4A: + data.Array.GBy(temp.RU8("i00_8"), 0x00); + data.Array.GBy(temp.RU8("i01_8"), 0x01); + break; + case 0x4B: + data.Array.GBy(temp.RI32("i00"), 0x00); + data.Array.GBy(temp.RU8("i04_8"), 0x04); + data.Array.GBy(temp.RU8("i05_8"), 0x05); + data.Array.GBy(temp.RF32("f08"), 0x08); + data.Array.GBy(temp.RF32("f0C"), 0x0C); + data.Array.GBy(temp.RF32("f10"), 0x10); + data.Array.GBy(temp.RF32("f14"), 0x14); + data.Array.GBy(temp.RF32("f18"), 0x18); + data.Array.GBy(temp.RF32("f1C"), 0x1C); + data.Array.GBy(temp.RF32("f20"), 0x20); + data.Array.GBy(temp.RF32("f24"), 0x24); + data.Array.GBy(temp.RF32("f28"), 0x28); + data.Array.GBy(temp.RF32("f2C"), 0x2C); + data.Array.GBy(temp.RF32("f30"), 0x30); + break; + case 0x4C: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RF32("f04"), 0x04); + data.Array.GBy(temp.RF32("f08"), 0x08); + break; + case 0x4D: + data.Array.GBy(temp.RU8("i00_8"), 0x00); + break; + case 0x4E: + data.Array.GBy(temp.RI16("i00_16"), 0x00); + data.Array.GBy(temp.RU8("i02_8"), 0x02); + data.Array.GBy(temp.RU8("i03_8"), 0x03); + data.Array.GBy(temp.RI32("i04"), 0x04); + data.Array.GBy(temp.RI32("i08"), 0x08); + data.Array.GBy(temp.RI32("i0C"), 0x0C); + data.Array.GBy(temp.RI32("i10"), 0x10); + data.Array.GBy(temp.RI32("i14"), 0x14); + data.Array.GBy(temp.RI32("i18"), 0x18); + break; + case 0x4F: + data.Array.GBy(temp.RU8("i00_8"), 0x00); + break; + case 0x50: + data.Array.GBy(temp.RU8("i00_8"), 0x00); + break; } } } @@ -498,181 +575,323 @@ RETURN: if (Header.Data[i].Offset < 0x10) continue; MsgPack motion = MsgPack.New .Add("MotionID", Header.Data[i].MotionID) - .Add("SomeData", Header.Data[i].SomeData); + .Add("Field00", Header.Data[i].Field00) + .Add("Field04", Header.Data[i].Field04) + .Add("Field08", Header.Data[i].Field08) + .Add("Field0C", Header.Data[i].Field0C) + .Add("Field10", Header.Data[i].Field10) + .Add("Field12", Header.Data[i].Field12); - if (Header.Data[i].Array == null || Header.Data[i].Array.Length < 1) { } - else + if (Header.Data[i].Array != null && Header.Data[i].Array.Length > 0) { MsgPack array = new MsgPack(Header.Data[i].Array.Length, "Array"); for (i0 = 0; i0 < Header.Data[i].Array.Length; i0++) { ref HeaderData.Sub.Data data = ref Header.Data[i].Array[i0]; MsgPack arrayEntry = MsgPack.New; + arrayEntry.Add("Type", data.Type.ToString()); arrayEntry.Add("Frame", data.Frame); - if (data.Array == null || data.Array.Length < 1) - arrayEntry.Add("Type", data.Type); - else if (data.Type == 0x03) - arrayEntry.Add(new MsgPack("Type3") - .Add("i0", data.Array[0])); - else if (data.Type == 0x35) - arrayEntry.Add(new MsgPack("Type53") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("i3", data.Array[3])); - else if (data.Type == 0x36) - arrayEntry.Add(new MsgPack("Type54") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("i3", data.Array[3])); - else if (data.Type == 0x37) - arrayEntry.Add(new MsgPack("Type55") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("i3", data.Array[3])); - else if (data.Type == 0x38) - arrayEntry.Add(new MsgPack("Type56") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("i3", data.Array[3])); - else if (data.Type == 0x39) - arrayEntry.Add(new MsgPack("Type57") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("i3", data.Array[3])); - else if (data.Type == 0x3C) - arrayEntry.Add(new MsgPack("Type60") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32()) - .Add("f3", data.Array[3].ToF32())); - else if (data.Type == 0x3D) - arrayEntry.Add(new MsgPack("Type61") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32())); - else if (data.Type == 0x3E) - arrayEntry.Add(new MsgPack("Type62") - .Add("i0", data.Array[0]) - .Add("i1_0", (byte) data.Array[1]) - .Add("i1_1", (byte)(data.Array[1] >> 8)) - .Add("i1_2", (byte)(data.Array[1] >> 16)) - .Add("i1_3", (byte)(data.Array[1] >> 24)) - .Add("f2" , data.Array[ 2].ToF32()) - .Add("f3" , data.Array[ 3].ToF32()) - .Add("f4" , data.Array[ 4].ToF32()) - .Add("f5" , data.Array[ 5].ToF32()) - .Add("f6" , data.Array[ 6].ToF32()) - .Add("f7" , data.Array[ 7].ToF32()) - .Add("f8" , data.Array[ 8].ToF32()) - .Add("f9" , data.Array[ 9].ToF32()) - .Add("f10", data.Array[10].ToF32()) - .Add("f11", data.Array[11].ToF32()) - .Add("f12", data.Array[12].ToF32()) - .Add("f13", data.Array[13].ToF32()) - .Add("f14", data.Array[14].ToF32()) - .Add("i15", data.Array[15])); - else if (data.Type == 0x41) - arrayEntry.Add(new MsgPack("Type65") - .Add("i0", data.Array[0])); - else if (data.Type == 0x42) - arrayEntry.Add(new MsgPack("Type66") - .Add("f0", data.Array[0].ToF32())); - else if (data.Type == 0x43) - arrayEntry.Add(new MsgPack("Type67") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32())); - else if (data.Type == 0x44) - arrayEntry.Add(new MsgPack("Type68") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32())); - else if (data.Type == 0x45) - arrayEntry.Add(new MsgPack("Type69") - .Add("i0", data.Array[0]) - .Add("i1", data.Array[1])); - else if (data.Type == 0x46) - arrayEntry.Add(new MsgPack("Type70") - .Add("i0", data.Array[0])); - else if (data.Type == 0x47) - arrayEntry.Add(new MsgPack("Type71") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32())); - else if (data.Type == 0x48) - arrayEntry.Add(new MsgPack("Type72") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32())); - else if (data.Type == 0x49) - arrayEntry.Add(new MsgPack("Type73") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("i2", data.Array[2]) - .Add("f3", data.Array[3].ToF32()) - .Add("i4", data.Array[4]) - .Add("i5", data.Array[5]) - .Add("i6", data.Array[6]) - .Add("i7", data.Array[7]) - .Add("i8", data.Array[8]) - .Add("i9", data.Array[9]) - .Add("i10", data.Array[10]) - .Add("i11", data.Array[11])); - else if (data.Type == 0x4A) - arrayEntry.Add(new MsgPack("Type74") - .Add("i0", data.Array[0])); - else if (data.Type == 0x4B) - arrayEntry.Add(new MsgPack("Type75") - .Add("i0", data.Array[0]) - .Add("i1_0", (byte) data.Array[1]) - .Add("i1_1", (byte)(data.Array[1] >> 8)) - .Add("f2" , data.Array[ 2].ToF32()) - .Add("f3" , data.Array[ 3].ToF32()) - .Add("f4" , data.Array[ 4].ToF32()) - .Add("f5" , data.Array[ 5].ToF32()) - .Add("f6" , data.Array[ 6].ToF32()) - .Add("f7" , data.Array[ 7].ToF32()) - .Add("f8" , data.Array[ 8].ToF32()) - .Add("f9" , data.Array[ 9].ToF32()) - .Add("f10", data.Array[10].ToF32()) - .Add("f11", data.Array[11].ToF32()) - .Add("f12", data.Array[12].ToF32())); - else if (data.Type == 0x4C) - arrayEntry.Add(new MsgPack("Type76") - .Add("i0", data.Array[0]) - .Add("f1", data.Array[1].ToF32()) - .Add("f2", data.Array[2].ToF32())); - else if (data.Type == 0x4D) - arrayEntry.Add(new MsgPack("Type77") - .Add("i0", data.Array[0])); - else if (data.Type == 0x4F) - arrayEntry.Add(new MsgPack("Type79") - .Add("i0", data.Array[0])); - else if (data.Type == 0x50) - arrayEntry.Add(new MsgPack("Type80") - .Add("i0", data.Array[0])); - else + switch ((int)data.Type) { - arrayEntry.Add("Type", data.Type); - MsgPack arrayArray = new MsgPack(data.Array.Length, "Array"); - for (i1 = 0; i1 < data.Array.Length; i1++) - arrayArray[i1] = data.Array[i1]; - arrayEntry.Add(arrayArray); + case 0x02: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00))); + break; + case 0x03: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00))); + break; + case 0x04: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00))); + break; + case 0x07: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08))); + break; + case 0x08: + arrayEntry.Add(new MsgPack("Data") + .Add("i04_16", data.Array.TI16(0x04))); + break; + case 0x0D: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("i04", data.Array.TI32(0x04)) + .Add("i08", data.Array.TI32(0x08))); + break; + case 0x11: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i02_16", data.Array.TI16(0x02)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("f10", data.Array.TF32(0x10)) + .Add("f14", data.Array.TF32(0x14)) + .Add("f18", data.Array.TF32(0x18))); + break; + case 0x1D: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i02_16", data.Array.TI16(0x02)) + .Add("i04_16", data.Array.TI16(0x04)) + .Add("i06_16", data.Array.TI16(0x06)) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("f10", data.Array.TF32(0x10)) + .Add("i14_16", data.Array.TI16(0x14)) + .Add("f18", data.Array.TF32(0x18)) + .Add("f1C", data.Array.TF32(0x1C)) + .Add("f20", data.Array.TF32(0x20)) + .Add("f24", data.Array.TF32(0x24)) + .Add("f28", data.Array.TF32(0x28)) + .Add("f2C", data.Array.TF32(0x2C)) + .Add("i30_16", data.Array.TI16(0x30)) + .Add("i34", data.Array.TI32(0x34)) + .Add("i38", data.Array.TI32(0x38))); + break; + case 0x20: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i04", data.Array.TI32(0x04)) + .Add("i08", data.Array.TI32(0x08)) + .Add("i0C", data.Array.TI32(0x0C))); + break; + case 0x21: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i02_8", data.Array[0x02]) + .Add("i04", data.Array.TI32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("i10", data.Array.TI32(0x10)) + .Add("i14", data.Array.TI32(0x14))); + break; + case 0x32: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04))); + break; + case 0x35: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x36: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x37: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x38: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x39: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x3A: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("f10", data.Array.TF32(0x10))); + break; + case 0x3B: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00))); + break; + case 0x3C: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C))); + break; + case 0x3D: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04))); + break; + case 0x3E: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("i04_8", data.Array[0x04]) + .Add("i05_8", data.Array[0x05]) + .Add("i06_8", data.Array[0x06]) + .Add("i07_8", data.Array[0x07]) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("f10", data.Array.TF32(0x10)) + .Add("f14", data.Array.TF32(0x14)) + .Add("f18", data.Array.TF32(0x18)) + .Add("f1C", data.Array.TF32(0x1C)) + .Add("f20", data.Array.TF32(0x20)) + .Add("f24", data.Array.TF32(0x24)) + .Add("f28", data.Array.TF32(0x28)) + .Add("f2C", data.Array.TF32(0x2C)) + .Add("f30", data.Array.TF32(0x30)) + .Add("f34", data.Array.TF32(0x34)) + .Add("f38", data.Array.TF32(0x38))); + break; + case 0x42: + arrayEntry.Add(new MsgPack("Data") + .Add("Value", data.Array.TF32(0x00))); + break; + case 0x43: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04))); + break; + case 0x44: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("f04", data.Array.TF32(0x04))); + break; + case 0x45: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00))); + break; + case 0x46: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00))); + break; + case 0x47: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_8", data.Array[0x00]) + .Add("f04", data.Array.TF32(0x04))); + break; + case 0x48: + arrayEntry.Add(new MsgPack("Data") + .Add("f00", data.Array.TF32(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("i10", data.Array.TI32(0x10)) + .Add("i14", data.Array.TI32(0x14)) + .Add("i18_8", data.Array[0x18]) + .Add("i19_8", data.Array[0x19]) + .Add("i1A_8", data.Array[0x1A])); + break; + case 0x49: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i02_16", data.Array.TI16(0x02)) + .Add("f04", data.Array.TF32(0x04)) + .Add("i08_16", data.Array.TI16(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("i10", data.Array.TI32(0x10)) + .Add("i14", data.Array.TI32(0x14)) + .Add("i18", data.Array.TI32(0x18)) + .Add("i1C", data.Array.TI32(0x1C)) + .Add("i20_8", data.Array[0x20]) + .Add("i21_8", data.Array[0x21]) + .Add("i22_8", data.Array[0x22]) + .Add("i23_8", data.Array[0x23]) + .Add("f24", data.Array.TI32(0x24)) + .Add("i28", data.Array.TI32(0x28)) + .Add("i2C", data.Array.TI32(0x2C))); + break; + case 0x4A: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_8", data.Array[0x00]) + .Add("i01_8", data.Array[0x01])); + break; + case 0x4B: + arrayEntry.Add(new MsgPack("Data") + .Add("i00", data.Array.TI32(0x00)) + .Add("i04_8", data.Array[0x04]) + .Add("i05_8", data.Array[0x05]) + .Add("f08", data.Array.TF32(0x08)) + .Add("f0C", data.Array.TF32(0x0C)) + .Add("f10", data.Array.TF32(0x10)) + .Add("f14", data.Array.TF32(0x14)) + .Add("f18", data.Array.TF32(0x18)) + .Add("f1C", data.Array.TF32(0x1C)) + .Add("f20", data.Array.TF32(0x20)) + .Add("f24", data.Array.TF32(0x24)) + .Add("f28", data.Array.TF32(0x28)) + .Add("f2C", data.Array.TF32(0x2C)) + .Add("f30", data.Array.TF32(0x30))); + break; + case 0x4C: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("f04", data.Array.TF32(0x04)) + .Add("f08", data.Array.TF32(0x08))); + break; + case 0x4D: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_8", data.Array[0x00])); + break; + case 0x4E: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_16", data.Array.TI16(0x00)) + .Add("i02_8", data.Array[0x02]) + .Add("i03_8", data.Array[0x03]) + .Add("i04", data.Array.TI32(0x04)) + .Add("i08", data.Array.TI32(0x08)) + .Add("i0C", data.Array.TI32(0x0C)) + .Add("i10", data.Array.TI32(0x10)) + .Add("i14", data.Array.TI32(0x14)) + .Add("i18", data.Array.TI32(0x18))); + break; + case 0x4F: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_8", data.Array[0])); + break; + case 0x50: + arrayEntry.Add(new MsgPack("Data") + .Add("i00_8", data.Array[0])); + break; + default: + if (data.Array != null && data.Array.Length > 0) + { + MsgPack arrayArray = new MsgPack(data.Array.Length, "Array"); + for (i1 = 0; i1 < data.Array.Length; i1++) + arrayArray[i1] = data.Array[i1]; + arrayEntry.Add(arrayArray); + } + break; } + array[i0] = arrayEntry; } motion.Add(array); } - if (Header.Data[i].Array2 == null || Header.Data[i].Array2.Length < 1) { } - else + if (Header.Data[i].Array2 != null && Header.Data[i].Array2.Length > 0) { MsgPack array2 = new MsgPack(Header.Data[i].Array2.Length, "Array2"); for (i0 = 0; i0 < Header.Data[i].Array2.Length; i0++) { - MsgPack arrayEntry = MsgPack.New.Add("Frame", Header.Data[i].Array2[i0].Frame); - if (Header.Data[i].Array2[i0].Array == null || Header.Data[i].Array2[i0].Array.Length < 1) { } - else + MsgPack arrayEntry = MsgPack.New.Add("Type", Header.Data[i].Array2[i0].Type); + if (Header.Data[i].Array2[i0].Array != null && Header.Data[i].Array2[i0].Array.Length > 0) { MsgPack arrayArray = new MsgPack(Header.Data[i].Array2[i0].Array.Length, "Array"); for (i1 = 0; i1 < Header.Data[i].Array2[i0].Array.Length; i1++) @@ -691,19 +910,20 @@ RETURN: motHead.WriteAfterAll(false, true, file, json); } - private static int GetSize(int Type) => - Type switch + private static int GetSize(Type Type) => + (int)Type switch { 0x02 => 0x02, 0x03 => 0x04, 0x04 => 0x04, - 0x07 => 0x08, + 0x07 => 0x0C, 0x08 => 0x08, 0x0D => 0x0C, 0x11 => 0x1C, - 0x1D => 0x30, + 0x1D => 0x3C, 0x20 => 0x10, 0x21 => 0x18, + 0x32 => 0x04, 0x35 => 0x14, 0x36 => 0x14, 0x37 => 0x14, @@ -714,34 +934,41 @@ RETURN: 0x3C => 0x10, 0x3D => 0x08, 0x3E => 0x40, - 0x40 => 0x00, - 0x41 => 0x04, 0x42 => 0x04, 0x43 => 0x08, 0x44 => 0x08, - 0x45 => 0x08, + 0x45 => 0x04, 0x46 => 0x04, 0x47 => 0x08, - 0x48 => 0x08, + 0x48 => 0x1C, 0x49 => 0x30, 0x4A => 0x02, 0x4B => 0x34, 0x4C => 0x0C, - 0x4D => 0x04, + 0x4D => 0x01, 0x4E => 0x1C, 0x4F => 0x01, 0x50 => 0x01, _ => 0x00, }; - public void Dispose() + private static int GetSize2(int Type) => + (int)Type switch { + 0x00 => 0x1C, + 0x01 => 0x08, + 0x02 => 0x14, + 0x44 => 0x04, + _ => 0x00, + }; + + public void Dispose() { if (s != null) s.D(); s = null; Header = default; } public struct HeaderData { public int MotionSetID; - public int StartMotionID; - public int EndMotionID; + public int FirstMotionID; + public int LastMotionID; public int SubHeaderOffset; public Sub[] Data; @@ -751,7 +978,12 @@ RETURN: public int Offset; public int MotionID; - public int SomeData; + public int Field00; + public int Field04; + public int Field08; + public int Field0C; + public ushort Field10; + public ushort Field12; public int Offset2; public int DataHeaderOffset; @@ -760,21 +992,28 @@ RETURN: public struct Data { - public int Type; + public Type Type; public int Frame; public int Offset; - public int[] Array; + public byte[] Array; } public struct Data2 { public int Offset; - public int Frame; - public int[] Array; + public int Type; + public byte[] Array; } } } + + public enum Type + { + WingReset = 0x40, + OsageReset = 0x41, + OsagePhysStep = 0x42, + } } } diff --git a/KKdMainLib/libdeflate.dll b/KKdMainLib/libdeflate.dll index 681cfd7..3c319e9 100644 Binary files a/KKdMainLib/libdeflate.dll and b/KKdMainLib/libdeflate.dll differ diff --git a/PD_Tool/Properties/AssemblyInfo.cs b/PD_Tool/Properties/AssemblyInfo.cs index f44bb04..8760710 100644 --- a/PD_Tool/Properties/AssemblyInfo.cs +++ b/PD_Tool/Properties/AssemblyInfo.cs @@ -11,5 +11,5 @@ using System.Runtime.InteropServices; [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("7B5D5A3A-A6F8-4813-C97D-ACFC98F7397E")] -[assembly: AssemblyVersion("0.4.10.7")] -[assembly: AssemblyFileVersion("0.4.10.7")] +[assembly: AssemblyVersion("0.4.10.8")] +[assembly: AssemblyFileVersion("0.4.10.8")] diff --git a/PD_Tool/classes/A3D.cs b/PD_Tool/classes/A3D.cs index a1cce75..6214710 100644 --- a/PD_Tool/classes/A3D.cs +++ b/PD_Tool/classes/A3D.cs @@ -69,7 +69,7 @@ namespace PD_Tool { state = a3da.A3DAReader(filepath); if (state == 1) - if (choose == "F") a3da.MsgPackWriter(filepath, json); + if (choose == "9") a3da.MsgPackWriter(filepath, json); else { a3da.Head.Format = format;