Skip to content
This repository was archived by the owner on May 11, 2024. It is now read-only.

Commit 6c64b41

Browse files
committed
- [Core] fix parsing issues [ExA]
1 parent 8a3517f commit 6c64b41

File tree

3 files changed

+49
-18
lines changed

3 files changed

+49
-18
lines changed

AssetStudio/Classes/AnimationClip.cs

+39-17
Original file line numberDiff line numberDiff line change
@@ -762,8 +762,8 @@ public HumanPose(ObjectReader reader)
762762
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2))//5.2 and up
763763
{
764764
m_TDoFArray = reader.ReadVector3Array();
765-
}
766765
}
766+
}
767767

768768
public static HumanPose ParseGI(ObjectReader reader)
769769
{
@@ -1118,7 +1118,7 @@ public static DenseClip ParseGI(ObjectReader reader)
11181118
return denseClip;
11191119
}
11201120
}
1121-
public class ArkDenseClip : DenseClip
1121+
public class ACLDenseClip : DenseClip
11221122
{
11231123
public int m_ACLType;
11241124
public byte[] m_ACLArray;
@@ -1130,21 +1130,38 @@ public class ArkDenseClip : DenseClip
11301130
public uint m_nRotationCurves;
11311131
public uint m_nEulerCurves;
11321132
public uint m_nScaleCurves;
1133+
public uint m_nGenericCurves;
11331134

1134-
public ArkDenseClip(ObjectReader reader) : base(reader)
1135+
public ACLDenseClip(ObjectReader reader) : base(reader)
11351136
{
11361137
m_ACLType = reader.ReadInt32();
1137-
m_ACLArray = reader.ReadUInt8Array();
1138-
reader.AlignStream();
1139-
m_PositionFactor = reader.ReadSingle();
1140-
m_EulerFactor = reader.ReadSingle();
1141-
m_ScaleFactor = reader.ReadSingle();
1142-
m_FloatFactor = reader.ReadSingle();
1143-
m_nPositionCurves = reader.ReadUInt32();
1144-
m_nRotationCurves = reader.ReadUInt32();
1145-
m_nEulerCurves = reader.ReadUInt32();
1146-
m_nScaleCurves = reader.ReadUInt32();
1147-
1138+
if (reader.Game.Type.IsArknightsEndfield())
1139+
{
1140+
m_ACLArray = reader.ReadUInt8Array();
1141+
reader.AlignStream();
1142+
m_PositionFactor = reader.ReadSingle();
1143+
m_EulerFactor = reader.ReadSingle();
1144+
m_ScaleFactor = reader.ReadSingle();
1145+
m_FloatFactor = reader.ReadSingle();
1146+
m_nPositionCurves = reader.ReadUInt32();
1147+
m_nRotationCurves = reader.ReadUInt32();
1148+
m_nEulerCurves = reader.ReadUInt32();
1149+
m_nScaleCurves = reader.ReadUInt32();
1150+
}
1151+
else if (reader.Game.Type.IsExAstris())
1152+
{
1153+
m_nPositionCurves = reader.ReadUInt32();
1154+
m_nRotationCurves = reader.ReadUInt32();
1155+
m_nEulerCurves = reader.ReadUInt32();
1156+
m_nScaleCurves = reader.ReadUInt32();
1157+
m_nGenericCurves = reader.ReadUInt32();
1158+
m_PositionFactor = reader.ReadSingle();
1159+
m_EulerFactor = reader.ReadSingle();
1160+
m_ScaleFactor = reader.ReadSingle();
1161+
m_FloatFactor = reader.ReadSingle();
1162+
m_ACLArray = reader.ReadUInt8Array();
1163+
reader.AlignStream();
1164+
}
11481165
Process();
11491166
}
11501167

@@ -1181,7 +1198,7 @@ private void Process()
11811198
{
11821199
sampleArray.Add(ReadCurve(aclSpan, m_ScaleFactor, ref index));
11831200
}
1184-
var m_nFloatCurves = m_CurveCount - (m_nPositionCurves + m_nRotationCurves + m_nEulerCurves + m_nScaleCurves);
1201+
var m_nFloatCurves = m_CurveCount - (m_nPositionCurves + m_nRotationCurves + m_nEulerCurves + m_nScaleCurves + m_nGenericCurves);
11851202
for (int j = 0; j < m_nFloatCurves; j++)
11861203
{
11871204
sampleArray.Add(ReadCurve(aclSpan, m_FloatFactor, ref index));
@@ -1299,9 +1316,9 @@ public Clip(ObjectReader reader)
12991316
{
13001317
var version = reader.version;
13011318
m_StreamedClip = new StreamedClip(reader);
1302-
if (reader.Game.Type.IsArknightsEndfield())
1319+
if (reader.Game.Type.IsArknightsEndfield() || reader.Game.Type.IsExAstris())
13031320
{
1304-
m_DenseClip = new ArkDenseClip(reader);
1321+
m_DenseClip = new ACLDenseClip(reader);
13051322
}
13061323
else
13071324
{
@@ -1866,6 +1883,11 @@ public AnimationClip(ObjectReader reader) : base(reader)
18661883
m_CompressedRotationCurves.Add(new CompressedAnimationCurve(reader));
18671884
}
18681885

1886+
if (reader.Game.Type.IsExAstris())
1887+
{
1888+
var m_aclType = reader.ReadInt32();
1889+
}
1890+
18691891
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up
18701892
{
18711893
int numEulerCurves = reader.ReadInt32();

AssetStudio/Classes/Mesh.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public VertexData(ObjectReader reader)
155155
m_Streams = new List<StreamInfo>();
156156
for (int i = 0; i < numStreams; i++)
157157
{
158-
m_Streams[i] = new StreamInfo(reader);
158+
m_Streams.Add(new StreamInfo(reader));
159159
}
160160

161161
if (version[0] < 4) //4.0 down
@@ -706,6 +706,11 @@ public Mesh(ObjectReader reader) : base(reader)
706706
int m_CollisionVertexCount = reader.ReadInt32();
707707
}
708708

709+
if (reader.Game.Type.IsExAstris())
710+
{
711+
var m_ColliderType = reader.ReadInt32();
712+
}
713+
709714
int m_MeshUsageFlags = reader.ReadInt32();
710715

711716
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up

AssetStudio/Classes/Texture2D.cs

+4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ public GLTextureSettings(ObjectReader reader)
3939
m_FilterMode = reader.ReadInt32();
4040
m_Aniso = reader.ReadInt32();
4141
m_MipBias = reader.ReadSingle();
42+
if (reader.Game.Type.IsExAstris())
43+
{
44+
var m_TextureGroup = reader.ReadInt32();
45+
}
4246
if (version[0] >= 2017)//2017.x and up
4347
{
4448
m_WrapMode = reader.ReadInt32(); //m_WrapU

0 commit comments

Comments
 (0)